Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/codex-msp-ssi-deeming-assets.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix MSP rules to use SSI spouse deeming, applicant-plus-spouse resources, strict SLMB/QI boundaries, category-consistent MSP eligibility, and complete 2021-2026 Medicare/MSP premium and resource thresholds.
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,22 @@ metadata:
period: month
label: Medicare Part A full premium
reference:
- title: 2021 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/press-releases/2021-medicare-part-b-premiums-remain-steady
- title: 2022 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2022-medicare-parts-b-premiums-deductibles-2022-medicare-part-d-income-related-monthly-adjustment
- title: 2023 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2023-medicare-parts-b-premiums-and-deductibles-2023-medicare-part-d-income-related-monthly
- title: 2024 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2024-medicare-parts-b-premiums-and-deductibles
- title: 2025 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2025-medicare-parts-b-premiums-and-deductibles
- title: 2026 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2026-medicare-parts-b-premiums-deductibles
values:
2021-01-01: 471
2022-01-01: 499
2023-01-01: 506
2024-01-01: 505
2025-01-01: 518
2026-01-01: 565
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,20 @@ metadata:
period: month
label: Medicare Part A reduced premium
reference:
- title: 2022 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2022-medicare-parts-b-premiums-deductibles-2022-medicare-part-d-income-related-monthly-adjustment
- title: 2023 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2023-medicare-parts-b-premiums-and-deductibles-2023-medicare-part-d-income-related-monthly
- title: 2024 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2024-medicare-parts-b-premiums-and-deductibles
- title: 2025 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2025-medicare-parts-b-premiums-and-deductibles
- title: 2026 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2026-medicare-parts-b-premiums-deductibles
values:
2021-01-01: 259
2022-01-01: 274
2023-01-01: 278
2024-01-01: 278
2025-01-01: 285
2026-01-01: 311
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,21 @@ metadata:
label: Medicare Part B base premium
reference:
- title: 2021 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2021-medicare-parts-b-premiums-and-deductibles
href: https://www.cms.gov/newsroom/press-releases/2021-medicare-part-b-premiums-remain-steady
- title: 2022 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2022-medicare-parts-b-premiums-deductibles-2022-medicare-part-d-income-related-monthly-adjustment
- title: 2023 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2023-medicare-parts-b-premiums-and-deductibles-2023-medicare-part-d-income-related-monthly
- title: 2024 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2024-medicare-parts-b-premiums-and-deductibles
- title: 2025 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2025-medicare-parts-b-premiums-and-deductibles
- title: 2026 Medicare Parts A & B Premiums and Deductibles
href: https://www.cms.gov/newsroom/fact-sheets/2026-medicare-parts-b-premiums-deductibles
values:
2021-01-01: 148.50
2022-01-01: 170.1
2023-01-01: 164.9
2024-01-01: 174.70
2025-01-01: 185
2026-01-01: 202.9
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ description: The Department of Health and Human Services limits resources to thi
values:
2024-01-01: 14_130
2025-01-01: 14_470
2026-01-01: 14_910

metadata:
unit: currency-USD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ description: The Department of Health and Human Services limits resources to thi
values:
2024-01-01: 9_430
2025-01-01: 9_660
2026-01-01: 9_950

metadata:
unit: currency-USD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,39 @@
medicare_quarters_of_coverage: 40
output:
base_part_a_premium: 0

- name: unit test 5 - reduced premium in 2022
period: 2022
input:
age: 65
is_medicare_eligible: true
medicare_quarters_of_coverage: 35
output:
base_part_a_premium: 3_288 # $274 * 12 months

- name: unit test 6 - full premium in 2023
period: 2023
input:
age: 65
is_medicare_eligible: true
medicare_quarters_of_coverage: 20
output:
base_part_a_premium: 6_072 # $506 * 12 months

- name: unit test 7 - reduced premium in 2026
period: 2026
input:
age: 65
is_medicare_eligible: true
medicare_quarters_of_coverage: 35
output:
base_part_a_premium: 3_732 # $311 * 12 months

- name: 2026 Part A full premium for fewer than 30 quarters.
period: 2026
input:
age: 65
is_medicare_eligible: true
medicare_quarters_of_coverage: 20
output:
base_part_a_premium: 6_780 # $565 * 12 months
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,27 @@
is_medicare_eligible: false
output:
base_part_b_premium: 0

- name: unit test 3 - eligible in 2022
period: 2022
input:
age: 65
is_medicare_eligible: true
output:
base_part_b_premium: 2_041.20 # $170.10 * 12 months

- name: unit test 4 - eligible in 2023
period: 2023
input:
age: 65
is_medicare_eligible: true
output:
base_part_b_premium: 1_978.80 # $164.90 * 12 months

- name: unit test 5 - eligible in 2026
period: 2026
input:
age: 65
is_medicare_eligible: true
output:
base_part_b_premium: 2_434.80 # $202.90 * 12 months
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,20 @@
# $19,440 unearned -> ($1,620 - $20) = $1,600/month countable
# $1,506 < $1,600 < $1,694.25 (120-135% FPL) -> QI income range
ssi_unearned_income: 19_440
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
is_medicaid_eligible: false
output:
is_qi_eligible: true

- name: QI eligible - income exactly at 120% FPL, no Medicaid
period: 2024-01
input:
age: 67
is_medicare_eligible: true
# $18,312 unearned -> ($1,526 - $20) = $1,506/month countable
ssi_unearned_income: 18_312
bank_account_assets: 5_000
spm_unit_is_married: false
is_medicaid_eligible: false
output:
Expand All @@ -22,9 +35,22 @@
is_medicare_eligible: true
# Income in QI range
ssi_unearned_income: 19_440
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
# But eligible for Medicaid
is_medicaid_eligible: true
output:
is_qi_eligible: false

- name: QI not eligible - income exactly at 135% FPL
period: 2024-01
input:
age: 67
is_medicare_eligible: true
# $20,571 unearned -> ($1,714.25 - $20) = $1,694.25/month countable
ssi_unearned_income: 20_571
bank_account_assets: 5_000
spm_unit_is_married: false
is_medicaid_eligible: false
output:
is_qi_eligible: false
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# Countable = unearned - $20 (or earned - $85 - 50% remaining)
# For 2024 individual FPL = $15,060:
# QMB: <= 100% = $1,255/month countable
# SLMB: 100-120% = $1,255.01-$1,506/month countable
# QI: 120-135% = $1,506.01-$1,694.25/month countable
# SLMB: > 100% and < 120% FPL
# QI: >= 120% and < 135% FPL

- name: MSP category - QMB (income at 100% FPL)
period: 2024-01
Expand All @@ -13,7 +13,7 @@
# $12,000 unearned -> ($1,000 - $20) = $980/month countable
# $980 < $1,255 (100% FPL) -> QMB
ssi_unearned_income: 12_000
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
output:
msp_category: QMB
Expand All @@ -26,7 +26,7 @@
# $16,500 unearned -> ($1,375 - $20) = $1,355/month countable
# $1,255 < $1,355 < $1,506 (100-120% FPL) -> SLMB
ssi_unearned_income: 16_500
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
output:
msp_category: SLMB
Expand All @@ -39,13 +39,27 @@
# $19,440 unearned -> ($1,620 - $20) = $1,600/month countable
# $1,506 < $1,600 < $1,694.25 (120-135% FPL) -> QI
ssi_unearned_income: 19_440
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
# QI requires not being eligible for other Medicaid
is_medicaid_eligible: false
output:
msp_category: QI

- name: MSP category - QI (income exactly at 120% FPL)
period: 2024-01
input:
age: 67
is_medicare_eligible: true
# $18,312 unearned -> ($1,526 - $20) = $1,506/month countable
# Exact 120% FPL belongs to QI, not SLMB
ssi_unearned_income: 18_312
bank_account_assets: 5_000
spm_unit_is_married: false
is_medicaid_eligible: false
output:
msp_category: QI

- name: MSP category - NONE (income above 135% FPL)
period: 2024-01
input:
Expand All @@ -54,18 +68,32 @@
# $21_840 unearned -> ($1,820 - $20) = $1,800/month countable
# $1,800 > $1,694.25 (135% FPL) -> NONE
ssi_unearned_income: 21_840
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
output:
msp_category: NONE

- name: MSP category - NONE (income exactly at 135% FPL)
period: 2024-01
input:
age: 67
is_medicare_eligible: true
# $20,571 unearned -> ($1,714.25 - $20) = $1,694.25/month countable
# Exact 135% FPL is not QI-eligible
ssi_unearned_income: 20_571
bank_account_assets: 5_000
spm_unit_is_married: false
is_medicaid_eligible: false
output:
msp_category: NONE

- name: MSP category - NONE (not Medicare eligible)
period: 2024-01
input:
age: 60
is_medicare_eligible: false
ssi_unearned_income: 10_000
spm_unit_cash_assets: 5_000
bank_account_assets: 5_000
spm_unit_is_married: false
output:
msp_category: NONE
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
- name: Case 1, single applicant under the MSP asset limit.
period: 2024-01
input:
age: 67
bank_account_assets: 5_000
spm_unit_is_married: false
state_code: TX
output:
msp_asset_eligible: true

- name: Case 2, couple resources use the spouses' combined assets.
period: 2024-01
input:
people:
person1:
age: 68
bank_account_assets: 8_000
person2:
age: 66
bank_account_assets: 8_000
tax_units:
tax_unit:
members: [person1, person2]
marital_units:
marital_unit:
members: [person1, person2]
spm_units:
spm_unit:
members: [person1, person2]
spm_unit_is_married: true
households:
household:
members: [person1, person2]
state_code: TX
output:
msp_asset_eligible: [false, false]

- name: Case 3, non-spouse household members' assets are excluded.
period: 2024-01
input:
people:
person1:
age: 67
bank_account_assets: 5_000
person2:
age: 30
bank_account_assets: 20_000
tax_units:
tax_unit:
members: [person1]
marital_units:
marital_unit1:
members: [person1]
marital_unit2:
members: [person2]
spm_units:
spm_unit:
members: [person1, person2]
spm_unit_is_married: false
households:
household:
members: [person1, person2]
state_code: TX
output:
msp_asset_eligible: [true, false]

- name: Case 4, 2026 individual asset limit uses the current Medicare.gov value.
period: 2026-01
input:
age: 67
bank_account_assets: 9_950
spm_unit_is_married: false
state_code: TX
output:
msp_asset_eligible: true

- name: Case 5, 2026 individual asset limit rejects amounts above the current threshold.
period: 2026-01
input:
age: 67
bank_account_assets: 9_951
spm_unit_is_married: false
state_code: TX
output:
msp_asset_eligible: false
Loading
Loading