diff --git a/changelog.d/codex-issue-8272-ar-medicaid-work-requirement.added.md b/changelog.d/codex-issue-8272-ar-medicaid-work-requirement.added.md new file mode 100644 index 00000000000..0d6bb9f06fe --- /dev/null +++ b/changelog.d/codex-issue-8272-ar-medicaid-work-requirement.added.md @@ -0,0 +1 @@ +Add an annual approximation of the 2018-2019 Arkansas Works Medicaid work requirement. diff --git a/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/age_range.yaml b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/age_range.yaml new file mode 100644 index 00000000000..5beb3f9b077 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/age_range.yaml @@ -0,0 +1,33 @@ +description: Arkansas requires adults within these age brackets to meet this Medicaid work requirement approximation under the Arkansas Works program. + +metadata: + threshold_unit: year + amount_unit: bool + period: year + type: single_amount + label: Arkansas Medicaid work requirement age threshold + reference: + - title: State Data for Medicaid Work Requirements in Arkansas | KFF + href: https://www.kff.org/medicaid/issue-brief/state-data-for-medicaid-work-requirements-in-arkansas/ + - title: State Annual Report January-December 2018 | Arkansas Works Section 1115 + href: https://www.medicaid.gov/Medicaid-CHIP-Program-Information/By-Topics/Waivers/1115/downloads/ar/Health-Care-Independence-Program-Private-Option/ar-works-annl-rpt-jan-dec-2018.pdf#page=11 + +brackets: + - threshold: + 2018-01-01: 0 + amount: + 2018-01-01: false + - threshold: + 2018-01-01: 30 + amount: + 2018-01-01: true + - threshold: + 2018-01-01: 50 + amount: + 2018-01-01: false + +# Annual approximation note: +# - The 2018 phase-in covered ages 30-49. +# - The 2019 19-29 phase-in is intentionally not modeled here because it was only +# partially rolled out before the court halted enforcement, which would overstate +# annual effects in default yearly data. diff --git a/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/applies.yaml b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/applies.yaml new file mode 100644 index 00000000000..132a36ab97c --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/applies.yaml @@ -0,0 +1,22 @@ +description: Arkansas limits Medicaid expansion coverage to adults who meet a work requirement under the Arkansas Works program, if this is true. + +values: + 0000-01-01: false + 2018-01-01: true + 2020-01-01: false + +metadata: + unit: bool + period: year + label: Arkansas Medicaid work requirement applies + reference: + - title: Arkansas Works | Medicaid + href: https://www.medicaid.gov/medicaid/section-1115-demo/demonstration-and-waiver-list/81021 + - title: State Annual Report January-December 2018 | Arkansas Works Section 1115 + href: https://www.medicaid.gov/Medicaid-CHIP-Program-Information/By-Topics/Waivers/1115/downloads/ar/Health-Care-Independence-Program-Private-Option/ar-works-annl-rpt-jan-dec-2018.pdf#page=11 + +# Annual approximation note: +# - The underlying waiver operated monthly starting June 1, 2018 and was set aside +# by a court in March 2019. +# - PolicyEngine's default microdata are annual, so this parameter turns the rule on +# for calendar years 2018 and 2019 and documents the approximation in code/tests. diff --git a/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/dependent_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/dependent_age_limit.yaml new file mode 100644 index 00000000000..c57958ae11a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/dependent_age_limit.yaml @@ -0,0 +1,14 @@ +description: Arkansas exempts adults caring for a dependent child at or below this age from the Medicaid work requirement approximation under the Arkansas Works program. + +values: + 2018-01-01: 17 + +metadata: + unit: year + period: year + label: Arkansas Medicaid work requirement dependent child age limit + reference: + - title: Arkansas Works Program Updates | Arkansas Code Rule 016.20.18 Ark. Code R. 003 + href: https://www.law.cornell.edu/regulations/arkansas/016-20-18-Ark-Code-R-003 + - title: State Data for Medicaid Work Requirements in Arkansas | KFF + href: https://www.kff.org/medicaid/issue-brief/state-data-for-medicaid-work-requirements-in-arkansas/ diff --git a/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/income_limit.yaml b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/income_limit.yaml new file mode 100644 index 00000000000..493f0f77347 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/income_limit.yaml @@ -0,0 +1,15 @@ +description: Arkansas limits the Medicaid work requirement approximation to adults below this share of the poverty line under the Arkansas Works program. + +values: + 2018-01-01: 1 + 2019-01-01: 1.38 + +metadata: + unit: /1 + period: year + label: Arkansas Medicaid work requirement income limit + reference: + - title: State Data for Medicaid Work Requirements in Arkansas | KFF + href: https://www.kff.org/medicaid/issue-brief/state-data-for-medicaid-work-requirements-in-arkansas/ + - title: State Annual Report January-December 2018 | Arkansas Works Section 1115 + href: https://www.medicaid.gov/Medicaid-CHIP-Program-Information/By-Topics/Waivers/1115/downloads/ar/Health-Care-Independence-Program-Private-Option/ar-works-annl-rpt-jan-dec-2018.pdf#page=11 diff --git a/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/monthly_hours_threshold.yaml b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/monthly_hours_threshold.yaml new file mode 100644 index 00000000000..99eaa2e63d7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/dhs/medicaid/work_requirements/monthly_hours_threshold.yaml @@ -0,0 +1,14 @@ +description: Arkansas limits Medicaid expansion coverage to adults completing at least this number of monthly work or community engagement hours under the Arkansas Works program. + +values: + 2018-01-01: 80 + +metadata: + unit: hour + period: month + label: Arkansas Medicaid work requirement monthly hours threshold + reference: + - title: State Annual Report January-December 2018 | Arkansas Works Section 1115 + href: https://www.medicaid.gov/Medicaid-CHIP-Program-Information/By-Topics/Waivers/1115/downloads/ar/Health-Care-Independence-Program-Private-Option/ar-works-annl-rpt-jan-dec-2018.pdf#page=11 + - title: An Early Look at Implementation of Medicaid Work Requirements in Arkansas | KFF + href: https://www.kff.org/medicaid/issue-brief/an-early-look-at-implementation-of-medicaid-work-requirements-in-arkansas/ diff --git a/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_eligible.yaml index 765bfdf2a00..d68ad97b8f6 100644 --- a/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility/is_medicaid_eligible.yaml @@ -170,3 +170,39 @@ output: medicaid_category: SENIOR_OR_DISABLED is_medicaid_eligible: true + +- name: Case 4, Arkansas 2018 subject adult is ineligible when the historical work requirement approximation is 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: + is_medicaid_eligible: false + +- name: Case 5, Arkansas 2018 adult above 100 percent FPL remains eligible because the annual approximation does not subject that cohort. + period: 2018 + input: + age: 40 + medicaid_category: ADULT + immigration_status: CITIZEN + medicaid_income_level: 1.1 + monthly_hours_worked: 0 + state_code: AR + output: + is_medicaid_eligible: true + +- name: Case 6, Arkansas 2019 adults ages 19 to 29 remain eligible because the brief phase-in is not modeled annually. + period: 2019 + input: + age: 25 + medicaid_category: ADULT + immigration_status: CITIZEN + medicaid_income_level: 0.8 + monthly_hours_worked: 0 + state_code: AR + output: + is_medicaid_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_eligible.yaml new file mode 100644 index 00000000000..ad01b01365c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_eligible.yaml @@ -0,0 +1,67 @@ +- name: Case 1, Arkansas 2018 subject adult without hours or exemptions is ineligible under the approximation. + period: 2018 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 0.9 + monthly_hours_worked: 0 + state_code: AR + output: + ar_medicaid_work_requirement_eligible: false + +- name: Case 2, Arkansas 2018 subject adult meeting 80 monthly hours is eligible. + period: 2018 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 0.9 + monthly_hours_worked: 80 + state_code: AR + output: + ar_medicaid_work_requirement_eligible: true + +- name: Case 3, Arkansas 2018 caregiver of a dependent child under 18 is exempt. + period: 2018 + input: + people: + person1: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 0.9 + monthly_hours_worked: 0 + is_tax_unit_head_or_spouse: true + person2: + age: 17 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [person1, person2] + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_medicaid_work_requirement_eligible: [true, true] + +- name: Case 4, Arkansas 2018 subject adult receiving unemployment compensation is exempt. + period: 2018 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 0.9 + monthly_hours_worked: 0 + unemployment_compensation: 1_000 + state_code: AR + output: + ar_medicaid_work_requirement_eligible: true + +- name: Case 5, Arkansas 2019 adults ages 19 to 29 remain eligible because the brief phase-in is not modeled annually. + period: 2019 + input: + age: 25 + medicaid_category: ADULT + medicaid_income_level: 0.8 + monthly_hours_worked: 0 + state_code: AR + output: + ar_medicaid_work_requirement_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_subject.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_subject.yaml new file mode 100644 index 00000000000..3047a58eb31 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_subject.yaml @@ -0,0 +1,49 @@ +- name: Case 1, Arkansas 2018 adults ages 30 to 49 below 100 percent FPL are subject. + period: 2018 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 0.9 + state_code: AR + output: + ar_medicaid_work_requirement_subject: true + +- name: Case 2, Arkansas 2018 adults above 100 percent FPL are not subject in the annual approximation. + period: 2018 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 1.1 + state_code: AR + output: + ar_medicaid_work_requirement_subject: false + +- name: Case 3, Arkansas 2019 adults ages 30 to 49 below 138 percent FPL are subject. + period: 2019 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 1.2 + state_code: AR + output: + ar_medicaid_work_requirement_subject: true + +- name: Case 4, Arkansas 2019 adults ages 19 to 29 are excluded from the annual approximation. + period: 2019 + input: + age: 25 + medicaid_category: ADULT + medicaid_income_level: 0.8 + state_code: AR + output: + ar_medicaid_work_requirement_subject: false + +- name: Case 5, Arkansas 2020 adults are not subject after the court halted enforcement. + period: 2020 + input: + age: 40 + medicaid_category: ADULT + medicaid_income_level: 0.8 + state_code: AR + output: + ar_medicaid_work_requirement_subject: false diff --git a/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py b/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py index d3ff8be4292..dcf85e089b5 100644 --- a/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py +++ b/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py @@ -7,13 +7,14 @@ class is_medicaid_eligible(Variable): label = "Eligible for Medicaid" definition_period = YEAR reference = ( - "https://www.law.cornell.edu/uscode/text/42/1396a#a_10" - "https://www.kff.org/racial-equity-and-health-policy/fact-sheet/key-facts-on-health-coverage-of-immigrants" + "https://www.law.cornell.edu/uscode/text/42/1396a#a_10", + "https://www.kff.org/racial-equity-and-health-policy/fact-sheet/key-facts-on-health-coverage-of-immigrants", ) def formula(person, period, parameters): category = person("medicaid_category", period) categorically_eligible = category != category.possible_values.NONE + adult_group = category == category.possible_values.ADULT immigration_status_eligible = person( "is_medicaid_immigration_status_eligible", period ) @@ -21,21 +22,31 @@ def formula(person, period, parameters): il_hbi_eligible = person("il_hbi_eligible", period) p = parameters(period).gov.hhs.medicaid.eligibility + federal_work_requirement_eligible = True if p.work_requirements.applies: work_requirement_eligible = person( "medicaid_work_requirement_eligible", period ) - return ( - ( - categorically_eligible - & immigration_status_eligible - & work_requirement_eligible - ) - | ca_ffyp_eligible - | il_hbi_eligible + federal_work_requirement_eligible = where( + adult_group, work_requirement_eligible, True + ) + + ar_p = parameters(period).gov.states.ar.dhs.medicaid.work_requirements + ar_work_requirement_eligible = True + if ar_p.applies: + state = person.household("state_code_str", period) + ar_work_requirement_eligible = where( + state == "AR", + person("ar_medicaid_work_requirement_eligible", period), + True, ) return ( - (categorically_eligible & immigration_status_eligible) + ( + categorically_eligible + & immigration_status_eligible + & federal_work_requirement_eligible + & ar_work_requirement_eligible + ) | ca_ffyp_eligible | il_hbi_eligible ) diff --git a/policyengine_us/variables/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_eligible.py b/policyengine_us/variables/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_eligible.py new file mode 100644 index 00000000000..c19d822191b --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_eligible.py @@ -0,0 +1,58 @@ +from policyengine_us.model_api import * + + +class ar_medicaid_work_requirement_eligible(Variable): + value_type = bool + entity = Person + label = ( + "Eligible under the Arkansas historical Medicaid work requirement approximation" + ) + definition_period = YEAR + reference = ( + "https://www.medicaid.gov/medicaid/section-1115-demo/demonstration-and-waiver-list/81021", + "https://www.kff.org/medicaid/issue-brief/state-data-for-medicaid-work-requirements-in-arkansas/", + "https://www.law.cornell.edu/regulations/arkansas/016-20-18-Ark-Code-R-003", + ) + defined_for = StateCode.AR + + def formula(person, period, parameters): + p = parameters(period).gov.states.ar.dhs.medicaid.work_requirements + subject = person("ar_medicaid_work_requirement_subject", period) + + # Arkansas' waiver operated with monthly reporting and three-month lockout + # rules, but the default microdata are annual. This approximation only uses + # the parts of the waiver that are observable in yearly data. Reporting + # compliance, good-cause months, treatment-program participation, and + # other administrative exemptions are therefore left out. + monthly_hours_worked = person("monthly_hours_worked", period) + meets_monthly_work_hours = monthly_hours_worked >= p.monthly_hours_threshold + + age = person("age", period) + is_dependent = person("is_tax_unit_dependent", period) + is_pregnant = person("is_pregnant", period) + is_full_time_student = person("is_full_time_student", period) + is_disabled = person("is_disabled", period) + is_blind = person("is_blind", period) + is_incapable_of_self_care = person("is_incapable_of_self_care", period) + + has_eligible_dependent_child = person.tax_unit.any( + is_dependent & (age <= p.dependent_age_limit) + ) + has_disabled_dependent = person.tax_unit.any( + is_dependent & (is_disabled | is_blind | is_incapable_of_self_care) + ) + receives_unemployment_compensation = ( + person("unemployment_compensation", period) > 0 + ) + eligible_disabled = is_disabled | is_blind | is_incapable_of_self_care + + observable_exemption = ( + is_pregnant + | is_full_time_student + | eligible_disabled + | has_eligible_dependent_child + | has_disabled_dependent + | receives_unemployment_compensation + ) + + return ~subject | observable_exemption | meets_monthly_work_hours diff --git a/policyengine_us/variables/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_subject.py b/policyengine_us/variables/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_subject.py new file mode 100644 index 00000000000..829c70197a4 --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/dhs/medicaid/eligibility/ar_medicaid_work_requirement_subject.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ar_medicaid_work_requirement_subject(Variable): + value_type = bool + entity = Person + label = "Subject to the Arkansas historical Medicaid work requirement approximation" + definition_period = YEAR + reference = ( + "https://www.medicaid.gov/medicaid/section-1115-demo/demonstration-and-waiver-list/81021", + "https://www.kff.org/medicaid/issue-brief/state-data-for-medicaid-work-requirements-in-arkansas/", + ) + defined_for = StateCode.AR + + def formula(person, period, parameters): + p = parameters(period).gov.states.ar.dhs.medicaid.work_requirements + category = person("medicaid_category", period) + adult_group = category == category.possible_values.ADULT + age = person("age", period) + income_level = person("medicaid_income_level", period) + age_subject = p.age_range.calc(age) + income_subject = income_level <= p.income_limit + return p.applies & adult_group & age_subject & income_subject