Skip to content

Require New Hampshire FANF resources to be less than the limit - #10499

Merged
PavelMakarchuk merged 3 commits into
mainfrom
fix-nh-fanf-resource-limit-less-than
Oct 29, 2026
Merged

PavelMakarchuk merged 3 commits into
mainfrom
fix-nh-fanf-resource-limit-less-than

Conversation

@PavelMakarchuk

@PavelMakarchuk PavelMakarchuk commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

nh_fanf_resources_eligible returned resources <= limit, so a New Hampshire FANF assistance group with exactly $1,000 (applicant) or $5,000 (recipient) in countable resources passed the resource test. The statute requires resources below the limit, so this PR changes the test to <.

Sources

The statute and FAM 403 disagree only when resources equal the limit. Under the statute-first rule in CONTRIBUTING.md, the statute governs. The FAM 403 reading is recorded as backlog item us-nh:fanf-resource-limit-equality in source_conflicts/candidates.yaml (follows: statute), and it moves to the rulespec-us register once its sources are captured. He-W 656.04(c)(6) uses "exceed the allowable limit" only to start a grace period for recipients whose excess resources are personal property that is hard to sell. It does not set the eligibility test, so it does not decide the equality case.

Changes

  • nh_fanf_resources_eligible returns resources < limit and cites RSA 167:79, He-W 600 and FAM 403 in place of the FAM index page.
  • A comment notes that He-W 656.06(a)(1) treats an applicant who received FANF in any one of the previous 6 months as a recipient. The inputs have no 6-month look-back, so is_tanf_enrolled stands in for it, as in the earned income disregard.
  • source_conflicts/candidates.yaml: new item us-nh:fanf-resource-limit-equality.

Tests

nh_fanf_resources_eligible.yaml:

  • Case 2 (applicant, $1,000) and Case 4 (recipient, $5,000) are now ineligible.
  • New Case 10: recipient at $4,999 is eligible.
  • New Cases 11 and 12 (January 2022, recipient limit $2,000): $2,000 is ineligible and $1,999 is eligible.

No integration case sits at a limit, so no other expectation changes. The branch is merged with main, which now includes #10251.

Local results after the merge: policyengine-core test policyengine_us/tests/policy/baseline/gov/states/nh/dhhs/fanf -c policyengine_us has 82 passed. test_source_conflicts.py and test_reference_urls.py have 135 passed.

axiom: TheAxiomFoundation/rulespec-us#1957 queued (open, pe-parity; RSA chapter 167 and He-W 600 must be ingested into the corpus first, and the signed encoder dispatch needs approval)

🤖 Generated with Claude Code

PavelMakarchuk and others added 2 commits October 27, 2026 13:39
RSA 167:79 III(f) says the assistance group's countable resources "shall
be less than the allowable resource limit". nh_fanf_resources_eligible
used <=, so a unit with exactly $1,000 (applicant) or $5,000 (recipient)
passed. He-W 656.06 gives only the amounts. FAM 403 says resources
"cannot exceed the limits"; under the statute-first rule the statute
governs, and the manual reading is recorded as backlog item
us-nh:fanf-resource-limit-equality.

- Use < and cite RSA 167:79, He-W 600 and FAM 403.
- Note that is_tanf_enrolled stands in for He-W 656.06(a)(1)'s
  six-month look-back.
- Tests: Cases 2 and 4 (at the limit) are now ineligible; new cases at
  $4,999 and at the $2,000 limit and $1,999 before July 2022.

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

codecov Bot commented Oct 27, 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 (4af233d).
⚠️ Report is 740 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main    #10499   +/-   ##
=========================================
  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.

…limit-less-than

# Conflicts:
#	source_conflicts/candidates.yaml

@hua7450 hua7450 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.

Approving at 4af233d. Thanks, Pavel.

resources < limit follows RSA 167:79 III(f): "The assistance group's countable resources shall be less than the allowable resource limit established by the department pursuant to RSA 167:81, II." Archived copies show the same "less than" wording back to the 1996 text (it was III(c) before 2006), and RSA 167:81 II applies it to both applicant and participant limits. So < is right for every year the parameters cover. He-W 656.06(a)(2) gives only the amounts, and the new comment's account of He-W 656.06(a)(1) is accurate. The candidates.yaml item satisfies the schema in test_source_conflicts.py. I recomputed every case in nh_fanf_resources_eligible.yaml, and no other NH FANF test sits at a limit.

Optional nits:

  1. Candidate start year. The item says FAM 403 versions before SR 22-17 were not checked. The version in force before July 2022 (SR 14-04, dated 01/14; Wayback snapshots from 2021 and January 2022) already says resources "cannot exceed the limits below", with a $2,000 recipient limit. years.from could be 2014, and the question and example could mention the $2,000 recipient limit before July 2022.
  2. Candidate sources. The TANF State Plan the variable cites (tanf-state-plan.pdf#page=25) uses the same "cannot exceed" wording. It could go in the item as a kind: plan source.
  3. Redundant cases. With Cases 2 and 4 now false, Cases 3 ($1,001) and 5 ($5,001) are in the same class.
  4. Parameter descriptions. applicant_limit.yaml and recipient_limit.yaml still say the program "limits resources to this amount", which reads as inclusive. Something like "requires countable resources to be less than this amount" would match the new test.

Follow-ups, outside this PR:

  • nh_fanf_resources_eligible is YEAR-defined and reads the January parameter value, so July to December 2022 still use the $2,000 recipient limit. The rule date is also unclear: He-W 656.06 adopted $5,000 only effective 5-24-23 (rule 13647), while the parameter uses the manual's 07/01/22.
  • Countable resources use only spm_unit_cash_assets. FAM 403 and FAM 409 count non-home real property equity, and the model has household_other_real_estate_equity.
  • Both limit parameters cite SR 97-03 for the 1997 amounts, but SR 97-03 does not state them. FAM 403 (SR 14-04) does.

@PavelMakarchuk
PavelMakarchuk merged commit 16fa54e into main Oct 29, 2026
35 checks passed
@PavelMakarchuk
PavelMakarchuk deleted the fix-nh-fanf-resource-limit-less-than branch October 29, 2026 19:59
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