Skip to content

Universal hours and the 2-year-old offer start on the age at 6 October, not the term after the birthday #2588

Closed

Description

@juaristi22

Since 2.147.2 (#2570), working-parent hours start with the first 1 January, 1 April or 1 September after a child reaches the minimum age (extended_childcare_entitlement_term_share, SI 2022/1134 reg 27). The universal 15 hours and the 2-year-old offer still use the whole age on 6 October, the date the engine places birthdays around. #2570 lists this under "Not in this PR".

The rule

  • Universal hours start with the term after the third birthday: 1 April for a birthday from 1 January to 31 March, 1 September for 1 April to 31 August, and 1 January for 1 September to 31 December (SI 2014/2147 reg 3; DfE statutory guidance, A1.6).
  • The 2-year-old offer starts the same way after the second birthday (DfE guidance A1.4).

What the model does

universal_childcare_entitlement_eligible and targeted_childcare_entitlement test the whole age on 6 October of the model year. In model year Y:

  • Missed. A child born from 7 October to 31 December of Y−3 is 2 on 6 October, so it gets no universal hours. Under the rule it is funded from 1 January of Y+1, the spring term.
  • Over-credited. A child born from 1 April to 6 October of Y−3 is 3 on 6 October, so it gets the whole year. Under the rule it is funded only from 1 September or 1 January.
  • The 2-year-old offer has the same pattern one year down.

The two errors offset in a year's total hours only roughly. They disagree on who is funded in which term, which matters wherever a term is counted: DfE's January census and a reform's cost by term.

Proposed change

Give universal and targeted hours their own term share, as extended_childcare_entitlement_term_share does:

  • the share of the year's three terms that start after the third (or second) birthday;
  • read from the date of birth through utils.dates.term_starts;
  • multiplied into the universal base and the targeted amount, beside early_years_term_share_before_school;
  • eligibility needs a share above 0.

A household simulation that gives only a whole age is unchanged in the same way as #2570: the child is taken to be born on 6 April.

Context

Microcosm (PolicyEngine/microcosm#1338) now measures DfE's January registrations at the spring term. Its universal and 2-year-old rows count every child of the DfE age, mirroring the term-after-birthday start that the engine does not yet apply, so it can fit take-up against DfE without the engine's gap. Once this lands, the mirror can read the engine instead.

Related: #2570, #2567.

Activity

  1. self-assigned this
    on Oct 23, 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