diff --git a/changelog.d/2733.fixed.md b/changelog.d/2733.fixed.md new file mode 100644 index 0000000000..d74116d6d1 --- /dev/null +++ b/changelog.d/2733.fixed.md @@ -0,0 +1 @@ +Count `other_investment_income` in `market_income`, `household_market_income` and `hbai_household_net_income`. Income tax already charged it as savings income, so household net income carried the tax on it without the income. diff --git a/docs/book/validation/hbai.md b/docs/book/validation/hbai.md index 30839e69d7..d493d606bb 100644 --- a/docs/book/validation/hbai.md +++ b/docs/book/validation/hbai.md @@ -26,7 +26,7 @@ The table below shows how the HBAI income components map to PolicyEngine variabl | Income received from dividends (from FYE 2022) |`dividend_income`| | State support - all benefits and tax credits |`hbai_benefits`| | Income from occupational and private pensions |`private_pension_income` (includes occupational pension income)| -| Investment income |`dividend_income`, `savings_interest_income`, `property_income_after_finance_costs`| +| Investment income |`dividend_income`, `savings_interest_income`, `other_investment_income`, `property_income_after_finance_costs`| | Maintenance payments |`maintenance_income`, `spousal_maintenance_income`| | Income from educational grants and scholarships (including, for students, student loans and parental contributions) |`student_payments`| | The cash value of certain forms of income in kind (free school meals, free school breakfast, free school milk, free school fruit and vegetables, Healthy Start vouchers and free TV licences for those aged 75 and over who receive Pension Credit) |`free_school_meals`, `free_school_fruit_veg`, `free_school_milk`, `healthy_start_vouchers`, `free_tv_licence_value`| diff --git a/policyengine_uk/tests/policy/baseline/household/income/other_investment_income_in_household_income.yaml b/policyengine_uk/tests/policy/baseline/household/income/other_investment_income_in_household_income.yaml new file mode 100644 index 0000000000..59748095f8 --- /dev/null +++ b/policyengine_uk/tests/policy/baseline/household/income/other_investment_income_in_household_income.yaml @@ -0,0 +1,39 @@ +# Other investment income (National Savings, gilt and other securities +# interest) is savings income for income tax (taxable_savings_interest_income), +# so market income and HBAI income count it as they count bank interest. +# 2026-27: personal allowance £12,570, basic rate 20%, personal savings +# allowance £1,000 for a basic rate taxpayer, starting rate for savings +# £5,000 less non-savings income above the personal allowance (here nil), +# employee NI 8% from £12,570 to £50,270. + +- name: Other investment income counts in market and HBAI income + period: 2026 + absolute_error_margin: 0.01 + input: + age: 40 + employment_income: 40_000 + other_investment_income: 2_000 + output: + # 40,000 + 2,000. + market_income: 42_000 + household_market_income: 42_000 + # (40,000 - 12,570) x 20% = 5,486, plus (2,000 - 1,000 PSA) x 20% = 200. + income_tax: 5_686 + # (40,000 - 12,570) x 8%. + national_insurance: 2_194.40 + # 42,000 - 5,686 - 2,194.40. + hbai_household_net_income: 34_119.60 + +- name: The same amount as bank interest gives the same incomes + period: 2026 + absolute_error_margin: 0.01 + input: + age: 40 + employment_income: 40_000 + savings_interest_income: 2_000 + output: + market_income: 42_000 + household_market_income: 42_000 + income_tax: 5_686 + national_insurance: 2_194.40 + hbai_household_net_income: 34_119.60 diff --git a/policyengine_uk/variables/household/income/hbai_household_net_income.py b/policyengine_uk/variables/household/income/hbai_household_net_income.py index 604ec70078..7b09beb6f7 100644 --- a/policyengine_uk/variables/household/income/hbai_household_net_income.py +++ b/policyengine_uk/variables/household/income/hbai_household_net_income.py @@ -7,6 +7,9 @@ "employment_income", "self_employment_income", "savings_interest_income", + # National Savings, gilt and other securities interest, which income + # tax charges as savings income (taxable_savings_interest_income). + "other_investment_income", "tax_free_savings_income", "individual_savings_account_dividend_income", "dividend_income", diff --git a/policyengine_uk/variables/household/income/household_market_income.py b/policyengine_uk/variables/household/income/household_market_income.py index 1fd5503c79..766b11e901 100644 --- a/policyengine_uk/variables/household/income/household_market_income.py +++ b/policyengine_uk/variables/household/income/household_market_income.py @@ -7,6 +7,9 @@ "employment_income", "self_employment_income", "savings_interest_income", + # National Savings, gilt and other securities interest, which income + # tax charges as savings income (taxable_savings_interest_income). + "other_investment_income", "tax_free_savings_income", "individual_savings_account_dividend_income", "dividend_income", diff --git a/policyengine_uk/variables/household/income/market_income.py b/policyengine_uk/variables/household/income/market_income.py index f759e64f76..01aa0c71a0 100644 --- a/policyengine_uk/variables/household/income/market_income.py +++ b/policyengine_uk/variables/household/income/market_income.py @@ -16,6 +16,9 @@ def formula(person, period, parameters): "employment_income", "self_employment_income", "savings_interest_income", + # National Savings, gilt and other securities interest, which income + # tax charges as savings income (taxable_savings_interest_income). + "other_investment_income", "tax_free_savings_income", "individual_savings_account_dividend_income", "dividend_income",