Static snapshot. A frozen copy of the operator dashboard, safe to open anywhere. The buttons below are drawn but inert — recording a verification and being refused the release is a state change, so it runs on the live app: python src/demo.py --serve.
Released
Routine payment — nothing was being changedR2a_no_change_confirmed
Semantic layer read this as a payment follow-up, and the payout destination is confirmed unchanged against the vendor master. 389749432707 (payout fund account) is a known account for this vendor
Verification — what would release this
Ask the supplier to send Rs 1 from this account, and no other:
389749432707
chosen because 389749432707: 73 settled payout(s), added 2024-02-27 via onboarding, verified by onboarding_kyc
Two people, not one. Whoever records the verification outcome must not be whoever releases the payment. A compromised or complicit AP clerk who can do both approves their own request, and the control is theatre. This is enforced when the button is pressed, not only drawn on the screen.
What was checked
- Supplier
- VEND0009
- Destination account
- 389749432707
- Destination came from
- The payout itself — the payout's own fund account, never the email [razorpay_fund_account]
- Fund account
- fa_0081
- Amount
- Rs 15,000.00
- Change request
- doc_70a3bdc3b2c6215f
- Correlated by
- Named on the payout [explicit_note]
- Evidence source
- Replayed perfect extraction [replayed_perfect_extraction]
- Semantic reading
- PAYMENT_FOLLOWUP / NONE / NONE
Accounts on file for this supplier
| Account | Added | Verified | Settled | |
|---|
| 389749432707 AXIS0507186 · active | At onboarding 2024-02-27 | Verified at onboarding (KYC) | 73 payouts | This paymentPrimary |
| 869882785401 UTIB0006409 · active | Added because of an email request 2024-03-15 | Verified by a rupee from the account | 18 payouts | |
| 503912487953 AXIS0398759 · active | Added because of an email request 2025-09-08 | Verified by a callback | 2 payouts | |
| 237977812271 KKBK0205993 · active | Added through the supplier portal 2025-11-10 | Verified at onboarding (KYC) | 28 payouts | |
| 815725785561 SBIN0522276 · active | Added because of an email request 2026-06-19 | Never verified outside email | 0 payouts | Never established |
An account is established once something outside email has confirmed it — onboarding checks, a rupee from the account, a callback — or once it has actually carried a payout. Being on file is not the same thing: an account can be on file because one email asked for it and nobody checked. The engine treats those as unconfirmed rather than as wrong, so they hold rather than reject.
Identity checks — against your supplier records
result
check
finding
OK
Destination account account_continuity
389749432707 (payout fund account) is a known account for this vendor
from Payout, against our records
What this maps to at RazorpayX
POST /v1/payouts/pout_0081/approve
payout released from pending
Action plans. Nothing in this repository calls Razorpay.