Calculation catalog
Every number the planner shows is an output family in a public census. This page counts how many of them are backed by a complete evidence chain, and links every link in each chain.
13 of 229 output families have a complete chain.
Counted from the engine's calculation index at engine commit
33e7d546f117, committed 2026-09-14.
A family's chain is complete when two things hold for every calculation record whose number it is: the record passes all six of the engine's gates (its fixture registers an evidence test, its pins resolve, the families it names exist, its worksheet derived without running the engine exists, its executed mutation receipt exists, and its provenance is independent, with a reviewer of a different agent family than the deriver), and the record has been independently reviewed rather than left unreviewed. A record can pass all six gates and still await its review, and the family stays partial until it has one. The worksheets and receipts live in the engine repository's calculations directory at that commit.
- Complete (13). Families whose every record passes all six gates and has been independently reviewed. The build recomputes this from the records and refuses a snapshot whose index lists a family differently.
- Partial (1). Families with at least one calculation record that does not yet meet both conditions; each card shows which gates the record passes and whether it has been reviewed.
- No record yet (175). Families with no calculation record; each card links the source that computes the number today.
- Relocation pending (40). Families whose number is currently computed in the app's UI and is scheduled to move into the engine, per the calculation boundary sweep. A family is counted here rather than in the three lines above, so the four numbers sum to the total of 229. (The engine index lists 13 complete, 1 partial, 215 with no record; 40 of those are counted here as relocation pending.)
This page renders a committed snapshot: 18 calculation records across 3 record files, and 229 families from the census. Copies drift, so the live index, record files and census in the public repository are linked for you to check against. Every worksheet, receipt, test and code link below is pinned to the snapshot's engine commit, so the links stay accurate after the code moves on.
Families, by group
- Spending and withdrawals (14 families)
- Taxes (18 families)
- Social Security (17 families)
- Medicare and ACA (10 families)
- Accounts and growth (11 families)
- Required minimum distributions (3 families)
- Roth (4 families)
- Ladders and valuation (15 families)
- Longevity (3 families)
- Monte Carlo (35 families)
- Optimizer and comparisons (27 families)
- Cash flow and summary (60 families)
- Insights (12 families)
Spending and withdrawals
-
Display guardrail balance thresholds
The cut and raise balance thresholds of a risk-based guardrail policy in dollars.
Field:
Risk-based guardrail dollar thresholdsUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
results-table(Risk-based guardrails callout "cut below $X / raise above $Y")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ResultsPage.tsx (
ResultsPage). -
Display total spending annual
Expenses, taxes, and penalties plotted together as total spending for a projection year.
Field:
Displayed total spendingUnit: US dollars Basis: as displayed Computed by: UI transformation Status: Relocation pendingAppears in:
chart(spending);report(chart-data block spendingPlusTax (expenses.total + tax + penalties))Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/resultsRows.ts (
buildResultsRows); planner-ui/src/report/reportModel.ts (chartDataRows). -
Display upside shortfall annual
Ideal plus excess spending not funded.
Field:
Upside missUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
results-table(Layer miss "Upside")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ResultsPage.tsx (
YearByYearLedger). -
Display upside spending annual
Ideal plus excess spending intended above the target layer.
Field:
Upside spendingUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
results-table(Upside column (layered spending))Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ResultsPage.tsx (
YearByYearLedger). -
Portfolio need annual
The nonnegative annual amount that must be supplied by the portfolio after income.
Field:
Net portfolio needUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-table(Bucket lens need per year (BucketYearRow.need) and bucket sums);cash-flow-drilldown(needBasedPortfolioWithdrawal sizing)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.netPortfolioNeed). -
SEPP distribution annual
Penalty-free 72(t) substantially-equal periodic payment distributed this year (included in traditional withdrawals).
Field:
SEPP distributionUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(seppDistribution source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.sepp). -
Solved initial withdrawal rate pct
The solved (rounded) baseline spending as a percent of starting investable assets, shown beside the SWR rule rows.
Field:
Solved initial withdrawal rateUnit: percent Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
solver-page(SWR comparison "Your solved plan" row rate)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/SpendingSolverPage.tsx (
SpendingSolverPage). -
Solved spending rounded to hundred
Maximum sustainable baseline spending rounded down to the nearest $100, as applied to the plan and shown in the shape table.
Field:
Solved spending rounded downUnit: US dollars Basis: today's dollars (real) Computed by: UI transformation Status: Relocation pendingAppears in:
solver-page("sustain about $X of baseline spending", Apply-to-Spending amount, per-shape "$X/yr")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/SpendingSolverPage.tsx (
SpendingSolverPage). -
Spending base annual
Base living spending modeled for a projection year.
Field:
Base spendingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: Partial chainAppears in:
chart(base);csv(baseSpending);cash-flow-drilldown(requiredLifestyle / targetLifestyle use lines (layered))-
Amortization-based withdrawal, growing annuity-due payment Formula record, justified by derivation
Purpose: This year's ABW payment from a start-of-year balance over the remaining horizon.
Statement: Given a start-of-year balance B, an expected return r and a planned payment growth g — both in percent per year, as abwAnnualPayment takes them, so the worksheet's 10% is passed as 10 — and a remaining horizon in years including the current year, the function first truncates that horizon to whole years, n = floor(remainingYears), so a fractional horizon such as 4.5 years is amortized over 4. The beginning-of-period payment is P = B(1−x)/(1−x^n) where x = (1 + g/100)/(1 + r/100). P = B/n instead under either guard the code tests: `!Number.isFinite(x) || x <= 0` (x is not finite or not positive; r > −100 and g > −100 keep it finite and positive) and `Math.abs(x - 1) < 1e-9` (x = 1 within that tolerance). Payments are withdrawn before growth. Under the ABW spending policy P is the year's base spending before guardrail adjustments: annualLifestyleLayers writes it as baseAnnualNominal, which annualExpenseSummary publishes as YearResult.expenses.baseSpending. Domain: finite B > 0 (a non-finite or non-positive balance pays 0) and n ≥ 1; n ≤ 1 spends the whole balance. Rounding: the horizon is floored on input; the payment itself is not rounded — the production function returns a binary float.
Formula:
n = floor(remainingYears); x = (1 + g/100)/(1 + r/100); P = B(1-x)/(1-x^n), or P = B/n when x is not finite, x <= 0, or |x - 1| < 1e-9-
P: This year's beginning-of-period payment (unit: usd) (domain: P ≥ 0) -
B: Start-of-year portfolio balance (unit: usd) (domain: B > 0 and finite (otherwise the payment is 0)) -
r: Expected return over the period, in percent (10% is 10) (unit: percent) (domain: r > -100, so that 1 + r/100 > 0 and x is finite and positive) -
g: Planned payment growth over the period, in percent (0% is 0) (unit: percent) (domain: g > -100, so that 1 + g/100 > 0 and x is positive) -
n: Remaining periods including the current one, n = floor(remainingYears): a fractional horizon is truncated to its whole years before amortizing (unit: count) (domain: integer n ≥ 1 (the floored value); n ≤ 1 pays the whole balance) -
x: Payment-growth ratio (1 + g/100)/(1 + r/100) (unit: 1) (domain: finite x > 0 with |x − 1| ≥ 1e-9 for the closed form; otherwise P = B/n)
Timing: beginning of period, annual
Rounding: none on the payment, a binary float; the horizon is truncated to whole years on input, n = floor(remainingYears)
Limits:
- The chosen expected return is an assumption, not proven by the identity
- The payment is the ABW policy's base spending before guardrail adjustments, written by annualLifestyleLayers as baseAnnualNominal; under other spending policies baseSpending is not this formula
Provenance: derived by
claude-orchestrator, implemented bygrok.Independent review: none yet
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: abw-annuity-due-payment.md Mutation receipt: abw-annuity-due-payment.mutation.md
Evidence tests: abw.evidence.test.ts
Implemented in: abw.ts; annualLifestyleLayers.ts
Is the number of: spending-base-annual
-
-
-
Spending shape delta vs flat
How much more or less baseline spending each spending shape sustains than the flat shape.
Field:
Spending-shape solved delta versus flatUnit: US dollars Basis: today's dollars (real) Computed by: UI-native Status: Relocation pendingAppears in:
solver-page(Per-shape table "vs. flat" column)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/SpendingSolverPage.tsx (
SpendingSolverPage). -
Spending shortfall annual
Unfunded total spending in a projection year.
Field:
Spending shortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(shortfall);csv(shortfall);results-table(Shortfall column);scenarios-page(Annual "Total shortfall" and lifetime "Total spending shortfall");mcp(run_projection.years[].shortfall)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.shortfall). -
Spending total annual
All modeled expenses for a projection year before tax and penalties.
Field:
Total expensesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(totalExpenses);report(yearLedger);results-table(expenses);results-table(Expenses column);scenarios-page(Annual "Funded spending" and lifetime "Funded spending")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.total). -
Withdrawals by category annual
Dollars withdrawn this year from cash, taxable, traditional, Roth and HSA accounts.
Field:
Withdrawals by account categoryUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Annual "Traditional withdrawals" / "Roth withdrawals" and lifetime withdrawals by category);cash-flow-drilldown(needBasedPortfolioWithdrawal and retirementActionWithdrawal source lines)No calculation record yet. The number is computed today in engine/src/projection/internal/types/yearLedger.ts (
YearWithdrawals.cash / taxable / traditional / roth / hsa). -
Withdrawals total annual
Total account withdrawals used in a projection year.
Field:
Total withdrawalsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(uses/withdrawals);csv(withdrawals);results-table(Withdrawals column);report(year-ledger block withdrawals);scenarios-page(Annual "Total withdrawals");mcp(run_projection.years[].withdrawals)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.withdrawals.total).
Taxes
-
Display loss carryforward used annual
Capital-loss carryforward applied this year against gains and against ordinary income, combined.
Field:
Loss carryforward usedUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
csv(lossCarryforwardUsed)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/resultsRows.ts (
buildLedgerCsv). -
Display tax free gains room annual
Additional long-term gains realizable at $0 federal tax: remaining loss carryforward plus 0%-bracket headroom.
Field:
Tax-free gains roomUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
results-table(Tax-free gains room column)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ResultsPage.tsx (
YearByYearLedger). -
Display tax plus penalties annual
Settled tax plus early-withdrawal and RMD-shortfall penalties for the year, as the ledger surfaces print a single "Tax" figure.
Field:
Tax plus penaltiesUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
results-table(Tax column (y.tax + y.penalties));report(year-ledger block taxAndPenalties and ReportPage year table);chart(Spending by category "Tax + penalties" series)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ResultsPage.tsx (
YearByYearLedger); planner-ui/src/report/reportModel.ts (yearLedgerRow); planner-ui/src/planner/resultsRows.ts (buildExpenseRows). -
Estate heir income tax
Total income tax heirs are assumed to owe on inherited pre-tax balances: per non-spouse traditional account, the taxable pre-tax base (gross net of allocated nondeductible basis) times the class heir rate, plus non-spouse HSA gross times its rate, net of charity carve-outs.
Field:
Heir income tax on the estateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Estate table "Estimated heir income tax");mcp(run_projection.summary.endingEstateHeirTax);mcp(compare_scenarios.a.endingEstateHeirTax);mcp(compare_scenarios.b.endingEstateHeirTax)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.endingEstateHeirTax). -
Projection summary lifetime taxes and penalties
Total taxes and withdrawal penalties paid across all projection years.
Field:
lifetimeTaxesAndPenaltiesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-headline(Lifetime tax + penalties);results-headline(KpiBar "Lifetime tax");report(headline-results block lifetimeTaxesAndPenalties);scenarios-page(Headline "Lifetime tax plus penalties");compare-page(Lifetime tax row);solver-page(Evidence lifetime taxes and SWR rule rows);ss-page(Survivor and claim tables lifetime tax);relocation-page(Lifetime tax + penalties column);mcp(run_projection.summary.lifetimeTaxesAndPenalties);mcp(compare_scenarios.a.lifetimeTaxesAndPenalties);mcp(compare_scenarios.b.lifetimeTaxesAndPenalties)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.lifetimeTaxesAndPenalties). -
Relocation lifetime state local tax
Sum over projection years of state plus local income tax for a relocation candidate (or the baseline).
Field:
Lifetime state and local income taxUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
relocation-page(Candidate table "State+local tax" column and the drivers panel total);insights(state-relocation evaluate reads stateTaxByYear per candidate)No calculation record yet. The number is computed today in engine/src/projection/relocation.ts (
RelocationCandidateRow.lifetimeStateLocalTax). -
Relocation state tax driver savings
For a candidate state, tax with a feature neutralized minus tax as modeled: Social Security treatment, retirement-income exclusion, public-pension exclusion, capital-gains treatment.
Field:
State tax driver savingsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
relocation-page(Drivers panel rows)No calculation record yet. The number is computed today in engine/src/projection/relocation.ts (
RelocationDrivers.ssTreatmentSavings / retirementExclusionSavings / publicPensionExclusionSavings / capitalGainsTreatmentSavings). -
Scenario lifetime penalties
Sum of penalties over the projection.
Field:
Lifetime penaltiesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Headline "Lifetime penalties")No calculation record yet. The number is computed today in engine/src/scenarios/comparison.ts (
ScenarioHeadlineComparison.lifetimePenalties (sum of YearResult.penalties)). -
Scenario lifetime tax
Sum of settled tax over the projection (penalties excluded).
Field:
Lifetime taxUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Headline "Lifetime tax")No calculation record yet. The number is computed today in engine/src/scenarios/comparison.ts (
ScenarioHeadlineComparison.lifetimeTax (sum of YearResult.tax)). -
Tax AMT annual
Alternative minimum tax calculated for a projection year.
Field:
Alternative minimum taxUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(amt);results-table(AMT column when any year has AMT)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.amt). -
Tax loss carryforward remaining annual
Capital-loss carryforward still available after the projection year tax calculation.
Field:
capitalLossCarryforwardRemainingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(lossCarryforwardRemaining);results-table(Loss carryf'd column and carryforward callout);report(ReportPage year table carryforward column)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.capitalLossCarryforwardRemaining). -
Tax loss carryforward used against gains annual
Capital-loss carryforward applied against gains and ordinary income in the projection year.
Field:
capitalLossUsedAgainstGainsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-table(Capital-loss carryforward callout "offset $X of realized gains")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.capitalLossUsedAgainstGains). -
Tax loss carryforward used against ordinary annual
Capital-loss carryforward applied against ordinary income this year, up to the annual limit.
Field:
Loss carryforward used against ordinary incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-table(Capital-loss carryforward callout "and $Y of ordinary income")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.capitalLossUsedAgainstOrdinary). -
Tax penalties annual
Early-withdrawal penalties plus the IRC §4974 RMD-shortfall excise for the year; never part of tax, AGI or MAGI.
Field:
Penalties and excise taxUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(penalties);scenarios-page(Annual "Penalties" and lifetime "Lifetime penalties");cash-flow-drilldown(earlyWithdrawalPenalty use line);mcp(run_projection.years[].penalties)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.penalties). -
Tax realized gains annual
Taxable-account capital gains realized during the projection year.
Field:
realizedGainsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(realizedGains)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.realizedGains). -
Tax total annual
All tax charged for a projection year, excluding penalties.
Field:
Total taxUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(tax);csv(tax);report(yearLedger);results-table(tax);survivor-page(Tax around the transition cell "a → b" (death year and first survivor year));scenarios-page(Annual "Tax" and lifetime "Lifetime tax");cash-flow-drilldown(settledTax use line);mcp(run_projection.years[].tax)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.tax). -
MCP batch cumulative tax objective
Adapter sum of each evaluated projection year's tax plus penalties.
Field:
Batch cumulative tax objectiveUnit: US dollars Basis: nominal dollars Computed by: Adapter Status: No calculation record yetAppears in:
mcp(batch_evaluate.results[].objective)No calculation record yet. The number is computed today outside the engine, in
RetireGolden-MCP/src/adapter.tsin the RetireGolden-MCP repository (batchEvaluate). -
Cash flow tax character amount
The dollar amount of one tax characterization attached to a cash-flow line or standing alone (ordinary income, capital gain or loss, QCD exclusion, phantom OID and the other closed kinds); metadata that is never summed into the money identities.
Field:
Cash-flow line tax character amountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(YearCashFlowDialog DetailTable 'Tax character' column (kind and amount per line) and the taxCharacter view rows);cash-flow-drilldown(detailCsv.ts taxCharacter column (kind:amount pairs))No calculation record yet. The number is computed today in engine/src/projection/internal/types/cashFlow.ts (
YearCashFlowTaxCharacter.amountPlanDollars (on source, transfer and standalone taxCharacterMetadata lines)).
Social Security
-
Claim age co optimization estate gain
After-tax estate gained by the winning joint claim-age combination over the best result at the current claim ages.
Field:
Claim-age co-optimization estate gainUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
optimize-page("$X more projected after-tax estate than the best result at your current claim ages")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/optimizePageClaim.ts (
claimEstateGain). -
Social security benefit annual
Social Security benefit income paid in a projection year.
Field:
Social Security benefitUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(socialSecurity);csv(socialSecurity);survivor-page(Household Social Security column: incomes.socialSecurity selected from the death year and the first survivor year);results-table(Income by source chart (socialSecurity series));scenarios-page(Lifetime income "Social Security");cash-flow-drilldown(socialSecurity source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.socialSecurity / socialSecurityStreams). -
Social security break even
Age at which cumulative benefits from one claiming strategy overtake another.
Field:
ageUnit: age in years Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(claiming break-even age)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/breakEven.ts (
computeBreakEven). -
Social security bridge sizing
For a delaying claimant: the forgone age-62 monthly benefit (PIA × claim factor at 62), the annualized bridge amount, the bridge years, and the quoted TIPS-ladder cost on the embedded real-yield curve.
Field:
Social Security bridge sizingUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
ss-page(Bridge panel rows "$X/yr ($Y/mo, real)" and ladder cost, and the add-ladders total);insights(ss-bridge-gap card via insight-ss-bridge-gap-total)No calculation record yet. The number is computed today in engine/src/ladder/bridge.ts (
sizeBridge (monthlyAge62Benefit, annualRealAmount, ladderCost)). -
Social security claiming sweep objective
On the Social Security page's claim-age sweep, the best whole-year strategy's ending after-tax estate minus the estate at the plan's current claim ages (the '+$X' beside the verdict), and the month-refined strategy's ending after-tax estate minus the best whole-year strategy's (the '+$Y' under 'To the month').
Field:
Claim-age sweep advantage: best versus current, refined versus bestUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(Sweep verdict "+$X vs current claim ages" and refinement "+$Y" over the best whole-year strategy);ss-page(Claim-age heatmap and ranked table read engine candidateSummary.endingAfterTaxEstate directly)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ssAnalysis.ts (
sweepClaimingStrategies); planner-ui/src/planner/ssAnalysis.ts (refineClaimingMonthly); planner-ui/src/planner/SsAnalysisPage.tsx (SsAnalysisPage). -
Social security computation summary counts
How many years were averaged into AIME and how many of them are $0.
Field:
AIME computation year countsUnit: count Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(SocialSecuritySection "Averages your top N earning years ... M of those years are $0")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/explain.ts (
summarizeComputation). -
Social security credit estimate
Estimated Social Security credits (max 40) from the earnings history when the user has not entered a count.
Field:
Covered-work credit estimateUnit: count Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(SocialSecuritySection credits hint "Estimated N of 40")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/explain.ts (
estimateCredits). -
Social security expected present value
Present value of expected Social Security benefits after discounting and weighting payments by survival.
Field:
expectedPvUnit: US dollars Basis: today's dollars (real) Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(expected present value of benefits)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/expectedPv.ts (
expectedPvSingle); planner-ui/src/socialSecurity/expectedPv.ts (expectedPvCouple). -
Social security FICA return ratio
Expected present value of lifetime benefits divided by employee OASDI tax paid in.
Field:
Benefits-to-contributions ratioUnit: factor Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(Paid-in table "Ratio (get back ÷ paid in)")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/SsAnalysisPage.tsx (
SsAnalysisPage). -
Social security OASDI paid in
Employee OASDI payroll tax paid over the earnings history used by the Social Security analysis.
Field:
OASDI paid inUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(Paid-in table "Paid in (OASDI)" and "Employer paid (context)")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/ficaReturn.ts (
ficaOasdiPaidIn). -
Social security PIA annualized
A claimant's monthly primary insurance amount times twelve, as the survivor-switching explainer prints it.
Field:
PIA annualizedUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
ss-page(Survivor switching paragraph "about $X/yr")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/SsAnalysisPage.tsx (
SsAnalysisPage). -
Social security survivor switch PV
Expected present value of a survivor strategy that switches between own and survivor benefits.
Field:
survivorClaimAgeUnit: US dollars Basis: today's dollars (real) Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(survivor switching expected PV)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/survivorSwitching.ts (
expectedPvSwitch). -
Social security zero year replacement gain
Rough monthly PIA gain from replacing one $0 computation year with a year of indexed earnings.
Field:
Zero-year replacement PIA gainUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
ss-page(SocialSecuritySection PIA explainer "would add roughly $X/mo")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/socialSecurity/explain.ts (
replaceZeroYearGain). -
Survivor scenario row estate delta
Change in after-tax estate from the convert-early survivor lever versus the same death-timing baseline.
Field:
estateDeltaUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
survivor-page(convert-early after-tax estate delta)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/survivorAnalysis.ts (
buildSurvivorAnalysis). -
Survivor scenario row lifetime tax delta
Lifetime taxes and penalties under the pre-death conversion lever minus the base run, for one death timing.
Field:
Convert-early lifetime tax deltaUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
survivor-page(Convert-early lever cell "(+$X lifetime tax)")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/survivorAnalysis.ts (
buildTimingRow). -
Survivor scenario row ssa44premium savings
Medicare premium savings produced by applying SSA-44 relief after the modeled life-changing event.
Field:
ssa44PremiumSavingsUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
survivor-page(IRMAA relief SSA-44)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/survivorAnalysis.ts (
buildSurvivorAnalysis). -
Survivor scenario row survivor shortfall years
Number of survivor years in which planned spending is not fully funded.
Field:
survivorShortfallYearsUnit: count Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
survivor-page(survivor shortfall years)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/survivorAnalysis.ts (
buildSurvivorAnalysis).
Medicare and ACA
-
ACA applicable SLCSP premium annual
Applicable second-lowest-cost silver plan premium for the year; null when not modeled.
Field:
ACA benchmark (SLCSP) premiumUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(aca-ledger block and ReportPage ACA table "Benchmark premium")No calculation record yet. The number is computed today in engine/src/projection/internal/types/aca.ts (
YearAcaResult.applicableSlcspPremium). -
ACA economic net premium annual
Gross enrollment premium net of the modeled allowable credit.
Field:
ACA net premiumUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(aca-ledger block and ReportPage ACA table "Net premium")No calculation record yet. The number is computed today in engine/src/projection/internal/types/aca.ts (
YearAcaResult.economicNetPremium). -
ACA gross enrollment premium annual
Gross Marketplace premium for the year before any premium tax credit.
Field:
ACA gross enrollment premiumUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(aca-ledger block and ReportPage ACA table "Gross premium")No calculation record yet. The number is computed today in engine/src/projection/internal/types/aca.ts (
YearAcaResult.grossEnrollmentPremium). -
ACA modeled allowable PTC annual
Modeled allowable premium tax credit for the year; null when not modeled.
Field:
ACA modeled premium tax creditUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(aca-ledger block and ReportPage ACA table "Modeled credit");insights(aca-threshold-proximity card evidence "Modeled premium tax credit at stake" (evidence is not rendered at pin))No calculation record yet. The number is computed today in engine/src/projection/internal/types/aca.ts (
YearAcaResult.modeledAllowablePtc). -
Display net care cost annual
Long-term-care cost remaining after the modeled insurance benefit, floored at zero.
Field:
Displayed net care costUnit: US dollars Basis: as displayed Computed by: UI transformation Status: Relocation pendingAppears in:
chart(care)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/resultsRows.ts (
buildExpenseRows). -
IRMAA surcharge annual
Income-related Medicare premium surcharge charged during the projection year.
Field:
irmaaSurchargeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(IRMAA surcharge);scenarios-page(Annual ledger comparison "IRMAA surcharge" and lifetime "IRMAA surcharge" sum)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.irmaaSurcharge). -
MAGI annual
MAGI realized in a projection year for tax, ACA, and later IRMAA decisions.
Field:
Modified adjusted gross incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(magi);csv(magi);survivor-page(Tax around the transition cell "on MAGI a → b" (death year and first survivor year));results-table(MAGI column);report(year-ledger block magi);scenarios-page(Annual "MAGI");mcp(run_projection.years[].magi)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.magi). -
Medicare premiums annual
Total Medicare premiums charged to the household during the projection year.
Field:
medicarePremiumsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Total Medicare premiums);scenarios-page(Annual ledger comparison "Medicare premiums" and lifetime "Total Medicare premiums" sum);survivor-page(SSA-44 premium savings column (difference of two runs of this value));mcp(run_projection.years[].medicarePremiums)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.medicarePremiums). -
Scenario IRMAA surcharge tier years
Count of projection years whose IRMAA tier is above 0.
Field:
Years in an IRMAA surcharge tierUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Medicare table "Years in a surcharge tier")No calculation record yet. The number is computed today in engine/src/scenarios/comparison.ts (
ScenarioIrmaaComparison.surchargeTierYears). -
Spending healthcare annual
Healthcare expense charged in a projection year, excluding the separately shown insurance premium channel.
Field:
Healthcare expenseUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(healthcare);csv(healthcare);cash-flow-drilldown(healthcare use line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.healthcare).
Accounts and growth
-
Accounts balance per account annual
End-of-year balance of each plan account after flows and growth, keyed by account id.
Field:
End-of-year balance per accountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(Investable balances by account type (summed per category by display-balance-by-category-annual));report(chart-data block per-category series (same category sum));results-table(Inherited schedule and carryforward callouts read individual balances indirectly; no per-account column is printed)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.balances). -
Accounts ending balance by category
End-of-plan balance summed by account category (cash, taxable, traditional, roth, hsa) over the selected logical balance accounts.
Field:
Ending balance by categoryUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-headline(KpiBar "ending Roth $X" (endingByCategory.roth));scenarios-page(Estate table Cash / Taxable / Traditional / Roth / HSA rows);mcp(run_projection.summary.endingByCategory);mcp(compare_scenarios.a.endingByCategory);mcp(compare_scenarios.b.endingByCategory)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.endingByCategory). -
Accounts investable total annual
Cash + taxable + traditional + Roth + HSA (+ unassigned) balances at year end.
Field:
Investable totalUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(investable);results-table(Investable column);report(year-ledger block investable and ReportPage year table);chart(Path to FI chart investable line);scenarios-page(Annual ledger comparison "Investable assets");survivor-page(Survivor spending "low point" (minimum over survivor years));results-table(Bucket lens investableTotal row and bucket sum);insights(spending-guardrails and hecm-buffer cards read year-one investableTotal)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.investableTotal). -
Accounts net worth annual
Modeled total net worth at the end of a projection year.
Field:
Net worthUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(netWorth);report(headlineResults);results-table(Net worth column);report(year-ledger block netWorth and ReportPage year table);scenarios-page(Annual "Net worth")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.netWorth). -
Display balance by category annual
Per year, the sum of per-account balances within each account category (cash, taxable, equityComp, traditional, roth, hsa).
Field:
Balances by account typeUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
chart(Investable balances by account type stacked areas);report(chart-data block cash/taxable/equityComp/traditional/roth/hsa and chartDataCsv)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/accountCategories.ts (
categoryBalances); planner-ui/src/report/reportModel.ts (chartDataRows). -
Estate to charity
Sum over accounts with a charity destination of gross balance times the charity share.
Field:
Estate passing to charityUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Estate table "Charitable destination");mcp(run_projection.summary.endingEstateToCharity);mcp(compare_scenarios.a.endingEstateToCharity);mcp(compare_scenarios.b.endingEstateToCharity)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.endingEstateToCharity). -
HECM draw annual
Tax-free HECM line-of-credit proceeds drawn this year (coordinated draws after down years plus last-resort backstop draws).
Field:
HECM drawUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(hecmCoordinatedDraw and hecmBackstopDraw source lines (YearCashFlow line identities))No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.hecmDraw). -
Income taxable yield annual
Taxable account income recognized in a projection year.
Field:
Taxable investment yieldUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(taxableYield);csv(taxableYield);scenarios-page(Lifetime income "Taxable yield");cash-flow-drilldown(taxableAccountYield source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.taxableYield). -
Pension election annuity present value
Present value of the lifetime pension annuity to the planning age at the curve-anchored discount rate, compared with the lump-sum offer.
Field:
Pension annuity present valueUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
insights(pension-election-pending card rationale "the annuity's discounted value (~$X)" and the discount rate)No calculation record yet. The number is computed today in engine/src/decisions/pensionElection.ts (
analyzePensionElections (presentValueAtCurveRate, curveRatePct)). -
Projection summary ending after tax estate
Ending net worth after estimated income tax on inherited pre-tax accounts.
Field:
endingAfterTaxEstateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-headline(ResultsPage / ReportPage KPI "After-tax estate");report(headline-results block endingAfterTaxEstate);scenarios-page(Headline and estate table "Ending after-tax estate" / "After-tax estate to heirs");compare-page(After-tax estate row);optimize-page(Objective the tournament ranks on; claim-age exact estates);solver-page(Evidence "Ending after-tax estate" and SWR rule rows);ss-page(Claim-age sweep, refinement, bridge comparison and survivor tables);relocation-page(Ending after-tax estate column (deflated for display));monte-carlo-page(Historical stress windows "Estate" column);insights(spending-headroom card ending estate (deflated));mcp(run_projection.summary.endingAfterTaxEstate);mcp(batch_evaluate.results[].objective);mcp(compare_scenarios.a.endingAfterTaxEstate);mcp(compare_scenarios.b.endingAfterTaxEstate)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.endingAfterTaxEstate). -
MCP batch ending traditional objective
Adapter sum of ending balances for traditional accounts in each evaluated candidate.
Field:
Batch ending traditional balance objectiveUnit: US dollars Basis: nominal dollars Computed by: Adapter Status: No calculation record yetAppears in:
mcp(batch_evaluate.results[].objective)No calculation record yet. The number is computed today outside the engine, in
RetireGolden-MCP/src/adapter.tsin the RetireGolden-MCP repository (batchEvaluate).
Required minimum distributions
-
Inherited distribution forced annual
Sum of executed required amounts and final-sweep amounts across inherited accounts this year (traditional and Roth character); voluntary draws excluded.
Field:
Forced inherited-account distributionUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(inheritedAccountDistribution source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.inheritedDistribution). -
QCD annual
Gross qualified charitable distribution physically made in a projection year.
Field:
Qualified charitable distributionUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(QCD lines);csv(qcd);scenarios-page(Annual "QCD" and lifetime "QCDs")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.qcd / qcdIncomeOffset). -
RMD required annual
Required minimum distribution dollars taken during the projection year.
Field:
requiredAmountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(rmd);report(year ledger RMD);results-table(RMD column);scenarios-page(Annual "RMD" and lifetime "RMDs");cash-flow-drilldown(requiredMinimumDistribution source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.rmd).
Roth
-
Optimizer recommended conversion annual
Per-year Roth conversion dollars the optimizer recommends: the solver schedule, the exact-ledger tournament winner's conversions, and the post-processed (cleaned) executable schedule.
Field:
Recommended Roth conversion scheduleUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(Conversion schedule chart bars and "N year(s)" schedule summary; post-processing adjustment list);report(modeled-findings winner conversions are summed into requested/executed totals);mcp(run_optimizer.schedule[].amount);mcp(run_optimizer.tournament.winnerConversions[].amount)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerTournament.winnerConversions[].amount / ExactLedgerScheduleAdjustment.requested, executed, cleaned). -
Optimizer schedule conversion total
Total dollars in a conversion schedule: the raw solver request, the cleaned executable schedule, or the tournament winner's conversions.
Field:
Optimizer conversion schedule totalUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
optimize-page("$X of conversions across N years", "Raw optimizer request", "Cleaned executable schedule")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/OptimizePage.tsx (
totalScheduleConversions); planner-ui/src/planner/OptimizePage.tsx (OptimizePage). -
Projection summary lifetime Roth conversions
Total traditional-account dollars converted to Roth across the projection.
Field:
lifetimeRothConversionsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(Lifetime Roth conversions);results-headline(KpiBar "Roth converted");report(headline-results block lifetimeRothConversions);mcp(run_projection.summary.lifetimeRothConversions);mcp(compare_scenarios.a.lifetimeRothConversions);mcp(compare_scenarios.b.lifetimeRothConversions)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.lifetimeRothConversions). -
Roth conversion annual
Traditional-to-Roth dollars actually converted in a projection year.
Field:
Roth conversionUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(rothConversion);optimize-page(conversion schedule);report(yearLedger);results-table(Conversion column);scenarios-page(Annual "Roth conversion" and lifetime "Roth conversions");cash-flow-drilldown(namedRothConversion and aggregateRothConversion transfer lines);mcp(run_projection.years[].rothConversion)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.rothConversion).
Ladders and valuation
-
Funded ratio result essential spending PV
Present value of essential retirement spending over the funded-ratio horizon.
Field:
essentialSpendingPvUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(essential spending valued today);insights(income-floor-funded card title and rationale (computeFundedRatio values))-
Funded ratio: present values of essential spending and guaranteed income Composition record, justified by derivation
Purpose: How much of the essential-spending floor, valued on the TIPS curve, is covered by guaranteed income valued the same way.
Statement: From the deterministic ledger years with calendar year >= fromYear (default: the start year), each year's expenses.requiredSpending and the sum incomes.socialSecurity + pension + annuity + tipsLadder are deflated to today's dollars by the caller-supplied deflator and discounted as real flows at offset t = year - startYear on the TIPS par curve (ladder-real-present-value; t = 0 is undiscounted). essentialSpendingPv = E, guaranteedIncomePv = G, fundedRatioPct = 100·G/E, unfundedPv = max(0, E - G). Returns null when there are no years or E <= 0. Units: real dollars and percent. Rounding: none.
Formula:
E = sum_t d_t S_t/(1 + y(t)/100)^t; G = sum_t d_t I_t/(1 + y(t)/100)^t; ratio = 100 G/E; unfunded = max(0, E - G)-
t: Years from the start year to the ledger year (unit: years) (domain: integer t >= 0) -
d_t: Deflator from nominal year-t dollars to today's dollars (unit: 1) (domain: d_t > 0) -
S_t: Nominal required-floor spending in year t (unit: usd) (domain: S_t >= 0) -
I_t: Nominal guaranteed income in year t (Social Security + pension + annuity + TIPS ladder) (unit: usd) (domain: I_t >= 0) -
y(t): Interpolated par real yield at t years (unit: percent/year) (domain: y(t) > -100)
Timing: end of year t, annual; the start year is t = 0 and undiscounted
Rounding: none
Limits:
- Par yields are treated as spot rates: a planning convention, not a bootstrapped zero curve
- Guaranteed income counts Social Security, pensions, annuities and TIPS-ladder flows only; wages and portfolio income are excluded by design
- Years before fromYear are excluded from both sides; the horizon ends at the last ledger year
- The deflator is supplied by the caller; the record assumes it maps nominal ledger dollars to the same real basis as the curve
- Returns null rather than a ratio when the essential present value is not positive
Provenance: derived by
codex, implemented byclaude-subagent.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: funded-ratio-hand-present-value.md Mutation receipt: funded-ratio-hand-present-value.mutation.md
Evidence tests: fundedRatio.evidence.test.ts
Implemented in: fundedRatio.ts
Is the number of: funded-ratio-result-essential-spending-pv, funded-ratio-result-guaranteed-income-pv, funded-ratio-result-funded-ratio-pct, funded-ratio-result-unfunded-pv
-
Fed by: Real present value of a cash-flow stream on the TIPS curve (formula record, 6 of 6 gates pass); Par real yield at a maturity: linear interpolation with flat endpoints (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Funded ratio result funded ratio pct
Percentage of essential retirement spending present value covered by guaranteed income.
Field:
fundedRatioPctUnit: percent Basis: no dollar basis Computed by: Engine Status: Complete chainAppears in:
income-floor(essential floor funded percentage);insights(income-floor-funded card title and rationale (computeFundedRatio values))-
Funded ratio: present values of essential spending and guaranteed income Composition record, justified by derivation
Purpose: How much of the essential-spending floor, valued on the TIPS curve, is covered by guaranteed income valued the same way.
Statement: From the deterministic ledger years with calendar year >= fromYear (default: the start year), each year's expenses.requiredSpending and the sum incomes.socialSecurity + pension + annuity + tipsLadder are deflated to today's dollars by the caller-supplied deflator and discounted as real flows at offset t = year - startYear on the TIPS par curve (ladder-real-present-value; t = 0 is undiscounted). essentialSpendingPv = E, guaranteedIncomePv = G, fundedRatioPct = 100·G/E, unfundedPv = max(0, E - G). Returns null when there are no years or E <= 0. Units: real dollars and percent. Rounding: none.
Formula:
E = sum_t d_t S_t/(1 + y(t)/100)^t; G = sum_t d_t I_t/(1 + y(t)/100)^t; ratio = 100 G/E; unfunded = max(0, E - G)-
t: Years from the start year to the ledger year (unit: years) (domain: integer t >= 0) -
d_t: Deflator from nominal year-t dollars to today's dollars (unit: 1) (domain: d_t > 0) -
S_t: Nominal required-floor spending in year t (unit: usd) (domain: S_t >= 0) -
I_t: Nominal guaranteed income in year t (Social Security + pension + annuity + TIPS ladder) (unit: usd) (domain: I_t >= 0) -
y(t): Interpolated par real yield at t years (unit: percent/year) (domain: y(t) > -100)
Timing: end of year t, annual; the start year is t = 0 and undiscounted
Rounding: none
Limits:
- Par yields are treated as spot rates: a planning convention, not a bootstrapped zero curve
- Guaranteed income counts Social Security, pensions, annuities and TIPS-ladder flows only; wages and portfolio income are excluded by design
- Years before fromYear are excluded from both sides; the horizon ends at the last ledger year
- The deflator is supplied by the caller; the record assumes it maps nominal ledger dollars to the same real basis as the curve
- Returns null rather than a ratio when the essential present value is not positive
Provenance: derived by
codex, implemented byclaude-subagent.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: funded-ratio-hand-present-value.md Mutation receipt: funded-ratio-hand-present-value.mutation.md
Evidence tests: fundedRatio.evidence.test.ts
Implemented in: fundedRatio.ts
Is the number of: funded-ratio-result-essential-spending-pv, funded-ratio-result-guaranteed-income-pv, funded-ratio-result-funded-ratio-pct, funded-ratio-result-unfunded-pv
-
Fed by: Real present value of a cash-flow stream on the TIPS curve (formula record, 6 of 6 gates pass); Par real yield at a maturity: linear interpolation with flat endpoints (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Funded ratio result guaranteed income PV
Present value of guaranteed retirement income over the funded-ratio horizon.
Field:
guaranteedIncomePvUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(guaranteed income valued today);insights(income-floor-funded card title and rationale (computeFundedRatio values))-
Funded ratio: present values of essential spending and guaranteed income Composition record, justified by derivation
Purpose: How much of the essential-spending floor, valued on the TIPS curve, is covered by guaranteed income valued the same way.
Statement: From the deterministic ledger years with calendar year >= fromYear (default: the start year), each year's expenses.requiredSpending and the sum incomes.socialSecurity + pension + annuity + tipsLadder are deflated to today's dollars by the caller-supplied deflator and discounted as real flows at offset t = year - startYear on the TIPS par curve (ladder-real-present-value; t = 0 is undiscounted). essentialSpendingPv = E, guaranteedIncomePv = G, fundedRatioPct = 100·G/E, unfundedPv = max(0, E - G). Returns null when there are no years or E <= 0. Units: real dollars and percent. Rounding: none.
Formula:
E = sum_t d_t S_t/(1 + y(t)/100)^t; G = sum_t d_t I_t/(1 + y(t)/100)^t; ratio = 100 G/E; unfunded = max(0, E - G)-
t: Years from the start year to the ledger year (unit: years) (domain: integer t >= 0) -
d_t: Deflator from nominal year-t dollars to today's dollars (unit: 1) (domain: d_t > 0) -
S_t: Nominal required-floor spending in year t (unit: usd) (domain: S_t >= 0) -
I_t: Nominal guaranteed income in year t (Social Security + pension + annuity + TIPS ladder) (unit: usd) (domain: I_t >= 0) -
y(t): Interpolated par real yield at t years (unit: percent/year) (domain: y(t) > -100)
Timing: end of year t, annual; the start year is t = 0 and undiscounted
Rounding: none
Limits:
- Par yields are treated as spot rates: a planning convention, not a bootstrapped zero curve
- Guaranteed income counts Social Security, pensions, annuities and TIPS-ladder flows only; wages and portfolio income are excluded by design
- Years before fromYear are excluded from both sides; the horizon ends at the last ledger year
- The deflator is supplied by the caller; the record assumes it maps nominal ledger dollars to the same real basis as the curve
- Returns null rather than a ratio when the essential present value is not positive
Provenance: derived by
codex, implemented byclaude-subagent.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: funded-ratio-hand-present-value.md Mutation receipt: funded-ratio-hand-present-value.mutation.md
Evidence tests: fundedRatio.evidence.test.ts
Implemented in: fundedRatio.ts
Is the number of: funded-ratio-result-essential-spending-pv, funded-ratio-result-guaranteed-income-pv, funded-ratio-result-funded-ratio-pct, funded-ratio-result-unfunded-pv
-
Fed by: Real present value of a cash-flow stream on the TIPS curve (formula record, 6 of 6 gates pass); Par real yield at a maturity: linear interpolation with flat endpoints (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Funded ratio result unfunded PV
Essential-spending present value left for the portfolio after guaranteed income.
Field:
unfundedPvUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(gap riding on the portfolio);insights(income-floor-funded card title and rationale (computeFundedRatio values))-
Funded ratio: present values of essential spending and guaranteed income Composition record, justified by derivation
Purpose: How much of the essential-spending floor, valued on the TIPS curve, is covered by guaranteed income valued the same way.
Statement: From the deterministic ledger years with calendar year >= fromYear (default: the start year), each year's expenses.requiredSpending and the sum incomes.socialSecurity + pension + annuity + tipsLadder are deflated to today's dollars by the caller-supplied deflator and discounted as real flows at offset t = year - startYear on the TIPS par curve (ladder-real-present-value; t = 0 is undiscounted). essentialSpendingPv = E, guaranteedIncomePv = G, fundedRatioPct = 100·G/E, unfundedPv = max(0, E - G). Returns null when there are no years or E <= 0. Units: real dollars and percent. Rounding: none.
Formula:
E = sum_t d_t S_t/(1 + y(t)/100)^t; G = sum_t d_t I_t/(1 + y(t)/100)^t; ratio = 100 G/E; unfunded = max(0, E - G)-
t: Years from the start year to the ledger year (unit: years) (domain: integer t >= 0) -
d_t: Deflator from nominal year-t dollars to today's dollars (unit: 1) (domain: d_t > 0) -
S_t: Nominal required-floor spending in year t (unit: usd) (domain: S_t >= 0) -
I_t: Nominal guaranteed income in year t (Social Security + pension + annuity + TIPS ladder) (unit: usd) (domain: I_t >= 0) -
y(t): Interpolated par real yield at t years (unit: percent/year) (domain: y(t) > -100)
Timing: end of year t, annual; the start year is t = 0 and undiscounted
Rounding: none
Limits:
- Par yields are treated as spot rates: a planning convention, not a bootstrapped zero curve
- Guaranteed income counts Social Security, pensions, annuities and TIPS-ladder flows only; wages and portfolio income are excluded by design
- Years before fromYear are excluded from both sides; the horizon ends at the last ledger year
- The deflator is supplied by the caller; the record assumes it maps nominal ledger dollars to the same real basis as the curve
- Returns null rather than a ratio when the essential present value is not positive
Provenance: derived by
codex, implemented byclaude-subagent.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: funded-ratio-hand-present-value.md Mutation receipt: funded-ratio-hand-present-value.mutation.md
Evidence tests: fundedRatio.evidence.test.ts
Implemented in: fundedRatio.ts
Is the number of: funded-ratio-result-essential-spending-pv, funded-ratio-result-guaranteed-income-pv, funded-ratio-result-funded-ratio-pct, funded-ratio-result-unfunded-pv
-
Fed by: Real present value of a cash-flow stream on the TIPS curve (formula record, 6 of 6 gates pass); Par real yield at a maturity: linear interpolation with flat endpoints (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Income floor ladder yield pct
Annual real income generated by the modeled ladder as a percentage of its total purchase cost.
Field:
Income-floor ladder yieldUnit: percent Basis: no dollar basis Computed by: UI transformation Status: Relocation pendingAppears in:
income-floor(annual real income as percent of total cost)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/sections/IncomeFloorSection.tsx (
IncomeFloorSection).Fed by: Par real yield at a maturity: linear interpolation with flat endpoints (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
Income TIPS ladder annual
Income paid by the modeled TIPS ladder during the projection year.
Field:
tipsLadderUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(tipsLadder);scenarios-page(Lifetime income "TIPS ladder");chart(Income by source "TIPS ladder" series);cash-flow-drilldown(tipsLadderCash source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.tipsLadder). -
Ladder build annual real income by offset
Real annual income delivered by the modeled ladder in each future year.
Field:
annualRealIncomeByOffsetUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(ladder income by year)-
Level-real-income ladder: faces solved back to front Formula record, justified by derivation
Purpose: The face amount of each rung so that every payout year's maturing principal plus the coupons of the rungs still outstanding equals the target real income.
Statement: For target real income A, first payout offset p and payout count q (each rounded to an integer and clamped to at least 1), rungs mature at offsets m = p..p+q-1 with coupon rates c_m = max(0.125%, y(m))/100. Faces are solved from the last offset backward: F_m = max(0, (A - sum over later offsets j of F_j c_j)/(1 + c_m)), so that F_m(1 + c_m) plus the coupons of every rung still outstanding equals A in year m. Each rung is then priced on the curve (ladder-annual-coupon-par-pricing); totalCost is the sum of rung costs; annualRealIncomeByOffset lists coupons plus maturing principal for offsets 1..p+q-1 (coupon-only inside a deferral window); targetAnnualRealIncome echoes A. Units: real (today's) dollars. Rounding: none.
Formula:
F_m = max(0, (A - sum_{j>m} F_j c_j) / (1 + c_m)) for m from last to first; income_m = F_m (1 + c_m) + sum_{j>m} F_j c_j = A-
A: Level real income target per payout year (unit: usd) (domain: A >= 0) -
m: Maturity offset of a rung (unit: years) (domain: integer, p <= m <= p+q-1, p >= 1) -
c_m: Coupon rate of the rung maturing at m, as a fraction (unit: 1) (domain: c_m >= 0.00125) -
F_m: Real face of the rung maturing at m (unit: usd) (domain: F_m >= 0)
Timing: end of year, annual; the rung maturing in year m pays its last coupon and principal that year
Rounding: none
Limits:
- Faces are floored at zero: a target smaller than the later rungs' coupons yields a zero-face rung and that year then receives more than the target
- Payout offset and count are rounded and clamped to at least 1 rather than rejected
- Coupons pay annually and par yields serve as spot rates for pricing (ladderMath.ts header simplifications)
- No CUSIP-level lot rounding in core mode; faces are continuous
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-backward-face-construction.md Mutation receipt: ladder-backward-face-construction.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-rung-face, ladder-build-annual-real-income-by-offset, ladder-build-total-cost, ladder-build-target-annual-real-income
-
-
-
Ladder build target annual real income
Real annual income the ladder is designed to deliver.
Field:
targetAnnualRealIncomeUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(target annual real income)-
Level-real-income ladder: faces solved back to front Formula record, justified by derivation
Purpose: The face amount of each rung so that every payout year's maturing principal plus the coupons of the rungs still outstanding equals the target real income.
Statement: For target real income A, first payout offset p and payout count q (each rounded to an integer and clamped to at least 1), rungs mature at offsets m = p..p+q-1 with coupon rates c_m = max(0.125%, y(m))/100. Faces are solved from the last offset backward: F_m = max(0, (A - sum over later offsets j of F_j c_j)/(1 + c_m)), so that F_m(1 + c_m) plus the coupons of every rung still outstanding equals A in year m. Each rung is then priced on the curve (ladder-annual-coupon-par-pricing); totalCost is the sum of rung costs; annualRealIncomeByOffset lists coupons plus maturing principal for offsets 1..p+q-1 (coupon-only inside a deferral window); targetAnnualRealIncome echoes A. Units: real (today's) dollars. Rounding: none.
Formula:
F_m = max(0, (A - sum_{j>m} F_j c_j) / (1 + c_m)) for m from last to first; income_m = F_m (1 + c_m) + sum_{j>m} F_j c_j = A-
A: Level real income target per payout year (unit: usd) (domain: A >= 0) -
m: Maturity offset of a rung (unit: years) (domain: integer, p <= m <= p+q-1, p >= 1) -
c_m: Coupon rate of the rung maturing at m, as a fraction (unit: 1) (domain: c_m >= 0.00125) -
F_m: Real face of the rung maturing at m (unit: usd) (domain: F_m >= 0)
Timing: end of year, annual; the rung maturing in year m pays its last coupon and principal that year
Rounding: none
Limits:
- Faces are floored at zero: a target smaller than the later rungs' coupons yields a zero-face rung and that year then receives more than the target
- Payout offset and count are rounded and clamped to at least 1 rather than rejected
- Coupons pay annually and par yields serve as spot rates for pricing (ladderMath.ts header simplifications)
- No CUSIP-level lot rounding in core mode; faces are continuous
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-backward-face-construction.md Mutation receipt: ladder-backward-face-construction.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-rung-face, ladder-build-annual-real-income-by-offset, ladder-build-total-cost, ladder-build-target-annual-real-income
-
-
-
Ladder build total cost
Purchase cost of all rungs in the modeled income-floor ladder.
Field:
totalCostUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(ladder total cost)-
Level-real-income ladder: faces solved back to front Formula record, justified by derivation
Purpose: The face amount of each rung so that every payout year's maturing principal plus the coupons of the rungs still outstanding equals the target real income.
Statement: For target real income A, first payout offset p and payout count q (each rounded to an integer and clamped to at least 1), rungs mature at offsets m = p..p+q-1 with coupon rates c_m = max(0.125%, y(m))/100. Faces are solved from the last offset backward: F_m = max(0, (A - sum over later offsets j of F_j c_j)/(1 + c_m)), so that F_m(1 + c_m) plus the coupons of every rung still outstanding equals A in year m. Each rung is then priced on the curve (ladder-annual-coupon-par-pricing); totalCost is the sum of rung costs; annualRealIncomeByOffset lists coupons plus maturing principal for offsets 1..p+q-1 (coupon-only inside a deferral window); targetAnnualRealIncome echoes A. Units: real (today's) dollars. Rounding: none.
Formula:
F_m = max(0, (A - sum_{j>m} F_j c_j) / (1 + c_m)) for m from last to first; income_m = F_m (1 + c_m) + sum_{j>m} F_j c_j = A-
A: Level real income target per payout year (unit: usd) (domain: A >= 0) -
m: Maturity offset of a rung (unit: years) (domain: integer, p <= m <= p+q-1, p >= 1) -
c_m: Coupon rate of the rung maturing at m, as a fraction (unit: 1) (domain: c_m >= 0.00125) -
F_m: Real face of the rung maturing at m (unit: usd) (domain: F_m >= 0)
Timing: end of year, annual; the rung maturing in year m pays its last coupon and principal that year
Rounding: none
Limits:
- Faces are floored at zero: a target smaller than the later rungs' coupons yields a zero-face rung and that year then receives more than the target
- Payout offset and count are rounded and clamped to at least 1 rather than rejected
- Coupons pay annually and par yields serve as spot rates for pricing (ladderMath.ts header simplifications)
- No CUSIP-level lot rounding in core mode; faces are continuous
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-backward-face-construction.md Mutation receipt: ladder-backward-face-construction.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-rung-face, ladder-build-annual-real-income-by-offset, ladder-build-total-cost, ladder-build-target-annual-real-income
-
Fed by: Synthetic TIPS rung: floored coupon and par-curve price (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Ladder real flows coupons
Inflation-adjusted coupon cash flow paid by ladder holdings in a year.
Field:
couponsUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(coupon cash flow)-
Ladder cash flows in a year and face outstanding after it Formula record, justified by derivation
Purpose: The real coupons, maturing principal and outstanding face of a rung set in one year, and the face still outstanding once that year completes.
Statement: For a rung set and an integer offset k >= 1: coupons = sum over rungs with maturity offset >= k of F·c/100; maturingPrincipal = sum of F over rungs with maturity offset = k; outstandingFace = sum of F over rungs with maturity offset >= k, the maturing rung included so it earns its last coupon and its inflation accretion. ladderRemainingFace(k) = sum of F over rungs with maturity offset > k, the face still outstanding after year k completes. Units: real (today's) dollars. Rounding: none.
Formula:
coupons_k = sum_{m >= k} F_m c_m/100; maturing_k = sum_{m = k} F_m; outstanding_k = sum_{m >= k} F_m; remaining_k = sum_{m > k} F_m-
k: Year offset from the anchor year (unit: years) (domain: integer k >= 1) -
F_m: Real face of the rung maturing at offset m (unit: usd) (domain: F_m >= 0) -
c_m: Annual coupon rate of that rung (unit: percent/year) (domain: c_m >= 0.125)
Timing: annual; a rung is outstanding through the year it matures and gone the year after
Rounding: none
Limits:
- Values are real (today's) dollars; the ledger multiplies by its own inflation path to index them
- ladder-value-annual is the ledger's nominal figure: ladderRemainingFace at the year's offset times the purchase scale and the year's inflation factor (projection/internal/tipsLadderAnnualCashFlow.ts); this record pins the remaining-face half of that product
- Offsets are whole years by construction; a fractional offset matches no maturity
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-rung-flows-and-remaining-face.md Mutation receipt: ladder-rung-flows-and-remaining-face.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-real-flows-coupons, ladder-real-flows-maturing-principal
Feeds: ladder-value-annual
-
-
-
Ladder real flows maturing principal
Inflation-adjusted principal returned by ladder holdings maturing in a year.
Field:
maturingPrincipalUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(maturing principal cash flow)-
Ladder cash flows in a year and face outstanding after it Formula record, justified by derivation
Purpose: The real coupons, maturing principal and outstanding face of a rung set in one year, and the face still outstanding once that year completes.
Statement: For a rung set and an integer offset k >= 1: coupons = sum over rungs with maturity offset >= k of F·c/100; maturingPrincipal = sum of F over rungs with maturity offset = k; outstandingFace = sum of F over rungs with maturity offset >= k, the maturing rung included so it earns its last coupon and its inflation accretion. ladderRemainingFace(k) = sum of F over rungs with maturity offset > k, the face still outstanding after year k completes. Units: real (today's) dollars. Rounding: none.
Formula:
coupons_k = sum_{m >= k} F_m c_m/100; maturing_k = sum_{m = k} F_m; outstanding_k = sum_{m >= k} F_m; remaining_k = sum_{m > k} F_m-
k: Year offset from the anchor year (unit: years) (domain: integer k >= 1) -
F_m: Real face of the rung maturing at offset m (unit: usd) (domain: F_m >= 0) -
c_m: Annual coupon rate of that rung (unit: percent/year) (domain: c_m >= 0.125)
Timing: annual; a rung is outstanding through the year it matures and gone the year after
Rounding: none
Limits:
- Values are real (today's) dollars; the ledger multiplies by its own inflation path to index them
- ladder-value-annual is the ledger's nominal figure: ladderRemainingFace at the year's offset times the purchase scale and the year's inflation factor (projection/internal/tipsLadderAnnualCashFlow.ts); this record pins the remaining-face half of that product
- Offsets are whole years by construction; a fractional offset matches no maturity
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-rung-flows-and-remaining-face.md Mutation receipt: ladder-rung-flows-and-remaining-face.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-real-flows-coupons, ladder-real-flows-maturing-principal
Feeds: ladder-value-annual
-
-
-
Ladder rung cost
Purchase cost of a single modeled ladder rung.
Field:
costUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(rung cost)-
Synthetic TIPS rung: floored coupon and par-curve price Formula record, justified by derivation
Purpose: What one ladder rung costs today: its annual real coupons and principal discounted on the curve, with the coupon set to the yield at maturity floored at 0.125%.
Statement: For a rung of real face F maturing n whole years out, the coupon rate is c = max(0.125%, y(n)), where y(n) is the interpolated par real yield at n years. The price is the sum over k = 1..n of (F·c/100 + [k = n]·F)/(1 + y(k)/100)^k: each end-of-year cash flow discounted at the interpolated par yield for its own year treated as a spot rate. On a flat curve with a nonbinding floor c = y and the price equals F. Units: real (today's) dollars; percent inputs are divided by 100. Domain: F >= 0, integer n >= 1, y(k) > -100%. Rounding: none.
Formula:
c = max(0.125, y(n)); P = sum_{k=1..n} (F c/100 + [k = n] F) / (1 + y(k)/100)^k-
F: Real face (principal) of the rung (unit: usd) (domain: F >= 0) -
n: Maturity offset from the anchor year (unit: years) (domain: integer n >= 1) -
y(k): Interpolated par real yield at k years (unit: percent/year) (domain: y(k) > -100) -
c: Annual coupon rate of the synthetic rung (unit: percent/year) (domain: c >= 0.125) -
P: Real purchase price of the rung (unit: usd) (domain: P >= 0)
Timing: end of year, annual coupons, principal with the last coupon
Rounding: none
Limits:
- Coupons pay annually; real-world semiannual TIPS timing is ignored (ladderMath.ts header)
- Par yields are used as spot rates for discounting; no zero curve is bootstrapped (ladderMath.ts header)
- The 0.125% floor is the regulatory minimum TIPS coupon; a curve yield below it prices the rung above par
- No CUSIP-level lot rounding in core mode: face is continuous at $1 granularity (ladderMath.ts header)
- tipsCouponRatePct and priceRung are module-private; the evidence reaches them through buildLadder with a one-rung ladder whose target is F(1 + c), which the back-substitution solves to face F exactly
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-annual-coupon-par-pricing.md Mutation receipt: ladder-annual-coupon-par-pricing.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-rung-cost, ladder-rung-coupon-rate-pct
Feeds: ladder-build-total-cost
-
Fed by: FedInvest security-price CSV: TIPS rows to reference records (data record, 6 of 6 gates pass); Latest FedInvest price date: previous business day in local time (model record, 6 of 6 gates pass); Nearest FedInvest TIPS for a rung year (formula record, 6 of 6 gates pass); Real present value of a cash-flow stream on the TIPS curve (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Ladder rung coupon rate pct
Annual real coupon rate of a modeled ladder rung.
Field:
couponRatePctUnit: percent Basis: no dollar basis Computed by: Engine Status: Complete chainAppears in:
income-floor(coupon rate)-
Synthetic TIPS rung: floored coupon and par-curve price Formula record, justified by derivation
Purpose: What one ladder rung costs today: its annual real coupons and principal discounted on the curve, with the coupon set to the yield at maturity floored at 0.125%.
Statement: For a rung of real face F maturing n whole years out, the coupon rate is c = max(0.125%, y(n)), where y(n) is the interpolated par real yield at n years. The price is the sum over k = 1..n of (F·c/100 + [k = n]·F)/(1 + y(k)/100)^k: each end-of-year cash flow discounted at the interpolated par yield for its own year treated as a spot rate. On a flat curve with a nonbinding floor c = y and the price equals F. Units: real (today's) dollars; percent inputs are divided by 100. Domain: F >= 0, integer n >= 1, y(k) > -100%. Rounding: none.
Formula:
c = max(0.125, y(n)); P = sum_{k=1..n} (F c/100 + [k = n] F) / (1 + y(k)/100)^k-
F: Real face (principal) of the rung (unit: usd) (domain: F >= 0) -
n: Maturity offset from the anchor year (unit: years) (domain: integer n >= 1) -
y(k): Interpolated par real yield at k years (unit: percent/year) (domain: y(k) > -100) -
c: Annual coupon rate of the synthetic rung (unit: percent/year) (domain: c >= 0.125) -
P: Real purchase price of the rung (unit: usd) (domain: P >= 0)
Timing: end of year, annual coupons, principal with the last coupon
Rounding: none
Limits:
- Coupons pay annually; real-world semiannual TIPS timing is ignored (ladderMath.ts header)
- Par yields are used as spot rates for discounting; no zero curve is bootstrapped (ladderMath.ts header)
- The 0.125% floor is the regulatory minimum TIPS coupon; a curve yield below it prices the rung above par
- No CUSIP-level lot rounding in core mode: face is continuous at $1 granularity (ladderMath.ts header)
- tipsCouponRatePct and priceRung are module-private; the evidence reaches them through buildLadder with a one-rung ladder whose target is F(1 + c), which the back-substitution solves to face F exactly
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-annual-coupon-par-pricing.md Mutation receipt: ladder-annual-coupon-par-pricing.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-rung-cost, ladder-rung-coupon-rate-pct
Feeds: ladder-build-total-cost
-
Fed by: Par real yield at a maturity: linear interpolation with flat endpoints (formula record, 6 of 6 gates pass); Embedded Treasury par real-yield curve, 2026-06-30 (data record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
-
Ladder rung face
Face value purchased for a modeled ladder rung.
Field:
faceUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: Complete chainAppears in:
income-floor(face value)-
Level-real-income ladder: faces solved back to front Formula record, justified by derivation
Purpose: The face amount of each rung so that every payout year's maturing principal plus the coupons of the rungs still outstanding equals the target real income.
Statement: For target real income A, first payout offset p and payout count q (each rounded to an integer and clamped to at least 1), rungs mature at offsets m = p..p+q-1 with coupon rates c_m = max(0.125%, y(m))/100. Faces are solved from the last offset backward: F_m = max(0, (A - sum over later offsets j of F_j c_j)/(1 + c_m)), so that F_m(1 + c_m) plus the coupons of every rung still outstanding equals A in year m. Each rung is then priced on the curve (ladder-annual-coupon-par-pricing); totalCost is the sum of rung costs; annualRealIncomeByOffset lists coupons plus maturing principal for offsets 1..p+q-1 (coupon-only inside a deferral window); targetAnnualRealIncome echoes A. Units: real (today's) dollars. Rounding: none.
Formula:
F_m = max(0, (A - sum_{j>m} F_j c_j) / (1 + c_m)) for m from last to first; income_m = F_m (1 + c_m) + sum_{j>m} F_j c_j = A-
A: Level real income target per payout year (unit: usd) (domain: A >= 0) -
m: Maturity offset of a rung (unit: years) (domain: integer, p <= m <= p+q-1, p >= 1) -
c_m: Coupon rate of the rung maturing at m, as a fraction (unit: 1) (domain: c_m >= 0.00125) -
F_m: Real face of the rung maturing at m (unit: usd) (domain: F_m >= 0)
Timing: end of year, annual; the rung maturing in year m pays its last coupon and principal that year
Rounding: none
Limits:
- Faces are floored at zero: a target smaller than the later rungs' coupons yields a zero-face rung and that year then receives more than the target
- Payout offset and count are rounded and clamped to at least 1 rather than rejected
- Coupons pay annually and par yields serve as spot rates for pricing (ladderMath.ts header simplifications)
- No CUSIP-level lot rounding in core mode; faces are continuous
Provenance: derived by
codex, implemented byclaude-subagent.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: ladder-backward-face-construction.md Mutation receipt: ladder-backward-face-construction.mutation.md
Evidence tests: ladderMath.evidence.test.ts
Implemented in: ladderMath.ts
Is the number of: ladder-rung-face, ladder-build-annual-real-income-by-offset, ladder-build-total-cost, ladder-build-target-annual-real-income
-
-
-
Ladder value annual
Value of the modeled bond/TIPS ladder in a projection year.
Field:
Ladder valueUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(ladderValue)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.ladderValue).Fed by: Ladder cash flows in a year and face outstanding after it (formula record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
Longevity
-
Display years before plan end
How many years before the plan horizon the portfolio depletes.
Field:
Years depleted before plan endUnit: years Basis: no dollar basis Computed by: UI transformation Status: Relocation pendingAppears in:
results-headline(Depletion narrative "depletes N years before the plan ends")Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ResultsPage.tsx (
ResultsPage). -
Longevity depletion year
First projection year with any spending shortfall; null when investable assets last through the horizon.
Field:
Depletion yearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
results-headline(KpiBar "Money lasts ... until YEAR");results-headline(ResultsPage narrative "This plan runs out of money in YEAR");results-table(Balances chart "depleted" reference line and "Portfolio depletes in YEAR" callout);report(headline-results block depletionYear);compare-page(Money lasts row);scenarios-page(Headline "Depletion year");ss-page(Bridge comparison and claim-age tables "until YEAR / never");survivor-page(Degenerate-timings note "runs out of money in YEAR");relocation-page(RelocationCandidateRow.depletionYear (carried));monte-carlo-page(Historical stress windows "Depletes" column);insights(InsightCardView flat-delta note "The base plan runs out of money in YEAR")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
ProjectionResult.depletionYear). -
Longevity survival percentile age
The oldest integer age a person reaches with probability at least pct/100 on the SSA period life table, optionally with a health hazard multiplier and a joint (either-survives) curve for a couple.
Field:
Survival-percentile planning ageUnit: age in years Basis: no dollar basis Computed by: Engine Status: Complete chainAppears in:
assumptions-card(SurvivalPercentileModal planning-age preview (household section), clamped to 60..120 before it becomes the plan's planning age)-
Joint (either-survives) percentile age on the primary's age clock Formula record, justified by derivation
Purpose: The couple's planning age: the oldest primary age at which at least one of two independent lives is alive with probability at least pct/100.
Statement: With from = floor(max(primary.age, 0)), partnerFrom = floor(max(partner.age, 0)) and threshold = min(max(p, 0.1), 100)/100: for t = 0, 1, ... while from + t <= 120, let P(t) = 1 - (1 - S_primary(t))(1 - S_partner(t)), where each S(t) is the product of (1 - q)^h over the t ages from that person's own starting age under that person's hazard (default 1). Record best = from + t while P(t) >= threshold; stop at the first t below the threshold, or once both survivals are 0. Returns best; P(0) = 1, so the result is always >= from and never below the primary's single-life answer. Units: integer primary age. Rounding: none.
Formula:
age* = max{ from + t : 1 - (1 - S_primary(t))(1 - S_partner(t)) >= p/100 }-
from, partnerFrom: Floored current ages of primary and partner (unit: years) (domain: integer >= 0) -
t: Years elapsed on the primary's clock (unit: years) (domain: integer >= 0, from + t <= 120) -
S_primary(t), S_partner(t): Each life's survival over t more years (survival-probability-product) (unit: 1) (domain: [0, 1]) -
p: Percent chance that at least one is alive, clamped to [0.1, 100] (unit: percent) (domain: 0.1 <= p <= 100)
Timing: annual; both curves advance one year per step on the primary's clock
Rounding: none
Limits:
- Independent lifetimes; the either-alive probability is the complement of both being dead, 1 - (1 - S_a)(1 - S_b)
- The partner's clock is offset by the age difference and advances with the primary's; the answer is a primary age, not a partner age
- The percentage is clamped to [0.1, 100] before use, a bound the signature comment does not state
- Each person's hazard power applies to that person's own curve; a missing hazard is 1
Provenance: derived by
codex, implemented byclaude-subagent.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: joint-survival-percentile-age.md Mutation receipt: joint-survival-percentile-age.mutation.md
Evidence tests: survival.evidence.test.ts
Implemented in: survival.ts
Is the number of: longevity-survival-percentile-age
-
-
Survival-percentile planning age: oldest age reached with probability at least pct/100 Formula record, justified by derivation
Purpose: The single-life planning age the assumptions card previews: the age a person has a pct% chance of reaching.
Statement: For current age c, sex, percentage p and hazard power h (default 1): threshold = min(max(p, 0.1), 100)/100. Starting at from = floor(max(c, 0)) with S = 1 and best = from, for x = from..119 multiply S by (1 - q(x))^h; while S >= threshold record best = x + 1, and stop at the first x whose S falls below the threshold. Returns best: the oldest integer age whose conditional survival from c is at least the threshold, always >= from. Units: integer age. Rounding: none.
Formula:
age* = max{ g >= from : S(from -> g) >= p/100 }, with S(from -> from) = 1-
from: Floored current age (unit: years) (domain: integer >= 0) -
p: Percent chance of reaching the age, clamped to [0.1, 100] (unit: percent) (domain: 0.1 <= p <= 100) -
S(from -> g): Conditional survival to g (survival-probability-product) (unit: 1) (domain: [0, 1], nonincreasing in g) -
age*: Survival-percentile planning age (unit: years) (domain: from <= age* <= 119)
Timing: annual survival steps over integer ages
Rounding: none
Limits:
- The percentage is clamped to [0.1, 100] before use, a bound the signature comment does not state; a value passed as a probability (0.97) is read as 0.97%
- Survival is nonincreasing, so the qualifying ages form an initial interval and the loop may stop at the first failure
- The signature comment bounds the result by MAX_AGE + 1 (120); since q(119) = 1 the survival to 120 is 0 and 119 is the largest value actually returned
- The planner-ui SurvivalPercentileModal clamps the result to 60..120 before it becomes the plan's planning age; that clamp is presentation and is not part of this record
Provenance: derived by
codex, implemented byclaude-subagent.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: survival-percentile-age.md Mutation receipt: survival-percentile-age.mutation.md
Evidence tests: survival.evidence.test.ts
Implemented in: survival.ts
Is the number of: longevity-survival-percentile-age
-
Fed by: One-year death probability from SSA remaining life expectancy (formula record, 6 of 6 gates pass); Hazard power for a remaining-years multiplier, solved by bisection (model record, 6 of 6 gates pass); Conditional survival to a target age: product of hazard-adjusted one-year survivals (formula record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
Monte Carlo
-
Annuitization payout rate pct
Annual annuity payout as a percent of premium at the payment start age, from the embedded default quote table or the user quote.
Field:
SPIA payout rateUnit: percent Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Annuitization paragraph "payout rate X% at age Y");insights(annuitizationHeadroom card illustrative monthly income (spiaPayoutRate))No calculation record yet. The number is computed today in engine/src/decisions/annuitization.ts (
AnnuitizationSweep.payoutRatePct). -
Annuitization sweep annual income
Annual life-annuity income the premium buys at the quoted payout rate.
Field:
Annuitization sweep annual incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Annuitization frontier table "Income/yr" column)No calculation record yet. The number is computed today in engine/src/decisions/annuitization.ts (
AnnuitizationSweepPoint.annualIncome). -
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 allocationUnit: percent Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Annuitization frontier chart x-axis and table "Annuitized" column)No calculation record yet. The number is computed today in engine/src/decisions/annuitization.ts (
AnnuitizationSweepPoint.effectiveAllocationPct). -
Annuitization sweep premium
SPIA premium traded away at each grid point: the requested share of investable assets, capped by the largest liquid funding account.
Field:
Annuitization sweep premiumUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Annuitization frontier table "Premium" column)No calculation record yet. The number is computed today in engine/src/decisions/annuitization.ts (
AnnuitizationSweepPoint.premium). -
Display fan band widths
Heights of the stacked p10-p90 and p25-p75 bands drawn on the Range of outcomes chart.
Field:
Fan chart band widthsUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
monte-carlo-page(Range of outcomes stacked Area dataKeys d.p90 - d.p10 and d.p75 - d.p25)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/MonteCarloPage.tsx (
MonteCarloPage). -
Display histogram bin label
The dollar label printed under each ending-balance histogram bar.
Field:
Histogram bin center labelUnit: US dollars Basis: nominal dollars Computed by: UI transformation Status: Relocation pendingAppears in:
monte-carlo-page(Ending balances histogram x-axis labels (histRows))Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/MonteCarloPage.tsx (
MonteCarloPage). -
Historical stress window total shortfall
Sum of unfunded spending over a deterministic replay of one rolling or reversed historical market window.
Field:
Historical window total shortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Historical stress windows table "Shortfall" column)No calculation record yet. The number is computed today in engine/src/montecarlo/historicalSuites.ts (
HistoricalStressWindow.totalShortfall). -
Monte carlo average longest cut spell years
Among paths that cut at least once, the average length in years of the longest consecutive run of cut years.
Field:
Average longest cut spellUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Longest cut spell (average)")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.averageLongestCutSpellYears). -
Monte carlo average total shortfall
Mean across all paths of total unfunded spending.
Field:
Average total shortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Risk table "Average total shortfall")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.spendingShortfall.averageTotalShortfallDollars). -
Monte carlo average years below target
Mean across paths of the number of years with a target-lifestyle shortfall above SHORTFALL_EPSILON.
Field:
Average years below targetUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Years below target (average)")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.averageYearsBelowTarget). -
Monte carlo cut years
Among paths that cut at least once, the average and 90th-percentile number of cut years.
Field:
Cut years, average and p90Unit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Years cut, typical / worst-case")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.averageCutYears / p90CutYears). -
Monte carlo depletion probability by year
Per depletion year, the share of all paths first depleting that year and the cumulative share depleted by that year.
Field:
Depletion probability by yearUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page("Depletion probability by year" chart: "First depletion" bars and cumulative line, aria-label cumulative percent);scenarios-page(Risk 'Cumulative depletion probability by year' table (ScenarioRiskComparison.depletionProbabilityByYear[].cumulativeProbability, read at each year from MonteCarloSummary.depletionProbabilityByYear))No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.depletionProbabilityByYear[].probability / cumulativeProbability). -
Monte carlo depletion year histogram
Number of paths whose investable assets first deplete in each calendar year (successes excluded).
Field:
First-depletion year countsUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page("When depleting plans run out" bar chart and its aria-label total of depleting paths);monte-carlo-page(WhySuccessPanel depletion sentence)No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.depletionYearCounts[].count). -
Monte carlo ending after tax estate percentiles
Percentiles (p10, p25, p50, p75, p90) of ending after-tax estate across paths.
Field:
Ending after-tax estate percentilesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Verdict paragraph "Median ending estate / worst 10% / best 10%" (p50, p10, p90));monte-carlo-page("Worst-case estate" tile (p10));monte-carlo-page(Ending-balance histogram aria-label median (p50));monte-carlo-page(Annuitization table "Median estate" column and frontier point medians (AnnuitizationPointMetrics / StochasticFrontierPoint medianEndingAfterTaxEstate, p10EndingAfterTaxEstate));scenarios-page(Risk table "After-tax estate p10 / p50 / p90")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.endingAfterTaxEstate.percentiles). -
Monte carlo ending investable histogram
Counts of paths per equal-width bin of ending investable balance (30 bins from min to max).
Field:
Ending investable balance histogramUnit: count Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page("Ending balances" bar chart (counts per bin; bin label from min and binWidth))No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.endingInvestable.histogram (Histogram.min, binWidth, counts)).Fed by: One-year death probability from SSA remaining life expectancy (formula record, 6 of 6 gates pass); Sampled death age: inverse-Bernoulli walk over annual death probabilities (model record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
Monte carlo excess funding rate
Across all path-years, excess spending funded divided by excess spending intended.
Field:
Excess-layer funding rateUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Ideal / excess funded" (second percent))No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.excessFundingRate). -
Monte carlo expected shortfall on failing paths
Average total unfunded spending across only the paths that depleted.
Field:
Expected shortfall on failing pathsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Downside tile "Typical shortfall when the plan falls short");scenarios-page(Risk table "Expected shortfall on failing paths");monte-carlo-page(Frontier and annuitization point metrics (expectedShortfallDollars; carried but not charted))No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.downsideRisk.expectedShortfallDollars). -
Monte carlo failing path count
Number of paths that depleted.
Field:
Failing path countUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(WhySuccessPanel "lasted ... in N of M simulated markets" (pathCount - failingPathCount))No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.downsideRisk.failingPathCount). -
Monte carlo failure rate
Share of paths that deplete (1 - success rate, computed directly as failingPathCount / pathCount).
Field:
Failure probabilityUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Downside tile "Chance of running short" percent)No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.downsideRisk.failureRate). -
Monte carlo flexible goal outcome counts
Total counts of flexible one-time goals funded, partially funded, deferred and skipped, summed over all path-years.
Field:
Flexible goal outcomes across pathsUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Flexible goals" counts)No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.flexibleGoals.funded / partiallyFunded / deferred / skipped). -
Monte carlo guardrail action counts
Total number of guardrail cut and raise actions summed over all path-years.
Field:
Guardrail actions across path-yearsUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "{cut} cuts · {raise} raises")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.guardrailActionCounts.cut / raise). -
Monte carlo ideal funding rate
Across all path-years, ideal spending funded divided by ideal spending intended.
Field:
Ideal-layer funding rateUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Ideal / excess funded" (first percent))No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.idealFundingRate). -
Monte carlo investable fan percentiles
Per projection year, the 10th, 25th, 50th, 75th and 90th percentiles of end-of-year investable balance across paths (linear-interpolated order statistics).
Field:
Investable-balance fan percentilesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page("Range of outcomes" fan chart: p10-p90 and p25-p75 bands, median line, and the aria-label figures for the last year);monte-carlo-page(WhySuccessPanel decade-out p10 versus p50 sentence);mcp(run_monte_carlo.percentiles.p10);mcp(run_monte_carlo.percentiles.p25);mcp(run_monte_carlo.percentiles.p50);mcp(run_monte_carlo.percentiles.p75);mcp(run_monte_carlo.percentiles.p90)No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.fan (YearPercentiles)). -
Monte carlo max cut depth percentiles
Among paths that cut at least once, the median and 90th-percentile deepest cut as a fraction of the discretionary layer.
Field:
Deepest cut, median and p90Unit: percent Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Typical / worst-case cut depth")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.medianMaxCutDepth / p90MaxCutDepth). -
Monte carlo P90 average annual target shortfall
90th percentile across paths of the path-average annual target-lifestyle shortfall.
Field:
p90 average annual target shortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Worst 10% average annual target miss")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.p90AverageAnnualTargetShortfall). -
Monte carlo P90 total shortfall
90th percentile across all paths of the total unfunded spending over the whole retirement.
Field:
p90 cumulative shortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Downside tile "Worst 10% cumulative shortfall")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.spendingShortfall.p90TotalShortfallDollars (= downsideRisk.p90TotalShortfallDollars)). -
Monte carlo paths with cut share
Share of paths with at least one guardrail cut year.
Field:
Probability of a spending cutUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Chance of a spending cut");scenarios-page(Risk table "Probability of a spending cut")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.pathsWithCut). -
Monte carlo paths with raise share
Share of paths with at least one guardrail raise action.
Field:
Probability of a spending raiseUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Chance of a raise")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.pathsWithRaise). -
Monte carlo prob ending above bequest target
Share of paths whose ending after-tax estate is at least the bequest target inflated along that path's realized inflation series; null without a target.
Field:
Probability of clearing the bequest targetUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Chance of meeting the bequest target")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.probEndingAboveBequestTarget). -
Monte carlo prob ending surplus
Share of paths whose ending after-tax estate is positive.
Field:
Probability of ending with a surplusUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Adjustment tile "Chance of ending with money left")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.adjustments.probEndingSurplus). -
Monte carlo required floor success rate
Share of paths that funded the required spending floor in every year (a shortfall below SHORTFALL_EPSILON is ignored).
Field:
Required-floor success probabilityUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Required floor met");scenarios-page(Risk table "Required-floor success rate");mcp(run_monte_carlo.requiredFloorSuccessRate)No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.requiredFloorSuccessRate). -
Monte carlo success rate
Share of simulated market paths on which investable assets never deplete before the plan horizon.
Field:
Success probabilityUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(SuccessGauge percent and verdict heading);monte-carlo-page(Layered success tile "Any spending shortfall" (successRate));monte-carlo-page(WhySuccessPanel "What it counts" percent);monte-carlo-page(Spending vs. success and Retirement age vs. success frontier charts (StochasticFrontierPoint.successRate));monte-carlo-page(Annuitization frontier chart success line and glidepath-only dashed line (AnnuitizationPointMetrics.successRate));results-headline(KpiBar "Market success" percent (useMcSuccessRateState headline run));optimize-page("Monte Carlo success rate with this claim change" and the success stat);scenarios-page(Risk table "Portfolio success rate");relocation-page(Success column when Monte Carlo is enabled);ss-page(Bridge comparison and claim-age table success columns);insights(InsightCardView base and patched 250-path runs behind the Monte Carlo delta line);mcp(run_monte_carlo.successRate)No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.successRate).Fed by: One-year death probability from SSA remaining life expectancy (formula record, 6 of 6 gates pass); Sampled death age: inverse-Bernoulli walk over annual death probabilities (model record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
Monte carlo target attainment median
Median across paths of the share of target-lifestyle spending funded over the path (1 = every target dollar funded).
Field:
Median target attainmentUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Median target attainment");scenarios-page(Risk table "Median target attainment")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.targetAttainmentPct.p50). -
Monte carlo target lifestyle success rate
Share of paths that funded full target-lifestyle spending in every year.
Field:
Target-lifestyle success probabilityUnit: probability Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Layered success tile "Target lifestyle funded");scenarios-page(Risk table "Target-lifestyle success rate")No calculation record yet. The number is computed today in engine/src/montecarlo/run.ts (
MonteCarloSummary.targetLifestyleSuccessRate). -
Stochastic frontier variant axis
The spending level or retirement age each frontier variant was built with (grid multipliers 0.85..1.15 of spending; -2..+2 years of retirement age).
Field:
Frontier variant valueUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
monte-carlo-page(Frontier charts x-axis (spending dollars; retirement age))No calculation record yet. The number is computed today in engine/src/montecarlo/frontiers.ts (
StochasticFrontierPoint.x).
Optimizer and comparisons
-
Claim age co optimization combinations evaluated
Number of household Social Security claim-age combinations evaluated by optimization.
Field:
combinationsEvaluatedUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(claim combinations evaluated);report(modeled-findings claim-age "SS claim combinations optimized")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ClaimAgeCoOptimization.combinationsEvaluated). -
Claim age co optimization current claim exact estate
After-tax estate produced by exact validation of the current claim ages.
Field:
currentClaimExactEstateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(current claim exact estate);report(modeled-findings claim-age evidence)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ClaimAgeCoOptimization.currentClaimExactEstate). -
Claim age co optimization joint exact estate
After-tax estate produced by exact validation of the jointly optimized claim ages.
Field:
jointExactEstateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(co-optimized claim estate);report(modeled-findings claim-age evidence)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ClaimAgeCoOptimization.jointExactEstate). -
Compare plan deltas
Differences between two plans in last funded year, depletion age and deterministic success (100 or 0 by depletion), with bounded labels when only one plan depletes.
Field:
Plan B minus Plan A: money lasts, ages and deterministic successUnit: years Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
compare-page(Money lasts, Depletion age and Deterministic success rows (delta column))Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/compareDeltas.ts (
compareDeltas); planner-ui/src/planner/compareDeltas.ts (moneyLastsDelta); planner-ui/src/planner/compareDeltas.ts (deterministicSuccessPct); planner-ui/src/planner/ComparePlansPage.tsx (primaryAgeIn). -
Compare plan money deltas
Differences between two plans in ending net worth, ending investable, ending after-tax estate and lifetime tax plus penalties.
Field:
Plan B minus Plan A money deltasUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
compare-page(Delta column of the four money rows)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/ComparePlansPage.tsx (
ComparePlansPage). -
Exact ledger tournament margin over MILP dollars
After-tax-estate margin by which the exact-ledger winner beats the solver schedule.
Field:
marginOverMilpDollarsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(winner margin over solver schedule);monte-carlo-page(WhySuccessPanel (explainPanels) "beat the solver's own schedule by $X")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerTournament.marginOverMilpDollars). -
Exact ledger validation ending net worth delta
Change in ending net worth between the candidate recommendation and baseline plan.
Field:
endingNetWorthDeltaUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(validation ending net-worth delta)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.endingNetWorthDelta). -
Exact ledger validation executed conversion ratio
Share of requested Roth-conversion dollars actually executed by the projection ledger.
Field:
executedConversionRatioUnit: percent Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(executed conversion percentage);report(modeled-findings validation executed percent)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.executedConversionRatio). -
Exact ledger validation first materially unexecuted year
First year in which a requested Roth conversion is materially not executed.
Field:
firstMateriallyUnexecutedYearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(first materially unexecuted year);report(modeled-findings validation "First material execution shortfall")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.firstMateriallyUnexecutedYear). -
Exact ledger validation requested conversion total
Total Roth-conversion dollars requested by the candidate schedule.
Field:
requestedConversionTotalUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(requested conversion total);report(modeled-findings validation "Requested conversions")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.requestedConversionTotal). -
Exact ledger validation traditional depletion year
First year traditional-account assets are depleted under the validated schedule.
Field:
traditionalDepletionYearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
report(traditional depletion year)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.traditionalDepletionYear). -
Optimization baseline after tax estate
Baseline plan after-tax estate used to validate an optimization recommendation.
Field:
baselineAfterTaxEstateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(validation baseline after-tax estate);report(modeled-findings validation "Baseline after-tax estate")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.baseline.endingAfterTaxEstate). -
Optimization candidate after tax estate
Candidate plan after-tax estate shown in optimization validation evidence.
Field:
candidateAfterTaxEstateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
report(validation candidate after-tax estate);report(modeled-findings validation "Candidate after-tax estate")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
ExactLedgerValidation.candidate.endingAfterTaxEstate). -
Relocation tax comparison
Lifetime tax-plus-penalties delta of each candidate versus the baseline, and the candidate ending estate deflated to the display basis.
Field:
Relocation candidate deltas and display basisUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
relocation-page(Candidate table "vs. baseline" delta column and deflated ending after-tax estate)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/RelocationComparePage.tsx (
RelocationComparePage). -
Simple candidate evaluation after tax estate delta
Candidate change in after-tax estate relative to the current plan.
Field:
afterTaxEstateDeltaUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(after-tax estate improvement);report(modeled-findings validation "After-tax estate delta" and candidate rows)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
SimpleCandidateEvaluation.afterTaxEstateDelta). -
Simple candidate evaluation executed conversion total
Roth-conversion dollars actually executed for the evaluated candidate.
Field:
executedConversionTotalUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(executed conversions);report(modeled-findings validation "Executed conversions")No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
SimpleCandidateEvaluation.executedConversionTotal). -
Simple candidate evaluation incomplete computation years
Projection years with incomplete calculations in the evaluated candidate.
Field:
incompleteComputationYearsUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(incomplete computation years)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
SimpleCandidateEvaluation.incompleteComputationYears). -
Simple candidate evaluation lifetime tax delta
Candidate change in lifetime taxes and penalties relative to the current plan.
Field:
lifetimeTaxDeltaUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
optimize-page(lifetime tax change);report(modeled-findings validation "Lifetime tax delta" and candidate rows)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
SimpleCandidateEvaluation.lifetimeTaxDelta). -
Simple candidate evaluation money lasts years delta
Change in the number of funded plan years for the candidate versus baseline.
Field:
moneyLastsYearsDeltaUnit: years Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
report(money-lasts years change);report(modeled-findings validation "Money-lasts delta" and candidate rows)No calculation record yet. The number is computed today in engine/src/projection/optimizePlan.ts (
SimpleCandidateEvaluation.moneyLastsYearsDelta). -
SWR rule result depletion year
First year a displayed safe-withdrawal rule runs out of investable assets.
Field:
depletionYearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
solver-page(withdrawal rule depletion year)No calculation record yet. The number is computed today in engine/src/decisions/swrComparator.ts (
SwrRuleResult.depletionYear). -
SWR rule result end year
Final planning year used to evaluate a displayed safe-withdrawal rule.
Field:
endYearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
solver-page(withdrawal rule plan end year)No calculation record yet. The number is computed today in engine/src/decisions/swrComparator.ts (
SwrRuleResult.endYear). -
SWR rule result ending after tax estate
After-tax estate left by a displayed safe-withdrawal rule at the end of the plan.
Field:
endingAfterTaxEstateUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
solver-page(withdrawal rule ending after-tax estate);solver-page(SWR rule rows ending after-tax estate (deflated for display))No calculation record yet. The number is computed today in engine/src/decisions/swrComparator.ts (
SwrRuleResult.endingAfterTaxEstate). -
SWR rule result initial annual spend
First-year spending supported by a displayed safe-withdrawal rule.
Field:
initialAnnualSpendUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
solver-page(withdrawal rule initial annual spend)No calculation record yet. The number is computed today in engine/src/decisions/swrComparator.ts (
SwrRuleResult.initialAnnualSpend). -
SWR rule result initial rate pct
Initial portfolio withdrawal rate used by a displayed safe-withdrawal rule.
Field:
initialRatePctUnit: percent Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
solver-page(withdrawal rule initial rate)No calculation record yet. The number is computed today in engine/src/decisions/swrComparator.ts (
SwrRuleResult.initialRatePct). -
SWR rule result lifetime taxes and penalties
Total taxes and penalties paid under a displayed safe-withdrawal rule.
Field:
lifetimeTaxesAndPenaltiesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
solver-page(withdrawal rule lifetime tax and penalties)No calculation record yet. The number is computed today in engine/src/decisions/swrComparator.ts (
SwrRuleResult.lifetimeTaxesAndPenalties). -
MCP compare ending after tax estate delta
Adapter-computed Plan B minus Plan A ending after-tax estate.
Field:
MCP scenario ending-estate deltaUnit: US dollars Basis: nominal dollars Computed by: Adapter Status: No calculation record yetAppears in:
mcp(compare_scenarios.deltaEndingAfterTaxEstate)No calculation record yet. The number is computed today outside the engine, in
RetireGolden-MCP/src/adapter.tsin the RetireGolden-MCP repository (compareScenarios). -
Scenario comparison cell
For each compared scenario metric, the baseline plan's value, the proposal plan's value and the change (proposal minus baseline, null when either side has no comparable value); the metric's own family says what the value is.
Field:
Scenario comparison cell (baseline, proposal, change)Unit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(Baseline, Proposal and Change columns of every MetricTable (formatMetricValue, formatScenarioDelta) and of the annual ledger comparison)No calculation record yet. The number is computed today in engine/src/scenarios/comparison.ts (
ScalarComparison / NullableScalarComparison (scalar, nullableScalar)).
Cash flow and summary
-
Bucket lens allocation
Investable assets assigned to near-, middle-, and long-horizon spending buckets.
Field:
bucketsUnit: US dollars Basis: nominal dollars Computed by: UI-native Status: Relocation pendingAppears in:
results-table(bucket lens allocation)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/bucketLens.ts (
bucketLens). -
Cash flow line amount
Dollar amount carried by a source-to-use line in the selected year cash-flow drilldown.
Field:
Cash-flow line amountUnit: US dollars Basis: as displayed Computed by: UI transformation Status: Relocation pendingAppears in:
cash-flow-drilldown(Sankey link and node amount labels)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/yearCashFlow/buildYearCashFlow.ts (
buildYearCashFlowSankey); planner-ui/src/planner/yearCashFlow/YearCashFlowSankey.tsx (YearCashFlowSankey). -
Cash flow reconciliation totals
Per year, the total of funded sources, the total of funded uses, the unfunded (shortfall) uses, and the paired transfer debit and credit totals that the identity-bearing cash-flow ledger reconciles.
Field:
Cash-flow reconciliation totalsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(YearCashFlowDialog summary tiles "Sources", "Funded uses", "Shortfall" and Sankey props);cash-flow-drilldown(YearCashFlowSankey aria-label: 'Cash flow for YEAR. Source total $X. Funded uses $Y. Shortfall $Z.' and, on the transfers view, 'Transfers for YEAR. Debits $X. Credits $Y.')No calculation record yet. The number is computed today in engine/src/projection/internal/types/cashFlow.ts (
YearCashFlowCashIdentityTotals.sourceTotalPlanDollars / YearCashFlowUseIdentityTotals.fundedUsesPlanDollars, unfundedUsesPlanDollars / YearCashFlowTransferIdentityTotals.debitsPlanDollars, creditsPlanDollars). -
Display dollar basis conversion
Conversion of a nominal year amount to today's dollars, or back to nominal dollars for a chart.
Field:
Today's-dollar display conversionUnit: US dollars Basis: nominal or real, as displayed Computed by: UI transformation Status: Relocation pendingAppears in:
results-table(today dollars toggle);results-headline(KpiBar and ResultsPage "in today's dollars" ending net worth);solver-page(Evidence ending after-tax estate today's dollars (deflator) and SWR rows);relocation-page(deflateEnd on ending after-tax estate);cash-flow-drilldown(displayAmount applied to every line, node and reconciliation total);insights(DetectorProjection.deflate handed to detectors for today's-dollar figures);chart(Every Results chart series through the DollarAdjuster)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/projection.ts (
inflationView). -
Display FI target annual
Financial-independence portfolio target plotted in the same year and dollar basis as account balances.
Field:
Displayed FI targetUnit: US dollars Basis: as displayed Computed by: UI transformation Status: Relocation pendingAppears in:
chart(fiTarget)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/resultsRows.ts (
buildResultsRows). -
Flexible goal funded amount annual
Dollars delivered to flexible goals during the projection year.
Field:
flexibleGoalFundedAmountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(flexibleGoalFundedAmount)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.flexibleGoals.fundedAmount). -
Flexible goal unfunded amount annual
Dollars requested by flexible goals but not delivered during the projection year.
Field:
flexibleGoalUnfundedAmountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(flexibleGoalUnfundedAmount)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.flexibleGoals.unfundedAmount). -
Flexible goals deferred count annual
Number of flexible goals postponed to a later year in this projection year.
Field:
flexibleGoalsDeferredUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
csv(flexibleGoalsDeferred);results-table(Guardrails column goal-outcome aria-label)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.flexibleGoals.deferred). -
Flexible goals funded count annual
Number of flexible goals fully funded in this projection year.
Field:
flexibleGoalsFundedUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
csv(flexibleGoalsFunded);results-table(Guardrails column goal-outcome aria-label)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.flexibleGoals.funded). -
Flexible goals partially funded count annual
Number of flexible goals partly funded in this projection year.
Field:
flexibleGoalsPartiallyFundedUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
csv(flexibleGoalsPartiallyFunded);results-table(Guardrails column goal-outcome aria-label)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.flexibleGoals.partiallyFunded). -
Flexible goals skipped count annual
Number of flexible goals skipped in this projection year.
Field:
flexibleGoalsSkippedUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
csv(flexibleGoalsSkipped);results-table(Guardrails column goal-outcome aria-label)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.flexibleGoals.skipped). -
Income annuity annual
Annuity payments received in a projection year.
Field:
Annuity incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(annuity);csv(annuity);scenarios-page(Lifetime income "Annuity");cash-flow-drilldown(annuityPayment source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.annuity).Fed by: Joint last-survivor life expectancy of two independent lives (formula record, 6 of 6 gates pass). Open the family for each record's worksheet, receipt, tests and code.
-
Income one time annual
One-time income recognized in a projection year.
Field:
One-time incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(oneTime);csv(oneTimeIncome);scenarios-page(Lifetime income "One-time income");cash-flow-drilldown(oneTimeIncome source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.oneTime). -
Income ordinary dividends annual
Ordinary dividend income recognized during the projection year.
Field:
ordinaryDividendsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(ordinaryDividends)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.ordinaryDividends). -
Income pension annual
Pension income paid in a projection year.
Field:
Pension incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(pension);csv(pension);scenarios-page(Lifetime income "Pension");cash-flow-drilldown(pension source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.pension). -
Income qualified dividends annual
Qualified dividend income recognized during the projection year.
Field:
qualifiedDividendsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(qualifiedDividends)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.qualifiedDividends). -
Income recurring annual
Recurring non-wage income in a projection year.
Field:
Recurring incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(recurring);csv(recurring);scenarios-page(Lifetime income "Recurring income");cash-flow-drilldown(recurringIncome source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.recurring). -
Income taxable interest annual
Taxable interest credited to the household during the projection year.
Field:
taxableInterestUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(taxableInterest)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.taxableInterest). -
Income total annual
All modeled income received in a projection year before expenses and taxes.
Field:
Total incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(income);csv(totalIncome);report(yearLedger);results-table(income total);results-table(Income column);report(year-ledger block income and ReportPage year table);scenarios-page(Annual "Gross income" and lifetime "Total gross income");results-headline(Depletion narrative "Income doesn't stop: about $X" (deflated))No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.total). -
Income wages annual
Employment wages modeled for a projection year.
Field:
WagesUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
chart(wages);csv(wages);scenarios-page(Lifetime income "Wages");cash-flow-drilldown(wages source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.incomes.wages). -
Inherited account final deadline year
Final calendar year by which an inherited account must be emptied.
Field:
finalDeadlineYearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
report(inherited account final deadline);results-table(Inherited schedule deadline sentence);report(inherited-schedules block finalDeadlineYear)No calculation record yet. The number is computed today in engine/src/projection/internal/types/accountActivity.ts (
InheritedAccountYearEvidence.finalDeadlineYear). -
Inherited distribution required annual
Required inherited-account distribution dollars due for the account and year.
Field:
inheritedRequiredAmountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(inheritedRequiredAmount);results-table(Inherited schedules Required column);report(inherited-schedules block requiredAmount)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.inheritedAccounts[].requiredAmount). -
Inherited distribution required executed annual
Required inherited-account distribution dollars actually executed for the account and year.
Field:
inheritedExecutedRequiredAmountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(inheritedExecutedRequiredAmount);report(inherited required amount executed);results-table(Inherited schedules Executed column);report(inherited-schedules block executedRequiredAmount and ReportPage inherited table)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.inheritedAccounts[].executedRequiredAmount). -
Inherited distribution voluntary annual
Inherited-account distribution dollars taken voluntarily beyond the required amount for the account and year.
Field:
inheritedVoluntaryAmountUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(inheritedVoluntaryAmount);report(inherited voluntary distribution);results-table(Inherited schedules Voluntary column)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.inheritedAccounts[].voluntaryAmount). -
Insurance cash value annual
Cash surrender value of modeled insurance at the end of the projection year.
Field:
insuranceCashValueUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(insuranceCashValue)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.insuranceCashValue). -
Insurance death benefit annual
Insurance death benefit included in the projection year estate value.
Field:
deathBenefitUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(deathBenefit);cash-flow-drilldown(lifeInsuranceDeathBenefit source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.deathBenefit). -
Long term care benefit annual
Long-term-care insurance benefit received during the projection year.
Field:
ltcBenefitUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(ltcBenefit)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.ltcBenefit). -
Projection result ending investable
Investable assets remaining at the end of the projection.
Field:
endingInvestableUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
compare-page(ending investable assets);report(headline-results block endingInvestable);scenarios-page(Headline "Ending investable assets")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
ProjectionResult.endingInvestable). -
Projection result ending net worth
Total net worth remaining at the end of the projection.
Field:
endingNetWorthUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
compare-page(ending net worth);results-headline(KpiBar "Ending net worth" and ResultsPage narrative);report(headline-results block endingNetWorth and ReportPage KPI);scenarios-page(Headline "Ending net worth" and estate "Gross net worth")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
ProjectionResult.endingNetWorth). -
Projection summary average pre retirement savings rate pct
Average share of pre-retirement earnings saved across working years.
Field:
averagePreRetirementSavingsRatePctUnit: percent Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
results-headline(pre-retirement savings rate);report(headline-results block average-pre-retirement-savings-rate-pct and ReportPage KPI);mcp(run_projection.summary.averagePreRetirementSavingsRatePct);mcp(compare_scenarios.a.averagePreRetirementSavingsRatePct);mcp(compare_scenarios.b.averagePreRetirementSavingsRatePct)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.averagePreRetirementSavingsRatePct). -
Projection summary coast fire number
Current invested amount needed to reach the FI target without further contributions.
Field:
coastFireNumberUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
results-headline(Coast FI number);report(headline-results block coast-fire-number and ReportPage KPI);mcp(run_projection.summary.coastFireNumber);mcp(compare_scenarios.a.coastFireNumber);mcp(compare_scenarios.b.coastFireNumber)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.coastFireNumber). -
Projection summary ending investable
Investable assets remaining at the end of the scenario projection.
Field:
endingInvestableUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
scenarios-page(ending investable assets);compare-page(Ending investable row);mcp(run_projection.summary.endingInvestable);mcp(compare_scenarios.a.endingInvestable);mcp(compare_scenarios.b.endingInvestable)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.endingInvestable). -
Projection summary ending net worth
Total net worth remaining at the end of the scenario projection.
Field:
endingNetWorthUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-headline(ending net worth);scenarios-page(Headline "Ending net worth" (summary copy));mcp(run_projection.summary.endingNetWorth);mcp(compare_scenarios.a.endingNetWorth);mcp(compare_scenarios.b.endingNetWorth);scenarios-page(Estate table 'Gross net worth' (ScenarioEstateComparison.grossNetWorth reads the summary copy))No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.endingNetWorth). -
Projection summary FI age
Age at which modeled investable assets first reach the financial-independence target.
Field:
fiAgeUnit: age in years Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
results-headline(financial independence age);results-headline(FI section "(Age N)");report(headline-results block fiAge);mcp(run_projection.summary.fiAge);mcp(compare_scenarios.a.fiAge);mcp(compare_scenarios.b.fiAge)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.fiAge). -
Projection summary FI number
Today-dollar portfolio target used to identify financial independence.
Field:
fiNumberUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
results-headline(financial independence number);report(headline-results block fi-number and ReportPage KPI);chart(Path to FI chart target line via display-fi-target-annual);mcp(run_projection.summary.fiNumber);mcp(compare_scenarios.a.fiNumber);mcp(compare_scenarios.b.fiNumber)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.fiNumber). -
Projection summary FI year
Calendar year in which modeled assets first reach the financial-independence target.
Field:
fiYearUnit: calendar year Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
report(financial independence year);results-headline(FI section "you reach FI in YEAR (age N)");report(headline-results block fiYear);mcp(run_projection.summary.fiYear);mcp(compare_scenarios.a.fiYear);mcp(compare_scenarios.b.fiYear)No calculation record yet. The number is computed today in engine/src/projection/compare.ts (
ProjectionSummary.fiYear). -
Spending care cost gross annual
Gross long-term-care cost incurred during the projection year before insurance benefits.
Field:
careCostUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(careCost)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.careCost). -
Spending debt service annual
Principal and interest paid on modeled debts during the projection year.
Field:
debtServiceUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(debtService);chart(Spending by category "Debt payments");cash-flow-drilldown(debtService use line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.debtService). -
Spending excess requested annual
Optional spending above the ideal lifestyle amount attempted during the projection year.
Field:
excessSpendingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(excessSpending)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.excessSpending). -
Spending excess shortfall annual
Unfunded optional spending above the ideal lifestyle amount in the projection year.
Field:
excessShortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(excessShortfall)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.excessShortfall). -
Spending guardrail factor annual
Multiplier applied to flexible spending after the projection year guardrail decision.
Field:
guardrailFactorUnit: factor Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
csv(guardrailFactor)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.guardrailFactor). -
Spending ideal requested annual
Ideal lifestyle spending requested for the projection year.
Field:
idealSpendingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(idealSpending)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.idealSpending). -
Spending ideal shortfall annual
Unfunded ideal lifestyle spending in the projection year.
Field:
idealShortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(idealShortfall)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.idealShortfall). -
Spending insurance premiums annual
Insurance premiums charged as expenses during the projection year.
Field:
insurancePremiumsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(insurancePremiums);chart(Spending by category "Insurance premiums");cash-flow-drilldown(insurancePremium use line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.insurancePremiums). -
Spending intended annual
Total spending the plan intended to fund before available cash constrained it.
Field:
intendedSpendingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(intendedSpending);scenarios-page(Annual "Intended spending" and lifetime "Intended spending")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.intendedSpending). -
Spending one time goals annual
One-time goal spending paid during the projection year.
Field:
goalsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(goals);chart(Spending by category "One-time goals");cash-flow-drilldown(oneTimeGoal use line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.oneTimeGoals). -
Spending property costs annual
Property taxes, maintenance, and other modeled property costs paid during the projection year.
Field:
propertyCostsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(propertyCosts);chart(Spending by category "Property tax + insurance");cash-flow-drilldown(propertyCosts use line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.propertyCosts). -
Spending required requested annual
Essential spending floor requested for the projection year.
Field:
requiredSpendingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(requiredSpending);results-table(Required column (layered spending))No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.requiredSpending). -
Spending required shortfall annual
Unfunded essential spending in the projection year.
Field:
requiredShortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(requiredShortfall);results-table(Layer miss "Req");scenarios-page(Annual "Required shortfall" and lifetime "Required-floor shortfall")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.requiredShortfall). -
Spending target requested annual
Target lifestyle spending requested for the projection year.
Field:
targetSpendingUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(targetSpending);results-table(Target column (layered spending))No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.expenses.targetSpending). -
Spending target shortfall annual
Unfunded target lifestyle spending in the projection year.
Field:
targetShortfallUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(targetShortfall);results-table(Layer miss "Target");scenarios-page(Annual "Target shortfall" and lifetime "Target-lifestyle shortfall")No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.targetShortfall). -
Surplus invested annual
Surplus cash flow invested this year into cash, else taxable, else unassigned.
Field:
Surplus investedUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(Summary "Surplus" figure and surplusInvestment use/transfer lines)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.surplusInvested). -
Sustainable spending result max base annual
Highest annual base spending that satisfies the solver constraints.
Field:
maxBaseAnnualUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
solver-page(maximum base annual spending);insights(spending-headroom card after Preview "sustains about $X/yr");scenarios-page(Spending capacity "Solved annual base spending");mcp(solve_max_spending.maxBaseAnnual)No calculation record yet. The number is computed today in engine/src/decisions/spendingSolver.ts (
SustainableSpendingResult.maxBaseAnnual). -
Sustainable spending result simulation count
Number of deterministic projections evaluated by the spending solver.
Field:
simulationCountUnit: count Basis: no dollar basis Computed by: Engine Status: No calculation record yetAppears in:
solver-page(simulations run);scenarios-page(Spending capacity simulation count column);mcp(solve_max_spending.simulationCount)No calculation record yet. The number is computed today in engine/src/decisions/spendingSolver.ts (
SustainableSpendingResult.simulationCount). -
Sustainable spending result spending slack dollars
Remaining dollar margin between solved spending and the feasibility boundary.
Field:
spendingSlackDollarsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
solver-page(spending feasibility slack);insights(spending-headroom card after Preview "$Y/yr above your current level");scenarios-page(Spending capacity "Slack vs. current base spending");mcp(solve_max_spending.spendingSlackDollars)No calculation record yet. The number is computed today in engine/src/decisions/spendingSolver.ts (
SustainableSpendingResult.spendingSlackDollars). -
Year result contributions
Employee and household dollars contributed to investment accounts during the projection year.
Field:
contributionsUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(contributions);results-table(Contrib. column);report(year-ledger block contributions and ReportPage year table);cash-flow-drilldown(contribution use and employeeContribution transfer lines)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.contributions). -
Year result employer match
Employer matching contributions credited during the projection year.
Field:
employerMatchUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(employerMatch);results-table(Match column);report(ReportPage year table Match column);cash-flow-drilldown(employerMatch transfer line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.employerMatch). -
Year result LTCG zero headroom
Additional long-term capital gains available before leaving the zero-percent bracket.
Field:
ltcgZeroHeadroomUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
results-table(0% capital-gains headroom)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.ltcgZeroHeadroom). -
Year result tax exempt interest
Tax-exempt interest income received during the projection year.
Field:
taxExemptInterestUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
csv(taxExemptInterest);chart(Income by source "Tax-exempt interest" series);scenarios-page(Annual "Tax-exempt interest" and lifetime "Tax-exempt interest");cash-flow-drilldown(taxExemptInterest source line)No calculation record yet. The number is computed today in engine/src/projection/internal/types/result.ts (
YearResult.taxExemptInterest). -
Cash flow line plan dollars
The nominal plan-dollar amount of one identity-bearing cash-flow line in a projection year: a source line's amount, a use line's requested, funded and unfunded amounts, and a transfer line's paired debit and credit.
Field:
Cash-flow line amounts (nominal plan dollars)Unit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
cash-flow-drilldown(YearCashFlowDialog DetailTable columns Amount, Requested, Funded, Unfunded, Debit and Credit (through display-dollar-basis-conversion));cash-flow-drilldown(Sankey links and per-node totals (the UI mapping is cash-flow-line-amount));cash-flow-drilldown(detailCsv.ts columns nominalAmount, requested, funded, unfunded, debit, credit (unrounded nominal plan dollars))No calculation record yet. The number is computed today in engine/src/projection/internal/types/cashFlow.ts (
YearCashFlowCashSourceLine.amountPlanDollars / YearCashFlowPostSolveDepositLine.amountPlanDollars / YearCashFlowUseLine.requestedPlanDollars, fundedPlanDollars, unfundedPlanDollars / YearCashFlowTransferLine.debitPlanDollars, creditPlanDollars).
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 incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(annuitization-headroom card rationale "Trading $X ... (~$Y/mo)")No calculation record yet. The number is computed today in engine/src/insights/detectors/annuitizationHeadroom.ts (
annuitizationHeadroom.screen (premium, monthly)). -
Insight asset location swappable exposure
Dollars of bond or stock exposure the preferred asset-location swap would relocate between account wrappers while holding the household mix constant.
Field:
Swappable class exposureUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(asset-location card impact "Up to $X of class exposure could be relocated")No calculation record yet. The number is computed today in engine/src/insights/detectors/assetLocation.ts (
assetLocation.screen (swapped from assetLocationGenerator metadata)). -
Insight HECM buffer illustrative credit line
Initial HECM line of credit = principal limit factor (published table for the youngest borrower age) × home value; the card also sums cash, taxable, equity comp, traditional, Roth and HSA balances as the investable portfolio it compares against.
Field:
Illustrative HECM credit lineUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(hecm-buffer-candidate card rationale "would start near $X (P% of value)" and the portfolio total)No calculation record yet. The number is computed today in engine/src/insights/detectors/hecmBufferCandidate.ts (
hecmBufferCandidate.screen (lineSize, investable)). -
Insight impact ending after tax estate delta
Estimated change in ending after-tax estate from an insight action.
Field:
endingAfterTaxEstateDeltaUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(InsightCardView "Ending estate delta" after Preview impact; rough "≈ ... estate delta" when no qualitative text)No calculation record yet. The number is computed today in engine/src/insights/types.ts (
InsightImpact.endingAfterTaxEstateDelta). -
Insight impact lifetime tax delta
Estimated change in lifetime taxes from an insight action.
Field:
lifetimeTaxDeltaUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(InsightCardView "Lifetime tax delta" after Preview impact)No calculation record yet. The number is computed today in engine/src/insights/types.ts (
InsightImpact.lifetimeTaxDelta). -
Insight IRMAA tier edge premium cliff
Extra annual Medicare premiums (Part B plus Part D surcharge, all Medicare-age people) that a MAGI just over an IRMAA threshold triggers two years later, versus MAGI one dollar under the threshold.
Field:
IRMAA tier-edge premium cliffUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(irmaa-tier-edge card impact text "save roughly $X of Medicare premiums" and the rough estate delta)No calculation record yet. The number is computed today in engine/src/insights/detectors/irmaaTierEdge.ts (
irmaaTierEdge.screen (annualPremiumCliff)). -
Insight monte carlo success delta
Change in Monte Carlo success rate, in percentage points, between the patched plan and the base plan on 250 shared-seed paths.
Field:
Insight Monte Carlo success deltaUnit: percent Basis: no dollar basis Computed by: UI-native Status: Relocation pendingAppears in:
insights(InsightCardView "Monte Carlo success" line after Preview)Relocation pending. This number is currently computed in the app's UI and is scheduled to move into the engine, where a calculation record can be written for it. UI sources: planner-ui/src/planner/insights/InsightCardView.tsx (
InsightCardView). -
Insight spending guardrails illustrative floor
Required spending floor the guardrail preview uses: the plan's requiredAnnual when set, otherwise 80% of base spending generated by probabilityBandSpendingGuardrailGenerator.
Field:
Illustrative guardrail spending floorUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(spending-guardrails card rationale "with a $X required floor")No calculation record yet. The number is computed today in engine/src/insights/detectors/spendingGuardrails.ts (
spendingGuardrails.screen (requiredAnnual from guardrailPatchFromGenerator)). -
Insight spending headroom rough annual
Ending after-tax estate deflated to today, minus the bequest target, divided by the years remaining in the projection.
Field:
Rough annual spending headroomUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
insights(spending-headroom card rationale "end with roughly $X" and impact "≈ $Y/yr of rough headroom")No calculation record yet. The number is computed today in engine/src/insights/detectors/spendingHeadroom.ts (
spendingHeadroom.screen (roughHeadroomPerYear, endingEstateToday)). -
Insight SS bridge gap total
Sum over delaying claimants of the bridge ladder cost and of the annual real bridge income sized by sizeBridge, for claimants whose gap years are not already covered by a plan ladder.
Field:
Social Security bridge total cost and incomeUnit: US dollars Basis: nominal dollars Computed by: Engine Status: No calculation record yetAppears in:
insights(ss-bridge-gap card rationale "A TIPS bridge ladder (≈$X today) pays you ... (~$Y/yr)")No calculation record yet. The number is computed today in engine/src/insights/detectors/ssBridgeGap.ts (
ssBridgeGap.screen (totalCost, annualTotal)). -
Insight state relocation lifetime state tax savings
Sum over projection years of deflated (best zero-tax candidate state tax minus baseline state tax), floored at zero, for the best of FL, TX and WA.
Field:
Lifetime state tax saved by relocatingUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
insights(state-relocation card impact after Preview "staying in ST costs about $X of lifetime state+local income tax")No calculation record yet. The number is computed today in engine/src/insights/detectors/stateRelocation.ts (
stateRelocation.evaluate (savings)). -
Insight widows penalty bracket jump
Federal tax on the first single-filed survivor year's MAGI computed as Single minus the same income computed as married filing jointly, deflated to today's dollars.
Field:
Survivor bracket jumpUnit: US dollars Basis: today's dollars (real) Computed by: Engine Status: No calculation record yetAppears in:
insights(widows-penalty-roth card rationale "cost about $X more (today's $)")No calculation record yet. The number is computed today in engine/src/insights/detectors/widowsPenalty.ts (
widowsPenalty.screen (bracketJumpToday)).
RetireGolden is educational planning software, not financial, tax, or legal advice. It models outcomes under assumptions you choose; consult a qualified professional before acting. The source and AGPL-3.0 license are public, as are the calculation index and output-family census this page renders. The tax rules those calculations apply are catalogued separately in the tax-rule registry.