From e6130044335cbbb6ba38a95dd129f3638174a05a Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:21:36 -0400 Subject: [PATCH 1/3] Block ACA eligibility after Medicaid work requirement failure --- changelog.d/fixed/6174.md | 1 + .../gov/aca/eligibility/pays_aca_premium.yaml | 40 ++++++++++++++++++ .../gov/aca/eligibility/pays_aca_premium.py | 1 + ...caid_ineligible_due_to_work_requirement.py | 42 +++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 changelog.d/fixed/6174.md create mode 100644 policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.py diff --git a/changelog.d/fixed/6174.md b/changelog.d/fixed/6174.md new file mode 100644 index 00000000000..5272fc4950f --- /dev/null +++ b/changelog.d/fixed/6174.md @@ -0,0 +1 @@ +- Treated people denied Medicaid by work requirements as ineligible for ACA marketplace premium payment and premium tax credits. diff --git a/policyengine_us/tests/policy/baseline/gov/aca/eligibility/pays_aca_premium.yaml b/policyengine_us/tests/policy/baseline/gov/aca/eligibility/pays_aca_premium.yaml index d89aaaac026..8347464d2e4 100644 --- a/policyengine_us/tests/policy/baseline/gov/aca/eligibility/pays_aca_premium.yaml +++ b/policyengine_us/tests/policy/baseline/gov/aca/eligibility/pays_aca_premium.yaml @@ -24,6 +24,46 @@ pays_aca_premium: false is_aca_ptc_eligible: false +- name: Failing Medicaid work requirements prevents ACA premium payment + period: 2027 + input: + age: 40 + medicaid_category: ADULT + immigration_status: CITIZEN + monthly_hours_worked: 0 + employment_income: 0 + medicaid_community_engagement_pass_through_eligible: false + is_aca_eshi_eligible: false + is_chip_eligible: false + is_medicare_eligible: false + aca_magi_fraction: 2.5 + output: + medicaid_work_requirement_eligible: false + is_medicaid_eligible: false + is_medicaid_ineligible_due_to_work_requirement: true + pays_aca_premium: false + is_aca_ptc_eligible: false + +- name: Non-Medicaid adult who fails work hours can still pay ACA premium + period: 2027 + input: + age: 40 + medicaid_category: NONE + immigration_status: CITIZEN + monthly_hours_worked: 0 + employment_income: 0 + medicaid_community_engagement_pass_through_eligible: false + is_aca_eshi_eligible: false + is_chip_eligible: false + is_medicare_eligible: false + aca_magi_fraction: 2.5 + output: + medicaid_work_requirement_eligible: false + is_medicaid_eligible: false + is_medicaid_ineligible_due_to_work_requirement: false + pays_aca_premium: true + is_aca_ptc_eligible: true + - name: Married filing separately can pay ACA premium without PTC period: 2026 input: diff --git a/policyengine_us/variables/gov/aca/eligibility/pays_aca_premium.py b/policyengine_us/variables/gov/aca/eligibility/pays_aca_premium.py index 9b518edf768..d6e72ea0de1 100644 --- a/policyengine_us/variables/gov/aca/eligibility/pays_aca_premium.py +++ b/policyengine_us/variables/gov/aca/eligibility/pays_aca_premium.py @@ -14,6 +14,7 @@ def formula(person, period, parameters): INELIGIBLE_COVERAGE = [ "is_medicaid_eligible", + "is_medicaid_ineligible_due_to_work_requirement", "is_chip_eligible", "is_basic_health_program_eligible", "is_aca_eshi_eligible", diff --git a/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.py b/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.py new file mode 100644 index 00000000000..efdf2d4a24c --- /dev/null +++ b/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.py @@ -0,0 +1,42 @@ +from policyengine_us.model_api import * + + +class is_medicaid_ineligible_due_to_work_requirement(Variable): + value_type = bool + entity = Person + label = "Ineligible for Medicaid due to a work requirement" + definition_period = YEAR + reference = "https://www.congress.gov/bill/119th-congress/house-bill/1/text" + + def formula(person, period, parameters): + category = person("medicaid_category", period) + federal_medicaid_eligible = ( + category != category.possible_values.NONE + ) & person("is_medicaid_immigration_status_eligible", period) + + federal_barred = False + p = parameters(period).gov.hhs.medicaid.eligibility.work_requirements + if p.applies: + applicable_adult = person( + "is_medicaid_work_requirement_applicable_adult", period + ) + work_requirement_eligible = person( + "medicaid_work_requirement_eligible", period + ) + federal_barred = ( + federal_medicaid_eligible + & applicable_adult + & ~work_requirement_eligible + ) + + ar_barred = False + ar_p = parameters(period).gov.states.ar.dhs.medicaid.work_requirements + if ar_p.applies: + in_ar = person.household("state_code_str", period) == "AR" + ar_barred = ( + in_ar + & federal_medicaid_eligible + & ~person("ar_medicaid_work_requirement_eligible", period) + ) + + return federal_barred | ar_barred From 378d1596609a47cd6d08b85bded6058703e80de7 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 22 Jun 2026 13:09:01 -0400 Subject: [PATCH 2/3] Fix changelog fragment path --- changelog.d/{fixed/6174.md => 6174.fixed.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename changelog.d/{fixed/6174.md => 6174.fixed.md} (100%) diff --git a/changelog.d/fixed/6174.md b/changelog.d/6174.fixed.md similarity index 100% rename from changelog.d/fixed/6174.md rename to changelog.d/6174.fixed.md From ef40f866da52c95bfc9ddd3f6100c62b123dafae Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 22 Jun 2026 13:21:09 -0400 Subject: [PATCH 3/3] Add Medicaid work requirement ineligibility tests --- ...id_ineligible_due_to_work_requirement.yaml | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.yaml b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.yaml new file mode 100644 index 00000000000..dbba4e8531f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_ineligible_due_to_work_requirement.yaml @@ -0,0 +1,51 @@ +- name: Federal applicable adult is barred when work requirements apply and are unmet + period: 2027 + input: + age: 40 + medicaid_category: ADULT + immigration_status: CITIZEN + monthly_hours_worked: 0 + employment_income: 0 + medicaid_community_engagement_pass_through_eligible: false + output: + medicaid_work_requirement_eligible: false + is_medicaid_work_requirement_applicable_adult: true + is_medicaid_ineligible_due_to_work_requirement: true + +- name: Federal applicable adult is not barred when work requirements are met + period: 2027 + input: + age: 40 + medicaid_category: ADULT + immigration_status: CITIZEN + monthly_hours_worked: 80 + output: + medicaid_work_requirement_eligible: true + is_medicaid_work_requirement_applicable_adult: true + is_medicaid_ineligible_due_to_work_requirement: false + +- name: Arkansas expansion adult is barred when state work requirements apply and are unmet + period: 2018 + input: + age: 40 + medicaid_category: ADULT + immigration_status: CITIZEN + medicaid_income_level: 0.9 + monthly_hours_worked: 0 + state_code: AR + output: + ar_medicaid_work_requirement_eligible: false + is_medicaid_ineligible_due_to_work_requirement: true + +- name: Arkansas expansion adult is not barred when state work requirements are met + period: 2018 + input: + age: 40 + medicaid_category: ADULT + immigration_status: CITIZEN + medicaid_income_level: 0.9 + monthly_hours_worked: 80 + state_code: AR + output: + ar_medicaid_work_requirement_eligible: true + is_medicaid_ineligible_due_to_work_requirement: false