Bill the number the customer actually signed

When a fully-executed contract exists, its price — parsed from the literal signed document — outranks the live estimate for invoicing.

What it is

A three-level authority chain. The approved estimate link's frozen snapshot beats the live estimate; a fully-executed contract for that same link beats the snapshot. The contract's total is read out of the frozen rendered_body — the exact text that was signed — rather than recomputed, because anything recomputed can drift again.

Also called: contract price vs estimate price · billed the wrong amount · signed total · estimate changed after signing

See it
Bill the number the customer actually signed
Prepared for
Marlin Hoover
1140 Ridge Line Rd · Fair Play
Shell package$30,411
Concrete & site$8,829
Doors & windows$5,886
Trim & finish$3,924
Total
$49,050
Signature
The estimate sidecar showing '+ Customer Total $34,016.87' where the live estimate reads a different figure, with the amber drift banner directly above it. src/components/invoices/InvoiceEditor.tsx. Sample data — no customer information appears here.
How it works
  1. 1Look up the newest approved estimate_links row for the job and take its frozen snapshot (materials, labour, markup, total, payment stages).
  2. 2Look up the fully-executed contract bound to that specific link id and parse 'Total Project Price' out of its rendered body.
  3. 3The signed total becomes the invoice's grand total; the estimate total travels alongside it so the gap can be shown.
  4. 4If no contract exists, the approved snapshot stands; if no approval exists, live sources are used.
Why we built it

Invoices were priced off the live estimate, which keeps moving after the customer signs. On one job the approved estimate read $37,828.19 while the contract the customer had actually signed read $34,016.87 — the estimate had been edited after the contract was drawn — so the bill went out at a number nobody had ever agreed to. Once a contract is fully executed, its frozen figures are what the invoice prices from, and a later estimate edit no longer overrides a signature.

The problem
  • Invoicing at a price that moved after the customer signed.
  • Two documents (estimate and contract) disagreeing with no rule about which wins.
Sound familiar?
What you get
The invoice can always be defended against the signed contract.
Post-signature scope changes are surfaced instead of being quietly billed.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →