Skip to content

Count Minnesota CCAP RSDI only above the federal SSI maximum - #10333

Merged
PavelMakarchuk merged 5 commits into
mainfrom
mn-ccap-rsdi-above-ssi-fbr
Oct 23, 2026
Merged

PavelMakarchuk merged 5 commits into
mainfrom
mn-ccap-rsdi-above-ssi-fbr

Conversation

@PavelMakarchuk

@PavelMakarchuk PavelMakarchuk commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Minnesota CCAP counted the full gross RSDI (social_security_retirement, social_security_survivors, social_security_disability) as unearned income and did not count dependents' benefits. For CCAP, the statute counts only the part of RSDI above the monthly federal maximum SSI payment.

  • New variable mn_ccap_countable_rsdi (Person, YEAR): each recipient's RSDI minus 12 × gov.ssa.ssi.amount.individual, floored at zero.
  • New list gov.states.mn.dcyf.ccap.income.countable_income.rsdi_sources holds social_security: retirement, survivors, disability and dependents' benefits.
  • unearned.yaml now lists mn_ccap_countable_rsdi in place of the three components.
  • No hard-coded amounts. The offset reads the existing federal SSI benefit-rate parameter.

Law

Minn. Stat. 256P.06, subd. 3(2)(xvi) (2025 text), in the unearned income list:

(xvi) for the purposes of programs under chapters 142E and 142G, the amount of retirement, survivors, and disability insurance payments that exceeds the applicable monthly federal maximum Supplemental Security Income payments.

  • Chapter 142E is CCAP (formerly 119B). The 2023 and 2024 texts name chapters 119B and 256J.
  • Effective date: September 1, 2024 (Laws 2023, ch. 70, art. 10, s. 79; note in the 2023 statutes). The CCAP parameters start on 2025-01-01, so the rule applies to every modeled year.
  • CCAP Policy Manual 6.6 (issue date 06/2026) agrees. It says to annualize the gross RSDI, and: "The SSI Federal Benefit Rate is a required RSDI income deduction."
  • Manual 6.15.24 (issue date 01/2025) reduces RSDI by the SSI Federal Benefit Rate.
  • Manual 6.18 (issue date 01/2021) does not list this deduction. It predates the 2024 law. This is not a source conflict.

Dependents' benefits. Combined Manual 0029.06.06 says "RSDI provides a monthly income to retired people, survivors or dependents of insured people, and people with disabilities." Minn. Stat. 256P.06, subd. 2 exempts only a child's earned income. So a child's own dependents' benefit counts, above its own offset.

Interpretation for review

The statute says "the applicable monthly federal maximum" SSI payment. The code subtracts the individual rate from each recipient's own RSDI. It does not use the couple rate when both spouses get RSDI.

  • CCAP Policy Manual 6.6 names one SSI Federal Benefit Rate deduction for each RSDI amount and does not mention a couple rate.
  • CCAP Policy Manual 6.15.24 (Annualizing RSDI, issue date 01/2025) supports this reading. It says RSDI "is reduced by the amount of the Social Security Insurance (SSI) Federal Benefit Rate, currently $967 per month." $967 is the 2025 individual rate (the 2025 couple rate is $1,450). The page does not mention a couple rate. The live DHS page shows a bot-check page, so I read the Wayback Machine copy of April 11, 2025.
  • Combined Manual 0017.15.45 (issue date 11/2024) states the rule outright for MFIP and DWP: "For each client who receives RSDI, count only the gross RSDI amount that exceeds the SSI standard amount for a household of 1 as unearned income." Its 09/2024 revision note says the change "applies to MFIP, DWP, and CCAP." I read the Wayback copy of December 3, 2025.
  • This PR cites 6.15.24 and CM 0017.15.45 in rsdi_sources.yaml and mn_ccap_countable_rsdi, and CM 0029.06.06 in rsdi_sources.yaml.

Tests

New mn_ccap_countable_rsdi.yaml, 8 cases. Values are hand computed from the statute and the SSA rates ($967 a month in 2025, $994 a month in 2026):

  • below, equal to, just above ($995 a month → 12 a year) and well above the SSI maximum;
  • one person's components combined before the offset;
  • two recipients offset separately;
  • the 2025 rate;
  • a parent and two children with dependents' benefits, each offset separately ([6,072, 1,272, 0]).

mn_ccap_countable_income.yaml:

  • Case 2: 2,600 → 2,100. The $6,000 of RSDI is below $11,928, so it counts as 0.
  • Case 7: 2,000 → 1,006. RSDI 12,000 − 11,928 = 72 counts.
  • New case 13: a three-person family with two RSDI recipients (2,506 a month).
  • New case 14: a child's dependents' benefit of $13,200 counts 1,272 toward family income (2,106 a month).

Local results at c3886690eb:

  • policyengine-core test policyengine_us/tests/policy/baseline/gov/states/mn/dcyf/ccap -c policyengine_us: 131 passed.
  • pytest policyengine_us/tests/code_health: 426 passed, 1 skipped.
  • ruff format and ruff check: clean.

Notes

axiom: TheAxiomFoundation/rulespec-us#1869 queued

🤖 Generated with Claude Code

PavelMakarchuk and others added 3 commits October 20, 2026 20:51
Minn. Stat. 256P.06, subd. 3(2)(xvi) counts, for chapter 142E (CCAP),
only the RSDI amount that exceeds the monthly federal maximum SSI
payment (effective September 1, 2024, Laws 2023, ch. 70, art. 10,
s. 79). CCAP Policy Manual 6.6 deducts the SSI federal benefit rate
from gross RSDI. The model counted the full gross RSDI.

Add mn_ccap_countable_rsdi, which subtracts the annualized individual
SSI federal benefit rate (gov.ssa.ssi.amount.individual) from each
recipient's RSDI, and count it in place of the three RSDI components
in the CCAP unearned income list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Manual 6.15.24 (issue date 01/2025) reduces RSDI by the SSI Federal
Benefit Rate, "currently $967 per month", which is the 2025 individual
rate. Add it as a reference for the RSDI offset.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@PavelMakarchuk
PavelMakarchuk marked this pull request as ready for review October 21, 2026 16:27
@codecov

codecov Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (909176a) to head (c388669).
⚠️ Report is 600 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main    #10333   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            4         1    -3     
  Lines           76        14   -62     
  Branches         2         0    -2     
=========================================
- Hits            76        14   -62     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 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.

@DTrim99

DTrim99 commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Count Minnesota CCAP RSDI only above the federal SSI maximum

PR #10333 (author: PavelMakarchuk), head 27d20f4076. This is a first review. The PR:

  • adds a person-level mn_ccap_countable_rsdi: each recipient's RSDI minus 12 × the individual SSI federal benefit rate (FBR), floored at zero;
  • moves the three RSDI components into a new rsdi_sources list and puts the new variable in their place in the CCAP unearned list;
  • updates two expectations and adds one case in mn_ccap_countable_income.yaml;
  • adds a six-case mn_ccap_countable_rsdi.yaml and a fixed changelog fragment.

There are no reviews yet, and the only comment is from Codecov. The PR touches no partner test file.

Path prefixes:

  • P/ = policyengine_us/parameters/gov/states/mn/dcyf/ccap/income/countable_income/
  • V/ = policyengine_us/variables/gov/states/mn/dcyf/ccap/
  • T/ = policyengine_us/tests/policy/baseline/gov/states/mn/dcyf/ccap/

Summary

What is right:

  • The rule matches the statute. Minn. Stat. 256P.06, subd. 3(2)(xvi) counts, "for the purposes of programs under chapters 142E and 142G, the amount of retirement, survivors, and disability insurance payments that exceeds the applicable monthly federal maximum Supplemental Security Income payments."
    • History. Laws 2023, ch. 70, art. 10, s. 79 added the item (naming chapters 119B and 256J), with "This section is effective September 1, 2024." The same section limited full RSDI counting in (viii) to chapters 256D and 256I.
    • Years. The CCAP parameters start on 2025-01-01, so every modeled year falls under the new rule.
  • "Applicable" means the individual rate, applied per person. Two DHS sources support the PR's reading:
    • CCAP Policy Manual 6.15.24 (issue date 01/2025): "RSDI is reduced by the amount of the Social Security Insurance (SSI) Federal Benefit Rate, currently $967 per month." $967 is the 2025 individual FBR. The couple rate was $1,450.
    • Combined Manual 0017.15.45 (issue date 11/2024), for MFIP and DWP: "For each client who receives RSDI, count only the gross RSDI amount that exceeds the SSI standard amount for a household of 1 as unearned income." Its 09/2024 revision note says the change "applies to MFIP, DWP, and CCAP."
  • Monthly versus annual. The statute is monthly, and the code offsets annual RSDI by 12 × the monthly FBR. CCAP annualizes gross RSDI (manual 6.6: "The gross amount of RSDI is the amount to be annualized. The SSI Federal Benefit Rate is a required RSDI income deduction."). PolicyEngine spreads annual inputs evenly across months, so the two methods agree.
  • The code is sound.
    • It is vectorized: add and max_ work over arrays, and the parameter is a scalar.
    • It has no hard-coded amounts. The FBR comes from gov.ssa.ssi.amount.individual at the year's January 1 instant ($967 for 2025, $994 for 2026).
  • Tests. I hand-checked all 9 new or changed expectations, and CI passed all of them.
  • Batch checks. The source-conflict ratchet passes. The NH Add New Hampshire state supplementation for 2026 #10156 key pattern, Integrate modeled state unemployment insurance into income flows #9558, Document disjoint health premium inputs and correct consumer treatment #10046 and the LIHEAP floor do not apply.

There are no critical findings and one should-address item:

  • S1. axiom: needed is not a valid line for a staff PR.

There are also four suggestions. The main one is G1: the new RSDI list still leaves out Social Security dependents' benefits.

Status.

Critical (must fix)

None.

Should address

S1. axiom: needed is not a valid line for a staff PR

  • Where: the last paragraph of the PR body: "axiom: needed — rulespec-us has no us-mn module for Minn. Stat. 256P.06 or CCAP, and no issue for it. A queued pe-parity issue needs a separate approval."
  • Rule: CLAUDE.md, "Axiom Parity". needed is only for an external contributor who cannot do the Axiom work. A staff PR needs one of:
    • encoded-correct;
    • queued, with an open, pe-parity-labelled, dispatch-ready issue;
    • a valid n/a. That does not fit here, because this PR changes a household's countable income under a named statute.
  • The body's facts are right.
    • No module. rulespec-us's us-mn tree holds only chapter 290 statutes, the CMS eligibility levels and two Combined Manual policies (MSA standards and the MFIP total grant).
    • No issue. No rulespec-us issue mentions 256P.06 or CCAP.
  • Filing is not the blocked step. Filing a dispatch-ready issue is free. Only the billed signed-encoder run needs separate approval, so queued is available now.
  • Fix: file one pe-parity issue in TheAxiomFoundation/rulespec-us and change the line. The issue needs:
    • Module path: us-mn/statutes/256P/06 (subd. 3(2)(xvi)), following the existing us-mn/statutes/290/... layout.
    • Corpus citation: Minn. Stat. 256P.06, subd. 3(2)(xvi) (2025), and Laws 2023, ch. 70, art. 10, s. 79. The effective date is September 1, 2024, and chapters 119B and 256J were later renumbered 142E and 142G.
    • Verbatim law: item (xvi), plus item (viii) for contrast.
    • Required outputs: countable RSDI for each recipient under chapters 142E and 142G. That is gross monthly RSDI minus the individual SSI FBR, floored at zero.
    • Companion tests from external sources: CCAP Manual 6.15.24 ($967 in 2025) and CM 0017.15.45 (each client, household of 1), with SSA's published FBRs. For example:
      • 2025 RSDI of $1,250 a month counts $283;
      • 2026 RSDI of $994 a month counts $0;
      • in 2026, two recipients with $1,500 and $500 a month count $506 and $0.
    • Blocker: the signed-encoder run needs approval.
    • Line: axiom: TheAxiomFoundation/rulespec-us#<new issue> queued

Suggestions

G1. rsdi_sources leaves out social_security_dependents.

  • Where: P/rsdi_sources.yaml:4-8. The comment says only that the components are listed "rather than the social_security umbrella, which also adds social_security_dependents". It gives no rule for excluding dependents' benefits.
  • Why it matters:
    • RSDI includes dependents' benefits. Combined Manual 0029.06.06 says "RSDI provides a monthly income to retired people, survivors or dependents of insured people, and people with disabilities."
    • No exclusion applies. Item (xvi) and manual 6.6 ("Retirement, Survivors, Disability Insurance (RSDI)") count RSDI without excluding dependents. 256P.06, subd. 2 exempts only children's earned income, so a child's own RSDI counts.
  • Example (2026). A child of a disabled parent receives a $1,100-a-month child's benefit, entered as social_security_dependents. The child should add (1,100 − 994) × 12 = $1,272 a year. At the head, the child adds $0.
  • Why only a suggestion: the omission predates this PR (the Implement Minnesota Child Care Assistance Program (CCAP) #8636 implementation set it up). This PR also shrinks its effect to dependents' benefits above the FBR.
  • Fix: either add social_security_dependents to the list, with a test (the per-person offset now makes that safe), or cite the rule that excludes it.

G2. MFIP still counts full RSDI under the same statutory item.

  • Where: policyengine_us/parameters/gov/states/mn/dcyf/mfip/income/sources/unearned.yaml lists social_security. Item (xvi) also covers chapter 142G (MFIP), as CM 0017.15.45 confirms.
  • Example. mn_mfip_gross_unearned_income.yaml Case 2 counts $3,600 a year of Social Security as $300 a month, for an expected 450. Under (xvi), the RSDI counts $0, so the expectation would be 150.
  • Why only a suggestion: the PR body says MFIP is out of scope, but no issue tracks it.
  • Fix: open a follow-up issue and link it in the body. A program-neutral variable, for example one named for the 256P.06 rule, would let MFIP reuse this formula.

G3. Add a just-above case and a child case.

  • Just above. The equal case (11,928 → 0) and the well-above case (18,000 → 6,072) already pin the boundary and the subtraction. A case at $995 a month (11,940 → 12) would show directly that only the excess counts at the threshold.
  • Child. A child recipient case would pin that a child's own RSDI gets its own offset. It would also cover G1 if that change is adopted.

G4. References and PR body.

  • Reference. Add CM 0017.15.45 to the variable's comment or references. It states the "each client, household of 1" rule outright, while 6.15.24 only implies it through the $967 figure.
  • Stale note. The body says test_conflict_sounding_comments_do_not_grow fails on main because of FL and SD LIHEAP files. Count the FL and SD LIHEAP comments in the source-conflict ratchet baseline #10334 fixed that on 2026-10-21, and the run at this head passed the test.
  • Axiom paragraph. Filing an issue does not need approval; only the billed run does (S1).

Verified correct

Law and sources:

  • Statute. The current revisor text of 256P.06, subd. 3(2)(xvi) matches the body's quote. Item (viii) now counts full RSDI only for chapters 256D and 256I.
  • Session law. 2023 c 70 art 10 s 79 added (xvi) for chapters 119B and 256J, effective September 1, 2024. The later renumbering to 142E and 142G does not change the rule.
  • Manual quotes. I read manual 6.6 and 6.15.24 (issue date 01/2025) from Wayback copies, because the live DHS pages return a bot check. Both match the body's quotes, and so does the CM 0017.15.45 text above.
  • Medicare premium. Manual 6.6 also allows the Medicare premium from the RSDI award letter as a deduction. CCAP premium deductions are a documented deferral in deductions/sources.yaml, and the body says so.

Code:

  • Formula. V/mn_ccap_countable_rsdi.py:24-27 sums the person's listed RSDI components, then subtracts gov.ssa.ssi.amount.individual × MONTHS_IN_YEAR and floors the result at zero. That parameter is the "Monthly maximum Federal SSI payment amounts for an eligible individual."
  • Callers. mn_ccap_gross_unearned_income sums the person values over the SPM unit through adds. Nothing else reads the unearned or rsdi_sources lists.
  • Not a key. The variable is a float, defined for MN, and is not used as a parameter or breakdown key, so the NH Add New Hampshire state supplementation for 2026 #10156 pattern does not apply.
  • Changelog and metadata.
    • changelog.d/mn-ccap-rsdi-above-ssi-fbr.fixed.md is top level and typed fixed.
    • The new parameter has a description, a label, unit: list, period: year and single references.
    • programs.yaml needs no change.

Hand-checked expectations (9). FBR × 12 is 11,928 for 2026 and 11,604 for 2025.

  1. T/mn_ccap_countable_rsdi.yaml Case 1. max(9,600 − 11,928, 0) = 0.
  2. Case 2. 18,000 − 11,928 = 6,072.
  3. Case 3 (at the threshold). 11,928 − 11,928 = 0.
  4. Case 4. (6,000 + 9,000) − 11,928 = 3,072. Offsetting each component separately would give 0.
  5. Case 5. [6,072, 0]. The alternative readings give different totals:
    • one household-level offset: 24,000 − 11,928 = 12,072;
    • the couple rate: 24,000 − 1,491 × 12 = 6,108.
  6. Case 6 (2025). 15,000 − 11,604 = 3,396.
  7. T/mn_ccap_countable_income.yaml Case 2. (24,000 + 0 + 1,200) / 12 = 2,100.
  8. Case 7. (72 + 6,000 + 3,600 + 2,400) / 12 = 1,006.
  9. Case 13. (6,072 + 0 + 24,000) / 12 = 2,506. Person3 (age 6) has no income.

Batch checks:

Axiom line assessment

Invalid: axiom: needed (S1).

  • No existing work. rulespec-us has no us-mn module for 256P.06 or CCAP, and no open issue covers it.
  • Recommended line, after filing one dispatch-ready pe-parity issue with the contents in S1: axiom: TheAxiomFoundation/rulespec-us#<new issue> queued

CI status

29 pass, 3 skipping, 0 failed. Run 39635014669 (pull_request, started 2026-10-21 16:28 UTC) tested head 27d20f4076. I re-checked gh pr checks 10333 at the end of this review.

  • Passed:
    • Baseline: all four states shards, plus the contrib-hhs, household, irs, reform, rest-a, rest-b and ssa-usda shards.
    • Contrib: all nine shards.
    • Python: Microsimulation, Rest (Python + variables) and Rest (Python, shard-1 + variables).
    • Other: Household API Partners, PR validation, Package and compatibility, Quick Feedback, and codecov patch and project.
  • Skipping: the three wrapper checks from the companion skipped run.
  • Locally: I ran no model tests or probes. The expectations above are hand traces of the code at the head.

Branch status

  • Position: 3 commits ahead of main (05813807e1) and 20 behind. The merge base is a6fafb06c2.
    • Overlap: the 20 newer commits touch Minnesota only in tax files (the Social Security subtraction and AMT taxable income). None touches CCAP, the SSI amount parameters or this PR's files.
  • Merge: clean. git merge-tree --write-tree PolicyEngine/main 27d20f4076 exits 0.
  • Siblings (branch note):

0 critical, 1 should and 4 suggestions are open at this head.

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The law is right: 256P.06 subd. 3(2)(xvi), effective 2024-09-01, excludes RSDI up to the per-person individual SSI FBR (CCAP 6.15.24; CM 0017.15.45), and all 9 expectations hand-check. One should-address item: 'axiom: needed' is invalid for staff. Filing a dispatch-ready pe-parity issue is free (only the billed encoder run needs approval), so please file one for us-mn/statutes/256P/06 and mark it queued. Four suggestions, including MFIP still counting full Social Security under the same item. Full report in the comment above.

PavelMakarchuk and others added 2 commits October 22, 2026 15:06
…5.45

Address DTrim99's review of #10333:
- G1: count social_security (retirement, survivors, disability and
  dependents' benefits) in rsdi_sources; CM 0029.06.06 says RSDI pays
  dependents of insured people, and 256P.06, subd. 2 exempts only a
  child's earned income.
- G3: add a just-above-threshold case and child dependents' benefit
  cases.
- G4: cite CM 0017.15.45 (each client, household of 1; applies to CCAP).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@DTrim99

DTrim99 commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator

PR Review (round 2): Count Minnesota CCAP RSDI only above the federal SSI maximum

PR #10333 (author: PavelMakarchuk), head c3886690eb. Our round 1 reviewed 27d20f4076 and requested changes (0 critical, 1 should, 4 suggestions). Since then the author has pushed one commit and then merged main:

  • a8cb15b6d1 has five parts:
    • rsdi_sources now lists the social_security umbrella, so dependents' benefits count (G1);
    • it cites Combined Manual 0017.15.45 and 0029.06.06 (G4);
    • it adds a just-above case and a three-person child case to mn_ccap_countable_rsdi.yaml (G3);
    • it adds a child-RSDI case to mn_ccap_countable_income.yaml (G3);
    • it updates the changelog text.
  • c3886690eb merges main, with no hand-resolved conflicts.

The PR body now links #10387 for MFIP and carries axiom: TheAxiomFoundation/rulespec-us#1869 queued. No partner test file changes.

Summary

  • S1 is fixed. rulespec-us#1869 is OPEN, labelled pe-parity and dispatch-ready.
    • Contents: the module path, an ingested corpus row (us-mn/statute/256P.06), the verbatim (xvi), (viii) and subd. 2(a), the required outputs, and ten companion tests from the statute and SSA's FBRs.
    • Blockers recorded: a corpus re-pin and a billed encoder run.
    • Matches the head: it names head c3886690eb and mirrors the new cases.
  • G1–G4 are all fixed.
    • G1. Dependents' RSDI now counts, with each recipient's own offset.
    • G2. MFIP is tracked in policyengine-us#10387, which the body links.
    • G3. The new cases are $995 a month → 12, a parent and two children → [6,072, 1,272, 0], and a child's benefit in family income → 2,106.
    • G4. CM 0017.15.45 is cited, and the stale ratchet note and the axiom paragraph are fixed.
  • G1's legal basis is confirmed. Minn. Rules 3400.0170 subp. 4 sums "each family member's income sources", and subp. 4a.A exempts only the earned income of 256P.06 subd. 2(a) individuals.
  • Every new expectation hand-checks. No existing expectation changed. No test sets the social_security umbrella directly, so the switch moves no old case.
  • New findings: none.
  • CI: 8 pass, 11 pending and 0 failed at 22:29 UTC. The states shard that holds the MN CCAP tests has not finished.
  • Branch: 5 ahead and 0 behind main, and it merges cleanly.

Prior findings

Finding Status Evidence
S1. axiom: needed is invalid for a staff PR Fixed axiom: TheAxiomFoundation/rulespec-us#1869 queued. #1869 is OPEN, labelled pe-parity, created 2026-10-22 19:18 UTC, and names head c3886690eba7… (see Axiom).
G1. rsdi_sources left out social_security_dependents Fixed The list is now - social_security, which adds the dependents, disability, retirement and survivors components. The comment cites CM 0029.06.06, which says "RSDI provides a monthly income to retired people, survivors or dependents of insured people, and people with disabilities." I re-read the 2026-04-10 Wayback copy, and the quote matches. Rules 3400.0170 subp. 4a.A exempts only earned income, so a child's own RSDI counts. The per-person offset in mn_ccap_countable_rsdi gives the child its own FBR offset.
G2. MFIP still counts full RSDI under the same item Fixed (follow-up tracked) policyengine-us#10387 is OPEN. It quotes (xvi) and CM 0017.15.45 and works through MFIP Case 2 (450 → 150). It proposes a program-neutral variable and a 2024-09-01 start date, and flags the partner-test approval gate. The body's Notes link it. #1869 asks for (xvi) for both 142E and 142G.
G3. Add a just-above case and a child case Fixed mn_ccap_countable_rsdi.yaml Case 7 ($995 a month gives 12) and Case 8 ([6,072, 1,272, 0]), and mn_ccap_countable_income.yaml Case 14 (2,106). All are hand-checked below.
G4. Cite CM 0017.15.45; stale ratchet note; axiom paragraph Fixed CM 0017.15.45 is in the variable's reference tuple and in rsdi_sources.yaml. The formula comment quotes its "each client … household of 1" rule and the 09/2024 note that applies it to CCAP. The body no longer says the ratchet fails on main, and the axiom paragraph is replaced by the queued line.

New findings

Critical: none. Should address: none. Suggestions: none.

Verified

Code at the head:

  • Formula. mn_ccap_countable_rsdi is max_(add(person, period, rsdi_sources) − gov.ssa.ssi.amount.individual × 12, 0). With rsdi_sources = [social_security], add returns the person's total of the four components.
  • No double count. No component is also listed in unearned.yaml, which lists mn_ccap_countable_rsdi in their place.
  • The umbrella moves no existing case. No CCAP test sets social_security directly. The only MN tests that do are tax, MSA and MFIP files, which do not read this list.
  • Callers. Nothing else reads rsdi_sources. mn_ccap_gross_unearned_income adds the unearned list over the SPM unit, and mn_ccap_countable_income = earned + unearned − deductions. The deductions are child_support_expense and alimony_expense, both 0 in the new cases.

Hand-checked new expectations. 12 × FBR is 11,928 for 2026 ($994) and 11,604 for 2025 ($967).

  1. mn_ccap_countable_rsdi.yaml Case 7 (2026). 11,940 − 11,928 = 12. Only the excess counts at the threshold.
  2. Case 8 (2026).
    • Parent: 18,000 − 11,928 = 6,072.
    • Child aged 8: 13,200 − 11,928 = 1,272.
    • Child aged 5: max(6,000 − 11,928, 0) = 0.
    • Result: [6,072, 1,272, 0]. A single household offset would give 37,200 − 11,928 = 25,272 in total. The old component list would give the children 0.
  3. mn_ccap_countable_income.yaml Case 14 (2026-01).
    • Earned is 24,000. is_child excludes only earnings, and the child has none.
    • Unearned is the child's RSDI, 1,272. Deductions are 0.
    • Result: 25,272 / 12 = 2,106. Under the round-1 head the child's benefit counted 0, which gives 2,000.

No changed expectations. Cases 1–6 of mn_ccap_countable_rsdi.yaml and Cases 1–13 of mn_ccap_countable_income.yaml are unchanged. They set only RSDI components, so the umbrella sums them the same way. Round 1 hand-checked them, and CI passed them at 27d20f4076.

Law:

  • Rules 3400.0170 subp. 4: "A family's gross annual income is the sum of each family member's income sources under Minnesota Statutes, sections 119B.011, subdivision 15, and 256P.01, subdivisions 3 and 8, including … unearned income".
  • Subp. 4a.A: "Individuals under Minnesota Statutes, section 256P.06, subdivision 2, paragraph (a), are exempt from having a CCAP agency count their earned income."
  • Why the child's RSDI counts. A child's own RSDI is unearned income and is not exempt. Case 14 and CalEITC has a cliff for a one-child family #1869's rationale are therefore right.

Batch checks:

Axiom

Valid: axiom: TheAxiomFoundation/rulespec-us#1869 queued.

  • State: OPEN, labelled pe-parity.
  • Module and corpus. The proposed module is us-mn/statutes/256P/06.yaml, with subd. 3(2)(xvi) only. It notes that existing modules have no MN 256P coverage.
  • Corpus status. The row us-mn/statute/256P.06 is ingested, with its scope and row UUID given. The issue notes that the pinned release does not select the 256P scope. It also warns that the corpus's 11/2019 CM 0017.15.45 predates the rule and must not be used as proof.
  • Verbatim law. It quotes subd. 3 items (viii) and (xvi) and subd. 2(a), plus the 2023 ch. 70 art. 10 s. 79 history and its 2024-09-01 effective date.
  • Required outputs. Per recipient and per month: max(gross RSDI including dependents' benefits − the individual FBR, 0), for 142E and 142G, with item (viii) as the control for 256D and 256I.
  • Companion tests. There are 10 rows, from the statute and SSA's FBRs ($967 and $994; 967 × 1.028 = 994.08, rounded down). Rows 7 and 8 mirror the new YAML monthly ($1; [$506, $106, $0]), and the rows include 256D and 142G controls.
  • Blockers recorded. A compatible corpus re-pin is needed and each billed signed-encoder run needs approval. It includes a paste-ready review_finding.

CI

8 pass, 11 pending and 0 failed per gh pr checks 10333 at 22:29 UTC on 2026-10-22. Run 39838948982 (pull_request, created 19:18 UTC) tests head c3886690eb merged into 2bc4ccc970, which is current main.

  • Passed: Baseline states-shard-3, Household API Partners, PR validation, Package and compatibility, Microsimulation, Quick Feedback, and codecov patch and project.
  • Pending:
    • Baseline household, irs, contrib-hhs, reform, rest-a, rest-b, ssa-usda and states shards 1, 2 and 4;
    • Rest (Python, shard-1 + variables).
  • Where the MN tests run. states-shard-3 covered AR, CT, GA, ID, KY, ME, MS, NE, NV, OR, SD, UT and WI, so the MN CCAP files are in a pending shard.
  • Locally: I ran no tests or probes. The values above are hand traces of the code at the head.

Branch

  • Position: 5 commits ahead of main (2bc4ccc970) and 0 behind. The merge base is 2bc4ccc970.
    • Overlap: since round 1's base, no commit on main touches gov/ssa/ssi/amount or Minnesota DCYF files.
  • Merge: clean. git merge-tree --write-tree PolicyEngine/main c3886690eb exits 0 (tree 083711b5e1).
  • Siblings (branch note). Count military SBP annuities in state benefit income lists #10317 (f297b6ac67) switches military_retirement_pay to military_retirement_income in the same unearned.yaml. A trial merge with this head is clean in either order, and its new guard passes on the result.

0 critical, 0 should and 0 suggestions are open at this head. Let CI finish green before merging. The MN CCAP shard has not reported yet.

Verdict: APPROVE

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 2: the axiom item is fixed (rulespec-us#1869 queued, dispatch-ready, blockers recorded), and so are all four suggestions: dependents' RSDI counted with its own offset, MFIP tracked in #10387, the just-above and child cases, and the citations. The new cases hand-check. The MN CCAP shard was still pending, so please let CI finish green before merging. Full report in the comment above.

@PavelMakarchuk
PavelMakarchuk merged commit 9bfd971 into main Oct 23, 2026
29 checks passed
@PavelMakarchuk
PavelMakarchuk deleted the mn-ccap-rsdi-above-ssi-fbr branch October 23, 2026 16:40
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.

2 participants