We built an equipment tracking and billing ledger for a Texas construction contractor. Crews there report equipment moves in their team chat, in plain English. Before the system, the office kept two hand-typed spreadsheet grids, one for owned equipment and one for rented, and those grids decided what each job got charged.
The system reads each crew post as it lands, puts every machine on a job for every day, and marks each day billable or not. It writes the result back into the client's own owned and rented grids. Every week it lays out the journal entry line for line, the way the accountant already posts them.
Software like that is easy to demo and hard to trust. A billing system that is mostly right still produces wrong charges. So before we asked anyone to rely on it, we checked it against the books.
The books are the test
The easy test for an automation is whether it runs without errors. For billing, that tells you very little. The test that matters is whether it reproduces what a careful person already did, on the client's real records.
The client's accountant had already posted journal entries by hand. Those entries are the record the business already works from, so we had the system rebuild them.
It rebuilt all 124 lines of four journal entries, to the cent.
Then we checked the daily record. The system reconciled 28,090 of 28,090 machine-days against the client's workbook.
Both of those checks ran against the client's real records, not samples we made up.
Zero wrong matters more than a high score
The hardest posts are call-offs: the crew messages that stop or restart a machine's charges. Read one wrong and a job is charged for a day it should not be, or not charged for one it should.
We ran the system on 72 real call-off messages. It booked 62 correctly, got 0 wrong, and routed the other 10 to a person.
Then we ran it on a separate set of 47 messages written to trip it up. It got 44 right and 0 wrong.
The number I watch is the zero. A system that books fewer messages itself and asks about more of them is doing its job. A system that books more by guessing is not, because a wrong charge looks exactly like a right one until somebody disputes it.
Asking instead of guessing
That is why the system is built to ask, the same rule our AI agents run on. When a post is unclear, it asks the right person instead of guessing.
Routing a message to a person costs a minute of someone's attention. A wrong charge costs a correction, and it costs some trust in every number the system produces after it. Those are not the same size of cost, and the system is built around that difference.
The set written to trip it up exists for the same reason. Real messages show you how a system does on the kinds of posts you have already seen. Messages written to break it show you how it does on the ones you have not seen yet. A system needs both before it touches anyone's billing.
Keeping the client's format
One design choice made the checking possible. The system writes into the client's own grids and lays out the journal entry the way the accountant already posts it. Because the output has the same shape as the books, the books can check it line for line.
A new format of our own would have meant comparing two different things and arguing about the translation. Matching the format the client already trusts meant the comparison was direct.
It also meant the people already doing this work did not have to learn a new set of documents to use it.
How we run every automation build
This is the standard on every automation we build, not a one-off. We build and test against real cases from the client's business, then check the output against their own numbers before anyone relies on it.
If an automation cannot match the books it is replacing, it is not ready. I would rather find that out on a reconciliation than on an invoice.
The full write-up, with what the system does and the results, is on the portfolio page for the ledger. The way we approach this kind of work is on our workflow automation page. If you have a process like this one that eats your office's week, tell us how it runs today.