Takeover review and invoice exception queue — Ledger Solutions

Built by Noorflows (noorflows.com) for Ledger Solutions, a practice that keeps the books for other companies. Working system, running on demo data. Every client, supplier, purchase order and invoice is invented.

The takeover review — what a practice is taking on

A new client hands over books somebody else kept. Before the practice can quote for cleaning them up, it has to know what is in there. The review reads the file and sorts what it finds into two halves.

What was read
144 transactions across 18 months, for a client called Harborview Interiors.
Findings raised
8.
Findings the records can settle
4, covering 6 records. Reconciliations, supplier merges, tidying — work the practice can schedule and price by the hour.
Findings only the client can answer
4, covering 13 transactions. Nothing in the file settles these. Each is a question to a person who may take a week to reply.

The second number is the point. Every tool in this category publishes what it found. The count that actually decides how long a cleanup takes, and therefore what it should cost, is how much of it cannot be settled without asking somebody — and that is the number nobody publishes. A quote built on findings alone is a quote for work, with the waiting left out.

How the review was measured

The demo file was built with 8 defects planted deliberately and 5 further things built to look wrong and be right — a supplier that shares a first word with another, a company alongside its subsidiary, an empty holding account, an account reconciled last month, and a large payment that does have its bill attached. The review found 8 of 8 planted defects and flagged 0 of the 5 traps.

Each trap is proven clean by name, not by counting. An earlier version compared how many findings a check raised against how many defects were planted for it and called the surplus a false flag. That is blind to the case that matters: flag a trap and miss a real defect in the same check and the count does not move, so the review reports itself perfect. A test now reproduces exactly that scenario.

Stopping contact, without saying why

A practice that keeps other people's books can be under an obligation not to disclose that it has reported something. The review's output on one side is a list of questions to put to a client, with reminders behind them, and an automatic nudge is exactly the thing that has to stop.

So there is a switch. While it is on, nothing goes out: no question, no reminder, no message. The findings stay exactly as they were and the practice's own work carries on underneath.

It gates the outbound path, not the display
Client-facing questions are produced by one function that takes the hold as an argument. Filtering at the point of display would leave the list reachable by an export or a reminder job added later, and that later path is always the one that matters.
It has nowhere to record why
There is no reason field. A reason field would be filled in with the exact sentence that must not travel, and it would then sit in the store, ride along in every export, and one day be read by somebody who did not know what they were looking at. The reason belongs in the firm's own records.
It records that a hold was placed, and by whom
Written to a trail with no delete and no edit. Who and when, never why.
It does not look for money laundering and cannot tell you whether anything is suspicious
It has no view on that at all. It is a switch that stops us contacting somebody, and a person in the practice decides when to use it.
It does not tell anyone whether to report anything, or to whom, or by when
That decision belongs to whoever the firm has made responsible for it. It is not for us to advise on, and software offering a view would be wrong at the moment it mattered.
It cannot stop a person picking up the phone
It stops the system — the part that would otherwise send something at three in the morning without being asked.

What the review cannot do

It cannot tell whether a payment was for the business
Nothing in a ledger records intent. Where a payment goes to a merchant that could be either, the review says it cannot be settled and stops. It never states that an expense is personal.
It cannot produce a document that is not there
Where the handover records no receipt, the review reports that the handover does not say. It does not treat an unknown as documented.
It cannot say anything about what happened before the handover
Opening balances arrive already wrong or already right, and the file does not show which.
It reads only what it was given
"Nothing was found" and "nothing was searched" are different sentences, and the review is written not to say the first when it means the second.

What the monthly system does

A supplier invoice arrives. If it agrees with what was ordered and with what actually turned up, there is nothing for a bookkeeper to decide, and it posts itself. If it does not agree, it goes into a queue with the reason and the evidence attached, and a person decides.

Nothing is ever paid or blocked automatically. The system's job is to take the invoices that do agree off a person's desk, and to make the ones that do not agree quick to deal with.

The measured number

Posted without a person
74 of 100 — 74%
Stopped for someone to look at
26 of 100
Built to be stopped, and stopped
26 of 26
Built to look wrong and be right, and correctly left alone
8 of 8

This is the straight-through rate: how many invoices needed no human decision of any kind. Accepting a suggested account code counts as a decision, because it is one — counting those as automatic would have produced a much better figure and a dishonest one.

Where the count stops

It covers one stretch of the job: an invoice arrives, it is checked, it is posted to the ledger. Paying it is not included, because no money leaves on this system's say-so. The rate the industry quotes covers a longer run, through to payment being released, so the two are not the same measurement sharing a name. Ardent Partners, benchmarking 212 accounts-payable teams in 2025, put the best-in-class touchless rate at 49.2% counted that longer way. Read against that figure, 74% is not a better result. It is a shorter race, run on a hundred invoices we built ourselves and publish in full below.

What the number deliberately is not

It is not extraction accuracy — how well a machine reads fields off a page. That is a solved problem with public benchmarks and published results in the mid-to-high nineties. Any figure we produced would sit below them and prove nothing about us. What is not solved, and what a bookkeeper is actually buying, is what happens to the invoices that do not simply agree.

What the hundred contained

The mix is ours. We chose how many go wrong and in what way, which makes the rate a property of this test set and not a measurement of anyone's real postbag.

Billed above the agreed price — 4
All stopped.
Billed for more than arrived — 3
All stopped.
A service with no order to match against — 3
All stopped, and routed for approval rather than matching.
Documents that could not be read — 3
All stopped, each with the reason named.
Billed before anything was booked in — 2
All stopped.
An extra line nobody ordered — 2
All stopped.
A printed total that does not match the lines — 2
All stopped.
A supplier with no history to code from — 2
All stopped.
A supplier with too little history to be sure — 2
All stopped.
The same charge re-issued with a new date — 1
Stopped.
The same reference re-typed off a statement — 1
Stopped.
Correct in every way except the account number — 1
Stopped.
A monthly charge repeating last month's amount — 2
Correctly left alone.
The first sighting of an invoice a later one copies — 2
Correctly left alone.
Over the order, but not by enough to be worth a person — 2
Correctly left alone at the client's own setting. Tighten the price tolerance and these are the first to move.
Well over on percent, and worth pennies — 2
Correctly left alone. Only the cash floor saves these; remove it and they stop.

Those last four sit deliberately near a threshold. Without them the tolerances were never exercised at all — every other invoice in the set is either priced exactly on the order or far over it, so moving the settings changed nothing and the rule the whole design turns on went untested.

Those last two rows are the ones worth reading twice. A check that stops them is worse than one that never ran, because a queue full of correct invoices is a queue nobody reads.

The two controls this category expects

Duplicate invoices.
A duplicate is not a duplicate file. Nobody sends the identical document twice — the supplier re-issues it with a new date, or someone keys it again off a statement with a slash and a leading zero added. Both are found. The invoice number has to agree first, once punctuation and leading zeros are set aside; everything else is corroboration. Allowing even one character of slack is wrong here, because invoice numbers are sequential and consecutive invoices from one supplier are one character apart by construction.
Bank details that have changed.
Invoice redirection works by sending a real-looking invoice from a real supplier with one field altered. Every other check passes and the money goes to someone else. This compares the account printed on the document against the one on file, shows both, and asks for confirmation by telephone on a number the firm already had — not one printed on the invoice. It never calls it fraud: suppliers do change banks, and the alert fires the same either way.

What it will not do

It finds no duplicate re-issued under a completely new number.
From the two documents alone that is indistinguishable from two genuine deliveries billed correctly. Telling them apart means checking what actually arrived, which is a person's job.
It checks nothing that was never recorded.
Work nobody raised an order for, or a delivery nobody booked in, cannot be matched — only approved by whoever asked for it.
It guesses at nothing it could not read.
A blurred photograph, a missing second page, handwritten amounts — each is named and the file goes to a person as it arrived. No amount is inferred, because a wrong figure that looks right is posted without anyone looking twice.
It codes nothing on a hunch.
An account code is filled in automatically only where this supplier's own history has settled it three times over with nothing disagreeing. Anything weaker is a suggestion and waits.
It pays and blocks nothing.
Every invoice that stops goes to a person with the reason and the evidence attached.

Where the tolerances sit

A price is questioned only when it is over the order by more than 2% AND by more than $5.00 — both, not either. A percentage on its own waves through hundreds of dollars on a large line; a cash floor on its own turns every small line into an exception. Being billed below the agreed price is never an exception. A part delivery is normal and is not one either; being billed for more than arrived always is, at any size.

Tax is held on the invoice line, not on the header total. One invoice carrying two rates is ordinary, and a system that stores a single tax figure against the total cannot represent it or code it to the right accounts. Money is held as whole minor units throughout, because a floating-point total drifts by a penny and that penny is reported as the supplier's error rather than ours.

Data

The public demo and any live system are separate stores that never touch. No real accounting record is ever copied into the demo, for any reason, including testing. One set of credentials per build; no key that can read across two of them; no personal data in shared logging.


Every rule described on this page — each tolerance, each control, each published figure — is covered by an automated test, and the numbers above are checked against the system's own measurement rather than typed in. Model versions last checked 2026-08-08. Page written 2026-08-08.

The working demo · Noorflows

How this handles your data — where it lives, what we keep, and the independent security reviews we have not had.