Skip to content

Model historical Arkansas Medicaid work requirements#8274

Draft
daphnehanse11 wants to merge 3 commits into
PolicyEngine:mainfrom
daphnehanse11:codex/issue-8272-ar-medicaid-work-requirement
Draft

Model historical Arkansas Medicaid work requirements#8274
daphnehanse11 wants to merge 3 commits into
PolicyEngine:mainfrom
daphnehanse11:codex/issue-8272-ar-medicaid-work-requirement

Conversation

@daphnehanse11
Copy link
Copy Markdown
Collaborator

What changed

  • adds an Arkansas-specific historical Medicaid work-requirement overlay instead of changing the Arkansas adult Medicaid income limit
  • introduces explicit Arkansas parameters for when the waiver approximation applies, the affected age range, the annualized income cutoff, the dependent-child exemption age, and the monthly hours threshold
  • wires the Arkansas overlay into is_medicaid_eligible so it only affects the adult expansion category in Arkansas
  • adds Arkansas-specific tests plus Medicaid eligibility regression coverage

Why

Issue #8272 tracks the need to represent the Arkansas Works work-requirement period more faithfully without pretending it was an income-threshold change.

Modeling approach

This PR uses an annual approximation because PolicyEngine's default microdata are primarily annual even though the underlying waiver operated monthly.

The approximation is:

  • 2018: adults ages 30-49 at or below 100% FPL are subject
  • 2019: adults ages 30-49 at or below 138% FPL are subject
  • 2020+: the Arkansas historical overlay turns off

Observable exemptions included in the approximation:

  • pregnancy
  • full-time student status
  • disability / blindness / incapacity proxies
  • caring for a dependent child under 18
  • caring for a disabled dependent
  • unemployment compensation receipt

Explicitly not modeled here:

  • monthly reporting compliance
  • good-cause months
  • treatment-program participation
  • three-month lockout administration
  • the brief 2019 phase-in for ages 19-29

That last omission is intentional: modeling ages 19-29 in annual data would likely overstate exposure because the phase-in was only partially rolled out before enforcement stopped.

Confidence

I'm reasonably confident in this as an annual-data approximation. I'm much less confident that annual data can support a literally correct monthly Arkansas waiver model, which is why the assumptions are documented in both parameters and code comments.

Validation

  • uv run python policyengine_us/tests/test_batched.py policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility --batches 1
  • uv run python policyengine_us/tests/test_batched.py policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility --batches 1
  • uv run python policyengine_us/tests/test_batched.py policyengine_us/tests/policy/baseline/gov/hhs/medicaid --batches 1

Closes #8272

@codecov
Copy link
Copy Markdown

codecov Bot commented May 12, 2026

Codecov Report

❌ Patch coverage is 98.03922% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 95.58%. Comparing base (f9a4a0f) to head (80007a2).
⚠️ Report is 1320 commits behind head on main.

Files with missing lines Patch % Lines
...v/hhs/medicaid/eligibility/is_medicaid_eligible.py 87.50% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##              main    #8274      +/-   ##
===========================================
- Coverage   100.00%   95.58%   -4.42%     
===========================================
  Files            7        3       -4     
  Lines          215       68     -147     
  Branches         6        2       -4     
===========================================
- Hits           215       65     -150     
- Misses           0        2       +2     
- Partials         0        1       +1     
Flag Coverage Δ
unittests 95.58% <98.03%> (-4.42%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@daphnehanse11 daphnehanse11 changed the title [codex] Model historical Arkansas Medicaid work requirements Model historical Arkansas Medicaid work requirements May 12, 2026
- run ruff format on Arkansas Medicaid work-requirement variables
- add the missing changelog fragment
- tighten the monthly_hours_threshold description (the formula uses >=, so "at least" rather than "more than")
- clarify the applies parameter description with the standard "if this is true" suffix

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@daphnehanse11
Copy link
Copy Markdown
Collaborator Author

PR review

I checked the PR out in a fresh worktree, validated the implementation against the cited regulations, and pushed CI/quality fixes.

Fixes pushed (c2cf764)

  • Lint: ran ruff format on ar_medicaid_work_requirement_eligible.py and ar_medicaid_work_requirement_subject.py (CI Lint was failing).
  • Changelog: added changelog.d/codex-issue-8272-ar-medicaid-work-requirement.added.md (CI Check changelog fragment was failing).
  • Parameter description, monthly_hours_threshold.yaml: changed "more than this number" → "at least this number". The formula uses monthly_hours_worked >= p.monthly_hours_threshold, and the cited rule (016.20.18 Ark. Code R. 003) reads "80 hours or more per month", so 80 hours qualifies.
  • Parameter description, applies.yaml: appended the standard ", if this is true" suffix used by the federal work_requirements/applies.yaml to make the boolean semantics explicit.

Regulatory accuracy

Cross-checked against the cited KFF brief and Arkansas Code Rule 016.20.18; the annual approximation matches the documented rollout:

  • 2018: ages 30-49 at ≤100% FPL, 80 monthly hours, exemptions for pregnancy/full-time student/disability/dependent minor/unemployment receipt.
  • 2019: same age band, income limit expands to 138% FPL.
  • 2020+: applies turns off (court set aside the rule in March 2019).

The intentional omissions (monthly reporting, three-month lockout, 19-29 phase-in, TEA/SNAP-derived exemptions, AI/AN, medical frailty, treatment programs) are clearly documented in both the PR description and inline parameter comments — fair tradeoff for annual microdata.

Verified locally

  • policyengine-core test policyengine_us/tests/policy/baseline/gov/states/ar/dhs/medicaid/eligibility -c policyengine_us — 10/10 pass
  • policyengine-core test policyengine_us/tests/policy/baseline/gov/hhs/medicaid/eligibility -c policyengine_us — 80/80 pass (no regressions in the existing Medicaid integration test)
  • ruff format --check . — clean

Validation summary

Check Result
Regulatory accuracy Matches cited sources
Reference quality Each parameter has linked authoritative sources
Code patterns Followed (fixed formatting)
Test coverage 10 new YAML tests + 3 integration tests; codecov flagged 1 untested line on the federal-branch where(...) in is_medicaid_eligible.py because p.work_requirements.applies is false in tested years — pre-existing federal pathway, not introduced by this PR
CI status Lint & changelog fixed; other failing checks should re-run

Use defined_for = StateCode.AR on ar_medicaid_work_requirement_subject and
ar_medicaid_work_requirement_eligible so they only compute for Arkansas
residents. Drop the inline state == "AR" check from the subject formula
(now redundant), and wrap the eligibility variable in is_medicaid_eligible
with a where clause so non-AR residents are treated as passing the check
rather than getting the bool default of False.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Model historical Arkansas Medicaid work requirements with documented annual-data assumptions

1 participant