Skip to content

Implement Maryland State Supplementary Payment (SSP)#8184

Open
hua7450 wants to merge 19 commits into
PolicyEngine:mainfrom
hua7450:md-ssp
Open

Implement Maryland State Supplementary Payment (SSP)#8184
hua7450 wants to merge 19 commits into
PolicyEngine:mainfrom
hua7450:md-ssp

Conversation

@hua7450
Copy link
Copy Markdown
Collaborator

@hua7450 hua7450 commented Apr 28, 2026

Summary

Implements Maryland's State Supplementary Payment (SSP), officially Public Assistance to Adults (PAA), for eligible Maryland residents in CARE Homes, Licensed Assisted Living, or MDH Rehabilitative Residences.

This implementation models PAA as a prospective SSI state-supplement cascade: each modeled PAA recipient is treated as applying for federal SSI, federal SSI is imputed from the person's federal SSI rules, and Maryland PAA fills the remaining gap to the applicable PAA need amount.

Closes #1137.

Regulatory Authority

Calculation

For each eligible person, per month:

combined_need = provider_rate + personal_needs_allowance
imputed_federal_ssi = max(uncapped_ssi, 0)
md_paa = max(combined_need - ssi_countable_income - imputed_federal_ssi, 0)

This makes the modeled resources reconcile to the PAA need amount:

imputed federal SSI + Maryland PAA + SSI countable income = combined need

For zero-countable-income cases:

imputed federal SSI + Maryland PAA = combined need

Examples in 2026:

  • CARE Home Level C: $1,173 provider rate + $106 PNA = $1,279; $994 imputed SSI + $285 PAA = $1,279.
  • REHAB residence: $106 PNA; $30 imputed medical-facility SSI + $76 PAA = $106.
  • Married SSI couple: imputed federal SSI follows federal SSI couple rules (couple_FBR / 2 = $745.50 per spouse in 2026), so PAA fills from that imputed federal amount to each person's PAA need.

Eligibility

Requirement Source How Modeled
Receives SSI, SSDI, or qualifying OASI on the basis of age/blindness/disability COMAR 07.03.07.03(A)(2) (ssi > 0) | (ssdi > 0) | (oasi > 0 & is_ssi_aged_blind_disabled)
Pending federal-benefit pathway PAA Manual §300.5; COMAR 07.03.07.03 md_paa_pending_federal_benefit and is_ssi_aged_blind_disabled
Resources ≤ $2,000 PAA Manual §500 ssi_countable_resources <= ssi.individual_limit
Maryland resident COMAR 07.03.07.03 defined_for = StateCode.MD
Resides in a PAA facility PAA Manual §300 / §400 md_paa_living_arrangement enum
REHAB ⇄ SSI medical-facility consistency 42 USC § 1382(e)(1)(A) Bidirectional check between REHAB_RESIDENCE and ssi_federal_living_arrangement == MEDICAL_TREATMENT_FACILITY

Benefit Amounts

Provider rates are parameterized from COMAR 07.03.07.04 and DHS-FIA AT 23-02:

Tier 2009-01-01 2021-01-01
CARE Home Level A $740 $776
CARE Home Level B $849 $875
CARE Home Level C $1,137 $1,173
CARE Home Level D $1,340 $1,376
Licensed Assisted Living $858 $894
MDH Rehabilitative Residence $0 $0

Personal Needs Allowance is parameterized from COMAR and DHS-FIA memoranda:

Effective Date Amount
2009-01-01 $82
2022-07-01 $93
2023-07-01 $98
2024-07-01 $102
2025-07-01 $106

Architecture

  • md_paa.py — state PAA amount using the prospective SSI cascade.
  • md_paa_imputed_federal_ssi.py — imputed federal SSI, max(uncapped_ssi, 0), for PAA calculation.
  • md_paa_eligible.py — eligibility gates for federal cash receipt or pending pathway, resources, facility residence, and REHAB medical-facility consistency.
  • md_paa_living_arrangement.py — PAA facility enum.
  • md_paa_provider_rate.py — provider-rate lookup by living arrangement.
  • md_paa_personal_needs_allowance.py — PNA parameter passthrough.
  • md_paa_total_cost_of_care.py — provider rate plus PNA.
  • Registry entries in programs.yaml, household_state_benefits.yaml, and spm_unit_benefits.py.

Not Modeled / Known Limitations

  • PAA-specific income details beyond the federal SSI countable-income approximation, including lump sums, parent contributions, and irregular-income exclusions.
  • Private mental institution carve-out and 30-day absence disqualification.
  • Per-diem prorating for fractional-month entry.
  • REHAB $54/day allowable-cost threshold is not separately modeled; REHAB PAA is modeled as the PNA gap after imputed federal SSI and countable income.
  • Original source transmittals for some intermediate PNA updates are not located; adjacent DHS-FIA documents corroborate the values.

Files

policyengine_us/parameters/gov/states/md/dhs/fia/paa/
├── personal_needs_allowance.yaml
└── provider_rate.yaml

policyengine_us/variables/gov/states/md/dhs/fia/paa/
├── md_paa.py
├── md_paa_eligible.py
├── md_paa_imputed_federal_ssi.py
├── md_paa_living_arrangement.py
├── md_paa_pending_federal_benefit.py
├── md_paa_personal_needs_allowance.py
├── md_paa_provider_rate.py
└── md_paa_total_cost_of_care.py

policyengine_us/tests/policy/baseline/gov/states/md/dhs/fia/paa/
├── integration.yaml
├── md_paa.yaml
├── md_paa_eligible.yaml
├── md_paa_imputed_federal_ssi.yaml
├── md_paa_personal_needs_allowance.yaml
└── md_paa_provider_rate.yaml

Test Plan

  • python -m policyengine_core.scripts.policyengine_command test policyengine_us/tests/policy/baseline/gov/states/md/dhs/fia/paa -c policyengine_us — 61 passed
  • ruff format policyengine_us/variables/gov/states/md/dhs/fia/paa/md_paa.py policyengine_us/variables/gov/states/md/dhs/fia/paa/md_paa_imputed_federal_ssi.py
  • ruff check policyengine_us/variables/gov/states/md/dhs/fia/paa/md_paa.py policyengine_us/variables/gov/states/md/dhs/fia/paa/md_paa_imputed_federal_ssi.py
  • CI passes

hua7450 and others added 2 commits April 28, 2026 17:08
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 28, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.16%. Comparing base (8cb60e7) to head (9b6d171).
⚠️ Report is 10 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##              main    #8184      +/-   ##
===========================================
- Coverage   100.00%   95.16%   -4.84%     
===========================================
  Files            3        9       +6     
  Lines           63      124      +61     
  Branches         0        2       +2     
===========================================
+ Hits            63      118      +55     
- Misses           0        6       +6     
Flag Coverage Δ
unittests 95.16% <100.00%> (-4.84%) ⬇️

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.

hua7450 and others added 12 commits April 28, 2026 20:19
- Fix earned-income disregard cascade per COMAR 07.03.07.08(A): apply
  $20 to unearned first, leftover (up to $20) cascades into earned;
  earned floor is $65 + leftover (matches federal SSI pattern)
- Fix REHAB_RESIDENCE provider rate: cap at $54/day per AT 23-02 page 3
  ($1,642.50/month) instead of $0
- Apply cost-of-care disregard for REHAB residents per COMAR 07.03.07.08(B)
- Update COMAR citations from .09 to .08 for income disregards

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Round 1 incorrectly added a $54/day provider rate cap for REHAB residents,
overpaying by $1,642.50/month. Per PAA Manual §400 and §900.3, MDH pays
the cost of care directly for Rehabilitative Residence cases — PAA
contributes only the personal needs allowance.

- Delete provider_rate_rehab_daily_cap.yaml (parameter not needed)
- Revert md_paa_provider_rate.py to simple parameter lookup (REHAB=$0)
- Simplify md_paa_countable_income.py: per COMAR 07.03.07.08(B),
  REHAB residents get a full cost-of-care disregard, so countable
  income is fully absorbed (PAA = PNA always)
- Update REHAB tests to expect PNA-only benefit ($106 in 2026)

Round 1's earned-disregard cascade fix and COMAR .09→.08 citation fix
remain correct and are kept.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Eligibility: accept SSI, SSDI, or other OASI/survivor receipt with
  aged/blind/disabled gate on the OASI path; add $2,000 resource check;
  fix §300.2 → §300.1.B citation.
- Countable income: include SSI cash payment in unearned per §500.8 /
  AT 23-02; document residual gaps (lump sums §500.7, §500.8 contributions,
  §500.9 exclusions, "actually available" first-month treatment).
- Earned disregard: gate on living arrangement — no disregard for
  Assisted Living per §500.11.B.1.
- Rehab Residence: replace return-zero shortcut with §900.3 cost-of-need
  ceiling test ($54/day × 30) so high-income residents no longer
  automatically receive the full PNA.
- PNA: collapse and re-place placeholder at 2025-01-01 = $102 with
  research-based comment (DLS FY26 budget still cites $93; IM 26-04 is
  the first source mentioning $102).
- References: fix §500.3 → §500.11 in three income disregard YAMLs;
  remove broken §400 URL from md_paa_living_arrangement.py.
- Tests: recompute expected values for SSI inclusion; add cases for
  SSDI-only path, $2,000 resource limit, asymmetric married couple,
  high-income Rehab Residence, CARE_HOME_LEVEL_D, and Assisted Living
  no-disregard path. All 52 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…into md-ssp

# Conflicts:
#	policyengine_us/parameters/gov/household/household_state_benefits.yaml
#	policyengine_us/programs.yaml
#	policyengine_us/variables/household/income/spm_unit/spm_unit_benefits.py
… pathway

- Backdate PNA to $84 effective 2022-01-01 (pre-AT 22-28); add reference.
- Update Case 4 to expect $98 in 2024-01 (IM 24-05 effective 2023-07-01).
- Add Case 5 asserting $84 in 2022-01.
- Add md_paa_pending_federal_benefit input and wire into md_paa_eligible
  per PAA Manual §300.5 / COMAR 07.03.07.03 (pending SSI/SSDI/RSDI
  application or no-fault denial), gated by is_ssi_aged_blind_disabled.
- Add tests for the §300.5 pathway.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The prior md_paa formula (state_max - countable_income) double-counted
SSI as PAA unearned income and treated provider_rate + PNA as the state
supplement, overpaying for SSI recipients. Verified against SSA 2011 MD
Table 1 (LEVEL_A 6, LEVEL_C 3, REHAB ).

Changes:
- md_paa.py rewritten as state_supp = max(combined_need - federal_ssi -
  income_excess, 0). REHAB residents use  medical-facility federal max
  per 42 USC § 1382(e)(1)(A); override is local to md_paa to avoid
  coupling federal SSI to MD-specific input.
- Federal ssi_countable_income now feeds income_excess, replacing the
  duplicated PAA-specific countable variables.
- Removed md_paa_countable_{income,earned_income,unearned_income} and
  the income/ and rehab_residence/ parameter folders.
- provider_rate and personal_needs_allowance: added 2011-01-01 values
  derived from SSA 2011 MD Table 1 (REHAB combined  → 2011 PNA ).
- Tests updated; integration covers cascade for SSI / SSDI / couple /
  high-income / asymmetric-eligibility cases.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
md_paa_eligible now requires `ssi_federal_living_arrangement ==
MEDICAL_TREATMENT_FACILITY` whenever `md_paa_living_arrangement ==
REHAB_RESIDENCE`. SSA 2011 MD Table 1 confirms MDH rehab is a Title XIX
medical treatment facility (federal SSI capped at /mo).

This forces callers to set `ssi_lives_in_medical_treatment_facility`
and `ssi_medicaid_pays_majority_of_care` for REHAB residents, which
makes federal SSI compute correctly without coupling federal SSI
formulas to MD-specific inputs. The local REHAB override in md_paa.py
is removed since federal SSI is now correctly  upstream.

REHAB test cases set both flags; integration Case 4 verifies federal
SSI = , state PAA = , total = .

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Locks intermediate cascade values (ssi_amount_if_eligible,
ssi_countable_income) in integration Cases 5/9, adds resource limit
boundary, pending blind/disabled paths, OASI-not-aged rejection,
income-excess waterfall partial erosion, asymmetric married couple
living arrangements, and the 2021-01 provider-rate transition.
Reconciles the $102 PNA placeholder-date comment between the
parameter and test files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cascade now uses individual FBR per SSA 2011 MD Table 1 footnote a
("state supplementation rate for individuals applies to each member of
a couple"), with the $30/mo medical-facility cap for REHAB. Previously
read ssi_amount_if_eligible, which returns couple_FBR/2 for couples
and overpaid LEVEL_A couples by ~$136/mo in 2026. Updates integration
Cases 5 and 10 to reflect the corrected per-spouse outputs.

Reference cleanup: COMAR Cornell LII URLs migrated to regs.maryland.gov
(canonical source), COMAR 07.03.07.04 title corrected from "Allowable
Needs" to "Need Requirements", IM 26-04 reference annotated with the
$102 -> $106 transition, and the broken AT 22-28 URL removed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Replace SSA-derived 2011 provider rates with COMAR 07.03.07.04(B)(2)/(C)(2)
  schedule ($740/$849/$1,137/$1,340/$858); re-key 2011-01-01 → 2009-01-01.
- Drop unsupported PNA $84 step at 2022-01-01; $82 forward-fills until AT 22-28
  raises it to $93 on 2022-07-01.
- Promote COMAR 07.03.07.04(A)(1) to primary citation for PNA $82; remove the
  403-blocked SSA URL from PNA references.
- Reorder md_paa.py references (COMAR first, SSA last); add COMAR §.04 cite.
- Replace non-existent §300.1.B / §500.2.B inline citations with COMAR
  07.03.07.03(A)(2) and PAA Manual §500.
- Make REHAB / SSI medical-facility consistency check bidirectional.
- Replace md_paa_personal_needs_allowance scalar passthrough formula with
  adds = ["gov.states.md.dhs.fia.paa.personal_needs_allowance"].
- Replace Cornell-mirror COMAR URL with regs.maryland.gov.
- Add COMAR / AT references to md_paa_personal_needs_allowance,
  md_paa_pending_federal_benefit, md_paa_living_arrangement, and
  md_paa_total_cost_of_care.
- Add CARE Home / Project Home legacy-term comment on enum.
- Add 6 new test cases: 2011 PNA $82; REHAB without medical-facility flags
  ineligible; CARE Home with medical-facility flag set ineligible; aged-OASI
  positive PAA; symmetric LEVEL_C couple both positive; pending §300.5
  applicant positive PAA.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hua7450 hua7450 marked this pull request as ready for review May 4, 2026 04:09
hua7450 and others added 5 commits May 4, 2026 00:15
Replace stale §300.1.B / §500.2.B / SSA 2011 footnote citations in
test and variable comments with COMAR 07.03.07.03(A)(2), PAA Manual
§500, and COMAR 07.03.07.04 — aligns inline documentation with the
parameter file references.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- programs.yaml: add `parameter_prefix: gov.states.md.dhs.fia.paa` to
  the Maryland PAA SSP entry (matches MI / other state SSP entries).
- md_paa_eligible.py: subtract SSDI from the OASI branch's
  `social_security` so the OR-chain doesn't double-count SSDI
  recipients (SSDI is a component of OASDI). Behavior unchanged
  (boolean OR is idempotent), but the intent is now explicit.
- md_paa_eligible.py: clarify that PAA evaluates each person against
  the federal SSI individual resource limit independently — the
  couple limit is not used.
- md_paa_personal_needs_allowance.yaml: renumber test cases in
  chronological order (2011 → 2026) so case numbers match listing
  order.

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.

Maryland SSI State Supplement

1 participant