Skip to content
FEAT-STOR-007: Insurance Coverage Renewal

FEAT-STOR-007: Insurance Coverage Renewal

Reference Number Version Effective Date Supersedes Authority Level
FEAT-STOR-007 1.2 2026-10-14 1.1 Normative

I. Purpose

Coordinate the recurring premium lifecycle of an insurance entitlement: assess each period’s premium in advance, attempt automatic payment, and apply the policy’s nonpayment behavior.

This FEAT is a coordinator. It owns no persistence. Every mutation it causes is performed by the owning domain’s canonical command:

  • bill-cycle succession and termination, and premium assessment and satisfaction — Obligations (DOM-OBL-001);
  • premium payment — Ledger (DOM-LED-001), through the lawful obligation-satisfaction path;
  • nonpayment expiry — Store and Entitlements (DOM-STORE-001, FEAT-STOR-002).

It introduces no insurance-specific recurrence, scheduling, or replay machinery. It uses schedule_next_bill_cycle, its command reservation, and the same advance-assessment rule rent uses (DOM-OBL-001 §V.7).

II. Authority

Store and Entitlements owns the insurance coverage lifecycle and its usability (DOM-STORE-001 §VIII.E.1).

Obligations owns premium-obligation truth, the premium lineage, and the product-blind read of whether the lineage’s required obligations are satisfied (DOM-OBL-001 §VIII).

Policies owns the frozen terms of the purchased policy version: premium, cadence, bill preview interval, and nonpayment mode (DOM-POL-001A §V.E). They are resolved from the exact policy_uuid the entitlement and its cycles carry, never from the family’s current row.

Ledger owns money movement.

III. Required Context

  • class_id
  • the insurance entitlement_id; the premium lineage’s internal_ref derives from it alone (DOM-OBL-001 §II.B)
  • the canonically resolved reference time (INV-ARC-015 §VII)
  • a command identity for each succession it requests (DOM-OBL-001 §V.7)

IV. Cadence

The purchase instant begins the first period. The purchase’s class-local calendar date is the cadence anchor; for an entitlement granted by continuation (§V.A) the anchor is the class-local date of the boundary where it begins, and its first period begins at that boundary. Boundary n is anchored_recurrence_boundary(anchor, cadence, n, overflow = roll_forward) at class-local midnight (SPEC-TIME-001 §IX.12); WEEKLY is seven class-local calendar days, MONTHLY rolls forward when the anchor day does not exist. Every boundary is derived from the anchor, never from the previous boundary.

V. Advance Assessment and Automatic Payment

When the current cycle’s assessment point arrives (next_assessment_at − preview, preview from that cycle’s own policy_uuid), and the lineage is not terminated, the FEAT SHALL, in one transaction:

  1. request succession for the next period through schedule_next_bill_cycle, with that period’s boundaries from §IV;
  2. assess that period’s premium against the new cycle — the frozen per-period premium (SPEC-ECON-003 §4.4.2), due at the new cycle’s cycle_boundary_at;
  3. attempt automatic satisfaction from the seat’s available funds through the lawful satisfaction path.

Automatic satisfaction has the independent available-funds eligibility required by DOM-STORE-001 §VIII.E.1. The FEAT supplies Class banking directives and obtains Ledger’s pure full-funding conclusion under canonical seat → class serialization. Checking may fund the entire premium, or enabled protection may cover the entire checking shortfall from savings. If neither can fund it completely, no automatic debit is authorized: the premium remains outstanding. The FEAT does not duplicate balance arithmetic or consume a checking-only shortcut that bypasses eligible protection. This conditional automatic intent differs from a student’s separately authorized manual payment, which follows FEAT-LED-000’s shared charge-funding rule and may debit checking below zero. No additional fee applicability is created.

If automatic satisfaction fails, the premium remains outstanding and the transaction still commits steps 1–2. The student may satisfy it manually at any later time, before or after its due boundary, through the ordinary obligation payment path. Whether a fee applies to the failed attempt is governed by SPEC-ECON-003 §4.5.1.1, unchanged by this FEAT.

The FEAT SHALL NOT assess a premium for a period that begins after the lineage’s termination.

V.A Superseded or withdrawn version

Before step 1, the FEAT resolves the version the lineage would renew under. Starting from the current cycle’s policy_uuid, it follows the successor links (DOM-POL-001A §D) to the last version that supersedes it.

  • No successor, and the current version is on sale (IN_USE). Ordinary renewal: steps 1–3 above.
  • A successor that is on sale. Continuation (DOM-STORE-001 §VIII.E.1), in the same transaction, instead of steps 1–3:
    1. stop renewal of this lineage through the Obligations termination command, as of the reference time, so coverage ends at the current period’s end;
    2. grant a new INSURANCE entitlement to the same seat under the successor, effective at that boundary, carrying the entitlement it continues;
    3. start its lineage: cycle 1 is [boundary, anchored boundary 1), anchored at the boundary’s class-local date (§IV), carrying the successor’s policy_uuid;
    4. assess cycle 1’s premium (the successor’s frozen premium, due at the boundary) and attempt automatic satisfaction as in step 3. The new entitlement is then renewed by this FEAT like any other. A continuation is idempotent on the entitlement it continues: a rerun grants nothing further.
  • Otherwise (the current version is hidden or retired, and no version superseding it is on sale): stop renewal as in continuation step 1, and grant nothing. Coverage ends at the boundary (FEAT-STOR-002 §IX.C).

Nonpayment (§VII) is examined first, as always: a lineage terminated for nonpayment neither renews nor continues.

VI. Rollover

At a coverage boundary the previous period ends unconditionally. The FEAT performs no write to make the new period usable: usability is derived (DOM-STORE-001 §VIII.E.1). A premium satisfied before the boundary yields continuous coverage; an unsatisfied premium leaves the new period gated until satisfaction, and satisfaction restores usability from that moment forward only.

VII. Nonpayment

The purchased policy version’s nonpayment_mode governs.

ACCUMULATE. The FEAT continues §V on cadence regardless of outstanding premiums. It never terminates the entitlement for nonpayment.

CANCEL_AFTER_X_DAYS. The nonpayment deadline is the coverage boundary at which the earliest outstanding required premium lapsed, plus cancel_after_days class-local calendar days. Later assessments do not reset it. §V continues until the deadline, so further premiums may be assessed while the delinquency is unresolved. When the deadline is reached and that premium is still unsatisfied, the FEAT SHALL, in one transaction:

  1. record EXPIRED for the insurance entitlement with a nonpayment cause, effective at the deadline (FEAT-STOR-002);
  2. terminate the premium lineage through the Obligations termination command with the deadline as its termination instant, so that no later period is assessed; any unpaid advance premium for a period beginning at or after the deadline is withdrawn in the same transaction (DOM-OBL-001 §V.8).

It SHALL NOT void, reverse, waive, or forgive a premium for any period that began before the deadline. Payment after termination settles the obligation and does not resurrect the entitlement.

Stopping renewal. Stopping renewal is not this FEAT’s action, but its effect on an advance-assessed period follows the same rules (DOM-STORE-001 §VIII.E.1): a period with any payment applied to its premium is committed and runs to its end (usable once fully satisfied); an advance premium with nothing paid is withdrawn (DOM-OBL-001 §V.8) in the same transaction that terminates the lineage at the current period’s end. This FEAT SHALL NOT assess a premium for any period at or after a termination instant.

VIII. Idempotency and Replay

Succession replay is governed by DOM-OBL-001 §V.7: each succession carries its own command identity, and a losing race is a conflict, never a replay and never a later successor. Assessment and satisfaction replay follow their own Obligations and Ledger contracts. Nonpayment expiry is idempotent on the entitlement: an entitlement already expired is not expired again, and a lineage already terminated is not terminated again.

IX. Atomicity and Failure

Each unit in §V and §VII commits entirely or not at all, except that a failed automatic payment attempt is an expected outcome of §V, not a failure: the succession and assessment commit, and the premium stays outstanding.

A run that finds nothing due for an entitlement writes nothing.

X. Prohibited Patterns

  • persisting a cached SUSPENDED, payment_current, or similar authorization flag;
  • inspecting obligation tables, or reconstructing payment status, instead of the Obligations read;
  • deriving a boundary from a previous boundary, from a fixed day count for MONTHLY, or by clamping to month end;
  • resolving premium, cadence, preview, or nonpayment terms from any policy row other than the exact policy_uuid the entitlement and its cycles carry;
  • scaling the premium by the length of a period;
  • restoring coverage retroactively for a gated interval;
  • recording nonpayment termination as REVOKED, or withdrawing an assessed premium except under DOM-OBL-001 §V.8;
  • insurance-specific succession, scheduling, or replay machinery parallel to the Obligations commands.

XI. Postconditions

  • After an assessment point under ordinary renewal: exactly one successor cycle and one premium assessment exist for the next period, and a satisfaction exists if and only if automatic payment succeeded.
  • After an assessment point under continuation: the lineage is terminated at the current period’s end, and exactly one continuing entitlement exists, effective at that boundary, with one cycle and one assessed premium.
  • After an assessment point for a withdrawn version: the lineage is terminated at the current period’s end and nothing is granted.
  • After a boundary: the entitlement is usable if and only if Obligations reports its required premiums satisfied and it has not expired.
  • After a nonpayment deadline under CANCEL_AFTER_X_DAYS with the triggering premium unsatisfied: the entitlement is EXPIRED with a nonpayment cause, the lineage is terminated at the deadline, every premium for a period that began before the deadline is still outstanding or satisfied as before, any unpaid advance premium for a later period is withdrawn, and no later premium is ever assessed.

XII. Dependencies

  • DOM-STORE-001 §VIII.C, §VIII.E.1
  • DOM-OBL-001 §II.B, §V.7, §VIII, §IX
  • DOM-POL-001 §VII; DOM-POL-001A §V.E
  • SPEC-TIME-001 §IX.12–13
  • SPEC-ECON-003 §4.4.2, §4.5.1.1
  • FEAT-OBL-002 (bill-cycle succession)
  • FEAT-STOR-002 (entitlement expiry; §IX.C teacher cancellation)
  • FEAT-CLASS-003 (successor link on edit)
  • FEAT-STOR-003 (claims; eligibility at filing, per-period scope)
  • FEAT-LED-000 §VIII/XI.5 (typed shared funding, with independent available-funds automatic eligibility)
  • DOM-CLASS-001 §X (pure banking directives)

XIII. Amendment

1.2 (2026-10-14) adds §V.A (owner ruling 2026-10-14): a holder of a superseded version continues under the successor through a new entitlement at the boundary, and a withdrawn version with no successor on sale stops renewing. Previously a superseded or withdrawn version renewed indefinitely. Terms still resolve only from the exact policy_uuid each lineage carries.

1.1 (2026-10-03) clarifies available-funds eligibility using Ledger-owned full-funding evidence including eligible protection. Retains failed automatic attempts, coverage gating and nonpayment lifecycle; universal funding does not create an unconditional automatic debit.

Revisions must remain consistent with DOM-STORE-001, DOM-OBL-001, DOM-POL-001, and INV-ARC-015, and SHALL NOT introduce persistence owned by this FEAT.

Edit canonical source on GitHub

Last updated: 2026-10-14