Why
PolicyEngine/policyengine-uk#1896 replaces the generic is_child (age < 18) and is_adult (age >= 18) flags inside the UK model with each programme's legal definition, and adds explicit HBAI (Households Below Average Income) variables for statistics. UK law has no single definition of a child: Child Benefit, Universal Credit, tax credits, Pension Credit, the legacy benefits and student support each define their own, and HBAI defines a dependent child as under 16, or 16-19, unpartnered, living with parents and in full-time non-advanced education or unwaged government training.
is_child, is_adult, family_type and the other generic variables stay in policyengine-uk as deprecated shims with their old age-18 formulas, so nothing breaks. This issue moves policyengine.py onto the explicit variables once its policyengine-uk pin moves past the release containing that PR.
Changes
src/policyengine/tax_benefit_models/uk/model.py: drop is_adult and is_child from the UK person output columns (lines ~63-65) and add hbai_person_type (enum: CHILD, WORKING_AGE_ADULT, PENSIONER) or is_hbai_dependent_child. Replace the benunit family_type column (line ~94; deprecated, age-18 split) with relation_type (claimant has a partner) if a family column is still wanted. Update uk/household.py accordingly and regenerate the UK household snapshot fixtures.
src/policyengine/outputs/poverty.py: UK poverty by group should use the HBAI population groups, not the age bands in AGE_GROUPS (child <= 17, adult 18-64, senior 65+). HBAI groups: dependent children, working-age adults (below State Pension age) and pensioners (at or above State Pension age), i.e. hbai_person_type. Keep age bands where an age band is meant, but label them as age bands (for example aged_0_to_17, aged_18_to_64, aged_65_and_over), and keep the US groups separate from the UK ones. The api-v2 simulation executor and the app's "Children / Working-age adults / Seniors" labels read these groups: coordinate the key change (for the UK, "Seniors" should read "Pensioners").
src/policyengine/outputs/cliff_impact.py: the cliff-share denominator sums is_adult. Make it an explicit per-country predicate (for the UK, people aged 18 or over via age, or is_hbai_adult if the intended population is HBAI adults) and document it; the numerator currently counts everyone.
Acceptance
- No policyengine.py code reads a deprecated UK variable (
is_child, is_adult, num_children, num_adults, family_type, child_index, adult_index excepted).
- UK poverty-by-group outputs reproduce HBAI's population split on the enhanced FRS.
- Snapshot and poverty tests updated.
🤖 Generated with Claude Code
Why
PolicyEngine/policyengine-uk#1896 replaces the generic
is_child(age < 18) andis_adult(age >= 18) flags inside the UK model with each programme's legal definition, and adds explicit HBAI (Households Below Average Income) variables for statistics. UK law has no single definition of a child: Child Benefit, Universal Credit, tax credits, Pension Credit, the legacy benefits and student support each define their own, and HBAI defines a dependent child as under 16, or 16-19, unpartnered, living with parents and in full-time non-advanced education or unwaged government training.is_child,is_adult,family_typeand the other generic variables stay in policyengine-uk as deprecated shims with their old age-18 formulas, so nothing breaks. This issue moves policyengine.py onto the explicit variables once its policyengine-uk pin moves past the release containing that PR.Changes
src/policyengine/tax_benefit_models/uk/model.py: dropis_adultandis_childfrom the UK person output columns (lines ~63-65) and addhbai_person_type(enum:CHILD,WORKING_AGE_ADULT,PENSIONER) oris_hbai_dependent_child. Replace the benunitfamily_typecolumn (line ~94; deprecated, age-18 split) withrelation_type(claimant has a partner) if a family column is still wanted. Updateuk/household.pyaccordingly and regenerate the UK household snapshot fixtures.src/policyengine/outputs/poverty.py: UK poverty by group should use the HBAI population groups, not the age bands inAGE_GROUPS(child <= 17, adult 18-64, senior 65+). HBAI groups: dependent children, working-age adults (below State Pension age) and pensioners (at or above State Pension age), i.e.hbai_person_type. Keep age bands where an age band is meant, but label them as age bands (for exampleaged_0_to_17,aged_18_to_64,aged_65_and_over), and keep the US groups separate from the UK ones. The api-v2 simulation executor and the app's "Children / Working-age adults / Seniors" labels read these groups: coordinate the key change (for the UK, "Seniors" should read "Pensioners").src/policyengine/outputs/cliff_impact.py: the cliff-share denominator sumsis_adult. Make it an explicit per-country predicate (for the UK, people aged 18 or over viaage, oris_hbai_adultif the intended population is HBAI adults) and document it; the numerator currently counts everyone.Acceptance
is_child,is_adult,num_children,num_adults,family_type,child_index,adult_indexexcepted).🤖 Generated with Claude Code