Skip to content

Commit 166e1a3

Browse files
committed
Update Medicaid work requirement implementation
1 parent 1102f57 commit 166e1a3

7 files changed

Lines changed: 126 additions & 16 deletions

File tree

policyengine_us/parameters/gov/hhs/medicaid/eligibility/work_requirements/applies.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
description: The Department of Health and Human Services limits Medicaid to filers who meet work requirements, if this is true.
1+
description: The Department of Health and Human Services limits Medicaid adult group eligibility to applicable individuals who meet work requirements, if this is true.
22

33
values:
44
0000-01-01: false
@@ -11,3 +11,5 @@ metadata:
1111
reference:
1212
- title: H.R.1 - One Big Beautiful Bill Act
1313
href: https://www.congress.gov/bill/119th-congress/house-bill/1/text
14+
- title: CMCS Informational Bulletin, Dec. 8, 2025
15+
href: https://www.medicaid.gov/federal-policy-guidance/downloads/cib12082025.pdf
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
description: The Department of Health and Human Services excludes individuals below this age who are in the former foster care Medicaid eligibility group from Medicaid work requirements.
2+
3+
values:
4+
2027-01-01: 26
5+
6+
metadata:
7+
unit: year
8+
label: Medicaid work requirement former foster care age limit
9+
period: year
10+
reference:
11+
- title: H.R.1 - One Big Beautiful Bill Act
12+
href: https://www.congress.gov/bill/119th-congress/house-bill/1/text
13+
- title: CMCS Informational Bulletin, Dec. 8, 2025
14+
href: https://www.medicaid.gov/federal-policy-guidance/downloads/cib12082025.pdf#page=5

policyengine_us/parameters/gov/hhs/medicaid/eligibility/work_requirements/monthly_hours_threshold.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
description: The Department of Health and Human Services limits Medicaid to individuals working more than this number of monthly hours.
1+
description: The Department of Health and Human Services allows applicable individuals to meet Medicaid work requirements by working at least this number of monthly hours.
22

33
values:
44
2027-01-01: 80
@@ -10,3 +10,5 @@ metadata:
1010
reference:
1111
- title: H.R.1 - One Big Beautiful Bill Act
1212
href: https://www.congress.gov/bill/119th-congress/house-bill/1/text
13+
- title: CMCS Informational Bulletin, Dec. 8, 2025
14+
href: https://www.medicaid.gov/federal-policy-guidance/downloads/cib12082025.pdf#page=5

policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_eligible.yaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,3 +170,28 @@
170170
output:
171171
medicaid_category: SENIOR_OR_DISABLED
172172
is_medicaid_eligible: true
173+
174+
- name: Case 4, adult group enrollee is ineligible when work requirements apply and are unmet.
175+
period: 2027
176+
input:
177+
medicaid_category: ADULT
178+
immigration_status: CITIZEN
179+
output:
180+
is_medicaid_eligible: false
181+
182+
- name: Case 5, parent category remains eligible when adult group work requirements apply.
183+
period: 2027
184+
input:
185+
medicaid_category: PARENT
186+
immigration_status: CITIZEN
187+
output:
188+
is_medicaid_eligible: true
189+
190+
- name: Case 6, adult group enrollee meets work requirements through the income safe harbor.
191+
period: 2027
192+
input:
193+
medicaid_category: ADULT
194+
immigration_status: CITIZEN
195+
employment_income: 6_960
196+
output:
197+
is_medicaid_eligible: true

policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/medicaid_work_requirement_eligible.yaml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,44 @@
8686
is_tax_unit_dependent: true
8787
output:
8888
medicaid_work_requirement_eligible: [false, true]
89+
90+
- name: Case 10, half-time college student meets the work requirement.
91+
period: 2027
92+
input:
93+
age: 30
94+
is_part_time_college_student: true
95+
output:
96+
medicaid_work_requirement_eligible: true
97+
98+
- name: Case 11, monthly income at the federal minimum wage safe harbor meets the work requirement.
99+
period: 2027
100+
input:
101+
age: 30
102+
employment_income: 6_960
103+
output:
104+
medicaid_work_requirement_eligible: true
105+
106+
- name: Case 12, former foster care youth is excluded from the work requirement.
107+
period: 2027
108+
input:
109+
age: 25
110+
was_in_foster_care: true
111+
output:
112+
medicaid_work_requirement_eligible: true
113+
114+
- name: Case 13, Medicare-eligible adult is excepted from the work requirement.
115+
period: 2027
116+
input:
117+
age: 30
118+
social_security_disability: 1_000
119+
months_receiving_social_security_disability: 24
120+
output:
121+
medicaid_work_requirement_eligible: true
122+
123+
- name: Case 14, incarcerated adult is excluded from the work requirement.
124+
period: 2027
125+
input:
126+
age: 30
127+
is_incarcerated: true
128+
output:
129+
medicaid_work_requirement_eligible: true

policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,22 @@ def formula(person, period, parameters):
2121
il_hbi_eligible = person("il_hbi_eligible", period)
2222

2323
p = parameters(period).gov.hhs.medicaid.eligibility
24+
federal_medicaid_eligible = (
25+
categorically_eligible & immigration_status_eligible
26+
)
2427
if p.work_requirements.applies:
2528
work_requirement_eligible = person(
2629
"medicaid_work_requirement_eligible", period
2730
)
31+
adult_group = category == category.possible_values.ADULT
2832
return (
29-
(
30-
categorically_eligible
31-
& immigration_status_eligible
32-
& work_requirement_eligible
33-
)
33+
federal_medicaid_eligible
34+
& (~adult_group | work_requirement_eligible)
3435
| ca_ffyp_eligible
3536
| il_hbi_eligible
3637
)
3738
return (
38-
(categorically_eligible & immigration_status_eligible)
39+
federal_medicaid_eligible
3940
| ca_ffyp_eligible
4041
| il_hbi_eligible
4142
)

policyengine_us/variables/gov/hhs/medicaid/eligibility/medicaid_work_requirement_eligible.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,39 @@ class medicaid_work_requirement_eligible(Variable):
66
entity = Person
77
label = "Eligible person for Medicaid via work requirement"
88
definition_period = YEAR
9-
reference = "https://www.congress.gov/bill/119th-congress/house-bill/1/text"
9+
reference = (
10+
"https://www.congress.gov/bill/119th-congress/house-bill/1/text",
11+
"https://www.medicaid.gov/federal-policy-guidance/downloads/cib12082025.pdf",
12+
)
1013

1114
def formula(person, period, parameters):
1215
p = parameters(period).gov.hhs.medicaid.eligibility.work_requirements
1316
# Works no less than 80 hours p.680 (2)(A)
1417
monthly_hours_worked = person("monthly_hours_worked", period)
1518
meets_monthly_work_hours = monthly_hours_worked >= p.monthly_hours_threshold
16-
# The individual is enrolled in an educational program at least half-time. p.680 (2)(D)
17-
is_full_time_student = person("is_full_time_student", period)
18-
# pregnant or postpartum medical assistance p.681 (3)(A)(i)(II)(bb)
19-
is_pregnant = person("is_pregnant", period)
19+
# Monthly income of at least federal minimum wage times 80 hours.
20+
monthly_income_threshold = (
21+
parameters(period).gov.dol.minimum_wage * p.monthly_hours_threshold
22+
)
23+
meets_monthly_income = person("earned_income", period) >= (
24+
monthly_income_threshold * MONTHS_IN_YEAR
25+
)
26+
# The individual is enrolled in an educational program at least half-time.
27+
is_enrolled_at_least_half_time = person(
28+
"is_full_time_student", period
29+
) | person("is_part_time_college_student", period)
30+
# Pregnant or postpartum medical assistance.
31+
is_pregnant_or_postpartum = person("is_pregnant_for_medicaid_nfc", period)
2032
# Has attained age of 19 and is under 65 is require to work p.693 (bb)
2133
age = person("age", period)
2234
work_required_age = p.age_range.calc(age)
35+
# Former foster care Medicaid eligibility group.
36+
was_in_foster_care = person("was_in_foster_care", period)
37+
former_foster_care_youth = was_in_foster_care & (
38+
age < p.former_foster_care_age_limit
39+
)
40+
# Entitled to or enrolled in Medicare Part A or B.
41+
medicare_eligible = person("is_medicare_eligible", period)
2342
# parent, guardian, caretaker of a disabled person
2443
is_dependent = person("is_tax_unit_dependent", period)
2544
is_disabled = person("is_disabled", period)
@@ -34,18 +53,24 @@ def formula(person, period, parameters):
3453
is_blind = person("is_blind", period)
3554
is_incapable_of_self_care = person("is_incapable_of_self_care", period)
3655
eligible_disabled = is_blind | is_disabled | is_incapable_of_self_care
56+
is_incarcerated = person("is_incarcerated", period)
3757
# parent, guardian, caretaker of a dependent child 13 years of age or under p.694 (III)
3858
child_age_eligible = age <= p.dependent_age_limit
3959
has_eligible_dependent_child = person.tax_unit.any(
4060
is_dependent & child_age_eligible
4161
)
4262
exempted_from_work = (
43-
is_full_time_student
44-
| is_pregnant
63+
is_enrolled_at_least_half_time
64+
| is_pregnant_or_postpartum
65+
| former_foster_care_youth
66+
| medicare_eligible
4567
| has_disabled
4668
| eligible_veteran
4769
| eligible_disabled
70+
| is_incarcerated
71+
)
72+
meets_base_requirement = (
73+
meets_monthly_work_hours | meets_monthly_income | exempted_from_work
4874
)
49-
meets_base_requirement = meets_monthly_work_hours | exempted_from_work
5075
meets_conditions = meets_base_requirement | has_eligible_dependent_child
5176
return where(work_required_age, meets_conditions, True)

0 commit comments

Comments
 (0)