Calculation catalog › Cash flow and summary
Income recurring annual
Recurring non-wage income in a projection year.
Field: Recurring income Unit: US dollars Basis: nominal dollars Computed by: Engine Status: Complete chain
Appears in: chart (recurring); csv (recurring); scenarios-page (Lifetime income "Recurring income"); cash-flow-drilldown (recurringIncome source line)
Calculation records
-
Annual recurring household income Formula record, justified by derivation
Purpose: What a recurring income stream pays inside its year window.
Statement: projection/internal/otherIncomeStreams.ts#otherIncomeStreams pays a recurring stream in every year inside its inclusive startYear..endYear window while any household member is alive, as annualAmount x inflFactor when inflationAdjusted is true and annualAmount alone when it is false; annualIncomeSetup folds the rows into the published projection/internal/types/result.ts#YearResult.incomes.recurring. A null startYear or endYear leaves that side of the window open. Tax treatment routes the income for tax and never changes the cash amount. Units: nominal USD per year. Rounding: none.
Formula:
recurring = annualAmount * (inflationAdjusted ? inflFactor : 1), paid when startYear <= year <= endYear and any household member is alive-
annualAmount: Stream amount in today's dollars (unit: usd/year) (domain: nonnegative) -
inflFactor: Cumulative general-inflation factor from the projection start year (unit: 1) (domain: positive) -
startYear, endYear: Inclusive calendar-year window; null leaves that side open (unit: calendar year) (domain: integer or null)
Timing: income pass 2, once per projection year
Rounding: none
Limits:
- Asserted on a real simulatePlan run over 2028-2030. Plan assumptions beyond the worksheet's inputs: a single person filing single in KY with a zero state rate, no accounts, and the worksheet's 1.08 cumulative inflation factor supplied as a per-year inflation path of 8 percent in the first projection year and 0 afterwards, because a single constant rate cannot give a two-year cumulative factor of exactly 1.08
- The gate is household-wide, not person-owned: a recurring stream has no owner and stops only after the last household death
- taxTreatment "none" is a tax-free row that still joins cash income; the field is cash, not taxable income
Provenance: derived by
codex, implemented byclaude.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: income-recurring-annual.md Mutation receipt: income-recurring-annual.mutation.md
Evidence tests: otherIncomeStreams.evidence.test.ts
Implemented in: otherIncomeStreams.ts; result.ts
Is the number of: income-recurring-annual
Feeds: income-total-annual
-
Engine source: engine/src/projection/internal/types/result.ts
(YearResult.incomes.recurring)
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.