Skip to content
Merged
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/mn-ccap-rsdi-above-ssi-fbr.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Count Minnesota CCAP Retirement, Survivors, and Disability Insurance, including dependents' benefits, only above the federal maximum SSI payment, per Minn. Stat. 256P.06, subd. 3(2)(xvi).
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
description: Minnesota counts these Retirement, Survivors, and Disability Insurance sources under the Child Care Assistance Program, to the extent they exceed the federal maximum Supplemental Security Income payment.
values:
2025-01-01:
# Retirement, survivors, disability and dependents' benefits; RSDI pays
# dependents of insured people (Combined Manual 0029.06.06).
- social_security

metadata:
unit: list
period: year
label: Minnesota CCAP Retirement, Survivors, and Disability Insurance sources
reference:
- title: Minn. Stat. 256P.06, subd. 3(2)(xvi) (RSDI above the federal maximum SSI payment)
href: https://www.revisor.mn.gov/statutes/cite/256P.06
- title: Minnesota CCAP Policy Manual, section 6.6 (Earned/Unearned Income)
href: https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=CCAP_0606
- title: Minnesota CCAP Policy Manual, section 6.15.24 (Annualizing RSDI)
href: https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=CCAP_061524
- title: Minnesota Combined Manual, 0017.15.45 - Income From RSDI and SSI
href: https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=cm_00171545
- title: Minnesota Combined Manual, 0029.06.06 - Retirement, Survivors and Disability Insurance
href: https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=cm_00290606
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
description: Minnesota counts these unearned income sources under the Child Care Assistance Program.
values:
2025-01-01:
# RSDI (gross amount) — Retirement, Survivors, and Disability Insurance.
# Listed as components rather than the social_security umbrella, which also
# adds social_security_dependents.
- social_security_retirement
- social_security_survivors
- social_security_disability
# Retirement, Survivors, and Disability Insurance counts only above the
# federal maximum SSI payment (Minn. Stat. 256P.06, subd. 3(2)(xvi)); the
# sources are listed in rsdi_sources.
- mn_ccap_countable_rsdi
- dividend_income
- interest_income
- pension_income
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Tests MN CCAP countable income = gross income (earned + unearned sources)
# minus allowable deductions, floored at zero (Minn. Rules 3400.0170 subp. 4/6a;
# manual sections 6.6 and 6.18). The variable is monthly; annual income inputs
# divide by 12.
# divide by 12. RSDI counts only above the federal maximum SSI payment (Minn.
# Stat. 256P.06, subd. 3(2)(xvi)).
- name: Case 1, earnings only.
period: 2026-01
absolute_error_margin: 0.01
Expand Down Expand Up @@ -31,8 +32,10 @@
members: [person1]
state_code: MN
output:
# (24,000 + 6,000 + 1,200) / 12 = 2,600 per month.
mn_ccap_countable_income: 2_600
# RSDI counts only above the 2026 federal maximum SSI payment of
# 994 * 12 = 11,928 (Minn. Stat. 256P.06, subd. 3(2)(xvi)), so the 6,000
# RSDI counts as 0. (24,000 + 0 + 1,200) / 12 = 2,100 per month.
mn_ccap_countable_income: 2_100

- name: Case 3, income reduced by allowable deductions.
period: 2026-01
Expand Down Expand Up @@ -112,8 +115,10 @@
members: [person1]
state_code: MN
output:
# (12,000 + 6,000 + 3,600 + 2,400) / 12 = 24,000 / 12 = 2,000 per month.
mn_ccap_countable_income: 2_000
# RSDI counts above the 2026 federal maximum SSI payment:
# 12,000 - 994 * 12 = 12,000 - 11,928 = 72.
# (72 + 6,000 + 3,600 + 2,400) / 12 = 12,072 / 12 = 1,006 per month.
mn_ccap_countable_income: 1_006

- name: Case 8, a child's earned income is not counted.
period: 2026-01
Expand Down Expand Up @@ -214,3 +219,57 @@
# The allowed cross-business offset still works: max(20,000 - 8,000, 0) =
# 12,000 net self-employment. 12,000 / 12 = 1,000 per month.
mn_ccap_countable_income: 1_000

- name: Case 13, each member's RSDI counts only above the federal maximum SSI payment.
period: 2026-01
absolute_error_margin: 0.01
input:
people:
person1:
age: 40
social_security_disability: 18_000 # 1,500/month
person2:
age: 38
employment_income: 24_000 # 2,000/month
social_security_survivors: 6_000 # 500/month
person3:
age: 6
spm_units:
spm_unit:
members: [person1, person2, person3]
households:
household:
members: [person1, person2, person3]
state_code: MN
output:
# Minn. Stat. 256P.06, subd. 3(2)(xvi), 2026 federal maximum SSI payment
# of 994 * 12 = 11,928 per recipient:
# person1 RSDI: 18,000 - 11,928 = 6,072.
# person2 RSDI: max(6,000 - 11,928, 0) = 0.
# (6,072 + 0 + 24,000) / 12 = 30,072 / 12 = 2,506 per month.
mn_ccap_countable_income: 2_506

- name: Case 14, a child's RSDI above the federal maximum SSI payment counts as family income.
period: 2026-01
absolute_error_margin: 0.01
input:
people:
person1:
age: 40
employment_income: 24_000 # 2,000/month
person2:
age: 8
social_security_dependents: 13_200 # 1,100/month
spm_units:
spm_unit:
members: [person1, person2]
households:
household:
members: [person1, person2]
state_code: MN
output:
# Minn. Stat. 256P.06, subd. 2 exempts only a child's earned income, so
# the child's own RSDI counts above 994 * 12 = 11,928:
# person2 RSDI: 13,200 - 11,928 = 1,272.
# (24,000 + 1,272) / 12 = 25,272 / 12 = 2,106 per month.
mn_ccap_countable_income: 2_106
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# Tests MN CCAP countable RSDI: Minn. Stat. 256P.06, subd. 3(2)(xvi) counts
# only the Retirement, Survivors, and Disability Insurance amount that exceeds
# the monthly federal maximum SSI payment. Federal maximum SSI payment for an
# individual (SSA): $967/month in 2025 (11,604/year), $994/month in 2026
# (11,928/year).
- name: Case 1, RSDI below the federal maximum SSI payment is not counted.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
social_security_retirement: 9_600 # 800/month
households:
household:
members: [person1]
state_code: MN
output:
# max(9,600 - 11,928, 0) = 0.
mn_ccap_countable_rsdi: 0

- name: Case 2, RSDI above the federal maximum SSI payment counts the excess.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
social_security_disability: 18_000 # 1,500/month
households:
household:
members: [person1]
state_code: MN
output:
# 18,000 - 11,928 = 6,072.
mn_ccap_countable_rsdi: 6_072

- name: Case 3, RSDI equal to the federal maximum SSI payment is not counted.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
social_security_retirement: 11_928 # 994/month
households:
household:
members: [person1]
state_code: MN
output:
# 11,928 - 11,928 = 0.
mn_ccap_countable_rsdi: 0

- name: Case 4, one person's RSDI components are combined before the offset.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
social_security_retirement: 6_000 # 500/month
social_security_survivors: 9_000 # 750/month
households:
household:
members: [person1]
state_code: MN
output:
# (6,000 + 9,000) - 11,928 = 3,072.
mn_ccap_countable_rsdi: 3_072

- name: Case 5, each recipient's RSDI is offset separately.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
age: 40
social_security_disability: 18_000 # 1,500/month
person2:
age: 38
social_security_disability: 6_000 # 500/month
spm_units:
spm_unit:
members: [person1, person2]
households:
household:
members: [person1, person2]
state_code: MN
output:
# person1: 18,000 - 11,928 = 6,072.
# person2: max(6,000 - 11,928, 0) = 0; the unused offset does not carry
# over to person1.
mn_ccap_countable_rsdi: [6_072, 0]

- name: Case 6, the 2025 federal maximum SSI payment applies in 2025.
period: 2025
absolute_error_margin: 0.01
input:
people:
person1:
social_security_retirement: 15_000 # 1,250/month
households:
household:
members: [person1]
state_code: MN
output:
# 15,000 - 967 * 12 = 15,000 - 11,604 = 3,396.
mn_ccap_countable_rsdi: 3_396

- name: Case 7, RSDI just above the federal maximum SSI payment counts only the excess.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
social_security_retirement: 11_940 # 995/month
households:
household:
members: [person1]
state_code: MN
output:
# 11,940 - 11,928 = 12.
mn_ccap_countable_rsdi: 12

- name: Case 8, a child's own dependents' benefit gets its own offset.
period: 2026
absolute_error_margin: 0.01
input:
people:
person1:
age: 40
social_security_disability: 18_000 # 1,500/month
person2:
age: 8
social_security_dependents: 13_200 # 1,100/month
person3:
age: 5
social_security_dependents: 6_000 # 500/month
spm_units:
spm_unit:
members: [person1, person2, person3]
households:
household:
members: [person1, person2, person3]
state_code: MN
output:
# person1: 18,000 - 11,928 = 6,072.
# person2: 13,200 - 11,928 = 1,272.
# person3: max(6,000 - 11,928, 0) = 0.
mn_ccap_countable_rsdi: [6_072, 1_272, 0]
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from policyengine_us.model_api import *


class mn_ccap_countable_rsdi(Variable):
value_type = float
entity = Person
unit = USD
label = "Minnesota CCAP countable Retirement, Survivors, and Disability Insurance"
definition_period = YEAR
defined_for = StateCode.MN
reference = (
"https://www.revisor.mn.gov/statutes/cite/256P.06",
"https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=CCAP_0606",
"https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=CCAP_061524",
"https://www.dhs.state.mn.us/main/idcplg?IdcService=GET_DYNAMIC_CONVERSION&RevisionSelectionMethod=LatestReleased&dDocName=cm_00171545",
)

def formula(person, period, parameters):
# Minn. Stat. 256P.06, subd. 3(2)(xvi) counts, for chapter 142E
# programs, only the RSDI amount that exceeds the monthly federal
# maximum SSI payment. CCAP Policy Manual section 6.6 annualizes the
# gross RSDI and deducts the SSI federal benefit rate from it; section
# 6.15.24 gives that rate as $967 per month in 2025, the individual
# rate. Combined Manual 0017.15.45 counts, for each client who receives
# RSDI, only the amount above the SSI standard for a household of 1,
# and its 09/2024 revision note applies the change to CCAP. We apply
# the individual rate to each recipient's own RSDI.
p = parameters(period).gov.states.mn.dcyf.ccap.income.countable_income
rsdi = add(person, period, p.rsdi_sources)
monthly_fbr = parameters(period).gov.ssa.ssi.amount.individual
return max_(rsdi - monthly_fbr * MONTHS_IN_YEAR, 0)
Loading