Contract pricing without spreadsheets: per-customer price lists that enforce themselves
Ask a distributor where their customer pricing lives and the honest answer is usually "a few places": a master price list in the system, a spreadsheet of negotiated exceptions, a rep's notebook of side deals, and a veteran CSR's memory. Each account's real price is the intersection of all four — and the invoice is where you find out whether the intersection was computed correctly today.
How pricing ends up in spreadsheets
Nobody plans it. A good account negotiates a fixed price on their top items — that becomes a tab. A buying group brings its own price file — another tab. A promo runs for six weeks — a highlighted column that outlives the promo by a year. Legacy systems make per-customer rules hard enough to enter that the path of least resistance is always "just fix it on the order." Five years later, pricing is a craft skill practiced at order entry, and the two people who know it can never be sick in the same week.
What the spreadsheet actually costs
- Credits. Every mispriced invoice becomes a call, a credit memo, and a reprinted invoice. Distributors routinely eat this as a cost of doing business; it's really a cost of where the pricing lives.
- Silent margin leaks. The negotiated price that never got a review date keeps shipping at 2023 economics. When a contract price has no expiry and no owner, it only ever moves in the customer's favor.
- Trust erosion. Accounts notice when the same case prices three ways in three weeks. The customer starts auditing every invoice — and an account that audits you is an account halfway out the door.
- Onboarding drag. New CSRs take months to become safe at order entry, because the pricing isn't in the system — it's in the folklore.
What "self-enforcing" pricing means
The fix is structural, not disciplinary: pricing rules live in the order system, attached to the customer, and apply themselves at order entry — every channel, every time. Concretely, that takes four capabilities:
Contract prices per account, with start and end dates, so a negotiated number is a record with a lifespan instead of a cell with no history. Volume breaks that compute from the order itself — nobody at entry should be deciding whether an account "usually qualifies." Promo windows that start and stop on their own dates, so the six-week deal is incapable of lasting fourteen months. And one pricing engine for every channel — the price is identical whether the order arrives by phone, through the customer portal, or as an EDI 850, because it's computed from the same rules, not re-keyed by a different person.
Do this and the downstream documents fix themselves: the order confirmation, the invoice, and the customer's expectation all agree, because they all came from one computation. Credits fall, disputes fall, and pricing reviews become a report ("which contract prices expire this quarter, and what's the margin on each?") instead of an archaeology dig.
The migration is smaller than it looks
Distributors put this off because the spreadsheet feels irreplaceable — but the spreadsheet is the requirements document. Each tab is a rule type; each row is a contract price with an account, an item, a number, and (now) a date. A guided import turns the folklore into structure in days, not months. The hard part was never the data entry; it was having a system on the other side that could hold the rules.
DistroLync OMS was built with per-customer contract, volume-break, and promo pricing as first-class records — applied automatically at order entry across the portal, EDI, and rep-entered orders alike, and flowing straight through to invoices that match. Bring us your ugliest pricing tab — converting it is usually the most satisfying hour of the walkthrough.