Home Use Cases Work Insights About Contact
Back to Our Work

How an Accounting Firm Built Auditable Document Intake with Human Review

Finance3
Open the walkthrough

Six-Step AI Workflow with Human Oversight

Each step shows the workspace, what the AI completed, and what still needs human review.

Steps 4, 5 and 6 need a person. Step 4 is waiting for approval right now. Click it to open the full walkthrough.

Estimates are directional and based on stated assumptions. All names, organizations, and identifying details have been anonymized in accordance with our confidentiality agreements.

The Transformation

How an Accounting Firm Built Auditable Document Intake with Human Review

Before
A person used to sort every arrival by hand.
A person used to key every field off the page.
A person used to run each check against the purchase order.
After
everything that arrived, labelled before anything reads it
every field read off the page, with where it was read from
every check run against the record we already hold
the short queue of things only a person can settle
the ledger record, carrying where every value came from
Executive Summary

Turns whatever arrives as a PDF into clean data, and never lets a field it could not evidence pass as one it could. Written for an org where the record is the point: every extracted value carries the page it came from, every rejection carries a reason, and the only thing left for a person is the handful of documents the rules genuinely cannot settle. Six stations, run as a loop: what station 6 learns changes what station 2 extracts.

What Was Broken

A person used to sort every arrival by hand
A person used to key every field off the page
The real cost
A person used to run each check against the purchase order.

What We Built

Six stations and 15 subagents. Each subagent carries its own tasks and its own refusal.

A4
Arrival Watch
Poll every channel documents arrive on, and stamp each with where it came from
A3
Document Classifier
Classify each arrival as invoice, credit note, statement, contract or form
A2
Field Extraction
Extract the header fields: supplier, invoice number, dates, currency, totals
A2
Table Reading
Extract every line: description, quantity, unit price, tax code, amount
A3
Confidence Scoring
Score every extracted field against the model's own certainty
A3
Vendor Match
Match the supplier to the vendor master by name, tax id and bank details
A3
Three-Way Match
Match the invoice to its purchase order and its goods receipt
A2
Policy Check
Apply the tax rate the jurisdiction and the goods actually call for
A3
Exception Routing
Route each failure to the person who can actually settle that kind of failure
A2
Exception Brief
Summarize each failure in one line a reader can decide from
A3
Ledger Posting
Post the invoice header and lines into the ledger against its cost centre
A3
Payment Guard
Compare each posting against everything paid in the last twelve months
A2
Period Reconciliation
Reconcile posted invoices against supplier statements for the period
A2
Pattern Learning
Group the period's exceptions by what actually caused them
A4
Audit Trail
Assemble the full trail per document: extracted, checked, escalated, answered, posted

How It Runs

1

Document Sorting

Nobody is asked anything here

Agents watch every channel documents arrive on, deduplicate them, and label each one before anything tries to read it. Nothing waits on a person here. A document only reaches somebody when a later station cannot settle it.

2

Data Extraction

Nobody is asked anything here

Agents read every field off the page, attach the coordinates it came from, and score how sure they are of each one. A person sees only the fields that came back short, and only after station 3 has tried to settle them.

3

Record Matching

Nobody is asked anything here

Agents check every extracted document against the vendor master, the purchase order, the receipt and the policy, and show the evidence behind each pass and each failure. A person is not involved unless a check fails in a way the rules do not cover.

4

Case Escalation

A person answers here

Agents assemble each failure into a card that already carries the document, the failing check and the two or three answers a person might give. This is the station where a human works. Everything else exists to keep this queue short.

5

Record Posting

A person answers here

Agents write the settled document into the system of record with its full provenance, and guard the payment run against paying the same thing twice. A person signs nothing here. The signature already happened at station 4, or the checks passed and there was nothing to sign.

6

Period Closing

A person answers here

Agents reconcile the period, turn every exception that happened into a rule or a template change, and write the audit trail nobody has to assemble later. A person signs the period close. That is the one signature in the loop that has to stay human, because somebody must be answerable for the numbers.

Where a Person Decides

Step 4, Case Escalation. Read one line and pick an answer. Open the page only when the line is not enough. your answer is the only way through.
Step 5, Record Posting. Confirm the resend is a duplicate, or release it. Call Fabrikam about the bank change before anything pays. suspicion is enough to hold a payment.
Step 6, Period Closing. Settle the 1,204.00 on the Litware statement. Accept or reject the two template changes, then sign. somebody must be answerable for the numbers.

Operating Model

This changes how work flows through the team.

Role
Responsibility
Case Escalation owner
Read one line and pick an answer. Open the page only when the line is not enough. your answer is the only way through.
Record Posting owner
Confirm the resend is a duplicate, or release it. Call Fabrikam about the bank change before anything pays. suspicion is enough to hold a payment.
Period Closing owner
Settle the 1,204.00 on the Litware statement. Accept or reject the two template changes, then sign. somebody must be answerable for the numbers.

What Transfers, What Must Be True

What transfers
A person is in the loop wherever money leaves or a number becomes answerable. Three of the six stations refuse to proceed on their own, Case Escalation, Record Posting and Period Closing, and those are the three a person carries. Everywhere else the agents run at volume and reach you only when they cannot settle something.
Case Escalation stops for a person, and your answer is the only way through.
Record Posting stops for a person, and suspicion is enough to hold a payment.
Period Closing stops for a person, and somebody must be answerable for the numbers.
Every subagent says what it will not do. 15 of them do.
What must be true in your environment
The agent can read the systems your records already live in. This one reads 22.
Somebody owns Case Escalation and has time for it.
Somebody owns Record Posting and has time for it.
Somebody owns Period Closing and has time for it.

Failure Modes

What breaks this pattern:

✗ The Nearest Number Wins

When a field is missing from the page, the model grabs the closest number instead. That wrong number posts to the ledger and looks exactly like a right one.

✗ Name Match, Wrong Vendor

Two vendors can carry the same name. A match that ignores the tax id sends the payment to the wrong one, and the record says it went to the right one.

✗ Pay First, Recover Later

A doubtful payment goes out anyway. Getting the money back costs more than holding it would have, and sometimes it never comes back.

✗ The Close Hides the Gap

A period closes over a difference nobody explained. The gap surfaces months later in an audit, when nobody remembers the period.

Directional Outcomes

What the agent counts, and the station that counts it.

These counts are the tallies from one monitored run of the agents. They are not monthly or annual totals.

Documents labelled
Counted at Document Sorting
1,284
Labelled wrongly
Counted at Document Sorting
0
Too poor to read, held
Counted at Document Sorting
8
Fields read
Counted at Data Extraction
10,200
Read wrongly
Counted at Data Extraction
0
Fields it refused to guess
Counted at Data Extraction
146
Checks run
Counted at Record Matching
7,704
Failures it let through
Counted at Record Matching
0
Sent to a person
Counted at Record Matching
9
Our measurement policy: We do not publish precise ROI without baseline methodology. Every figure above carries its basis.

What Runs Where

Every step names the subagent that does the work, the record it writes, the thing that raises a question for a person, and what it is allowed to touch. This is drawn from the source, not from a diagram somebody kept in sync by hand.

1Document Sorting
subagentintake-watch
writesqueue/inbound/<doc-id>.json
raisesreject-unreadable
may touchqueue/**, library/** read-only
2Data Extraction
subagentextract-fields
writesqueue/extracted/<doc-id>.json
raisesfield-below-confidence
may touchqueue/**, templates/** read-only
3Record Matching
subagentvalidate-document
writesqueue/validated/<doc-id>.json
raisesmatch-failed
may touchqueue/**, master/** read-only
4Case Escalation
GATE
subagentexception-brief
writesqueue/exceptions/<doc-id>.json
raisesawait-human-decision
may touchqueue/exceptions/**, everything else read-only
5Record Posting
GATE
subagentpost-record
writesledger/posted/<doc-id>.json
raisesduplicate-suspected
may touchledger/**, queue/validated/** read-only
6Period Closing
GATE
subagentclose-and-learn
writestemplates/<supplier>.json, reports/close-<period>.json
raisessign-period-close
may touchtemplates/**, reports/**, ledger/** read-only

Stack

Every system this agent reads or writes.

System
Read at
Stations
the ERP accounts-payable ledger
Record Posting
1 of 6
the SharePoint invoice library
Document Sorting
1 of 6
the Teams approvals channel
Case Escalation
1 of 6
the approval history
Record Posting
1 of 6
the approval policy
Record Matching
1 of 6
the audit log
Period Closing
1 of 6
the buyer and cost-centre owner directory
Case Escalation
1 of 6
the document archive
Record Posting
1 of 6
the exception queue
Case Escalation
1 of 6
the extraction models
Data Extraction
1 of 6
the line-item tables the ERP expects
Data Extraction
1 of 6
the payment run
Record Posting
1 of 6
the period-close report
Period Closing
1 of 6
the purchase order and goods-receipt records
Record Matching
1 of 6
the reporting dashboard
Period Closing
1 of 6
the scanner drop folder
Document Sorting
1 of 6
the shared AP mailbox
Document Sorting
1 of 6
the supplier portal
Document Sorting
1 of 6
the supplier template library
Period Closing
1 of 6
the supplier templates library
Data Extraction
1 of 6
the tax rate tables
Record Matching
1 of 6
the vendor master
Record Matching
1 of 6
Next Step

Want to see if this pattern fits your document processing?

No build commitment·Real samples, not a demo·Estimate in writing