You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Approved training is never set: the FRS build reads a train column that no FRS release has #560
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.
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