Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
PR Review: Add Minnesota EAP Primary Heat benefitPR #10433 (author: hua7450), head
The PR has no comments or reviews yet, and it touches no partner test file. Path prefixes:
Sources read for this review:
SummaryWhat is right. The published FFY2026 and FFY2027 values are encoded correctly:
There are no critical findings and three should-address items:
There are also six suggestions:
Status.
Critical (must fix)None. Should addressS1. Railroad retirement annuities are counted gross of the Medicare premium, while Social Security and pensions are counted net
S2. Twenty income and cost entries, and one eligibility branch, have no test that would fail if they were dropped
S3. The
|
DTrim99
left a comment
There was a problem hiding this comment.
All 40 limit cells (50% SMI, with the 110% FPG floor from size 19), both workbooks' pay-share constants and formulas, all 112 backup-matrix cells and the heat-in-rent and subsidized paths check out, 22 expectations hand-check, and MSA is correctly excluded. Three should-address items: (1) railroad_benefits are counted gross of Part B while SS and pensions are netted, though RRB withholds Part B (a $38k railroad retiree gets $0 instead of $216); (2) many entries are unpinned (6/7 earned, 9/12 unearned, tanf/GA, 3/7 energy-cost sources, the public-housing branch); (3) the smi_rate description is off-template. Six suggestions. Full report in the comment above.
Adds Minnesota's Energy Assistance Program (EAP) Primary Heat benefit for FFY2026 and FFY2027, administered by the Minnesota Department of Commerce. The model counts citizens and eligible noncitizens in household size (ineligible members' income still counts), tests countable income against 50% of state median income with the federal 110% poverty floor, and pays a share of the household's total annual energy cost that falls linearly as income rises. The result is rounded and held between $200 and $1,400. Primary Heat is Minnesota's single regular benefit and is based on all home energy costs, including non-heating electricity. Crisis, Energy Related Repair and weatherization are out of scope.
Fixes #10423
Regulatory authority
Eligibility
defined_for = StateCode.MNmn_eap_household_sizesumsis_citizen_or_legal_immigrant; size 0 is ineligiblemn_eap_income_limit= 12 x max(floor(50% of size-adjusted SMI / 12), floor(110% of prior-year FPG / 12)); reproduces all 40 published monthly cells (FFY26, FFY27)heating_typeUNSPECIFIEDorNONEpays $0Countable income
is_in_k12_school) are excludedpfml_benefitscounted from FFY2026: the FFY26 manual counts gross cash receipts with no Paid Leave exclusion, Paid Leave began January 1, 2026, and the FFY27 manual lists it as countablemedicare_part_b_premium(subtracted once from Social Security plus pension; PERA example)tanfBenefit
pre_subsidy_electricity_expense, gas, fuel oil, propane, wood, coal, other fuel). Unsubsidized heat-in-rent households use the backup matrix (average annual energy cost by main fuel and housing type, 7 fuels x 8 housing types per year). Subsidized heat-in-rent households use their electric cost (Manual FFY26 p.117-119, 125-126).mn_eap_housing_type(Apartment, Duplex, Triplex, Fourplex, Townhouse, House, Mobile home, Other; default House) selects the backup-matrix column. Oil (fuel oil and kerosene), propane, natural gas and electricity rows are selected throughheating_type; the steam, district heating and metered propane rows are stored as published, but no existing input selects them.Not modeled
heating_typevalue or matrix row; benefit $0Earlier years are unverified estimates through parameter backfilling. The pay-share constants appear only in the Appendix 4A calculator; the FFY27 manual calls the calculator an optional estimating tool, while eHEAT, the system of record, is not public. The size-21+ limit follows the federal floor because the manual table stops at size 20.
The stale note on the shared
pfml_benefitsinput saying it is used only for Massachusetts CCFA is removed, since Minnesota now reads it.Microsimulation:
heating_type, the per-fuel bills andmn_eap_housing_typeare not in current datasets; callers must supply them.Test plan
36 YAML cases in 7 files (not re-run locally after the review fixes; CI validates them):
income limits at sizes 0, 1, 4, 18, 19 and 21 for both years, and the exact-limit boundary;
countable income: a self-employment loss, an ineligible member's wages, the student exclusion at 19 and 20, Social Security and pension net of Part B, retirement withdrawals at age 59 and exactly 59 1/2, the $50 and $100 thresholds, SSI, veterans benefits, TANF, child support excluded, Paid Leave counted in FFY2026;
energy cost across fuels, backup-matrix cells for both years, kerosene on the oil row, subsidized heat in rent, wood with heat in rent;
pay share at zero income, above the slope end, Appendix 4A Calculator row 2 for both years, Qualified Eligibility;
the $200 floor, the $1,400 ceiling, half-up rounding, and two end-to-end households (2026 and 2027).
YAML tests with expected values from the manuals and Appendix 4A
ruff formatCI passes (program tests, registry and code-health checks)
Changelog fragment in
changelog.d/axiom: TheAxiomFoundation/rulespec-us#1894 queued
🤖 Generated with Claude Code