Skip to content

Apply Housing Benefit and national Council Tax Reduction non-dependant deductions as legislated - #2007

Draft
MaxGhenis wants to merge 36 commits into
mainfrom
hb-ctr-non-dep-exemptions
Draft

MaxGhenis wants to merge 36 commits into
mainfrom
hb-ctr-non-dep-exemptions

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2004. Also fixes the non-dependant half of #1934; its pensioner-gate half stays open.

Summary

Housing Benefit and the national Council Tax Reduction schemes now make non-dependant deductions the way the regulations set them. The law was read on legislation.gov.uk at the 7 April 2025 point in time. For the CTR scales, each year's version was also read.

Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55 is the same for these rules):

Rule Before Now
Banding, reg 74(2) right=True, so £192.00 a week fell in the band below, and £0 paid nothing Bands include their lower edge ("not less than"). An in-work non-dependant with no income pays the reg 74(1)(b) amount
Remunerative work, reg 74(1)-(2), reg 6(1) and (6) Everyone banded on their own income Only a non-dependant working 16+ hours, and not on IS, JSA(IB) or ESA(IR), is banded. Anyone else pays the (1)(b) amount (£20.40 a week in 2026-27)
Couples, reg 74(3)-(4) Each member charged on their own income One deduction for the couple, the higher, banded on the couple's joint income. Any other adult in the family (for example a young person on approved training) is a separate non-dependant on their own income
Non-dependant exemptions, reg 74(7), (8), (10) None Full-time students; State Pension Credit recipients; under-25s on Income Support, income-based JSA, or Universal Credit calculated on no earned income
Claimant exemption, reg 74(6) None No deduction for anyone if the claimant or partner is blind or receives AA, the DLA care component, the PIP daily living component or AFIP

Council Tax Reduction covers three schemes:

  • England pensioner: SI 2012/2885 Sch 1 para 8.
  • Wales: WSI 2013/3029 Sch 1 para 3 and Sch 6 para 5.
  • Scotland: SSI 2012/319 reg 48; SSI 2012/303 reg 67, then SSI 2021/249 reg 90.

The changes:

  • Scales. These used the Housing Benefit scale. Each scheme now has its own weekly scale for 2013-14 to 2026-27, with the amending instrument cited for every year.
    • 2026-27:
      • England: £5.20 to £15.95, on £279/£485/£605.
      • Wales: £6.70 to £20.05, on the same bands.
      • Scotland: £5.55 to £16.55, on £286/£497/£614.
      • The HB scale was £20.40 to £131.45.
    • Pensioner and working-age scales are identical in Wales and in Scotland in every year.
    • From 2027-28, the scales are uprated by gov.benefit_uprating_cpi, as Set DWP benefit rates to the announced amounts, not CPI projections #1925 did for the HB scale.
  • Banding and couples. As for HB.
    • Wales's working-age scheme also deducts for both members of a couple with a Universal Credit award (Sch 6 para 5(3), "other than where there is an award of universal credit").
    • I read that award as the non-dependant couple's.
    • Sch 1 para 3(3), for pension-age applicants, has no such words. So only a working-age applicant's claim takes both.
  • Exemptions, at any age (para 8(7)-(8) and equivalents):
    • Full-time students.
    • Non-dependants on IS, income-based JSA, income-related ESA or State Pension Credit.
      • Scotland's working-age scheme, from 1 April 2022, also exempts a non-dependant whose partner is on IS, income-based JSA or income-related ESA and who is not on Universal Credit.
      • The source: SSI 2021/249 reg 90(8)(a) exempts a "qualifying income-related benefit claimant". Reg 4(1) defines that as one "who is, or who has a partner who is," on one of those benefits.
      • The definition opens with "an applicant". Read that way, the limb could never apply to a non-dependant, so it is read for the non-dependant.
      • Before April 2022 (SSI 2012/303 reg 67(8)(a)), and in Scotland's pension-age scheme (SSI 2012/319 reg 48(8)(a)), only the person on the benefit is exempt.
    • An adult for whom someone else is entitled to child benefit (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents).
      • Entitlement needs a claim (SSAA 1992 s.1(1)), so the family must claim child benefit (would_claim_child_benefit).
      • An election not to be paid keeps entitlement (s.13A), so the opt-out flag is not read.
    • Universal Credit calculated on no earned income, from the year each scheme added it:
      • England, 2015-16 (SI 2014/3312);
      • Wales, 2015-16 (WSI 2015/44);
      • Scotland, 2016-17 (SSI 2016/81).
  • Applicant exemption (para 8(6) and equivalents). The national schemes now read the per-family council_tax_reduction_applicant_has_non_dep_exemption (Assess each Council Tax Reduction claim under its own family's scheme and exemption #2015). Before, only the English local schemes did.
  • English working-age local schemes (Merton, Kingston, Newham, Westminster, Oxford) keep their own variables.
    • They share council_tax_reduction_individual_non_dep_deduction_eligible.
    • So the national exemptions are applied inside the national deduction, not there.
    • A branch-against-main differential (5 councils × 3 household shapes) left all 45 local-scheme value arrays unchanged.

New variables:

  • housing_benefit_non_dep_deduction_exempt (Person)
  • housing_benefit_non_dep_deductions_claimant_exempt (BenUnit)
  • council_tax_reduction_non_dep_deduction_exempt (Person)

New parameters:

  • HB remunerative_work_hours (16)
  • HB income_related_benefit_age_limit (25)
  • per CTR scheme, non_dep_deduction/{amount, remunerative_work_hours, exempt_universal_credit_without_earned_income}
  • Scotland working_age_exempt_partner_of_income_related_benefit_claimant (from 2022-04-01)

HB age_threshold (18) now starts in 2006, when the 2006 Regulations were made, not 2019.

How this composes with main

Since this PR opened, main has changed who is charged and who claims (#2006, #2009, #2015, #2027, #2078, #2089). This PR keeps those structures and supplies the amounts and exemptions.

Inputs and choices

  • Full-time student: current_education != NOT_IN_EDUCATION or in_HE, the helper the local schemes already use.

    • In the Enhanced FRS, current_education comes from FTED/EDUCFT ("in full-time education"), so it is the full-time flag.
    • Note the age-based default: with no input, an 18- or 19-year-old is in tertiary education, and so exempt.
  • Claimant or partner: is_claimant_or_partner (Replace generic child and adult flags with each programme's legal definitions #1896).

    • This is the SSCBA s.137 couple a benefit unit is formed around: the claimant and at most one partner, supplied by the dataset or inferred from the benefit unit.
    • That matches the HB Regs 2006 (regs 2(1), 19) and the CTR regulations (reg 2(1)), where a family's other members are the children and young persons.
    • It is used for:
      • the claimant exemption;
      • joint income, which counts only the couple;
      • the one-deduction-per-couple rule, which covers only the couple (any other member is deducted separately);
      • benefit-receipt exemptions, which count only for the claimant or partner of the award;
      • the cap basket's personal benefits.
  • Gross income:

    • A person's own income. Their taxable income (total_income, floored at zero), plus:
      • statutory sick, maternity and paternity pay, which are earnings (HB reg 35(1)(i)) that the model keeps outside total_income;
      • Maternity Allowance.
    • A claimant or partner of the non-dependant's family is banded on the couple's own income plus the family's UC, CTC, WTC, child benefit, Income Support, income-based JSA, income-related ESA and Pension Credit.
    • Anyone else in the family is banded on their own income.
    • UC is taken after the benefit cap.
      • The cap (uc_benefit_cap) is applied to the capped benefits other than Housing Benefit, which a non-dependant family does not receive.
      • A person's own contributory JSA and ESA, incapacity benefit, SDA and Maternity Allowance count only for the claimant or partner. UC reg 79(1) caps the benefits "to which a single person or couple is entitled".
      • The award is reduced by the excess less the childcare costs element, or not at all where that element is greater (UC reg 81(1)-(2)).
    • Disregarded or not added:
      • the disability benefits disregarded by reg 74(9) are untaxed and not added;
      • other untaxed income the regulations count, such as maintenance and student support, is not added;
      • the income-related awards are read from the benefit unit's total.
  • On a benefit: the IS, JSA(IB), ESA(IR) and SPC exemptions, and HB reg 6(6), apply only to the person the award is payable to (HB reg 2(3)-(3A), "payable to him").

    • That is the member who reports the award, or the benefit unit's head where none does.
    • UC counts for both joint claimants (reg 2(3B), entitlement).
  • HB reg 6(6): the person an IS, JSA(IB) or ESA(IR) award is payable to is treated as not in remunerative work, so pays the lowest amount whatever their hours.

  • UC entitlement: universal_credit_pre_benefit_cap > 0. Reading universal_credit would be circular (see "Benefit cap" above).

  • "Earned income" in the UC limb (UC regs 52-62):

    • Employment income plus statutory sick, maternity and paternity pay, less relievable pension contributions (reg 55(4)-(5)). Statutory adoption, shared parental, parental bereavement and neonatal care pay have no input.
    • Self-employed earnings, with a loss counting as nil (reg 57(2), steps 3-4). Any relievable pension contributions not already deducted from employed earnings come off. The minimum income floor applies where the UC model applies it (reg 62). It doesn't apply in the start-up period (reg 62(5)).
    • Other paid work.

    Testing the person's own earnings, rather than a joint award's, is an interpretation:

Not modelled

  • Deferral and protection.
    • Pension-age HB defers an increase in a deduction for 26 weeks (SI 2006/214 reg 59(10)-(13)).
    • The CTR applicant exemption is protected while AA, DLA or PIP is suspended in hospital (para 8(6)).
  • HB:
    • a working full-time student's summer vacation (reg 74(7)(d));
    • under-25s on assessment-phase income-related ESA (there is no ESA group input).
  • Wales: ESA(IR) recipients in the work-related activity group are not exempt, but the model treats them as exempt.
  • CTR: persons disregarded for council tax discounts (LGFA 1992 Sch 1), other than students and the para 3 adults (someone else is entitled to child benefit for them).
    • is_apprentice has no £195 earnings cap, so it isn't used.
  • All schemes: youth training allowances, a normal home elsewhere, long hospital stays, prison and armed forces operations.
  • Gross income:
    • maintenance and student support are not added, though inputs exist (a follow-up);
    • other untaxed income is not added, apart from statutory pay, Maternity Allowance and the family benefits listed above;
    • statutory adoption, shared parental, parental bereavement and neonatal care pay have no inputs;
    • a self-employed non-dependant's gross income uses profit, with any loss floored at zero, because turnover has no input. DWP HB guidance A5.551 counts total income with no deduction for business expenses.
  • Benefit cap basket. The after-cap UC used here leaves out bereavement allowance and the widow's benefits, which have no inputs.
    • Main's benefit_cap_welfare_benefits, the total UC and HB actually cap, also leaves out Maternity Allowance, as its documentation says.
    • This PR's helper counts Maternity Allowance, a welfare benefit under Welfare Reform Act 2012 s.96(10)(i).
    • Aligning main's cap is a follow-up.
  • Joint-claim JSA couples. Both members are on income-based JSA (HB reg 2(3)(c)). The model has no joint-claim input, so only the payee is treated as on it.
  • Scottish disability assistance (ADP, PADP, CDP, Scottish adult DLA) for the claimant exemption. It has no separate input.
  • Before 2015, the model reads parameters at 1 January, not in fiscal years. That is unchanged.

Review

Each round was an independent Subfleet review with a workspace that could run tests. In rounds 1-5, every fix came with a test that fails on the reviewed head. The reviews and responses are in the PR thread.

  • Round 1 (59c7082) asked for changes. It found five P1s:

    1. is_adult used as claimant or partner;
    2. a dependent child's income counted as the couple's;
    3. HB reg 6(6);
    4. self-employed losses cancelling wages in the UC test;
    5. UC, tax credits and child benefit missing from gross income.

    It also found two omissions to disclose.

  • Round 2 (6257277) asked for changes:

  • Round 3 (452d6bb) asked for changes:

    • statutory pay, Maternity Allowance and the family's income-related benefits in gross income;
    • statutory paternity pay as earned income;
    • pension contributions off self-employed earnings;
    • Scotland's working-age partner rule from April 2022;
    • the cap's childcare protection;
    • the child benefit claim for LGFA para 3.
  • Round 4 (7a5cbe2, GPT-6.1 Sol) asked for changes:

    • Maternity Allowance in the cap basket;
    • a self-employment or property loss no longer cancelling other gross income.
  • Round 5, a delta review, approved d872f57. That was the last head before main was merged in.

  • Round 6 reviewed the composition with main at 0b6c3db.

    • It found no P1. It confirmed:
      • every composition point, from hand-worked probes in England, Wales and Scotland;
      • no dependency cycle, with both alternatives that would cycle tested;
      • no change to any English local scheme;
      • a 96/96 randomised differential for jointly liable households (45 with mixed schemes);
      • that main's changed tests are justified (listed under Tests);
      • every earlier round's counterexample.
    • Its findings, and how each was addressed:
      • P2: main's sharers property test assumed one deduction per person and no claimant exemption. Fixed in 8e60349 (see Tests).
      • P2: this body described the head before the composition. It is rewritten.
      • P3: the mixed-scheme recompute had no test. council_tax_reduction_non_dep_deductions_mixed_schemes.yaml adds the review's England, Wales and Scotland cases.
      • P3: the cap basket counted every member's own benefits, not just the couple's. 2574473 masks them with is_claimant_or_partner. A YAML case gives a 17-year-old in the family her own Maternity Allowance; it fails on 8e60349 (HB £5,470.40, CTR £551.20 instead of £6,232.20 and £691.60).
      • P3: 2025-26 mid-band HB coverage was thin. There are now second- and middle-band cases.
    • CI's derandomized Hypothesis run of the rewritten sharers test then found one more case, on 89ba1a1. At nil rent, a sharer was both a non-dependant and a bearer of a share, so the household's HB deductions (£510.90) fell short of the pool borne in full (£1,021.80). 4a0935b keeps any family that bears a share out of the pool (reg 3(2)(d)). The replayed CI example and a new YAML case both fail on 89ba1a1 and pass now.
  • Round 7, a delta review of this head, gates the merge.

Invariants

These hold for every input:

  1. An exempt non-dependant's deduction is zero, for HB and for CTR.
  2. An eligible, non-exempt non-dependant pays between the scale's lowest and highest amounts. The national CTR deduction is zero in English working-age households.
  3. A non-dependant working under 16 hours pays the lowest amount, whatever their income.
  4. A claimant or applicant exemption zeroes the family's deductions.
  5. A family's deductions are computed in three steps:
    • sum, over the other families in the household, each family's higher member's amount (both members' for a Welsh working-age UC couple);
    • recompute that sum independently;
    • multiply it by the family's share of the rent (HB) or of the council tax liability (CTR).
  6. Monotonicity: raising a non-dependant's income never lowers any deduction.
  7. Exhaustively, in every year 2015-2030 (2019-2030 for HB), uprated years included: an income at a band's lower edge pays that band's amount, and the next lower representable income pays the band below's.
  8. Differential: every CTR parameter value equals the enacted sums in tests/fixtures/council_tax_reduction_non_dependant_deductions.yaml.
  9. Differential: the exemption flags equal a reading of the provisions computed straight from the inputs.
  10. HB deductions over the families liable for a household's rent equal the pooled amount (one per couple, the higher, with sharers never in the pool) times the share borne by families without an exempt claimant. They never exceed the sum of individual deductions. This is main's sharers property test, restated for reg 74(3) and (6).

Tests

  • YAML (all with hand-worked expectations from the law):
  • Main's tests that change. Each change follows from the law; none hides a regression.
    • household_benefits_individual_non_dep_deduction.yaml.
      • Main's 2025-26 cases had no hours input. Under reg 74(2) they now pay the lowest amount, so they are rewritten as cases in remunerative work.
      • Main's "Other investment income does not move a worker's band" pinned a stopgap until this PR. A worker is banded on all gross income: £739.02 a week, the top band, £126.65 × 52.
    • housing_benefit_non_dep_deductions.yaml.
      • Main's Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006 cases are unchanged.
      • The investment-income non-worker now pays reg 74(1)(b)'s £19.65 × 52 = £1,021.80. Main's 0 came from right=True, and its comment deferred the reg 74(1)(b) amount to this PR.
      • Three cases are added: one deduction per couple, the claimant exemption, and a sharer of a nil rent who is not a non-dependant.
    • housing_benefit_individual_non_dep_deduction_eligible.yaml. The 18-year-old "Eligible" case now sets current_education and would_claim_uc: false. Otherwise the age default makes them a student, and an income-free 18-year-old is entitled to UC without earned income. Both would exempt them.
    • council_tax_reduction_individual_non_dep_deduction.yaml. This is rewritten on England's 2025-26 pensioner scale (SI 2025/39).
      • A non-worker with £556 a week of investment income pays £5.00 × 52 = £260.
      • A worker's band counts it: £15.35 × 52 = £798.20.
      • Main's cases used the HB scale, and its comment deferred the remunerative-work test to this PR.
    • council_tax_reduction_pension_credit.yaml. The guarantee-credit case's son has no hours, so he pays England's £5.20 a week (it was the HB scale's £20.40). CTR is £1,729.60.
    • claimant_family_scheme.yaml. The 40-year-old adult child has no work, no award and no education, so pays para 8(1)(b)'s £5.20 × 52 = £270.40. CTR is £1,800 − £270.40 = £1,529.60. Main's £1,800 came from right=True giving zero income nothing.
    • test_rent_of_sharers_boarders_and_lodgers_properties.py (main's Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006 test). Its non-dependant invariant assumed the household's HB deductions equal the sum of every non-dependant's individual amount. With reg 74(3) and (6) they are invariant 10 above, so the test now asserts that. A sharer's family is never in the HB pool, even at nil rent.
  • test_non_dependant_deduction_properties.py:
    • Hypothesis populations for invariants 1-6 and 9, with explicit examples for the rare Welsh-couple and under-25 cases;
    • the exhaustive edge check (7);
    • the fixture differential (8).
  • Scale verification. An independent check (Subfleet, GPT-6.1 Sol) compared all 294 CTR scale values with the amending instruments as made. It returned ALL MATCH across 42 scheme-years.
    • It also confirmed two facts: every instrument applies from 1 April, and Wales's and Scotland's pensioner and working-age scales are identical.
    • Three drafting points don't change any value:
      • the Welsh-language text of WSI 2016/50 has £195 where the English has £194 (the parameter uses the English text and says so);
      • SI 2012/3085 left "x 1/7" off two 2013-14 English band amounts;
      • SSI 2021/249 saves the 2021-22 working-age scale for 1-3 April 2022.
  • Mutation testing (on 7a5cbe2, mutate3.py). There were 31 hand-made mutations, each reverting one rule. The YAML suites kill 30, and a round-4 case kills the 31st. The property tests kill 21; YAML cases kill the ten survivors.
  • Runs at this head (4a0935b).
    • CI, merged with main 07985ed. All checks pass:

      • YAML: 4,038 passed.
      • Python, four shards: 7,658 passed, 61 skipped, 1 xfailed. Shard 1 timed out at the 60-minute job limit on the first attempt, before any test failed, and passed on a re-run.
    • The host's disk was paused for local test suites at this head. Every new YAML case passes in CI's YAML job. Some were also run by direct calculation:

      • against both the previous and the new code: the Maternity Allowance case, the nil-rent sharer case, and the replayed CI example;
      • against the new code: the Scottish mixed-scheme cases and the investment-income case.

      Charge non-dependant deductions for non-dependants within the claimant's benefit unit #2017's branch, which merges this head, also ran the targeted YAML suites (1,645 passed) and the three property suites (15 passed).

    • Round 6 ran the targeted suites at 0b6c3db: 1,108 + 150 YAML passed, and the property tests passed.

    • ruff format and ruff check on the changed Python files: clean.

Impact (Enhanced FRS 2024-25, certified uk-data 1.58.1)

CI's aggregate impact job for 4a0935b compared main (07985ed) with this PR merged into it. Both sides ran on the certified dataset: policyengine-uk-data 1.58.1, sha256 056e80fd8e91. Each fiscal year is a full microsimulation run on each side, and nothing is scaled. The job passed with no check broken. The model changes since round 6 (the cap basket and the joint-occupier mask) moved no figure here: spending, caseloads and incomes equal the CI run for 0b6c3db (base 76cfc9e) to the rounding shown.

Change 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Housing Benefit (£m) +17.3 +18.0 +18.5 +19.0 +19.5 +20.0 +20.4
Council Tax Reduction (£m) +6.5 +6.9 +7.3 +7.8 +9.2 +9.7 +10.4
Household net income (£m) +23.8 +24.9 +25.8 +26.8 +28.7 +29.7 +30.8
Housing Benefit caseload +239 +240 +240 +241 +242 +244 +245
CTR caseload (k) +6.9 +7.0 +7.2 +7.3 +6.9 +7.0 +7.3
Absolute poverty, BHC (people) 0 +1.3k +1.3k +234 +235 +236 +237
Absolute poverty, AHC (people) -2.5k -2.5k -2.5k -2.5k -2.5k -2.5k -2.6k
Relative poverty, BHC (people) -1.1k +191 +28.3k +192 +1.9k +194 +1.3k
Relative poverty, AHC (people) -2.3k -2.5k +245 -2.5k -2.2k -2.5k -2.6k

The flagged move: +25.3k pensioners in relative poverty before housing costs in 2027-28. This comes from the poverty line moving, not from anyone becoming poorer.

  • The line. A separate run on the same certified data (relative_line.py; main 76cfc9e against 0b6c3db, whose relative BHC figures equal this head's) compared each person's equivalised HBAI income with the line.
    • The 2027-28 median rises by £13.62, from £41,297.37 to £41,310.99.
    • So the line (60% of the median) rises by £8.18 a year, from £24,778.42 to £24,786.60.
  • Who crosses it.
    • 29.4k people fall below the line and 1.1k rise above it.
    • Of the 29.4k, 28.1k have the same income as on main, to the penny. That includes 24.9k of the 25.5k pensioners among them.
    • Only 1.3k fall below because their own income fell.
  • The other years. The median doesn't move in 2026-27 or 2030-31. There, 1.3k people enter relative BHC poverty, all on lower incomes, and 1.1k leave it.
  • After housing costs. The relative AHC figures move with the base for the same reason. Against main 76cfc9e, the 2030-31 AHC median rose £2.45 and 19.4k people entered relative AHC poverty, all with unchanged incomes; CI showed +16.9k that year. Against 07985ed, 43 commits later, that year shows −2.5k.

The rule-by-rule decomposition in earlier rounds was for d872f57, on an older main and dataset, so it isn't repeated here. For that head, 2026-27:

  • inclusive bands alone: −£7.4m;
  • remunerative work and gross income: +£0.4m;
  • the couple rule: £0.0m;
  • the non-dependant exemptions: +£4.2m;
  • the claimant exemption: +£10.2m.

Merge order and overlaps

Axiom

axiom: uk/regulation/uksi/2006/213/74, uksi/2006/214/55, uksi/2012/2885/schedule/1/paragraph/8, wsi/2013/3029/schedule/1/paragraph/3 and schedule/6/paragraph/5, ssi/2012/319/48, ssi/2021/249/90 queued TheAxiomFoundation/rulespec-uk#407

  • HB. rulespec-uk's HB pipeline (uk/policies/housing_benefit_composed_entitlement_pipeline.yaml) has the reg 74 bands for 2026-27 only, with inclusive >= edges. But it:

    • bands every non-dependant;
    • multiplies one amount by a non-dependant count;
    • has no couple rule or exemptions.

    The 2025-26 amounts are in rulespec-uk#382.

  • CTR. Every CTR spine takes non-dependant deductions as a supplied input.

  • The issue. All seven provisions are in axiom-corpus.

    • rulespec-uk#407 holds the encode brief: module paths, verbatim law, required outputs, and companion tests from the same 2026-27 law as this PR's YAML tests. It carries the pe-parity label.
    • An addendum there records this head's composition: apportionment, the per-applicant scheme and the couple-only cap basket.

Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_non_dep_deduction_chain.yaml::A zero-income full-time student does not reduce the claimant's HB, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_non_dep_deduction_chain.yaml::A zero-income non-student non-dependant pays the lowest deduction, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/household_benefits_individual_non_dep_deduction.yaml::Exactly 192 a week is in the band starting at 192, policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_non_dep_deductions.yaml::A Pension Credit pensioner living with a working son (issue 1934)

🤖 Generated with Claude Code

@MaxGhenis

MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator Author

Composition note: #2015 (stacked on #2009 → #2006) deletes the two household flags this PR reads. council_tax_reduction_household_has_pensioner becomes council_tax_reduction_pensioner and council_tax_reduction_household_has_non_dep_exemption becomes council_tax_reduction_applicant_has_non_dep_exemption; both are BenUnit, so each jointly liable claimant uses its own family. #2015 does not add the national applicant exemption; that stays here. Whichever lands second should do three things:

  1. Read the applicant's own exemption flag for applicant_exempt.
  2. Do not substitute the family flag into each_member_deducted: that is evaluated on the non-dependant family, and Sch 6 para 5(3) turns on the applicant's scheme. Instead build two household pools of non-dependant families' deductions, the higher member's and the sum for a non-dependant couple on UC. Each claimant takes the sum pool when it is in Wales and its own council_tax_reduction_pensioner is false, and the higher-member pool otherwise.
  3. Pick England's pensioner scale in the person-level variables by country only. Each claim's own scheme already decides whether its award uses it. The two tests that pin "no national deduction in English working-age households" then check that the working-age award is unaffected instead.

See the "National schemes and the exemption" section of #2015. (Corrected per this PR's author.)

MaxGhenis added a commit that referenced this pull request Oct 1, 2026
Cherry-picks #2007 (59c7082: HB reg 74 / SPC
reg 55 bands, remunerative-work test, couple rule and exemptions; national
CTR own scales and exemptions) onto the in-unit non-dependant change (#2014)
and the #2006 rent shares, as agreed with #2007's author:

- HB and national CTR aggregation: one deduction for a non-dependant couple
  (the claimant and partner of a non-dependant family, the higher amount;
  both for a Welsh working-age couple on UC), any other adult in that family
  counted separately, in-unit non-dependants pooled and apportioned by rent
  share (HB) or joint-liability share (CTR), and the claimant's exemption.
- Joint income for the bands is the couple's only (reg 74(4), para 8(4));
  another adult is banded on their own income.
- The IS, income-based JSA, income-related ESA, Pension Credit and UC
  exemptions apply only to the award's claimant and partner.
- The HB claimant exemption reads is_claimant_or_partner, not is_adult.

Drops council_tax_reduction_pension_credit.yaml and the
in_receipt_of_guarantee_credit output, which depend on #1909 (main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 1, 2026
Cherry-picks #2007 (59c7082: HB reg 74 / SPC
reg 55 bands, remunerative-work test, couple rule and exemptions; national
CTR own scales and exemptions) onto the in-unit non-dependant change (#2014)
and the #2006 rent shares, as agreed with #2007's author:

- HB and national CTR aggregation: one deduction for a non-dependant couple
  (the claimant and partner of a non-dependant family, the higher amount;
  both for a Welsh working-age couple on UC), any other adult in that family
  counted separately, in-unit non-dependants pooled and apportioned by rent
  share (HB) or joint-liability share (CTR), and the claimant's exemption.
- Joint income for the bands is the couple's only (reg 74(4), para 8(4));
  another adult is banded on their own income.
- The IS, income-based JSA, income-related ESA, Pension Credit and UC
  exemptions apply only to the award's claimant and partner.
- The HB claimant exemption reads is_claimant_or_partner, not is_adult.

Drops council_tax_reduction_pension_credit.yaml and the
in_receipt_of_guarantee_credit output, which depend on #1909 (main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Response to review r1 of #2007 (59c7082)

The review asked for changes and was right on all five P1s. Each is fixed below with the law, the change, and a test that fails on 59c7082 and passes now.

# Finding Disposition Change Test
1 is_adult is not "claimant or partner" (an 18-year-old dependant's PIP exempted the claimant; a 17-year-old claimant's PIP did not) Fixed New helper is_claimant_or_partner: the benefit unit's head, or any member who is not an SSCBA s.142 child or qualifying young person (is_child_or_qualifying_young_person_for_child_benefit, already on main). That is how HB Regs 2006 regs 2(1) and 19 and the English and Welsh CTR regs (reg 2(1)) define a family's members other than claimant and partner. It is used in the HB claimant exemption and in council_tax_reduction_household_has_non_dep_exemption (which the local schemes also read) non_dependant_deduction_review_cases.yaml: "A dependent 18-year-old's PIP does not exempt the claimant" (HB £6,232.20, CTR £691.60); "A 17-year-old claimant's PIP exempts their family"
2 A dependent child's income was added to the couple's Fixed Joint income (reg 74(4), para 8(4)) sums only the claimant and partner of the non-dependant's family. Other members are banded on their own income. One deduction per couple (reg 74(3)) covers only the couple; each other member is deducted separately "A parent non-dependant is banded on their own income…" (HB £1,060.80, CTR £270.40); household_benefits_individual_non_dep_deduction.yaml "A dependent young person in the family is banded on their own income"
3 HB reg 6(6): a person on IS, JSA(IB) or ESA(IR) is not in remunerative work Fixed The HB individual deduction treats the claimant or partner of an IS, JSA(IB) or ESA(IR) award as not in remunerative work. CTR exempts those recipients outright, so it needs no equivalent "On income-related ESA, 16 hours is not remunerative work" (£1,060.80)
4 A self-employment loss cancelled wages in the UC no-earned-income test Fixed has_earned_income: employment income plus self-employed earnings floored at nil (UC reg 57(2) step 3) "A self-employed loss does not cancel wages…" (both exemptions false; HB £1,060.80, CTR £270.40)
5 Taxable total_income omits UC, tax credits and child benefit Fixed Gross income for a claimant or partner adds the family's UC (before the benefit cap, which would be circular through HB), CTC, WTC and child benefit to the couple's taxable income. The disability benefits disregarded by reg 74(9) are still excluded, since they are untaxed and not added "Universal Credit counts towards gross income" (£290 a week, £3,346.20)

Also from the review:

  • Benefit receipt (IS, JSA(IB), ESA(IR), SPC, UC) now exempts only the claimant or partner of the award, in both exemption variables.
  • Two omissions are now listed as not modelled, because no input exists:
    • pension-age HB's 26-week deferral of a deduction increase (SI 2006/214 reg 59(10)-(13));
    • the CTR applicant exemption's protection while AA, DLA or PIP is suspended in hospital (para 8(6)).
  • The property tests' generator now includes dependent young people with their own income (in full-time education, or on approved training and so not exempt) and self-employed losses. The oracles use the claimant-or-partner rule, reg 6(6) and the floored earnings.
  • The Welsh "award of universal credit" reading stays as stated in the PR description, an interpretation.

Not changed: the review's UNVERIFIED items on impact (exact zeros, decomposition, poverty causation). The impact is rerun on the new head after the host is free (the Axiom build has priority until about 10:00Z). The PR description's impact section is replaced with the rerun.

MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Applies #2007 at 6257277 (59c7082 plus the
r1 review commit) onto #2017 (in-unit non-dependants, #2006 rent shares):

- One definition of claimant or partner: #1896's is_claimant_or_partner
  variable. #2007's proxy helper (benefit-unit head or any member who is not
  a Child Benefit child or QYP) is removed and its call sites read the
  variable.
- HB and national CTR aggregation: another family's non-dependants per
  deduction_per_family (the couple's higher amount, both for a Welsh
  working-age UC couple, and each other member's own), counted once per
  family and apportioned by rent share (HB) or joint-liability share (CTR);
  a family's own in-unit non-dependants in full (LHA Guidance Manual 2.093;
  HBGM A5 5.622); the claimant exemptions. charged_to_other_families
  ("household minus own family") is no longer used and is removed.
- #2007's property oracle reads is_claimant_or_partner; the in-unit
  property oracle counts a couple once and applies the claimant exemptions.
- Drops council_tax_reduction_pension_credit.yaml and the
  in_receipt_of_guarantee_credit output (#1909, main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Carries 2d54628 (review r2 F3-F5) onto the composition with #2007:
- HB pools every non-dependant family amount, in-unit ones included, through
  #2007's deduction_per_family and apportions it by rent share; a boarder or
  lodger also bears its own in full; the claimant exemption still zeroes the
  claim.
- National CTR pools every family's amount (one per couple, the higher, or
  both for a Welsh working-age UC couple), replaces the applicant's own
  family amount with its in-unit non-dependants only, and apportions by
  joint-liability share; the per-applicant exemption still zeroes the claim.
- CTR eligibility includes a lodger's adult son; the local schemes stay
  neutral.

The blind-sharer case now expects the non-exempt head to bear half of the
sharer's son (para 8(5)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Response to review r2 of #2007 (6257277)

The review asked for changes again and was right on all five P1s. Findings 2-5 are fixed in the next commit, each with a YAML test that fails on 6257277 (non_dependant_deduction_review_cases.yaml, "Round 2" section). Finding 1 is fixed by adopting #1896's is_claimant_or_partner when #1896 lands; it is about to merge, and its owner asked #2007 to use it.

# Finding Disposition Change Test
1 Claimant or partner via "head or not a child benefit QYP" misclassifies explicit young partners (HB reg 2(1) "partner"), and in the reverse direction a third adult; this reaches the English local schemes through the shared exemption flag Fixed with #1896 The helper is replaced by #1896's is_claimant_or_partner, which caps the set at the head and one partner (SSCBA s.137 couple) and can be supplied as an input for explicit couples. The r1 original student case also resolves, since #1896 presumes a 19-year-old 26 years younger than the parent is their child The r2 explicit-couple cases are added after the rebase, along with the r1 cases
2 "No earned income" missed SMP, relievable pension contributions and the minimum income floor (UC regs 55 and 62) Fixed has_earned_income: employment income plus SSP and SMP, less relievable pension contributions (reg 55(4)-(5)); self-employed earnings, a loss nil (reg 57(2)), with the minimum income floor where the UC model applies it (reg 62); and other paid work SMP £8,000 → not exempt (£1,060.80/£270.40); wages all paid into a pension → exempt (£0/£0); MIF applies → not exempt (£1,060.80/£270.40)
3 ESA(IR) receipt was extended to the working partner (HB reg 2(3A): "payable to him") Fixed is_award_payee: IS, JSA(IB), ESA(IR) and SPC count only for the member who reports the award, or the head where none does; UC still counts for both joint claimants (HB reg 2(3B): entitlement). Used for the exemptions and for HB reg 6(6) Recipient and partner earning £210 a week at 16 hours → HB £2,436.20, CTR £270.40
4 Pre-cap UC overstated gross income (UC reg 81) Fixed Gross income now uses UC after the benefit cap. The cap is applied to the capped benefits other than Housing Benefit, which a non-rent-liable family does not receive; this avoids the HB → UC → cap → HB cycle Pre-cap £30,000, cap £20,000 → HB £5,470.40 (365 band), CTR £551.20
5 CTR's LGFA 1992 Sch 1 para 3 disregard (an adult for whom another person is entitled to child benefit) was omitted although inputs exist Fixed The CTR exemption adds an adult qualifying young person (child benefit, s.142) who is not the claimant or partner of their family 19-year-old on approved training with child benefit → CTR exempt, parent alone £270.40; HB still charges both (£3,497.00)

On the property tests, the review said the oracles repeat the implementation's classification. They now take the payee as the head (the generator reports no awards) and read the child benefit QYP flag from the model. After the #1896 rebase they read is_claimant_or_partner from the model, which is not code under test. The generator now draws dependent young people and losses. SMP, pension and MIF cases are pinned in YAML rather than generated.

@juaristi22

Copy link
Copy Markdown
Collaborator

Codex review — changes required

Reviewed commit e92b5d107d48fe6d6cd62927059e092a75d585c2. PARTIAL; 1 confirmed blocking finding(s). Independent code/test and policy/source reviews were consolidated for the changed behavior and affected dependencies.

code-1 — [P1] Replace the QYP-complement helper with actual claimant/partner roles

The current helper _non_dependants.py:28–36 still defines the claimant/partner set as the head or anybody who is not a Child Benefit child/qualifying young person. That is neither a relationship test nor a two-person limit. It can exclude an actual young partner in education and include a third adult. The helper controls the new disability exemptions, joint gross income and one-deduction-per-couple aggregation, so this is a material remaining integration blocker. The author's latest response also explicitly defers this finding to adoption of #1896; the captured head has not adopted it.

Executed illustration: a reported continuing HB award for an intended couple aged70/19, both parent-flagged, with the19-year-old in qualifying education and receiving standard PIP daily living, plus a separate40-year-old working non-dependant earning£30,000. The QYP complement excludes the young partner and sets the claimant exemption false. With £10,000 council rent and HB assessable income isolated at zero, the deduction is£6,232.20 and final HB£3,767.80. A control supplying the legally appropriate claimant/partner disability exemption gives deduction£0 and final HB£10,000. This snapshot lacks the canonical explicit claimant/partner input; the diagnostic's relationship is stated as the intended premise, while the code defect is the inability of this helper to honor that premise.

Adopt the canonical relationship/role variable after the prerequisite lands, then add explicit young-partner and third-adult regression cases through final awards. Do not repeat the other four r2 findings: the current tree now includes statutory sick/maternity pay, employed pension deductions and MIF; the benefit-payee test; UC after the benefit cap; and CTR's adult Child Benefit QYP exemption. Confidence: high for the current unresolved helper/integration defect.

Independent source review corroborates the actual-couple and claimant/partner conditions in HB regulation 74(3)–(6), HB interpretation and England CTR paragraph 8. The overlapping code and policy finding is counted once.

The current tree addresses round-two findings 2–5; this review does not repeat those stale blockers. Current 2026 scale values were corroborated. The remaining confirmed blocker is adoption of the canonical claimant/partner roles and coverage of their downstream HB/CTR behavior.

Outstanding evidence/decision:

  • The prerequisite claimant/partner implementation is absent, so the eventual composed behavior cannot yet be tested.
  • Historical CTR rates/dates for 2013–2025 were not all corroborated. Complete UC net-earnings treatment, including self-employed pension contributions, remains source-unresolved and is not asserted as a second confirmed defect.

Validation: 123 focused tests passed, including round-two regression tests. An executed controlled diagnostic isolates the missing partner disability exemption's final-HB effect. The intended relationship is an explicit scenario premise, and supplied benefits/HB assessable income isolate this path; the run does not establish any actual data record's demographics. Six official source originals were inspected and their cached bytes verified.

Focused tests used an existing cached Python 3.13 environment (Core 3.32.9, NumPy 2.1.3, pandas 2.3.1, microdf-python 1.2.1, Hypothesis 6.168.2, pytest 8.4.2) with this PR’s isolated source snapshot. No dependencies were installed; this was not a freshly synced lock environment or a full-suite/population run. This is a review comment, not a formal GitHub review vote.

Live check before posting (2026-10-02T10:41:08.415704+00:00): same commit, UNSTABLE; 0 failed checks; 1 pending checks.

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Review pass (Claude Code, on Vahid's behalf) at e92b5d10

Short version: the rules match the law I read, and the tests pass locally. Two things before merge: the claimant-or-partner helper still needs #1896's role variable (the Codex review's P1, which I agree with and won't repeat), and one new should-fix on the student exemption's age default in the household calculator.

1. Should-fix: with no education input, every 18- or 19-year-old non-dependant counts as a full-time student and is exempt. housing_benefit_non_dep_deduction_exempt and the CTR equivalent use is_full_time_student_non_dep, which reads current_education. That variable's formula defaults ages 18–19 to TERTIARY when nothing is supplied (variables/household/demographic/current_education.py:36). The PR body notes this, but the effect in the household calculator is large. Probe at this head, 2026, a 45-year-old HB claimant (council rent £10,000) with a 19-year-old non-dependant earning £30,000 at 37.5 hours a week:

Non-dependant current_education Exempt HB deduction
age 18, no input TERTIARY (default) yes £0
age 19, no input TERTIARY (default) yes £0
age 20, no input NOT_IN_EDUCATION no £6,232.20
age 19, NOT_IN_EDUCATION supplied NOT_IN_EDUCATION no £6,232.20

On main this non-dependant is charged, so the PR introduces the gap for HB and the national CTR schemes (the English local schemes already had it through the same helper). Datasets are unaffected, since the Enhanced FRS stores current_education. Suggested fix: base the student exemption on a stored or supplied education value only, not the age default. Alternatively, don't treat the default as full-time study for someone in remunerative work (16+ hours). Either way, add the 19-year-old case above as a test.

2. The claimant-or-partner helper (Codex P1). _non_dependants.py:28-36 is still "head or not a child-benefit QYP". The author has said it will switch to #1896's is_claimant_or_partner, and #1896 is still open, so this PR should wait for that rebase and add the explicit young-partner and third-adult cases the r2 response lists.

Checked and correct:

  • Law: I read HB Regs 2006 reg 74 and HB (SPC) Regs reg 55 on legislation.gov.uk.
    • The bands are "not less than" at the lower edge, and the 2026-27 amounts are £20.40 to £131.45 on £192/£279/£365/£485/£605.
    • Couples get one deduction, the higher, on joint income (reg 74(3)-(4)).
    • The claimant exemption covers blindness, AA, the DLA care component, the PIP daily living component and AFIP (reg 74(6)).
    • The student exemption is reg 74(7)(c)-(e); the under-25 IS/JSA(IB)/ESA(IR)/UC-no-earned-income exemption is reg 74(8); SPC is reg 74(10) (reg 55(9) for pension age).
    • England CTR Sch 1 para 8 has £5.20/£10.60/£13.30/£15.95 on £279/£485/£605, with its own para 8(7)-(8) exemptions, including the LGFA Sch 1 disregard and the UC limb.
  • Remunerative work: banding applies only at 16+ hours and not on an income-related benefit (reg 6(6)); anyone else pays the (1)(b) amount.
  • has_earned_income counts miscellaneous_income, the same as the UC model's own uc_mif_capped_earned_income, so it is consistent within the model.
  • Tests at this head: the HB and local-authority YAML suites pass 205/205, and test_non_dependant_deduction_properties.py passes 6/6. CI's Test job was still running when I checked; the other six checks pass.

MaxGhenis added a commit that referenced this pull request Oct 2, 2026
A person is on income-based JSA or income-related ESA on a day it "is
payable to him" (reg 2(3), (3A)), and a person on income support is one "in
receipt of" it (reg 2(1)). A couple's award is paid to the claimant, not the
partner. is_on_income_related_esa, is_on_income_based_jsa and
is_on_income_support now hold, of the claimant and partner, only for the
payee: the one who reports the award, or the claimant where neither does
(is_payee_of_couple_award). Another member's report never moves the payee.
Anyone else is unchanged (their own report while the award is modelled as
paid).

Agreed with #2007, whose round-2 review raised the same point and which
applies the same reading through its is_award_payee helper; the codebase now
reads "who is on" one way.

Effects: in the local working-age CTR schemes a non-dependant couple on one
of these benefits pays the partner's deduction (one deduction per couple, the
higher: Default Scheme Sch para 30(3)); the maintenance-loan ESA proxy follows
the student's own award, not their partner's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the hb-ctr-non-dep-exemptions branch from e92b5d1 to f5aae26 Compare October 2, 2026 14:09
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Composition note from #2078 (stacked on #2009), which makes the CTR means test assess the applicant and partner rather than the benefit unit's claimant and partner.

#2078 changes council_tax_reduction_household_has_non_dep_exemption to read is_council_tax_reduction_applicant_or_partner (new Person variable) in place of is_claimant_or_partner, following "the applicant or his partner" in SI 2012/2885 Sch 1 para 8(6). The two differ where the household head is liable but is not the benefit unit's claimant or partner. Example: a blind grandmother head sharing a benefit unit with a young couple, who were not exempt before.

When this PR's national exemption (council_tax_reduction_non_dep_deduction_exempt) composes with #2078, it should use the same identity for the applicant or partner. #2015 replaces the household flag with a per-family one and gets the same note.

MaxGhenis and others added 6 commits October 3, 2026 07:47
Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55):
- bands include their lower edge, and only a non-dependant in remunerative
  work (16+ hours, reg 6(1)) is banded, on the couple's joint income; anyone
  else pays the reg 74(1)(b) amount;
- one deduction per couple, the higher (reg 74(3));
- no deduction for full-time students, State Pension Credit recipients, or
  under-25s on IS, income-based JSA or UC without earned income
  (reg 74(7), (8), (10)), nor for any non-dependant when the claimant or
  partner is blind or on AA, DLA care, PIP daily living or AFIP (reg 74(6)).

Council Tax Reduction (SI 2012/2885 Sch 1 para 8; WSI 2013/3029 Sch 1
para 3 and Sch 6 para 5; SSI 2012/319 reg 48; SSI 2012/303 reg 67 and
SSI 2021/249 reg 90):
- each national scheme's own weekly scale for 2013-14 to 2026-27, instead
  of the Housing Benefit amounts;
- the same banding and couple rules, with Wales's working-age exception for
  couples on UC;
- the schemes' any-age exemptions, the UC limb from the year each scheme
  added it, and the existing applicant exemption.

Fixes #2004; the non-dependant half of #1934.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, gross income

- Identify the claimant or partner as the benefit unit's head or any member
  who is not an SSCBA s.142 child or qualifying young person (HB Regs 2006
  regs 2(1) and 19; CTR regs 2(1)), replacing is_adult in the HB and CTR
  claimant exemptions.
- Band a couple on the couple's joint income only, give the couple one
  deduction and any other adult in the family their own, and count benefit
  receipt (IS, JSA(IB), ESA(IR), SPC, UC) only for the award's claimant or
  partner.
- Treat a non-dependant on IS, JSA(IB) or ESA(IR) as not in remunerative work
  for HB (reg 6(6)).
- Take self-employed losses as nil in the UC no-earned-income test
  (UC reg 57(2)).
- Add the family's UC (before the cap), tax credits and child benefit to gross
  income.
- Tests: the review's counterexamples, a non-vacuous SPC exemption case, and
  property-test generators and oracles for dependent young people and losses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…A disregard

- "No earned income" follows UC Regs 2013 regs 52-62: employment income plus
  SSP and SMP less relievable pension contributions (reg 55(4)-(5)),
  self-employed earnings with losses nil and the minimum income floor where
  the UC model applies it (regs 57(2), 62), and other paid work.
- IS, JSA(IB), ESA(IR) and SPC count only for the person they are payable to
  (HB Regs 2006 reg 2(3)-(3A)): the member reporting the award, or the head;
  used for the exemptions and HB reg 6(6). UC still counts for both joint
  claimants.
- Gross income uses UC after the benefit cap (UC reg 81), applying the cap to
  the capped benefits other than HB, which a non-dependant family does not
  receive.
- CTR exempts an adult for whom another person is entitled to child benefit
  (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents).
- Tests: the review's counterexamples, and property oracles for the payee and
  the child benefit disregard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the local claimant-or-partner helper (benefit unit head, or anyone
not a child benefit child or qualifying young person) with the
is_claimant_or_partner variable: the SSCBA s.137 couple, at most two people.
A partner at school is now a partner, and a third adult in a benefit unit is
deducted separately. Adds the round-2 review cases: a blind 16-year-old
partner (Wales), a non-dependant couple with a partner at school, and a
17-year-old partner's PIP in Merton.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The changelog and the property generator's comment now name
is_claimant_or_partner instead of the SSCBA s.142 definitions, and
is_award_payee says that both members of a joint-claim jobseeker's allowance
couple are on it (HB reg 2(3)(c)), which the model cannot identify.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap childcare, child benefit claims

- Gross income adds statutory sick, maternity and paternity pay (earnings,
  HB reg 35(1)(i)) and Maternity Allowance to each person's taxable income,
  and the family's IS, JSA(IB), ESA(IR) and Pension Credit to a couple's.
- Earned income for the UC limb adds statutory paternity pay (UC reg
  55(4)(c)), and relievable pension contributions come off self-employed
  earnings when there are no employed earnings (reg 57(2), step 4).
- Scotland's working-age scheme exempts a non-dependant whose partner is on
  IS, JSA(IB) or ESA(IR) and who is not on Universal Credit, from April 2022
  (SSI 2021/249 reg 90(8)(a), reg 4(1)).
- The after-cap UC in gross income keeps the cap's childcare protection (UC
  reg 81(1)-(2)).
- The LGFA 1992 Sch 1 para 3 disregard needs a child benefit claim.
- The property oracle derives the claimant and applicant exemptions from
  the generated inputs, and the generator varies statutory pay, pension
  contributions, the start-up period, the award's reporter and child
  benefit claims.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the hb-ctr-non-dep-exemptions branch from f5aae26 to 084e1f9 Compare October 3, 2026 12:19
MaxGhenis added a commit that referenced this pull request Oct 3, 2026
HB(SPC) Sch 3 para 6 has the working-age premium's conditions and para
12 its amounts, so the pension-age premium is severe_disability_premium
for a family over State Pension age. A Pension Credit reform no longer
moves pension-age HB or CTR. The schedule property keeps the Pension
Credit addition as a cross-check. References add the CTR nomination
rule and the other premium schedules; the conditions YAML notes the
three income-rule defects its awards include (#1908, #2112, #2007).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes main's uv.lock, which drops an unintended one-line lock change from
this branch's first commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 22, 2026
…gs, and #2017's head-alone couple

Para 30(8)(c) of each local scheme exempts a non-dependant entitled to
Universal Credit "calculated on the basis that the person does not have any
earned income". The merge reads it on the person's own earnings, as #2007's
national schemes read the same words, so the non-earning member of a UC
couple is exempt: Merton's couple pays 691.60, not 962 (CTR 1,108.40), and
Newham's partner's own deduction is nil (the couple's one deduction, the
worker's, is unchanged).

Main's IIDB case for a grandmother who applies alone noted that the model
charged nothing for the couple in her benefit unit until #2017. With #2017
they are her non-dependants: one deduction, the lowest (5.20 a week), so
council_tax_benefit is 1,195.968.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
Apply the 16-hour threshold and the IS/JSA(IB)/ESA(IR) exclusions,
using the existing personal receipt flags and #2007 parameter files.
Retain existing rates, eligibility, couple rules and band edges.
Add 2026 regressions and update fixtures for the flat non-worker amount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 23, 2026
The independent delta review of 404daf7 found a P1. The work gate charged the flat £20.40 a week to every non-worker. Before the gate, a non-worker with no banding income got the scale's zero, because calc(0, right=True) hits the zero sentinel. Many such non-dependants are exempt by law, and the model can identify them:
- the non-dependants of an Attendance Allowance claimant (HB reg 74(6), reg 55(6), CTR Sch 1 para 8(6) and equivalents);
- for CTR, a non-dependant on IS, JSA(IB), ESA(IR) or Pension Credit, or on UC without earnings (para 8(8)(a), (c));
- for HB, a non-dependant under 25 on IS (reg 74(8)).
Measured alone, the gate cut HB about £6m a year and CTR about £1.7m.

A non-worker's deduction is now the lower of the banded amount and the flat amount. At positive banding income, including pension income, that is the flat amount, as reg 74(1)(b) and its equivalents require. At nil income it is still zero, until #2007 models the exemptions together with the flat charge.

The six snapshots the gate moved for nil-income non-workers are back to their pre-gate values. These are the two pension-age AA claimant cases, the two CTR claimant cases, and the two investment-income non-worker cases. The two new files' nil-income cases now assert zero. Two guards are added, an HB non-dependant under 25 on IS and a CTR non-dependant on UC without earnings, both at nil income. The CTR IS, JSA(IB) and ESA(IR) cases note that para 8(8)(a) exempts them; that exemption stays for #2007.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 20 commits October 31, 2026 21:08
Resolve the conflicts with #2620's programme gross incomes and work gate:
the deduction bands each programme's own gross income (now with losses as
nil and other investment income), inclusive band edges and the flat
reg 74(1)(b) amount replace right=True and the min_ cap, and the
exemptions and the work test read #2027's is_on_* status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2620's gate cases, gross-income cases and the national CTR maintenance
test now expect each CTR scheme's own scale, the flat (1)(b) amount for
non-workers and the exemptions; the PR's own cases band the programme
gross-income variables instead of total_income, which main now defines as
the Income Tax Step 1 total. The property tests read #2027's is_on_*
status, check banding against gross income built from the inputs, and
check the after-cap Universal Credit against universal_credit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he fragment

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…income

Another member of the benefit unit claims those awards in their own right
(#2027's claimant_or_partner_* awards), so they no longer raise the couple's
band. The HB work-gate cases hold family awards at zero so a nil income is
nil, and the property oracle follows the same rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A family's UC counts in the couple's joint gross income where either of
them claims it, and in another member's own income where is_uc_claimant
makes them the claimant; the UC limb of the exemptions reads the same
assessed claimants. Two cases pin it, and that another adult's own ESA
stays out of the couple's income.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pendants

The exemption for a non-dependant on Universal Credit "calculated on the
basis that [they do] not have any earned income" now reads
uc_individual_earned_income, so allowable expenses, company income,
trading losses and the couple minimum income floor follow UC's own rules.

The capped award counted in a couple's gross income now shares the
award's calculation of the regulation 81 reduction and of the part a
protected minimum floor lets it take, and reads a stored or neutralized
universal_credit, a universal_credit formula a reform replaces, and a
stored cap reduction or welfare-benefit total.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… award

WSI 2013/3029 Sch 6 para 5(3) lifts the one-deduction rule where there is
an award of Universal Credit to the couple. Another member's award as a
single claimant now leaves the couple one deduction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Four earned-income cases (expenses, a trading loss, company income, a
couple's floor), two Welsh cases where a third adult alone claims
Universal Credit, the capped award under an 85% protected floor and with
stored and replaced values, and an invariant comparing the exemption with
Universal Credit's earned income. The property generator now varies
is_uc_claimant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both gross-income variables now add tax_free_savings_income (ISA interest
unless a total is supplied) and individual_savings_account_dividend_income,
as main's local CTR schemes do. The documentation describes treating a
loss as nil as an approximation: the model holds profits, not the
receipts DWP guidance A5.551 counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each English case had a sole 30-year-old forced onto the pension-age
scheme. It now has a 70-year-old applicant and a separate 30-year-old
non-dependant, and the model works out each family's scheme. Expected
deductions don't change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A family with a 0.5% share of the rent is a joint occupier, not a
non-dependant (HB reg 3(2)(d)), and a partner's PIP daily living
component exempts the claimant's family (reg 74(6)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An is_uc_claimant input for some people stores False for the rest, so the
generated populations now enter it for every person or leave the model's
default. The earned-income invariant compares the exemption with
Universal Credit's earned income for the claimants the award assesses,
and the capped-award invariant sets the protected floor in place on one
simulation and checks that the floor never lowers an award.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A reform that scales main's universal_credit formula still reads the cap
reduction, and so Housing Benefit and the non-dependant deduction. The
deduction now catches that cycle and calculates the award without Housing
Benefit, as for current law, and a test pins the result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Housing Benefit non-dependant deductions: exclusive band edges, no remunerative-work test, one deduction per person, no exemptions

3 participants