# Payment Frontend Validation Report

**Date:** 2026-07-27  
**Phase:** payment-frontend  
**Backend boundary:** MVP 14.0–14.5 (v0.14.5.0)

## Route validation

```bash
npm run validate:payment-routes
# Payment routes OK (23 MVP routes, 26 features)
```

## Module inventory

| Category | Count |
| --- | --- |
| Feature screens | 26 |
| MVP list routes | 23 |
| Detail routes | 3 (`requests/[id]`, `transactions/[id]`, `merchants/[id]`) |
| Core components (pre-existing) | 5 |
| Hooks | 2 |
| BFF proxy | 1 |

## API wiring

All list/detail screens call `paymentApi` methods against real `/api/v1/*` paths. No mock fixtures.

| Screen | API |
| --- | --- |
| Dashboard / KPIs | `requests.list`, `transactions.list`, `audit.list`, `metrics` |
| Transactions | `transactions.list/get` |
| Ledger | `ledger.list` |
| PSP | `pspConnections.list/test` |
| Merchants | `merchants.*` lifecycle |
| Requests | `requests.list/get/cancel/verify` |
| Callbacks | `audit.list` + `requests` filtered client-side |
| Verification | `requests.verify` queue |
| Bundles / toggles / settings | CRUD list endpoints |
| OpenAPI | `GET /openapi.json` |

## Known gaps

1. **Callback log list** — backend exposes POST callback ingress only; UI derives from audit + `redirect_issued` requests.
2. **14.6+ UI** — refunds, splits, reconciliation not implemented (by design).
3. **Create flows** — list pages are read-focused; POST create forms for workspace/PSP/merchant can be added incrementally.
4. **Permission UI gates** — `usePaymentPermissions` available; per-screen enforcement is soft (403 from API).

## Apps catalog

Torbat Pay registered as `available` → `/payment/hub`.

## Docker env

`NEXT_PUBLIC_PAYMENT_API_URL` + `PAYMENT_SERVICE_URL` added to frontend service in docker-compose.
