The Poisoned SKU
How one bad vendor bill contaminates a part forever
Weighted average cost is the standard method for valuing parts in this kind of business and it is a sensible one. The danger is that people think of it as a price sitting in a field. It is not. It is the output of a calculation over everything you have ever received, and that changes what happens when you make a mistake.
The version that gets caught
You have 10 condensers on hand at $1,800 each, so $18,000 of value. A bill arrives for 5 more, and someone keys the extended total into the unit price field: $18,000 each instead of $1,800. ServiceTitan now holds 15 units valued at $18,000 plus $90,000, so $108,000, and the weighted average becomes $7,200 a unit. The next job that installs one of these gets costed at $7,200 and shows a catastrophic loss.
This version gets caught, because a job with a negative margin of several thousand dollars gets somebody's attention. Someone voids or corrects the bill. But notice what does not fix itself: the units already consumed at $7,200 were costed at $7,200, and those jobs stay wrong unless you go back and re-cost them. Meanwhile the correction may or may not restore the average to $1,800, depending on how it is booked, because you are adjusting a running calculation and not overwriting a field.
The version that does not get caught, and this is the real problem
Now the same mistake, smaller. The condenser actually cost $2,340 and it was keyed as $2,034. A transposition. The average moves by a few dollars a unit. Nobody notices, because nothing looks wrong. There is no negative margin, no alarm, no investigation. The average simply sits a little bit low, and it stays low, and every job that consumes that part from now until you fix it is costed slightly under.
Then it happens again on a different SKU, and again, over two years, across a few hundred parts. What you end up with is an inventory valuation that is a slow accumulation of small typos, with no practical way to identify which SKUs are contaminated, because none of them look wrong individually. The big error is a bad day. The small errors are the ones that quietly move your gross margin and end up in every job costing report you have. That is the same reason your ServiceTitan job costing does not agree with your general ledger.
The control that catches this is unglamorous and it works: on every receipt, compare the unit cost being keyed against the trailing average for that SKU, and flag anything that would move the average by more than a set percentage. It takes seconds, and it stops the contamination at the door instead of hunting it down two years later.