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.

BaseDrift

payout pout_0120
Inbox · ← All decisions
Held — nothing recorded yet
Nothing has been recorded. Call the supplier on the number in our records — never a number in the request — or ask for the rupee.
On hold
Identity checks could not be completed
R5_tier1_inconclusive
Not evidence of fraud — evidence we could not confirm identity. Verify through a channel the requester does not control.
Identity evidence inconclusive: Account holder's name — FAV unavailable — no name evidence. Inconclusive, not clean.; Destination account — new account 269243524677 (payout fund account) — known: ['290585574581', '291658165368', '638370909599']

Verification — what would release this

Ask the supplier to send Rs 1 from this account, and no other:
291658165368
chosen because 291658165368: 2 settled payout(s), added 2024-03-25 via portal, verified by callback
Outcome
Could not reach the supplier
UNREACHABLE
Callback to
9502682418
Number came from
vendor_master — never a number in the request
Attempts
2
Escalated
True
2 callback attempts to 9502682418 (from vendor master) went unanswered. Payout remains held and is escalated for human review. Never auto-released.
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.

Record what you did

Every record below names the person who made it. That is what makes the two-person rule enforceable.
The phone call
Ring the number in our supplier records. Never a number written in the request — a request that can change the account can change the phone number under it.
The rupee
Ask the supplier to send Rs 1 from 291658165368, and no other account. Which account is asked for is the entire control.
Note (optional)
Close the case
Release as Priya Menon: Nothing is verified yet. Record a callback outcome or the rupee arriving before releasing.
Rejecting needs no second person. The two-person rule protects money leaving; refusing to pay releases nothing.

What was checked

Supplier
VEND0070
Destination account
269243524677
Destination came from
The payout itself — the payout's own fund account, never the email [razorpay_fund_account]
Fund account
fa_0120
Amount
Rs 83,329.80
Change request
doc_3cbe30f31d463e6d
Correlated by
Named on the payout [explicit_note]
Evidence source
Read from the message [llm_extraction]
Semantic reading
BENEFICIARY_CHANGE / REPLACE_PAYOUT_DESTINATION / OUTSTANDING_AND_FUTURE

Accounts on file for this supplier

AccountAddedVerifiedSettled
290585574581
HDFC0506053 · active
At onboarding
2024-06-30
Verified at onboarding (KYC)15
payouts
Primary
291658165368
KKBK0919298 · active
Added through the supplier portal
2024-03-25
Verified by a callback2
payouts
638370909599
HDFC0595748 · active
Added because of an email request
2026-05-31
Never verified outside email0
payouts
Never established
This payment is going to 269243524677, which is not one of the accounts above. That is what the destination check reports, and why the payment is held.
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
Unverified
Account holder's name
name_match
FAV unavailable — no name evidence. Inconclusive, not clean.
from Bank account verification
OK
Account can receive money
account_status
account is active
from Bank account verification
OK
GST registration
gstin
07CQZID9027Z1Z4 matches vendor master
from The email, against our records
Concern
Destination account
account_continuity
new account 269243524677 (payout fund account) — known: ['290585574581', '291658165368', '638370909599']
from Payout, against our records

Circumstances — never decisive on their own

result
check
finding
OK
Sender's email domain
sender_domain
primeagrodelhi.com matches known domain
from Email header vs vendor master
OK
Pressure to act quickly
urgency
no urgency language
from Read from the message
OK
Asked to be contacted differently
channel_manipulation
no channel redirection
from Read from the message
OK
Amount against this supplier's usual
payment_pattern
Rs 83,330 within 15% of avg
from The email, against our records

What this maps to at RazorpayX

no API call — payout stays pending while verification runs

Action plans. Nothing in this repository calls Razorpay.