Quote to cash
An order that recalculates itself is not a record of anything.
If a price list changes in November, a March order that recomputes now shows a number the customer never agreed to. And the first anybody knows is a query on an invoice.
So the lines are copied at the moment of agreement, and never computed again.
Becoming an order
Guarded twice, and then frozen.
The quote has to be accepted, and no live order may already point at it — the second refusal tells you to open the one that exists rather than creating a second. The source quote is marked converted with a link back.
Every line is copied verbatim: description, quantity, price, discount, tax, classification code, unit. Not recomputed. The order is a faithful record of what was agreed rather than a fresh calculation that happens to agree today.
- Shipped2 Sep3 of 8 units · DHL 4419-8822-11
- Delivered5 Sepsigned for at the depot
- Returned9 Sep1 unit · wrong rail spec
- Shipped14 Sep6 of 8 units · brings every line to full
- Two states, because they answer different questions —
Where the order is in its life, and how much of it has actually shipped. The second is derived from the lines and is never allowed to change the first.
- Over-fulfilling a line is refused, with the line number —
Not a generic error. The message names which line.
- The first shipment moves the order on —
And a final shipment that completes every line moves it to fulfilled and fires exactly what the manual route would fire — so anything listening stays consistent whichever way it happened.
- Marking it complete early is possible and deliberate —
Refused unless every line is full, unless you override — and the refusal names both options rather than only the obstacle.
Amending
Changing a live order needs a reason, and keeps what already shipped.
A confirmed order can be amended. It takes a mandatory reason, snapshots the entire prior state including what had been fulfilled, and then replaces the lines.
Fulfilled quantities are carried forward and capped at the new quantity — with the trade-off written into the code: somebody who reshuffles the lines is explicitly restating the fulfilment picture, and should know that.
A draft order is refused with a different message telling you to just edit it.
- Renewals clone a completed order —
Quantities zeroed, purchase order cleared, the period required and validated, and the provenance recorded so the document says which order it renews.
- Renewal reminders fire once per window —
At sixty, thirty and seven days out. Exactly once each — a nightly sweep that cannot double-send.
- The document carries the fulfilment log —
Along with the purchase order number and the quote it came from, so the PDF answers the questions an order gets asked.
›What does the customer-facing document contain?
Your letterhead and registration details from the legal entity issuing it, the customer's billing details, a line table carrying the classification code and unit for each line, the amount written in words, a tax summary broken down by code and rate, and remittance details taken from the same account the invoice uses — masked to the last four digits, so a full account number never travels on a quote or an order.
›Does an invoice change the order?
Creating an invoice from an order copies its lines. The order's own state does not currently advance to invoiced or closed — those states exist and are not reached, so a fully invoiced order still reads as fulfilled. Treat the invoice as the source of truth for billing status.
›Can a fulfilment event be backdated?
No. Events are stamped when recorded, so record them as they happen rather than in a weekly catch-up.
›Where is the shipping address?
On the account. An order carries the purchase order number and the expected date; there is no separate ship-to on the order itself.
›Can I see previous versions of an amended order?
Every amendment snapshots the whole prior state with its reason. Reading those back is not yet a screen — the record is being kept ahead of the view of it.