Skip to content

household_market_income leaves out other_investment_income, which income tax charges #2733

Closed

Description

@PavelMakarchuk

Problem

household_market_income leaves out other_investment_income, but income tax charges it.

  • HOUSEHOLD_MARKET_INCOME_VARIABLES (policyengine_uk/variables/household/income/household_market_income.py) lists savings_interest_income, dividend_income and other investment income, but not other_investment_income. The variable was never in the list (git log -S finds no commit that added or removed it).
  • taxable_savings_interest_income adds other_investment_income to savings interest, so income tax charges it as savings income.
  • household_net_income, household_net_income_ahc and household_gross_income all build on household_market_income.

So a household with other investment income pays the tax on it, but its market, gross and net income do not include the income. Its net income is too low by the full amount, plus the tax.

The same gap was fixed for total_income in #2174 / #2184.

Why it matters now

other_investment_income holds National Savings interest products, gilts and other securities interest, and trust interest (the variable's own documentation). PolicyEngine/microcosm#1419 routes NS&I and gilt interest into it from the FRS. Its calibrated national cut holds £9.5bn of it in 2024, against £3.5bn on the earlier cut. So the gap now affects household net income, deciles and poverty measures on Microcosm data. Tax and benefit costings are not affected, because they read tax and benefits, not market income.

Suggested fix

  1. Add other_investment_income to HOUSEHOLD_MARKET_INCOME_VARIABLES.
  2. Add a YAML test: a person with only other_investment_income has it in household_market_income, and household_net_income equals the income less its tax.
  3. Check the other readers of the column for the same question: gross_taxable_inputs already includes it, and Housing Benefit's _net_earnings reads it.

Found while reviewing PolicyEngine/microcosm#1419 (María's reply on the savings targets).

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions