Coding Accuracy Is Decided Before the Invoice Reaches the Books
Job costing reports get questioned in management meetings all the time. The usual response is to look harder at the report, or to question whether the bookkeeping is being done properly.
In most cases the bookkeeping is being done exactly as well as the information allows. The problem sits upstream.
The decision nobody sees
Every supplier invoice that enters your system requires at least two judgements: which expense account it belongs to, and which job it should be allocated against. In a business running thirty live jobs and four hundred invoices a month, that's eight hundred judgements.
The person making them is working from what's on the invoice. If the invoice says "supply and delivery — materials as discussed, $4,280" with no purchase order reference and no site address, they have three options. Guess from the supplier and the timing. Use a general account and move on. Or hold it and ask.
Guessing produces a number that looks precise and isn't. General coding removes the cost from job level entirely, which means your job report understates cost and overstates margin. Holding it means the cost lands two weeks late, in the wrong period, after the report was produced.
None of these are bookkeeping errors in the ordinary sense. Every one of them is the rational response to incomplete information.
What it does to your reporting
The effect compounds in a specific way. Coding errors are rarely random — they cluster around the jobs and suppliers with the loosest paperwork.
That usually means the fast-moving jobs, the small urgent works, and the suppliers you deal with by phone. Those are frequently the jobs where margin is tightest and visibility matters most.
So the jobs you most need accurate costs on are the ones most likely to have inaccurate costs. The clean, well-documented, well-run project reports beautifully. The messy one — the one that's actually losing money — reports something between plausible and meaningless.
Then a decision gets made on that report. A job type gets repriced. A client gets treated as profitable. A crew gets assessed on a number that was never real.
The fixes are procedural, not technical
This is not solved with better software. Every accounting platform in common use handles job allocation adequately. It's solved by ensuring the information arrives with the invoice.
Make the purchase order the control point. Every PO carries a job number. Every supplier is instructed — once, in writing, when the account is set up — to quote the PO number on the invoice. No PO, no payment. That last part is the only bit that requires discipline, and it holds because suppliers adapt fast when payment depends on it.
Give site people the ability to raise POs. The most common reason POs get skipped is that raising one is slower than making the phone call. If a supervisor can raise a PO from their phone in thirty seconds, coverage improves immediately. If it requires an email to the office and a wait, they'll order the material and sort it out later.
Run an exception list weekly. Not a full review — a short list of anything uncoded, coded to a holding or general account, or coded to a job that has already been closed. Ten minutes, with someone who knows what's happening on the ground. Most exceptions resolve in a sentence.
Close the loop with the coder. When a correction is made, the person who coded it should know why. Otherwise the same judgement gets repeated next month with the same result.
Why this belongs in the bookkeeping conversation
Bookkeeping is usually assessed on whether the books balance and whether they're up to date. Both matter, and neither tells you whether the numbers can be used.
Coding accuracy is what makes the difference between a set of books that reconciles and a set of books that answers questions. It's the point where a transaction stops being a payment and becomes management information.
It's also the cheapest thing to fix in the whole finance function, because it costs almost nothing to change and improves every report sitting above it.