PolicyEngine / PolicyEngine/policyengine-us
Kansas Section 8 enhancement
- Dominant language
- Python
- Stars
- 162
- Forks
- 212
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 97
Description
Original scope: add ZIP code-level data, fix income definition, fix utility allowance for Kansas Section 8. The first two have largely shipped; this issue now tracks the remaining Kansas gaps, primarily utility allowances and the Missouri half of the Kansas City metro. Texas sibling: #8783.
## Done — verified 2026-07-09
| Item | Coverage |
|---|---|
| Wichita SAFMR | 83 ZIPs, FY2025 + FY2026 — matches HUD's published set exactly (0 missing) |
| Kansas City SAFMR (KS side) | 91 ZIPs, FY2025 + FY2026 |
| SAFMR value check | 870 FY2026 cells across both KS metros verified against HUD's revised FY2026 SAFMR workbook — 0 mismatches |
| `safmr_used_for_hcv` | Designates both KS metros so their SAFMRs are the HCV payment-standard basis |
| County FMR fallback | All 105 Kansas counties resolve (Topeka/Shawnee, Riley/Manhattan, rural KS — via `county_fips`) |
| Utility allowances | 4 PHA counties: Johnson $285, Sedgwick $266 (Wichita), Shawnee $256 (Topeka), Wyandotte $319 (KCK) — 2-bedroom monthly; 2025 + 2026 schedule years |
| Income definition | HUD annual income sources + HOTMA adjusted income addressed at the federal HUD level (PR #8804 follow-ups, PR #8940) — not Kansas-specific |
There is no TDHCA-style adopted ZIP payment-standard table for Kansas (unlike Texas); KS metros resolve through raw SAFMR, and everywhere else through county FMR.
**Johnson & Wyandotte (KS side of the KC metro) verified live 2026-07-09**: the payment standard varies by ZIP as it should — e.g. Overland Park 66213 = $1,940/mo vs Olathe 66061 = $1,280/mo (both Johnson County), Kansas City KS 66109 = $1,870 vs 66101 = $1,030 (both Wyandotte) — `safmr_used_for_hcv` true, model uses the ZIP SAFMR rather than the flat $1,358/mo county FMR. This resolves any "KC metro SAFMR missing" concern for the Kansas side.
## Deferred (out of scope for now) — Missouri side of the Kansas City metro (160 ZIPs)
HUD's designated SAFMR area is **"Kansas City, MO-KS"** — a single mandate covering the whole metro. The repo bundles only the 91 KS-side ZIPs; the ~160 Missouri-side ZIPs (Kansas City MO, Independence, Lee's Summit, Blue Springs...) are absent, so those households fall to the county FMR even though the SAFMR is their statutory payment-standard basis (24 CFR 888.113). **Deferred per 2026-07-09 decision** — this is a Missouri item, not Kansas, and would be better split into its own issue if/when Missouri coverage is prioritized. Data is on hand (HUD FY2026 SAFMR workbook has all 160 MO ZIPs complete); adding it later requires the MO rows plus a `"Kansas City, MO"` designation label, and ideally the FY2025 SAFMR workbook for year parity.
## Remaining gap 2 — utility allowances cover only 4 of 105 counties
`county_utility_allowances.csv` encodes 4 PHA counties. Two problems mirror the Texas findings (#8783):
- **Counties inside the SAFMR metros with no utility allowance row.** The bundled SAFMR ZIP sets reach into Leavenworth (66048), Miami (66071 Paola), and Linn on the KC side, plus Butler (67002 Andover) and Harvey (67114 Newton) on the Wichita side. Households there get a ZIP-level SAFMR payment standard but a $0 utility allowance.
- **Rest-of-state is $0.** 101 of 105 counties have no schedule, including Douglas County — where the Lawrence–Douglas County Housing Authority publishes a schedule — and Riley County (Manhattan). Since gross rent = rent + utility allowance (24 CFR 982.505), this understates assistance for tenants who pay their own utilities.
The schema takes one schedule per county; where a county hosts multiple PHAs we would encode the dominant PHA's schedule (same approximation already used for the 4 encoded counties).
## Remaining gap 3 — adopted PHA payment standards
No Kansas PHA's *adopted* payment-standard schedule is encoded. Wichita HA, KCKHA, Johnson County HA, and Topeka HA each adopt their own point in the 90–110% band around the applicable FMR (42 U.S.C. § 1437f(o)(1)(B); 24 CFR § 982.503(b)); the model substitutes the raw SAFMR (implicitly 100%) in the metros and the county FMR in Topeka/rural KS. This is a legally bounded ±10% approximation, but encoding the adopted schedules would give exact amounts.
## Boundary-ZIP note
42 of the 174 bundled KS ZIPs are dual-listed by HUD in adjacent **non-designated** areas (Lawrence MSA, Topeka MSA, Sumner County, and a ring of rural counties) — e.g. 66044 appears in the Kansas City, Lawrence, and Topeka files. The ZIP-set rule treats any household in those ZIPs as SAFMR-based, including ones physically on the non-metro side. Unlike the Texas DFW dual-listed ZIPs (both sides SAFMR-designated with identical values), the two sides genuinely differ here. This is unavoidable at ZIP granularity but should be documented in the SAFMR README.
## Input contract caveat
The county FMR fallback and utility allowance both key on `county_fips`; `zip_code` alone (or a county name) resolves to $0 outside the ZIP-covered areas (#8964 tracks the related `tenant_pays_utilities` reconciliation).
Contributor guide
Research direction
Start with county_utility_allowances.csv and trace how county_fips resolves utility allowances and FMR fallbacks. Review the SAFMR README and the existing four county schedules before choosing a remaining gap; done means the selected Kansas data or documentation is encoded consistently and verified against the cited PHA or HUD source.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100