Repository navigation
Conversation
Encode Iowa's FY2026 regular heating benefit from the FY26 LIHEAP Policy and Procedures Manual: household size of citizens and qualified noncitizens, gross countable income of members aged 18 and over less child support paid, a 200 percent federal poverty guideline limit on the prior-year guideline through the shared fpg() helper, the energy burden and housing rules of Appendix D, and the Appendix I payment matrix (poverty-level points, nine targeting factors, fuel points, $40 per point between $80 and $800, flat $800 for liquid propane and fuel oil). Adds the ia_liheap_dwelling_type input the matrix requires and registers the program with verified_years "2026". Crisis assistance, cooling and weatherization are out of scope. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Count railroad retirement benefits as unearned income per Appendix C, score zero poverty-level points when a household has no counted member and so no guideline, and test the fixed-income-only factor on the household's recorded income sources across all members so a minor's Social Security still identifies a fixed-income household while staying excluded from the countable amount. Reword the self-employment and Medicare comments to match the manual's two-route and net-of-premium rules. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The SSI unearned income list does not include railroad_benefits, so a railroad retiree aged 65 or older with no other income receives the full SSI federal benefit, which Iowa then counts. Age 62 keeps the two cases on the railroad retirement rule they test. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Fixed income only: recorded non-countable sources that Appendix C says are not fixed income (child support received, FIP) now cancel the point, through a new other_recorded source list; railroad retirement counts as a pension; the test no longer depends on float summation order. - Kerosene follows fuel oil for both the fuel points and the flat $800. - References follow the repo convention for PDF pages. - Replace internal workflow wording with the policy reasons. - Tests: new fixed-income, child support and kerosene cases (153 total). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…into ia-liheap-wave1c
Main's code-health check rejects the reported-only unemployment_compensation input in income source lists; the total uses the reported amount when present and otherwise the modeled state unemployment insurance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add main's military_retirement_income (military retirement pay and survivor benefit payments) to Iowa's unearned and fixed income lists: Appendix C counts pensions and retirement income, and the fixed income definition includes pensions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # policyengine_us/programs.yaml
PR Review: Add Iowa LIHEAP regular heating assistancePR #10292 (author: hua7450), head Path prefixes:
Sources read for this review:
SummaryWhat is right. The published FY26 rules are encoded faithfully:
There are no critical findings and four should-address items:
There are also seven suggestions. They include the flat $800 for heat-in-rent households in propane or oil-heated buildings, the published FY2027 rewording of the fixed-income factor, and Iowa's state supplement (item 17), which is not on Status.
Critical (must fix)None. Should addressS1. Medicare premiums are not subtracted: Social Security counts gross, although the plan and the manual count the amount paid
S2. Rental losses offset wages and other income
S3. rulespec-us#1834 no longer matches the head
S4.
|
DTrim99
left a comment
There was a problem hiding this comment.
The FY26 limits, every Appendix I matrix cell, $40 a point, the $80/$800 bounds and the energy-burden rules check out, and all 156 Iowa cases pass. Four should-address items, the same pattern as VA and AZ: (1) Social Security counts gross though plan 1.9 excludes the Medicare deduction (age 66 with $33k SS: $0 vs $440); (2) rental losses offset wages; (3) rulespec-us#1834 is stale; (4) self_employment_income is never positive in a test. Seven suggestions. Full report in the comment above.
…uel in rent - Count Social Security net of the Medicare Part B premium (plan item 1.9) - Floor rental income per source, including the fixed-income test - Pay the flat deliverable-fuel amount only when heat is not in the rent - Pin positive self-employment income; reword the UNSPECIFIED comment Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, David. The fixes are in 5108878, and cc2347f merges main. All 164 Iowa cases pass locally, as do the registry, source-conflict and unemployment-reader checks. Should address
Suggestions
|
PR Review (round 2): Add Iowa LIHEAP regular heating assistancePR #10292 (author: hua7450). This round reviews head
Ziming replied to every finding on 2026-10-24. The PR body still ends Path prefixes, as in round 1: SummaryZiming fixed all four round-1 should items:
Of the seven suggestions, G1 (the flat $800 with heat in rent) is taken, and so is the G7 comment rewording. G2 and G3 are declined but now documented in the body, and I accept both. G4, G5 and the other G7 items were optional and are declined. G6 still waits on #8017, which is open with changes requested. There are no new critical or should findings, and two new suggestions:
Batch checks:
I hand-checked every new or changed expectation: 8 new cases and 1 changed case. CI is 27/27 green at the head, and states-shard-2 passed all 164 Iowa LIHEAP cases. The branch is 36 commits behind Prior findings status
New findingsCritical (must fix)None. Should addressNone. SuggestionsG8. Part A: record why only the Part B premium is subtracted (the sibling of #10303 G7 and #10293 G7).
G9. The registry note could carry the G1 condition (polish). The IA entry in VerifiedThe merge resolution (
Hand-checks of every new or changed expectation. All use period 2026, the 2025 guideline of $15,650 for one person, the $31,300 limit and the Part B premium of 12 × $202.90 = $2,434.80 (the 2026 New cases:
Changed expectation:
Comment-only edits: the headers of Unchanged retiree cases.
Case count. 12 + 4 + 9 + 6 + 5 + 17 + 11 + 5 + 7 + 9 + 12 + 19 + 8 + 10 + 11 + 19 = 164, as the body and the Axiom issue say. CI's per-file results match file by file. New-code checks:
Checklist results (LIHEAP batch):
Federal 110% floor: never binds. The limit is 2.0 times the same lagged guideline, against the 1.1 floor. Axiom line assessmentValid:
CI status27 pass, 0 pending, 0 failed. Run 40042877423 ran on head
Branch status
0 critical, 0 should and 2 suggestions are open at this head. Verdict: APPROVE |
DTrim99
left a comment
There was a problem hiding this comment.
Round 2: all four should items are fixed. Social Security now counts net of the Part B premium (Case 16 gives $440), every source is floored per person (Case 9 gives $0), rulespec-us#1834 matches the head, and self-employment is pinned. G1 is taken too (Case 17 gives $200). The programs.yaml hand-merge is correct, and all 164 IA cases pass. Two small suggestions. Full report in the comment above.
…0303 - Explain why Iowa subtracts no Part A premium (42 U.S.C. 426(a)) - Registry note: the flat amount goes to households that buy propane or fuel oil - Keep the LIHEAP coverage line as on main; PR 10303 adds IA there Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, David. 157a10d takes both suggestions, with comment and registry changes only:
The commit also stops this PR from editing the LIHEAP coverage line. #10303 now adds IA, AZ and VA there, so the three wave 1C PRs merge without conflicts. Merge this PR and #10293 in either order, and #10303 last. TheAxiomFoundation/rulespec-us#1834 is updated to this head. |
PR Review (round 3): Add Iowa LIHEAP regular heating assistanceSummaryHead The change
No logic changed and no expectation moved. CI and branchAt review time, 7 checks passed and 15 were pending. Let CI finish green, including Verdict: APPROVE |
Adds Iowa's LIHEAP Regular Assistance heating benefit for FY2026. The model counts members with citizenship or Social Security number documentation for household size, counts the gross income of members 18 and over less child support paid, tests it against 200% of the 2025 poverty guideline, scores the Appendix I matrix (poverty-level points, targeting factors and fuel points) and pays $40 a point between $80 and $800, with a flat $800 for households that buy liquid propane, fuel oil or kerosene themselves. Income counts Social Security net of the Medicare Part B premium and floors each source at zero. In FY2026, a 65-year-old living alone on $18,000 of Social Security in a detached house heated with natural gas receives $480: $18,000 / $15,650 = 115% of poverty gives 5 points, fixed income, age 60 or over and a detached dwelling add 3, natural gas adds 4, and 12 points x $40 = $480. In the model a Medicare Savings Program pays this retiree's Part B premium, so nothing is subtracted.
Fixes #10289
Regulatory authority
Eligibility
defined_for = StateCode.IAia_liheap_household_sizeaddsis_citizen_or_legal_immigrant; a household with no counted member is ineligibleia_liheap_fpgreads the guideline with a one-year lag,ia_liheap_income_limitapplies the 2.0 rate, and the limit is inclusiveia_liheap_has_energy_burdenfromheat_expense_included_in_rent,receives_housing_assistanceandpre_subsidy_electricity_expenseheating_type: UNSPECIFIED is ineligible, including when heat is in the rent, because the fuel row cannot be scored without it. NONE and SOLAR are ineligible.Countable income
ia_liheap_countable_earned_incomeandia_liheap_countable_unearned_incomecount members aged 18 or older. Section 6.00 (page 24) counts wages of minors working full time; the model follows section 6.20, Appendix C and the plan, and the conflict is recorded in a comment.social_securityless that member'smedicare_part_b_premium, floored at zero. The plan checks "Excluding MediCare deduction", and the manual uses the amount "paid by check or direct deposit" on the SSA-1099 when the gross amount would put the household over income. The premium is the out-of-pocket amount: zero for a person not enrolled, and net of what a Medicare Savings Program pays. A 66-year-old with $33,000 of Social Security who pays the full 2026 premium (12 x $202.90 = $2,434.80) has countable income of $30,565.20, under the $31,300 limit, and receives $440 (4 + 3 + 4 = 11 points).total_unemployment_compensation), workers' compensation, strike benefits, disability benefits, veterans benefits, alimony, rental income, interest, ordinary dividends and gambling winnings. Child support received, capital gains and FIP are not counted.ia_liheap_fixed_income_onlyis true when a member receives Social Security, SSI, veterans benefits or a pension, including railroad retirement and military retirement or survivor pay, and no member of any age has another recorded source. Non-countable receipts that Appendix C says are not fixed income, child support received and FIP, also cancel the point. Each other source is floored at zero first, so a rental loss cannot cancel interest or a self-employment profit. The test keys on whether a fixed source is present, so the Medicare premium does not affect it. A minor's Social Security identifies a fixed source while its amount stays excluded.Benefit
is_disabled), a child under 6 and a detached dwelling; -1 for five or more units; -2 for subsidized housing; -4 for heat in rent; -4 for savings over $50,000 (spm_unit_cash_assets). The newia_liheap_dwelling_typeinput (detached, 2 to 4 units, 5 or more units) defaults to detached.Years covered
The registry entry records
verified_years: "2026", and its note says the flat amount goes to households that buy propane or fuel oil. To keep the three wave 1C PRs from editing the same line, #10303 adds IA, AZ and VA to the LIHEAP coverage line, so it merges last. Earlier periods use parameter backfilling and are unverified historical estimates. Later periods carry the FY2026 rules forward on the lagged guideline: period 2027 reproduces the FY27 limit of $31,920 for one person but keeps the FY26 fixed-income wording, so its results are carried-forward estimates.Not modeled and source conflicts
is_disabledstands in for it. Savings usespm_unit_cash_assets.railroad_benefits, so an older retiree would receive imputed SSI that Iowa counts. That SSI gap is a separate fix.Test plan
policyengine_us/tests/policy/baseline/gov/states/ia/hhs/liheap/; expected values are hand computed from the manual in case comments. All 164 cases pass locally, as do the registry, unemployment-reader and source-conflict pytest checks.make formatchangelog.d/axiom: TheAxiomFoundation/rulespec-us#1834 queued
🤖 Generated with Claude Code