Skip to content

Add FY2025 HUD Small Area FMRs so period 2025 stops borrowing FY2026 data#8916

Merged
MaxGhenis merged 1 commit into
PolicyEngine:mainfrom
MaxGhenis:codex/hud-data-years
Jul 6, 2026
Merged

Add FY2025 HUD Small Area FMRs so period 2025 stops borrowing FY2026 data#8916
MaxGhenis merged 1 commit into
PolicyEngine:mainfrom
MaxGhenis:codex/hud-data-years

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

What

Makes the HUD Small Area FMR data year-accurate and documents the ZIP payment-standard year coverage, following up on the year-accuracy plan in #8801.

Before this change the SAFMR CSV held FY2026 only, so nearest_safmr_year(2025) returned FY2026 — future data applied to a past year. This was the one actively-wrong case in #8801: at period 2025 a Housing Choice Voucher household in a mandatory-SAFMR metro got the FY2026 SAFMR.

SAFMR — FY2025 added (fixes the backward-imputation)

  • Added 3,610 FY2025 SAFMR rows (722 ZIPs x 5 bedrooms) for the same six mandatory-SAFMR metros already bundled for FY2026: Dallas, Fort Worth-Arlington, San Antonio-New Braunfels, Beaumont-Port Arthur (TX) plus Kansas City (KS side) and Wichita (KS).
  • Values are the raw SAFMR 0BR4BR columns from HUD's published fy2025_safmrs.xlsx (retrieved 2026-07-06), looked up for the exact ZIP set and metro labels already in the FY2026 CSV. Cross-validated the extraction method against the FY2026 workbook: all 3,620 existing FY2026 rows match fy2026_safmrs.xlsx byte-for-byte. The FY2026 block is unchanged (diff is pure insertions).
  • The values genuinely differ by year — 694 of 722 ZIPs have a different 2BR SAFMR between FY2025 and FY2026 (e.g. Dallas 75201 2BR: FY2025 $2,830 vs FY2026 $2,900).
  • Two ZIPs (75429 Dallas, 78284 San Antonio) are absent from HUD's FY2025 file (they first appear in FY2026). They get no FY2025 row rather than a fabricated value, so at period 2025 they resolve to the county FMR via the existing small_area_fair_market_rent > 0 guard in pha_payment_standard.
  • All six metros appear on HUD's FY2025 designated-SAFMR-areas list with implementation dates of 1/1/2025 or earlier, confirming SAFMR is their HCV payment-standard basis for FY2025.

Result:

period nearest_safmr_year before after
2024 2025 2026 FY2025
2025 2025 2026 (wrong) FY2025
2026 2026 2026 FY2026
2027 2026 2026 FY2026

ZIP payment standards — 2026 intentionally forward-imputed (documented, not fabricated)

Investigated whether 2026 equivalents of the bundled 2025 PHA schedules are published. They are not, so nearest_payment_standard_year(2026) continues to resolve to 2025 — deliberately, not as a data gap:

  • TDHCA posts HCV payment standards annually on its Section 8 resources page; the latest is "2025-Payment Standard-HCV" (2023/2024/2025 files only). A 2026 file does not exist (26-HCV-PaymentStandards.pdf and variants 404).
  • Houston HHA (Housing Alliance HTX) posts a "Payment Standards for 2026" PDF, but it is explicitly Effective 01/01/2025 and its tier amounts and ZIP-to-tier assignments are identical to the bundled 2025 schedule (verified: 0 differences across the 144 shared ZIPs; Tier A 2BR $1,628 / Tier D 2BR $1,357 unchanged). It is a re-titled carry-forward, not a new vintage.

Encoding a duplicate 2026 block would fabricate a fiscal-year vintage neither PHA has published, so I left the resolver to carry the 2025 rows forward and documented the reasoning in the payment-standards README. A real 2026 block should be added once either PHA adopts new-dollar 2026 standards with a 2026 effective date.

The county FMR half of #8801 (add FY2026) already landed in #8804, so this PR closes the SAFMR gap and resolves the remaining payment-standards question by documentation.

Tests

  • 12 new SAFMR tests: year-exact resolution for Dallas/Beaumont/San Antonio/Fort Worth/Wichita/Kansas City at period 2025 vs 2026, the FY2025 5BR increment, nearest-year fallback at 2024/2027, and the two FY2026-only ZIPs returning 0 at period 2025.
  • 2 new ZIP-payment-standard tests asserting the intentional 2026 carry-forward (TDHCA 78002 and HHA 77002).
  • Updated two pha_payment_standard comments whose SAFMR references now point at the FY2025 vintage.
  • Full HUD test tree: 182 passed. Downstream housing tests (rent, SPM capped housing subsidy, housing-assistance edge cases): 16 passed. ruff format/ruff check clean.

Sources

Addresses #8801.

🤖 Generated with Claude Code

The Small Area FMR CSV held FY2026 only, so `nearest_safmr_year(2025)`
resolved to FY2026 — future data for a past year. Add the FY2025 SAFMR
rows for the same six mandatory-SAFMR metros (Dallas, Fort Worth-Arlington,
San Antonio-New Braunfels, Beaumont-Port Arthur, Kansas City KS, Wichita)
so period 2025 -> FY2025 and period 2026 -> FY2026.

- Extract FY2025 raw SAFMRs from HUD's published fy2025_safmrs.xlsx for the
  724 ZIPs already bundled for FY2026 (retrieved 2026-07-06). 722 ZIPs are
  present; two (75429 Dallas, 78284 San Antonio) HUD did not publish for
  FY2025, so they get no FY2025 row and fall back to the county FMR at
  period 2025 rather than a fabricated value. FY2026 rows are unchanged.
- All six metros appear on HUD's FY2025 designated-SAFMR-areas list with
  implementation dates of 1/1/2025 or earlier, confirming SAFMR is their
  HCV basis for FY2025.
- Document the SAFMR file (source URLs, retrieval date, scope) in the fmr
  README and correct the loader docstring (six metros, not four).
- Add 12 SAFMR tests exercising year-exact resolution (FY2025 differs from
  FY2026 for 694/722 ZIPs), the FY2025 5BR increment, nearest-year
  fallback at 2024/2027, and the FY2026-only ZIPs resolving to 0 at 2025.

ZIP payment standards remain 2025-only (documented, not fabricated): neither
TDHCA nor Houston HHA has adopted a distinct 2026 schedule as of 2026-07-06.
TDHCA's latest is 2025 (no 26-HCV file); HHA's "Payment Standards for 2026"
PDF is Effective 01/01/2025 with amounts identical to the bundled 2025
schedule (0 differences across 144 shared ZIPs). `nearest_payment_standard_year`
therefore resolves period 2026 to the 2025 standards — an intentional
forward-imputation, documented in the payment-standards README with two
tests asserting the carry-forward.

Addresses PolicyEngine#8801.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis merged commit 4549651 into PolicyEngine:main Jul 6, 2026
33 checks passed
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.

1 participant