The Ticket Says Tons, the Contract Says Yards
19 August 2026
A scale ticket comes off the printer: 23.9 tons of screened sand, truck 8, headed to a subdivision job. The customer's contract prices sand at $19.50 per cubic yard, delivered. Somewhere between that ticket and the invoice, somebody has to divide.
Ask who does the dividing and you'll get an answer fast. It's the billing clerk, and the number is 1.35, and it's been 1.35 for years. Ask where 1.35 came from and the room gets quieter. A laminated card by the keyboard. A cell in a spreadsheet someone built two office managers ago. Nobody's job description includes owning that number, and no document in the building says when it was last checked.
Here's the position worth arguing about: that conversion factor is a rate, as surely as the price printed in the contract. Move it 5% and every invoice for that product moves about 5%, in the opposite direction, same as if you'd repriced the deal. Your customers sign rate sheets that somebody negotiated and somebody dated. Meanwhile the divisor that sits between their signed price and their actual invoice lives on a laminated card, and it gets none of that treatment.
One factor, two materials
The card says 1.35 because somebody once needed a tons-per-yard number and 1.35 sounded right for gravel. Then it got applied to everything on the product list, because one number is easier to remember than nine.
But dry screened sand doesn't weigh what wet crusher run weighs. Run a hypothetical with round numbers. Your dry sand actually runs about 1.25 tons per yard. A customer takes 880 tons of it in a week. Divide by the card's 1.35 and you bill 651.9 yards. Divide by the true 1.25 and they received 704 yards. That's 52 yards a week you delivered and didn't bill, worth about $1,016 at $19.50. Left running, call it $53K a year, on one product, for one customer, with every single ticket present and correctly keyed.
Now flip it. Wet crusher run can push 1.5 tons per yard. Same 880 tons through the same 1.35 factor bills 651.9 yards when the customer received 586.7. You've overbilled 65 yards, and this error doesn't stay quiet. A contractor's engineer measures the stockpile, does the math you didn't, and calls. Now there's a credit memo and a customer who audits every invoice you send for the next year.
One number, wrong in both directions at once. And the detection is lopsided in the worst way: the version that costs you money is silent, and the version that costs the customer money is loud. A blanket factor fails systematically, product by product, in whichever direction that product's density sits relative to the card.
flowchart TD A["880 tons dry sand, true density 1.25 t/yd"] --> C["Card says: divide by 1.35"] B["880 tons wet crusher run, true density 1.5 t/yd"] --> C C --> D["Billed: 651.9 yd each"] D --> E["Sand: 704 yd delivered, 52 yd never billed, silence"] D --> F["Crusher run: 586.7 yd delivered, 65 yd overbilled, dispute"]
A yard of sand is not a weight
There's a second problem underneath the first, and it surfaces the moment someone defends the card: even a correct factor is only correct on the day you measured it.
Sand holds water. The same stockpile that ran 1.25 tons per yard in a dry August can carry 10% more water weight after a wet spring. The customer is buying volume. The volume didn't change. But your scale weighs the water, your factor doesn't know it rained, and the billed yardage drifts up. In effect you're charging more per yard in wet months and less in dry ones, and nobody decided to do that. Grain elevators handle the same physics right on the face of the ticket: test weight and moisture, printed per load, because nobody trusts a standard bushel to be standard.
The common objection goes: we've billed on 1.35 for two decades and nobody's complained. Read that claim against the lopsided detection above. Your underbilled customers have no reason to complain and no way to notice. The absence of complaints is evidence the overbilling side is small. It says nothing at all about the other side, and the other side is yours.
The unit belongs in the billing rule
None of this gets fixed by asking the clerk to be more careful. The clerk is doing arithmetic correctly. The inputs are ungoverned.
A billing rule that says "screened sand: $19.50 per yard" is incomplete if your tickets arrive in tons. The complete rule names the conversion as part of the price: $19.50 per cubic yard, converted from tons at 1.25 for this product, effective this date, next review scheduled. Written down, per material, with an owner. At that point the factor stops being folklore and becomes reference data, maintained the way you'd maintain the rate itself, because financially it is the rate.
Two consequences follow. First, a ticket whose unit doesn't match its rule's unit isn't invoice-ready, and it should get flagged and held the same way a ticket with a missing job number gets flagged, instead of being silently divided by whatever's on the card. Second, factor changes become visible events with dates, so when the sand supplier changes or the pit hits a wetter seam, the change shows up in a record instead of in a clerk's head.
You can hold your process to a simple standard here: could someone outside the company, given your tickets and your written rules, reproduce this month's invoices to the penny? If reproducing them requires the laminated card, the card is part of your rate sheet. Treat it like one.
This is the kind of thing Termco structures: billing rules that carry their units and conversions explicitly, reference data with owners and dates, and tickets that get flagged when they don't match instead of quietly converted. The check itself costs one afternoon, whoever runs it: a known volume of one product on the scale, compared against whatever number your office divides by.
If you'd rather have a second set of eyes, send 10-20 sample tickets to hi@termco.ai and we'll send back what we find within 48 hours.
More from the Termco blog.
August 18, 2026
Your Best Month Is Your Leakiest Month
Ticket leakage concentrates in peak weeks, when volume spikes and back-office attention collapses. A record month is where the misses hide.
Read postAugust 17, 2026
Your Rate Sheet Has a Date on It
Every ticket should bill at the rate in force on its date. Escalators nobody invoked and rate sheets nobody retired are where that fails.
Read postAugust 17, 2026
One Pricing Clause, Two Invoices
A tiered pricing sentence has two defensible readings that differ by a fifth. Your billing config picked one of them. The contract may not agree.
Read post