Split a change order across suppliers, sign each block

When a change order's line items belong to different suppliers, each supplier block gets its own signature — and the change order sits at 'Partially Signed' until they're all in.

What it is

Line items can carry a supplier_id. Signatures carry the same field: null means the whole change order, a value means that supplier's block. The status math requires every distinct supplier key to have a matching signature before the change order flips to approved; some-but-not-all yields 'partially_signed'. On approval, one draft supplier order is created per supplier group, idempotent on (change_order_id, supplier_id).

Also called: multiple suppliers on a change order · partially signed · supplier split · purchase orders from a change order

See it
New Change Order — Line Items
Line Items+ Add Line
KindDescriptionSupplierQtyUnitUnit PriceTotal
Material12×12 insulated overhead doors (2)Kaufman Door Supply2ea2480.00$4,960.00×
LaborFrame openings, headers, jamb & track installUnassigned18hr68.00$1,224.00×
Credit (subtracts)Delete one 3068 walk door from base scopeUnassigned1ea640.00-$640.00×
Markup %
12
Tax %
6
Subtotal$5,544.00
Markup (12%) + Tax (6%)$1,037.84
Total$6,581.84
Schedule+3 days
The admin viewer with two supplier signature blocks inside the agreement, one signed and one outstanding, and a 'Partially Signed' pill in the header. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
How it works
  1. 1Assign a supplier per line item in the editor (empty is treated as unassigned).
  2. 2The signing modal filters line items and the subtotal to the block being signed, 'so the customer sees the dollar amount they're actually authorizing — not the grand total of the whole CO'.
  3. 3From the portal the customer authorises the whole change order, so one signature row is written per outstanding block — keeping the status math identical to the in-person admin flow.
  4. 4Approval generates purchase orders per supplier; lines with no supplier are ignored because they map to no PO recipient.
Why we built it

Migration 050 introduced the split and the code documents the backward-compatible path: 'Pre-migration-050 callers omit supplierId and the CO has no per-line supplier assignments — blockKeys collapses to a single key, the signature covers it, and the CO flips straight to "approved" same as the old single-signature flow. New behavior only kicks in when the CO actually has multi-supplier line items.'

The problem
  • Multi-supplier scope changes forced into one all-or-nothing signature
  • Manual purchase-order creation after each approved change
  • No visibility into partially authorised changes
Sound familiar?
What you get
Each supplier's portion signed for its own amount
A truthful 'Partially Signed' state instead of a false approved
Purchase orders generated once, per supplier, automatically

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 →