Skip to content

Current-law ISA rules for the household calculator: ISA income, cash ISAs as capital, the Lifetime ISA bonus and charge, the Help to Buy ISA bonus #2584

Closed

Description

@juaristi22

Summary

The household calculator lets a user enter several ISA amounts: ISA interest, a cash ISA, a stocks-and-shares ISA and a Lifetime ISA balance. Two of those give wrong results under current law:

  • ISA interest entered in its own box offsets the user's other interest for tax, and is left out of income (item 1).
  • A cash ISA counts in no means test (item 2).

The ISA amounts a household can receive or pay in a year are not modelled at all (items 3–6):

  • the Lifetime ISA bonus;
  • the Lifetime ISA withdrawal charge;
  • the Help to Buy ISA bonus;
  • from 6 April 2027, the charge on interest on cash held in stocks-and-shares ISAs.

This issue covers current law only. HM Treasury's First Time Buyer ISA is out of scope until it is legislated. The issue spells out the ISA line of #1775 (workstream B3) for current law.

What the model has today (main, 2.148.0)

Inputs.

  • person savings_interest_income, documented as "gross of tax";
  • person individual_savings_account_interest_income;
  • household savings, cash_isa and stocks_and_shares_isa;
  • person lifetime_isa_balance.

Income tax.

  • tax_free_savings_income adds individual_savings_account_interest_income (variables/gov/hmrc/income_tax/bases/savings_income/tax_free_savings_income.py:11).
  • taxable_savings_interest_income is max(0, savings_interest_income + other_investment_income − tax_free_savings_income) (.../taxable_savings_interest_income.py:15-20).
  • market_income and household_market_income add savings_interest_income, but not the ISA interest input (variables/household/income/household_market_income.py).

Means tests.

  • Each test's household capital sources are savings, owned_land, share_like_capital (which includes stocks_and_shares_isa) and other property: HB parameters/gov/dwp/housing_benefit/means_test/capital/sources.yaml:45-50, with PC, IS, JSA, ESA and UC alike.
  • lifetime_isa_countable_capital (Count Lifetime ISAs as means-tested capital of the holder's benefit unit #1983) is in each test's person_sources.
  • cash_isa is in no list.

Lifetime ISA parameters. gov.hmrc.isa.lifetime.withdrawal_charge and gov.hmrc.isa.lifetime.charge_free_age exist. Nothing else exists under gov.hmrc.isa.

Home purchase. property_purchased, main_residential_property_purchased (the price) and main_residential_property_purchased_is_first_home feed stamp duty land tax and LBTT. There is no input for buying with a mortgage.

1. ISA income: one box offsets other interest and drops out of income

The law. Interest and dividends on ISA investments are exempt from income tax (ITTOIA 2005 s. 694 and the ISA Regulations 1998 made under it). They are still income: the datasets already count ISA interest inside savings_interest_income, and subtract it for tax through tax_free_savings_income.

What goes wrong. Take a person with £30,000 of earnings, £2,000 of bank interest and £500 of cash ISA interest.

  • If they enter £2,000 as savings interest and £500 as ISA interest, the model:
    • taxes £1,500 of interest instead of £2,000;
    • counts £2,000 of interest in market income instead of £2,500.
  • The model is right only if they enter £2,500 as savings interest and the £500 again as ISA interest. Nothing in the labels says so.
  • ISA dividends have no input at all. Entered as dividend_income, they are taxed.

Options.

  • Option A (recommended): make the inputs additive and non-overlapping.
    • savings_interest_income holds interest outside ISAs.
    • individual_savings_account_interest_income holds ISA interest.
    • A new individual_savings_account_dividend_income holds dividends and other returns paid out of ISAs.
    • Market income adds all three. taxable_savings_interest_income stops subtracting, and taxable_dividend_income never sees ISA dividends.
    • The datasets change with it. Microcosm already computes the two interest amounts separately from the FRS accounts table, so it would export them separately, and three things move with that:
    • This needs a coordinated PolicyEngine/microcosm change.
  • Option B: keep the gross convention and say so.
    • Label savings_interest_income "all interest, including ISA interest", and the ISA input "of which: interest from ISAs".
    • Add an "of which: ISA dividends" input subtracted from taxable_dividend_income.
    • This changes no dataset, but leaves the calculator relying on labels.

2. Cash ISAs are not counted as capital in any means test

The law. All six regimes value capital at its "current market or surrender value", and nothing disregards an ISA:

Stocks-and-shares ISAs already count, through share_like_capital, and Lifetime ISAs through person_sources. Cash ISAs, Help to Buy ISAs included, do not.

Proposed.

  • Add cash_isa to the household capital sources of all six tests, beside savings.
  • For Universal Credit, add it to the financial pool consistently with share_like_capital and the reported-capital override, as sources.yaml describes.
  • Document savings as accounts other than ISAs. The WAS-based datasets build the two separately: savings from DVSaValR8_aggr, cash_isa from DVCISAVR8_aggr.

Effect on datasets. UC and PC read a reported financial total where a dataset records one, and the FRS total already includes ISAs. So the population change falls in HB, IS, JSA and ESA, and in benefit units with no reported total. Measure it on a microcosm dataset in the PR.

3. The Lifetime ISA bonus

The law.

Proposed parameters, under gov.hmrc.isa.lifetime, all from 2017-04-06: bonus_rate (0.25), payment_limit (4,000), minimum_age (18) and payment_age_limit (50).

Proposed inputs and variables.

  • Input lifetime_isa_payments (person, £ a year). It holds current year payments as reg. 10A(3) defines them: money paid in, plus transfers in from other ISAs, but not transfers between Lifetime ISAs.
  • Variable lifetime_isa_bonus (person) = bonus_rate × min(lifetime_isa_payments, payment_limit), when 18 ≤ age < 50.

Not modelled. The under-40 first payment: anyone over 40 who pays in must have opened before 40, so the model assumes it. Also when in the year the payments fall.

4. Lifetime ISA withdrawals and the withdrawal charge

The law (ISA Regulations 1998, Schedule). The charge is 25% of the amount withdrawn (para. 5), and 20% from 6 March 2020 to 5 April 2021 (para. 5A). These are the existing parameters. No charge applies in three cases:

  • from age 60 (para. 4(1));
  • with a terminal illness, with written medical evidence that the investor is expected to live less than a year (para. 4(2));
  • towards a first home (para. 6), when all of these hold:
    • the price is no more than £450,000 (6(3));
    • it is bought with a legal mortgage or a regulated home purchase plan (6(6));
    • it is at least 12 months after the first payment (6(11));
    • the money is paid to a conveyancer (6(12));
    • the investor has never owned a residential property (para. 7).

Proposed parameter. gov.hmrc.isa.lifetime.property_price_cap: 450,000 from 2017-04-06.

Proposed inputs.

  • person lifetime_isa_withdrawals: everything withdrawn in the year, £;
  • person lifetime_isa_withdrawals_towards_first_home: the part paid to a conveyancer for a first-home purchase;
  • person is_terminally_ill;
  • household main_residential_property_purchased_with_mortgage.

Proposed variable. lifetime_isa_withdrawal_charge (person) = withdrawal_charge × the withdrawals that are not exempt.

  • All of the withdrawals are exempt from the charge-free age or with a terminal illness.
  • The first-home part is exempt when main_residential_property_purchased ≤ the cap, the purchase is by mortgage, and main_residential_property_purchased_is_first_home.
  • The 12-month rule is either an input or assumed to be met (decide).
  • Withdrawal on death is not modelled.

lifetime_isa_countable_capital is unchanged.

5. The Help to Buy ISA bonus (closing scheme)

The rules (GOV.UK; the scheme is HM Treasury's, not statutory):

  • no new accounts;
  • payments until November 2029, up to £200 a month;
  • a bonus of 25% of savings when buying a first home, at least £400 (on £1,600 saved) and at most £3,000 (on £12,000);
  • the home must cost no more than £250,000, or £450,000 in London;
  • the conveyancer claims the bonus at purchase, until November 2030.

Proposed parameters, under gov.treasury.help_to_buy_isa, beside the other HM Treasury schemes: bonus_rate, minimum_savings (1,600), maximum_bonus (3,000), property_price_cap by London and elsewhere, and the claim end date.

Proposed input. help_to_buy_isa_savings_used: person, the balance used for a purchase in the year.

Proposed variable. help_to_buy_isa_bonus = bonus_rate × savings, when savings reach the minimum, capped at the maximum. It applies when the household buys a first home within its region's cap, and is zero after the claim end date.

6. Charge on interest on cash held in stocks-and-shares and innovative finance ISAs (from 6 April 2027)

The law. SI 2026/1018 reg. 15 inserts reg. 22A into the ISA Regulations 1998, from 6 April 2027:

  • Such interest gets no relief from tax.
  • The ISA manager pays HMRC a flat rate charge on it, treated as final tax.
  • The rate is the savings basic rate under ITA 2007 s. 7A: gov.hmrc.income_tax.rates.savings.basic, which is 22% from 2027-28.
  • Apart from ITTOIA 2005 s. 629, the interest "is treated as not being income for any income tax purposes", and the investor gets no repayment.

Proposed.

  • Input non_cash_isa_cash_interest (person): interest on cash held in a stocks-and-shares or innovative finance ISA.
  • Variable isa_cash_interest_flat_rate_charge = savings basic rate × that interest from 2027-04-06, and 0 before.
  • The interest is ISA income (item 1). The charge is a tax paid out of it, so it belongs in household tax and gov_tax, not in income_tax.

Accounting

  • Bonuses (items 3 and 5). The Lifetime ISA and Help to Buy ISA bonuses are government payments into a savings account or towards a deposit: capital, not income.
    • Count them in gov_spending but not household_benefits, so household net income and poverty do not move. other_public_spending_budget_change is a precedent for spending outside household income.
    • Expose each as its own variable, so the calculator can show it.
  • The Lifetime ISA withdrawal charge (item 4) is paid out of capital. Net it against the Lifetime ISA bonus in gov_spending, or count it as revenue (decide). It does not reduce household net income.
  • The flat rate charge (item 6) is a tax on income (see item 6).

Out of scope

  • The First Time Buyer ISA. It is a consultation, not law.
  • Subscription limits. The £20,000 overall limit (reg. 4ZA(1)) and the £12,000 cash limit for anyone "64 or under at the end of that year" from 6 April 2027 (reg. 4ZA(1ZA), SI 2026/1018 reg. 6) cap what can be paid in. They change no tax or benefit that a household calculator computes. Population work on the cash limit would need them, with subscription data.
  • Junior ISAs and Child Trust Funds. Their income is tax-free, and no model variable reads them.
  • Gains inside ISAs. They are exempt and there is no input for them. Users should not enter them as capital_gains.
  • Innovative finance ISA balances. They are countable capital, but there is no input for them. Add one with item 2 if wanted.
  • Population data. Microcosm has no ISA payment, withdrawal or bonus amounts (UK: impute LISA ownership and balances from WAS; document the annual-contribution gap microcosm#1003), so the new inputs are zero in population runs. Only items 1 (Option A) and 2 change population results.

Tests (amounts worked by hand)

Item 1 (Option A). A person with £30,000 of earnings, £2,000 of savings interest, £500 of ISA interest and £300 of ISA dividends has:

  • £2,000 of taxable savings interest;
  • £0 of taxable dividend income;
  • £2,800 of interest and dividends in market income.

Item 2.

  • A UC single claimant aged 30, with £5,000 of savings and a £3,000 cash ISA, has £8,000 of assessable capital (today £5,000). That gives £34.80 a month of assumed income (reg. 72: £4.35 per £250 or part above £6,000).
  • A working-age HB claimant with £15,000 of savings and a £2,000 cash ISA is above £16,000 and gets no HB.

Item 3. In 2026-27:

  • aged 30, paying in £4,000 gives a £1,000 bonus;
  • paying in £2,400 gives £600;
  • paying in £5,000 gives £1,000 (the limit applies);
  • aged 50 or aged 17, there is no bonus;
  • in 2016-17, there is no bonus.

Item 4. In 2026-27, for someone aged 35:

  • £2,000 withdrawn, none towards a first home, gives a £500 charge;
  • the same in 2020-21 gives £400;
  • at 60, or when terminally ill, there is no charge;
  • £10,000 towards a £400,000 first home bought with a mortgage gives no charge;
  • the same towards a £460,000 home, or without a mortgage, gives a £2,500 charge.

Item 5. In 2026-27:

  • £8,000 used for a £240,000 first home outside London gives a £2,000 bonus;
  • £16,000 used gives £3,000;
  • £1,200 used gives nothing;
  • a £300,000 home outside London gives nothing, and in London gives £2,000 on £8,000 used;
  • in 2031 there is nothing.

Item 6.

  • In 2027-28, £100 of interest on cash in a stocks-and-shares ISA gives a £22 charge, and the interest is not in taxable savings income.
  • In 2026-27 there is no charge.

Done when

  • Items 1–4 are implemented, with the tests above.
  • Items 5 and 6 are implemented, or explicitly declined.
  • The accounting decisions are recorded in the variables' documentation.
  • policyengine-app-v2 groups the new inputs (householdVariableGroups.ts), in a follow-up there.
  • The population effect of item 2, and of item 1 if Option A, is measured on a microcosm dataset and reported in the PR.

Activity

  1. self-assigned this
    on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

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