RequiemOS Contract Management · Walkthrough 2026-06-08
Walkthrough

A Contract’s Life
at Kearney

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.

Artefact
Kearney’s GPL
The regulated price list. One per brand, bound to a branch; a collection of packages, with line items shared across packages by stable identity within the GPL.
Family
The Hendersons
Three generations with Kearney. Arrange Monday morning, return Monday next to receive the urn.
Director
Sophie
Builds the contract, applies the multi-generational discount, escalates to David for approval.
Approver
David
Senior director. Approves discounts that exceed Kearney’s 15% threshold.
Owner
Margaret
Doesn’t build contracts. Reviews the discount activity report at month-end.

A GPL is a collection of packages. Line items have stable identity across packages within it.

Standard Cremation

Package · pricing_tier: standard
Basic services of director & staff $1,895.00
Local transfer of remains $425.00
Refrigeration (per day, first 3 days) $0.00
Cremation container (alternative) $185.00
Urn — Standard removable $295.00
Crematory fee $385.00
Memorial coordination (1 hr) $165.00
Package price $3,350.00
Per ADR-017, line items are GPL-scoped with stable identity within the GPL — “Local transfer of remains” is the same 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 builds the contract while the family sits across the table.

Module · gpl_package_selection
Tableau A

The package is selected.

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 · selecting from packages
Contract draft DRAFT
·Basic services of director & staff package_base1,895.00
·Local transfer of remains package_base425.00
·Refrigeration package_base0.00
·Cremation container package_base185.00
·Urn — Standard package_base295.00
·Crematory fee package_base385.00
·Memorial coordination package_base165.00
Package subtotal3,350.00
Tableau B

The Hendersons already own an urn.

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.

Sophie · toggling a removable item
Contract draft DRAFT
·Basic services of director & staff1,895.00
·Local transfer of remains425.00
·Refrigeration0.00
·Cremation container185.00
Urn — Standard package_removed−295.00
·Crematory fee385.00
·Memorial coordination165.00
Package subtotal3,055.00
Tableau C

Two additions outside the package.

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.

Sophie · adding à la carte
Contract draft DRAFT
·Basic services of director & staff1,895.00
·Local transfer of remains425.00
·Refrigeration0.00
·Cremation container185.00
Urn — Standard−295.00
·Crematory fee385.00
·Memorial coordination165.00
Package subtotal3,055.00
+Death notice — local paper ala_carte285.00
+Memorial coordination, additional hour ala_carte195.00
À la carte subtotal480.00
Tableau D

A 20% discount, requiring approval.

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.

Sophie applies · David approves
Contract draft DRAFT
Package subtotal3,055.00
%Package discount — 20%−611.00
Package after discount2,444.00
À la carte subtotal480.00
Captured on case_contracts package_discount_percent: 20 · package_discount_reason: “Multi-generational customer — three generations with Kearney.” · package_discount_approved_by_id: David Chen (above 15% threshold)
Tableau E

The totals compute, in order.

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.)

Platform · computing tax from line-item rates
Contract draft READY TO SIGN
Package subtotal3,055.00
%Package discount — 20%−611.00
À la carte subtotal480.00
Subtotal2,924.00
Tax (computed from line items)351.00
Contract total$3,275.00
Tableau F

The family signs.

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.

The Hendersons sign · DocuSign envelope returns
Monday contract · signed SIGNED
Contract total$3,275.00
case_contracts.statussigned
signed_atMon · 11:42
signed_by_idMartha Henderson (executor)
case_document_idcase_doc_4f8a…
gpl_version_idcurrent at Mon 09:03

Prep discovers a pacemaker the family didn’t know about.

Module · medical_device_check
Tableau G

The Monday contract is voided.

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.

Rob discovers · Sophie voids the Monday contract
Monday contract · voided VOIDED
Original total$3,275.00
case_contracts.statusvoided
voided_atTue · 09:45
voided_by_idSophie
void_reason“Pacemaker discovered during prep; contract requires additional service line”
Why void-and-recreate rather than amend. Under ADR-036 D1, a signed contract is never partially mutated. The Hendersons agreed to a specific set of services and prices on Monday; adding a pacemaker-removal line materially changes what they agreed to, so the Monday row is retired as history and a fresh contract is authored. The successor prices against the currently-active GPL per ADR-036 D5 — between Monday and Tuesday the GPL hasn’t changed, so the standard-cremation line prices match, but the invariant stands: every line on the fresh row is re-snapshotted from today’s GPL, and the Monday snapshots stay with the voided row. Voiding does not un-write the workflow’s contract_execution gate (a one-time gate per ADR-036 D3); case flow continues while the successor is being authored.
Tableau H

A fresh contract is authored and signed.

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.

Sophie authors · Martha Henderson signs the successor
Tuesday contract · new row SIGNED
·Standard Cremation package package_base3,047.50
+Pacemaker removal & disposal ala_carte150.00
·Tax245.50
Contract total$3,443.00
case_contracts.statussigned
signed_atTue · 14:08
signed_by_idMartha Henderson
gpl_version_idcurrent at Tue 13:52
source_pre_need_contract_idNULL

Three unreconciled services. The director resolves each one.

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.
service_contract_reconciliation completes when every 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.
  1. The GPL is queryable and effective-dated. Every price on the Henderson contract traces to a line item’s single price (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.
  2. The signed PDF is the legal attestation. The structured rows are the source of truth. The PDF is in S3 with a tamper-evidence hash. The 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.
  3. Material change to a signed contract is void-and-recreate, not amendment. Per ADR-036 D1 the signed row is retired to history and a fresh 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.
  4. Reconciliation closes the revenue-leakage gap — via three paths, one of which is a distinct artifact. Layer 4 (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.

Scope of this walkthrough

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.