๐ฆ CBS Mock Stub
Mock Core Banking System for UPP integration testing. Type a "magic" account number into UPP to get a behaviour with zero setup.
Magic account-number prefixes
| Prefix | Behaviour |
|---|
INV* | Account not found (404) |
FRZ* | Debit freeze (DR) โ payment rejected |
CRF* | Credit freeze (CR) โ reject when used as beneficiary |
LOW* | Tiny balance (1) โ insufficient funds โ RJCT |
ZERO* | Zero balance โ IGNR for split-% scheduled instructions (poller gets 0, skips autoPayments). For immediate instructions use fund-then-drain instead. |
RJCT* | Always RJCT |
PARK* | Always PARK (409) |
FAIL2*, FAIL3* | Fail N times (500) then succeed |
anything else | Healthy ACTIVE account, large balance |
Valid values
Freeze codes: DR, CR, FULL
Payment outcomes: ACSC, ACSP, REVW, PARK, RJCT
UPP-facing routes
GET /api/v1/accounts?accountNumber= | Balance check |
GET /diy-accounts-proxy | Account onboarding |
POST /api/autoPayments | Payment execution |
Admin / tester routes
GET/POST/PATCH/DELETE /admin/accounts[/:id] | Account CRUD |
POST /admin/accounts/bulk | Create many accounts at once |
POST /admin/accounts/:id/outcome | Set payment outcome / failCount |
GET/DELETE /admin/transactions | Audit log of payments UPP sent |
GET /admin/snapshot ยท POST /admin/snapshot/restore | Save / restore full account state |
GET /admin/scenarios ยท POST /admin/scenarios/:name/load | Load a named preset |
GET /admin/validations ยท POST /admin/validations/:id/toggle | List / toggle IL validation rules |
GET /health | Health check |
IL Validation routes
POST /api/v1/validate | Validate a payment โ body: { payments:[...], type:"quick"|"full", isImmediate:true } |
POST /api/v1/validate/bulk | Validate a batch โ same body shape, balance check enabled |
POST /api/v1/lookup | Enrich payment with CBS account details |
Payment field reference (by payment mode)
| Field | Path in payload | NEFT | RTGS | IMPS | IFT | SWIFT |
| Payment mode | PaymentDetails.paymentMode | NEFT | RTGS | IMPS | IFT | SWIFT |
| Amount | amt | โ
| โ
| โ
| โ
| โ
|
| Currency | currency | INR | INR | INR | INR | any |
| Sender account | from.id | โ
| โ
| โ
| โ
| โ
|
| Beneficiary account | PaymentDetails.to | โ
| โ
| โ
| โ
| โ
|
| Beneficiary name | PaymentDetails.accountName | โ
| โ
| โ
| โ
| โ
|
| IFSC | PaymentDetails.ifscCode | required | required | โ
| โ | โ |
| SWIFT BIC | PaymentDetails.swiftCode | โ | โ | โ | โ | required |
| Sender LEI | PaymentDetails.leiUniqueId | โฅโน50cr | โฅโน50cr | โ | โ | โ |
| Receiver LEI | PaymentDetails.beneficiaryLeiUniqueId | โฅโน50cr | โฅโน50cr | โ | โ | โ |
| Debit narration | debitNarration | โ
| โ
| โ
| โ
| โ
|
| Credit narration | creditNarration | โ
| โ
| โ
| โ
| โ
|
| Beneficiary country | PaymentDetails.beneficiaryCountry | IN | IN | IN | IN | any |
| IBAN | PaymentDetails.iban | โ | โ | โ | โ | โ
|
How to request a new validation rule
Tell Claude (via MCP) using this template โ no code needed, Claude writes it for you:
RULE NAME: UPPER_SNAKE_CASE name
DESCRIPTION: What this rule checks and why (plain English)
APPLIES TO:
Path: Quick (A) | Full (B) | Both
Payment mode: All | NEFT | RTGS | IMPS | IFT | SWIFT
CONDITION TO FAIL:
- Field to check: (see field reference above)
- Fails when:
- Exceptions: (e.g. "only when amount > X", "not for reversals")
ERROR MESSAGE: Message shown when the rule fails
EXAMPLE PASS: { amt: 100, PaymentDetails: { paymentMode: "NEFT", ifscCode: "HDFC0001234" } }
EXAMPLE FAIL: { amt: 100, PaymentDetails: { paymentMode: "NEFT", ifscCode: "" } }
Claude calls add_validation โ rule is live immediately, no redeploy needed.
Use list_validations to see all rules ยท toggle_validation to switch any on/off.