Skip to content

Commit f962a2b

Browse files
authored
Add hours usage variable to extended childcare program (#1118)
* add hours usage variable * add hours usage variable * edit extended calculation py file * format black * edit max hour variable * format * format * edit setup * add tests
1 parent 45f8d2f commit f962a2b

File tree

5 files changed

+82
-3
lines changed

5 files changed

+82
-3
lines changed

changelog_entry.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
- bump: patch
2+
changes:
3+
added:
4+
- Added variable to represent partial usage of extended childcare entitlement hours
5+
- Updated extended childcare entitlement calculation to account for partial hours usage

policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,11 @@
118118
members: [child1]
119119
extended_childcare_entitlement_eligible: true
120120
output:
121-
extended_childcare_entitlement: 4611.457 # 20 hours * 38 weeks * £6.07 per hour (2025 rate)
121+
extended_childcare_entitlement: 4_611.457 # 20 hours * 38 weeks * £6.07 per hour (2025 rate)
122122

123123
- name: Child using fewer hours than maximum entitlement - multiple children
124124
period: 2025
125-
absolute_error_margin: 100
125+
absolute_error_margin: 1
126126
input:
127127
people:
128128
child1:
@@ -136,4 +136,57 @@
136136
members: [child1, child2]
137137
extended_childcare_entitlement_eligible: true
138138
output:
139-
extended_childcare_entitlement: 6705.43 # (10 hours * 38 weeks * £8.58 per hour) + (15 hours * 38 weeks * £6.07 per hour) for 2025 rates
139+
extended_childcare_entitlement: 6_705.434 # Updated to match actual calculation
140+
141+
- name: Benefit unit maximum hours cap applied
142+
period: 2025
143+
absolute_error_margin: 1
144+
input:
145+
people:
146+
child1:
147+
age: 3
148+
max_free_entitlement_hours_used: 30
149+
child2:
150+
age: 3
151+
max_free_entitlement_hours_used: 30
152+
benunits:
153+
benunit1:
154+
members: [child1, child2]
155+
extended_childcare_entitlement_eligible: true
156+
maximum_extended_childcare_hours_usage: 40
157+
output:
158+
extended_childcare_entitlement: 13_834.37
159+
160+
161+
- name: Benefit unit without maximum hours cap applied
162+
period: 2025
163+
absolute_error_margin: 1
164+
input:
165+
people:
166+
child1:
167+
age: 3
168+
max_free_entitlement_hours_used: 30
169+
benunits:
170+
benunit1:
171+
members: [child1]
172+
extended_childcare_entitlement_eligible: true
173+
maximum_extended_childcare_hours_usage: 10
174+
output:
175+
extended_childcare_entitlement: 2_306.6
176+
177+
178+
- name: Benefit unit without maximum hours cap applied with 3 years old child
179+
period: 2025
180+
absolute_error_margin: 1
181+
input:
182+
people:
183+
child1:
184+
age: 3
185+
max_free_entitlement_hours_used: 15
186+
benunits:
187+
benunit1:
188+
members: [child1]
189+
extended_childcare_entitlement_eligible: true
190+
maximum_extended_childcare_hours_usage: 18
191+
output:
192+
extended_childcare_entitlement: 3_459.5

policyengine_uk/variables/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ def formula(benunit, period, parameters):
2727
# Use the appropriate hours based on the condition
2828
weekly_hours_to_use = min_(max_hours_used, weekly_hours_per_child)
2929

30+
# Get the maximum hours usage for this benefit unit
31+
maximum_hours_usage = benunit(
32+
"maximum_extended_childcare_hours_usage", period
33+
)
34+
35+
# Apply the maximum hours limit
36+
weekly_hours_to_use = min_(
37+
weekly_hours_to_use, benunit.project(maximum_hours_usage)
38+
)
39+
3040
# Compute weekly subsidy per child
3141
weekly_subsidy_per_child = (
3242
weekly_hours_to_use * p.childcare_funding_rate.calc(age)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class maximum_extended_childcare_hours_usage(Variable):
5+
value_type = float
6+
entity = BenUnit
7+
label = "maximum extended childcare hours used"
8+
documentation = "The maximum number of weekly extended childcare hours that this family uses"
9+
definition_period = YEAR
10+
default_value = 30 # By default, uses up to 30 hours per week

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"sphinx-math-dollar>=1.2.1,<2",
4444
"wheel",
4545
"yaml-changelog>=0.1.7",
46+
"snowballstemmer>=2,<3",
4647
]
4748
},
4849
# Windows CI requires Python 3.9.

0 commit comments

Comments
 (0)