Repository navigation
Conversation
Income Support, Housing Benefit, Pension Credit and council tax reduction counted property_income as income and deducted tax on rent, interest and dividends. The regulations treat income derived from capital as capital (IS reg 48(4) and Sch 9 para 22; HB reg 46(4) and Sch 5 para 17; HB (SPC) Sch 5 para 22; SPC Sch IV para 18; the CTR schemes' equivalents) and disregard tax only on income taken into account. Rent for letting part of the home stays income less the £20 weekly sub-tenant disregard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hand-computed YAML cases for Income Support, working- and pension-age Housing Benefit, Pension Credit and the English, Welsh and Scottish council tax reduction schemes, and Hypothesis properties: invariance to income from capital, home-letting bounds and monotonicity, and bounds on the tax the means tests deduct. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve council_tax_reduction_applicable_income: keep #1909's guarantee credit and savings-credit-only rules and this branch's income-from-capital rules, documentation and references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-capital-derived-income Resolve the four means-test income formulas: keep #1896's claimant/partner member filter and this branch's income-from-capital rules (no property income, legacy_means_test_income_tax in the tax line, home-letting income). Keep #1952's Pension Credit references and this branch's Sch IV para 18 reference, and #1926's HB docs with this branch's sentence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Count land and property other than the home in council tax reduction capital (national schemes and the modelled local schemes), so a let property worth more than 16,000 ends CTR now that its rent is not income (SI 2012/2885 Sch 1 para 31(1); WSI 2013/3029 reg 30). Shares stay out pending the pension-wealth split (#1936). - Deduct only the Step 4 tax on counted income (ITA 2007 s.23), less its pro-rata share of Step 6 reductions; Step 7 charges (HICBC, annual allowance charge; s.30) are not tax on counted income. - Select the Scottish working-age scheme under SSI 2021/249 reg 3 (under pensionable age, or over it with UC or a qualifying income-related benefit) and date its exclusion of sub-tenant rent from 1 April 2022; before then SSI 2012/303 Sch 4 para 25 counted it less 20. - Count only the claimant's and partner's sublet rent; give the pension-age disregard its pre-October-2003 value (4) so early years compute. - Update #1909's CTR property test to the new income and capital rules, hold Marriage Allowance fixed in the invariance property, qualify the isolated HB fixture, and add YAML cases for each fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tax attribution docs - Add council_tax_reduction_tariff_income to the national schemes' general route: pensioners £1 a week per £500 over £10,000 (SI 2012/2885 Sch 1 para 37; WSI 2013/3029 Sch 1 para 31; SSI 2012/319 reg 27(2)); Wales and Scotland under pension age £1 per £250 over £6,000 (WSI 2013/3029 Sch 6 para 33; SSI 2012/303 reg 51; SSI 2021/249 reg 63(1)(b)); with UC the £4.35 monthly assumed yield. Nil on the Pension Credit routes and for IS/income-based JSA/income-related ESA recipients. - Value land and property in CTR capital less 10% sale expenses (capital.sale_expenses), moving capital_sources to capital.sources. - Take UC recipients' CTR capital from the UC assessment (default scheme para 37(6); WSI 2013/3029 Sch 6 para 9(6); SSI 2012/303 reg 26), except Scotland from April 2022; apply Oxford's Appendix 6 disregard. - Select the Scottish working-age scheme as ~council_tax_reduction_pensioner, so a UC award held only by people over pension age does not select it. - Correct the tax helper's documentation: foreign tax credit and finance-cost relief are source-specific (TIOPA 2010 ss.18, 36; ITTOIA 2005 ss.274A-274AA); other_tax_credits has no source, so pro rata stays a stated convention. - New YAML cases for each; update #1909's capital and tariff expectations; tariff property test; #1909's property reference includes tariff income. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rd routing, delegated UC income, finance-cost relief) Merge origin/main (1,566 commits) into legacy-capital-derived-income, resolving conflicts with main's CTR applicant model, property income after finance costs, pensioner Child Benefit exclusion and earnings disregards. Round-3 review fixes: - council_tax_reduction_universal_credit_award: an award of UC is a payment or a claim entitled before the cap and deductions (UC Regs 2013 reg 81; SSI 2021/249 reg 10A; Oxford Appendix 3), not the applicant's where the household head applies alone. CTR capital, tariff income, home-letting income and Oxford's Appendix 6 use it, and the UC capital route applies only to working-age applicants. - Passported applicants' whole capital is disregarded where the scheme says so: Wales (Sch 10 para 8), Scotland before April 2022 (SSI 2012/303 Sch 5 para 7; new dated parameter), and per local scheme (Kingston, Merton, Westminster yes; Newham no, its Sch 10 para 8 is blank). - Rent from part of the home is not counted where a working-age applicant's income is the Secretary of State's UC assessment (default scheme para 37; WSI 2013/3029 Sch 6 para 9; SSI 2012/303 reg 26; UC Regs reg 66). - CTR property capital deducts the secured debt inputs after sale expenses. - legacy_means_test_income_tax takes property_finance_cost_relief off the tax on property income first (ITTOIA 2005 ss.274A-274AA); other reductions stay pro rata. - The tax-floor fixture supplies income_tax as an isolation; gross property receipts are supplied where the tests use the property allowance. - New YAML cases for each; property-test references updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…perty is capital Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The UC-route home-letting exclusion now covers the mixed-age UC case, so a mixed-age couple on Income Support is what distinguishes the reg 3 selector from an age-only one (a surviving mutant in the round-3 check). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…l-derived-income Resolve the CTR conflicts with #2078's applicant model: - applicant_has_universal_credit (#2078's helper in _legacy.py) now reads council_tax_reduction_universal_credit_award, so the local schemes, Oxford and this PR's capital, tariff and home-letting routes share one award test, including an award the benefit cap or deductions reduce to nil; - Kingston and Westminster keep this PR's capital (council_tax_reduction_assessable_capital) with #2078's helper; - council_tax_reduction_applicable_income keeps both documentations and reference lists; - drop this PR's head-applies-alone checks on the passport, which #2078 now builds into council_tax_reduction_relevant_income_based_benefit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 45 (thresholds in Notes
Moves flagged for review
5 more flags are in the report artifact. Receipts by tax head
Spending by benefit and service
Caseloads
Government balance, each component counted once
Model totals
Household income totals
Poverty rates
People in poverty
Inequality
Mean household net income in each side's own deciles
Standard reform costings (change in gov_balance)
Household net income by decileMean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.
No change in any year: components the model counts twice; population; standard reforms: change in each reform's target. Checks failing on both base and head (1)
Counted-once checkEach of 84 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.
Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Components the model counts twice: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
…income The Welsh passported case no longer distinguishes the tariff's passport branch, because Wales now disregards the whole capital; Scotland from April 2022 counts the capital but does not assess the income (SSI 2021/249 reg 13(11)). Kills a surviving mutant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…award A nil-payment award is still an award (Appendix 3), and Appendix 6 ignores the capital taken into account for it. At 24,000 a year of income, the £36 weekly tariff on £15,000 that a payment-only test would add moves the applicant from band 1 (100%) to band 2 (75%). This kills the surviving "Oxford tests payment, not award" mutant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… awards Reg 10A (inserted 1 April 2025 by SSI 2025/24) adds an award reduced to zero by a sanction and one ended after a nil award due to earnings but treated as reclaimed. It says nothing about the benefit cap. A capped award is still an award because UC Regs 2013 reg 81 reduces the award's amount. The award variable now says what reg 10A covers and that neither of its cases is modelled. The Scottish capped-award case cites reg 81 and the monthly-yield chain: reg 57(1)(l), reg 64(1), reg 63(1)(a). There is no behaviour change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…egards) council_tax_reduction_applicable_income keeps main's applicant-and-partner benefits block and its documentation, followed by this PR's capital, tariff and home-letting text. pension_credit_income keeps #2019's formula. Its tax on earnings is the extra tax the earnings cause, including on savings and dividends (Max's d1424 ruling, option (a)), and self-employed profit carries notional tax. This PR then subtracts what reg 17(10)(a) and Sch IV para 18 leave out: the tax on uncounted income, and the Step 7 charges, that the claimant and partner would pay without earnings. The new Person variable pension_credit_uncounted_income_tax_without_earnings is income tax less legacy_means_test_income_tax, on #2019's no-earnings counterfactual. - With no capital income or charges it is nil, and #2019's results stand. - With no earnings the formula reduces to this PR's. - It does not depend on earnings, so the disregard invariance holds. Subtracting #2019's self-employment tax from legacy_means_test_income_tax directly would remove induced dividend tax twice. #2019's two branches still serve income_tax. A generic helper, person_variable_with_inputs_zeroed, computes the counted tax on a third, and the UC non-dependant check precomputes it on the parent. Main's savings-band pair now gives 12,000: the tax on the interest due without earnings (1,086) is not deducted. #2019's property reference subtracts the same quantity, from its own simulation. A new case covers wages that push dividends into the higher band. Not run locally (disk pause #11); verification follows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The wages-and-dividends case was inserted between the "Pension Credit does not deduct tax on dividends" case's savings_credit and pension_credit outputs, which moved the 668.216 expectation into the new case. The new case's own expectations all hold, matching the hand calculation: income tax 4,899.75, tax on earnings 2,368.375, uncounted tax 2,531.375 and income 19,371.625. All 62 cases in the file pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…now deducted test_income_from_capital_changes_no_legacy_means_test: with earnings, #2019's tax on earnings (Max's d1424 ruling) includes the extra tax earnings cause on savings and dividends. Scaling income from capital can therefore move Pension Credit income. Hypothesis found such a case: a couple whose wages of 6,707 sit under the personal allowance, so at three times the dividends 279.77 of dividend tax is induced and deducted. The property now asserts: - invariance wherever pension_credit_employment_income_tax does not move; - otherwise, that Pension Credit income moves by exactly minus that change and the disregard's. The awards that follow Pension Credit are compared wherever the tax on earnings is steady. The docstring labels this an intended exception. test_means_tests_see_the_loss_only_through_tax: the legacy means tests deduct legacy_means_test_income_tax, and Pension Credit's new uncounted-tax term comes off too. Both are recomputed from the tax components, so with income_tax held a loss that moves interest between bands moved them, and Housing Benefit income with them (1,047 in the failing family). Both are now held, as the tax the tests deduct. Both pass single-process, with derandomized examples. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Coordination with #2211: its main-merge reconciliation is committed locally at The shared file's ordinary assessment is extracted into Retain this PR's capital-income intent while preserving #2211's Child Benefit/SSMG exclusions and main's claimant/partner mask, scoped JSA/ESA readers, counted disability benefits and pension-deduction parameter. The older child-inclusive formula in this branch should not replace those current-main rules during composition. No changes or test claims are being made for #1995 by this job. |
Summary
PolicyEngine UK made two errors in the legacy means tests: Income Support, Housing Benefit, Pension Credit and council tax reduction.
property_income, which is rent from property other than the home, as income.The regulations treat income derived from capital as capital, not income. The capital counts instead, through the capital limits and tariff or deemed income. Tax is disregarded only on income that is taken into account. Rent for letting part of the claimant's own home is the exception: it stays income, less £20 a week per occupier.
This PR makes six changes:
property_incomefrom IS, HB (working age and pension age), Pension Credit and council tax reduction income.gov.local_authorities.council_tax_reduction.capital.sources). Land and property are valued at 90% of market value for the expenses of sale (capital.sale_expenses), then less any debt secured on that property (main's asset-specific inputs).council_tax_reduction_universal_credit_awarddefines the award: a payment, or a claim entitled before the benefit cap and deductions, which reduce an award rather than end it.council_tax_reduction_tariff_incomeadds the income the national schemes (England for pensioners, Wales, Scotland) treat capital as yielding. Before, they had none. This is the tariff part of Pensioner council tax reduction: applicable amount (post-April-2021 allowance, children, severe disability premium) and income (Child Benefit, tariff income) #1933.legacy_benefits_home_letting_income(BenUnit). It is the claimant's and partner'ssublet_incomeless the sub-tenant disregard, assuming one occupier. The disregard is £20 a week; working-age claimants had £4 before April 2008, as did everyone before Pension Credit in October 2003. It goes into IS, HB, Pension Credit and council tax reduction. In council tax reduction it is left out where a working-age applicant's income is the Secretary of State's UC assessment, and in Scotland's scheme for people under pension age from 1 April 2022.legacy_means_test_income_tax(Person), deducted in place ofincome_taxin all four tests. It is the tax on the income these tests count: the Step 4 tax on earnings, pensions and taxable benefits (ITA 2007 s.23), less its share of the Step 6 reductions. The residential finance-cost reduction comes off the tax on rent; the other reductions are shared pro rata. Step 7 charges are not deducted.~council_tax_reduction_pensioner, from Apply the benefit cap to mixed-age couples on Universal Credit, and keep them off pensioner Council Tax Reduction #1944). A UC award held only by people over pensionable age no longer selects it.Universal Credit is unchanged: its own fix is #1950. Tax credits already count investment and property income, and that is correct (see "Tax credits").
Worked case (2026), from SPC Regs Sch IV para 18: a single pensioner aged 80 with a State Pension of £10,000 and £4,000 of rent from a let flat.
Law
All texts were read today from legislation.gov.uk (
/data.xml). Verbatim copies, the fetch script and a paragraph locator are kept with the review notes.Working age. IS Regs 1987 reg 48(4) (https://www.legislation.gov.uk/uksi/1987/1967/regulation/48):
IS Sch 9 para 22(1) (https://www.legislation.gov.uk/uksi/1987/1967/schedule/9) disregards as income:
The same rule appears in:
The exceptions are income from capital that is itself disregarded. That covers the home, premises being acquired, sold or repaired, premises occupied by an old or incapacitated relative, business assets and personal-injury trusts. For some of these premises the income counts only net of mortgage repayments, council tax and water charges (para 22(2)). DMG 28196: "treat as capital any other income received from premises apart from income from the home".
Pension age. HB (SPC) Regs 2006 Sch 5 para 22 (https://www.legislation.gov.uk/uksi/2006/214/schedule/5) and SPC Regs 2002 Sch IV para 18 (https://www.legislation.gov.uk/uksi/2002/1792/schedule/IV) both read:
(In the SPC version the exception is "Part II of Schedule V".) The capital yields deemed income instead (reg 29(2); reg 15(6)). DMG 85007: where deemed income applies, "any actual income generated from the capital is fully disregarded". Its example is rent from a let share of a second property.
The Part 2 / Part II exceptions keep some actual income counted: life interests and life rents, rent where the claimant has no reversionary interest, annuities, and property held on certain trusts for the claimant (SPC Sch V paras 24-28). HB (SPC) and the pensioner CTR schemes also disregard actual Part 2 income where that capital totals £10,000 or less. The data cannot identify any of these.
Rent for part of the home.
Working age (IS Sch 9 para 19; HB Sch 5 para 22; JSA Sch 7 para 20; ESA Sch 8 para 20). The home is disregarded capital, so reg 48(4) does not convert the rent, and the disregard is:
SI 2007/2618 regs 5(12) and 11(12) substituted £20 from April 2008. Before then it was £4, plus a further amount where the payment included heating, which is not modelled.
Pension age: SPC reg 15(5)(i) and HB (SPC) reg 29(1)(v) list "any payment of rent made to a claimant who ... occupies part of the property", and Sch IV para 9 / Sch 5 para 10 disregard £20. That has applied since the 2002 Regulations as made.
Board and lodging has its own disregard: £20 plus half the excess (IS Sch 9 para 20; HB Sch 5 para 42; SPC Sch IV para 8).
Tax. IS Sch 9 para 1 and HB Sch 5 para 1:
HB (SPC) reg 33(12) and SPC reg 17(10)(a): "In the case of any income taken into account for the purpose of calculating a person's income, there shall be disregarded any amount payable by way of tax." Tax on income the tests do not take into account is therefore not deducted.
Income Tax Act 2007 s.23 builds liability in steps (https://www.legislation.gov.uk/ukpga/2007/3/section/23):
other_tax_credits.legacy_means_test_income_taxis therefore the Step 4 tax on counted income (earned_income_tax: earnings, pensions and taxable benefits), less its share of the Step 6 reductions. Step 7 charges are not tax calculated on counted income, so they are not deducted.Most reductions are not tied to any income: s.27 orders them only to give the greatest reduction in liability. Two are tied:
property_finance_cost_relief), so the helper takes it off the tax on rent first.other_tax_creditswith venture capital trust, enterprise investment, maintenance and other reductions, and the input records no source.The model shares those remaining reductions in proportion to the Step 4 tax left on each kind of income, as a stated convention. A credit for foreign tax on rent is therefore partly attributed to counted income, and the tax deducted is too low. Splitting the input by source would fix that.
If
income_taxis supplied and differs from the tax its components imply, the difference falls on the tax on counted income.Pension Credit with earnings (after #2019). #2019 measures the tax on earnings as the extra tax the earnings cause, including what they add on savings and dividends (Max's ruling on #2019, option (a)). Self-employed profit carries notional tax instead of the actual tax. This PR keeps that formula. It subtracts
pension_credit_uncounted_income_tax_without_earnings: the tax on uncounted income, and the Step 7 charges, that the claimant and partner would pay without earnings. That isincome_taxlesslegacy_means_test_income_tax, on #2019's no-earnings counterfactual.Subtracting #2019's self-employment tax from
legacy_means_test_income_taxdirectly would remove the induced dividend tax twice. Main's savings-band pair now gives 12,000 rather than 10,914: the £1,086 of tax on interest due without earnings is not deducted.The model's
income_taxitself nets Step 6 reductions against Step 7 charges (max(0, additions − subtractions)), where ITA 2007 s.29(2) allows reductions only against Step 5 tax. That inherited HMRC aggregation is fixed in #2545. The helper's floor gives the same answer with either total.Council tax reduction.
Where a working-age applicant has an award of Universal Credit, the schemes take the applicant's income from the Secretary of State's UC assessment instead:
That assessment has no head for rent from part of the home (UC Regs 2013 reg 66), and Oxford's Appendix 3 disregards it. So
council_tax_reduction_applicable_incomeleaves the home-letting income out there.Selecting the Scottish scheme follows SSI 2021/249 reg 3. It covers everyone outside the pension-age scheme: applicants under pensionable age, and those over it where the applicant or partner has a qualifying income-related benefit or an award of UC.
council_tax_reduction_pensionercounts a UC award only where a claimant or partner is under the qualifying age, as UC itself requires (UC Regs 2013 reg 3(2)(a)). So a joint award held only by people over pensionable age does not select the scheme (reg 3(2)). The model has no inputs for:That scheme deducts only tax on earnings, while the shared tax variable deducts tax on all counted income, pensions included. This PR's change for it is only that tax on rent, interest and dividends is no longer deducted. The scheme's own earnings rules are for #1966.
CTR capital and tariff income. Every scheme counts the whole of the applicant's capital unless a schedule disregards it, and above £16,000 there is no reduction (SI 2012/2885 Sch 1 para 31(1) and reg 11(2); WSI 2013/3029 reg 30). The model's CTR capital was household savings only. It now also counts land and property other than the home, valued less 10% for the expenses of sale. The citations are SI 2012/2885 Sch 1 para 32(a), the default scheme para 65, WSI 2013/3029 Sch 1 para 26 and Sch 6 para 28, SSI 2012/319 reg 42, SSI 2012/303 reg 46 and SSI 2021/249 reg 70.
Secured debt. Debt secured on other residential or non-residential property (main's inputs; nil in the survey) comes off that property after the sale expenses, floored at nil per asset (para 32(b) and equivalents; DMG 29624). Land has no debt input.
Shares stay out until pension wealth can be separated from
corporate_wealth(Pensioners without Pension Credit are tested on household savings only for the council tax reduction capital limit #1936).Universal Credit. For a working-age applicant with an award of UC (
council_tax_reduction_universal_credit_award), capital is the Secretary of State's UC assessment: default scheme para 37(6); WSI 2013/3029 Sch 6 para 9(6); SSI 2012/303 reg 26. The award includes one the benefit cap or deductions reduce to nil, since the cap reduces the award rather than ending it (UC Regs reg 81). From 1 April 2025, SSI 2021/249 reg 10A adds an award reduced to zero by a sanction and one treated as reclaimed after a nil award due to earnings. Neither is modelled. The exception is Scotland from 1 April 2022, where SSI 2021/249 regs 66-70 have the authority calculate it. A UC input for a couple who are both over pensionable age does not bring in these rules.The passport. The whole capital of an applicant on IS, income-based JSA or income-related ESA is disregarded:
The national schemes treat capital as yielding a weekly tariff income, counting capital up to the limit:
The tariff is nil:
English schemes for people under pension age are local. Kingston, Westminster and Oxford set their own tariff; Merton and Newham have none in the model (inherited).
The five English local schemes the model runs (Merton, Newham, Westminster, Kingston upon Thames and Oxford) were checked against their published 2025-26 and 2026-27 scheme texts. Each treats income derived from capital as capital for applicants not on UC and disregards £20 of sub-tenant rent. Westminster's full scheme text was not found, so for Westminster this is inferred from its stated mirroring of the default scheme. Oxford's formula uses the generic CTR income for UC recipients, which is inherited; the home-letting income is now left out of it on the UC route.
Northern Ireland has the same words: HB (NI) Regs 2006 reg 43(4) and Sch 6 paras 18 and 23; SPC Regs (NI) 2003 Sch 4 paras 9 and 18.
Tax credits
Tax Credits (Definition and Calculation of Income) Regs 2002 reg 3, Step One, adds "the investment income (as defined in regulation 10)" and "the property income (as defined in regulation 11)":
So
tax_credits_applicable_incomeis right to count all three, and it is unchanged. Two small gaps remain, both in years before tax credits ended in April 2025:savings_interest_incomeincludes;What still counts
legacy_benefits_home_letting_incomeself_employment_incomeData caveat and release gate. Owner-occupiers' rent from letting part of their home (FRS SUBRENT) sits in uk-data's
property_income, notsublet_income. It stays there until PolicyEngine/policyengine-uk-data#508 moves it. Until then this PR drops it from these means tests instead of counting it less £20.This PR prepares the channel; on its own it does not correct production assessments for that rent. The gate, recorded on #508:
property_incomeequals the newsublet_income);In the raw FRS 2024-25, 33 owner households report SUBRENT, a weighted £0.41bn a year. Fewer than ten of them are in households reporting Pension Credit, Income Support, Housing Benefit, JSA, ESA or council tax reduction, using uk-data's own benefit codes.
Invariants (stated and tested)
policyengine_uk/tests/test_legacy_means_test_income_from_capital_properties.py(Hypothesis) checks these over populations of up to four families. The families are single, couple and lone-parent, pension and working age, in five regions including Scotland, Wales and Northern Ireland, in 2025 and 2026:pension_credit_employment_income_taxdoes not move.pension_credit_reported_capital. It leaves the CTR assessment when the savings credit ends, because the general route uses the household capital. That is a data-support limit, not a rule: reusing a former Pension Credit determination would be wrong.legacy_means_test_income_tax≤ min(income_tax,earned_income_tax), with equality toincome_taxwhen there is no savings, dividend or property income and no Step 7 charge.council_tax_reduction_tariff_income≤ £2,088, the yield at the £16,000 limit (40 steps of £250 at £4.35 a month). It is nil in Northern Ireland and for English people under pension age, whose local schemes set their own. It never falls when savings rise while the family stays on the same route: pensioner, UC award, passport, guarantee credit, savings credit only.Two of main's property tests now hold or subtract the taxes these tests deduct:
test_means_tests_see_the_loss_only_through_tax(trading losses) holdslegacy_means_test_income_taxandpension_credit_uncounted_income_tax_without_earningsalongsideincome_tax. Both are recomputed from the tax components, so a loss that moves interest between bands moved Housing Benefit income withincome_taxheld: by 1,047 in the failing family.#1909's CTR property tests now use the new income and capital definitions as their reference, recomputed from the regulations rather than read from the variables under test:
The runs below add a differential check. In 2026 the rent step lowers each means-test income by exactly the unit's rent less its tax, wherever neither run is at a floor, to float32 rounding. The rent and tax are summed over the members each test counts. UC and tax credits are identical in every year.
Tests
New
gov/dwp/legacy_means_tests/income_from_capital.yaml: 58 cases computed by hand, with the arithmetic in each case. Where a case supplies an amount (an applicable amount, an award, a tax component) to isolate one rule, its comment says so: that figure is a model-contract expectation, not a complete statutory award.income_taxsupplied as an isolation (statutory liability £500 under ITA s.29(2)).property_rental_income). Main now treats a reported profit above £1,000 as already net of the allowance.Existing cases that change:
pension_credit_earnings_disregard.yaml. A claimant aged 70 in 2024-25 has State Pension 12,000, interest 12,000 and attendance allowance. Both cases move from 10,914 to 12,000, and they still agree with each other.pension_credit_uncounted_income_tax_without_earnings= 1,086. The tax deducted is 1,388 − 1,086 = 302, and income is 12,000 + 1,040 − 302 − 738 = 12,000.test_pension_credit_earnings_disregard_properties.py(expected PC income) now subtracts the same term,income_taxlesslegacy_means_test_income_tax, from its own no-earnings simulation (not the model's branch). It also asserts that the model'spension_credit_uncounted_income_tax_without_earningsequals that reference, as a differential check of the branch. Its draws include interest of 0 or 3,000, so both the nil and non-nil cases are exercised.At 1b8f2de, after merging main (Count IIDB, SDA and incapacity benefit in Council Tax Reduction income #2512, Apply the Pension Credit earnings disregards (SPC Regs 2002 Sch VI) #2019), run single-process under the d1811 host hold:
The full YAML tree, the
-n 4property run and impact v7 wait for the hold to release. Everything below is at b379e00 or aaf44f1 unless stated.The Hypothesis properties above, Disregard guarantee credit recipients' income and capital in pensioner council tax reduction #1909's updated CTR properties, and Means-test the Council Tax Reduction applicant and partner, not the benefit unit's claimant #2078's applicant and legacy-award-reader properties: 33 tests, all passing at b379e00. The full YAML tree passes too: 3,946 cases. 91bca5b adds one case to
income_from_capital.yaml, and aaf44f1 corrects a citation. All 61 cases in that file pass at aaf44f1.Mutation check (round 3), at b379e00: 26 mutations of the new code, including each round-3 fix. 25 were killed, each failing 1 to 17 cases. The survivor treated Oxford's Universal Credit test as a payment rather than an award. It is killed by a case added at 91bca5b: Oxford adds no tariff income for an award capped to nil.
Mutation check of the Apply the Pension Credit earnings disregards (SPC Regs 2002 Sch VI) #2019 merge term, at 1b8f2de. Three mutations, all killed: not subtracting it (7 cases fail); counted tax from the actual world rather than without earnings (2); counted tax on the
income_taxbasis (2). Themax_(0, …)floor is an equivalent mutant: counted tax never exceedsincome_tax.Enhanced FRS impact
Every figure is from real
Microsimulationruns on private copies of the certified dataset, from clean trees. Nothing is scaled, interpolated or allocated:enhanced_frs_2024_25.h5from policyengine-uk-data 1.58.1 (sha256056e80fd8e91…, the filetests/certified_dataset.yamlpins);The figures are identical to those from the previous merge base (61b5854): the #2078 merge did not move them. Impact at 9440170, against main with #2512 and #2019, will be re-run when the disk pause lifts.
The other benefits:
2026, step by step. Real runs, each adding one part of the change to the last (scratch commits, not for merge). Interest and dividends were run as separate steps, but they are shown together: the interest step alone rests on fewer than ten records.
Why step 4 is so large. On main, Pension Credit income counts neither dividends nor interest (its list in
guarantee_credit/income.yaml), but it deducts the person's whole income tax, including the tax on them. A pensioner with large dividends therefore has their Pension Credit income cut by tax on income that was never counted. Among the 66 FRS and 2 SPI records that lose:Their weighted-mean dividends are £44,078 (median £2,149) against £14,443 of Pension Credit capital. Those dividends come from policyengine-uk-data's imputation: 1.58.1's
impute_income()replaces every FRS respondent'sdividend_incomewith an SPI-trained QRF draw (impute_over_incomes(dataset, model, ["dividend_income"])). So the size of step 4 rests on imputed dividends that the recorded capital does not support. Its direction follows from the law.Why step 1 changes nothing here. In 2026, 292 benefit-unit records receiving CTR have land or other property:
council_tax_benefitkeeps their reported awards.Step 2 is small for the same reason: tariff income changes awards only where a national scheme is simulated.
Checks between real runs, all passing:
Most of the gross flow comes from the data, not the rule
Let-property capital is missing. In the dataset:
In law those units have the let property as capital, which yields deemed income or ends entitlement. Treating rent as capital is right, but here it leaves no capital behind. So step 3's gain overstates what the rule does to a household whose capital is recorded.
Dividends are imputed (step 4 above).
Two sensitivities (real runs of main and this branch, 2026):
corporate_wealthand let-property value are raised where needed to at least interest / 4%, dividends / 4% and rent / 7%, on a copy of the certified file. These are assumed yields, not observed capital. With the capital recorded, Pension Credit gainers fall from 7.2k to 3.4k units, and CTR falls (−£8.0m): main's CTR capital is savings only, so the raised property values reach only this branch's capital and tariff income.For any one household, the direction of the change follows from the law. The net total depends on how the data record capital and dividends.
Not counted here, though the law counts it:
property_incomeuntil uk-data#508;Overlaps
boarder-lodger-rent). It extendslegacy_benefits_home_letting_incomewith lodger and boarder receipts, and counts rent-a-room tax as tax on counted income inlegacy_means_test_income_tax.legacy_benefits_home_letting_incomecounts only the claimant's and partner's rent. Give the legacy severe disability premium its statutory conditions (stacked on #1896) #1946 and Use one carer attribution for the legacy severe disability premium and the Pension Credit addition (stacked on #1946 and #1951) #1977 stack on Replace generic child and adult flags with each programme's legal definitions #1896 and change premiums, not these lines.employment_incomeandself_employment_income. Count statutory sick, maternity and paternity pay as Pension Credit earnings #2509 widens the employed-earnings set toemployed_earnings_sources(...). Whichever lands second makes this branch zero the same set, with the same any-earnings shortcut, and updatestest_pension_credit_tax_branch_reuse.py's expected branch keys.applicant_has_universal_credithelper now reads this PR'scouncil_tax_reduction_universal_credit_award, so the local schemes, Oxford and this PR's routes share one award test. Its passport already leaves out a household head who applies alone.council_tax_reduction_assessable_capitalandcouncil_tax_reduction_universal_credit_award, so that the property, the secured debt and the passported disregards carry over.Related gaps (not changed here)
income_taxnets Step 6 reductions against Step 7 charges, contrary to ITA 2007 s.29(2). Limit Income Tax reductions to the Step 5 tax so they don't offset Step 7 charges #2545 (issue Income tax reductions offset the Step 7 charges (HICBC, annual allowance charge) #2544) fixes it. This PR's floor fixture suppliesincome_tax, so it holds either way.council_tax_reduction_pensionertreats a family entitled to UC as having an award whether or not it claims (main's approximation). The UC routes here require a claim.sublet_income.axiom: TheAxiomFoundation/rulespec-uk#483 queued. It is a dispatch-ready
pe-parityissue covering:Steps 1-4 can be dispatched through the signed encoder now, on Max's approval. The rest wait on a corpus ingest.
🤖 Generated with Claude Code
Reproducer:
policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/income_from_capital.yaml::Pension Credit ignores rent from a let property,policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/income_from_capital.yaml::Welsh working-age tariff income on a let property below the capital limit,policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/income_from_capital.yaml::Wales uses the Universal Credit capital assessment when the benefit cap reduces the award to nil,policyengine_uk/tests/test_legacy_means_test_income_from_capital_properties.py::test_income_from_capital_changes_no_legacy_means_test