AssayIndex
Detection rule · severity medium

AX-R02 — Declared impurity arithmetic does not close

The supplier's own certificate reports a purity and a total-impurity figure that do not sum to 100 %.

MEDIUM204 records flagged3.10 % of the index
Section 1

The predicate

Published literally. A rule you cannot read is an accusation you cannot check.

coa.purity != null && coa.totalImpurities != null && abs(coa.purity + coa.totalImpurities - 100) > 0.15
Section 2

Why this rule exists

Purity by area percent and total impurities by area percent are two views of the same normalised chromatogram. They sum to 100 by definition. If a certificate states 99.2 % purity and 1.4 % total impurities, one of those numbers was not measured on the chromatogram the other came from.

The index allows 0.15 pp of slack for independent rounding of the two figures. Beyond that, the arithmetic does not close and the certificate is internally inconsistent.

There are innocent explanations and the rule page lists them. The purity figure may be an assay result against a reference standard (a %w/w quantity) while the impurity figure is chromatographic — in which case they legitimately do not sum, and the certificate should say so. Impurities below a reporting threshold may have been excluded from the total but included in the purity denominator. Or the two figures may come from two different lots.

None of those explanations is available on the certificates the index holds, because none of them state which quantity they are reporting. The finding is therefore a documentation finding: the certificate is not interpretable as written.

Section 3

Incidence

How often the rule fires, where, and when. A rule that never fires is not calibrated; a rule that fires on half the index is measuring the population rather than screening it.

Records flagged 204 n=204
Share of index 3.10% n=6584
Distinct suppliers 17 n=17
Distinct batches 32 n=204
SupplierFlaggedRecords in indexRate
SGN3122114.0%
CPC192278.4%
QSC183505.1%
JEEP182307.8%
WWB173984.3%
FGP152007.5%
GGPeps143713.8%
TFC124172.9%
BCH102094.8%
WXT103013.3%
TFS101885.3%
SSA92194.1%
Homopeptide84571.8%
KP62232.7%
ERP32051.5%
PPG32131.4%
SWB12040.5%

Flagged records per quarter

2024-Q1: 0 · 2024-Q2: 10 · 2024-Q3: 29 · 2024-Q4: 19 · 2025-Q1: 19 · 2025-Q2: 20 · 2025-Q3: 19 · 2025-Q4: 35 · 2026-Q1: 13 · 2026-Q2: 40 · 2026-Q3: 0

Section 4

Recently flagged

The 30 most recent of 204 records flagged by AX-R02. Every flagged record →
ReportCompoundSupplierLotLabQuarterPurity %Water %Recovery %ProvenanceFlagsResult
AX-2026-042831SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q297.683.56Buyer-sourced2MARGINAL
AX-2026-041484CJC-1295 (no DAC)QSCQSC-2601-B6118Nordanalyt2026-Q299.034.98105.4Buyer-sourced1MARGINAL
AX-2026-042840SurvodutideGGPepsGGPE-2512-Y2660PeptideMeter2026-Q297.673.80101.8Buyer-sourced2MARGINAL
AX-2026-041485CJC-1295 (no DAC)QSCQSC-2601-B6118PeptideMeter2026-Q299.155.02102.7Buyer-sourced1MARGINAL
AX-2026-041284SemaglutideWWBWWB-2603-N3120Medutest2026-Q298.816.47Buyer-sourced1MARGINAL
AX-2026-041289SemaglutideWWBWWB-2603-N3120PeptideMeter2026-Q299.155.7690.8Buyer-sourced1MARGINAL
AX-2026-041290SemaglutideWWBWWB-2603-N3120Nordanalyt2026-Q298.886.6690.7Buyer-sourced1MARGINAL
AX-2026-042837SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q297.633.04Buyer-sourced2MARGINAL
AX-2026-041489CJC-1295 (no DAC)QSCQSC-2601-B6118Janoshik2026-Q298.925.2096.3Buyer-sourced1MARGINAL
AX-2026-041487CJC-1295 (no DAC)QSCQSC-2601-B6118VendorInvestigate2026-Q298.945.3192.1Buyer-sourced1MARGINAL
AX-2026-041288SemaglutideWWBWWB-2603-N3120Janoshik2026-Q299.045.93Buyer-sourced1MARGINAL
AX-2026-042844SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q298.414.02Supplier-supplied2MARGINAL
AX-2026-041295SemaglutideWWBWWB-2603-N3120PeptideMeter2026-Q299.076.35Buyer-sourced1MARGINAL
AX-2026-041285SemaglutideWWBWWB-2603-N3120Janoshik2026-Q298.466.9499.0Buyer-sourced1MARGINAL
AX-2026-042329Enclomiphene citrateTFCTFC-2605-H2745Nordanalyt2026-Q299.413.67Buyer-sourced2FAIL
AX-2026-042835SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q297.774.16Buyer-sourced2MARGINAL
AX-2026-041296SemaglutideWWBWWB-2603-N3120Kestrel2026-Q299.376.8991.7Buyer-sourced1MARGINAL
AX-2026-042722TirzepatideERPERP-2512-T9616Medutest2026-Q299.182.07Buyer-sourced1MARGINAL
AX-2026-041291SemaglutideWWBWWB-2603-N3120Nordanalyt2026-Q299.076.71Buyer-sourced1MARGINAL
AX-2026-041486CJC-1295 (no DAC)QSCQSC-2601-B6118PeptideMeter2026-Q299.104.96Buyer-sourced1MARGINAL
AX-2026-042834SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q297.653.8788.9Buyer-sourced3MARGINAL
AX-2026-041287SemaglutideWWBWWB-2603-N3120Nordanalyt2026-Q298.816.69Buyer-sourced1MARGINAL
AX-2026-041297SemaglutideWWBWWB-2603-N3120PeptideMeter2026-Q298.637.0293.1Buyer-sourced1MARGINAL
AX-2026-041292SemaglutideWWBWWB-2603-N3120PeptideMeter2026-Q298.916.6999.1Buyer-sourced1MARGINAL
AX-2026-042843SurvodutideGGPepsGGPE-2512-Y2660Nordanalyt2026-Q297.373.00Buyer-sourced2MARGINAL
AX-2026-042842SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q297.634.13Buyer-sourced2MARGINAL
AX-2026-041283SemaglutideWWBWWB-2603-N3120Janoshik2026-Q299.487.04Buyer-sourced1MARGINAL
AX-2026-042832SurvodutideGGPepsGGPE-2512-Y2660Kestrel2026-Q298.683.5992.0Laboratory-retained3FAIL
AX-2026-042833SurvodutideGGPepsGGPE-2512-Y2660PeptideMeter2026-Q297.443.4693.3Buyer-sourced2MARGINAL
AX-2026-042839SurvodutideGGPepsGGPE-2512-Y2660Janoshik2026-Q297.373.9295.0Buyer-sourced2MARGINAL