Repository navigation
Apply the UC childcare work condition's partner exceptions and treated-as-working rules (UC Regs 2013 reg 32) - #2088
Merged
Conversation
UC Regs 2013 reg 32(1)(b): the other member of a couple who is not in paid work still lets the claimant meet the work condition if they have limited capability for work, have regular and substantial caring responsibilities for a severely disabled person, or are temporarily absent from the claimant's household. Reg 32(2)(b) treats a claimant receiving SSP, SMP, SPP or maternity allowance as in paid work, and reg 32(1)(a) also accepts an offer of paid work for the claimant's limb. The condition is now pairwise: one claimant meets limb (a) and every other claimant meets limb (b). Limb (i) uses uc_limited_capability_for_WRA, (ii) is_carer_for_benefits, (iii) a new input. Adds YAML tests from the law and ADM F7011-F7015, and property tests including an exhaustive differential check against a reference transcribed from reg 32. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 2, 2026
- Describe the limited-capability and caring exceptions as the approximations they are. is_carer_for_benefits' hours branch checks neither the cared-for person's qualifying benefit (SSCBA 1992 s.70(2), imported by reg 30(1)(a)) nor the reg 30(3) paid-care exclusion. - Rename the offer input to uc_has_offer_of_paid_work_starting_by_end_of_next_assessment_period, so its name carries reg 32(1)(a)'s deadline. - Property tests: workers have employment income, self-employment income or hours alone, and every exhaustive family has a dependant. This kills two mutants the first exhaustive version missed (an unmasked dependant, and employment income standing in for in_work). - YAML: Ben and Sara's case now includes Sara's mother on the higher rate of attendance allowance; add three-flagged-claimant cases and a self-employment case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The exhaustive test now tries every payment where one member of a couple has only an offer of work and the other only that payment, and gives non-carers one hour under the minimum care hours. That kills a limb (b) that leaves out maternity allowance and a carer test of any care hours. Adds a YAML case: an offer-only claimant with a partner on maternity allowance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The partner on maternity allowance meets both limbs; the condition holds because the offer-only claimant meets (a) and the partner meets (b). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Independent review record (Subfleet review lanes; the reviews are kept locally):
🤖 Generated with Claude Code |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Merge record.
Merging with a merge commit, pinned to 🤖 Generated with Claude Code |
MaxGhenis
added a commit
that referenced
this pull request
Oct 4, 2026
Resolves conflicts with #1896 (claimant and partner), #1950 (no capital income in UC), #1949, #1973 and #2088 (reg. 32 exceptions): the income sums, the childcare work condition and the minimum income floor read is_uc_assessed_claimant; fixtures that relied on the old is_uc_claimant fallback flagging an adult child now supply the roles; the reg. 22 differential expects pensions plus tariff income, since savings interest is not reg. 66(1) income for anyone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 6, 2026
…-3-single-claim #2081, #1973 and #1949 have merged, so main now carries this PR's base. Conflicts and their resolutions: - uc_individual_earned_income_before_mif.py: main's version (the age-75 pension contribution limit as #1949 landed it). uc_individual_earned_income.py and test_uc_earnings_deductions_properties.py merged cleanly and equal main's; so does test_uc_work_related_groups_properties.py, which now declares is_claimant_or_partner itself. - utils/uc_work_related_requirements.py: main's claimants() (it reads is_uc_assessed_claimant, which replaced couple_members() with the same formula), plus this PR's single-claim helpers. - uc_member_of_couple_claims_as_single_person.py and uc_is_ineligible_partner.py read is_uc_assessed_claimant instead of the removed couple_members(); no output changes. - is_uc_eligible.py: both docstrings' sentences. - uc_childcare_work_condition.py: #2088's reg 32 formula with this PR's reg 3(3) split, as posted on #2084: limb (a) for the s.40 claimant (is_uc_single_or_joint_claimant), limb (b) for every other member of the couple (is_uc_assessed_claimant), and reg 32(2) treatment only for a claimant. - is_benefit_cap_exempt_other.py merged without a conflict but lost `person = benunit.members`, which main removed and this PR's reg 83 line reads; restored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 6, 2026
…igible does - claims_as_single_person.yaml: five cases for the childcare work condition after #2088: the other member's reg 32(1)(b) exception applies on a single claim; their statutory maternity pay does not treat them as in paid work (reg 32(2) reads "a claimant"), against a joint-claim control; only the claimant can meet limb (a), against a joint-claim control. - uc_member_of_couple_claims_as_single_person: the claimant's pension-age test reads has_attained_state_pension_credit_qualifying_age, as main's is_uc_eligible now does for WRA 2012 s.4(1)(b). The two differ only for men born before 6 December 1953. - Changelog: main's cap now has only the reg 60C pension-age exception, so an older partner no longer lifts a UC single claimant's cap; the note that it did is dropped, and the reg 32 change is described. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 10, 2026
…e childcare exception The two switches #2081 and #2088 left to this branch, which lands after them (comments on #2076, 2026-10-03 and 2026-10-05): - Welfare Reform Act 2012 s.21(1)(a): uc_work_related_group_apart_from_ earnings reads uc_limited_capability_for_work. The input uc_has_limited_capability_for_work, which defaulted to false, is removed; its test inputs move to uc_limited_capability_for_work. - UC Regs 2013 reg 32(1)(b)(i): uc_unable_to_provide_childcare reads uc_limited_capability_for_work, and its documentation says so. An ESA award without the support component removes limited capability for work-related activity but not for work (UC Regs 2013 regs 39, 40), so such a claimant falls within section 21, outside the minimum income floor, and as a partner still meets the childcare exception. New YAML cases pin both, and the minimum income floor case. Changelog fragments updated for these and for main's age and earnings exceptions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
uc_childcare_work_conditionrequired every claimant and partner to be in work. Its documentation said the partner exceptions in UC Regs 2013 reg 32(1)(b) and the treated-as-working rules of reg 32(2) were not modelled. This PR models them:uc_limited_capability_for_WRA, the approximation main already uses for LCW in the work allowance and the reg 8 minimum age. It defaults tois_disabled_for_benefits(disability benefit receipt), not an observed work capability assessment;is_carer_for_benefits, an approximation. It means receipt of Carer's Allowance or Carer Support Payment, or at least 35 hours of care a week. The hours branch doesn't check that the person cared for is severely disabled, or that the carer isn't paid for the caring;uc_is_temporarily_absent_from_claimant_household. Nothing in the model observes this.uc_childcare_treated_as_in_paid_work.uc_has_offer_of_paid_work_starting_by_end_of_next_assessment_period, meets the claimant's limb only, not the other member's.any(a) & all(b), which wrongly fails a claimant with only an offer of work and a working partner. The property tests below include that mutant and kill it.Example, 2025-26: the claimant earns £15,000, the partner has limited capability for work and doesn't work, and they have one child aged 3 with £5,000 of childcare costs.
uc_childcare_work_conditionuc_childcare_elementLaw
UC Regs 2013 reg 32 (legislation.gov.uk data.xml, current version fetched 2026-10-02):
Reg 30(1) defines (ii): a person who satisfies the conditions for carer's allowance (or would, but for the earnings limit or Scottish residence), or who is entitled to carer support payment.
ADM chapter F7 agrees:
What is still not modelled
in_workproxy covers it: hours or earnings at any point in the year count as paid work.is_carer_for_benefitschecks neither, so the survey's care-hours field counts caring for anyone. The variable's own documentation misplaces the qualifying-benefit condition as "the second limb of regulation 30"; Reduce Carer's Allowance and Carer Support Payment by overlapping benefits #1994 rewrites that documentation, and I've suggested the correction there.uc_limited_capability_for_WRAstands for an LCW determination through disability benefit receipt. Lift the benefit cap only for the support component and the people HB reg 75F and UC reg 83 name, and cap only the family's benefits #2076 gives the model its own LCW variable.Invariants
These hold for every input in the tested domain, and the tests run them. The domain is single claimants and couples, each with one dependant child or young person. Workers have employment income, self-employment income or hours alone, the three routes into the
in_workproxy. The exceptions are the model's approximations above (the reference reads the LCWRA input and care hours ≥ the Carer's Allowance minimum), not the full legal tests.Differential, exhaustive over route sets. The condition equals a reference transcribed from reg 32 in pairwise form: (a)(A) ∧ (b)(B), or (a)(B) ∧ (b)(A). This is checked for all 6 routes (work, a listed payment, an offer, LCW, carer, absence):
Every family has a dependant: idle in half of them, with a cycling route set of its own in the rest.
Monotonic. Giving any member paid work, a listed payment, an offer or an exception never removes the condition.
A couple both in paid work always meet it.
With no member meeting limb (a), no exception meets it.
Swapping the two members of a couple doesn't change the result.
A dependant's work, payments and circumstances never matter.
The childcare element is never negative, and it is zero whenever the condition fails.
Mutation check. Ten mutants each fail the exhaustive differential test, and the real formula passes:
any(a) & all(b);claimant &);Three versions of the test let mutants through:
The test now builds those cases and kills all of them.
Tests
uc_childcare_work_condition_reg_32.yaml: 25 cases worked by hand from reg 32, reg 30 and ADM F7011-F7015.test_uc_childcare_work_condition_properties.py: invariants 1-7 with Hypothesis, plus the exhaustive test. It runs in about 90 s locally.Impact (Enhanced FRS)
These are real Microsimulation runs, one per package state, on the Enhanced FRS 2024-25 (sha256
e433e532…, the same file as the other UC PRs this week), for every year 2025 to 2030. Base is main6fa14dc0e. The branch is this PR's head,ff075c8fa, which is the PR merged with that main. Both are clean trees. Every figure below is identical, to the £1,000, to the two earlier pairs of runs: main788d692eaagainst634465e29, and main3c48247ebagainstdb826f6fa.in_workalready counts them.Interactions with open PRs
Lift the benefit cap only for the support component and the people HB reg 75F and UC reg 83 name, and cap only the family's benefits #2076 adds
uc_limited_capability_for_work. Whichever of the two merges second should switch limb (i) ofuc_unable_to_provide_childcarefromuc_limited_capability_for_WRAtouc_limited_capability_for_work. Under Lift the benefit cap only for the support component and the people HB reg 75F and UC reg 83 name, and cap only the family's benefits #2076, an ESA award without the support component removes LCWRA but not LCW. I've commented on Lift the benefit cap only for the support component and the people HB reg 75F and UC reg 83 name, and cap only the family's benefits #2076.Model a Universal Credit claim by a member of a couple as a single person (UC Regs 2013 reg 3(3)) #2084 (reg 3(3) single claims) also edits
uc_childcare_work_condition. On merge:is_uc_single_or_joint_claimant;is_uc_claimantmember.in_work | uc_unable_to_provide_childcare.I've posted the resolved formula on Model a Universal Credit claim by a member of a couple as a single person (UC Regs 2013 reg 3(3)) #2084.
axiom:
uk/regulation/uksi/2013/376/32(1)(b)(i) and the (2)(b) SSP limb encoded-correct (32.test.yamlcouple_claimant_treated_as_paid_work_and_other_member_unable); TheAxiomFoundation/rulespec-uk#430 queued (reg 32(2) for the other joint claimant, either joint claimant as "the claimant", and companion cases for (b)(ii)-(iii), each payment and offers)🤖 Generated with Claude Code