Skip to content
Draft
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/mt-ssp.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Implemented Montana State Supplementary Payment (SSP).
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ values:
- ma_state_supplement
# Michigan benefits
- mi_ssp
# Montana benefits
- mt_ssp
# Colorado benefits
- co_state_supplement
- co_oap
Expand Down Expand Up @@ -83,6 +85,8 @@ values:
- ma_state_supplement
# Michigan benefits
- mi_ssp
# Montana benefits
- mt_ssp
# Colorado benefits
- co_state_supplement
- co_oap
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
description: Montana provides this amount as the couple state supplement payment under the State Supplementation program.

metadata:
unit: currency-USD
period: month
label: Montana SSP couple payment amount
breakdown:
- mt_ssp_payment_category
reference:
- title: SSA POMS SI DEN01415.010, Montana State Supplementary Payments
href: https://secure.ssa.gov/poms.nsf/lnx/0501415010DEN
- title: SSA State Assistance Programs for SSI Recipients (January 2011), Montana, Table 1
href: https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/mt.html

# Couple totals (not per-spouse). ARM 37.43.104 lists individual rates
# only; couple rates are published only in SSA POMS and the SSA 2011
# report (couple = 2x individual + $5). Frozen since January 1989.
ASSISTED_LIVING_OR_GROUP_OR_COMMUNITY_HOME:
1989-01-01: 193
FOSTER_CARE:
1989-01-01: 110.50
TRANSITIONAL_LIVING:
1989-01-01: 57
NONE:
1989-01-01: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
description: Montana provides this amount as the individual state supplement payment under the State Supplementation program.

metadata:
unit: currency-USD
period: month
label: Montana SSP individual payment amount
breakdown:
- mt_ssp_payment_category
reference:
- title: ARM 37.43.104(1), Payment Standards
href: https://www.law.cornell.edu/regulations/montana/ARM-37-43-104
- title: SSA POMS SI DEN01415.010, Montana State Supplementary Payments
href: https://secure.ssa.gov/poms.nsf/lnx/0501415010DEN
- title: SSA State Assistance Programs for SSI Recipients (January 2011), Montana, Table 1
href: https://www.ssa.gov/policy/docs/progdesc/ssi_st_asst/2011/mt.html

# Rates frozen since January 1989 per SSA POMS SI DEN01415.010.
ASSISTED_LIVING_OR_GROUP_OR_COMMUNITY_HOME:
1989-01-01: 94
FOSTER_CARE:
1989-01-01: 52.75
TRANSITIONAL_LIVING:
1989-01-01: 26
NONE:
1989-01-01: 0
6 changes: 6 additions & 0 deletions policyengine_us/programs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,12 @@ programs:
full_name: Michigan State Supplementary Payment
variable: mi_ssp
parameter_prefix: gov.states.mi.mdhhs.ssp
- state: MT
status: complete
name: Montana SSP
full_name: Montana State Supplementation
variable: mt_ssp
parameter_prefix: gov.states.mt.dphhs.ssp
- state: ME
status: complete
name: Maine SSP
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
- name: Case 1, uncapped_ssi exactly $0 (boundary, strict greater-than) is ineligible.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
# Boundary: uncapped_ssi == 0 fails the strict (uncapped_ssi > 0) gate.
uncapped_ssi: 0
mt_ssp_payment_category: ASSISTED_LIVING_OR_GROUP_OR_COMMUNITY_HOME
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: MT
output:
mt_ssp_eligible: false
mt_ssp: 0

- name: Case 2, uncapped_ssi exactly $0.01 (smallest positive value) is eligible.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
# Annual $0.01 -> monthly ~$0.000833 in the MONTH formula; still > 0
# so eligibility passes. Spillover deduction = max_(0, -uncapped_ssi)
# = 0 since uncapped_ssi is positive, so full individual rate applies.
uncapped_ssi: 0.01
mt_ssp_payment_category: TRANSITIONAL_LIVING
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: MT
output:
# K tier individual = $26 - $0 spillover = $26.
mt_ssp_eligible: true
mt_ssp: 26

- name: Case 3, federal SSI payment is $0 but uncapped_ssi positive (income just below FBR) is eligible.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
# Group 2 path: categorically eligible, federal SSI takeup zeros the
# actual payment, uncapped_ssi remains positive (income just below the
# federal SSI cutoff). Distinct from Case 10 of integration.yaml: this
# case explicitly verifies the (ssi == 0, uncapped_ssi > 0) boundary.
is_ssi_eligible: true
ssi: 0
uncapped_ssi: 12
mt_ssp_payment_category: ASSISTED_LIVING_OR_GROUP_OR_COMMUNITY_HOME
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: MT
output:
# uncapped_ssi annual $12 -> monthly $1; spillover = max_(0, -1) = 0;
# G/H/I tier = $94 - $0 = $94.
mt_ssp_eligible: true
mt_ssp: 94

- name: Case 4, single ineligible person (NONE category) returns zero benefit.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
is_ssi_eligible: true
mt_ssp_payment_category: NONE
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: MT
output:
# NONE category fails the qualifying-arrangement gate.
mt_ssp_eligible: false
mt_ssp: 0

- name: Case 5, three eligible persons in same SPM unit (parent, adult child, grandparent) sums correctly.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
# Aged grandparent in personal care facility.
age: 80
is_ssi_eligible: true
is_ssi_aged_blind_disabled: true
mt_ssp_payment_category: ASSISTED_LIVING_OR_GROUP_OR_COMMUNITY_HOME
person2:
# Disabled parent in foster care.
age: 50
is_ssi_eligible: true
is_ssi_aged_blind_disabled: true
mt_ssp_payment_category: FOSTER_CARE
person3:
# Disabled adult child in transitional living.
age: 28
is_ssi_eligible: true
is_ssi_aged_blind_disabled: true
mt_ssp_payment_category: TRANSITIONAL_LIVING
marital_units:
marital_unit1:
members: [person1]
marital_unit2:
members: [person2]
marital_unit3:
members: [person3]
spm_units:
spm_unit:
members: [person1, person2, person3]
households:
household:
members: [person1, person2, person3]
state_code: MT
output:
# Three separate marital units -> each gets individual rate.
# person1: G/H/I = $94; person2: J = $52.75; person3: K = $26.
# SPM total = $94 + $52.75 + $26 = $172.75.
mt_ssp_eligible: [true, true, true]
mt_ssp: 172.75

- name: Case 6, January period for a person who would move state mid-year still uses MT inputs.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
# Period format restriction: only 2024-01 or 2024 are supported, so we
# cannot model a mid-year move directly. This case documents that for
# the January snapshot, the state_code: MT input controls the result.
is_ssi_eligible: true
mt_ssp_payment_category: FOSTER_CARE
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: MT
output:
# January snapshot with MT state code -> J tier individual = $52.75.
mt_ssp_eligible: true
mt_ssp: 52.75

- name: Case 7, high earnings make person SSI-ineligible (uncapped_ssi=0) so MT SSP is zero.
absolute_error_margin: 0.01
period: 2024-01
input:
people:
person1:
# High employment income -> not SSI-eligible at all -> uncapped_ssi=0
# (uncapped_ssi has defined_for="is_ssi_eligible"). The boundary case
# demonstrates that when SSI eligibility itself fails, MT SSP correctly
# returns zero rather than inflating from the spillover deduction.
employment_income: 60_000
mt_ssp_payment_category: ASSISTED_LIVING_OR_GROUP_OR_COMMUNITY_HOME
spm_units:
spm_unit:
members: [person1]
households:
household:
members: [person1]
state_code: MT
output:
mt_ssp_eligible: false
mt_ssp: 0
Loading
Loading