Skip to content

Commit 181afd2

Browse files
authored
Merge pull request #1587 from PolicyEngine/fix-560-maintenance-loans-followup
Tighten maintenance loan proxy logic
2 parents 78e2550 + ff4a6ce commit 181afd2

13 files changed

Lines changed: 705 additions & 38 deletions
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix maintenance loan proxy logic to require explicit higher-education evidence and improve sponsor-income assessment.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Add an approximate England full-time maintenance loan model, with explicit override inputs for living arrangement and assessed household income.

policyengine_uk/tests/policy/baseline/gov/dfe/maintenance_loans/maintenance_loan.yaml

Lines changed: 338 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,43 @@
137137
output:
138138
maintenance_loan: [0]
139139

140+
- name: Maintenance loan - missing higher-education input does not use age fallback
141+
period: 2025
142+
input:
143+
people:
144+
student:
145+
age: 19
146+
benunits:
147+
benunit:
148+
members: ["student"]
149+
households:
150+
household:
151+
members: ["student"]
152+
country: ENGLAND
153+
output:
154+
maintenance_loan_eligible: [false]
155+
maintenance_loan: [0]
156+
157+
- name: Maintenance loan - explicit current-year non-HE overrides in_HE flag
158+
period: 2025
159+
input:
160+
people:
161+
student:
162+
age: 21
163+
current_education: POST_SECONDARY
164+
in_HE: true
165+
benunits:
166+
benunit:
167+
members: ["student"]
168+
households:
169+
household:
170+
members: ["student"]
171+
country: ENGLAND
172+
output:
173+
maintenance_loan_in_higher_education: [false]
174+
maintenance_loan_eligible: [false]
175+
maintenance_loan: [0]
176+
140177
- name: Maintenance loan living arrangement proxy detects parental household
141178
period: 2025
142179
input:
@@ -165,6 +202,307 @@
165202
maintenance_loan_living_arrangement: [AWAY_OUTSIDE_LONDON, LIVING_WITH_PARENTS]
166203
maintenance_loan_household_income: [30_000, 32_000]
167204

205+
- name: Maintenance loan proxy ignores older HE adults as sponsors
206+
period: 2025
207+
input:
208+
people:
209+
older_student:
210+
age: 26
211+
in_HE: true
212+
adjusted_net_income: 20_000
213+
is_household_head: true
214+
student:
215+
age: 19
216+
current_education: TERTIARY
217+
adjusted_net_income: 5_000
218+
is_household_head: false
219+
benunits:
220+
older_student_benunit:
221+
members: ["older_student"]
222+
student_benunit:
223+
members: ["student"]
224+
households:
225+
household:
226+
members: ["older_student", "student"]
227+
country: ENGLAND
228+
region: NORTH_WEST
229+
output:
230+
maintenance_loan_has_sponsor: [false, false]
231+
maintenance_loan_sponsor_income: [0, 0]
232+
maintenance_loan_household_income: [20_000, 5_000]
233+
234+
- name: Maintenance loan proxy ignores ambiguous 25-29 adults without explicit education evidence
235+
period: 2025
236+
input:
237+
people:
238+
older_adult:
239+
age: 26
240+
adjusted_net_income: 20_000
241+
is_household_head: true
242+
student:
243+
age: 19
244+
current_education: TERTIARY
245+
adjusted_net_income: 5_000
246+
is_household_head: false
247+
benunits:
248+
older_adult_benunit:
249+
members: ["older_adult"]
250+
student_benunit:
251+
members: ["student"]
252+
households:
253+
household:
254+
members: ["older_adult", "student"]
255+
country: ENGLAND
256+
region: NORTH_WEST
257+
output:
258+
maintenance_loan_has_sponsor: [false, false]
259+
maintenance_loan_sponsor_income: [0, 0]
260+
maintenance_loan_household_income: [20_000, 5_000]
261+
262+
- name: Maintenance loan household income proxy includes younger sponsor adults
263+
period: 2025
264+
input:
265+
people:
266+
parent:
267+
age: 29
268+
current_education: NOT_IN_EDUCATION
269+
adjusted_net_income: 30_000
270+
is_household_head: true
271+
student:
272+
age: 19
273+
current_education: TERTIARY
274+
adjusted_net_income: 5_000
275+
is_household_head: false
276+
benunits:
277+
parent_benunit:
278+
members: ["parent"]
279+
student_benunit:
280+
members: ["student"]
281+
households:
282+
household:
283+
members: ["parent", "student"]
284+
country: ENGLAND
285+
output:
286+
maintenance_loan_sponsor_income: [0, 30_000]
287+
maintenance_loan_has_sponsor: [false, true]
288+
maintenance_loan_household_income: [30_000, 35_000]
289+
290+
- name: Maintenance loan sponsor proxy uses nearest older sponsor benunit
291+
period: 2025
292+
input:
293+
people:
294+
grandparent:
295+
age: 62
296+
current_education: NOT_IN_EDUCATION
297+
adjusted_net_income: 40_000
298+
is_household_head: true
299+
parent:
300+
age: 45
301+
current_education: NOT_IN_EDUCATION
302+
adjusted_net_income: 30_000
303+
is_household_head: false
304+
student:
305+
age: 19
306+
current_education: TERTIARY
307+
adjusted_net_income: 5_000
308+
is_household_head: false
309+
benunits:
310+
grandparent_benunit:
311+
members: ["grandparent"]
312+
parent_benunit:
313+
members: ["parent"]
314+
student_benunit:
315+
members: ["student"]
316+
households:
317+
household:
318+
members: ["grandparent", "parent", "student"]
319+
country: ENGLAND
320+
region: NORTH_WEST
321+
output:
322+
maintenance_loan_sponsor_income: [0, 0, 30_000]
323+
maintenance_loan_household_income: [40_000, 30_000, 35_000]
324+
325+
- name: Maintenance loan sponsor detection survives zero sponsor income
326+
period: 2025
327+
input:
328+
people:
329+
parent:
330+
age: 45
331+
current_education: NOT_IN_EDUCATION
332+
adjusted_net_income: 0
333+
is_household_head: true
334+
student:
335+
age: 19
336+
current_education: TERTIARY
337+
adjusted_net_income: 5_000
338+
is_household_head: false
339+
benunits:
340+
parent_benunit:
341+
members: ["parent"]
342+
student_benunit:
343+
members: ["student"]
344+
households:
345+
household:
346+
members: ["parent", "student"]
347+
country: ENGLAND
348+
region: NORTH_WEST
349+
output:
350+
maintenance_loan_has_sponsor: [false, true]
351+
maintenance_loan_living_arrangement: [AWAY_OUTSIDE_LONDON, LIVING_WITH_PARENTS]
352+
maintenance_loan_household_income: [0, 5_000]
353+
354+
- name: Maintenance loan sponsor income sums both parents in the same sponsor benunit
355+
period: 2025
356+
input:
357+
people:
358+
parent_1:
359+
age: 45
360+
current_education: NOT_IN_EDUCATION
361+
adjusted_net_income: 30_000
362+
is_household_head: true
363+
parent_2:
364+
age: 43
365+
current_education: NOT_IN_EDUCATION
366+
adjusted_net_income: 20_000
367+
is_household_head: false
368+
student:
369+
age: 19
370+
current_education: TERTIARY
371+
adjusted_net_income: 5_000
372+
is_household_head: false
373+
benunits:
374+
parent_benunit:
375+
members: ["parent_1", "parent_2"]
376+
student_benunit:
377+
members: ["student"]
378+
households:
379+
household:
380+
members: ["parent_1", "parent_2", "student"]
381+
country: ENGLAND
382+
region: NORTH_WEST
383+
output:
384+
maintenance_loan_sponsor_income: [0, 0, 50_000]
385+
maintenance_loan_household_income: [50_000, 50_000, 55_000]
386+
387+
- name: Maintenance loan household income proxy does not double count partner income
388+
period: 2025
389+
input:
390+
people:
391+
parent:
392+
age: 45
393+
current_education: NOT_IN_EDUCATION
394+
adjusted_net_income: 30_000
395+
is_household_head: true
396+
student:
397+
age: 20
398+
current_education: TERTIARY
399+
adjusted_net_income: 5_000
400+
is_household_head: false
401+
partner:
402+
age: 21
403+
current_education: NOT_IN_EDUCATION
404+
adjusted_net_income: 10_000
405+
is_household_head: false
406+
benunits:
407+
parent_benunit:
408+
members: ["parent"]
409+
student_benunit:
410+
members: ["student", "partner"]
411+
households:
412+
household:
413+
members: ["parent", "student", "partner"]
414+
country: ENGLAND
415+
output:
416+
maintenance_loan_household_income: [30_000, 15_000, 15_000]
417+
418+
- name: Maintenance loan proxy treats lone parents as independent
419+
period: 2025
420+
input:
421+
people:
422+
grandparent:
423+
age: 55
424+
current_education: NOT_IN_EDUCATION
425+
adjusted_net_income: 25_000
426+
is_household_head: true
427+
student:
428+
age: 21
429+
current_education: TERTIARY
430+
adjusted_net_income: 6_000
431+
is_household_head: false
432+
is_parent: true
433+
child:
434+
age: 1
435+
is_child: true
436+
benunits:
437+
grandparent_benunit:
438+
members: ["grandparent"]
439+
student_benunit:
440+
members: ["student", "child"]
441+
households:
442+
household:
443+
members: ["grandparent", "student", "child"]
444+
country: ENGLAND
445+
region: NORTH_WEST
446+
output:
447+
maintenance_loan_living_arrangement: [AWAY_OUTSIDE_LONDON, AWAY_OUTSIDE_LONDON, AWAY_OUTSIDE_LONDON]
448+
maintenance_loan_household_income: [25_000, 6_000, 6_000]
449+
450+
- name: Maintenance loan proxy does not treat older renters as parents
451+
period: 2025
452+
input:
453+
people:
454+
flatmate:
455+
age: 40
456+
current_education: NOT_IN_EDUCATION
457+
adjusted_net_income: 25_000
458+
is_household_head: true
459+
student:
460+
age: 20
461+
current_education: TERTIARY
462+
adjusted_net_income: 4_000
463+
is_household_head: false
464+
benunits:
465+
flatmate_benunit:
466+
members: ["flatmate"]
467+
student_benunit:
468+
members: ["student"]
469+
households:
470+
household:
471+
members: ["flatmate", "student"]
472+
country: ENGLAND
473+
region: LONDON
474+
tenure_type: RENT_PRIVATELY
475+
output:
476+
maintenance_loan_living_arrangement: [AWAY_IN_LONDON, AWAY_IN_LONDON]
477+
maintenance_loan_household_income: [25_000, 4_000]
478+
479+
- name: Maintenance loan household income proxy keeps sponsor income when arrangement is set away from home
480+
period: 2025
481+
input:
482+
people:
483+
parent:
484+
age: 45
485+
current_education: NOT_IN_EDUCATION
486+
adjusted_net_income: 30_000
487+
is_household_head: true
488+
student:
489+
age: 19
490+
current_education: TERTIARY
491+
adjusted_net_income: 5_000
492+
maintenance_loan_living_arrangement: AWAY_OUTSIDE_LONDON
493+
is_household_head: false
494+
benunits:
495+
parent_benunit:
496+
members: ["parent"]
497+
student_benunit:
498+
members: ["student"]
499+
households:
500+
household:
501+
members: ["parent", "student"]
502+
country: ENGLAND
503+
output:
504+
maintenance_loan_household_income: [30_000, 35_000]
505+
168506
- name: Full-time maintenance loan - 2026 full rate uprates to latest published schedule
169507
period: 2026
170508
input:

0 commit comments

Comments
 (0)