PolicyEngine / PolicyEngine/policyengine-core
Proposal: preserve missing-input state instead of collapsing it to zero
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 22
- Forks
- 30
- Avg merge
- 14h 33m
- Merged PRs (30d)
- 7
Description
I have been testing SNAP-style screener flows in policyengine-us, and I found that omitted monetary inputs behave the same as explicit zeros at the engine boundary.
Concrete examples (Texas SNAP household)
- No
employment_income/self_employment_incomeprovided:snap_gross_income = 0.0snap_net_income = 0.0snap = 291.0
- No
child_support_expenseprovided:snap_child_support_deduction = 0.0
- No
housing_costprovided:snap_excess_shelter_expense_deduction = 0.0
That is convenient for fully specified simulations, but it makes it impossible to tell the difference between:
- The user intentionally entered zero, and
- The user did not provide the field at all.
For screener-style and partially completed scenarios, that distinction matters. A missing income field should usually be represented as unknown or incomplete, not silently coerced to zero.
Questions for maintainers
Would any of these approaches be idiomatic?
- A preserved missingness state on input holders
- An explicit
valueState-like annotation for inputs - A documented partial-input mode that propagates "cannot determine" rather than defaulting to zero
I am not proposing an engine-wide rewrite. I am asking whether there is an accepted way to distinguish missing from zero today. If not, I would be glad to follow up with a narrow proposal.
Runtime used for the cases: policyengine-core==3.28.0, policyengine-us==1.755.5.
Evidence packet (external): https://github.com/edithatogo/rulesandprocesses/blob/main/external/policyengine/MISSINGNESS_CASES.md
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
Reproduce the Texas SNAP examples using policyengine-core==3.28.0 and policyengine-us==1.755.5, comparing omitted inputs with explicit zeros. Read the existing input-handling behavior and the referenced MISSINGNESS_CASES.md evidence, then document whether an accepted distinction exists or produce a narrow proposal for preserving missingness.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100