Iris by Cefic Iris is reproducible from public Eurostat data end-to-end. The sections below list every input series, the calculations that turn them into indicators, the pipeline that drafts and publishes the edition, and the editorial rules that govern the prose.
C20 (Chemicals, 2-digit) Benchmarks C, C21, C24, C29 Geo EU27_2020 + 27 states Unit I21 (2021 = 100) s_adj SCA (seasonally + working-day adjusted)
Monthly index of industrial production. Chemicals only (NACE C20);
pharmaceuticals (C21), basic metals (C24), motor vehicles
(C29) pulled as peer-sector benchmarks. Feeds the Output sparkline
and the per-country YoY bar list in the Macro brief tab.
C20 Market domestic Geo EU27_2020 + 27 states Unit I21 (2021 = 100)
Monthly index of producer prices in industry (domestic market), NACE
C20, EU27 aggregate and member states. Feeds the Prices sparkline
and the country price-decline ranking in trade commentary.
C20 Geo EU27_2020 + 27 states Unit I21 (2021 = 100)
Monthly turnover index in industry, NACE C20. Published with a slightly
longer lag than production and prices (typically T+7 to T+8 weeks); the macro brief
flags the lag window when the turnover reference month trails the production reference
month.
EU (EU27 as reporter) Partner ≠ EU27 (extra-EU only) Products 1,372 CN 8-digit codes Flows 1 = imports, 2 = exports
Chemistry filter maps CPA 2015 → CN 2025 via the Cefic
SubstanceId.csv lookup. Coverage by NACE 4-digit class:
Source of the 60-month balance chart, the exports-by-partner chart, the US/CN/GB partner cards, and the CN 8-digit waterfall charts.
Eurostat, Comext database Key scope difference. The industrial-indicator path (production, prices,
sales) is strict C20 and never picks up pharmaceuticals. The trade path reaches
into 21.10 because the Cefic chemistry map explicitly includes active pharmaceutical
ingredients. Expect imports from the United States and China to skew high on polypeptide
hormones and heterocyclic compounds for that reason.
C20 Chemicals
division, strict (no pharmaceuticals). Peer-sector benchmarks quoted in prose:
C (total manufacturing), C21 (pharmaceuticals), C24
(basic metals), C29 (motor vehicles).
NACE Rev. 2 reference ↗ 2011 to 2060, plus 2110 for active
pharmaceutical ingredients) and mapped to 2025 CN 8-digit codes.
CPA 2015 reference ↗ geo=EU27_2020, post-Brexit); the UK is treated as a third country across
the whole history for consistency.
(current − previous) ÷ previous × 100 Current period value against the same period one year earlier. Default window for monthly indicators.
Σ(first N months of Y) ÷ Σ(first N months of Y-1) − 1 Used for trade flows where a single-month reading is too noisy. Never mixed with single-month figures in the same sentence without an explicit scope prefix.
avg(2014 … 2019) Six-year average (2014-2019) used to measure the structural gap opened by the 2022 energy shock. Quoted as "X below pre-crisis levels (2014-2019 average)".
Σ(value_current − value_prev) by CN8 For US, CN, GB: top 3 positive movers, top 3 negative movers, residual "Other" bar so the totals reconcile. Labels from the Comext nomenclature.
top-N cumulative share ≥ 50% of Σ|Δ| Triggers the Pareto framing in prose only when concentrated. Flat distributions get a chapter-level breakdown instead.
5 signals → severity ∈ {none, watch, warn, critical} Trade shock without industrial co-movement, ≤ 2 partners carrying > 75% of the variation, comparison base > 2 sigma above its 12-month rolling mean, Δ vs N-2 less than half Δ vs N-1, value/volume divergence > 2×.
Pulls monthly STS series from the Eurostat JSON API for C20 production, prices, and turnover, across the EU27 and the 27 member states. Trade data reads from a sibling Comext ETL parquet, already filtered to chemistry (14M+ rows, 2002-present, monthly). Raw cache written to a local folder keyed by reference month.
Computes YoY, YTD, pre-crisis deltas, per-country and per-sector breakdowns, partner drill-downs, 60-month historical series, and the anomaly report. Outputs are one self-contained fiche per section (output, prices, sales, trade_exports, trade_imports, macro_brief) that drives both the prose drafting and the site rendering.
Five sections drafted by Claude Sonnet with a canonical system prompt and the fiche JSON as user message. Each draft is quality-gated (word count, banned connectors, zero em dashes, zero bullets in the macro brief); on gate failure the request re-runs on Opus and the best of the two is kept.
The opening headline and 80-120 word paragraph are drafted from the already-reconciled sections, under a dedicated prompt overlay. Anomaly-active mode expands the word ceiling to 150 when a base-effect caveat is mandatory.
Index series and country bars are rendered as static SVG via matplotlib; long-arc line charts, partner breakdowns, and waterfalls are rendered inline at site build time from the fiches, so they scale cleanly in the zoom lightbox and accept hover tooltips.
The pipeline emits a consolidated edition Markdown file into the Astro content collection. Astro's static build wires charts, fiches, and the MDX body into the dashboard template and the print-layout page.
The static site is deployed to Azure Static Web Apps, redeploying
iris.cefic.org within 1-2 minutes of the publish trigger. The PDF is
generated by a headless Chromium pass over the print-layout page and committed
alongside the edition.
0 6 * * 1 — every
Monday 06:00 CEST. Pulls the Eurostat Comext monthly archives,
loads them into Postgres, regenerates the chemistry-filtered
comext_export.parquet, and refreshes the downstream analysis cube.
The parquet becomes the trade-side input for Iris.
0 12 * * * — every day at
12:00 CEST. Polls the three Eurostat STS datasets
(sts_inpr_m, sts_inppd_m, sts_intv_m) over the
dissemination API, extracts the latest published reference month for each, and
compares the production reading against the state file
(data/cache/_watcher_state.json). If production has advanced past
last_processed_month, the watcher triggers
monthly_run.py --month NEW_M --force; otherwise it just refreshes
the state snapshot and exits. Three HTTP calls, no pipeline cost when nothing
has changed.
logs/release_watcher.log; pipeline output to logs/cron.log.
Failures surface in the file rather than in a dashboard; setting up a cron-failure
alert is on the short-term roadmap.
All prose is written by an LLM under a 500-line style guide derived from Cefic's Facts & Figures and Chemical Trends Reports corpus, synthesised into 24 editorial patterns. Twenty MUST rules and a dozen SHOULD rules shape the Iris voice.
warn. Base-effect caveat placed immediately after the opening finding.Iris is published under the Cefic economics team byline. For questions, corrections, or data revisions, reach the team via cefic.org/media-corner.