From a safety data sheet to a disclosure answer, with a person on every disagreement.
When a customer asks a supplier which of its materials contain a listed substance, somebody pulls the safety data sheets, types the CAS numbers into a spreadsheet, and checks them against the lists by hand. The answer is only as good as the typing. This page runs the design that holds up instead. Two independent readers extract Section 3 of an SDS, every CAS and EC number is checked against its own check digit, every ingredient is screened against the current SVHC candidate list and Proposition 65, and the rows the readers disagree on go to a person with the page beside them. Pick a sample sheet, clean or scanned, or drop in one of your own.
What is real here, and what is not
Real
Both readers run on the sheet you pick, every time, with no cached answers. On a clean PDF the first reader is the document's own text layer; on a scan it is the open-source Tesseract engine compiled to WebAssembly, running on your machine. The second reader is a current vision model called once on our server with the prompt our bench uses. The check digits are the real CAS and EC algorithms. The lists are the official ECHA candidate list and the OEHHA Proposition 65 list, exported from the regulators' own sites, and the page shows the date they were pulled. The answer key for the sample sheets is exact, because the sheets were generated from known values.
Stand-in
The five sample sheets are synthetic: generated to match the anatomy of a real sixteen-section SDS, with real CAS numbers for the chemicals a stamping or plating shop stocks, then printed and scanned the way a sheet in a binder gets scanned. No manufacturer or product on them is real. GADSL, the automotive industry's declarable substance list, is screened in engagements but not here, because its publisher licenses the list for non-commercial use and a public page would be redistributing it.
Limits
One sheet is a demonstration, not a rate. The bench behind this page ran 22 sheets and 103 ingredient rows, and even that is a small synthetic corpus, not a claim about your filing cabinet. A screening match by CAS number is exact; a match by name, which is how the lists name families like lead and lead compounds, is a rule and is always sent to a person to confirm. The AI reader has a daily budget on this page. When it is spent, the page says so and the browser half still runs.
Pick a sheet and run the whole chain
Each sample is offered as the manufacturer's clean PDF and as an office scan of it. Start with the clean PDF: the text layer and the AI reader agree on nearly everything, and what is left is the screening, which is the actual work. Then run the scan. The OCR engine drops decimal points and digits, so 0.5 percent can read as 5 and 22.5 as 20.5, and when the ingredient is a listed substance that misread is the difference between a customer notice and none. Watch which rows go to a person, and whether the answer key agrees with the reader that was confident.
| Ingredient | Text reader | AI reader | Verdict | Screening | Answer key |
|---|
Worklist for a person
What you are looking at
Each reader returns, for every ingredient row, a name, a CAS number, an EC number if the sheet prints one, and a concentration range. The verdict column is the design. Where both readers return the same numbers, the row passes. Where they differ, where only one reader found the row, or where a number fails its own check digit, the row goes to a person with the page beside it. Two unlike readers rarely invent the same wrong digit, so a confident mistake by one is exposed by the other, and a mistyped CAS number exposes itself, because the last digit is a checksum of the rest.
The screening column is the answer the customer asked for. An ingredient is matched to the SVHC candidate list by CAS number, then by EC number, because ECHA lists some substances as a group with no single CAS and names the members by EC number instead. It is matched to Proposition 65 by CAS number, then by family name, because that list says lead and lead compounds with no number at all. A number match is exact and passes on its own. A name match is a rule, so it goes to a person to confirm. Any SVHC above 0.1 percent by weight triggers the REACH Article 33 duty to tell the customer, and the page says so on the row.
Two things to try. Run the epoxy hardener as a scan: three of its four ingredients are on a list, so a concentration the readers disagree on is a disclosure the customer would have got wrong, and the answer key beside the row shows which reader had it. Then run the cutting fluid as a clean PDF and notice that boric acid screens as SVHC by EC number, because the candidate list carries it as a group with no CAS. A spreadsheet lookup by CAS number alone misses it.
What this page will not tell you
- A rate. Five sheets at two conditions is ten runs. The bench behind them is 22 synthetic sheets, and the number worth quoting from it is that the scan lane's text reader lost decimal points, not any percentage.
- That the lists are complete. The SVHC export carries no CAS number for 38 of its 253 entries, and this page recovers the ones whose member EC numbers ECHA publishes. A group entry with neither is matched by exact name only, and a member of it under another name is missed. That is a real gap a quality manager lives with today, and the page does not pretend otherwise.
- Anything about GADSL, IMDS, conflict minerals or a full material disclosure. Those are the same design applied to lists this page cannot redistribute, and they are engagement work.
- How your own sheets will fare. The uploader exists so you can find out. A sheet from your own binder is worth more than any sample here.
- Anything about your upload after the page closes. The Section 3 page goes to the AI reader once, the reply comes back, and neither is stored. The only record kept is a count against the daily budget.
This is one sheet. The job is a cabinet of them, in a different format for every customer.
A disclosure request is never one sheet. It is every product on the floor, each with a sheet that may be years old, answered in whichever portal and column layout the customer prefers, and answered again when the list changes. The design on this page scales to that without changing: extract, verify against sources that are not the reader, put a person on every disagreement, keep the record. If your quality team answers these requests by hand, the assessment is where we find out what that costs and whether this design fits your cabinet.
Start an assessment ↗A fixed scope, a fixed price, and an honest answer if the answer is no.