Skip to content

EPIC: populace-nz — New Zealand dollar take-up engine on the Axiom stack #343

Open

Description

@MaxGhenis

Goal

Ship a working New Zealand tax-benefit microsimulation — composed as Axiom rules (rulespec-nz) × populace data, with no policyengine-nz country package — scoped first as a dollar benefit take-up engine: for each major transfer, predicted entitlement dollars vs official expenditure/caseload, with the gap decomposed by income percentile and family type. Same recipe as the Belgium pilot under #259: recalibrate the populace-us donor pool to public NZ margins, run the encoded rules through the Frame RulesEngine protocol via the Axiom adapter.

Why New Zealand now

  • The rules half already exists. rulespec-nz covers the core surface (income tax, WFF, main benefits, NZ Super, accommodation supplement, WEP, disability allowances, student support, KiwiSaver, ACC, child support), with a 2026-07-06 full value audit and fixes (rulespec-nz#73). Treasury's IncomeExplorer and the AN25-01 companion code are open, maintained, official per-household EMTR oracles — validation needs no permission.
  • A quantified public problem with an engaged partner. MSD/IDI research puts Working for Families take-up at ~87% and Best Start at ~97%, but Accommodation Supplement receipt among the potentially eligible at only ~44%. The policy conversation ("social cohesion") wants exactly the dollar-gap-vs-living-income framing this produces. A benefits-access funder now based in Auckland is scouting a MyFriendBen-style NZ deployment and pursuing complementary inside-IDI validation with licensed researchers.
  • Unusually good open target surface. PCO legislation XML is uncopyrighted; Stats NZ Census 2023 + population estimates, HES income tables, IRD income-by-band and WfF statistics, MSD quarterly benefit fact sheets (counts) and annual-report expenditure (dollars), and Treasury TAWA published aggregates are all public. Dollar-level program targets exist, which is what a dollar take-up estimate needs.
  • No licence-restricted microdata dependency in v0. Unlike BE-SILC/FRS, the v0 build reweights the populace-us donor pool to public NZ margins (the BE v0 pilot recipe; the UK-calibrated-US comparison came out close). HES CURF / IDI access are explicitly out of scope for v0 — IDI requires an NZ-based named investigator and produces confidentiality-checked outputs only; it is the inside validation channel, not the build input.

Binding architecture constraints

  1. Spec-first. No nz_runtime/ Python. Country content = spec files + target profiles; anything code-shaped becomes a general operator in the core packages.
  2. Rules only via the adapter. Engine access through populace-frame's RulesEngine protocol; the Axiom adapter is the only module importing the engine (shared with EPIC: populace-be — Belgium as the first Axiom-engine country #259/Implement an Axiom-backed RulesEngine adapter #260 — NZ adds no adapter code, only coverage).
  3. Licence posture. v0 artifacts are fully public (donor records are US-support-stratum only and are never presented as NZ microdata — support-stratum labels ship with the artifact, as in the BE pilot). Any future HES/IDI-derived artifact gets the private-repo + destination-guard machinery first.
  4. Naming. data_build_id convention; no ordinal versioning.

Phases

  • Phase 0 — targets. Commit the public calibration-target inventory (docs PR attached to this epic) and pick the ~15 v1 targets: age×sex×region population, household/family composition, IRD income-by-band, benefit recipient counts by program, benefit expenditure dollars by program, AS recipients by area.
  • Phase 1 — calibrate. Reweight the populace-us pool to the v1 targets (BE pilot recipe: initialize design weights at destination population scale). Gate: all v1 targets within the BE-pilot tolerance envelope (≤2%).
  • Phase 2 — validate. (a) Per-case: rulespec-nz vs Treasury IncomeExplorer on the AN25-01 stylized families; (b) population: reproduce AN25-01's published EMTR distribution (94% of individuals below 50%; ~13% of couple-parent and ~30% of sole-parent families above 50%) within stated tolerance; (c) aggregate: WfF, main-benefit, NZS, and AS totals vs IRD/MSD published dollars.
  • Phase 3 — first product cut. Accommodation Supplement dollar take-up gap by income percentile and family type, shown against a living-income threshold, with the ~44% receipt-rate literature as the external anchor. Publication gate: rulespec-nz#73 merged (value fixes) and the phase-2 validation green.

Children

To be filed as work starts (mirroring #259's structure):

  • nz target profiles (phase 0/1)
  • nz calibration surface — US recipe recalibrated to NZ margins (phase 1)
  • Treasury IncomeExplorer / AN25-01 validation harness (phase 2)
  • AS dollar take-up first cut (phase 3)
  • rulespec-nz#74 (upstream) — child support income-shares re-encode; child support stays out of composed outputs until closed

Out of scope (follow-ups)

  • IDI/inside-validation study (requires an NZ-based accredited investigator; complements this from the outside-in).
  • HES CURF or any restricted microdata source stage.
  • policyengine.py registration for NZ (follows the BE decision under EPIC: populace-be — Belgium as the first Axiom-engine country #259).
  • Local-area (TA/SA2) calibration — national first, consistent with the local-area = filter-one-national-dataset doctrine.

Acceptance criteria

  • A populace_nz v0 artifact passes calibration gates on the v1 target set (≤2% envelope) with public diagnostics.
  • AN25-01 EMTR distribution reproduced within documented tolerance on the calibrated population.
  • An AS dollar take-up estimate with explicit caveats (donor-pool provenance banner, program coverage list, validation status) — no take-up number publishes before rulespec-nz#73's fixes are merged and phase-2 checks pass.

Activity

  1. MaxGhenis commented on Oct 10, 2026

    @MaxGhenis
    ContributorAuthor

    NZ graph build progress. Packages G1–G7 have merged:

    Package PR
    G1 Axiom graph adapter surfaces and simulate.rules_by_ref@1 #1118
    G1b adapter reference hardening and kernel hash coverage #1139
    G2 New Zealand spec package #1119
    G3a liquid financial assets concept #1120
    G3b donor transport operators #1130
    G4 benefit units from concept pointers #1122
    G5a population-side transport kernels #1159
    G5b shared transport-graph kernels #1125
    G5c country-neutral gate bindings #1138
    G6 skeleton composer, rules registry and local build driver #1161, with follow-up #1180
    G7 AS entitlement bridges, take-up gaps and scenario bands #1181, with follow-up #1182

    G8, which activates the NZ references against pinned Chronicle facts, is #1183. It is blocked on method-card sign-off and the remaining Chronicle NZ packages.

    #821 was closed on 2026-10-07 in favour of this graph-native build. #820 now closes through #1183.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions