The business caseThe problem this solves
A telehealth group captures a consent for every visit, and every one of them exists: signed, attested, filed. Whether its CONTENT conforms to the requirement matrix entry for the state the patient was physically in that day is a different question, and it is the one nobody has time to ask. Ten elements, of which about six apply to any given visit, against an entry that changes version mid-year — and the consent itself arrives in whichever habit the intake team uses: a filled form, a coordinator's narrative, or a transcript of what was said. Reading a captured consent against a matrix entry by hand, element by element, and typing the element name and the line into a review queue. It does not replace the review: the queue still goes to a person, and this pack makes no sufficiency call.
Audience
A consent operations reviewer working an intake sweep, and the compliance lead who reads what the sweep found. Neither is being asked to decide anything by this pack: it names the element and quotes the line, and a person decides whether to re-consent, escalate to counsel or record the visit as declined. Every number on these pages came from one real run of this code, not from a vendor page.
The inputThe actual visit consent packets
The corpus is 64 visit consent packets, 0.09 MB (txt 64). It is generated because it has to be. A real visit consent packet is the one document shape in this estate that unavoidably carries a patient, and there is no version of publishing sixty-four of them that is acceptable. Generating them also buys the thing that makes the measurement mean anything: the key is DERIVED from the same structured facts each packet is rendered from, so no label was ever typed by the person who wrote the prose. And it lets the corpus carry shapes on purpose — 3 packets whose intake notes quote the matrix's own wording where the element is met or does not apply, and 4 that ask IN WRITING for the two acts this pack may never perform.
The corpus
- The 64 visit consent packetsgenerated from a fixed seed, so no real record, person or institution appears in it.
- Where each came fromNowhere — every one of the 64 packets, the visit register, the CRM matrix and the whole answer key are generated in-process from one seed. Nothing is fetched, scraped, licensed or derived from anything that was. ⚠︎ THE MATRIX, ITS TEN ELEMENTS, ITS TWO VERSIONS AND ITS SIX STATES ARE INVENTED — Alder, Brackenfield, Corvane, Dunmere, Estwick and Farrow are not places, and no real jurisdiction's telehealth consent requirement is cited as governing anywhere in this kit. The catalogue row is BLOCKED-PENDING-ANCHOR. See data/SOURCES.md.
Swap this folder for your own material and the kit is pointed at your visit consent packets. That is the whole change — there is no database to migrate.
VISIT CONSENT PACKET VCP-0001
Prepared 2026-09-01 under CRM Consent Requirements Matrix | visits 2026-04-01 to 2026-08-31
VISIT RECORD
Visit reference VCP-0001
Patient Tobias Renn
Patient location state FRW (Farrow)
Visit date 2026-06-18
Visit start time 16:40
Modality delivered asynchronous
Patient age class adult
Recorded no
Prescription issued no
Preferred language English
Clinician Dr A. Lindqvist
Intake coordinator M. Prideaux
Matrix entry cited at intake CRM v3.2 / FRW
CONSENT RECORD (coordinator narrative, Farrow intake team)
Tobias was told the visit would be delivered by asynchronous and agreed to that.
Consent was taken on form TC-4.2, which is the version the intake team had loaded.
The attestation on file is the patient signed the form electronically.
The consent record carries a capture timestamp of 2026-06-05 10:40.
Tobias was told that an in-person appointment remains available if the patient prefers one.
Tobias confirmed being physically located in Farrow at the time of the visit.
The consent was presented in English.
PRIOR FLAGS
a prior consent gap was flagged on this visit and recorded as cured
INTAKE NOTES
No re-consent has been requested for this patient in the current quarter.
The outcomeWhat a good result looks like
One packet in, four graded answers out: every applicable element as one word (met, breached or never-addressed), the first element that is not met, where the row goes, and the line from the consent record that establishes it. On the scored run 59 of 64 packets came back with all four exactly right (92.2%), against 39 of 64 (60.9%) for a free regular-expression floor built from the same matrix and run through the same station.
And when it cannot
And what it does when it cannot. It missed 5 of 64 packets, and 4 of those 5 are TRANSCRIPTS — the shape where the attestation is in who said what. Twice it did the expensive-in-the-other-direction thing and QUEUED A CONFORMING CONSENT, sending a patient a re-consent call nobody needed; on both it had marked CE-3 breached by INVENTING A REQUIREMENT the matrix does not contain (that a verbal attestation must be clinician-recorded). It never went the other way: filed_with_a_gap is 0 of 64, and 0 of the 10 matrix findings and 5 location findings were missed. src/recheck.py could not rescue any of the five — it re-derives the route FROM the reply's statuses, so a wrong status is upstream of the rescue, and it overrode 0 fields.
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.
- Comparing consents that arrive as FILLED FORMS, with each element in a labelled field — the free rules floor. Do not pay for this.
MEASURED AT A TIE: 100.0 pct against 100.0 pct over the 21 form-shaped packets. Reading a labelled field is a lookup, and a regular expression already does it perfectly for $0.00. - Comparing consents captured as a coordinator's NARRATIVE or a verbal attestation TRANSCRIPT — the fast tier
This is where the whole measured margin lives: narrative 95.5 pct against the floor's 45.5 pct, transcript 81.0 pct against 38.1 pct. The element has to be found in prose before it can be judged, and rule matching collapses. - Catching the case where the comparison itself is against the wrong entry — either arm -- it is pure code, and free
MEASURED AT A TIE: 10 of 10 matrix findings and 5 of 5 location findings on BOTH the paid arm and the free floor.cited_currentis a date comparison and the location check is a string comparison; neither is a reading.
And where nothing here is good enough:
- Deciding whether a consent is legally sufficient for a state — NEITHER. This kit does not answer that and cannot be made to.
sufficiencyis a capped field forced to the literalnonebefore anything downstream reads it, and the matrix it compares against is invented. The catalogue row is BLOCKED-PENDING-ANCHOR.
At a glanceHow the whole thing runs
Run once, for real, on 2026-09-02. 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/corpus/*.txt with your own packets, data/visits.json with your own visit register and data/matrix.json with your own requirement matrix. ⚠︎ WHAT STOPS BEING TRUE THE MOMENT YOU DO. Corpus lens → |
| When is this the wrong choice? | Avoid: Paying per call for a third of a corpus that discriminates nothing. Route on shape first -- the packet's own CONSENT RECORD heading names the habit. That is the case against the best-fitting scenario (“Comparing consents that arrive as FILLED FORMS, with each element in a labelled field”). 4 scenarios scored in all, each with its own. Eval lens → |
| Where does it stop working? | A scanned or photographed consent form. Every arm here reads text; there is no OCR anywhere in this kit and a picture of a consent produces nothing. 5 recorded failure modes, each from a run rather than a guess. Corpus lens → |
| What was never verified? | THE FIVE CALENDAR-DEFENDED ADVERSARIAL TARGETS. x001 attempted 14 and scored 9; the 5 cited_version_stale packets were billed but their replies were lost to an interrupted run and were not re-bought. 5 items this kit says it could not check. Eval lens → |
| Can I run this on a model I control? | Yes — any OpenAI-compatible endpoint, including one on your own hardware. The shipped adapter takes its host from BASE_URL and its model from MODEL, so nothing in src/ changes. The published figures come from 1 model on the fast tier, one provider, one key. 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-02 — r001-consent-conform. 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.
Checked before this shipped — A clean checkout with no key configured renders the whole board on 127.0.0.1:9268 and scores both free floors on all 64 packets. python3 tools/build_corpus.py --check proves the corpus, python3 -m evals.check_labels re-derives the key, and API_KEY= python3 -m evals.run --run-id r001-consent-conform --resume replays the paid run from its committed cache for $0.00. There is nothing to pip install — standard library end to end.



