One at-need contract followed from GPL to reconciliation. Package selection, removable toggles, à la carte, the discount, a void-and-recreate, and the close gate.
The Henderson family. A standard cremation. The contract is signed at arrangement on Monday. Tuesday morning prep discovers a pacemaker, so Sophie voids the Monday contract and authors a fresh one that includes the removal charge; the Hendersons sign the successor. The case closes on the following Monday once services rendered are reconciled against the in-force contract, with one post-signing addition captured on the reconciliation invoice.
gpl_line_items row whether it appears here in Standard, in another package within this GPL, or à la carte, and it carries a single price (gpl_line_items.unit_price) wherever it is used. A package is a grouping of line items: the join (gpl_package_line_items) records membership — quantity and a removable-vs-structural flag — and no price, so the package total is the sum of its members ($3,350.00 here). Cross-package reporting (“how often did Kearney bill Local Transfer this quarter?”) is a single GROUP BY gpl_line_item_id within the GPL.
Sophie picks Standard Cremation from the package list filtered by disposition type. The platform materialises seven line items at source_type = package_base, each carrying a snapshot of the line item’s label, descriptor, and price (gpl_line_items.unit_price); the join records only membership.
Sophie toggles “Urn — Standard” off. The platform writes a new line at source_type = package_removed with a negative line_total. The original package_base row stays in place, visible with strikethrough.
Both rows persist so the audit trail records both what the package included and what the family opted out of. The snapshot-pricing rule on contract line items is what carries the original package-context price forward even if the catalogue changes later.
The family wants a death-notice placement and a second hour of memorial coordination. Both land as source_type = ala_carte, snapshot-priced from the gpl_line_items.unit_price catalogue. The package discount, when it lands, will not touch these — à la carte is outside the package.
The Hendersons are a three-generation Kearney family. Sophie enters a 20% discount with a captured reason. Because 20% meets Kearney’s discount_approval_threshold_percent of 15%, the platform refuses to save until an approver is recorded. Sophie taps David; he countersigns from his desk.
The discount is a structured property of case_contracts, not a line item. It applies only to the package portion. The à la carte items above are untouched.
Per the contract’s fixed computation order (§6.5): package subtotal, then the package discount, then the à la carte subtotal, then tax, then the contract total. Each total is recomputed on every change.
Tax is computed from the line items, not entered by hand: each GPL line item carries its own PST / GST / HST rates, so the platform sums tax across the contract’s lines (death certificates non-taxable, services GST, merchandise PST). (OQ-0099, resolved.)
The signing surface generates the contract PDF from the structured rows. The Hendersons sign through DocuSign on the tablet in the arrangement room. The envelope returns; the signed PDF lands in S3 through the existing Storage:: service; case_contracts.status flips to signed; signed_at, signed_by_id, and case_document_id are written.
The contract_execution document_gate module’s precondition (status = 'signed' and contract_total > 0) is satisfied. The workflow can proceed.
Rob, the licensed embalmer, examines the remains and discovers a pacemaker not in the intake records. The medical_device_check module records the removal as required before cremation. The device removal itself is service delivery; the resulting fee is a contract concern.
Because the family agreed to a contract that didn’t include the pacemaker-removal line, Sophie voids the Monday contract per ADR-036 D1. The case_contracts row transitions to status = 'voided', with voided_at, voided_by_id, and void_reason captured. The row is retained in full — every line item on it, the signed PDF, and the Layer 2 audited trail all stay. It is history, not deletion.
contract_execution gate (a one-time gate per ADR-036 D3); case flow continues while the successor is being authored.
Sophie authors a new case_contracts row against the same case — the standard cremation package materialised fresh from the GPL, plus the à la carte pacemaker removal line at $150. The successor does not pre-fill from the voided predecessor (ADR-036 D1’s no-pre-fill principle); Sophie walks the package selection again. Tax computes on the new totals; the family total lands $168 higher than Monday’s.
Martha countersigns via DocuSign from her phone over coffee — a full contract signature, not an amendment page. The row transitions draft → signed, with signed_at and signed_by_id populated. There is no re-signature threshold in the ADR-036 lifecycle; the fresh contract is signed as a whole through the ordinary signing surface. The partial unique index on (case_id) WHERE status != 'voided' now points at this row.
After disposition completes and asset_terminal_check passes, the service_contract_reconciliation module activates. The platform pulls every case_services_rendered row with reconciled_contract_line_item_id IS NULL and reads them against the in-force contract (the Tuesday successor). Three rows remain unreconciled. Per ADR-016 Rule 5, this is Contract Management reading Layer 4 across an aggregate boundary; per ADR-036 D6, unresolved services no longer write back as contract amendments — they resolve via match, mark-no-charge, or capture on the reconciliation invoice.
| Service rendered | Source | Resolution |
|---|---|---|
|
Pacemaker removal
module_completion
|
medical_device_check completed Tue 09:30 |
Match to existing line item.
Already covered by the à la carte pacemaker-removal line on the Tuesday-signed successor contract (§4).
reconciled_contract_line_item_id is set to that line as a historical breadcrumb per ADR-036 D6. No contract change. |
|
After-hours family meeting — 1.5 hours
manual_director_entry
|
Recorded by Sophie Thu evening, never quoted |
Capture on reconciliation invoice.
A post-signing addition Sophie chose not to void-and-recreate the contract for. A reconciliation-invoice line captures the meeting at $245 with a linkage back to the source
case_services_rendered row. The service’s reconciled_contract_line_item_id stays NULL; the invoice-side linkage is the completion marker. Per ADR-036 D6, this replaces the retired “add as amendment” path. |
|
Florist vendor coordination — 30 min
manual_director_entry
|
Sophie’s note — “should have been in the quote” |
Mark as no-charge.
Director judgment: comped due to quoting error. Captured note explains why. The package discount is unaffected — no-charge is a per-service reconciliation outcome, not a discount mechanism.
|
case_services_rendered row for this case is either matched to a contract line item, marked no-charge, or captured on the reconciliation invoice — and every post-signing at_cost overage on the in-force contract has an accompanying reconciliation-invoice line. The case_close module’s precondition is satisfied. The case closes.
gpl_line_items.unit_price) on the GPL version in force the date the contract was created. A regulator asking “what was the disclosed price for memorial coordination on this date?” has a deterministic answer.case_contract_line_items rows are what answer business questions like “every case this quarter that included a death-notice placement” without opening a single PDF.case_contracts row is authored on the same case, priced against the currently-active GPL (D5) and signed as a whole. A partial unique index on (case_id) WHERE status != 'voided' enforces one in-force row per case; voided rows are retained indefinitely. There is no re-signature threshold; there is no amendment entity.case_services_rendered) records what was delivered — automatically from modules, manually from directors. At close, every row resolves: matched to an existing line, captured on the reconciliation invoice (post-signing overages and additions that didn’t warrant void-and-recreate, per ADR-036 D6), or marked no-charge with a captured reason. The case cannot close until every service is accounted for.This is at-need. Pre-need uses the same GPL, the same package selection, and the same line-item shape, with three differences: it references a Person directly (no Case yet), pricing is locked at signing rather than current-on-arrangement-day, and activation at need-time produces a new at-need contract via the conversion service per ADR-016 Boundary Rule 3. Late attachment — the family producing a pre-need at the arrangement meeting — triggers identical conversion mechanics. See pre-need-contracts-prd.md.
The signing surface that produces the DocuSign envelopes, the priority chain for cremation authorisation (BC: spouse → adult child → parent → sibling → executor), and the five locked document_gate modules live in documents-and-signing-prd.md. The GPL structural model lives in ADR-017 (Accepted). The four-layer audit architecture — including Layer 4 services rendered — lives in ADR-014. The aggregate boundaries are set in ADR-016.