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 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: 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.