13.9 Disbursement
Epic overview
Section titled “Epic overview”Move money from the lender to the borrower (or to vendors on the borrower’s instruction) reliably and reconcileably, with every pre-condition checked and every regulator-required disclosure captured.
Disbursement is the single highest-stakes flow in operations — getting it wrong means real money moving incorrectly. The platform must enforce idempotency (no double-payouts), strict checklist gating, and clean reconciliation against the sponsor bank.
User stories
Section titled “User stories”- As an ops user, I want a single screen with every pre-disbursement check status (KYC, sanction validity, KFS acknowledged, mandate active, etc.) for fast review and execution.
- As a maker, I want to create a disbursement instruction; as a checker, I want to approve before execution per the delegated authority matrix.
- As a borrower, I want UTR confirmation within minutes of disbursement via SMS + WhatsApp + email.
- As a co-lender, I want my share to flow into the co-lending escrow on time and be combined cleanly with the originator’s share before payout.
- As a borrower, I want to pay my vendor / supplier directly on disbursement (with explicit consent) without funds passing through me.
- As an ops user, I want returned-funds (beneficiary bank rejected) to automatically reverse the loan booking and trigger a re-attempt or close workflow.
- As an admin, I want to swap payout vendor (sponsor bank API ↔ RazorpayX ↔ Cashfree) via routing config without code change.
- As a finance officer, I want daily reconciliation between sponsor-bank statement and platform’s expected payouts, with exceptions queued.
- As a system, I want idempotency-keyed payout calls so a network failure / retry doesn’t cause double-payout.
- As a CTO, I want a circuit breaker on payout rail vendors so a slow vendor doesn’t block all disbursements.
- As a compliance officer, I want every disbursement audited with pre-disbursement checklist evidence and post-disbursement notifications.
- As an analyst, I want to see the disbursement TAT distribution by channel / product / time-of-day for SLA tracking.
- As an ops user handling a stuck payout, I want clear ageing visibility and one-click escalation to sponsor bank’s API support.
- As a borrower whose bank account fails KYC name-match at penny drop, I want a clear path to update the account and re-attempt.
- As a borrower with split disbursement (own account + vendor account), I want both legs visible with separate UTRs.
API requirements
Section titled “API requirements”Disbursement creation and approval
Section titled “Disbursement creation and approval”POST /v1/disbursements— create instruction. Body:{ sanction_id, amount, to_account_token, to_ifsc, purpose, splits[]? }. Returns{ disbursement_id, status: "pending_approval" }.POST /v1/disbursements/{id}/approve— maker-checker approval. Body:{ approver_id, notes? }.POST /v1/disbursements/{id}/execute— fire to payout rail. Returns{ status: "executing" }.POST /v1/disbursements/{id}/cancel— cancel before execution.GET /v1/disbursements/{id}/status—{ status, utr?, attempted_at, settled_at }.
Pre-disbursement checklist
Section titled “Pre-disbursement checklist”GET /v1/disbursements/{id}/checklist— current checklist status per pre-condition.POST /v1/disbursements/{id}/checklist/override— manual override with deviation reason.
Co-lending escrow
Section titled “Co-lending escrow”POST /v1/escrow/co-lending/fund— request partner funds release.GET /v1/escrow/co-lending/balance— current escrow balance per partner / pool.POST /v1/escrow/co-lending/disburse— combined disbursement from escrow.
Vendor / split disbursement
Section titled “Vendor / split disbursement”POST /v1/disbursements/{id}/splits— define split legs. Body:{ legs: [{ to_account, amount, beneficiary_type }] }.GET /v1/disbursements/{id}/legs/{leg_id}— per-leg status.
Reconciliation
Section titled “Reconciliation”GET /v1/reconciliation/disbursement/{date}— daily recon report.GET /v1/reconciliation/disbursement/exceptions— unmatched queue.POST /v1/reconciliation/disbursement/exceptions/{id}/resolve— ops resolution.
Returned funds
Section titled “Returned funds”POST /v1/disbursements/{id}/returned— capture returned-funds event. Body:{ returned_amount, bank_ref, reason_code }.POST /v1/disbursements/{id}/reattempt— re-attempt after issue resolved.
Vendor routing
Section titled “Vendor routing”GET /v1/admin/vendor-routing/payout.POST /v1/admin/vendor-routing/payout.
Data model
Section titled “Data model”disbursement_instruction,payout_attempt,utr,escrow_movement,disbursement_leg,reconciliation_exception,returned_funds_event.
UI screens
Section titled “UI screens”Ops-facing
Section titled “Ops-facing”- Pending-approval queue with per-disbursement checklist status.
- Approval screen with full sanction + borrower context + KFS link.
- Execute screen with final confirmation + idempotency-key generation.
- Stuck-payout queue with ageing.
- Daily reconciliation dashboard with exception triage.
Borrower-facing
Section titled “Borrower-facing”- Status tracker during disbursement (initiated → processing → completed with UTR).
- Notification with UTR + amount + account masked.
- Vendor routing config.
- Payout-rail performance dashboard.
- Returned-funds analysis.
Backend services
Section titled “Backend services”- Disbursement service — orchestration, checklist enforcement, idempotency.
- Payout adapter with vendor routing, circuit breaker, retry.
- Escrow management — co-lending escrow + own collection / payout accounts.
- Reconciliation service — daily recon of sponsor-bank statement vs platform expected.
- Returned-funds handler — reverse loan booking, trigger remediation.
External integrations
Section titled “External integrations”- Sponsor bank payout API — primary rail.
- RazorpayX Payouts — secondary / aggregator.
- Cashfree Payouts — alternative.
- Setu Bridge — for some sponsor banks.
- Penny-drop service for last-mile bank account verification.
Test cases
Section titled “Test cases”Happy path
Section titled “Happy path”- Pre-disbursement checklist passes → instruction created → approved → executed → UTR captured → loan activated.
- Co-lending disbursement: partner funds into escrow → originator funds → combined payout → single UTR.
- Split disbursement: multi-leg payout; each leg gets own UTR.
- Borrower notification within
2 minutesof UTR capture.
Failure / edge
Section titled “Failure / edge”- Sponsor-bank API timeout → idempotency prevents double-payout on retry.
- Beneficiary bank rejects (account closed / frozen) → funds returned → loan booking reversed.
- Co-lender’s funds not yet in escrow at execution time → disbursement queued.
- NACH not active when checklist runs → block.
- Sanction validity expired between approval and execution → re-sanction or extend.
- Cooling-off opted-in but not yet elapsed → wait.
- Approver lacks delegation for amount → escalate.
Reconciliation
Section titled “Reconciliation”- Sponsor-bank statement matches every executed payout.
- Mismatched amount → exception queue with diff.
- Extra credit in account (returned funds without notification) → flag for ops.
- Missing payout (system shows executed, bank shows none) → urgent escalation.
Edge cases
Section titled “Edge cases”- Borrower changes bank account between sanction and execution → re-do penny drop + NACH; defer execution.
- Vendor in split disbursement has invalid IFSC → entire split fails; partial-success policy decision.
- Co-lender’s funds released into escrow but pulled back due to operational issue → reconcile and re-fund.
- Daily payout volume exceeds sponsor-bank cap → split batches; alternate vendor.
- RTGS cut-off time approaches → mode auto-downgrades to IMPS / NEFT.
- Bank holiday → disbursement queued for next working day per policy.
- Foreign-bank beneficiary (NRE / NRO) — additional FEMA-related checks for transfers above thresholds.
- Borrower in cooling-off period exercises exit — recover principal, refund proportionate fees.
Acceptance criteria
Section titled “Acceptance criteria”- Disbursement latency from sanction to UTR
< 2 hoursmedian;< 6 hoursp95. - Pre-disbursement checklist enforced as hard gate (no bypass without explicit deviation).
- Idempotency on every payout call (verified via chaos test of duplicate API submissions).
- Daily reconciliation exception rate
< 0.5%. - Returned-funds workflow tested end-to-end with bank simulation.
- Co-lending escrow flow tested with at least one partner.
- Vendor failover tested with chaos drill.
- All disbursements audited with checklist evidence and UTR capture.
Compliance touchpoints
Section titled “Compliance touchpoints”- Digital Lending Guidelines — direct flow lender → borrower; vendor payout requires explicit consent.
- KYC MD — KYC valid at disbursement.
- Co-Lending Guidelines — escrow discipline.
- IT MD — secure communication with sponsor bank; idempotency.
- DPDP — borrower notification.