Calculation catalog › Monte Carlo

Annuitization sweep effective allocation pct

Premium divided by total investable assets, in percent; lower than the requested grid percent when the funding account caps the purchase.

Field: Annuitization sweep effective allocation Unit: percent Basis: no dollar basis Computed by: Engine Status: Complete chain

Appears in: monte-carlo-page (Annuitization frontier chart x-axis and table "Annuitized" column)

Calculation records

  • Annuitization sweep point: premium, annual income and effective allocation Model record, justified by derivation

    Purpose: What one point of the SPIA allocation sweep actually buys, and the share of the portfolio it costs.

    Statement: For each non-zero grid percent, decisions/annuitization.ts#buildAnnuitizationSweep sets premium = min(gridPct / 100 x the plan's total investable balance, 0.95 x the largest cash-or-taxable account's balance) and SKIPS the point when that premium is under $5,000. A retained point publishes annualIncome = premium x the payout rate (the user's quoted rate / 100 when given, else decisions/spiaQuotes.ts#spiaPayoutRate interpolated at startAge = min(95, max(current age, 65)), the current age being 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; every sweep annuity is on that person's life and the notes name them, decision D-PEOPLE-ORDER) and effectiveAllocationPct = premium / total investable x 100, which is below the requested grid percent exactly when the funding cap bound the purchase. Units: nominal dollars; percent of investable. Rounding: none.

    Formula: premium = min(g/100 x V, 0.95 x F); income = premium x rate(startAge); effectivePct = premium / V x 100; skip when premium < 5000

    • V: Total investable balance (cash, taxable, equity comp, traditional, Roth, HSA) (unit: usd) (domain: positive)
    • F: Largest cash or taxable account balance (the funding account) (unit: usd) (domain: nonnegative)
    • g: Requested grid allocation (unit: percent of investable) (domain: g > 0)
    • rate(startAge): Life-only SPIA payout rate, linearly interpolated between the table anchors and clamped outside them (unit: fraction of premium per year) (domain: 0.06 to 0.153)

    Timing: once per sweep, at the comparison's start year

    Rounding: none; the $5,000 floor is a strict under-test

    Limits:

    • A point only reaches the published list when the shared-path Monte Carlo returns a row for its variant, so the evidence has to run one: it uses a two-path comparison over a two-year horizon (a 1954 birth with planning age 73 from 2026 runs 2026 and 2027) with a fixed seed. The three figures themselves are decided before that run and do not depend on its outcome
    • Beyond the worksheet's inputs the evidence plan fixes: a 1954-born single filer so the 2026 current age is 72, a $100,000 cash funding account beside a $100,000 traditional account for a $200,000 investable total, a grid of exactly [2, 60] so the skipped and retained points are both present, no user quote, zero return and zero inflation
    • The funding account carries no static allocation, so the sweep's Kitces glidepath controls are not constructible here and attributionAvailable is false; the sweep records that as a note rather than an error
    • The skipped $4,000 point is asserted as an ABSENT allocationPct, since a skipped point is never pushed rather than published at zero

    Provenance: derived by codex, implemented by claude.

    Independent review: cursor

    Gates (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: annuitization-sweep-point.md Mutation receipt: annuitization-sweep-point.mutation.md

    Evidence tests: annuitization.evidence.test.ts

    Implemented in: annuitization.ts; spiaQuotes.ts; peopleOrder.ts

    Is the number of: annuitization-sweep-premium, annuitization-sweep-annual-income, annuitization-sweep-effective-allocation-pct

Engine source: engine/src/decisions/annuitization.ts (AnnuitizationSweepPoint.effectiveAllocationPct)

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.