AssayIndex
Detection rule · severity low

AX-R04 — Digit preference in declared purity

A supplier repeatedly reports purity as a round number — 99.0, 98.5, 99.5 — where a real integration would not.

LOW467 records flagged7.09 % of the index
Section 1

The predicate

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

coa.purity != null && (coa.purity * 10) % 5 === 0 && supplierRoundCount >= 3
Section 2

Why this rule exists

A chromatographic purity figure is the ratio of two integrated areas. It has no reason to land on a half or a whole percent, and across a large set of genuine measurements the terminal digit should be roughly uniform. It is not, on some certificates.

The rule requires a pattern rather than a single instance: a supplier must have at least three round-numbered declarations before any of them is flagged, because 99.0 % is a perfectly possible result once. Three times is a distribution.

Two explanations account for every instance the index has traced. The figure was rounded for presentation from a real integration — defensible, and recorded at full precision on the batch record even where the summary sheet carries the rounded form. Or the release specification was carried into the result field: "≥ 99.0 %" becoming "99.0 %" between the laboratory report and the summary sheet, which is the common case. In both, the underlying integration exists and is produced on request. Ask for the chromatogram rather than the summary and the rule resolves itself.

The rule cannot distinguish between the two from the certificate alone. What it can do is put the pattern next to the independent measurements of the same lots, and that comparison is the reassuring part: rounded declarations sit within half a point of the independent median about as often as unrounded ones do. This is a finding about how a number was written down, not about the material it describes, which is why the severity is low.

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 467 n=467
Share of index 7.09% n=6584
Distinct suppliers 15 n=15
Distinct batches 74 n=467
SupplierFlaggedRecords in indexRate
WWB5039812.6%
SWB4620422.5%
SSA4521920.5%
QSC4535012.9%
TFC404179.6%
BCH3920918.7%
ERP3420516.6%
WXT3230110.6%
CPC2722711.9%
SinoPep2416214.8%
HJ202478.1%
MKM192298.3%
HYB192417.9%
AMB152037.4%
Homopeptide124572.6%

Flagged records per quarter

2024-Q1: 8 · 2024-Q2: 10 · 2024-Q3: 22 · 2024-Q4: 37 · 2025-Q1: 78 · 2025-Q2: 50 · 2025-Q3: 63 · 2025-Q4: 47 · 2026-Q1: 36 · 2026-Q2: 72 · 2026-Q3: 44

Section 4

Recently flagged

The 30 most recent of 467 records flagged by AX-R04. Every flagged record →
ReportCompoundSupplierLotLabQuarterPurity %Water %Recovery %ProvenanceFlagsResult
AX-2026-043376SemaglutideWXTWXT-2604-C3248Janoshik2026-Q397.084.22Buyer-sourced1MARGINAL
AX-2026-041275LiraglutideWWBWWB-2607-X2189Nordanalyt2026-Q399.334.39Buyer-sourced1MARGINAL
AX-2026-042002SemaglutideAMBAMB-2607-N6274VendorInvestigate2026-Q398.236.3797.1Buyer-sourced1MARGINAL
AX-2026-043374SemaglutideWXTWXT-2604-C3248Janoshik2026-Q397.003.56Buyer-sourced1MARGINAL
AX-2026-043377SemaglutideWXTWXT-2604-C3248PeptideMeter2026-Q397.204.08Buyer-sourced1MARGINAL
AX-2026-041271LiraglutideWWBWWB-2607-X2189Medutest2026-Q399.524.5797.4Buyer-sourced1MARGINAL
AX-2026-043445BPC-157BCHBCH-2603-G4350Nordanalyt2026-Q398.424.8793.6Buyer-sourced1MARGINAL
AX-2026-043440BPC-157BCHBCH-2603-G4350VendorInvestigate2026-Q398.614.11Buyer-sourced1MARGINAL
AX-2026-042005SemaglutideAMBAMB-2607-N6274PeptideMeter2026-Q398.096.4898.6Buyer-sourced1MARGINAL
AX-2026-042704TesamorelinERPERP-2604-W9463Janoshik2026-Q399.024.08Buyer-sourced1MARGINAL
AX-2026-043442BPC-157BCHBCH-2603-G4350Janoshik2026-Q398.654.78Buyer-sourced1MARGINAL
AX-2026-041273LiraglutideWWBWWB-2607-X2189Janoshik2026-Q399.315.52104.8Buyer-sourced1MARGINAL
AX-2026-041272LiraglutideWWBWWB-2607-X2189Janoshik2026-Q399.285.4397.4Buyer-sourced1MARGINAL
AX-2026-043471CJC-1295 with DACBCHBCH-2607-H5235Janoshik2026-Q397.465.48Buyer-sourced1FAIL
AX-2026-042004SemaglutideAMBAMB-2607-N6274Medutest2026-Q397.746.45Buyer-sourced1MARGINAL
AX-2026-043477CJC-1295 with DACBCHBCH-2607-H5235VendorInvestigate2026-Q397.625.3299.6Buyer-sourced1MARGINAL
AX-2026-043449BPC-157BCHBCH-2603-G4350Kestrel2026-Q399.744.9291.3Supplier-supplied2MARGINAL
AX-2026-043448BPC-157BCHBCH-2603-G4350Janoshik2026-Q398.554.69106.9Buyer-sourced1MARGINAL
AX-2026-043470CJC-1295 with DACBCHBCH-2607-H5235Janoshik2026-Q397.766.1199.3Supplier-supplied1MARGINAL
AX-2026-043478CJC-1295 with DACBCHBCH-2607-H5235PeptideMeter2026-Q397.635.4290.1Buyer-sourced1MARGINAL
AX-2026-043475CJC-1295 with DACBCHBCH-2607-H5235Janoshik2026-Q397.916.09Buyer-sourced1MARGINAL
AX-2026-041274LiraglutideWWBWWB-2607-X2189Janoshik2026-Q399.264.57Buyer-sourced1MARGINAL
AX-2026-043370SemaglutideWXTWXT-2604-C3248Janoshik2026-Q397.233.5889.0Buyer-sourced2MARGINAL
AX-2026-043379SemaglutideWXTWXT-2604-C3248VendorInvestigate2026-Q396.583.78Buyer-sourced1FAIL
AX-2026-043446BPC-157BCHBCH-2603-G4350VendorInvestigate2026-Q398.714.80Buyer-sourced1MARGINAL
AX-2026-043443BPC-157BCHBCH-2603-G4350Janoshik2026-Q399.364.85Supplier-supplied2MARGINAL
AX-2026-043378SemaglutideWXTWXT-2604-C3248Janoshik2026-Q397.093.73102.7Supplier-supplied1MARGINAL
AX-2026-042006SemaglutideAMBAMB-2607-N6274PeptideMeter2026-Q398.056.1297.4Buyer-sourced1MARGINAL
AX-2026-042003SemaglutideAMBAMB-2607-N6274PeptideMeter2026-Q398.495.54Buyer-sourced1MARGINAL
AX-2026-043372SemaglutideWXTWXT-2604-C3248PeptideMeter2026-Q396.694.2296.4Laboratory-retained1FAIL