Calculation catalog › Cash flow and summary

Projection result ending net worth

Total net worth remaining at the end of the projection.

Field: endingNetWorth Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain

Appears 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")

Calculation records

  • Projection-result ending net worth Composition record, justified by derivation

    Purpose: The terminal net-worth figure the whole-run result republishes from the last year row.

    Statement: projection/simulate.ts#simulatePlan publishes projection/internal/types/result.ts#ProjectionResult.endingNetWorth as the last year row's netWorth, or exactly 0 when the projection has no rows. The annual row has already composed investable, property, insurance cash value, ladder value, debt and the non-recourse-capped HECM lines; the terminal field rebuilds none of that. Units: nominal USD. Rounding: none.

    Formula: endingNetWorth = years[years.length - 1].netWorth, or 0 when years is empty

    • years: Ordered projection year rows (unit: rows) (domain: possibly empty)
    • netWorth: That row's year-end net worth (unit: usd) (domain: may be negative)

    Timing: once per projection, at the horizon

    Rounding: none

    Limits:

    • Asserted on a real two-year simulatePlan run whose 2030 row closes at the worksheet's $925,000 and whose 2031 row closes at the worksheet's $901,375.625. Plan assumptions beyond the worksheet's inputs: a single 55-year-old filing single in KY with a zero state rate, zero inflation, zero account and property return, no healthcare charge, one cash account and one property with no carrying costs, and one uninflated 2031 one-time goal sized to spend the difference between the two rows
    • The empty-row case cannot be reached through simulatePlan; it is the publishing site's fallback as the field comment states it and a contract statement, not executed evidence
    • Substituting ending investable for net worth names a different quantity, which the test asserts against on a run where the two differ by the property value

    Provenance: derived by codex, implemented by claude.

    Independent review: cursor

    Gates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass

    Worksheet: projection-result-ending-net-worth.md Mutation receipt: projection-result-ending-net-worth.mutation.md

    Evidence tests: simulate.evidence.test.ts

    Implemented in: simulate.ts; result.ts

    Is the number of: projection-result-ending-net-worth

Records that feed this number

  • Annual net worth, with the non-recourse HECM cap Composition record, justified by derivation

    Purpose: The year-end balance sheet, including the homes and the debts the investable total leaves out.

    Statement: projection/internal/annualYearResultAssembly.ts#annualYearResultAssembly publishes projection/internal/types/result.ts#YearResult.netWorth as snapshot.investableTotal + snapshot.propertyTotal - snapshot.debtTotal + snapshot.insuranceCashValueTotal + ladderValue - snapshot.hecmEffectiveDebt, in that left-to-right association. projection/internal/annualSnapshot.ts#annualSnapshot supplies hecmEffectiveDebt as the sum over open HECM lines of min(loanBalance, the matching property value), the non-recourse limit; the uncapped loan total is published separately as hecmLoanBalance and is never the net-worth subtrahend. Units: nominal USD at year end. Rounding: none; the association is part of the contract.

    Formula: netWorth = investableTotal + propertyTotal - debtTotal + insuranceCashValueTotal + ladderValue - sum over HECM lines of min(loanBalance, propertyValue)

    • propertyTotal: Sum of owned property values at year end (unit: usd) (domain: nonnegative)
    • debtTotal: Sum of ordinary debt balances (unit: usd) (domain: nonnegative; subtracted)
    • insuranceCashValueTotal: Permanent-life cash values (unit: usd) (domain: nonnegative)
    • ladderValue: Remaining TIPS-ladder principal at nominal book value (unit: usd) (domain: nonnegative)
    • hecmEffectiveDebt: HECM loans capped line by line at the matching home value (unit: usd) (domain: nonnegative; subtracted)

    Timing: once per projection year, at the year-result assembly

    Rounding: none

    Limits:

    • The worksheet's case is asserted at annualSnapshot and annualYearResultAssembly, the two functions that compute the cap and the composition, because the worksheet states HECM loan balances of $420,000 and $50,000 as year-end facts: a HECM balance is an accrual of draws, interest and mortgage-insurance premium that no plan can set directly, so those two figures are not a state a plan produces
    • Only the cap is capped: a loan above its home's value is limited to that value, while a loan below it is subtracted in full, which is why the worksheet's two homes need two different branches of the same min
    • Ordinary debt is subtracted, not added; adding it is the worksheet's third wrong reading and moves the answer by twice the debt

    Provenance: derived by codex, implemented by claude.

    Independent review: cursor

    Gates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass

    Worksheet: accounts-net-worth-annual.md Mutation receipt: accounts-net-worth-annual.mutation.md

    Evidence tests: annualYearResultAssembly.evidence.test.ts

    Implemented in: annualYearResultAssembly.ts; annualSnapshot.ts; result.ts

    Is the number of: accounts-net-worth-annual

    Feeds: projection-result-ending-net-worth

Engine source: engine/src/projection/internal/types/result.ts (ProjectionResult.endingNetWorth)

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.