Calculation catalog › Optimizer and comparisons

SWR rule result depletion year

First year a displayed safe-withdrawal rule runs out of investable assets.

Field: depletionYear Unit: calendar year Basis: no dollar basis Computed by: Engine Status: Complete chain

Appears in: solver-page (withdrawal rule depletion year)

Calculation records

  • Swr rule depletion year Composition record, justified by derivation

    Purpose: Name the first rule-run year whose post-HECM shortfall clears the ledger tolerance.

    Statement: decisions/swrComparator.ts#compareSwrRules publishes, for each constant-real rule run, the projection's first calendar year whose funding shortfall after any HECM backstop draw is strictly greater than ANNUAL_FUNDING_TOLERANCE_PLAN_DOLLARS, which is 0.005 nominal dollars, or null when no projection year crosses that gate.

    Formula: depletionYear = min { y : shortfallAfterHecm_y > 0.005 }, else null

    • shortfallAfterHecm_y: Year y funding shortfall after any HECM backstop draw (unit: nominal USD) (domain: nonnegative)
    • tolerance: ANNUAL_FUNDING_TOLERANCE_PLAN_DOLLARS (unit: nominal USD) (domain: 0.005)

    Timing: ordered rule-run ledger years

    Rounding: none; strict comparison against the residual budget

    Limits:

    • The comparison is strict, so a residual at or below half a cent is not depletion, and the explicit horizon keeps a shorter run from reading as depletion; the largest-shortfall year is not the answer either. The worksheet's third case, a sole shortfall of exactly 0.005 in one year, was not constructed from real inputs: the ledger funds to its own exact-cent fixed point, and no plan input reaches a residual of exactly half a cent in one year while leaving every other year funded, so the strictness of the comparison is evidenced by the claim and the first two cases only.

    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: swr-rule-depletion-year.md Mutation receipt: swr-rule-depletion-year.mutation.md

    Evidence tests: swrComparator.evidence.test.ts

    Implemented in: swrComparator.ts

    Is the number of: swr-rule-result-depletion-year

Records that feed this number

  • Swr rule rate and initial spend Model record, justified by derivation

    Purpose: Set initial spending from three published withdrawal-rate parameterizations.

    Statement: decisions/swrComparator.ts#compareSwrRules assigns Bengen 4.7%, Morningstar 3.9%, or ERN 1.75%+0.5(100/CAPE) and multiplies that percent by starting investable dollars to set constant-real initial annual spending before a same-plan ledger comparison.

    Formula: rates = (4.7,3.9,1.75+0.5*(100/CAPE)); initialSpend = startingInvestable * rate/100

    • CAPE: Cyclically adjusted price/earnings ratio (unit: 1) (domain: positive)
    • startingInvestable: Initial investable portfolio (unit: today USD) (domain: nonnegative)

    Timing: initial constant-real annual spending, before ledger comparison

    Rounding: none

    Limits:

    • Published rule parameterizations are planning lenses, not household safety guarantees. The worksheet pins rates and initial spending only; depletion, horizon, estate, and taxes come from the downstream ledger and are feeds.

    Provenance: derived by codex, implemented by codex.

    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: swr-rule-rate-and-initial-spend.md Mutation receipt: swr-rule-rate-and-initial-spend.mutation.md

    Evidence tests: swrComparator.evidence.test.ts

    Implemented in: swrComparator.ts

    Is the number of: swr-rule-result-initial-rate-pct, swr-rule-result-initial-annual-spend

    Feeds: swr-rule-result-depletion-year, swr-rule-result-end-year, swr-rule-result-ending-after-tax-estate, swr-rule-result-lifetime-taxes-and-penalties

Engine source: engine/src/decisions/swrComparator.ts (SwrRuleResult.depletionYear)

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.