Change-order lines aren't taxed twice

A change-order line already carries its own markup and tax, so the invoice adds it after tax instead of taxing it again.

What it is

ComputeInvoiceTotals splits the line set in two: taxable subtotal (estimate, manual and adjustment rows) and gross subtotal (change_order rows). Invoice tax applies only to the taxable half; the change-order half is added post-tax.

Also called: double tax · tax on change orders · invoice tax calculation

See it
Change-order lines aren't taxed twice
Prepared for
Ronan Petsch
1140 Ridge Line Rd · Fair Play
Shell package$32,159
Concrete & site$9,337
Doors & windows$6,224
Trim & finish$4,150
Total
$51,870
Signature
The totals footer showing Subtotal, Tax (applied to only part of the subtotal), Total and Balance, with a change-order row visible above it. src/components/invoices/InvoiceEditor.tsx. Sample data — no customer information appears here.
How it works
  1. 1Each line's total is quantity × unit_price.
  2. 2kind === 'change_order' accumulates into grossSubtotal; everything else into taxableSubtotal.
  3. 3tax_amount = taxableSubtotal × taxPct; total = both subtotals + tax; balance = total − paid_amount.
  4. 4Everything rounds to cents at the end, once.
Why we built it

A change order works out its own subtotal, markup and tax before anyone sees it, so the figure the customer approved is already a finished number. Running the invoice's tax rate over that figure again charged the customer tax on tax. Change order lines are now added after tax is calculated, at exactly the amount that was signed for.

The problem
  • Tax being applied twice to a change-order amount.
  • Invoice totals disagreeing with the signed change order.
Sound familiar?
What you get
The amount on the invoice matches the amount the customer signed on the change order.
No manual tax back-out on mixed invoices.

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 →