Screening a spec

How do you screen a VOC ceiling across a whole product line?

Not by starting with the number. You start by asking what the limit applies to — the additive as supplied, the coating as formulated, or the whole applied system including topcoats — because that decides which figure on which data sheet is even the right one to compare. Once scope and unit are settled, a ceiling is a numeric filter over a typed column, not a similarity match: every product either clears it, fails it, or has no VOC figure published at all. The third case is the one that costs distributors business, because on most reports it looks identical to "nothing matches."

1. The scope question comes first, and a real buyer will state it for you

This is from a professional wood-finishing forum, posted by a shop working toward a LEED submission. It is one sentence, and it contains the entire problem:

"Any thoughts on achieving these colors in a 100 g/l VOC or less system? These parameters would also include the topcoats."
— WOODWEB Professional Finishing Forum, thread 822300

He then notes that even the waterborne topcoats he was considering come in north of 100. He is not asking for a low-VOC stain. He is asking for a stain that leaves enough headroom in a system budget after the topcoat has spent most of it. A supplier who answers with "our stain is 45 g/L" has answered a question nobody asked.

Three different limits hide behind the same three letters:

  • The raw material as supplied. The number on the additive's own data sheet. It is the only one a distributor can screen directly, and it is rarely the one the customer is regulated against.
  • The formulated coating as applied. A weighted result of everything in the can, at application viscosity, sometimes less water and exempt compounds. It depends on a formula the distributor does not hold.
  • The applied system. Primer plus basecoat plus topcoat, as the buyer above wrote it. It is a budget shared across products from several suppliers.

Ask which one before you screen anything. If the customer has not said, that is a question back to them, not an assumption to make on their behalf.

2. Then the unit, because "100" is not a limit

VOC content arrives in g/L and in lb/gal, and the two differ by a factor of about 120 — 1 lb/gal is roughly 119.8 g/L, so a 100 g/L ceiling is about 0.83 lb/gal. GRADE's VOC column is defined in g/L, so a ceiling quoted in lb/gal has to be converted before it means anything against it.

Two more distinctions worth settling in the same email, because both change the number without changing the word:

  • Regulatory VOC versus total volatiles. Air-quality rules exempt certain compounds from the VOC definition, which is why "VOC-exempt solvent" is a product category distributors actually carry. A material can be low on the regulatory figure and not low on total volatile content. Which definition is the customer's limit written against?
  • VOC less water, or as supplied. For a waterborne product these are two different numbers printed on the same sheet.

3. What a deterministic screen does with the number, once you have it

In GRADE, VOC is not a phrase to be matched against product descriptions. It is a typed numeric column — voc_gl, a nullable float on every product row — and a ceiling becomes a comparison evaluated per product, in code, before any language model is involved. A product that fails comes back with the arithmetic stated:

VOC 500 g/L exceeds 100 g/L limit

That is the engine's actual output string, not a mock-up. It is deterministic: the same catalogue and the same ceiling produce the same verdict and the same sentence every time, because a comparison between two numbers has no run-to-run variance to have. This is the reason we do the screening in SQL rather than by similarity — a ceiling is a boundary, and a nearest-neighbour lookup has no concept of one.

4. When the inquiry has no number: "low VOC"

The second most common way a VOC requirement arrives is with no figure attached at all. From the same forum: "I'm thinking of polyx or oil wax by safecoat to avoid spraying and keep it low voc" (thread 775539). There is no ceiling in that sentence. There is a preference.

The wrong response is to pick one. If a tool quietly decides "low VOC" means 50 g/L, it will return a confident shortlist built on a limit the customer never set, and nobody downstream will know that the number was invented. GRADE refuses instead: a VOC constraint carrying no value makes the screen return unevaluable_constraint with zero survivors and zero eliminations — it declines to run rather than run on a guess. The requirement goes back to the rep as a question for the customer.

5. When the catalogue has no number — the case that looks like a rejection

Here is the finding that matters most for anyone screening a VOC ceiling at line-card scale, and it is a finding about data, not about software. Across the eight producer catalogues loaded in our own reference environment — 367 products — exactly one product publishes a VOC figure. Not one in ten. One.

That is not unusual. VOC is commonly published on the formulated-coating side and commonly absent from an additive or resin data sheet, because for a raw material it depends on the formulation it goes into. Which means the most likely outcome of screening a VOC ceiling across a real additives line card is not a shortlist and not a rejection — it is silence. And silence is exactly what a bad tool renders as "no matches found."

Run a 100 g/L ceiling against the largest catalogue in that set, 163 products, and the engine returns zero survivors — and says why, in the report, unprompted:

max VOC: NOT SCREENED — this catalogue holds no data for it. None of the 163 products screened could be evaluated against this requirement, either way. That is a gap in our data, not a finding that nothing matches.

Verbatim engine output again. Every one of the 163 products lands in the unknown lane rather than the eliminated lane, and the count is on the report. The distinction is the whole point: nothing qualifies is an answer you can give a customer, and nothing could be evaluated is a request for a data sheet. Collapsing the two into a single "no" is how a distributor tells a customer they have nothing, when what they actually have is a missing column.

One honest limit on that banner. The whole-catalogue warning above fires only when not a single product could be evaluated. On a catalogue where one product carries a VOC figure and fifteen do not, the same ceiling returns one survivor and fifteen unknowns — and no banner. The per-product lane is always assigned and the unknown count is always on the report; the headline warning is not. We would rather write that down than let you discover it.

6. So what should a rep actually send back?

On a VOC-ceiling inquiry, a reply that holds up has four parts, in this order:

  • The scope question, asked first — additive, coating, or applied system — because every number after it is conditional on the answer.
  • The unit and basis you are quoting, stated: g/L or lb/gal, regulatory or total, as supplied or less water.
  • What actually cleared the limit, with the figure and the sheet it came from, so the customer can check it without asking you.
  • What could not be assessed, named as such. A sentence of the form "four of our eleven candidates publish a VOC figure and three of those clear 100 g/L; the other seven do not state VOC on their sheets, and I have asked those producers" is a better answer than a short list that quietly dropped the seven. Those figures are an illustration of the shape, not our data.

Every claim on this page, and how to check it

  • The two buyer quotes are verbatim from public WOODWEB Professional Finishing Forum threads 822300 and 775539, captured 2026-08-17 as part of a 151-inquiry harvest of public technical forums.
  • 1 lb/gal ≈ 119.8 g/L is a unit conversion, and the same constant our ingest uses for density.
  • The three engine outputs quoted above — the elimination sentence, the unevaluable_constraint refusal, and the NOT SCREENED statement — were produced on 2026-08-17 by running the deployed screening function directly, and were byte-identical on the commit currently serving production and on the head of our main branch. They are outputs, not illustrations.
  • 1 of 367 products carries a VOC figure is counted from the eight producer catalogues loaded in our reference environment on 2026-08-17. The live system reports the same 367 total. It is a statement about those eight catalogues, not about the industry.
  • What we have not measured: how often a VOC requirement in the wild carries a scope qualifier. One inquiry in the 151 we harvested does. That is an example, not a rate, and we are not going to turn it into one.

The mechanism, in four steps

Parse, screen, rank, draft.

Every hard requirement becomes a typed filter before a model sees anything, and every value in the draft quotes the data sheet it came from.