How the KiwiChem numbers are derived

KiwiScience · How the numbers are derived · Version 24/08/2026

This is a living document. It is written to be read alongside the application: every equation below corresponds to a named function in js/lookup.js, and every dataset to a file in data/ built by a script in scripts/.

KiwiChem is a database with a calculator attached, and two modelled tabs. Almost everything it shows is a published number reproduced faithfully; a small number of things it works out for you; and two tabs run a construction over the top — Cycle, a process model of where a chemical goes, and Orbitals, a molecular orbital calculation of why it bonds as it does. This note draws the line between them, sets out every equation on the calculated side, and says where each dataset is weakest.

1What this is, and what it is not

The application answers one question: what is known about this chemical in soil, and how does a concentration I have measured compare with it? It holds 273 contaminants, 943 soil guideline values across twelve jurisdictions, 389 drinking-water standards from nine sources, 661 food limits from eight, the New Zealand background distribution of 65 elements, and the plant interpretation ranges for 38.

Every chemical in KiwiPest is here. 119 of the contaminants come from KiwiChem's own source workbooks; the other 154 are the pesticide active ingredients KiwiPest assesses that those workbooks do not hold, imported by the build (scripts/kiwipest_import.py) with KiwiPest's values for soil half-life, Koc, water solubility and log Kow. Few of them have a published soil, water or food guideline value anywhere, so most of their tables are empty, which is a finding in itself. KiwiPest's microbial products are organisms, not chemicals, and are not included. For the 21 chemicals both datasets held from their own sources, every value on which they disagreed was settled against the Pesticide Properties Database as it stood on 2 October 2026, using one rule (the PPDB headline DT50 and Koc, its solubility and log P), and written into both; scripts/harmonise.py records each change and the figure behind it, and the app's data carry the same log as KC_DATA.harmonised.

It is not a risk assessment. There is no exposure model, no receptor, no site conceptualisation and no dose reconstruction. A hazard quotient here compares one number with another number; deciding whether that matters on a particular site is the work the application deliberately does not do.

Two tabs are deliberate exceptions. The first is Cycle. It answers a second question — where does this chemical go, and what moves it? — and it answers it with a model rather than with a lookup. It is kept visibly separate for that reason: its arrows carry their own two-scale convention, its assumptions are printed under every diagram, and section 8 sets out the whole of it. It is still not a risk assessment, and it is still not a description of anyone's paddock.

The second is Orbitals, and it stands further from the data than anything else here. It answers a third question — why does this element bond to that one the way it does? — with a two-centre extended Hückel construction whose parameters are not measurements of anything. They were fitted so that the construction reproduces the second-row homonuclear diatomics in bond order, unpaired electrons and level ordering at once, which is the only claim they support and which KiwiChem.orbitalSelfTest() checks. It is in the application because the polarisation of a bond is the shortest honest answer to why cadmium follows sulphur and calcium does not; it is not in the application to produce numbers. The user guide sets it out in section 6.

Guideline values are not interchangeable. A New Zealand SCS(health) value, an Australian HIL, a Dutch intervention value and a US EPA regional screening level are derived by different methods, for different exposure assumptions, at different risk levels, and mean different things in law. The application shows them side by side because the comparison is informative, not because they are equivalent. Read the Sources tab before drawing a conclusion from a spread.

2Where each number comes from

Every dataset in KiwiChem is in one of two categories, and every value carries which.

Reproduced from a source workbook

The soil guideline values, drinking-water standards, food limits, health-based guidance values, soil half-lives, Koc and Kd values are read straight out of the three compiled workbooks now in archive/ by scripts/extract.py. Nothing is transformed on the way through except unit conversion the workbook itself carries. Each row keeps its own confidence flag:

Extracted from cited source
Read directly from the instrument named in the Source column during compilation. Shown as cited.
Compiled — verify against primary source
From the standard literature, or from a guideline set that could not be machine-read in full. Believed correct, not checked cell by cell. Shown as verify.
Checked against primary source
Compared value by value with the instrument itself in September 2026 and found to agree. A stronger claim than cited, and made only for the scenario keys where the comparison was actually done. Shown as checked.
Corrected against primary source
The workbook and the instrument disagreed, and the instrument won. Shown as corrected; the tooltip carries the value the workbook had, and the Sources tab lists every one of them.

The September 2026 check

Every soil guideline value was read against the instrument that publishes it. Eighty-five rows changed. Most were transcription slips of one column — the UK Category 4 Screening Levels had cadmium's commercial value filled with the old Soil Guideline Value of 230 mg/kg instead of 410, and four substances had their public-open-space values taken from the wrong column; the Finnish decree's benzene and cyanide rows were one column to the left, so the threshold value was reported as the lower guideline value; the lead rows filed under the LQM/CIEH S4ULs were C4SL values, and the S4ULs do not cover lead at all. Others were out of date: nickel and zinc to the current CCME guidelines, the German Prüfwerte to the 2021 ordinance in force since 2023, and eight US Regional Screening Levels to the November 2024 tables. The corrections are applied by scripts/sgv_corrections.py, which lists each one with the document it was read from; the source workbooks in archive/ are left exactly as they were supplied.

The drinking-water standards had the same check, for New Zealand and Australia. All 42 New Zealand maximum acceptable values agree with the Water Services (Drinking Water Standards for New Zealand) Regulations 2022. Sixteen Australian health-based guideline values did not agree with the NHMRC fact sheets: thirteen were wrong when compiled — arsenic was the 1996 value of 0.007 mg/L rather than 0.01, barium 0.7 rather than 2, and eleven pesticides were off by up to a factor of five — and lead, manganese and selenium were lowered by the 2025 revision of the guidelines. The trichloroethylene row is removed, because the Australian guidelines set no value for it. These are applied by scripts/water_corrections.py, and the soil–water equilibrium screen is recomputed from the corrected values.

Notes belong to the row they are about

The workbooks carry one note per guideline set and repeat it on every row of that set, so a cadmium row from the Canadian guidelines said that the chromium value is listed against Cr(III) and that the BTEX values are for surface soil. Nothing there is false, but a table of cadmium values annotated with chromium and BTEX reads as though the rows were mixed up. scripts/note_relevance.py now splits each note into clauses and keeps, on each row, the clauses that name that chemical or name nothing; a clause that names only other substances is dropped. Every note survives in full on the Sources tab, once per instrument.

Compiled for this application

The three workbooks do not carry a periodic table, plant concentrations, physicochemical constants or toxicological reference values, and the application needs all four. Those were assembled from the standard compilations — Kabata-Pendias for the soil and plant figures, Markert for the Reference Plant, IAEA TRS-472 for transfer factors, the PPDB and US EPA Soil Screening Guidance for the physicochemical constants, IRIS and IARC for the toxicology. Every row built this way is flagged for verification without exception, because none of it was machine-read from the primary source. The full list is on the Data sources page.

3Background concentrations

Anthropogenic contamination is a departure from background, not an absolute number, so background has a tab of its own, and it is the first one after the overview. KiwiChem holds it three ways.

New Zealand, by region

From the GNS Geochemical atlas of Aotearoa New Zealand (2023): 676 topsoil samples at 2–20 cm depth, one per sampled meshblock, analysed for 65 elements by aqua regia digest and ICP-MS. scripts/extract.py reduces the sample table to a distribution per element — n, minimum, 5th, 25th, 50th, 75th, 90th, 95th and 98th percentiles, maximum, arithmetic mean and geometric mean — nationally and for each of the sixteen regions. Percentiles are linearly interpolated on the sorted values and rounded to three significant figures.

Regional sample counts are very uneven: Canterbury has 121 and Nelson has 3. Below about 30 samples a regional median is a curiosity rather than a statistic, and the application says so under the table. Values below the analytical detection limit were assigned half the detection limit by GNS before publication, which compresses the lower tail of every distribution.

New Zealand, by parent material

For arsenic, cadmium, copper, chromium, lead, nickel and zinc, the Eco-SGV dataset predicts background from the underlying geology rather than the region. This is the comparison the Eco-SGVs themselves are built on: the added-risk approach adds the contaminant limit to the background of the site under assessment, so the geology-specific median is what you should use to derive an Eco-SGV for a real site.

Global reference

The world soil mean (Kabata-Pendias) and the upper continental crust abundance (Rudnick & Gao) are shown alongside, with their ratio. A soil-to-crust ratio above 1 means the element concentrates during weathering and soil formation; below 1 means it is lost.

4Partitioning: Kd, and what follows from it

For an organic compound, sorption is to soil organic matter, so the distribution coefficient scales with organic carbon:

Kd = Koc × foc

The tabulated columns are this equation at foc = 0.5%, 1% and 5%. Change the organic carbon on the Inputs tab and the application recomputes Kd at your value and says so in the Basis column.

For a metal or metalloid it does not work that way. Sorption is controlled by pH, by iron and aluminium oxides, by organic matter and by cation exchange capacity, and it is not proportional to any one of them. KiwiChem therefore does not hold a Kd for a metal: it holds the measured distribution, by soil group and by condition, on the Kd & mobility tab. Entering an organic carbon fraction changes nothing for a metal, and the application says so rather than silently applying the wrong equation.

Until September 2026 this application reported one Kd per metal, and the label on it was wrong. The three columns headed Kd at 0.5%, 1% and 5% organic carbon held, for a metal, the antilogs of the minimum, mean and maximum log Kd in a literature compilation — nothing to do with organic carbon. For cadmium they read 1.3, 501 and 100,000 L/kg, and the 501 went on to set the soil concentration said to be in equilibrium with the drinking-water standard. The columns are now shown only for compounds where Kd = Koc × foc is what was computed, and every element goes to the tab described below.

Kd by soil and by condition

Five compilations, kept apart, because two of them measure one thing and three measure another:

SourceWhat it measuresCoverage
IAEA TRS-472 (2010), Tables 12–14Sorption. Geometric mean by soil group — sand, loam, clay, organic — and, for nine elements, by pH, by cation exchange capacity or by organic matter68 elements
US EPA Soil Screening Guidance (1996), Table C-4Sorption, modelled with MINTEQA2 on an iron-oxide sorbent at 0.2% organic matter, at every tenth of a pH unit from 4.9 to 8.012 metals
US EPA 402-R-99-004B (1999) look-up tablesSorption. Minimum and maximum by pH class, and for Cr(VI) by extractable iron and sulphate as wellCd, Cr(VI), Pb, Sr, Th, U
Allison & Allison (2005), Table 1Whole-soil. Median and range of field soil/water Kd: the metal that is already there, against the whole solid16 metals
SKB R-11-24 (2011), Table 3-3Whole-soil. Desorption of the element already present, measured the same way in five contrasting soils from pH 4.5 to 8.2 and 3 to 92% organic matter71 elements

The distinction matters more than any of the individual numbers. A sorption Kd is measured by adding the metal and letting it equilibrate: it describes a spill, a recent deposition, this season's fertiliser. A whole-soil Kd is measured on metal that has been in the soil long enough to age into forms that are not exchangeable, and for the same metal in the same soil it is commonly one to two orders of magnitude the larger. For cadmium the sorption values run from 15 L/kg below pH 6.5 to 4300 at pH 8; the whole-soil values from 330 in an acid clay to 13,000 in a peat. Neither set is wrong. Using one where the other belongs is wrong, and it is wrong by a factor of a hundred.

Nothing in these tables is derived by KiwiChem except unit conversion: SKB's m³/kg to L/kg, Allison's log Kd to Kd, and a log-linear interpolation between two tabulated pH values in the EPA screening table, which the tab says it has done. Two entries are annotated rather than corrected: the IAEA's loam-and-clay mean for caesium is printed as 3.7 × 10², which is below both the sand and the all-soils means and cannot be right for a pooled geometric mean, and is read here as 3.7 × 10³; and the copper minima printed as 7.6 × 10² exceed the means they sit beside, so they are left out.

For the elements none of the five covers — carbon, nitrogen, oxygen, fluorine and osmium — the tab says so. For the noble gases it says that nothing is sorbed, which is not a missing value but an answer.

Solid–solution split

With bulk density ρ and volumetric water content θ, the fraction on the solid phase and the retardation factor follow directly:

fsorbed = ρKd / (θ + ρKd)
R = 1 + ρKd / θ

R is the factor by which water outruns the contaminant front. A retardation factor of 2000 for cadmium at Kd = 500 means the front moves two thousand times slower than the drainage — which is why cadmium accumulates in topsoil for decades rather than leaching away.

Porewater

The concentration in soil solution implied by a total soil concentration:

Cw = Ctρ / (θ + ρKd)  (mg/kg → mg/L, reported in µg/L)

The application compares this with the most stringent drinking-water value it holds. That comparison is the crudest thing in KiwiChem: linear equilibrium partitioning ignores dilution and attenuation between the soil and the receptor, ignores ageing, and ignores the non-linearity of real sorption isotherms. It is deliberately conservative, it is a screen, and it is not a soil-to-groundwater guideline value.

5Persistence

Soil half-lives are first-order DT50 values in days. Time to any remaining fraction f:

t = DT50 × ln(f) / ln(0.5)

The Fate & toxicity tab gives the time to a half, a tenth and a hundredth. Two cautions. First, real dissipation in field soil is rarely first order: an initial rapid phase is followed by a long tail as the residue ages into pores organisms cannot reach, so extrapolating a laboratory DT50 to 99% dissipation overstates how fast the last of it goes. Second, the low–high range spans laboratory and field studies at different temperatures and redox conditions, and for the chlorinated solvents the difference between aerobic and anaerobic is the difference between weeks and years.

Elements do not degrade. Their row says so, and their persistence is governed by leaching, erosion, volatilisation and plant uptake instead.

6Plant concentrations

The plant table is the standard interpretation scheme for mature leaf tissue generalised across species, on a dry-matter basis: deficient, sufficient or normal, excessive or toxic, and the tolerable ceiling for agronomic crops. Alongside it sit Markert's Reference Plant figure, the total soil concentration considered phytotoxically excessive, the soil-to-plant transfer factor, and the hyperaccumulation threshold.

The transfer factor is applied to a measured soil concentration if you enter one:

Cplant = Csoil × TF

A linear transfer factor is a crude model and the range is the honest part of it. Uptake saturates; it varies by an order of magnitude between a leafy vegetable and a cereal grain on the same soil; it varies with pH, with the plant part sampled, and with cultivar. The application reports the range, not the central value alone, for that reason. Where a decision turns on plant concentration, analyse the plant.

Note also that the phytotoxic soil concentrations predate most modern ecotoxicology and were compiled across six authorities who disagreed with each other by a factor of five in places. Where New Zealand Eco-SGVs exist — arsenic, boron, cadmium, chromium, copper, lead, zinc, DDT, TPH and PAH — those are the better number, and they are in the soil guideline table.

7The screening calculation

Enter a measured soil concentration and the application does four things.

  1. Hazard quotient against every numeric guideline value, filtered by the jurisdiction and protection basis chosen on the Inputs tab. HQ = Cmeasured / Cguideline. Values reported as “no limit” or exceeding a tabulated ceiling carry a > qualifier and are excluded: they cannot be divided by.
  2. Position in the New Zealand background distribution for that element, nationally or in the region chosen. Above the 95th percentile is the usual threshold for treating a concentration as anthropogenic rather than natural.
  3. Implied porewater concentration, by section 4, against the most stringent drinking-water value.
  4. Indicative plant concentration, by section 6.

A hazard quotient of 1.0 is not a threshold of harm. Most of these values already embed a safety factor of between 10 and 1000 between the effect concentration and the number published, and the size of that factor differs between jurisdictions. An HQ of 3 against a Danish soil quality criterion and an HQ of 3 against a US EPA screening level do not mean the same thing.

8The biogeochemical cycle

The Cycle tab is the one part of KiwiChem that is not a lookup. Everywhere else a number is something somebody published and the application's job is to find it and say where it came from. Here the application runs a process model, and the distinction matters enough that it is drawn on the diagram itself.

Two kinds of number come off that tab, and they are never mixed. A quantified flux is in g/ha/yr, computed from a database value through a formula printed on the page, and is drawn as a solid arrow. An indicative flux is a relative index in which the reference soil is ×1, is drawn translucent and dashed, and is not a rate. Nothing on that tab is a measurement of anyone's paddock.

The reference soil

Every response function returns 1.0 at pH 6.0, Eh +450 mV, EC 0.2 dS/m, 13 °C and 400 mm/yr net drainage — a well-drained, non-saline New Zealand mineral topsoil. An index of ×1 means “as at the reference soil”, and the whole diagram is read as a departure from it.

What the five sliders do

Sorption is moved from the published Kd by adding shifts in log10, which is the form the sorption literature reports and the form in which the terms simply add:

log Kd = log Kd,published + apH(pH − 6) − aEC log(I/Iref) + fredox(Eh)

The pH slopes are of the order of half a log unit per pH unit for the cationic metals, after Sauvé et al. (2000), and carry the opposite sign for the oxyanions, which desorb from iron and aluminium oxides as pH rises. The redox terms are given as six control points read off the standard Eh–pH construction rather than as fitted equations, so that a reader can check six numbers instead of trusting a curve. Temperature does not enter Kd at all; it enters the microbial rates, the volatility of the organics and the growth of the crop, which is where it actually acts.

What the diagram shows

The boxes are the chemical species the element takes in the soil, and the arrows are the reactions that move it between them. For zinc that is Zn2+, Zn–DOM, exchangeable Zn, Zn–SOM, zinc held on the iron and manganese oxides, the carbonate and the sulphide. For nitrogen it is organic N, ammonium, nitrite, nitrate, the microbial biomass and clay-fixed ammonium, with mineralisation, nitrification, denitrification, immobilisation, DNRA, ammonia volatilisation and biological fixation between them.

Four networks are written out in full — nitrogen, carbon, sulphur and phosphorus — because in those the transformations are the chemistry and no template can carry them. Everything else is generated from one of three: a cation, an oxyanion, or an organic contaminant. A pool an element cannot form is dropped rather than drawn, so aluminium gets no sulphide box and caesium no carbonate.

Arrows are coloured by what drives the reaction — microbial, physicochemical, plant, gaseous loss, leaching — because that is what decides whether temperature or pH is the lever to pull. A reaction running at under a tenth of its reference rate keeps its arrow but loses its label, so the diagram names the pathways actually working at the conditions set; move a slider and the labels reappear as those reactions start.

The boxes are not scaled. The model does not solve the equilibrium system, so it makes no claim about how much of the element is in each pool. Only the arrows carry magnitude.

The quantified fluxes

  1. Soil solution, for a trace contaminant. Cw = Ctρ / (θ + ρKd), the same linear equilibrium partitioning as section 4, at the Kd the sliders imply. It is the right calculation here because the tabulated Kd is a total-to-solution partition coefficient; that is what Allison & Allison measured.
  2. Soil solution, for a major or nutrient element. It is not the right calculation there. Nearly all the nitrogen in a soil is organic and nearly all the potassium is locked in feldspar, so partitioning the total would have the whole soil stock draining away every year. For those the model starts from the concentration actually measured in soil solution — 10 mg/L nitrate-N, 20 mg/L dissolved organic carbon, 0.03 mg/L dissolved reactive P — and moves it with the conditions. Those are directly checkable numbers, which is the reason for using them: at 400 mm of drainage the nitrogen figure gives about 40 kg N/ha/yr and a drainage concentration near the drinking-water limit, which is what is measured under New Zealand dairy.
  3. Leaching. Cw × drainage × 10 = g/ha/yr, since 1 mm over 1 ha is 10 000 L. This is a matrix-flow estimate and therefore a lower bound: preferential flow down cracks, worm channels and old root holes moves solutes far faster than a Kd predicts, and for a strongly sorbed contaminant that is most of the loss.
  4. Plant uptake of an element. leaf = TF × soil × √availability × growth, then offtake = leaf × yield. The square root is a damping term: uptake follows solution activity but is buffered by resupply off the solid phase and by the root's own regulation. It is not arbitrary — for cadmium it reproduces the halving of uptake per unit rise in pH that the plant dataset records independently, which is the closest thing to a calibration check the model has.
  5. Plant uptake of a macronutrient. offtake = tissue concentration × yield × growth, with the tissue concentration taken as the midpoint of the sufficiency range in the plant dataset. A plant regulates its own tissue concentration and takes up what it needs, so uptake follows the crop rather than the soil, and availability enters only as a supply limitation. For nitrogen that returns 420 kg N/ha/yr at 12 t DM/ha, which is a good pasture.
  6. Plant uptake of an organic. TSCF × Cw × transpiration × 10, with the transpiration stream concentration factor from Briggs, Bromilow & Evans (1982). Uptake peaks near log Kow 1.8: a very polar compound is not retained by the root and a very hydrophobic one never leaves it.

All of them depend on a soil concentration. If one has been entered on the Inputs tab that is what is used; otherwise the New Zealand background median for the element, and the tab says which in a flag above the diagram.

Two elements have neither, because the trace-element survey never measured them, and both matter too much to leave blank. Carbon is taken straight from the organic-carbon fraction on the Inputs tab — 2% is 20 000 mg/kg, or 48 t C/ha over 20 cm. Nitrogen is derived from it at a C:N ratio of 12, the middle of the range for a New Zealand pasture topsoil, giving 0.17% total N at the default carbon. Both assumptions are stated on the page, and both follow the organic carbon: change it on the Inputs tab and the whole budget scales with it. A chemical with no concentration from any of these routes keeps its diagram, but every arrow on it becomes an index and no mass flux is reported.

The rate functions

  1. Microbial rates. Arrhenius, Ea = 65.4 kJ/mol referenced to 20 °C — the FOCUS (2006) kinetics convention — with no activity below 0 °C.
  2. Degradation. The FOCUS temperature and moisture corrections on the tabulated DT50 from section 5, then the redox regime. Most compounds here degrade aerobically and slow to roughly a sixth of that rate without oxygen; the chlorinated solvents and the organochlorines are dechlorinated reductively instead and speed up as the soil goes anaerobic.
  3. Salinity. Maas & Hoffman (1977): full yield to 2 dS/m, then 7% lost per dS/m, which is a moderately sensitive crop.
  4. Volatilisation. Henry's constant, van't Hoff-corrected for temperature, on the fraction in solution and suppressed by water-filled pores. Ammonia is the exception and is done properly, from the NH4+/NH3 equilibrium at pKa 9.25. All of these are indices: a volatilisation rate needs a wind speed and a boundary layer, and neither is on that page.

Coverage

Thirty-eight elements carry a curated parameterisation — the pH slope, the redox response, the species boundaries and the common New Zealand sources. Every other element in the periodic table falls back to the average behaviour of its class, inferred from the ionic form, and the tab shows a caution flag saying so rather than letting a generic figure pass as a curated one. The organic contaminants are handled from their own Koc, DT50, Henry constant and log Kow, so they need no curation beyond which degradation regime they are in and whether they ionise.

What the model does not do

It has no time in it. Every flux is a steady-state rate at the conditions set, not a trajectory, and nothing accumulates — the tab will not tell you what a soil will look like in twenty years. It treats the topsoil as one well-mixed box, so preferential flow and the whole question of depth are outside it. Sorption is linear and reversible, which is a poor description of an aged contaminant, and the ageing arrow is drawn precisely to admit it. Competition between ions is not represented: phosphate displacing arsenate off an iron oxide is real, important, and not here. And the five sliders are not independent in the field — drainage sets redox, liming moves pH and conductivity together, and temperature and water flux covary through the season. Moving one at a time is a way of seeing what it does, not a description of a soil that could exist.

9Where the database is weakest

  1. The compiled datasets. Plant concentrations, physicochemical constants and toxicological reference values were assembled from standard references rather than machine-read. They are flagged, and the flag is not decoration — check any of them against the primary source before it goes in a report.
  2. Guideline values go out of date. The US EPA RSLs are revised twice a year. PFAS values have moved by an order of magnitude in five years and will move again. Confirm against the current instrument.
  3. Soil-property dependence is not modelled. The UK S4ULs depend on organic matter, the New Zealand cadmium standards on pH, the Dutch intervention values on a standard-soil correction, and the Australian EILs for Cr, Cu, Ni and Zn are calculated from pH, CEC and clay content. KiwiChem shows the tabulated value and says so in the Notes column; it does not do the correction.
  4. PFAS coverage is thin. Only Australia, Canada and the United States have widely used numeric soil values, and US state values span two orders of magnitude for the same compound.
  5. Regional background is thin outside the four large regions. See section 3.
  6. Asbestos is absent. It is assessed as % w/w or fibre counts rather than mg/kg, has no meaningful half-life or Kd, and does not fit the data model.
  7. A Kd is not a constant. The Kd tab gives the measured spread rather than one value, but every row of it is still a generic soil somewhere else: the IAEA means are global, the EPA screening values are modelled on an iron oxide, and the five soils measured the same way are Swedish. New Zealand's allophanic and organic soils sorb most cations more strongly than any of them, and none of these sources measured one. Take the tab as the range to expect and the direction each condition pushes it, and measure the soil you care about if the answer matters.
  8. The Cycle tab is modelled, not measured. It is one of the two parts of the application where the numbers are not somebody's published values. Section 8 says what it does and what it cannot do; the short version is that it is for seeing which way a flux moves and roughly how far, and nothing off it belongs in a report without being derived properly for the site.
  9. The Orbitals tab is a construction, and further out still. Nothing on it is a measurement: the orbital energies are tabulated parameters of a semi-empirical method and the interaction terms were fitted to reproduce five textbook diatomics. Read the ordering of the levels and the polarisation of each orbital; treat the electronvolts as indicative; and do not read a bond energy, a bond length or a transition energy off it, because none of the three is computed. The user guide sets it out in section 6.
  10. No harmonised European values exist. The 2024/2025 Soil Monitoring Law sets monitoring obligations, not concentration limits, so the German, Dutch, Finnish, Swedish, Danish and Norwegian national values are used instead.

10Checking it yourself

Open the database, open the browser console, and type KiwiChem.selfTest(). It counts every dataset and verifies that every value in every table resolves to a contaminant in the registry and that every element–contaminant link points at something real. It should report an empty problems array.

To rebuild the data files from the sources in archive/:

python3 scripts/extract.py
python3 scripts/build_elements.py
python3 scripts/build_properties.py
python3 scripts/build_kd.py

The first reads the three workbooks and the geochemical atlas CSV, applies the corrections in scripts/sgv_corrections.py and trims each note to the row it is about. The second builds the periodic table, the plant table and the geology-based background. The third builds the physicochemical and toxicological tables. The fourth builds the Kd tables, and reads data/elements.js, so it runs after the second. None of the generated files in data/ should be hand-edited — edit the source or the script and rebuild.

↑ Back to top