Planning and execution tracking — what is PLANNED
| Capability | Status | Progress | Est. Hours | Assigned To |
|---|---|---|---|---|
|
PaymentRail Enum
5 rail types: card_psp, bank_transfer, open_banking_pis, wallet, manual_settlement
|
Completed |
100%
|
0h | — |
|
RailResult Value Object
Normalized tri-state result: success/pending/failed with safe provider response
|
Completed |
100%
|
0h | — |
|
PaymentContext Value Object
Execution context: tenant, amount, currency, paymentOptionKey, idempotencyKey
|
Completed |
100%
|
0h | — |
|
PaymentRoute + Capability Metadata
Resolved route: rail, provider, mode + supportsAsync, supportsRefund, settlementMode
|
Completed |
100%
|
0h | — |
|
PaymentRailInterface + RouteResolverInterface
Rail execution + status check + route resolution contracts
|
Completed |
100%
|
0h | — |
|
PaymentRailRegistry
Lookup by PaymentRail enum — 5 rails registered
|
Completed |
100%
|
0h | — |
|
Failure Classification Taxonomy
16 failure codes across 4 categories: transient, permanent, configuration, internal
|
Completed |
100%
|
0h | — |
| Capability | Status | Progress | Est. Hours | Assigned To |
|---|---|---|---|---|
|
CardPspRail (wraps existing gateways)
Multi-provider card rail: stub, hyperpay, paypal — no gateway code changes
|
Completed |
100%
|
0h | — |
|
BankTransferRail (skeleton)
Returns pending with reference — awaiting bank API integration
|
In progress |
60%
|
0h | — |
|
OpenBankingPaymentRail (skeleton)
Lean Technologies PIS integration — skeleton returns pending
|
Pending |
40%
|
0h | — |
|
WalletRail (skeleton)
Returns configuration_error — awaiting WalletRepository connection
|
Pending |
40%
|
0h | — |
|
ManualSettlementRail (skeleton)
Admin confirm — returns pending with reference
|
In progress |
60%
|
0h | — |
|
ConfigDrivenRouteResolver
3-level resolution: exact match → defaultMethodKeys → default route
|
Completed |
100%
|
0h | — |
| Capability | Status | Progress | Est. Hours | Assigned To |
|---|---|---|---|---|
|
Idempotency Enforcement (all rails)
Triple-layer: app check + DB ON CONFLICT + WHERE status guard. Pending included in duplicate detection.
|
Completed |
100%
|
0h | — |
|
Outbox Delivery Guarantee
Transactional outbox with payment_rail, payment_provider, idempotency_key in all events
|
Completed |
100%
|
0h | — |
|
Reconciliation Worker
Polls pending executions, calls checkStatus(), transitions pending→completed or pending→failed
|
Completed |
100%
|
0h | — |
|
Webhook Handler
Generic /api/v1/billing/webhook/{provider} — idempotent, signature-ready, confirmation/rejection dispatch
|
Completed |
100%
|
0h | — |
|
DB Immutability Enforcement
Trigger v2: terminal row protection, valid transitions only, processing→pending allowed for async
|
Completed |
100%
|
0h | — |
|
Structured Observability
billing.execution.result + billing.rail.execution events with duration_ms, rail, provider, correlation_id
|
Completed |
100%
|
0h | — |
|
Failure Classification Discipline
All failures map to PaymentFailureCode enum — no raw strings, no exception leaks
|
Completed |
100%
|
0h | — |
| Capability | Status | Progress | Est. Hours | Assigned To |
|---|---|---|---|---|
|
HyperPay Live Connection
Connect HyperPayGateway to actual API — MADA, VISA, Mastercard
|
Pending |
0%
|
0h | — |
|
Bank Transfer API + Reconciliation
Connect bank transfer rail to bank API + webhook/batch reconciliation
|
Pending |
0%
|
0h | — |
|
Open Banking PIS (Lean Technologies)
Connect Open Banking rail to Lean Technologies PIS API
|
Pending |
0%
|
0h | — |
|
Wallet Reserve/Debit
Connect WalletRail to WalletRepository for reserve → debit flow
|
Pending |
0%
|
0h | — |
|
CTC-backed Route Resolver
Replace ConfigDrivenRouteResolver with CTC-backed resolver reading from contract_term_attrs
|
Pending |
0%
|
0h | — |