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-msa-guardian-fee-county-staff.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Exclude county agency staff guardians and conservators from Minnesota Supplemental Aid guardian fees while retaining the statutory 5% of gross monthly income / $100 cap for other guardians.
1 change: 1 addition & 0 deletions policyengine_us/tests/code_health/test_source_conflicts.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@
"policyengine_us/variables/gov/states/ks/tax/income/deductions/ks_itemized_deductions.py": 1,
"policyengine_us/variables/gov/states/ky/dcbs/liheap/ky_liheap.py": 1,
"policyengine_us/variables/gov/states/mn/dcyf/mfip/income/earned/mn_mfip_dependent_care_deduction.py": 1,
"policyengine_us/variables/gov/states/mn/dhs/msa/payment/mn_msa_guardian_fee.py": 1,
"policyengine_us/variables/gov/states/mn/tax/income/deductions/mn_itemized_deductions.py": 1,
"policyengine_us/variables/gov/states/mn/tax/income/subtractions/mn_k12_education_subtraction.py": 1,
"policyengine_us/variables/gov/states/mo/dese/ccs/eligibility/mo_ccs_income_eligible.py": 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
immigration_status: CITIZEN
ssi_countable_resources: 500
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: false
ssi_unearned_income: 24_000 # $2,000/mo gross
marital_units:
marital_unit:
Expand Down Expand Up @@ -40,6 +41,7 @@
immigration_status: CITIZEN
ssi_countable_resources: 500
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: false
ssi_unearned_income: 36_000 # $3,000/mo gross -> 5% = $150
marital_units:
marital_unit:
Expand Down Expand Up @@ -70,6 +72,7 @@
immigration_status: CITIZEN
ssi_countable_resources: 500
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: false
ssi: 0
ssi_unearned_income: 12_000 # $1,000/mo -> 5% = $50
marital_units:
Expand Down Expand Up @@ -146,6 +149,7 @@
state_code: MN
output:
# min(5% of $1,999 = $99.95, $100 cap) = $99.95.
mn_msa_guardian_is_county_staff: false
mn_msa_guardian_fee: 99.95

- name: Case 6, gross income $1 above $2,000 boundary is capped at $100.
Expand Down Expand Up @@ -177,3 +181,60 @@
output:
# min(5% of $2,001 = $100.05, $100 cap) = $100.
mn_msa_guardian_fee: 100

- name: Case 7, county agency staff guardian receives no fee below the cap.
period: 2026-01
input:
state_code: MN
age: 70
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: true
ssi: 0
ssi_unearned_income: 12_000 # $1,000/mo would otherwise allow $50.
output:
mn_msa_guardian_fee: 0

- name: Case 8, county agency staff guardian receives no fee above the cap.
period: 2026-01
input:
state_code: MN
age: 70
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: true
ssi: 0
ssi_unearned_income: 36_000 # $3,000/mo would otherwise allow $100.
output:
mn_msa_guardian_fee: 0

- name: Case 9, county staff status only excludes that person's guardian fee.
period: 2026-01
input:
people:
county_staff_guardian_person:
age: 70
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: true
ssi: 0
ssi_unearned_income: 18_000
nonstaff_guardian_person:
age: 70
mn_msa_has_guardian: true
mn_msa_guardian_is_county_staff: false
ssi: 0
ssi_unearned_income: 18_000
marital_units:
marital_unit:
members: [county_staff_guardian_person, nonstaff_guardian_person]
tax_units:
tax_unit:
members: [county_staff_guardian_person, nonstaff_guardian_person]
spm_units:
spm_unit:
members: [county_staff_guardian_person, nonstaff_guardian_person]
households:
household:
members: [county_staff_guardian_person, nonstaff_guardian_person]
state_code: MN
output:
# Unit gross income is $3,000/mo: only the nonstaff guardian gets the $100 cap.
mn_msa_guardian_fee: [0, 100]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from policyengine_us.model_api import *


class mn_msa_guardian_is_county_staff(Variable):
value_type = bool
default_value = False
entity = Person
label = "Whether the person's Minnesota Supplemental Aid guardian or conservator is a member of the county agency staff"
definition_period = MONTH
defined_for = StateCode.MN
reference = "https://www.revisor.mn.gov/statutes/cite/256D.44#stat.256D.44.5"
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,14 @@ def formula(person, period, parameters):
# for SSI recipients count the full SSI FBR as gross unearned
# income (even when the actual SSI check is less). Aggregate to
# the marital unit before applying the cap.
# Minnesota DHS correspondence (2026-10-19) reports that approved
# guardian fees are $100 in practice regardless of income.
# PolicyEngine follows the statute's 5%/$100 cap, which governs.
p = parameters(period).gov.states.mn.dhs.msa.special_needs.guardian_fee
has_guardian = person("mn_msa_has_guardian", period)
guardian_is_county_staff = person("mn_msa_guardian_is_county_staff", period)
gross = person("mn_msa_gross_income", period)
unit_gross = person.marital_unit.sum(gross)
unit_fee = min_(unit_gross * p.rate, p.max_amount)
return has_guardian * unit_fee
# Minn. Stat. § 256D.44 Subd. 5(d) allows no fee for county agency staff.
return has_guardian * ~guardian_is_county_staff * unit_fee
6 changes: 4 additions & 2 deletions source_conflicts/candidates.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3148,8 +3148,10 @@ candidates:
example: An SSI-only recipient receives $49.70 versus $100 in 2026, and $51.45 versus $100 in 2027.
pe_us:
follows: statute
code: []
prs: []
code:
- policyengine_us/variables/gov/states/mn/dhs/msa/payment/mn_msa_guardian_fee.py
prs:
- https://github.com/PolicyEngine/policyengine-us/pull/10315
state: ruled
note: Ruled in October 2026 to retain the statutory cap; confirm and describe the stated agency practice without
quoting correspondence.
Expand Down
Loading