Calculation catalog › Insights
Insight annuitization headroom illustrative SPIA
Illustrative single-premium annuity: premium = min(25% of the largest liquid account, $250,000); monthly income = premium × spiaPayoutRate(startAge) / 12.
Field: Illustrative SPIA premium and income Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain
Appears in: insights (annuitization-headroom card rationale "Trading $X ... (~$Y/mo)")
Calculation records
-
Illustrative SPIA premium and monthly payout from unused longevity headroom Model record, justified by derivation
Purpose: A bounded quarter-account SPIA illustration for a planning-age-95-or-later plan that holds no annuity or pension covering the floor.
Statement: For a plan whose maximum planning age is at least 95, with a qualifying largest cash-or-taxable account of at least $100,000 and no annuity or pension covering the floor: premium = min(0.25 × liquidBalance, $250,000); monthly payout = premium × spiaPayoutRate(startAge) / 12, where startAge = min(95, max(currentAge, 65)) and currentAge is that of the person model/peopleOrder.ts#canonicalFirstPerson puts first (the older; between two people born the same day, the sex order female, male, average and then the smaller id by ordinal comparison decide, so for two people with the same birth date and sex renaming the ids can move the annuitant and every figure on that life), whoever is listed first, whom the card names and on whose life the previewed annuity is written (decision D-PEOPLE-ORDER). Units: nominal dollars. Rounding: none; the production function returns a binary float, formatted to whole dollars only at the card.
Formula:
premium = min(0.25 L, 250000); monthly = premium × r(startAge) / 12-
L: Largest qualifying liquid (cash or taxable) account balance (unit: usd) (domain: L >= 100000) -
r(startAge): Annual SPIA payout rate as a fraction of premium, already resolved by spiaPayoutRate (unit: 1) (domain: r > 0) -
startAge: min(95, max(currentAge, 65)) (unit: years) (domain: 65 <= startAge <= 95)
Timing: illustration at the projection start year; payout begins at startAge
Rounding: the card publishes whole-dollar strings (formatWholeUsd, Math.round) and the evidence asserts the published figure; no rounding before that
Limits:
- An illustration, not a carrier quote, recommendation, or claim that the payout is optimal or guaranteed
- The worksheet supplies the already-resolved spiaPayoutRate(startAge) = 6.6%/year; the evidence passes that rate through rather than re-quoting the table
- startAge is clamped to [65, 95], so a rate below the age-65 table point is not reachable without substituting the resolved rate
Provenance: derived by
codex, implemented bygrok.Independent review:
cursorGates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass
Worksheet: insight-annuitization-headroom-illustrative-spia.md Mutation receipt: insight-annuitization-headroom-illustrative-spia.mutation.md
Evidence tests: annuitizationHeadroom.evidence.test.ts
Implemented in: annuitizationHeadroom.ts; peopleOrder.ts
Is the number of: insight-annuitization-headroom-illustrative-spia
-
Engine source: engine/src/insights/detectors/annuitizationHeadroom.ts
(annuitizationHeadroom.screen (premium, monthly))
The evidence links on this page (each record's worksheet, mutation receipt, evidence tests
and implementation, and the source links) are pinned to engine commit
2624dbdba9fd, committed 2026-10-11.
The live calculation index and
output-family census links point at the repository's main
branch, so you can check this snapshot against them.