PolicyEngine / PolicyEngine/microcosm
is_part_time_college_student never populated — SNAP student rule misses half-time students
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 4
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 94
Description
Finding
The US eligibility-inputs stage (packages/microcosm-build/src/microcosm/build/us_runtime/eligibility_inputs.py) populates is_full_time_college_student (A_HSCOL == 2 & A_FTPT == 1, direct CPS ASEC measurement, per #244) but never populates is_part_time_college_student, which is not among US_ELIGIBILITY_INPUTS_OUTPUT_COLUMNS.
policyengine-us's SNAP student test binds on half-time or more enrollment:
# is_snap_higher_ed_student
return is_full_time_student | is_part_time_student
With the part-time flag defaulting to False, every half-time-to-three-quarter-time college student is treated as a non-student:
- Baseline: they escape the 7 USC 2015(e) student ineligibility test entirely (SNAP over-eligibility for that group).
- Reforms: any student-rule analysis (e.g., state E&T designation options) sees only full-time students, understating the affected population.
Why now
PolicyEngine is scoping a student-SNAP state-options project with the Student Basic Needs Coalition (modeling which states extend student exemptions via E&T designations, and what adoption elsewhere would change). The federal student rules are fully encoded in policyengine-us (#8793, #9118, #9119); this input gap is the main data blocker for honest population-level estimates.
Proposed direction
The stage already requires A_FTPT (it fails loudly when missing), so enrollment intensity is in the loaded frame. Extend the stage to emit is_part_time_college_student from A_HSCOL == 2 & the part-time A_FTPT code — confirm the exact code value against the ASEC data dictionary before implementing (the stage docstring documents only A_FTPT == 1 = enrolled full-time). Note the CPS "part-time" category does not distinguish half-time-or-more from less-than-half-time enrollment, while the statute binds at half-time — document whichever mapping is chosen.
Also worth noting in the same pass: work-study receipt (a separate student exemption input) has no CPS source and would need imputation (NPSAS-type) or documentation as unsourced, in the spirit of #351.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in packages/microcosm-build/src/microcosm/build/us_runtime/eligibility_inputs.py and inspect US_ELIGIBILITY_INPUTS_OUTPUT_COLUMNS alongside the existing A_HSCOL and A_FTPT logic. Check the ASEC data dictionary to verify the part-time A_FTPT code and document how CPS part-time maps to the statutory half-time threshold; done when the output includes the part-time student input.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100