Skip to content

Proposal: preserve missing-input state instead of collapsing it to zero #1380

Description

@edithatogo

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:

  1. The user intentionally entered zero, and
  2. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions