Skip to content

Funded early-years hours continue after a child starts school (reception in England, P1 in Scotland) #2567

Closed

Description

@juaristi22

England's universal 15 hours and working-parent hours test the child's age only, so a 4-year-old in reception keeps both: £7,535.40 in 2026-27 at 30 hours a week. DfE guidance gives no free hours on top of a state-funded reception place. Scotland's funded early learning and childcare (ELC) has the same age-only test, though starting P1 there is a legal bar.

The rule

  • Law (England). Both duties last until compulsory school age (Childcare Act 2006 s.7, 2016 Act s.1(2)(a), Education Act 1996 s.8); the regulations (SI 2014/2147, SI 2022/1134) don't mention reception.
  • Funding rule (England). A reception child is still entitled, but the council meets both duties through the reception place, funded from the schools block. The statutory guidance from April 2026 says children in state-funded or council-funded reception are "not entitled to any additional free hours outside their school reception class place" (footnotes 7 and 17; A4.8; C.6).
  • Edge cases. Deferred entry keeps the hours until reception or compulsory school age (C.6); part-time and parent-paid reception are unclear. Tax-Free Childcare and the 2-year-old offer (ends at 3) are unaffected.
  • Scotland. ELC is for children who have not started primary school (Education (Scotland) Act 1980 s.1(4B)); a deferred P1 year is funded (SSI 2021/67).

What the model does

On main (6c0feb3); the eligibility code is unchanged since 2.134.4:

Reproducer

Two working parents in England, one child, 2026; take-up and hours used left at their defaults (True, 30).

from importlib.metadata import version
from policyengine_uk import Simulation

print("policyengine-uk", version("policyengine-uk"))
Y = 2026

for label, age, edu in [("A: age 4, PRIMARY (reception)", 4, "PRIMARY"),
                        ("B: age 4, PRE_PRIMARY", 4, "PRE_PRIMARY"),
                        ("C: age 4, no education input", 4, None)]:
    child = {"age": {Y: age}}
    if edu:
        child["current_education"] = {Y: edu}
    people = {"parent1": {"age": {Y: 35}, "employment_income": {Y: 40_000}},
              "parent2": {"age": {Y: 35}, "employment_income": {Y: 30_000}},
              "child": child}
    sim = Simulation(situation={
        "people": people,
        "benunits": {"bu": {"members": list(people)}},
        "households": {"hh": {"members": list(people), "country": {Y: "ENGLAND"}}},
    })
    print(label, "| current_education:", sim.calculate("current_education", Y)[2])
    for v in ("universal_childcare_entitlement", "extended_childcare_entitlement_per_child"):
        print(f"  {v}: £{sim.calculate(v, Y)[2]:,.2f}")
policyengine-uk 2.146.2
A: age 4, PRIMARY (reception) | current_education: PRIMARY
  universal_childcare_entitlement: £3,767.70
  extended_childcare_entitlement_per_child: £3,767.70
B: age 4, PRE_PRIMARY | current_education: PRE_PRIMARY
  universal_childcare_entitlement: £3,767.70
  extended_childcare_entitlement_per_child: £3,767.70
C: age 4, no education input | current_education: NOT_COMPLETED_PRIMARY
  universal_childcare_entitlement: £3,767.70
  extended_childcare_entitlement_per_child: £3,767.70

Each line is 570 hours × £6.61 (15 hours a week); A should get £0. C shows the age fallback with no input.

Proposed change

  • A Person boolean such as early_years_child_in_school (name open): current_education is PRIMARY or later, and settable directly.
  • Add & ~early_years_child_in_school to universal_childcare_entitlement_eligible and extended_childcare_entitlement_qualifying_child. Both need it, because Preserve universal and targeted hours alongside extended childcare #2177 splits a child's hours between them. Scotland's eligibility and the Wales PR Add the Childcare Offer for Wales #2535, which has the same gap, can reuse it.
  • Inputs without current_education stay unchanged, since the fallback gives 4-year-olds NOT_COMPLETED_PRIMARY; a != PRE_PRIMARY test would drop every no-input 4-year-old.
  • Approximations: an annual model has no September switch, and PRIMARY includes fee-paying independent pupils, who can override the flag.
  • Tests: age 4 with PRIMARY, PRE_PRIMARY and no input; a family whose only child is in reception, and one with a 2-year-old too; test_childcare_entitlement_floor_properties.py. Coordinate with Make current_education and maintenance loan evidence independent of calculation order #2403, which rewrites current_education.

Data notes

  • policyengine-uk-data (frs.py) and Microcosm set PRIMARY from FRS TYPEED2 (code 2 is primary including reception), never NOT_COMPLETED_PRIMARY. For a 4-year-old that means reception at interview, carried into projected years; code 8 (any private school) can include independent nurseries.
  • Two mapping problems, a branch that puts some 4- and 5-year-olds in LOWER_SECONDARY and Microcosm's silent zero fill for a missing TYPEED2, will be raised in those repositories; they are why the variable counts PRIMARY or later.
  • policyengine-uk-data's take-up fit counts reception children (takeup_rate.py) against a DfE figure that excludes them (targets.py), so its childcare take-up rates need a refit once this lands.

Evidence

  • DfE (January 2026). The 1.13m 3- and 4-year-olds registered for universal hours include 375,700 in state-funded reception, where DfE treats the entitlement as met. Its count for early years entitlements only (751,000) excludes them. Working-parent registrations have no reception rows, and the methodology removes reception children before estimating working-parent eligibility.
  • Vahid's rerun on Microcosm a858c100 with policyengine-uk 2.134.4: 515k 3- and 4-year-olds on working-parent hours with reception children counted and 379k without, against DfE's 388.7k. 2026-27 early-years spending was £10.72bn as shipped against DfE's £9.9bn, with the reception children and the then-lower funding rates working in opposite directions.

Related: 9-11-month-olds

Working-parent hours start at 9 months (SI 2022/1134 reg 13), from the next 1 January, 1 April or 1 September (reg 27). The engine's rule is right and works for fractional ages, but survey ages are whole years, so no child aged 0 qualifies. DfE counted 30,700 registered 9-11-month-olds in January 2026; in Vahid's rerun, under-3s on working-parent hours were 438k against DfE's 501.7k, about 31k of the gap at 9-11 months.

The FRS has no birth month, so this belongs in policyengine-uk. The engine already spreads whole-year ages over the year (months_since_last_birthday, exact_age_in_months). Exact age alone would overshoot, because funding starts only at the next term. The rule should credit the share of the year's terms that start after the child turns 9 months, which also corrects age 1. It is here because the age rules are best tracked together, as Vahid asked.

Already upstream

DfE funding rates (#2465, first in 2.137.1), pension relief in adjusted net income (#2440, 2.134.8), and salary sacrifice above the April 2029 NI cap no longer raising adjusted net income (#2462, 2.141.8).

Context

Found while reconciling the static cost of removing the £100,000 limit with CenTax's (PolicyEngine/uk-childcare-100k-threshold#8, PolicyEngine/microcosm#1339). PolicyEngine/microcosm#1338 leaves reception children out of Microcosm's DfE targets; the engine still funds them.

Related: #2079 (added the age-only qualifying-child test), #2177, #2403, #2535, #1644, #2183, #2243, PolicyEngine/policyengine-uk-data#474, PolicyEngine/policyengine-uk-data#547 (ages in months for children aged 0, on the data side).

@vahid-ahmadi, this is the issue you offered to open on PolicyEngine/uk-childcare-100k-threshold#8, with the 9-11-month-olds included.

Activity

  1. self-assigned this
    on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions