Skip to main content
A payout agent moves money out of the platform on behalf of a treasury lead. The lead may delegate a bounded slice of that authority to the agent, the agent may never widen it, and every payout above the desk limit still needs a second person before it runs.

The policy

Authority and policy are separate axes. The grant says the lead may propose payouts to €100,000 and may delegate; the policy says anything above €10,000 needs a human, whoever asks.
runnable

The code

runnable file=main.py

What the agent sees

The maker is the agent, the checker is whoever answers the approval, and the delegation is what bounds the maker. ctrlrun revoke dlg_… cuts it with one write.

The receipt

runnable
Each receipt names the principal and, for the checked payout, the approver. The refusal for €40,000 is an AUTHORITY_DENIED event with no approval request behind it: authority runs first, and a denial there never leaves a pending request.

When an AMBIGUOUS appears

A payout whose confirmation was lost is AMBIGUOUS. Ask the bank by reference, then ctrlrun resolve payout:ops-eu:inv-N --committed or --failed. Never re-send on a guess.

Next