Margin can't fall out of the contract total

When the contract has to compute a total from parts, markup is included — a fix for a path that once produced a contract priced at cost.

What it is

The grand total resolves in priority order: the link's total_amount, then the snapshot's grandTotal, and only as a last resort material + labor + markup. The markup term was previously computed and then omitted from that final sum.

Also called: contract priced at cost · missing markup · wrong total on contract

See it
Margin can't fall out of the contract total
Prepared for
Delia Yoder
1140 Ridge Line Rd · Fair Play
Shell package$31,868
Concrete & site$9,252
Doors & windows$6,168
Trim & finish$4,112
Total
$51,400
Signature
Side-by-side totals: material + labor alone versus material + labor + markup, with the margin gap called out. Sample data — no customer information appears here.
How it works
  1. 1grandTotal = link.total_amount || snapshot.grandTotal || (materialCost + laborCost + markupCost).
  2. 2The same value drives {{estimate.total}}, the subtotal (total minus tax), and every payment-stage amount derived from a percentage.
  3. 3The sync-estimate path can override it with the live version's total.
Why we built it

Quoted from the code: 'Markup belongs in the last-resort total. It was computed here and then left out of this sum, so a snapshot missing both link.total_amount and grandTotal produced a contract priced at cost — the builder's entire margin silently absent from a document the customer signs.'

The problem
  • A fallback total that silently dropped the builder's margin
  • Payment stages computed from a wrong total
Sound familiar?
What you get
The contract total can never quietly exclude margin
Stage amounts derive from the correct number

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 →