Payroll Never Loses an Hour
27 September 2026
Technicians don't let payroll short them an hour. They know what they clocked, they read the stub every other Friday, and a light one puts somebody in the office doorway by 8:05 Monday, timesheet in hand. Payroll is the one ledger in your building with a full-time auditor on every line.
The invoice has nobody. Whether that same hour reaches a customer's bill depends on whether it got written on a work order, priced at the right rate, and keyed. Nobody stands in a doorway over that. So the two records of the same Tuesday drift apart, and they only ever drift one way.
Two ledgers, one Tuesday
Take one mobile tech's day and read it off both documents. Call him Dane. He clocks 7:58 to 4:36 with an unpaid half hour at lunch: 8.1 paid hours, in tenths, exactly as the time clock saw them.
Now the work orders. Morning: scheduled service on a delivery fleet's box truck, 2.5 hours written. Afternoon: hydraulic leak on a landscaper's skid steer, 3.0 written. Billed hours for the day: 5.5.
The missing 2.6 went somewhere real. Forty minutes of driving between the two sites. Twenty minutes at the parts counter for a fitting. Fifteen at the shop loading the truck. And two items of a different kind. The landscaper's foreman asked him to look at a mower that wouldn't start while he was there, 35 minutes that ended with the mower running. And the leak itself fought him: a job he wrote up as 3.0 at the tailgate actually let him go at 4:00, not 3:15.
Sort those five against your own terms. Shop time, fine, that's overhead. The parts run, arguable. But the landscaper is a time and materials account, and your rate sheet says travel bills portal to portal on T&M work. The mower was a straight billable repair, requested out loud, delivered, and written nowhere. The 45 minutes the leak ran past the written ticket were work performed on a paying customer's machine. Three of the five were yours. Payroll caught all five. The invoice caught none.
The ticket rounds down and the clock doesn't
The work order gets written at the tailgate, before the day is over, often with the customer's foreman watching. That geography does two things to the hours on it.
First, they cluster. Pull a month of your own labor lines and count how many end in .0 or .5. The time clock writes 3.4 and 2.7; the tailgate writes 3.0 and 2.5, because round numbers feel defensible in front of the person paying, and the rounding runs down, never up. A tech who writes 3.5 for 3.4 hours expects an argument. A tech who writes 3.0 expects a handshake. Do that on every ticket and you've built a standing discount nobody approved, two or three tenths at a time.
Second, the two directions get different lives. Write an hour too many and the fleet manager who watched your truck leave at 2:00 calls by Thursday, and a credit goes out. Write an hour too few, or leave the mower off entirely, and the silence is permanent. Customers who phone about a bill phone because it's high, not because it's light. The stub gets audited by the one person with a motive to catch a short. The gap between stub and invoice has no such person. It isn't on any report. It isn't anywhere.
Put illustrative numbers on it and redo them with your own rates. Four techs, and suppose just half a billable hour per tech per day gets rounded off, talked out, or never written. At a $105 door rate that's $210 a day, about $1,050 a week, and across 48 working weeks it clears $50,000. Every invoice in the stack foots perfectly, because the arithmetic was never the problem. The inputs were.
flowchart TD A["Tuesday: 8.1 clocked hours"] --> B["Timesheet: every hour, in tenths"] B --> C["Paystub: audited by the tech"] A --> D["Work orders: 5.5 written hours"] D --> E["Invoice: 5.5 hours x rate"] A --> F["The other 2.6 hours: travel, parts, shop, the mower, the overrun"] F --> G["The billable share: no line anywhere"]
Every paid hour bills, or it names its reason
Here's the claim to argue about in the shop: on a T&M account, a paid hour is billable until a written rule says otherwise, and an hour billed at zero should need a reason code the way a no-charge load needs a manager's initials. Warranty, comeback, goodwill you chose, travel you decided to eat. Pick from the list or the line doesn't close.
The pushback is real, so take it head on. Customers won't pay to watch a truck drive across town. Some techs stretch. A 0.4-hour line for a carb clean reads petty on paper. Fine. Then decide travel is unbillable, on paper, as a rule, and price the door rate to carry it. Decide small verbal jobs under half an hour ride free, if that's the business you want to run. Every one of those is a defensible policy. What's not defensible is a rate sheet that says travel bills while every tech decides at the tailgate, customer by customer, whether writing it is worth the argument. The pricing decision exists either way. The only question is whether you made it once or your techs make it forty times a week.
Move the decision off the tailgate
The fix is structural, and none of it asks Dane to become a bookkeeper.
Travel terms, labor minimums, after-hours multipliers, and which accounts include travel in the rate are billing rules with effective dates. Which account is contract and which is T&M, and each tech's labor class, is reference data. Work orders get digitized the day they close, and each labor line prices by rule instead of by memory. A labor line at zero with no named reason gets flagged as non-compliant while Dane still remembers the mower and the foreman still remembers asking. Invoice totals assemble only from work orders that cleared. That slice, digitizing the work orders, flagging the lines no rule can price, structuring the billing rules, managing the reference data, assembling the totals, is what Termco builds. Whether travel bills, and whether the mower was a favor, stays entirely your call. It just becomes a call, made once, instead of a habit nobody chose.
One boundary stated plainly: none of that machinery reads your payroll. The comparison between the two ledgers is a test you run yourself, and it costs one afternoon. Pull two weeks of paid hours by tech, set billed hours from the same days beside them, and subtract the shop time you'd never bill anyway. Price what's left at each tech's rate. That number is the spread between the ledger with an auditor and the ledger without one, and it accrues again next week at whatever pace your techs stay busy.
If you'd rather have a second reader on it, send 10-20 sample tickets to hi@termco.ai, work orders with labor lines especially, and we'll send back what we find within 48 hours.
More from the Termco blog.
September 26, 2026
You Hauled the Water
A grain ticket carries the farmer's settlement numbers. A hauling invoice keyed from post-shrink bushels gives away the water your trucks moved.
Read postSeptember 25, 2026
The Brake Job the Contract Ate
Flat-rate maintenance contracts make covered the default on every work order line. The repairs that slide under the rate never bill.
Read postSeptember 24, 2026
The Zone That Rides the Account
Delivered pricing runs on a zone somebody keyed at account setup. Every job since inherits it, and the gap between keyed miles and road miles never bills.
Read post