Pipeline run · 8 phases

User-configurable phases marked ✎ · the rest are built-in invariants
PHASE 1 ✎
Fetch
Hagstova FO · CSV
PHASE 2 ✎
Field Mapping
3 mappings
PHASE 3 ✎
Transform
2 steps
PHASE 4
Authority Filter
built-in · config ↗
PHASE 5
Boundary
built-in · config ↗
PHASE 6 ✎
Validation
4 rules
PHASE 7
Enrichment
built-in · config ↗
PHASE 8
Promotion
if clean

Phase 1 · Fetch — Data Source

exactly one per Pipeline
SourceYear-range predicateQuery filter
Hagstova FO · CSV csv_file 1985 – present {"file":"IB01010.csv","encoding":"utf-8"} Edit

CSV is fetched from Hagstova FO's open data portal. To add another source table for the same Indicator, create a separate Pipeline writing to the same Indicator.

Phase 2 · Field Mapping

+ Add mapping
Source fieldSchema dimension
kommunamuncod_nordregio
aryear
fólkatalpopulation

Hagstova FO's CSV has no sex or age dimensions — sex and age_group are set to "T" by a constant-injection step in the Transform Chain.

Phase 3 · Transform Chain

+ Add step

Order matters. Drag to reorder. Each step is a typed Rust plugin with a JSON config schema.

1. NormaliseCodes applies Source Code Overrides
prefix=FO · pad_length=3 · use_overrides_from=Hagstova FO · CSV
2. ComputeOutput
column=population · expression=fólkatal
Hint: Hagstova FO publishes population on Jan-1 already, so no HarmoniseRefDate is needed (contrast SE / SCB Dec-31 → Jan-1). Built-in Authority Filter and Boundary Reconciliation are not Transform Steps — they always run as Phase 4 & Phase 5.

Phase 6 · Validation Rules

+ Add rule
#RuleSeverityConfig
1NotNullerrorcolumn=populationEdit
2NonNegativeerrorcolumn=populationEdit
3YearOnYearSwingwarn → quarantinemax_pct_delta=10Edit
4CompletenessPerCountrywarnexpected=29 munis · tolerance=0Edit

Dependencies

none — derivation pipelines list dependencies here

Approval policy

On promote
requires_approval_on_quarantine (R1 default) — clean runs auto-promote; runs with quarantines wait in Job Approval.
Boundary view
both views written; default reconstructed