# Method

This page describes how the numbers and texts of ai-waw.com are produced: reports with a fact register, metal flow analyses and the Companies register. It describes what the portal does today; anything not yet working is marked "in preparation".

On this page: [principles](#zasady) · [fact register](#fakty) · [source classes](#klasy) · [trade, production and price data](#dane) · [metal flow analyses](#przeplywy) · [Companies register](#podmioty) · [quality control](#jakosc) · [versions, errata and citation](#wersje) · [machine access](#mcp) · [licences and limitations](#licencje).

## Principles {#zasady}

- **Reproducibility.** Every number is produced by a script from files downloaded from the primary source. The download date is stored with the data, because official statistics are revised retroactively. Checks and reviews recompute results from the raw files, not from intermediate results.
- **Primary sources.** A number comes from the document that establishes it – official statistics, a legal act, a financial statement or a company document – not from a publication that quotes it. Missing data means no number, never zero.
- **One version of the data.** Text, tables, figures and machine-readable versions are generated from a single set of results: for reports, the fact register; for flow analyses, the balance results file. Numbers are never retyped by hand.
- **Numbers separate from theses.** The data pipeline computes the numbers. Theses, conclusions, the summary and the conflict-of-interest note are written by the author of ai-waw.com; without them a report does not reach version 1.0.
- **Role of AI.** AI tools download data, compute, typeset and run checks according to written procedures; AI does not formulate theses and does not approve publications. Details are in the [AI note](/en/about-ai), including the [workflow](/en/about-ai#przebieg) and [checks](/en/about-ai#kontrola).

## Fact register {#fakty}

The fact register covers reports in series S1–S7 and metal flow analyses (series P). Every number in a report's text is a fact from the register: the text references the fact and typesetting inserts the value. The report factory's checks detect numbers typed by hand and verify that the link on each number shows the value of the fact it points to. From flow analyses the register holds the reconciled balance flows, net imports by trade group, indicators and the key figures of the header – with a standard deviation, and the indicators also with a 90% interval ([see below](#przeplywy)).

*Diagram 1. The path of a number: from source to citation – A report number passes six steps: a class A or B primary source, a scripted download with date and SHA-256 checksum, the fact register (identifier, unit, period, area, classed source, status), text, table or figure with the value inserted by typesetting, a version approved by the author with the SHA-256 of its manifest, and access through the fact page, .md, .json, the API, MCP and a citation.*

| Field | Content |
|---|---|
| identifier | fact key, e.g. `F01-0042`, in flow analyses derived from the flow or indicator name, e.g. `PALIT-S-NIE-IM`, `PALIT-W-RIR`; the fact page is `/en/facts/{identifier}` |
| label | in Polish and English |
| value, unit, currency | currency only for monetary values (ISO 4217 code) |
| uncertainty | standard deviation (`value_sd`) and 90% interval (`value_low`, `value_high` – 5th and 95th percentile of Monte Carlo draws), in the fact unit; in flow analyses, empty for reports |
| period | e.g. year, half-year or month |
| area | ISO-2 country code or an aggregate (`EU27`, `WORLD`) |
| metal, CN or PRODCOM code | where relevant |
| source | key, title, publisher, URL, class A/B (class C – only a model estimate in a flow analysis), source licence; fields for the date checked and an archived copy |
| verification status | see the table below |
| note | e.g. the exact database query (subheading, partner, period) |
| publication | identifier of the publication the fact comes from |

| Status | Meaning |
|---|---|
| `verified` | value read directly from the primary source (e.g. import mass from Comext) |
| `calculated` | value computed from the source by a recorded formula (sum of months, unit conversion, share) |
| `reconciled` | value of the reconciled balance of a flow analysis (weighted least squares) with a standard deviation; indicators also with a 90% interval from Monte Carlo draws |
| `illustrative` | example number in a demonstration package – not taken from a source |

**Citation.** Cite an individual number with the publication, version and fact identifiers, e.g. "AIWAW-2026-F01 v1.0, fact F01-0042". The `cite` field in the API and in MCP responses returns a ready citation with the publication URL. The register shows values from the current version of a publication, which is why the version number is part of the citation.

**Formats.** The fact page `/en/facts/{identifier}` (also `.md` and `.json`) shows the value, the source with its class, the publication, the citation and the same indicator in other periods. The [`/en/facts`](/en/facts) browser filters by text, metal, area, period and publication; the `/en/facts.csv` and `/en/facts.json` exports apply the same filters (up to 10,000 rows). A single report's fact table is at `…/facts.json` next to the report, the facts of a flow analysis at `…/facts.json` next to the analysis page; the whole register is available through the API (`/api/v1/facts`, which also filters by CN code) and the MCP tool `get_facts`. Facts enter the public register only when the author approves a version ([quality control](#jakosc)).

## Source classes {#klasy}

Every source has class A, B or C. What a class allows depends on the material – the fact register applies the strictest rule.

*Diagram 2. Source classes and their use – A matrix of three source classes and three kinds of material. Classes A and B are the basis of a number in reports, a measurement or prior estimate with a standard deviation in flow analyses, and a source for plant data in the Companies register. Class C is never the basis of a report fact (the package is rejected). It enters flow analyses only as a prior estimate with a wide range, and a flow based on such an estimate enters the fact register as a model estimate with a standard deviation. In the Companies register class C marks a plant known only from the trade press.*

| Class | Type of source | Reports and fact register | Flow analyses | Companies register |
|---|---|---|---|---|
| A | official statistics (Eurostat, national statistical offices, UN Comtrade), legal act, financial or management report, permit, official register | basis of a number | balance input measurement with a standard deviation | source for plant data |
| B | company report or website, study group (ICSG, ILZSG, INSG), industry association | basis of a number; class shown with the fact | measurement or prior estimate with a standard deviation | source for plant data |
| C | trade press, release without underlying data; in flow analyses – the author's own estimate | never the basis of a number in reports – a report package with a fact based on a class C source is rejected on import; in the text, context only | a value that no class A or B source provides (e.g. a structure transferred from another area, a literature content coefficient for a product without data) – marked as class C with a wide uncertainty range; enters the reconciliation as a prior estimate, never as a measurement; in the fact register – a model estimate with status `reconciled` and a standard deviation | plant known only from the trade press; class shown on the card |

A plant's class in the Companies register expresses how certain its existence and operation are – separately from the class of a number (capacity, output); details [below](#podmioty). A class C estimate in a flow analysis is never presented as a measurement: its uncertainty carries through to the result ranges ([Monte Carlo](#monte-carlo)), and a large adjustment in the reconciliation flags it for checking. In the flow analyses, class A also covers audited company reports, documents of EU institutions and peer-reviewed literature; World Mining Data is class B; secondary compilations (e.g. BGS) and literature values transferred to another area are class C.

**Source class of a flow-analysis fact.** The value always comes from the reconciled balance (status `reconciled`), and the fact page gives the standard deviation and the input data before reconciliation. The class is assigned in one of two ways:

- **copper and aluminium analyses (except France):** a direct trade flow (headings of chapters 26, 74 and 76, and scrap) and the net imports of such a group cite Eurostat Comext (class A); other flows and indicators cite the balance of the analysis. They are class B when the relative standard deviation does not exceed 10% and the parameter is not solely a class C estimate, otherwise class C;
- **zinc, tin and French aluminium analyses:** the class of a fact is the class of its weakest input. A flow with data takes the weakest class among the parameter's sources, and a flow derived from the equations or an indicator – the weakest class among its inputs. Trade converted with content coefficients takes the coefficient's class; it is class A (Comext) only with a narrow coefficient and a reconciliation adjustment below one standard deviation (aluminium in France). This is why most facts of these analyses are class C.

**Never used:**

- exchange prices (LME) and price-agency series (including Fastmarkets, Argus, Platts, CRU, Benchmark Mineral, SMM) – a package citing these publishers is rejected on import;
- the press as the source of a number;
- secondary publications when the primary document is available;
- documents obtained by circumventing paywalls, logins or website blocks – an inaccessible document is assessed indirectly, and the review records the assessment.

There is no separate public list of sources; the source of every number is shown on the fact page and at `/api/v1/sources/{key}`.

## Trade, production and price data {#dane}

### Foreign trade {#handel}

- **Database.** Eurostat Comext (DS-045409): CN8 subheadings, partner country, imports and exports, mass and value in euro, annual and monthly data. Mass reported in hundreds of kilograms is converted to tonnes.
- **Incomplete month.** The latest month in the database is often a partial release, and comparing against it can reverse the sign of a change. Monthly facts come from complete months only: a country's total trade must reach at least 70% of the median of the six preceding complete months.
- **Confidentiality.** Trade under statistical confidentiality is marked "C" in tables (not to be confused with the source class) – never as zero. In flow analyses, trade that is confidential at CN8 level is derived as the difference between the six-digit heading and the sum of the disclosed subheadings, with the six-digit content coefficient.
- **Contained metal.** In flow analyses every CN subheading has a metal content coefficient – a central value and a range, e.g. copper cathodes 100%, unalloyed aluminium 99.7%, aluminium scrap 88%, bauxite 27% Al, unwrought zinc about 99%, hot-dip galvanised sheet about 2.5%, unalloyed tin 99.9%, tinplate about 0.3%. Zinc concentrate is converted against the declared mass, allowing for moisture. Passenger cars are converted with kilograms of metal per tonne of vehicle by drive type. Each analysis justifies its coefficients and their sources in an appendix.
- **Unit-value cap.** A product cannot contain metal worth more than the product itself. If the coefficient implies more, the content is capped (`c` – metal share, `UV` – unit value of the consignment, `p` – reference metal price for the same year, [see prices](#ceny)):

| Product group | Copper | Aluminium | Zinc |
|---|---|---|---|
| semi-finished products | c ≤ UV/p | c ≤ UV/p | c ≤ UV/p |
| articles and metal in finished goods | c ≤ 0.85·UV/p | c ≤ 0.85·UV/p | c ≤ 0.85·UV/p |
| scrap | c ≤ UV/(0.85·p) | c ≤ UV/(0.70·p) | c ≤ UV/(0.70·p) |

  In the tin analysis the multiplier is set for each product group, and the content of concentrate, residues and tin scrap is derived from the consignment's unit value. Brass and bronze products are compared with the unit value of the unwrought alloy. Otherwise the cap does not apply to raw materials (concentrate, bauxite, alumina), unwrought metal or dross.
- **Consignment test.** In the zinc and tin analyses unit values are checked per reporter × partner consignment, because partner totals hide reclassifications and zero values. A consignment inconsistent with the goods gets a different content class or a different link (e.g. "zinc concentrate" at the price of copper concentrate), and one without a value gets the subheading's coefficient.
- **Mass errors.** A declaration whose unit value is below 25% of the median for that subheading in other years has its mass recomputed from its value. In the aluminium analyses semi-finished products are also checked partner by partner: a consignment cheaper than the metal it contains is recomputed from its value at the median unit value of the other partners (capped at 1.5·c·p).
- **Mirror data.** A country's declarations are compared with its partners' declarations. The standard deviation of exports is at least half of the mirror discrepancy; a mass error confirmed by the partner at a matching value is corrected to the partner's declaration. A one-sided discrepancy (e.g. a shipment reported only by the partner) is taken at the midpoint between the declaration and the mirror data with σ = difference/√12, or at the partner's figure where other data confirm it. The EU-27 analyses have no mirror check (non-EU partners do not report to Comext); a plausibility check of the main partners replaces it.

### Production {#produkcja}

- **PRODCOM** (DS-059358) reports **sold** production – excluding use within the same enterprise (e.g. wire drawn by cable makers for their own use). Data for year n appear in the summer of year n+1; the EU-27 aggregate includes Eurostat estimates for countries under confidentiality; some headings are reported in units, not mass.
- **Mines, smelters and refineries** – company reports and mining statistics. Where data are confidential, output is estimated from its value, from the market balance or from the producer structure, and marked with a class. Smelter output is checked independently – as a sum of plants or from EU ETS emissions with an emission factor per tonne of metal; the World Mining Data and BGS compilations serve as comparisons.
- **Waste and population** – Eurostat and national environment agency waste statistics; population from Eurostat on 1 January.
- Percentage changes are recomputed from source levels, not from rounded results or averages.

### Prices {#ceny}

The portal does not publish LME price series or price-agency assessments. In flow analyses the reference metal price is the Comext unit value of extra-EU imports into the EU in the given year: copper cathodes (CN 7403 11), unalloyed aluminium (CN 7601 10), unalloyed zinc (CN 7901 11) or unalloyed tin (CN 8001 10). Where a report gives reference prices, they are World Bank monthly and annual averages (Pink Sheet, CC BY 4.0), with attribution.

## Metal flow analyses {#przeplywy}

The [Metal Flows](/en/metal-flows) tab contains material balances for 2024, each for one area: copper – EU-27, Poland, Germany, Italy, France and Spain; aluminium – EU-27, Poland, Germany, Italy, Austria and France; zinc – EU-27 and Poland; tin – EU-27 (trade series from 2010). All analyses share one reconciliation module and the same Monte Carlo scheme; the newer ones extend the method with the elements described [below](#warianty). A short description of the steps and the literature list are on the [analyses overview](/en/metal-flows#jak-powstaja); the definitions follow below.

*Diagram 3. Balance links and the system boundary – aluminium example – A simplified aluminium balance within the area boundary: alumina and primary smelters (where present) and secondary refiners supply the unwrought aluminium market, from which metal goes to casthouses with rolling, extrusion and drawing and to shape foundries, then to product manufacturers and into the stock in use. Products leaving use pass through collection to the scrap market, from which scrap returns to secondary refiners or to direct melting; new scrap from processing returns to the scrap market without passing through the stock. Trade crosses the boundary for raw materials, unwrought metal, semi-finished products, products and metal in finished goods, and scrap. At every node input equals output plus stock change.*

### System boundary and links {#ogniwa}

- **Boundary.** The territory of the area. In the EU-27 analyses intra-EU trade is internal; in a country analysis trade with EU and non-EU countries crosses the boundary in the same way. France includes its overseas departments, as Comext, waste statistics and population data cover them.
- **Unit.** Thousand tonnes of contained metal – from concentrate to the metal in a car; tonnes in the tin analysis.
- **Links (nodes).** Copper: mining and concentration, smelters, refineries, wire rod mills, rolling mills, extrusion and drawing of semi-finished products, foundries, product manufacturers, stock in use, collection, scrap market. Aluminium: bauxite, alumina refining and primary smelters (where present in the area – EU-27, Germany, France), secondary refiners and alloy foundries, unwrought aluminium market, casthouses and rolling, extrusion and drawing, shape foundries, product manufacturers, stock in use, collection, scrap market. Zinc: mining, zinc smelters, unwrought zinc market, continuous and batch galvanising, rolling mills, foundries, brass, compounds, manufacturers, stock, end of life, steel scrap, electric arc furnace dust and Waelz kilns (Waelz oxide to smelters). Tin: mining, tin refineries, secondary copper smelters (tin recovery), unwrought tin market, solders, tinplating, compounds, bronzes, lead alloys, float glass, manufacturers, stock, end of life, waste electrical and electronic equipment (WEEE), tin in steel scrap.
- **Equations.** For each node: input = output + stock change. Each flow is either a measurement (value and standard deviation σ) or an unknown determined by the equations.
- **Scrap.** Internal run-around scrap stays within the link. New (pre-consumer) scrap returns to remelting without passing through the stock; end-of-life scrap comes from products leaving use. Zinc from galvanised steel scrap returns to smelters via electric arc furnace dust; tin from tinplate goes with steel scrap into steel and slag – non-functional recovery, counted separately.
- **Indirect trade.** Metal in finished goods: cables and conductors (CN 8544), motors, generators and transformers (CN 8501–8504), refrigeration and air-conditioning equipment, batteries, passenger cars (CN 8703). For aluminium also vehicle parts, combustion engines, rolling stock, closures and articles of chapter 76 (in France also aircraft and aircraft engines), for zinc galvanised steel, brass articles and tyres, and for tin tinplate, electronics and printed circuit boards, bronze articles and vehicles.

### Inputs and control measurements {#wejscie}

- **Trade.** The σ of a trade flow follows from the ranges of the content coefficients (a quarter of the range, CN subheadings independent), with a floor of a few per cent of the flow; for finished goods at least 10%, because their coefficients share a common method error; for exports at least half of the mirror discrepancy.
- **Parameters.** Production, collection, losses and stock changes enter with a value and a σ derived from comparing sources; class C estimates with a wide range. A parameter without a prior estimate is an unknown.
- **Control measurements (K1–K4).** A sum of several flows from an independent source enters as an additional equation that checks the balance rather than replacing flows – e.g. smelter output by plant, output derived from EU ETS emissions, waste or scrap collection statistics, metal in vehicles from registrations. For each measurement the analysis reports the value, the reconciled result, the balance's own prediction without that measurement and the standardised residual. A source already used for a prior estimate does not enter as a control measurement – it remains a comparison.
- **Values from another analysis.** A result of another analysis (e.g. the Polish balance within the EU-27 balance, or comparison columns) enters with a recorded file checksum, so it is known which version was used.

### Weighted least squares reconciliation {#uzgodnienie}

The reconciliation finds the vector of flows x closest to the data x₀ in the metric of weights 1/σ² that satisfies the balance equations A·x = 0 exactly:

`x = x₀ − Σ·Aᵀ·(A·Σ·Aᵀ)⁻¹·A·x₀`,  `Σₓ = Σ − Σ·Aᵀ·(A·Σ·Aᵀ)⁻¹·A·Σ`

*Diagram 4. Balance reconciliation and uncertainty of results – Input data x₀ with standard deviations σ, the balance equations A·x = 0 and control measurements enter a weighted least squares reconciliation, which yields the flows and normalised adjustments z. The χ² test on the redundant equations compares the result with the critical value at p = 0.05. A Monte Carlo simulation repeats the reconciliation for 20,000 draws (in newer analyses – accepted draws, after rejecting physically impossible ones), with imports and exports correlated, and the indicators are given as the 5th, 50th and 95th percentiles.*

Unknowns are eliminated exactly: the test and the adjustments are computed on the redundant equations (combinations of equations free of unknowns), and the unknowns are then derived from the equations together with their standard deviations. Each measurement has a normalised adjustment z = (x − x₀)/σ; |z| > 1 flags a measurement for checking.

### The χ² test and its power {#chi2}

- **Statistic.** χ² = rᵀ·(B·Σ·Bᵀ)⁻¹·r, where r = B·x₀ and B is the matrix of redundant equations. The degrees of freedom are the number of independent redundant equations (the rank of B). Each analysis reports χ² with its degrees of freedom and compares it with the critical value at p = 0.05.
- **What the result means.** χ² below the critical value only means that the data do not contradict each other where the equations can check them. The test is empty if a prior estimate is in effect the residual of an equation – the model review checks this separately.
- **Power of the test.** In the aluminium analyses for the EU-27, Italy and France, the smallest error in a selected flow's prior estimate (upwards and downwards) that would push χ² above the critical value is computed. An error smaller than this threshold is invisible to the test. The test checks only redundant equations: a measurement that appears only in equations with unknowns does not affect χ², and its error passes straight into the unknowns derived from it.
- **Scope of the test.** The zinc and tin analyses report the redundancy number of each measurement (the share of the degrees of freedom that checks it; the numbers add up to the degrees of freedom) and the minimal detectable bias MDB ≈ 2.8σ/√r. A flow with a redundancy number close to zero is only summed, not checked. The French aluminium analysis reports the residuals of local combinations of equations at the prior estimates (tensions in nodes) and the value of a parameter derived from the balance alone after removing its prior estimate.

### Uncertainty – Monte Carlo {#monte-carlo}

- Inputs are drawn 20,000 times from normal distributions (σ as in the reconciliation), truncated at zero for flows that are positive by nature; a stock change may be negative. Each draw is reconciled anew and the indicators are computed. Results are given as the 5th, 50th and 95th percentiles. The random seed is fixed, so the result is reproducible; in newer analyses the computation is run twice and the result files are compared byte for byte.
- **Rejected draws.** In the zinc, tin and French aluminium analyses a draw in which a physically non-negative flow turns negative after reconciliation is rejected until 20,000 draws are accepted. The ranges are then conditional on the physical constraints. The analysis reports the share of rejected draws, the flows causing them and the effect of rejection on the medians.
- Imports and exports of the same product group are drawn with correlation, because they share content coefficients: ρ = 0.8 in the copper analyses; in the aluminium, zinc and tin analyses the correlation of each pair is derived from the covariance of the CN subheadings. In the tin analysis the shared part is a separate balance flow, only for consignments with the subheading's default coefficient and similar unit values in both directions. The aluminium analyses for the EU-27, Italy and France also report sensitivity variants with ρ = 0.5 and without correlation.
- The range covers only the uncertainty described by σ. It does not cover errors of definition, system boundary or model structure – the analysis text describes those.

### Links, gaps and variants {#warianty}

- **Links between flows.** A flow that is not measured directly is tied to another one by a coefficient from the literature or a model. Flow = coefficient × reference flow + deviation with its own σ (e.g. galvanised steel scrap as a share of end-of-life outflow, transport as a share of manufacturers' output). The deviation is adjusted like any other input, so the reconciliation shows whether the link fits the data.
- **Gap shown explicitly.** When the data do not close a node, the difference is not hidden in another flow. It enters as a separate flow of unidentified origin or fate, with a prior estimate of zero and a wide σ (e.g. tin refinery feed of unidentified origin, zinc in steel scrap of unidentified fate); the analysis reports its size and possible explanations.
- **Interpretation variants.** An indicator that depends on the origin of such a gap is computed under several interpretations (e.g. the gap as secondary material, as end-of-life scrap or as imports), and the range is reported.
- **Parameter variants.** Alternative values of contested parameters (e.g. another production compilation, mirror data instead of declarations, the balance without a selected control measurement) are reconciled anew each time and reported with χ² and the indicators.
- **Comparisons.** The indicators are compared with balances compiled by other methods. A value is said to lie "above" or "below" the 90% range only when the indicator definition is the same, and a different year or area is noted with the number; in the French aluminium analysis, only when the definition, area and year are all the same. Other comparisons carry no test. Balances of the same metal compiled with the same method for other areas appear in comparison columns labelled by area, also without a test.

### End-of-life outflow – dynamic model {#wycofanie}

In the zinc and tin analyses the metal in products leaving use is estimated by an inflow-driven dynamic model. The outflow in year r is the metal put into use in earlier years that, according to lifetime distributions from the literature, reaches end of life in year r – separately for each sector (in the tin analysis, each first-use cohort). Historical inflow comes from published balances, production and trade series and the 2024 balance; for years without data a calibrated or assumed level is used (class C). The 2024 inflow depends on the balance, so the model and the balance are recomputed alternately until they reach a fixed point. The outflow enters the reconciliation as a prior estimate with σ from the spread of the variants (lifetimes, sector structure, inflow path), and scrap flows are linked to it by coefficients from the same model. It is a model estimate, not a measurement, and it determines the sign of the net addition to stock. Other analyses estimate the outflow from parameters (e.g. per capita or by product group).

### Indicators {#wskazniki}

| Indicator | Definition |
|---|---|
| RIR – copper, EU-27 | secondary input ÷ (secondary input + primary input); secondary input – scrap in smelters and scrap remelted directly (wire rod mills, semi-finished products, foundries); primary input – refined copper consumption × (1 − scrap share of smelter input) |
| RIR – copper, countries | production boundary: scrap ÷ (scrap + concentrate smelted + net imports of smelter intermediates); variant: processing input with imported cathodes counted as primary (lower bound). For a country without a refinery the production-boundary figure is not reported |
| share of directly remelted scrap – copper, countries | scrap remelted in rolling mills, drawing mills and foundries ÷ (that scrap + cathodes used in those links); no assumption about cathode origin, comparable across countries |
| RIR – aluminium | new and end-of-life scrap (excluding internal run-around scrap) in secondary refiners, casthouses and shape foundries ÷ (that scrap + primary metal used in the country); exports of unwrought aluminium are attributed to refiners' output, a variant attributes only exports of foundry alloys to them |
| secondary share of metal supply – aluminium (IAI basis) | (secondary refiners' output − primary metal added in refiners + directly remelted scrap) ÷ (that amount + net imports of unwrought aluminium + primary production); variant – without exports of secondary alloys and after melt loss |
| RIR – zinc | share of secondary materials (Waelz oxide, scrap, residues, batteries) in smelter feed (smelter RIR) and at the production boundary; for comparison with the European balance – the equivalent of the Rostek and Loibl definition |
| RIR – tin | secondary tin produced in the EU ÷ total use (equivalent of the ITA indicator); refinery RIR – share of secondary materials in refinery feed; both also under the interpretation variants of the feed gap |
| EoL-RIR | RIR × share of end-of-life scrap in secondary input |
| EoL-RR | end-of-life scrap collected (including exported scrap) ÷ metal in products leaving use; the EU-27 copper analysis also gives a variant without net scrap exports. For zinc and tin – functional recycling, excluding metal that ends up in steel and slag (for tin also a variant including it and a basis with scrap exported for recycling) |
| OSR – zinc, tin | end-of-life scrap ÷ total scrap |
| import dependence, mine self-sufficiency | net imports ÷ apparent consumption; mine output ÷ smelter output (zinc) or apparent consumption (tin) – a ratio, not the origin of the metal |
| put into use per capita | (domestic manufacturers' products + net imports of articles and of metal in finished goods) ÷ population on 1 January; kg per person |

The analyses also report the net addition to stock in use, the end-of-life outflow, metal not collected or of unidentified fate, the export share of available scrap and the balance of metal in finished goods.

### Sector split {#sektory}

Metal put into use is split into sectors: five for copper (building and construction, network infrastructure, transport, industrial equipment, consumer and electronic products) and six for aluminium (transport, building and construction, packaging, electrical engineering, machinery and equipment, consumer durables). For zinc they are building and infrastructure, transport, machinery and installations, consumer goods, dissipative uses, and for tin – electronics, packaging, building, transport, machinery and other industrial uses, batteries, PVC stabilisers, dissipative uses. Domestic manufacturers' output is split by European first-use sector shares or – where available – national ones (e.g. Aluminium Deutschland, Centroal), with transport tied to vehicle registrations (a control measurement) and packaging to packaging waste; trade in articles and metal in finished goods is assigned by CN heading. Where this would leave a sector with negative input, exports are attributed to that sector's domestic output and only production for the domestic market is split by the European structure.

### Figures and maps {#mapy}

In Sankey diagrams the band width is proportional to the contained-metal flow; on trade maps, the arrow width. Plant maps are drawn from the [Companies register](#podmioty), and each plant marker leads to the company card. Every figure has a data table. Text, tables and figures are generated from the same balance results file.

### What the analyses do not cover {#ograniczenia-przeplywow}

- **Dynamics.** Each analysis is a single-year balance. The stock in use is not measured – metal in products leaving use is an estimate, also when it comes from the [dynamic model](#wycofanie). A dynamic model of the copper stock in use is in preparation.
- **Value.** The balance is in mass; it does not cover prices, value added or employment.
- **Unrecorded trade.** Unrecorded trade (e.g. used vehicles exported without declaration) appears only as an estimate where the analysis includes it.
- **Plant totals.** Capacities of plants in the Companies register are not summed into the balance; the balance rests on statistics and company reports.
- **Every number of the text as a fact.** The fact register (`/en/facts`, the API, MCP) holds the balance flows, net imports by trade group, indicators and the key figures of the header – from the approval of a version of the analysis. Other numbers in the text (e.g. shares of trade partners, company data, time series) are only in the page text and its `.md` version. Moving the analyses into the report factory, where every number of the text is a fact, is in preparation (first: copper in the EU).

## Companies register {#podmioty}

The [Companies register](/en/companies) holds non-ferrous metals companies in Europe and their plants.

- **Unit – the plant.** A plant has a value-chain link, location, status (operating, under construction, idled, closed, not established), capacity or output (with unit and year), metals, CN codes, sources with class and page reference, and the date it was last verified at source. A company is the sum of its plants.
- **Corporate groups.** The model has three levels: corporate group (group identifier, ultimate owner) → company (LEI, register number) → plant (output, capacity). Capacity and output are recorded only at the plant, so a market total counts each plant once. Companies are grouped in three steps: first, ownership relationships from GLEIF Level 2 (direct and ultimate parent; CC0 licence, class A) – companies with a common ultimate parent form one group, identified by the LEI of the parent company. Editorial aliases follow, each with a stated reason, and finally the normalised group entry from the register (class C). A GLEIF relationship that is outdated against more recent company documents is overridden by the editors, with a stated reason. Where GLEIF reports an exception instead of a parent (e.g. control by natural persons, no consolidation), the group page shows that reason. A group has its own page when it has at least two companies or a parent in GLEIF: a tree group → companies → plants, a map of the plants and capacity by metal and unit. This is the full capacity of the group companies' plants – shares in plants (capacity attributable to the group by share) and joint ventures will be covered in the next stage. A company page shows the ownership path: company → direct parent → group → ultimate owner, with the source and class of each relationship.
- **Sources.** The plant registers of the flow analyses (copper, aluminium, zinc, tin), earlier market analyses (aluminium, zinc and ZnAl alloys, nickel alloys and ferroalloys), the certification scopes of ASI members (CC BY 4.0) and documents of recycling companies – reports, permits, websites. Membership lists of industry organisations are not published. A plant found in several sources appears once, with all its sources.
- **Verification.** Every plant goes through a substantive check with a verdict: confirmed, corrected (always with a source), removed, or doubtful (cannot be resolved – the record stays without a verification date). A closed plant gets a status, not removal; a project without confirmed construction is "not established". A verification date is set only when the verdict rests on an open document with a URL. Automated checks cover location within the country's borders, duplicates, sources, quantities and their units, consistency of link and metal, and text.
- **Plant class and number class.** A plant's class states how certain its existence and operation are; a number (capacity, output, role in an analysis) carries the class of its own source. A flow analysis's plant register gives the plant class after plant-by-plant verification, and documents from that register raise the plant's class at most to that level – an LEI record from GLEIF or an OpenStreetMap location does not prove operation. Otherwise a plant's class is the best class among its sources. Output for 2024 is accepted only from a class A or B source; an annual figure without a year is treated as capacity.
- **Status from an analysis register.** A closed, idled or project status (recorded as not established) in a flow analysis's register replaces an "operating" status from an earlier source (with a note on the card). An unconfirmed lead (class C, status not established) does not add a metal or an analysis to a plant already in the dataset.
- **Coordinates.** In the plant registers of the newer flow analyses a location comes first from the EEA industrial emissions register (IED, E-PRTR; CC BY 4.0). Some locations were found with the OpenStreetMap search (Nominatim) – these coordinates form a layer under ODbL 1.0, marked on cards and maps. Base map: Natural Earth (public domain).
- **Identifiers.** LEI from GLEIF (with the business register number from the LEI record) and the Wikidata identifier. Matching compares the name without legal form, the country, the town and the legal form. High-confidence matches are accepted (same name, country and town, or the only candidate with that legal form), as are medium-confidence matches accepted in a manual review, with separate thresholds for LEI and Wikidata.
- **Plant-to-plant flows.** Where primary sources give them: where a plant sources its feed and where it ships its product – with quantity, unit, year and source class.
- **Link with the analyses.** A plant from a flow analysis's plant layer carries the analysis key and its role (e.g. its share of a balance link or a number from its 2024 report). Only these plants are reconciled with the national and EU balances; the others are not summed. A change to an analysis's companies after approval is flagged in the editorial panel, and the company card shows its change history.
- **Access and corrections.** Company cards, the full dataset, the API and MCP – [see machine access](#mcp). Errors in a plant's data can be reported via [contact](/en/contact).

## Quality control and reviews {#jakosc}

| Material | Automated checks | Review | Approval |
|---|---|---|---|
| reports S1–S7 | factory checks A1–A11 and the package check on import | – | the author in the editorial panel |
| flow analyses (series P) | post-recomputation checks (node closure, consistency of result files) and portal tests of the pages (figures, links to company cards, English labels) | five independent reviews A1–A5 and a corrections document | the author in the editorial panel |
| Companies register | checks K1–K6 on every record | substantive verification with verdicts, peer review of the dataset | dataset import on deployment |

*Diagram 5. Quality control and two-stage publication – A factory report passes automated checks A1–A11 and the author gate; a flow analysis passes five independent reviews A1–A5 and a list of corrections. Both arrive as a package at the import check, which rejects a package that does not match the schema, cites a source without a licence, contains a fact with an unknown or class C source (except a model estimate of a flow analysis), or contains excluded data. The package becomes an unapproved version; only the author's approval makes it current and moves facts and sources into the public registers. An approved version is never overwritten: a correction is a new version or an erratum.*

**Report factory checks.** A1 – fact references exist and the link on each number shows the target fact's value; A2 – facts complete, sources class A or B; A3 – every register number recomputed directly from the raw files; A4 – no numbers typed by hand; A5 – theses, conclusions, summary and conflict-of-interest note filled in by the author; A6 – privacy and source licences; A7 – package consistent with the register; A8 – completeness of Comext months; A9 – figures (SVG without active elements, text description, font size, a data marker's tooltip shows the fact's value); A10 – currency of the legal status; A11 – terminology and banned forms. Each check prints its coverage; a check that verified nothing does not pass. In release mode A4 and A5 are errors.

**Package check on import.** The portal rejects a package that does not match the schema, cites a publisher without a distribution licence (LME, price agencies), contains a fact based on a class C source or on an unknown source, or contains data excluded from publication. HTML and SVG from the package are stripped of active elements.

**Reviews of flow analyses.** Before publication every analysis is checked by five reviews, each run separately from the run that prepared it; a review does not change the analysis files.

| Review | Scope |
|---|---|
| A1 – sources | opening the source documents, comparing every parameter and control measurement with the document; the analysis's plant register (existence, status, plant class) |
| A2 – trade | rerunning the trade layer, control queries to Comext, the consignment unit-value test, mirror checks with partners, content coefficients and their shared error |
| A3 – model | reproducing the result, decomposing χ² into redundant equations, removing prior estimates and control measurements one at a time, parameter variants, Monte Carlo and rejected draws, power of the test, the dynamic end-of-life model |
| A4 – figures | node inputs and outputs against the balance, tooltips and links, maps, Polish and English labels |
| A5 – text, page and facts | numbers in the text against the results, consistency of the Polish and English versions, comparative statements against ranges, facts and their classes, style |

Findings are graded as blocking, material or minor. The corrections document links each finding to a change and a status (corrected, partly, not – with reasons) and gives results before and after the correction. In the newer analyses corrections are made in two stages – first data and model, then text, figures, maps, page and facts – each followed by post-recomputation checks. Changes to the plant register resulting from a review go into the Companies register. Limitations that cannot be removed are described in the analysis text.

**Two-stage publication.** A factory package arrives with an HMAC-SHA256 signature and becomes an unapproved version; a flow analysis is packaged from the repository content along the same path. Before approval the version can be previewed in the public page template. Only the author's approval moves facts and sources into the public registers, makes the version current, logs an event with the manifest checksum and purges the page cache.

**After approval.** An approved version is never changed. A correction goes into a new version or the [errata register](#wersje). Publications are withdrawn rather than deleted – the URL then returns 404 and the withdrawal stays in the event log.

## Versions, errata and citation {#wersje}

- **Version numbers.** Drafts are numbered 0.x and may lack the author's theses; version 1.0 and later (1.1 …) are releases. An approved version cannot be resubmitted – the import ends with a conflict.
- **Archived versions.** Every approved version of a report has its own URL `…/v{number}`; the version history on the report page gives the date and the start of the checksum.
- **Checksums.** SHA-256 of the package manifest (independent of key order) – on the report page, in the API (`version.manifest_sha256`) and in the event log. Release files (PDF, Word) and dataset files carry a SHA-256 file checksum; version files are never overwritten.
- **Errata.** The [errata register](/en/errata) gives the date, publication, version, location, description and the identifiers of the facts affected. Errata also appear with the report, in the Atom and JSON feeds, in the API (`/api/v1/errata`) and in the MCP tool `get_errata`.
- **Series P.** Flow analyses have an identifier `AIWAW-2026-P<metal><area>` (e.g. `AIWAW-2026-PCUPL`) and versions in the editorial panel; the analysis page shows the approved version (before the first approval – the repository content). The facts of the analysis enter the fact register on approval of a version, and the analysis page links to them in its “Facts of this analysis” part. Version number, citation and errata on the analysis page are in preparation. Figures of the analyses are not versioned in the database.
- **DOI.** Version metadata has a DOI field, but no publication has been assigned a DOI yet. DOIs for flagship reports are in preparation.
- **Citation.** Cite a publication with its identifier and version, a number with its fact identifier ([fact register](#fakty)). The report page gives plain-text, BibTeX, RIS and CSL-JSON citations; `.bib` and `.ris` files are obtained by appending the extension to the report URL; the MCP tool `cite` returns a citation for a publication or a fact. Cite a number from a flow analysis with its fact identifier, e.g. “AIWAW-2026-PALIT v1.0, fact PALIT-W-RIR”, and the whole analysis with its identifier, version and URL; `cite` returns both.

## Machine access {#mcp}

Diagram 6 sets out the machine-access layers and the text and data mining rules described below.

*Diagram 6. Machine access and mining rules – Five access layers: HTML pages, .md and .json versions (by extension), API v1 with an OpenAPI description, an MCP server with nine read-only tools, and files for agents: /llms.txt, Atom and JSON feeds, sitemap.xml. Flow analyses are available as HTML and .md, and their numbers as facts in the register, the API and MCP. Search and answers with citation are permitted on all paths; model training is permitted with attribution for report summaries, the fact register, the method page and the Companies register, and reserved for all other content. The rules are expressed by tdmrep.json, the tdm-reservation and tdm-policy headers, /tdm-policy.json and robots.txt.*

### Formats {#formaty}

| Resource | Machine-readable versions |
|---|---|
| report | `.md`, `.json`, `.bib`, `.ris`; `Accept: text/markdown` negotiation and a `Link` header |
| report summary | `.md` (`Link` header) |
| report fact table | `…/facts.json` |
| fact register | `/en/facts.csv`, `/en/facts.json`; fact page `.md`, `.json` |
| report catalogue, datasets | `.md`, `.json` |
| flow analyses and their overview | `.md`; facts of the analysis – `…/facts.json` |
| Companies | overview `.md`, full dataset `/en/companies.json`; company card `.md`, `.json` |
| static pages (including this one) | `.md` |

A machine-readable version is obtained by appending the extension to the page URL. Negotiation with `Accept: text/markdown` currently works only on report pages; elsewhere use the extension.

### API v1 {#api}

A read-only API described in [OpenAPI](/api/openapi.json): `publications` (filters: text, metal, country, series, year; up to 100 per page), `publications/{id}` with facts and sections, `facts` (text, metal, CN code, area, period, publication; up to 200 per page), `facts/{id}`, `companies` (name, country, metal, analysis, LEI), `companies/{slug}`, `datasets`, `sources/{key}`, `errata`. Without a key – 60 requests per minute per address; an API key (`Authorization: Bearer` or `X-Api-Key`) raises the limit.

### MCP server {#serwer-mcp}

The `/mcp` server (Streamable HTTP, stateless, 120 requests per minute) offers read-only tools:

| Tool | Returns |
|---|---|
| `search_reports` | publications by text, metal, country, series and year |
| `get_report` | metadata, author summary, section list, version, DOI (when assigned) and errata count |
| `get_section` | the text of one section in Markdown |
| `get_facts` | facts with unit, period, area, source, class, verification status, uncertainty (flow analyses) and the `cite` field |
| `get_companies` | companies with plants, roles in the flow analyses, plant-to-plant flows and identifiers (LEI, Wikidata) |
| `get_dataset` | dataset description, columns, licence and file URL |
| `list_series` | series S1–S7 with rhythm and number of publications |
| `get_errata` | errata, optionally since a date and for one publication |
| `cite` | citation (text and BibTeX) of a publication or a fact |

Resource templates: `aiwaw://publication/{id}` (full publication in Markdown) and `aiwaw://fact/{id}`. Flow analyses (series P) are not in the API publication catalogue or in `search_reports`; their facts are returned by `/api/v1/facts?publication=AIWAW-2026-P…`, `get_facts` and `cite`.

### Files for agents and feeds {#pliki-dla-agentow}

[`/llms.txt`](/llms.txt) – a content map for language models; Atom (`/en/feed.xml`) and JSON Feed (`/en/feed.json`) – new reports and metal flow analyses, their versions and errata (Polish versions without `/en/`); [`/sitemap.xml`](/sitemap.xml) with Polish and English alternates.

### Text and data mining, model training {#tdm}

| Paths | Search and answering a user's question with citation | AI model training |
|---|---|---|
| report summaries, the `…/facts.json` of reports and flow analyses, the fact register `/en/facts`, the method page, the Companies overview and cards (HTML, `.md`) | permitted | permitted with attribution |
| full reports, flow analyses, datasets, feeds, API, MCP, files, `/en/companies.json` and the `.json` data of company cards | permitted | reserved (Art. 4(3) of Directive (EU) 2019/790) |

The rules per path are expressed by `/.well-known/tdmrep.json`, the `tdm-reservation` and `tdm-policy` headers, the `/tdm-policy.json` policy and `robots.txt`. In `robots.txt`, search engines and assistants fetching a page at a user's request may access the whole site except the editorial panel. Crawlers collecting training data (including GPTBot, ClaudeBot, Google-Extended and CCBot) have no access to full reports, flow analyses, datasets, feeds, the API, MCP and files – except the `…/facts.json` of reports and flow analyses. The reservation does not cover the coordinate layer under ODbL or data from ASI member cards. Full terms: [Terms of use](/en/terms).

### Machine access log {#dziennik}

Requests to the machine channels (API, MCP, `.md` and `.json` versions, `llms.txt`, `robots.txt`, `sitemap.xml`) are logged with the channel, resource path, response code, processing time, client name (User-Agent) and, for MCP, the tool name or resource address without arguments. The log stores neither IP addresses nor request content. Clients are grouped by name into classes: AI agents, search engines, SEO crawlers, tools and scripts, browsers, other. The portal's own tests (the agent test and the privacy check run on deployment) are not logged, and browser prefetching of pages (speculation rules) is not machine traffic and is excluded from the metrics. Entries are kept for up to 13 months ([privacy policy](/en/privacy)).

## Licences and limitations {#licencje}

| Material | Licence |
|---|---|
| texts of reports and flow analyses | CC BY-NC 4.0 unless the publication states otherwise; commercial use requires permission |
| datasets | the licence stated with the dataset (CC BY 4.0 by default); derived data keep the restrictions of their sources |
| World Bank reference prices | CC BY 4.0 |
| coordinates from OpenStreetMap | ODbL 1.0 (© OpenStreetMap contributors) |
| coordinates from the EEA register (IED, E-PRTR) | CC BY 4.0 |
| data from ASI certification cards | CC BY 4.0 |
| LEI (GLEIF) and Wikidata | CC0 |
| Natural Earth base map | public domain |

**Limitations of the method:**

- official statistics are revised retroactively, and part of trade and production is confidential; numbers reflect the data as of the download date;
- metal content coefficients are estimates with ranges – uncertainty is largest for finished goods and vehicles;
- the metal in products leaving use is a model estimate, not a measurement, and most facts of the zinc, tin and French aluminium analyses are class C (the class of the weakest input);
- the Monte Carlo ranges and the χ² test have the limits described [above](#chi2); flow analyses do not yet have errata on the page, and the fact register holds their flows, indicators and key figures – not every number of the text;
- the Companies register is not a complete census: a plant has one capacity or output value with its year, without time series;
- the analyses are for information and are not investment advice ([Terms of use](/en/terms)).
