Appearance
Production Readiness Report — MyHoreca Pay
Readiness report для beta/UAT и будущего production handoff.
Дата отчёта: 2026-06-24 (обновлено MHPAY-39)
Версия baseline: post MHPAY-42 (live Syrve references), MHPAY-37 (operational flags API/UI), MHPAY-39 (paym acceptance checklist)
Связанные документы: UAT Checklist · Release Checklist · Current State · Roadmap · Agent implementation state
Executive summary
MyHoreca Pay реализует end-to-end pipeline: банковский файл → адаптер → нормализация → match → allocation → Syrve/iiko posting → reconcile/anomaly control. Backend и frontend MVP готовы к beta/UAT на test-контуре при условии выполнения UAT Checklist.
Go для beta/UAT (test contour): Conditional Go — функциональность покрыта mocked/automated tests; live operator evidence на pay.ru.tuna.am ещё не собрана в этой итерации.
Go для MVP production profile (paym.ru.tuna.am): Conditional Go (docs + contracts ready) — в репозитории задокументирован и сверен чеклист PAYM-01..08; live operator evidence на paym не собрана в этой итерации (review/docs-only pass).
Go для production payment write: No-Go — reconciliation на live test был FAIL_RECONCILE; unrestricted production write требует повторного PASS_RECONCILE и signed PAYM gate.
Scope of this readiness report
| In scope | Out of scope |
|---|---|
| Functional readiness операторского pipeline | Полный pen-test production |
| Auth, scoped RBAC, audit | Юридическая compliance Индонезии |
| Bank import quality + duplicates | Все индонезийские банки (только зарегистрированные adapters) |
| Syrve read + gated write | Неограниченный production write |
| Documentation & release process | 24/7 on-call staffing |
Current implementation baseline
Источник: current-implementation-state.md, current-state.md.
| Area | Status | Evidence type |
|---|---|---|
| Layered .NET + React SPA | Implemented | Architecture tests, build |
| Bank import + quality + duplicates | Implemented | Unit tests, Playwright mocked |
| Counterparty matching + rules | Implemented | Unit + controller tests |
| Payment allocation preview/confirm | Implemented | MHPAY-19, 14 allocation unit tests |
| API named DTO boundary | Implemented | MHPAY-21, 189 unit tests |
| Syrve orchestration (connections, sync, postings) | Implemented | Unit + live reports 2026-06-19 |
| Syrve always-on runtime + connection diagnostics | Implemented | Registered Pay-host runtime; connection health; operational-flags deprecated |
| Syrve references live names / cash-flow catalog | Implemented | MHPAY-42; SyrvePaymentReferenceReaderTests |
| paym production acceptance checklist | Documented | MHPAY-39 PAYM-01..08 in uat-checklist |
| Anomalies + notifications | Implemented | API + partial live verification |
| Review queue aggregation | Implemented | Frontend page, no dedicated API |
| Scoped RBAC foundation | Implemented | ScopedRbacTests, scoped controllers |
| Mocked E2E smoke | Passing in CI/local | mhpay-e2e-smoke.spec.ts (mocked) |
Environments
| Environment | Purpose | UI | API | Readiness notes |
|---|---|---|---|---|
| Local / dev | Разработка, docker compose | localhost:5173 (Vite) | Gateway → API | Not verified in this iteration для полного compose smoke |
| Test / staging | Beta, UAT, pilot | https://pay.ru.tuna.am | https://apipay.ru.tuna.am | Pending live UAT evidence |
| MVP production profile | Live Syrve/iiko acceptance | https://paym.ru.tuna.am | same-origin /api | PAYM checklist prepared; live evidence pending (MHPAY-39) |
| Production | Live operators | https://pay.myhoreca.id | https://pay.myhoreca.id/api | No-Go для payment write; read/import UAT не подтверждён здесь |
Конфигурация: deployment/overview.md, environment-variables.md.
Functional readiness
| Capability | Ready for beta? | Evidence | Gap |
|---|---|---|---|
| Login / logout / me | Conditional | Mocked Playwright | Live UAT pending |
| Bank upload (supported) | Conditional | Unit + mocked E2E | Real bank pilot files pending |
| Unsupported file handling | Conditional | Unit tests | Live UAT pending |
| Quality report UI | Conditional | Playwright import flow | Staging not verified here |
| Duplicate review | Conditional | Unit + mocked E2E | — |
| Manual match + rules | Conditional | Controller tests | Live Syrve refs pending |
| Allocation preview/confirm | Conditional | Unit + mocked E2E | — |
| Dashboard / review queue | Conditional | UI implemented | Live counts pending |
| Syrve document sync (read) | Conditional | Live report 2026-06-19 | Staging re-verify pending |
| Payment posting (test write) | Conditional | PASS_WRITE once on test iiko | FAIL_RECONCILE; not on tuna |
| paym deploy acceptance (PAYM-01..08) | Pending operator run | Checklist in uat-checklist.md | Live evidence not collected MHPAY-39 |
| Production payment write | No | Always-on capability with mandatory approval/safety checks | FAIL_RECONCILE blocks Go |
Data readiness
| Topic | Status | Notes |
|---|---|---|
| PostgreSQL schema | Ready | EF migrations in repo |
Migration 20260624120000_CounterpartyMatchExplainability | Pending apply on dev/prod DB | See implementation state |
| UUID v7 policy | Ready | IUuidGenerator |
| Sanitized test fixtures | Ready | No raw bank PII in repo |
| Production bank sample validation | Missing | Local/staging pilot only |
| Backup / restore procedure | Pending | Document in ops runbook; not validated here |
Security / auth readiness
| Control | Status | Evidence |
|---|---|---|
| JWT auth | Implemented | Auth API |
| Permission-based authorization | Implemented | PayAuthorizationPolicies |
| Scoped org/location enforcement | Partial | Many endpoints scoped; legacy path audit open |
| Secrets not in repo | Policy | .env.example only |
| CORS configuration | Configurable | CORS__ALLOWEDORIGINS__* |
| Payment write approval/business/transport controls | Implemented | Workflow, preflight, idempotency, anomaly and scoped RBAC tests |
| Live security review | Not run | No pen-test evidence in this report |
Permissions / roles readiness
См. user-roles.md, permission-matrix.md.
| Check | Status |
|---|---|
Scoped role assignments in GET /api/auth/me | Implemented |
| Upload/match/allocate gated by location permissions | Implemented on key paths |
| Cross-tenant leakage audit for legacy endpoints | Open gap (current-state) |
| UAT with real operator accounts | Pending |
Observability / logging / audit readiness
| Capability | Status | Notes |
|---|---|---|
| Structured logging (ILogger) | Implemented | OpenTelemetry-ready design |
| Audit log API + UI | Implemented | Match, Allocate, posting actions |
| Payment action audit trail | Required by design | Verify in UAT-12 |
| Centralized log aggregation | Unknown | Depends on deployment; not verified |
| Metrics / alerting | Pending | Post-release monitoring in release checklist |
Syrve / iiko integration readiness
| Topic | Status | Evidence |
|---|---|---|
| IikoConnector bridge | Implemented | Live bridge tests |
| Document sync read path | Live tested | 13 docs synced (2026-06-19) |
| Test payment write | PASS_WRITE (once) | write report |
| Reconciliation | FAIL_RECONCILE | Same report |
| Dry-run + approval gate | Implemented | Orchestration docs |
| Critical anomaly blocks retry | Verified once live | Anomaly control tests |
| Production writes | Controlled | Always-on capability; execution requires scoped RBAC, manual approval and full business/transport preflight; live paym not verified here |
Playbooks: syrve-live-test-playbook.md, syrve-test-payment-write-playbook.md.
Idempotency and posting safety
| Mechanism | Status |
|---|---|
| Allocation confirm idempotency key | Implemented |
| Posting idempotency / external payment id | Implemented in orchestration |
| Write requires approval | Every new posting starts in ApprovalRequired |
| Anomaly gate on open critical | Implemented |
| Duplicate write on same document | Partial mitigation via anomaly |
| Transaction type guard on RPC response | Not implemented (known gap) |
Backup / recovery and rollback notes
| Item | Status |
|---|---|
| DB backup strategy | Pending operator documentation — define RPO/RTO per deployment |
| Application rollback | Redeploy previous container image / tag |
| Migration rollback | Review EF migration down scripts before prod; prefer forward-fix |
| Payment incident containment | Stop/scale posting consumers and restrict approved traffic; removed flags are not kill switches |
| Config rollback | Restore prior env + restart API/workers |
Детали выпуска: release-checklist.md.
Known gaps / risks
| Risk | Severity | Mitigation |
|---|---|---|
| FAIL_RECONCILE on live test write | Critical | Phase 4 readback hardening; no prod write |
| No live UAT pack on staging | High | Execute uat-checklist.md |
| No live PAYM evidence on paym.ru.tuna.am | High | Execute PAYM-01..08 after redeploy |
| Tenant scoping audit incomplete | High | Phase 2 backlog |
| Real production bank files not validated | High | Pilot with sanitized copies |
| Production posting authorization procedure incomplete | Critical | Phase 6 |
| Migration not applied on prod | Medium | Release checklist DB section |
| FuzzyCandidate matcher not implemented | Low | Manual match workaround |
| Auth login error anonymous object | Low | Non-blocking for UAT |
Go / No-Go decision table
| Gate | Beta / UAT (test) | Production (read-only ops) | Production (payment write) |
|---|---|---|---|
| Automated tests green | Go (local CI) | Required before deploy | Required |
| Docs portal build | Go (this iteration) | Required | Required |
| UAT checklist executed | No-Go until run | Required | Required |
| Staging smoke (import→allocate) | Pending | Required | Required |
| Syrve reconcile PASS | N/A for import-only beta | Recommended | No-Go until PASS_RECONCILE |
| Security review | Recommended | Required | Required |
| Backup verified | Recommended | Required | Required |
| Payment write authorization | Test only, manually approved | No approved postings | No-Go |
Overall recommendation (2026-06-24): proceed to operator-led PAYM acceptance on paym.ru.tuna.am using uat-checklist.md PAYM section; do not enable unrestricted production payment write until PASS_RECONCILE and signed PAYM gate.
paym.ru.tuna.am — acceptance evidence map (MHPAY-39)
| PAYM ID | Capability | Repo contract verified | Live paym evidence |
|---|---|---|---|
| PAYM-01 | API restart / health | GET /api/health | Pending |
| PAYM-02 | Always-on runtime | registration + probe/sync/dry-run | Pending |
| PAYM-03 | Deprecated DB capabilities ignored | platform settings + org quota + runtime evidence | Pending |
| PAYM-04 | Scope + mandatory approval | queue/approve/audit evidence | Pending |
| PAYM-05 | Connection probe | POST .../test, GET .../health | Pending |
| PAYM-06 | References | GET .../references/accounts, cash-flow | Pending |
| PAYM-07 | UI banners | flags + getSyrveOperationalWarnings | Pending |
| PAYM-08 | Preflight/dry-run | GET .../preflight, POST .../dry-run | Pending |
Required evidence before production
- Completed UAT Checklist with evidence attachments.
- Staging smoke: import → match → allocate → (optional) dry-run posting.
- Repeated PASS_WRITE + PASS_RECONCILE on test iiko (dated report).
- Migration apply confirmation on target PostgreSQL.
- Scoped RBAC UAT (UAT-14) without cross-tenant leaks.
- Backup restore drill (documented result).
- Signed release-checklist.md for production deploy.
- Per-org/per-location production write approval (Phase 6).
Sign-off section
| Role | Name | Date | Decision | Notes |
|---|---|---|---|---|
| Engineering lead | ||||
| QA / UAT lead | ||||
| Operations | ||||
| Product owner | ||||
| Accountant / business |
Report prepared by: documentation iteration MHPAY-39 (repo contract review; no live paym verification in this pass).