Skip to content

Approved training is never set: the FRS build reads a train column that no FRS release has #560

Open

Description

@MaxGhenis

Summary

is_in_approved_training is false for every person in the FRS and enhanced FRS datasets. derive_is_in_approved_training_from_frs_person reads a train column, and returns False for everyone when it is missing (frs.py:367-376). No FRS release has that column: the adult tables for 2020-21, 2022-23, 2023-24 and 2024-25 carry TRAIN2 and TRAINEE, and the child tables carry TRAINEE.

Who it affects

DWP's FRS counts a 16- to 19-year-old as a dependent child only when they are "in full-time non-advanced education or in unwaged Government training", unmarried and living with their parents. So a child-table record aged 16 to 19 outside full-time education is a government trainee.

FRS 2024-25 confirms it. Of the 860 child-table records aged 16 to 19, 20 have EDUCFT = 2 (not in full-time education), and all 20 have TRAINEE = 1:

Age Records Grossed (GROSS4)
16 6 13.2k
17 6 3.8k
18 1 2.5k
19 7 13.4k
16 to 19 20 33.0k

uk-data codes all 20 as NOT_IN_EDUCATION with is_in_approved_training false. In policyengine-uk they then fail the education-or-training condition of the qualifying-young-person tests for Universal Credit (reg 5(1)(b)), Pension Credit (reg 4A(1)(b)), Child Benefit and Child Tax Credit, each of which reads is_in_non_advanced_education | is_in_approved_training. In the released enhanced_frs_2024_25.h5 (uk-data 1.58.0) 74 persons are copies of these 20 records, with 12.2k of weight, and none is flagged.

No adult-table record has TRAINEE = 1 in 2024-25 (250 answer 2; the rest are blank).

Why it went unnoticed

  • The function defaults to False when the column is missing, so the build never failed.
  • Its tests pass a synthetic train column.
  • The code list it applies (1 to 9 as schemes, "10 or 13 for None of these") does not fit TRAIN2 either: in 2024-25, 4,879 adult records have TRAIN2 = 9, 28 have 1 to 8 and 2 have 10. The value labels for TRAIN2 are not in this repo, so the fix does not use it.

Fix

Read TRAINEE = 1 ("Whether on a government scheme for employment training"; the FRS dictionary gives it the same yes/no value format as EDUCFT), and fail the build when the column is missing.

Found while checking how PolicyEngine/policyengine-uk#2279 (the UC reg 5(1)(a) route for 16-year-olds) reaches the data: the six 16-year-old trainees are the only 16-year-olds outside education who sit in a parent's benefit unit.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    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