diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb..c26c8af3c 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Scottish Child Payment - a benefit provided by Social Security Scotland for eligible children under 16 in low-income families receiving qualifying benefits (UC, tax credits, etc.). \ No newline at end of file diff --git a/policyengine_uk/entities.py b/policyengine_uk/entities.py index a67bfeddd..d83ee53b2 100644 --- a/policyengine_uk/entities.py +++ b/policyengine_uk/entities.py @@ -3,7 +3,7 @@ # This file defines the entities needed by our legislation. from policyengine_core.entities import build_entity -Household = build_entity( +Household = build_entity( key="household", plural="households", label="Household", diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/amount.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/amount.yaml new file mode 100644 index 000000000..40f091ffe --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/amount.yaml @@ -0,0 +1,17 @@ +description: Weekly amount of Scottish Child Payment per eligible child. +values: + 0001-01-01: 0 + 2021-02-15: 10 + 2022-04-01: 20 + 2022-11-14: 25 + 2024-04-01: 26.70 + 2025-04-01: 27.15 +metadata: + unit: currency-GBP + period: week + label: Scottish Child Payment weekly amount + reference: + - title: Scottish Government - Scottish Child Payment + href: https://www.gov.scot/policies/social-security/scottish-child-payment/ + - title: Social Security Scotland - SCP statistics + href: https://www.socialsecurity.gov.scot/publications/2024/02/scottish-child-payment-statistics-to-31-december-2023 diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/max_age.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/max_age.yaml new file mode 100644 index 000000000..aa0bc3638 --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/max_age.yaml @@ -0,0 +1,12 @@ +description: Maximum age for Scottish Child Payment eligibility (child must be under this age). +values: + 0001-01-01: 0 + 2021-02-15: 6 + 2022-11-14: 16 +metadata: + unit: year + period: year + label: Scottish Child Payment maximum age + reference: + - title: Scottish Government - Scottish Child Payment + href: https://www.gov.scot/policies/social-security/scottish-child-payment/ diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/child_tax_credit.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/child_tax_credit.yaml new file mode 100644 index 000000000..3f9559765 --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/child_tax_credit.yaml @@ -0,0 +1,12 @@ +description: > + Whether Child Tax Credit is a qualifying benefit for Scottish Child Payment. + CTC was removed as a qualifying benefit in 2024 as part of UC migration. +values: + 0001-01-01: true + 2024-04-01: false +metadata: + unit: bool + label: CTC qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/esa_income.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/esa_income.yaml new file mode 100644 index 000000000..a9a1d6c18 --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/esa_income.yaml @@ -0,0 +1,11 @@ +description: > + Whether income-related Employment and Support Allowance is a qualifying + benefit for Scottish Child Payment. +values: + 0001-01-01: true +metadata: + unit: bool + label: ESA (income-related) qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/income_support.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/income_support.yaml new file mode 100644 index 000000000..853a8fc9f --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/income_support.yaml @@ -0,0 +1,9 @@ +description: Whether Income Support is a qualifying benefit for Scottish Child Payment. +values: + 0001-01-01: true +metadata: + unit: bool + label: Income Support qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/jsa_income.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/jsa_income.yaml new file mode 100644 index 000000000..f5f7401df --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/jsa_income.yaml @@ -0,0 +1,11 @@ +description: > + Whether income-based Jobseeker's Allowance is a qualifying benefit + for Scottish Child Payment. +values: + 0001-01-01: true +metadata: + unit: bool + label: JSA (income-based) qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/pension_credit.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/pension_credit.yaml new file mode 100644 index 000000000..d12339a6f --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/pension_credit.yaml @@ -0,0 +1,9 @@ +description: Whether Pension Credit is a qualifying benefit for Scottish Child Payment. +values: + 0001-01-01: true +metadata: + unit: bool + label: Pension Credit qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/universal_credit.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/universal_credit.yaml new file mode 100644 index 000000000..4d97b94db --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/universal_credit.yaml @@ -0,0 +1,9 @@ +description: Whether Universal Credit is a qualifying benefit for Scottish Child Payment. +values: + 0001-01-01: true +metadata: + unit: bool + label: UC qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/working_tax_credit.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/working_tax_credit.yaml new file mode 100644 index 000000000..a30314a2d --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/qualifying_benefits/working_tax_credit.yaml @@ -0,0 +1,12 @@ +description: > + Whether Working Tax Credit is a qualifying benefit for Scottish Child Payment. + WTC was removed as a qualifying benefit in 2024 as part of UC migration. +values: + 0001-01-01: true + 2024-04-01: false +metadata: + unit: bool + label: WTC qualifies for SCP + reference: + - title: Social Security Scotland - Scottish Child Payment + href: https://www.socialsecurity.gov.scot/scottish-child-payment diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/takeup_rate/age_6_and_over.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/takeup_rate/age_6_and_over.yaml new file mode 100644 index 000000000..fcbeca0a7 --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/takeup_rate/age_6_and_over.yaml @@ -0,0 +1,13 @@ +description: > + Take-up rate for Scottish Child Payment for families with children aged 6 + and over. Lower than under-6 rate as these families require separate + application rather than automatic award. +values: + 0001-01-01: 0.86 +metadata: + unit: /1 + period: year + label: Scottish Child Payment take-up rate (6 and over) + reference: + - title: SPICe analysis of SCP coverage + href: https://spice-spotlight.scot/2024/07/31/scottish-child-payment-who-gets-it/ diff --git a/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/takeup_rate/under_6.yaml b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/takeup_rate/under_6.yaml new file mode 100644 index 000000000..5a89d7928 --- /dev/null +++ b/policyengine_uk/parameters/gov/social_security_scotland/scottish_child_payment/takeup_rate/under_6.yaml @@ -0,0 +1,12 @@ +description: > + Take-up rate for Scottish Child Payment for families with children under 6. + Higher take-up due to automatic awards from Best Start Grant recipients. +values: + 0001-01-01: 0.97 +metadata: + unit: /1 + period: year + label: Scottish Child Payment take-up rate (under 6) + reference: + - title: SPICe analysis of SCP coverage + href: https://spice-spotlight.scot/2024/07/31/scottish-child-payment-who-gets-it/ diff --git a/policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_child_payment.yaml b/policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_child_payment.yaml new file mode 100644 index 000000000..d48174f36 --- /dev/null +++ b/policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_child_payment.yaml @@ -0,0 +1,397 @@ +# Scottish Child Payment tests +# SCP available from Feb 2021, extended to under-16s from Nov 2022 + +- name: SCP for family receiving UC in Scotland (2024) + period: 2024 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 5 + child_2: + age: 3 + benunits: + benunit: + members: [parent, child_1, child_2] + universal_credit: 5000 + households: + household: + members: [parent, child_1, child_2] + region: SCOTLAND + output: + # £26.70/week * 52 weeks * 2 children = £2,776.80 + scottish_child_payment: 2777 + +- name: SCP for family receiving UC in Scotland (2023) + period: 2023 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 10 + child_2: + age: 8 + benunits: + benunit: + members: [parent, child_1, child_2] + universal_credit: 5000 + households: + household: + members: [parent, child_1, child_2] + region: SCOTLAND + output: + # £25/week * 52 weeks * 2 children = £2,600 + scottish_child_payment: 2600 + +- name: No SCP for families not receiving qualifying benefit + period: 2024 + absolute_error_margin: 1 + input: + people: + parent: + age: 30 + employment_income: 50000 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + scottish_child_payment: 0 + +- name: No SCP in England + period: 2024 + absolute_error_margin: 1 + input: + people: + parent: + age: 30 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + universal_credit: 5000 + households: + household: + members: [parent, child_1] + region: NORTH_EAST + output: + scottish_child_payment: 0 + +- name: No SCP in Wales + period: 2024 + absolute_error_margin: 1 + input: + people: + parent: + age: 30 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + universal_credit: 5000 + households: + household: + members: [parent, child_1] + region: WALES + output: + scottish_child_payment: 0 + +- name: SCP before Nov 2022 only for under-6s + period: 2022 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_young: + age: 4 + child_older: + age: 10 + benunits: + benunit: + members: [parent, child_young, child_older] + universal_credit: 5000 + households: + household: + members: [parent, child_young, child_older] + region: SCOTLAND + output: + # Only child_young (age 4) eligible, £20/week * 52 = £1,040 + scottish_child_payment: 1040 + +- name: SCP for family receiving Child Tax Credit (2023 - CTC still qualifies) + period: 2023 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 8 + benunits: + benunit: + members: [parent, child_1] + child_tax_credit: 2000 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # £25/week * 52 weeks * 1 child = £1,300 + scottish_child_payment: 1300 + +- name: No SCP before Feb 2021 + period: 2020 + absolute_error_margin: 1 + input: + people: + parent: + age: 30 + child_1: + age: 4 + benunits: + benunit: + members: [parent, child_1] + universal_credit: 5000 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + scottish_child_payment: 0 + +- name: No SCP for child over 16 + period: 2024 + absolute_error_margin: 1 + input: + people: + parent: + age: 40 + child_1: + age: 17 + benunits: + benunit: + members: [parent, child_1] + universal_credit: 5000 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + scottish_child_payment: 0 + +- name: Large family with multiple eligible children + period: 2024 + absolute_error_margin: 10 + input: + people: + parent: + age: 35 + child_1: + age: 14 + child_2: + age: 10 + child_3: + age: 6 + child_4: + age: 3 + benunits: + benunit: + members: [parent, child_1, child_2, child_3, child_4] + universal_credit: 8000 + households: + household: + members: [parent, child_1, child_2, child_3, child_4] + region: SCOTLAND + output: + # £26.70/week * 52 weeks * 4 children = £5,553.60 + scottish_child_payment: 5554 + +# New tests for 2025 amount and qualifying benefit changes + +- name: SCP with 2025 amount (£27.15/week) + period: 2025 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + universal_credit: 5000 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # £27.15/week * 52 weeks * 1 child = £1,411.80 + scottish_child_payment: 1412 + +- name: CTC no longer qualifies from 2025 (after April 2024) + period: 2025 + absolute_error_margin: 1 + input: + people: + parent: + age: 30 + child_1: + age: 8 + benunits: + benunit: + members: [parent, child_1] + child_tax_credit: 2000 + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # CTC removed as qualifying benefit from April 2024 + scottish_child_payment: 0 + +- name: CTC still qualifies in 2023 (before April 2024) + period: 2023 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 8 + benunits: + benunit: + members: [parent, child_1] + child_tax_credit: 2000 + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # £25/week * 52 weeks * 1 child = £1,300 + scottish_child_payment: 1300 + +- name: WTC no longer qualifies from 2025 + period: 2025 + absolute_error_margin: 1 + input: + people: + parent: + age: 30 + child_1: + age: 8 + benunits: + benunit: + members: [parent, child_1] + working_tax_credit: 2000 + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # WTC removed as qualifying benefit from April 2024 + scottish_child_payment: 0 + +- name: Income Support still qualifies in 2025 + period: 2025 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + income_support: 3000 + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # £27.15/week * 52 weeks * 1 child = £1,411.80 + scottish_child_payment: 1412 + +- name: JSA income-based still qualifies in 2025 + period: 2025 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + jsa_income: 3000 + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # £27.15/week * 52 weeks * 1 child = £1,411.80 + scottish_child_payment: 1412 + +- name: ESA income-related still qualifies in 2025 + period: 2025 + absolute_error_margin: 10 + input: + people: + parent: + age: 30 + child_1: + age: 5 + benunits: + benunit: + members: [parent, child_1] + esa_income: 4000 + universal_credit: 0 + households: + household: + members: [parent, child_1] + region: SCOTLAND + output: + # £27.15/week * 52 weeks * 1 child = £1,411.80 + scottish_child_payment: 1412 + +- name: Pension Credit still qualifies in 2025 + period: 2025 + absolute_error_margin: 10 + input: + people: + grandparent: + age: 70 + child_1: + age: 10 + benunits: + benunit: + members: [grandparent, child_1] + pension_credit: 5000 + universal_credit: 0 + households: + household: + members: [grandparent, child_1] + region: SCOTLAND + output: + # £27.15/week * 52 weeks * 1 child = £1,411.80 + scottish_child_payment: 1412 diff --git a/policyengine_uk/variables/gov/social_security_scotland/is_scp_eligible_child.py b/policyengine_uk/variables/gov/social_security_scotland/is_scp_eligible_child.py new file mode 100644 index 000000000..7ef246b55 --- /dev/null +++ b/policyengine_uk/variables/gov/social_security_scotland/is_scp_eligible_child.py @@ -0,0 +1,17 @@ +from policyengine_uk.model_api import * + + +class is_scp_eligible_child(Variable): + label = "Eligible for Scottish Child Payment" + documentation = "Whether this child is eligible for Scottish Child Payment based on age." + entity = Person + definition_period = YEAR + value_type = bool + + def formula(person, period, parameters): + p = parameters( + period + ).gov.social_security_scotland.scottish_child_payment + age = person("age", period) + max_age = p.max_age + return age < max_age diff --git a/policyengine_uk/variables/gov/social_security_scotland/scottish_child_payment.py b/policyengine_uk/variables/gov/social_security_scotland/scottish_child_payment.py new file mode 100644 index 000000000..702e12d9c --- /dev/null +++ b/policyengine_uk/variables/gov/social_security_scotland/scottish_child_payment.py @@ -0,0 +1,110 @@ +from policyengine_uk.model_api import * + + +class scottish_child_payment(Variable): + label = "Scottish Child Payment" + documentation = ( + "Scottish Child Payment provides financial support to low-income " + "families in Scotland. It is paid per eligible child to families " + "receiving qualifying benefits such as Universal Credit." + ) + entity = BenUnit + definition_period = YEAR + value_type = float + unit = GBP + reference = [ + "https://www.gov.scot/policies/social-security/scottish-child-payment/", + "https://www.socialsecurity.gov.scot/", + ] + + def formula(benunit, period, parameters): + # Check if household is in Scotland + in_scotland = ( + benunit.household("country", period).decode_to_str() == "SCOTLAND" + ) + + # Get SCP parameters + p = parameters( + period + ).gov.social_security_scotland.scottish_child_payment + weekly_amount = p.amount + + # SCP only available when amount > 0 (i.e., after Feb 2021) + scp_available = weekly_amount > 0 + + # Count eligible children in the benefit unit + is_eligible_child = benunit.members("is_scp_eligible_child", period) + eligible_children = benunit.sum(is_eligible_child) + + # Count children under 6 and 6+ for takeup rate calculation + age = benunit.members("age", period) + is_child = benunit.members("is_child", period) + children_under_6 = benunit.sum(is_child & (age < 6)) + children_6_and_over = benunit.sum(is_child & (age >= 6) & (age < 16)) + + # Check if receiving a qualifying benefit + # The list of qualifying benefits is parameterized as CTC/WTC + # were removed in 2024 as part of UC migration + qb = p.qualifying_benefits + + receives_uc = ( + benunit("universal_credit", period) > 0 + ) & qb.universal_credit + receives_ctc = ( + benunit("child_tax_credit", period) > 0 + ) & qb.child_tax_credit + receives_wtc = ( + benunit("working_tax_credit", period) > 0 + ) & qb.working_tax_credit + receives_income_support = ( + benunit("income_support", period) > 0 + ) & qb.income_support + receives_jsa_income = ( + benunit("jsa_income", period) > 0 + ) & qb.jsa_income + receives_esa_income = ( + benunit("esa_income", period) > 0 + ) & qb.esa_income + receives_pension_credit = ( + benunit("pension_credit", period) > 0 + ) & qb.pension_credit + + receives_qualifying_benefit = ( + receives_uc + | receives_ctc + | receives_wtc + | receives_income_support + | receives_jsa_income + | receives_esa_income + | receives_pension_credit + ) + + # Calculate annual payment + annual_amount = eligible_children * weekly_amount * WEEKS_IN_YEAR + + # Apply age-specific take-up rates in microsimulation + # 97% for families with only children under 6 + # 86% for families with any children 6 and over + takeup_under_6 = p.takeup_rate.under_6 + takeup_6_and_over = p.takeup_rate.age_6_and_over + + # Use the 6+ rate if any child is 6 or older, otherwise under-6 rate + has_children_6_and_over = children_6_and_over > 0 + takeup_rate = where( + has_children_6_and_over, takeup_6_and_over, takeup_under_6 + ) + + takes_up = random(benunit) < takeup_rate + is_in_microsimulation = benunit.simulation.dataset is not None + if is_in_microsimulation: + receives_payment = takes_up + else: + receives_payment = True + + return ( + in_scotland + * scp_available + * receives_qualifying_benefit + * receives_payment + * annual_amount + ) diff --git a/policyengine_uk/variables/household/income/hbai_household_net_income.py b/policyengine_uk/variables/household/income/hbai_household_net_income.py index b5cf45ea1..78c890db0 100644 --- a/policyengine_uk/variables/household/income/hbai_household_net_income.py +++ b/policyengine_uk/variables/household/income/hbai_household_net_income.py @@ -54,6 +54,7 @@ class hbai_household_net_income(Variable): "winter_fuel_allowance", "tax_free_childcare", "healthy_start_vouchers", + "scottish_child_payment", # Reference for tax-free-childcare: https://assets.publishing.service.gov.uk/media/5e7b191886650c744175d08b/households-below-average-income-1994-1995-2018-2019.pdf ] subtracts = [ diff --git a/policyengine_uk/variables/household/income/household_benefits.py b/policyengine_uk/variables/household/income/household_benefits.py index 12adf7846..9d82a3437 100644 --- a/policyengine_uk/variables/household/income/household_benefits.py +++ b/policyengine_uk/variables/household/income/household_benefits.py @@ -50,6 +50,7 @@ class household_benefits(Variable): "dft_subsidy_spending", "healthy_start_vouchers", "two_child_limit_payment", + "scottish_child_payment", ] def formula(household, period, parameters):