Home › Use Cases › Incoming inspection data capture from a supplier certificate of analysis
Use caseUC0384
🧪 Use-case kit · runnable

Incoming inspection data capture from a supplier certificate of analysis

A small, forkable project that does one job end to end. Run once for real, and every figure on these pages captured from that run.

The business caseThe problem this solves

A supplier ships a lot with a certificate of analysis. A receiving inspector has to read it against the specification the material was bought to and answer two questions: is every reported value inside its limit, and was every required test actually done. The second question is the hard one, because an absent test looks like nothing. It has no row, no number and no flag — the certificate simply does not mention it, and a system that checks the values it can see will never notice. The first question is harder than it looks too: the certificate calls tensile strength UTS, reports copper in mg/kg against a limit written in per cent, states the flash point in a sentence rather than a row, and writes "Conforms" where a number belongs. the line-by-line read an inspector does from a supplier certificate against the receiving specification, on the lots there is time for

Audience

The receiving inspector who signs off incoming material, and the supplier-quality engineer who chases what is missing. The decision is whether one model call per certificate is worth buying over the table parser and range check you would write instead. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual incoming inspection packets

The corpus is 40 incoming inspection packets, 0.06 MB (json 3 · jsonl 1 · md 2 · txt 40). ⚠︎ EVERY BYTE OF IT IS INVENTED, AND THAT IS STATED BEFORE ANY NUMBER. VMS-2026 — the Veridan Material Standard — is a fictional specification framework written for this kit. It is not ASTM, not ISO, not EN, not JIS and not any national, industry or company standard; the numbering shape was chosen deliberately not to resemble one. Every supplier, material, lot number, limit and measured value is generated. The characteristics themselves are ordinary materials properties and the unit conversions between them are real physics — the LIMITS are not. It was generated rather than found because the measurement needs an answer key at the level of one required characteristic (320 of them), and because the corpus has to be SHAPED against the shortcut: 134 of the 266 reported characteristics appear under a SYNONYM the specification never uses, 36 of those in a DIFFERENT UNIT as well; 63 appear only in the laboratory's prose remarks, with no row to parse; 35 are named with no measured value at all (Conforms, Pass, see attached report); and 54 are simply absent, 15 of them with a similarly-named characteristic sitting nearby that is NOT the one the specification asked for.

The corpus

  • The 40 incoming inspection packetsgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromwritten for this kit rather than collected — the corpus is generated in the kit's own repository, so there is no third-party data in it.

Swap this folder for your own material and the kit is pointed at your incoming inspection packets. That is the whole change — there is no database to migrate.

One incoming inspection packet, as the model receives itCOA-0001.txt · 1 of 40
INCOMING INSPECTION PACKET — COA-0001
Receiving specification: VMS-4611 Rev A (VMS-2026, a fictional framework written for this kit)
Material: Hydraulic fluid, mineral base
Supplier: Orlin Speciality Metals, Feldkirch (fictional)
Supplier lot: OSM-91286

PART A — REQUIRED CHARACTERISTICS (from the receiving specification)
Every characteristic below must be tested and reported on the supplier's certificate.

  | Characteristic | Specification limit |
  |---|---|
  | Yield strength (0.2% offset) | 380 to 450 MPa |
  | Elongation at break | 12.0 % minimum |
  | Copper content | 0.400 % maximum |
  | Kinematic viscosity at 40 C | 28.0 to 34.0 mm2/s |
  | Density at 20 C | 1.180 to 1.220 g/cm3 |
  | Melt flow rate | 8.0 to 14.0 g/10min |
  | Ash content | 0.500 % maximum |
  | Coating thickness | 18.0 to 32.0 um |

PART B — SUPPLIER CERTIFICATE OF ANALYSIS, as issued

  | Characteristic | Result | Unit | Stated requirement |
  |---|---|---|---|
  | Elongation at fracture | 13.7 | % | 12.0 % minimum |
  | Viscosity, kinematic (40 C) | 31.7 | mm2/s | 28.0 to 34.0 mm2/s |
  | MFI (230 C/2.16 kg) | Complies — see attached test report |  | — |
  | Density at 20 C | 1.189 | g/cm3 | 1.180 to 1.220 g/cm3 |
  | Shelf life | 24 months from date of manufacture |  | — |
  | Proof stress (0.2%) | 467 | N/mm2 | 380 to 450 MPa |
  | Coating thickness | 26.9 | um | 18.0 to 32.0 um |
  | Cu | 3846 | mg/kg | 0.400 % maximum |

  The above results were obtained on the lot identified and relate only to that lot.

END OF PACKET — COA-0001

The outcomeWhat a good result looks like

One record per required characteristic — the value as printed, the unit as printed, the limit it was tested against, and the line it came from, quoted — plus an exception list: every value outside its limit and every required test the certificate never reports.

And when it cannot

Every one of its 6 errors but one is ARITHMETIC, not reading. Three times it compared a value reported in ppm or mg/kg against a limit written in per cent without converting, and flagged an in-specification result — the safe direction. Twice it accepted a yield strength reported in ksi against an MPa band, and BOTH of those are the dangerous direction: it reported IN_SPEC on results the key calls out of specification. Once it read a near-miss row ("pH drift after ageing") as a report of the pH the specification actually asked for. The free code got all six of those right.

Where it fitsWhat did work

Every line below is a measured result from this kit's own runs, with the figure that supports it. The headline above is not softened by any of them.

  • you need a list of required tests the supplier's certificate never reported — the free best floor — 0 calls, $0.00
    it finds 54 of 54 against the paid call's 53, one discordant item, p 1.000000. Free code is not beaten on the one question this kit was built around
  • the certificates use house synonyms, prose remarks and mixed units — the paid call
    314 of 320 on the four-way against the tuned floor's 296, discordant 24/6, p 0.001431 — and it needs no lexicon maintained by hand
  • you want the strongest answer available and you do not mind two passes — both — the model for the reading, code for the comparison
    the model extracted 231 of 231 values exactly; every one of its five verdict errors is arithmetic a two-line range check does perfectly. Take the reading from the call and the verdict from the code
  • a first pass over a receiving backlog where an inspector reviews every exception — the paid call, at $0.000703 a certificate
    it over-flags more often than it under-flags — three of six errors invent an exception, two hide one — and every finding is queued rather than acted on

And where nothing here is good enough:

  • you want a number you can quote about your own incoming inspection — neither, until you re-run the eval on your own labelled certificates
    VMS-2026 is invented and its synonyms and unit choices were drawn from a written pool. Real certificates carry house abbreviations nobody enumerated

At a glanceHow the whole thing runs

98%verdict correct pct
2,686 msp50, end to end
$0.70per 1,000 incoming inspection packets · the fast tier

Run once, for real, on 2026-09-11. Every figure on these pages was captured from that run — nothing is written from intent.

14 steps, grouped by the question that sends you to them rather than by build order. Each tile carries the one figure that step is about, and opens the page behind it.

Should you use this?What you bring, where it stops, and when not to use it

Before you commit an afternoon to this, these are the answers that decide it. Each one is rendered from the record it lives in — and links the page that holds it in full.

What do I have to bring?Replace data/characteristics.json with your own required-characteristic set — names, units, limit shapes, the aliases your suppliers actually use, and the unit conversions you accept — and drop your certificates into data/corpus/ in the two-part shape tools/build_corpus.py emits. THE MEASURED ACCURACY DOES NOT TRAVEL WITH YOUR CORPUS. Corpus lens →
When is this the wrong choice?Avoid: Quoting its four-way verdict without its lexicon caveat — it knows 42 of the 51 synonym spellings in THIS corpus and will know fewer of yours. That is the case against the best-fitting scenario (“you need a list of required tests the supplier's certificate never reported”). 5 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?a certificate that reports a characteristic as a class or a rating rather than a number — a visual standard, a metallographic grade, a pass/fail photomicrograph. The schema's nearest verdict is REPORTED_NO_VALUE, which is a policy choice rather than a fact. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?whether any of these rates survives on a REAL certificate of analysis. VMS-2026 is invented, every certificate here is text, and real ones arrive as scans, as PDFs with footnotes, and with per-lot deviation notes this corpus has none of. 6 items this kit says it could not check. Eval lens →
Can I run this on a model I control?The shipped adapter is the runtime provider is not named on this page; the Prompt lens states what swapping it costs. The published figures come from 1 model on the fast tier. Prompt lens →
And if it fits — what do I stand up?5 artifacts with a stated home and a stated egress, and 3 decisions each with what you provision past its ceiling — plus what was not measured. That is the next page, not this one. step 14 — Run it in your environment →

Not asked of this kit — 2 questions: clone (a fresh clone of this kit runs with nothing fetched); judge (nothing here is graded by a model).

Last verified 2026-09-11 — r001-coa-capture. Every figure on these pages was captured from that run.

Run itHow this reaches your data

Every result on this page was produced by pure code over checked-in files, with no API key — which is why you can read the numbers before anyone spends anything.

Run this on your own data

  • The pipeline, its eval harness and the runs behind every numberdeployed inside your environment, on your own model endpoints, against your own documents.
  • The corpus above is the shape, not the limitit is a folder swap, and there is no database to migrate.

Talk to us →

Checked before this shipped — A clean checkout with no key configured renders the whole board — the corpus, the answer key, the committed run, the adversarial probe and all four free floors — and scores every floor offline in pure Python. Shot as kits/UC0384-coa-capture/docs/shots/coa-capture-empty.png against a server started with API_KEY blanked in its own environment.

A living map of modern AI — kept current every morning