TorbatYar/docs/phases/Payment/phase-14-0-payment-foundation.md
Mortezakoohjani 9fac160258 feat(payment): ship Torbat Pay MVP phases 14.0-14.5
Add independent payment-service (port 8012, payment_db) with foundation licensing, BYO-PSP, merchant accounts, idempotent requests, callbacks, and immutable ledger.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 17:57:04 +03:30

3.6 KiB

Phase 14.0 — Payment Foundation

Field Value
Identifier payment-14.0
Implementation Priority HIGH
Status Complete
Service payment
Version (target) 0.14.0.0
Database payment_db
API Port 8012
ADR ADR-001, ADR-003, ADR-006, ADR-020, ADR-021

Full specification: payment-roadmap.md
Required architecture reads: ADR-021, payment-contracts.md, phase-pay-arch handover

Purpose

Establish Torbat Pay as an independent enterprise microservice foundation including three-layer licensing shells (L2 bundles, L3 toggles), workspace enable/disable, provider assignment shells, and provider protocol stubs — no live PSP or capture flows.

Business Scope

  • Per-tenant payment workspace with enabled / disabled / suspended and default_payment_mode (byo_psp | torbat_pay_merchant).
  • Payment bundle catalog and tenant bundle activation (L2).
  • Feature toggles (L3) for refunds, splits, subscriptions, installments, wallet top-up (reserved).
  • Provider assignment shells for routing without code changes (full routing in 14.1).

Technical Scope

  • Scaffold backend/services/payment; Alembic 0001_initial.
  • Aggregates: PaymentWorkspace, PaymentRole, PaymentPermission, PaymentBundleDefinition, TenantPaymentBundle, PaymentFeatureToggle, PaymentProviderAssignment, PspProviderRegistration, PaymentConfiguration, PaymentSetting, PaymentAuditLog, OutboxEvent.
  • Core L1 client stub: check payment.module.enabled.
  • Provider protocols (stubs): PspAdapter, AccountingClient, CommunicationClient, CrmClient, CoreEntitlementClient.

Dependencies

payment-arch, payment-reg, onboarding-4, ai-framework, Core entitlement

Out of Scope

PSP connections (14.1), merchant onboarding (14.2), payment requests (14.3+), callbacks, ledger

Capabilities

payment.foundation, payment.workspace, payment.bundles, payment.feature_toggles, payment.provider_assignment_shell, payment.psp_registry_shell, payment.audit

Permissions

Per payment-contracts.md §8 — foundation leaves only; bundle-gated leaves registered but inactive until bundles assigned.

Events

payment.workspace.enabled|disabled, payment.bundle.activated, payment.feature_toggle.changed, payment.psp_provider.registered

API Contracts

/health, /capabilities, /metrics, /api/v1/payment-workspaces, /api/v1/bundle-definitions, /api/v1/tenant-bundles, /api/v1/feature-toggles, /api/v1/provider-assignments, /api/v1/psp-provider-registrations, /api/v1/configurations, /api/v1/settings, /api/v1/audit

Data Ownership

Payment sole owner of all foundation tables in payment_db.

Provider Ownership

Adapter interfaces only in 14.0.

Integration Rules

  • L1 Core check before mutating APIs.
  • Inactive L2 bundles hide gated routes from /capabilities.
  • No cross-DB access; no existing service modifications.

Quality Gates

Architecture, tenant isolation, bundle isolation, permissions, migration, dependency, security, docs.

Definition of Done

Service boots on 8012; foundation + licensing shells tested; contracts unchanged from payment-arch.

Future Compatibility

All v1 contracts in payment-contracts.md remain stable; 14.0 tables include fields for region, currency, facilitator mode per ADR-021.