Termco
Termco

The Discount Was a Loan

10 September 2026

In February, across a desk, a ready-mix producer's purchasing manager commits to 10,000 tons of 57 stone for the season. In exchange, the price comes down from the $29 list to $26. The supply agreement runs two pages, and paragraph four says the deal out loud: buyer agrees to purchase not less than 10,000 tons between April 1 and November 30. The next morning, somebody types $26 into the rate sheet.

Look at what just happened to that number. The $26 is a price and a promise welded together in one line of a contract, and the rate sheet keeps only the price. It quietly drops the promise, because a rate sheet has a column for dollars and no column for conditions.

From April on, every load that crosses the scale for that customer prices at $26, and every one of those tickets is correct. Keyed right, priced right, invoiced right, paid on time. One ticket, one billable event, exactly as it should be. No single ticket holds the leak. It sits between all of them, at the level where 10,000 was supposed to happen.

The season ends at 7,400 tons

November 30 comes and goes. Nothing happens.

If anyone ran the tally, it would read 7,400 tons. The discount you extended was $3 on every ton they actually took: $22,200, advanced load by load against a commitment that never landed, a few dollars per ticket. Paragraph four even planned for this. Shortfall language is common in these agreements: undelivered committed tons bill at a dollar or two each, or the season reprices to the tier the real volume earned, say $27 at 7,400 tons. At $2 a ton, that's a $5,200 invoice.

It's also the one invoice in your year with no ticket behind it. Your whole billing operation is built on the sound assumption that invoices come from tickets, so an invoice that comes from the absence of tonnage has no machinery to produce it. It doesn't get declined. It never gets proposed.

Nobody's being lazy here. The clerk prices paper, and each piece of paper is right. The salesman who cut the deal checks whether the account is happy, and the account is delighted. The one person who knows exactly where the tonnage stands is the customer's purchasing manager, because watching what he buys is his job. The party that owes the tons is the only party counting them.

Run the same setup in reverse and you can see the shape of it. If your clerk had billed $29 on committed loads, their AP would've called by the second invoice. An overcharge has a motivated auditor on the other side. An unearned discount has nobody on either side, because it doesn't look like an error on any single document anyone handles.

Measuring is not billing

Here's the part your sales lead will fight you on: run the count and put the number in front of the customer even if you never intend to collect a nickel of shortfall.

The standard objection is that a $5,200 shortfall invoice torches a relationship worth two hundred grand a year, and the objection is usually right. Send it or don't. That's a judgment call, and it's yours. But waiving a shortfall you measured is a decision, and it buys things. It buys the October phone call, when the tally reads 5,900 with eight weeks left: you're 4,100 tons short of the number that bought your price, what's coming before the 30th? That call moves real orders while the season can still absorb them. It gets you the waiver letter in December, on paper, that the customer reads as a favor because it is one.

Waiving a shortfall you never measured buys nothing. Nobody thanked you for it, because what happened wasn't generosity. It was a bookkeeping accident with the same cash effect.

February shows you the full cost. Same desk, same purchasing manager, and he opens with volume: we're one of your biggest accounts, we need to see $25.50. If you ran the count, the answer is sitting on one page. At the tons he actually moved, he's been getting a 10,000-ton price on a 7,400-ton account, and the conversation starts from the tier his tons earned, the $27 from paragraph four, not from his number. If you didn't run it, the negotiation starts wherever he says it starts, and the new discount gets stacked on top of an old one the volume never earned. Skip the count two renewals running and the compounding does the rest.

flowchart TD
  A["Supply agreement: 10,000 tons at $26 vs $29 list"] --> B["Rate sheet says $26"]
  B --> C["Every ticket prices at $26, each one correct"]
  C --> D{"Season tally set against paragraph four?"}
  D -- no --> E["Discount turns permanent"]
  E --> F["Renewal starts from the customer's number"]
  D -- yes --> G["Shortfall billed, or waived on purpose"]
  G --> H["Renewal starts from the counted tons"]

Put the promise where the tickets can see it

None of this takes a collections mindset. It takes moving the commitment out of the drawer and next to the tickets it's supposed to govern.

The commitment is reference data: this customer, this product, this window, these tons, this rate, and the list rate that applies when the deal doesn't. The committed rate is a billing rule with the window built in, not a bare $26 on a sheet. Once tickets are digitized as they're captured, the season tally stops being a project: every ton that priced against that rule is already a digitized ticket you can count. And a ticket wearing the committed rate after November 30, or for an account whose commitment lapsed, isn't invoice-ready. It should get flagged the same way a ticket with no job number does. That's the boundary of Termco's part in this: capture the tickets, flag the ones that don't reconcile, hold the commitment and both rates as structured rules and reference data, and assemble invoice totals only from tickets that priced against them. Whether you bill the shortfall stays your call. Whether you know it exists shouldn't be.

The audit costs one afternoon and one drawer. Pull every agreement that traded a rate for a volume, last season's and the ones still running, and write two numbers beside each: tons promised, tons ticketed. You already have the second number somewhere, because every load crossed a scale. If each account came back at or over its commitment, your discounts are earning their keep. Expect at least one that didn't, and expect it to be a big one, because big accounts are exactly the ones that get committed rates.

If you'd rather have a second set of eyes on the ticket side of that count, send 10-20 sample tickets to hi@termco.ai and we'll send back what we find within 48 hours.