Skip to content

Follow-ups from the #2746 review: trust income in other_investment_income is taxed as savings income, and two test comments overstate #2748

Open

Description

@juaristi22

Vahid's review of #2746 left three nits. No issue or PR tracks the two below.

1. Trust income is taxed as savings income

  • The documentation of other_investment_income includes "interest from trusts or settlements". taxable_savings_interest_income adds the whole column to savings interest, so income tax charges all of it as savings income.
  • Trust income does not always have that character:
    • Discretionary and accumulation trusts. A payment to a beneficiary is treated as made after deducting tax at the trust rate, and the beneficiary is treated as having paid that tax (ITA 2007 s. 494). The beneficiary is taxed on it as non-savings income.
    • Interest-in-possession trusts. The income keeps its character. Trustees pay the dividend rate on dividend-type income and 20% on all other income (Trusts and Income Tax), so a beneficiary's share of dividends is dividend income.
  • So when a dataset or a household calculation puts trust income in this column, the model charges it at the savings rates and applies the starting rate for savings and the personal savings allowance. It also gives no credit for tax the trust has already paid.
  • This predates Count other investment income in market and HBAI income #2736 and Count other investment income in capital income, and test it in every income measure #2746.
  • A fix could limit the column's documentation to interest. Trust income would then get its own input that keeps its character and carries the s. 494 credit.
  • Related: UC counts royalties, trust income and overseas pensions in miscellaneous_income as earned income #1961, on how Universal Credit counts trust income in miscellaneous_income.

2. Two comments in test_other_investment_income_household_income_properties.py say more than the code

  • Docstring, lines 3-5. It says income tax charges other investment income "from trusts" as savings income, exactly as it charges bank interest. Only trust interest is charged that way. "Trust interest" would match the variable and the changelog.
  • Comment, line 128. It says net income "rises by the interest less the tax on it". The test checks a bound, 0 <= change <= interest, which allows for benefit responses. "Rises by at most the interest, and never falls" would match the test.

No change needed

capital_income has one reader outside this repo. policyengine-uk-data's wealth imputation (imputations/wealth.py) uses it as a QRF predictor, matched to the WAS measure of gross investment income.

  • Nothing moves on the FRS, because only the SPI dataset fills other_investment_income.
  • Where a dataset does fill the column, the predictor moves closer to the WAS measure.

Activity

  1. vahid-ahmadi commented on Oct 29, 2026

    @vahid-ahmadi
    Collaborator

    Checked against main at 64cf582 (after #2746) and legislation.gov.uk. Code reading only.

    1. Both items still stand on main.

      • variables/input/other_investment_income.py:8 still lists "interest from trusts or settlements", and taxable_savings_interest_income.py:17 reads the whole column.
      • tests/test_other_investment_income_household_income_properties.py lines 3-5 still say "and from trusts", and line 128 still says "rises by the interest less the tax on it" above a bound check.
    2. On the statute, a small sharpening for whoever picks this up:

      • ITA 2007 s. 494 does the grossing up and the credit: the payment is treated as made after tax at the trust rate (s. 494(1)-(2)), and that tax is treated as paid (s. 494(3)).
      • The non-savings character comes from ITA 2007 s. 18(3), which limits savings income to interest, purchased life annuities, deeply discounted securities and accrued income profits. A discretionary payment is none of these, so it falls outside the savings rates, the starting rate for savings and the personal savings allowance.
      • s. 494(4)(b): for a settlor-interested trust the settlor, not the beneficiary, is treated as having paid the tax. A separate trust input would need to carry that too, or say it leaves it out.

    🤖 Generated with Claude Code

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