Calculation catalog › Cash flow and summary

Year result tax exempt interest

Tax-exempt interest income received during the projection year.

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

Appears in: csv (taxExemptInterest); chart (Income by source "Tax-exempt interest" series); scenarios-page (Annual "Tax-exempt interest" and lifetime "Tax-exempt interest"); cash-flow-drilldown (taxExemptInterest source line)

Calculation records

  • Annual tax-exempt interest, and the ACA-year maximum Formula record, justified by derivation

    Purpose: Municipal interest the year really generates, raised to an attested household total in an ACA year.

    Statement: projection/internal/types/result.ts#YearResult.taxExemptInterest is the account-generated federally tax-exempt interest total, except in a year with an active ACA contract whose taxExemptInterest state is known, when it is max(attested household total, plan-generated subset). Generated account interest is the stated taxable-account balance times taxExemptInterestYieldPct/100. Cash and balances always follow the generated figure. Units: nominal USD per year. Rounding: none.

    Formula: generated = B x q; published = known ACA contract ? max(attested, generated) : generated

    • B: Taxable-account start-of-year balance (unit: usd) (domain: nonnegative)
    • q: Tax-exempt interest yield (unit: 1) (domain: taxExemptInterestYieldPct / 100)
    • attested: Household tax-exempt interest on a known ACA contract (unit: usd/year) (domain: nonnegative)

    Timing: once per projection year, after the account yield pass

    Rounding: none

    Limits:

    • Both cases asserted as the published field of a real simulatePlan 2026 row: one municipal sleeve at the worksheet's 200,000 balance and 2-percent tax-exempt yield, zero account return and zero inflation. Plan assumptions beyond the worksheet's inputs: a 60-year-old filing single in KY at a zero state rate, the sleeve does not reinvest its yield, and Case B adds a 2026 ACA contract at a 500-per-month enrollment premium whose taxExemptInterest state is known at the worksheet's 6,000; the enrollment premium is what makes the contract active and is not read by this field
    • The ACA maximum characterizes income only; the test also asserts that the generated 4,000 remains the cash-real income member in Case A

    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: year-result-tax-exempt-interest.md Mutation receipt: year-result-tax-exempt-interest.mutation.md

    Evidence tests: simulate.evidence.test.ts

    Implemented in: result.ts; annualAggregateRothConversionPhase.ts

    Is the number of: year-result-tax-exempt-interest

    Feeds: income-total-annual, tax-total-annual

Engine source: engine/src/projection/internal/types/result.ts (YearResult.taxExemptInterest)

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.