Delivery_mode is one of separate, split or merge, each with a human label and a blurb: 'Bill it on its own — One standalone invoice. Leaves the agreed payment schedule untouched — the safest option, and the most common'; 'Give it its own payment plan — The change order gets its own titled schedule of payments'; 'Fold it into the payment schedule — Spread across the remaining stages of the agreed schedule. Changes amounts the customer has already seen.' Underneath, divisions let one change order be split into free-form buckets each with its own routing.
Also called: how do I bill extras · separate invoice · add to payment schedule · change order invoicing
- 1Choose a delivery mode on the change order; divisions can split the total into titled buckets summing to the change-order total.
- 2Each division routes independently: separate invoice, a new scheduled payment, or merged into a target invoice.
- 3materializeChangeOrder() turns divisions into real invoices or invoice lines and flips the change order to 'invoiced'; it is idempotent, skipping already-materialised divisions.
- 4Fallback rules are explicit: merging into a non-draft target appends a new scheduled payment; any schedule-dependent routing with no project falls back to standalone.
- 5A trigger keeps the legacy included_in_total boolean in sync so 'the two can never disagree about whether a change order is in the project total.'
Migration 156 explains why a boolean wasn't enough: '`included_in_total` was carrying that meaning implicitly as a boolean, which cannot express "not decided yet" and gave no room for a third option later.' The blurbs exist because the consequences differ — merging 'Changes amounts the customer has already seen', which is a decision a builder should make knowingly.
- One hard-coded billing behaviour for every change order
- Silently changing payment amounts a customer already accepted
- No 'not decided yet' state for billing
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 →