Blog ·

A price isn't a number: it's a recorded decision

The field is called 'price' and it holds a decimal. That's the simplification that makes quotes impossible to explain three months later.

The field is called price and it holds a decimal. That’s the simplification that makes quotes impossible to explain three months later.

What actually determines the number: which price list, which customer and whatever agreement they have, the quantity, the currency and its rate on the day, the tax treatment of that customer and that product, and any discount someone applied by hand — with its reason.

Two things follow, and the second is the one people skip.

The price on a document is frozen

When a quote is issued, the numbers are what they were that day. If the document recomputes from current lists every time it’s opened, a quote sent last month shows different numbers to the customer than to you. Documents store their own line values, always.

And the reason is frozen with it

Storing 4,200 tells you what was charged, not why. Which list, which discount, which rate — because someone will ask, and the alternative is reconstructing a decision from data that has since changed.

In our system, a manual discount carries the reason it was given. That field has settled more arguments than any report.

Two more that come up constantly

Taxes are per customer and per product together, so a single “with or without tax” flag runs out quickly.

Foreign currency needs the rate and its date stored on the document, not looked up later — otherwise the same document is worth different amounts depending on when you open it.

The pattern, in one line: a computed value on a document isn’t a cache — it’s the record of a decision.