Repository navigation
Count Lifetime ISAs as means-tested capital of the holder's benefit unit - #1983
Conversation
microcosm datasets now carry three Lifetime ISA cells imputed from the WAS round-8 person file (PolicyEngine/microcosm#1059). Declare them: lifetime_isa_balance (a person input, uprated by per-capita GDP like savings), has_lifetime_isa and household_lifetime_isa_balance. The balance is a component of gross_financial_wealth and stays out of savings, corporate_wealth and total_wealth. Every means test values capital at its current market or surrender value, and DWP guidance counts a Lifetime ISA at 75% of its value under 60 and in full from 60 (ADM H1659; DMG 29665, 52665 and 84751). Add the withdrawal charge (25%, 20% from 6 March 2020 to 5 April 2021) and the charge-free age (60) under gov.hmrc.isa.lifetime, and lifetime_isa_countable_capital at that surrender value. Household stocks reach benunits through per-regime proxies because the data only knows them per household. A Lifetime ISA is one person's, and most holders are young adults living with parents, so the proxies would count an adult child's Lifetime ISA against a parent's JSA claim or a grandchild's against a grandparent's Pension Credit. Each of the six means tests gets a person_sources list beside its household sources, summed over the benunit's own members. Fixes #1981 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Automated review pass (Claude Code, high effort) — round 1 at
|
Review round 1, items 1 and 2. The six person_sources sums ran over every benefit-unit member, so a dependant aged 18 or 19 in non-advanced education, the ages that can hold a Lifetime ISA, had theirs counted against the parent's claim. Only the claimant's and partner's capital counts (HB reg. 45; IS reg. 47 and JSA reg. 109 as made; ESA reg. 83; WRA 2012 s. 5; SPCA 2002 s. 5), so weight the sums by is_uc_claimant, the claimant-or-partner flag datasets set from recorded relationships. Parameter lookups before the first date return the first value, so the lists also counted the Lifetime ISA in 2015 and 2016. Each list is now empty from its regime's start until 6 April 2017. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 1, item 3: a dataset that stores has_lifetime_isa or household_lifetime_isa_balance keeps the stored value when a reform or situation edits lifetime_isa_balance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Posting on María's call. Thanks for the round. The fixes are pushed in two commits, and the head is now
Tests at |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Automated review pass (Claude Code, high effort) — round 2 (final pass) at b340cf53
Verdict: approve. All three round-1 items are closed. There's one small nit about the calculator fallback, and one follow-up question about the data, which you already flagged. Neither blocks.
Round-1 items
| Item | Status | Evidence |
|---|---|---|
| 1 dependant's LISA counted against the parent | Closed | 0028ec5b weights each of the six person sums by is_uc_claimant. I reran the round-1 probe: a parent (is_parent: true) and an 18-year-old in non-advanced education with £10,000 give £0 in all six. is_uc_claimant has no age or eligibility term (head, parent, or adult not a qualifying young person with a parent in the unit), so pensioners count. A pensioner couple aged 67 and 66 with £10,000 each gives £20,000 under Pension Credit. A single 30-year-old gives £7,500 under Housing Benefit and the other working-age tests. |
| 2 counted before April 2017 | Closed | Each list is [] until 2017-04-06. Year 2016 gives £0 in all six, and year 2017 counts. That's consistent with the engine reading a year as its fiscal year: the lookup at the 2017 instant already returns the April-2017 list. |
| 3 stored household total not recomputed | Closed | b340cf53 documents it on both variables. Nothing in the means tests reads the household total, so documenting it is enough. |
I spot-checked the citations in the new list descriptions on legislation.gov.uk. IS reg. 47 and HB reg. 45 both read "The capital of a child or young person who is a member of the claimant's family shall not be treated as capital of the claimant". SPCA 2002 s. 5 aggregates the claimant's and partner's capital.
New
1. Nit: the calculator fallback only recognises a dependant when the parent is flagged. is_parent has no formula (default False). Without it, is_uc_claimant falls back to is_adult, so the 18-year-old reads as a claimant. Leaving is_parent unset in the same probe gives £7,500 in the five working-age tests, even with a 10-year-old sibling in the unit. Datasets are fine here: the enhanced FRS sets is_parent from the FRS (policyengine_uk_data/datasets/frs.py), and microcosm sets is_uc_claimant from FRS roles. So this only affects household-calculator users who don't set it, and the variable's docstring already says relationships need explicit input when ambiguous. No change needed in this PR; I'd mention it in the changelog or the list descriptions if that's easy.
2. Follow-up question (your open item): does the FRS savings figure already include LISAs? I confirmed that uc_assessable_capital returns uc_reported_capital whenever it is ≥ 0, ignoring person_capital. So on microcosm data the UC effect is zero by construction, as your effect section says. On the modelled path (the £22m), the question is whether the household sources (savings and the ISA/investment items) already capture a LISA through the FRS accounts. If they do, the LISA from the WAS donor (microcosm#1059) is counted twice there. That's not answerable without the FRS account-type codes, so I'd file it as a follow-up issue rather than hold this PR.
Checks run at b340cf53
lifetime_isa_capital.yaml: 21 passed.test_lifetime_isa_capital.py: 3 passed.- The existing capital and relationship YAML files (HB capital and pension-age claims, ESA, JSA, IS capital, Pension Credit income and deemed income, the UC relationship, child-element, unearned-income and eligibility files, and council tax reduction): all 13 pass.
- CI: lint, docs and smoke-imports on 3.11–3.14 are green; the main
Testjob was still running.
Conflicts resolved: ESA/IS/JSA/HB/UC assessable capital keep the claimant-and-partner household share and add main's person-level capital (Lifetime ISA, #1983) for the claimant or partner; CTR applicable income keeps member-based deductions and adds main's guarantee-credit and savings-credit-only rules (#1909); progression.py keeps both imports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #1981
PolicyEngine/microcosm#1059 put three Lifetime ISA (LISA) cells into the UK datasets that microcosm builds. This PR declares them and counts the LISA at its surrender value as capital in the six means tests, in the holder's own benefit unit.
Changes
lifetime_isa_balanceis a person input (STOCK), uprated by per-capita GDP likesavings.has_lifetime_isaislifetime_isa_balance > 0.household_lifetime_isa_balanceadds the person balances.uprating_indices.yamland on the growth-factors page, so a dataset's stored household total keeps matching its person balances in later years.gross_financial_wealth, and outsidesavings,corporate_wealthandtotal_wealth.gov.hmrc.isa.lifetime.withdrawal_charge: 25% from 6 April 2017 (paragraph 5), and 20% from 6 March 2020 to 5 April 2021 (paragraph 5A, inserted by SI 2020/506);gov.hmrc.isa.lifetime.charge_free_age: 60 (paragraph 4(1)).lifetime_isa_countable_capitalis the balance less the charge under 60, and the whole balance from 60.person_sourceslist beside their householdsources.is_uc_claimant), outside the household proxies. A dependant's holding is not the claimant's capital (HB reg. 45; IS reg. 47 and JSA reg. 109 as made; ESA reg. 83; WRA 2012 s. 5; SPCA 2002 s. 5).Effect on a microcosm dataset
The dataset.
3598c38de(the merge of UK was_lisa: Lifetime ISA holdings from the WAS round-8 person tab (#1003) microcosm#1059), with the recipe of the 30 September national build. Nothing was uploaded.person_sourceslists emptied, which reproduces main's capital.Results.
uc_reported_capitalon every benefit unit to FRS-reported benefit-unit savings and investments (TOTCAPB4), and reported capital overrides the modelled capital. So neither the household proxy nor the LISA reaches Universal Credit on microcosm data.total_wealthLeft unchanged, as the issue asks for a recorded decision. Adding the LISA would not double count.
total_wealthalso omits cash ISAs (exported ascash_isa, with no engine variable), and adding one ISA type alone would leave the wealth aggregates covering ISAs unevenly. The proposal is to bindcash_isaand decide both together.Not in this PR
sourceslist, and are exported per household. Binding them would raise capital for many more claimants, so it needs its own measurement.savingswith the scheme's capital limit, or usesuc_assessable_capitalfor Universal Credit recipients in the local schemes. It therefore sees a LISA only through Universal Credit capital.Review round 1
0028ec5b. Only the claimant's and partner's holdings count, throughis_uc_claimant.0028ec5b. The lists are empty until 2017-04-06.b340cf53.Checks
ruff format --check .andruff check .: clean repo-wide (ruff viauv tool run).policyengine-core test policyengine_uk/tests/policy -c policyengine_uk: 1,308 passed, including 21 new cases intests/policy/baseline/gov/dwp/lifetime_isa_capital.yaml.pytestontests/test_lifetime_isa_capital.py(dataset uprating, the reform lever, no monthly proration),tests/code_health, and the stock-capital, uprating and pension-age Housing Benefit tests: 18 passed.pytest policyengine_uk/tests/atb340cf53: 323 passed, 45 skipped, none failed. The skipped tests are the microsimulation tests that needHUGGING_FACE_TOKENor a default dataset; CI's Test job runs them.🤖 Generated with Claude Code