Calculation catalog › Ladders and valuation
Income TIPS ladder annual
Income paid by the modeled TIPS ladder during the projection year.
Field: tipsLadder Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain
Appears in: csv (tipsLadder); scenarios-page (Lifetime income "TIPS ladder"); chart (Income by source "TIPS ladder" series); cash-flow-drilldown (tipsLadderCash source line)
Calculation records
-
TIPS ladder annual cash and remaining ladder value Composition record, justified by derivation
Purpose: The cash a TIPS income-floor ladder pays in a year and the face still riding in net worth at its end.
Statement: At offset = year − anchor year, projection/internal/tipsLadderAnnualCashFlow.ts#tipsLadderAnnualCashFlows publishes, per ladder: cash = (coupons + maturing principal) x the ladder's funding scale x the cumulative inflation factor from the start year, where coupons sum face x couponRatePct / 100 over every rung with maturityOffset >= offset and maturing principal is the face of the rungs maturing at exactly that offset; and ladderValue = unmatured face (rungs with maturityOffset > offset) x the same scale and factor. In the purchase year (offset 0) cash is 0 and the value is the whole face at that year's factor; with nobody alive the remaining face is frozen at the last living year's offset. YearIncomes.tipsLadder and YearResult.ladderValue are the sums of these rows over the plan's ladders. Units: nominal dollars. Rounding: none.
Formula:
cash = (Σ_{m >= k} F_m c_m + Σ_{m = k} F_m) s f_k; value = (Σ_{m > k} F_m) s f_k; cash = 0 at k = 0-
k: Offset from the anchor year (purchase year, or the year before the start when already owned) (unit: years) (domain: integer >= 0) -
F_m, c_m: Real face and coupon rate of the rung maturing at offset m (unit: usd / fraction) (domain: F_m >= 0, 0 <= c_m) -
s: Funding scale: 1, or the funded fraction when the purchase-year account could not cover the quoted cost (unit: 1) (domain: 0 <= s <= 1) -
f_k: Cumulative general-inflation factor from the start year to this year (unit: 1) (domain: positive)
Timing: annual; one row per ladder, never summed inside the phase
Rounding: none
Limits:
- The worksheet's rung set (face $10,000 at offset 1 with a 1% coupon and face $20,000 at offset 3 with a 2% coupon, nothing at offset 2) is NOT plan-constructible: ladder/ladderMath.ts#buildLadder derives faces by back-substitution from a level real income and prices every coupon off the embedded real-yield curve, over CONSECUTIVE offsets. The three-offset case is therefore asserted by calling the phase directly with those rungs, the way the other annual-phase evidence files do
- A real simulatePlan run is asserted beside it for the purchase-year branch the worksheet also states (cash exactly 0 and ladderValue the whole face x scale x factor), because that branch IS plan-constructible
- The funding scale is written once by the simulator's purchase-funding block and only read here; the direct-call evidence sets it to the worksheet's 0.8 rather than starving a funding account to produce it
- Cumulative factors of 1.05 at offset 1 and 1.10 at offset 2 are not a constant inflation rate; the direct call passes them as the worksheet states them
- Taxable income is a different quantity from cash: the phase also returns coupons plus this year's accretion on outstanding face, which these two families do not publish
- Restated 2026-09-28 under decision D-2027-ROLLOVER. A PURCHASE DATED BEFORE THE START, a registered limit of the convention and not corrected: a ladder whose purchase year is before the projection start year is treated as already paid, anchored at its purchase year, so its rungs pay while no cost is taken from the funding account. When the funding balance was entered before the purchase and not updated, the cost is counted twice. The independent check measured a $30,000-a-year real bridge ladder for 2028 to 2031 bought in 2026: it costs $14,873 of ending net worth from a 2026 start and adds $702,171 from a 2027 start (+$702,077.94 as pinned below, after main's #761 and the 2026-09-29 change to CMS's published IRMAA amounts). The projection names each such purchase in a warning with the cost the ledger prices, and says to lower the funding balance by that cost if it still includes it (projection/preStartEvents.ts#preStartEvents)
- Since the review (2026-09-29, findings L2 and L7) the warning prints the cost as the ledger prices a purchase in its own year (quotePlanLadder's real cost: $114,426 for that ladder, which the funding row then carries a year's return on, the review's $120,719.61 fall in the brokerage row from a 2026 start), and the sizes are pinned to the cent in packages/planner-ui/src/planner/preStartEvents.figures.test.ts: -$14,871.56 from a 2026 start and +$702,077.94 from a 2027 start (-$14,872.97 and +$702,077.21 before the 2026-09-29 change to CMS's published IRMAA amounts; the review measured +$702,170.98 before main's #761 priced a saved example's 2027 premium tax credit from a 2027 start)
Provenance: derived by
codex, implemented byclaude.Independent review:
grokGates (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: income-tips-ladder-and-ladder-value-annual.md Mutation receipt: income-tips-ladder-and-ladder-value-annual.mutation.md
Evidence tests: tipsLadderAnnualCashFlow.evidence.test.ts
Implemented in: tipsLadderAnnualCashFlow.ts; ladderMath.ts; preStartEvents.ts
Is the number of: income-tips-ladder-annual, ladder-value-annual
-
Engine source: engine/src/projection/internal/types/result.ts
(YearResult.incomes.tipsLadder)
The evidence links on this page (each record's worksheet, mutation receipt, evidence tests
and implementation, and the source links) are pinned to engine commit
2624dbdba9fd, committed 2026-10-11.
The live calculation index and
output-family census links point at the repository's main
branch, so you can check this snapshot against them.