Skip to content

Solutions

Control AI that moves money

Refunds, payouts, journal entries and vendor records. Where AI touches finance, OpsAI sets ceilings, requires co-signers and files the evidence.

One refund, against its ceiling

This action

₹18,400 of ₹25,000

Inside the ceiling, so it was authorized in 11ms with no person involved. High risk and allowed are not in conflict — one describes the stakes, the other the outcome.

A bar rather than a number, because headroom is the thing a finance reviewer wants to see.

What is already happening

AI in finance does not read. It moves money.

A copilot that drafts a summary is an exposure. An agent that issues a refund, initiates a payout or posts a journal entry is a different category of thing — the action is irreversible, it lands in a system of record, and somebody has to answer for it at close.

In the sample estate, Finance runs 3 AI systems reaching 3 systems of record, and 2 of the actions they attempt carry an amount that can be refused on size alone. Those are the cheapest actions to govern and the most expensive to have got wrong.

post.journal_entryZoho Books
Governed by close.controls. Refusable above ₹5,00,000 before anything reaches the system.
initiate.payoutRazorpayX
Governed by payout.dual_control. Refusable above ₹2,00,000 before anything reaches the system.
send.emailGmail · customer
Governed by comms.approved_templates. No amount, so the rule is about who and when rather than how much.
Why the amount matters
An action carrying a number can be refused on size alone, with no judgement and no model call. That makes it the first thing worth bounding and the easiest control to explain to an auditor.
The OpsAI console showing the Finance slice of the estate: decision volume over the period, the mix of outcomes, and the median decision latency.
Decisions · 24h
240
Authorized
215
Held for a person
20
Refused
5
Median decision
17 ms
Inference calls
0

Decisions over time

AuthorizedHeld or denied

Decisions per hour over 24 hours in the sample estate. Busiest hour 24, quietest 1.

Outcome mix

Authorized
215
Held
20
Refused
5

The refusals and the holds are the half a finance review cares about, and they are recorded as completely as the authorizations — which is what makes the record usable at close rather than only at audit.

Ceiling by action

post.journal_entry
₹5,00,000
initiate.payout
₹2,00,000

AI systems

3

run by Finance

Policies owned

3

written by Finance

Actions with a ceiling

2

refusable on amount

Median decision

17ms

no model call in the path

IllustrativeThe Finance slice of the OpsAI sample estate, a fictional company.

The separation that matters

Finance writes the ceiling. Another team's agent operates inside it.

This is the arrangement worth having, and it is not one a prompt can produce. The team carrying the risk owns the rule; the team doing the work operates within it and cannot widen it.

Owns the rule
Rahul Menon, Finance
refund.ceiling at v7, published 30 Jun 2026. Finance carries the consequence of a refund, so Finance sets the number.
Performs the action
refund-resolver, Support Ops
A different team entirely. It resolves customer refunds all day and cannot raise its own limit, because the limit is not in its code or its prompt.

Neither team could have arranged this alone. It works because the rule lives outside both of them, is versioned, and is evaluated at the boundary rather than trusted to whoever wrote the agent.

The rule itself

Written the way the team that owns the risk would say it out loud, and evaluated with no model call in the path.

Policies Finance owns

3 policies
Every policy owned by Finance in the sample estate: what it governs, what it says in plain terms, and the version in force.
PolicyGovernsIn plain termsVersion
refund.ceilingissue.refundRefunds are capped per order and per hour, and only against an order the requester actually placed.v730 Jun 2026
payout.dual_controlinitiate.payoutAny payout above two lakh is held until a named person co-signs. The agent never holds both halves of the authority.v312 Jul 2026
close.controlspost.journal_entryJournal entries are bounded by account, by size, and by whether the books for that period are still open.v61 Jul 2026

Where a person belongs

Some actions should not be authorized by one party, human or otherwise.

A payout above a threshold to a payee added this week is not a policy question, it is a second-pair-of-eyes question. The rule expresses that, and the important part is what happens when nobody looks.

Awaiting co-signature

ACT-7644
Risk: Criticalexpires in 240m

Above the dual-control ceiling, so a named person must co-sign. The action has not run and has not been refused. If nobody co-signs within 240 minutes it expires rather than proceeding.

Agent
ap-invoice-agent
Action
initiate.payout
Target
RazorpayX
Amount
₹4,55,642
Policy
payout.dual_control
Clause
above -> hold_for(co_signer: human, ttl: 30m)
Co-signer
Finance · second pair of eyes
Answers for it
Rahul Menon

If approved

  • Moves ₹4,55,642 to RazorpayX.
  • Irreversible once settled.
  • No prior payment to this payee in the window.
  • Passedagent.identityworkload-id · attested
  • Passeddelegation.depth1 ≤ 3
  • Failedamount ≤ ceiling₹4,55,642 / ₹2,00,000
  • Passedpayee ∈ verifiedverified 30 Jul 2026
Illustrative — not a live queue

payout.dual_control

Any payout above two lakh is held until a named person co-signs. The agent never holds both halves of the authority.

Owned by Finance · v3 · 12 Jul 2026

That is what the second pair of eyes is handed: the action, the amount, the checks that ran with the one that failed, the risk grade and the deadline. Not a notification asking for a yes — which is the difference between an approval and a rubber stamp.

A hold expires
It does not queue. If nobody responds inside the window the outcome is a refusal, and the expiry is recorded as its own event with the person who was asked.
The default is no
Which is the correct default for inattention. A queue whose backlog eventually clears has the opposite default and nobody chose it.
The approver sees the evaluation
Not a notification asking for a yes — the amount, the payee, the checks that ran and why a person was needed.
The decision is attributed
A named human, a timestamp, and the policy version in force. An approval nobody can be identified with is not an approval.

Where to start

Write down the ceiling that already exists in somebody's head.

Every finance team has one. It is usually in a prompt, a console setting or a convention, and none of those can be versioned, replayed or handed to an auditor. Making it a policy takes an afternoon.