Calculation catalog › Medicare and ACA
Display net care cost annual
Long-term-care cost remaining after the modeled insurance benefit, floored at zero.
Field: Displayed net care cost Unit: US dollars Basis: as displayed Computed by: UI transformation Status: Complete chain
Appears in: chart (care)
Calculation records
-
Net long-term-care cost after the LTC benefit Formula record, justified by derivation
Purpose: The year's long-term-care cost left after the modeled insurance benefit, as the spending chart shows it.
Statement: projection/yearFigures.ts#netCareCost publishes max(0, expenses.careCost - expenses.ltcBenefit) for the year and refuses a difference below -$0.005 (ANNUAL_FUNDING_TOLERANCE_PLAN_DOLLARS). The ledger never pays more benefit than the cost in exact arithmetic; the floor absorbs only the last-binary-digit residue of a sum of per-policy payments. Units: nominal USD of the year. Rounding: none.
Formula:
netCareCost = max(0, careCost - ltcBenefit); refused when careCost - ltcBenefit < -0.005-
careCost: Gross care-episode cost of the year (unit: usd per year) (domain: nonnegative) -
ltcBenefit: Sum of the LTC policy payments against it (unit: usd per year) (domain: nonnegative; at most careCost up to a floating-point residue)
Timing: annual
Rounding: none
Limits:
- The floor removes only a floating-point residue: with two policies on one episode, the first paying under half the cost, the summed payments can exceed the summed cost by one unit in the last place (53,932.24 of cost against 6,020.16 plus the remainder differs by -7.3e-12). expenses.total subtracts the benefit unfloored, so the category chart can differ from expenses.total by that residue
- A benefit above the cost by more than half a cent is a ledger error and is refused rather than hidden, so a display page that reads this figure fails loudly on it
Provenance: derived by
claude, implemented byclaude-subagent.Independent review:
codexGates (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: display-net-care-cost-annual.md Mutation receipt: display-net-care-cost-annual.mutation.md
Evidence tests: yearFigures.evidence.test.ts
Implemented in: yearFigures.ts; yearLedger.ts
Is the number of: display-net-care-cost-annual
-
Records that feed this number
-
Today's dollars by the ledger's own inflation factor Formula record, justified by derivation
Purpose: How a year's nominal amount becomes start-year dollars on every page, and how a start-year figure such as the FI target is placed in a year's dollars.
Statement: projection/dollarBasis.ts converts a nominal amount x of projection year y to start-year dollars as x / f(y), and a start-year amount to year-y dollars as x * f(y), where f(y) is the ledger's published YearResult.inflationScale: the left-to-right product of (1 + inflationPct/100) taken y - startYear times from 1, exactly 1 in the start year. projectionDollarBasis reads the factors from a projection's rows; planDollarBasis runs the same recurrence for a page that holds no projection rows and is bit-identical to a deterministic run's factors. nominalForDisplay shows a nominal amount in the page's mode (converted in today's-dollar mode, unchanged in nominal mode) and todayForDisplay shows a start-year amount (unchanged in today's-dollar mode, times f(y) in nominal mode), so the FI target line is fiNumber itself in today's-dollar mode and fiNumber * f(y) in nominal mode. A year outside the projection, or a fractional year, is refused. Units: USD. Rounding: none.
Formula:
f(s) = 1; f(y) = f(y - 1) * (1 + i/100); today(y, x) = x / f(y); nominal(y, x) = x * f(y); FI target in year y = fiNumber (today mode) or fiNumber * f(y) (nominal mode)-
i: General inflation rate, plan.assumptions.inflationPct (unit: percent per year) (domain: finite, above -100) -
s: Projection start year, the first ledger row (unit: calendar year) (domain: integer) -
y: Year of the amount (unit: calendar year) (domain: integer in [s, endYear]) -
x: Amount converted (unit: usd) (domain: finite) -
f(y): Cumulative general-inflation factor, YearResult.inflationScale (unit: ratio) (domain: f(s) = 1)
Timing: annual; one factor per calendar year, applied to every amount of that year
Rounding: none
Limits:
- planDollarBasis is the plan's assumed rate and matches only a deterministic run: a Monte Carlo path grows by its own inflation series, so its rows are converted with projectionDollarBasis on that path's own result
- Start-year dollars in whole-year steps: an amount paid in December and one paid in January of the same year carry the same factor
- General inflation only: the healthcare inflation premium and the Social Security cost-of-living adjustment are separate assumptions and are never the basis
- Years outside the projection are refused, never extrapolated; a projection whose horizon ends before its start year has an empty basis in which every year is refused
- Owner decision R19 (2026-09-25): the planner pages used to compound the plan's rate with Math.pow from the page's start year. The ledger's factor is a product built one year at a time, which differs from the power in the last binary digit in some years (21 of 41 years at 2.5 percent, one unit each), so a whole-dollar figure can change only on an exact half-dollar tie; the FI target in today's-dollar mode becomes exactly fiNumber instead of fiNumber * f / f
- The FI target is recorded here rather than in a record of its own: it is projection-summary-fi-number placed in a year through todayForDisplay
- Since B2-P1 slice 2 the spending page converts nothing itself: each published withdrawal rule's ending estate is converted by that rule's own run (decisions/swrComparator.ts#compareSwrRules publishes endingAfterTaxEstateTodayDollars), and the solver's evidence estate by the answer run's own factors; planDollarBasis remains for the relocation page
Provenance: derived by
claude, implemented byclaude-subagent.Independent review:
codexGates (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: display-dollar-basis-conversion.md Mutation receipt: display-dollar-basis-conversion.mutation.md
Evidence tests: swrComparator.evidence.test.ts; dollarBasis.evidence.test.ts
Implemented in: dollarBasis.ts; detectorProjection.ts; result.ts; swrComparator.ts
Is the number of: display-dollar-basis-conversion, display-fi-target-annual
Feeds: display-balance-by-category-annual, display-net-care-cost-annual, display-tax-free-gains-room-annual, display-tax-plus-penalties-annual, display-total-spending-annual, display-upside-shortfall-annual, display-upside-spending-annual
-
Transformations
- Compute max(0, careCost - ltcBenefit) in projection/yearFigures.ts#netCareCost, then apply the selected dollar basis. The floor absorbs only a floating-point residue of the per-policy payment sum; a benefit above the cost by more than half a cent is refused.
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.