docs← Back to article

Markdown for LLMs

OpenFisca

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# OpenFisca

**In short:** OpenFisca computes who gets how much across millions of cases;
Arxo establishes what one case is owed under which edition, with grounds.
This page is for a reader who runs OpenFisca country models and wants to
know where a per-case prover overlaps — and where the two must not be
compared naively.

## What OpenFisca is for

OpenFisca is a microsimulation framework: a core engine plus country
packages written in a restricted Python, computing taxes and benefits for
whole populations in batched array calls. Its strengths are dated
parameters and formulas (a value per date, a formula per period), reforms
as baseline-versus-modified comparisons, large YAML test banks with error
margins, and computation logs that trace a single result. For reform work
and population statistics it is the reference tool.

## Where it meets Arxo

Both sides compute the same monthly French housing benefit for January
2021 from statute text, with staged derivations on each side — Arxo's
proof against the tracer log. The comparison only works stage by stage:
Arxo separates the post-reduction pre-deduction stage from the later
stages, and each must meet the matching OpenFisca variable. Cross-stage
equality is a false comparison, recorded up front.

## Key differences

- **Scale versus standing.** OpenFisca answers millions of cases per call
  with a documented tolerance per test (one percent in the studied bank);
  Arxo answers one case exactly, refusing rather than approximating. The
  tolerance hides sub-percent systematics — acceptance on the Arxo side
  needs cent-level agreement, not the bank's margin.
- **Rounding is an engine property.** The framework rounds with
  half-to-even banker's rounding, rents to whole euros, and resources up to
  hundreds. These are documented behaviors of the engine, not modelling
  choices, and the contract fixes them before comparison.
- **Missing inputs get defaults.** An unset OpenFisca input falls back to
  its default and the computation proceeds; Arxo refuses on a missing
  parameter with a named outcome. Both are deliberate semantics for
  different jobs — batch statistics versus individual entitlement.
- **Editions are the shared theme.** Dated formulas and reform objects are
  OpenFisca's native answer to legal change, and the strongest overlap with
  Arxo's dated editions. The prepared experiment re-runs one bank on two
  yearly scales to compare exactly that.

## A concrete scenario

The prepared experiment takes twelve published housing-benefit cases for
January 2021 plus a bank of two thousand synthetic households at the first
computation stage, re-run on a later yearly scale with changed ceilings and
thresholds, plus parameter edits. Exact-to-cent code replicas and
text-derived expectations sit side by side; payment-threshold placement and
rounding-basis questions stay open with named causes.

Historical runs from mid-September 2026 informed the protocol; the frozen
pins are France 176.0.9 at commit b2ab9943 with Core 44.7.1, and timings
and counts from earlier runs are not facts about these pins.

## Choosing and combining

Choose OpenFisca for population simulation, reform deltas, and any task
where a documented statistical tolerance is acceptable. Look to Arxo for
the individual decision with its grounds: which edition applied, which
stage produced the figure, and what is refused rather than defaulted. The
natural combination is a pipeline — OpenFisca for the population picture,
Arxo for the contestable single case.

## Evidence and open questions

- Sources checked: September 2026 (framework docs, core changelog, the
  France package at its pin, parameter files and the YAML bank re-read by
  hash; newer releases explicitly excluded).
- Studied profile: France 176.0.9 at commit b2ab9943, Core 44.7.1,
  NumPy 2.3.5, Python 3.13; newer releases explicitly excluded.
- Basis: confirmed by documentation plus historical runs plus a prepared
  protocol; current comparative run not performed.
- Open: the legal basis of rent rounding and threshold placement, exact
  later-scale code numbers (only a run produces them), and error,
  conflict, and judgment semantics of the core, which the docs did not
  yield — recorded as unconfirmed, not denied.

## Sources and reproducible materials

- Framework documentation (variables, parameters, periods, reforms,
  tracer): [openfisca.org/doc](https://openfisca.org/doc/)
- France package at the studied pin:
  [github.com/openfisca/openfisca-france](https://github.com/openfisca/openfisca-france)