I have been testing France scenarios in OpenFisca, and I found that omitted salary inputs are treated the same as explicit zeros once the scenario is built.
Concrete local evidence
- Without
salaire_de_base:
salaire_de_base = [0.0, 0.0]
salaire_super_brut = [0.0, 0.0]
- With
salaire_de_base = 0:
salaire_de_base = [0.0, 0.0]
salaire_super_brut = [0.0, 0.0]
- With
salaire_de_base = 2000:
salaire_de_base = [166.6666717529297, 0.0]
salaire_super_brut = [170.17333984375, 0.0]
That is convenient for fully specified simulations, but it erases the difference between:
- The user intentionally entered zero, and
- The user did not provide the field at all.
For screener-style or partially completed scenarios, that distinction matters. A missing salary field should usually propagate as unknown or incomplete instead of being silently normalized to zero.
Questions for maintainers
Would any of these approaches be idiomatic?
- A preserved missingness state on input holders
- An explicit
valueState-style 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: openfisca-core==44.7.0, openfisca-france==175.1.0.
Evidence packet (external): https://github.com/edithatogo/rulesandprocesses/blob/main/external/openfisca/MISSINGNESS_CASES.md
I have been testing France scenarios in OpenFisca, and I found that omitted salary inputs are treated the same as explicit zeros once the scenario is built.
Concrete local evidence
salaire_de_base:salaire_de_base = [0.0, 0.0]salaire_super_brut = [0.0, 0.0]salaire_de_base = 0:salaire_de_base = [0.0, 0.0]salaire_super_brut = [0.0, 0.0]salaire_de_base = 2000:salaire_de_base = [166.6666717529297, 0.0]salaire_super_brut = [170.17333984375, 0.0]That is convenient for fully specified simulations, but it erases the difference between:
For screener-style or partially completed scenarios, that distinction matters. A missing salary field should usually propagate as unknown or incomplete instead of being silently normalized to zero.
Questions for maintainers
Would any of these approaches be idiomatic?
valueState-style annotation for inputsI 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:
openfisca-core==44.7.0,openfisca-france==175.1.0.Evidence packet (external): https://github.com/edithatogo/rulesandprocesses/blob/main/external/openfisca/MISSINGNESS_CASES.md