Skip to content

Commit 3be27a8

Browse files
authored
Merge pull request #1594 from PolicyEngine/add-disabled-students-allowance
Add Disabled Students' Allowance
2 parents a9c790a + 35510e3 commit 3be27a8

14 files changed

Lines changed: 270 additions & 0 deletions
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add a first-pass Disabled Students' Allowance model for England higher-education students.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
description: Maximum Disabled Students' Allowance for higher-education students in England.
2+
values:
3+
2025-01-01: 27_783
4+
2026-01-01: 27_783
5+
metadata:
6+
unit: currency-GBP
7+
period: year
8+
label: Disabled Students' Allowance maximum amount
9+
reference:
10+
- title: Help if you're a student with a learning difficulty, health problem or disability
11+
href: https://www.gov.uk/disabled-students-allowance-dsa

policyengine_uk/programs.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,18 @@ programs:
397397
verified_start_year: 2025
398398
notes: First-pass England model using the published initial contribution and household-income reduction formula, with explicit placement and eligible-expense inputs because the survey does not observe reimbursable travel costs
399399

400+
- id: disabled_students_allowance
401+
name: Disabled Students' Allowance
402+
full_name: Student Finance England Disabled Students' Allowance
403+
category: Benefits
404+
agency: DfE
405+
status: partial
406+
coverage: England
407+
variable: disabled_students_allowance
408+
parameter_prefix: gov.dfe.disabled_students_allowance
409+
verified_start_year: 2025
410+
notes: First-pass England model using the published annual cap, higher-education evidence as the default course proxy, a narrow qualifying-condition proxy with explicit override, and explicit disability-related study support costs
411+
400412
- id: bursary_fund_16_to_19
401413
name: 16 to 19 Bursary Fund
402414
full_name: 16 to 19 Bursary Fund
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
- name: Disabled Students' Allowance reimburses eligible support needs below the cap
2+
period: 2025
3+
input:
4+
people:
5+
student:
6+
age: 20
7+
current_education: TERTIARY
8+
is_disabled_for_benefits: true
9+
disabled_students_allowance_eligible_expenses: 12_000
10+
benunits:
11+
benunit:
12+
members: ["student"]
13+
households:
14+
household:
15+
members: ["student"]
16+
country: ENGLAND
17+
output:
18+
disabled_students_allowance_course_eligible: [true]
19+
disabled_students_allowance_has_qualifying_condition: [true]
20+
disabled_students_allowance_eligible: [true]
21+
disabled_students_allowance: [12_000]
22+
23+
- name: Disabled Students' Allowance is capped at the published annual maximum
24+
period: 2025
25+
input:
26+
people:
27+
student:
28+
age: 24
29+
current_education: TERTIARY
30+
is_disabled_for_benefits: true
31+
disabled_students_allowance_eligible_expenses: 30_000
32+
benunits:
33+
benunit:
34+
members: ["student"]
35+
households:
36+
household:
37+
members: ["student"]
38+
country: ENGLAND
39+
output:
40+
disabled_students_allowance: [27_783]
41+
42+
- name: Disabled Students' Allowance excludes equivalent support from another scheme
43+
period: 2025
44+
input:
45+
people:
46+
student:
47+
age: 22
48+
current_education: TERTIARY
49+
is_disabled_for_benefits: true
50+
disabled_students_allowance_eligible_expenses: 5_000
51+
disabled_students_allowance_receives_equivalent_support: true
52+
benunits:
53+
benunit:
54+
members: ["student"]
55+
households:
56+
household:
57+
members: ["student"]
58+
country: ENGLAND
59+
output:
60+
disabled_students_allowance_eligible: [false]
61+
disabled_students_allowance: [0]
62+
63+
- name: Disabled Students' Allowance default qualifying-condition proxy is narrow
64+
period: 2025
65+
input:
66+
people:
67+
student:
68+
age: 21
69+
current_education: TERTIARY
70+
disabled_students_allowance_eligible_expenses: 4_000
71+
benunits:
72+
benunit:
73+
members: ["student"]
74+
households:
75+
household:
76+
members: ["student"]
77+
country: ENGLAND
78+
output:
79+
disabled_students_allowance_has_qualifying_condition: [false]
80+
disabled_students_allowance_eligible: [false]
81+
disabled_students_allowance: [0]
82+
83+
- name: Disabled Students' Allowance accepts explicit condition and course overrides
84+
period: 2025
85+
input:
86+
people:
87+
student:
88+
age: 21
89+
current_education: POST_SECONDARY
90+
disabled_students_allowance_has_qualifying_condition: true
91+
disabled_students_allowance_course_eligible: true
92+
disabled_students_allowance_eligible_expenses: 4_000
93+
benunits:
94+
benunit:
95+
members: ["student"]
96+
households:
97+
household:
98+
members: ["student"]
99+
country: ENGLAND
100+
output:
101+
disabled_students_allowance_eligible: [true]
102+
disabled_students_allowance: [4_000]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class disabled_students_allowance(Variable):
5+
value_type = float
6+
entity = Person
7+
label = "Disabled Students' Allowance"
8+
documentation = (
9+
"Student Finance England Disabled Students' Allowance. "
10+
"The published rules provide an annual cap, but actual awards depend on an "
11+
"individual needs assessment rather than a public formula. This first-pass "
12+
"model therefore treats `disabled_students_allowance_eligible_expenses` as "
13+
"the assessed annual study-related support need, net of any required personal "
14+
"computer contribution and excluding ordinary student costs."
15+
)
16+
definition_period = YEAR
17+
quantity_type = FLOW
18+
unit = GBP
19+
defined_for = "disabled_students_allowance_eligible"
20+
21+
def formula(person, period, parameters):
22+
expenses = person("disabled_students_allowance_eligible_expenses", period)
23+
maximum = parameters(period).gov.dfe.disabled_students_allowance.maximum
24+
return min_(expenses, maximum)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class disabled_students_allowance_course_eligible(Variable):
5+
value_type = bool
6+
entity = Person
7+
label = "Course is eligible for Disabled Students' Allowance"
8+
documentation = (
9+
"Whether the person's course is eligible for Disabled Students' Allowance. "
10+
"This can be set explicitly in simulations. By default, the model uses the "
11+
"existing higher-education evidence proxy from the maintenance-loan model."
12+
)
13+
definition_period = YEAR
14+
set_input = set_input_dispatch_by_period
15+
16+
def formula(person, period, parameters):
17+
return person("maintenance_loan_in_higher_education", period)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class disabled_students_allowance_eligible(Variable):
5+
value_type = bool
6+
entity = Person
7+
label = "Eligible for Disabled Students' Allowance"
8+
documentation = (
9+
"Whether the person is eligible for Student Finance England Disabled "
10+
"Students' Allowance. This first-pass model uses the published England "
11+
"coverage rule, a higher-education default course proxy, a narrow "
12+
"qualifying-condition proxy with explicit override, and an explicit "
13+
"equivalent-support exclusion."
14+
)
15+
definition_period = YEAR
16+
defined_for = "would_claim_disabled_students_allowance"
17+
18+
def formula(person, period, parameters):
19+
in_england = person("maintenance_loan_in_england_system", period)
20+
course_eligible = person("disabled_students_allowance_course_eligible", period)
21+
qualifying_condition = person(
22+
"disabled_students_allowance_has_qualifying_condition", period
23+
)
24+
receives_equivalent_support = person(
25+
"disabled_students_allowance_receives_equivalent_support", period
26+
)
27+
expenses = person("disabled_students_allowance_eligible_expenses", period)
28+
29+
return (
30+
in_england
31+
& course_eligible
32+
& qualifying_condition
33+
& ~receives_equivalent_support
34+
& (expenses > 0)
35+
)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class disabled_students_allowance_eligible_expenses(Variable):
5+
value_type = float
6+
entity = Person
7+
label = "Eligible Disabled Students' Allowance expenses"
8+
documentation = (
9+
"Annual study-related disability support costs that Disabled Students' "
10+
"Allowance can reimburse. This should exclude ordinary student costs, any "
11+
"support already provided by another funding source, and any personal "
12+
"computer contribution the student must pay themselves."
13+
)
14+
definition_period = YEAR
15+
unit = GBP
16+
quantity_type = FLOW
17+
default_value = 0
18+
set_input = set_input_dispatch_by_period
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class disabled_students_allowance_has_qualifying_condition(Variable):
5+
value_type = bool
6+
entity = Person
7+
label = "Has a qualifying condition for Disabled Students' Allowance"
8+
documentation = (
9+
"Whether the person has a disability, long-term health condition, mental "
10+
"health condition, or specific learning difficulty that can qualify for "
11+
"Disabled Students' Allowance. This can be set explicitly in simulations. "
12+
"By default, the model uses observed disability-benefit receipt or explicit "
13+
"blindness input, which is narrower than the full legal concept."
14+
)
15+
definition_period = YEAR
16+
set_input = set_input_dispatch_by_period
17+
18+
def formula(person, period, parameters):
19+
return person("is_disabled_for_benefits", period) | person("is_blind", period)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class disabled_students_allowance_receives_equivalent_support(Variable):
5+
value_type = bool
6+
entity = Person
7+
label = "Receives equivalent support that excludes Disabled Students' Allowance"
8+
documentation = (
9+
"Whether the person receives equivalent disability-related study support "
10+
"from another funding source, such as an NHS Disabled Students' Allowance "
11+
"or social work bursary, and is therefore excluded from Student Finance "
12+
"England Disabled Students' Allowance."
13+
)
14+
definition_period = YEAR
15+
default_value = False
16+
set_input = set_input_dispatch_by_period

0 commit comments

Comments
 (0)