Skip to content

Medicaid work requirement uses unpopulated monthly_hours_worked variable #7492

@daphnehanse11

Description

@daphnehanse11

Summary

The Medicaid work requirement variable (medicaid_work_requirement_eligible) reads monthly_hours_worked, which is a pure input variable with no formula and no data in any dataset (national or state). This means the work requirement incorrectly disqualifies nearly all expansion adults starting in 2027 when OBBBA work requirements take effect.

Details

medicaid_work_requirement_eligible (line 16) uses:

monthly_hours_worked = person("monthly_hours_worked", period)
meets_monthly_work_hours = monthly_hours_worked >= p.monthly_hours_threshold  # 80 hours

But monthly_hours_worked is:

  • A pure input variable with no formula (variables/household/income/person/monthly_hours_worked.py)
  • Not present in state H5 datasets (checked staging/states/UT.h5 — only 182 variables, monthly_hours_worked not among them)
  • Present as an empty group in the national enhanced CPS
  • Returns zero for every person in microsimulations

Meanwhile, SNAP work requirements correctly use weekly_hours_worked_before_lsr, which IS populated from CPS data (~1.85M people with nonzero values in Utah alone).

Variable In dataset? Used by
weekly_hours_worked_before_lsr Yes SNAP ABAWD + general work requirements
hours_worked_last_week Yes State programs (DC, MD, IL)
monthly_hours_worked No Medicaid work requirements

Impact

For 2027+ microsimulations, the 80 hours/month threshold is never met (since monthly_hours_worked = 0 for everyone). Only people with exemptions (students, disabled, pregnant, parents with kids ≤13) pass the work requirement. In Utah this filters ~198k expansion adults down to ~53k — a massive undercount.

Suggested fix

Either:

  1. Add a formula to monthly_hours_worked deriving from hours_worked_last_week (e.g., hours_worked_last_week * 52 / 12) or weekly_hours_worked_before_lsr
  2. Change medicaid_work_requirement_eligible to use weekly_hours_worked_before_lsr (consistent with SNAP) and compare against a weekly threshold instead

Option 2 is probably more consistent with how SNAP handles it.

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