Suite · Document intelligence
Messy Scan
What degradation does to extraction, and how much of the volume survives without a person.
Charter 1.0.0, section 2
Unit scored: one document. Headline metric: document-level straight-through-processing rate.
Built from datasets/messy-scan/.
On this page: leaderboard, metric definitions, difficulty tiers, reproduce, versions and hashes.
Status
Leaderboard
The tier here describes the exercise, not an item in a dataset: this suite has no labelled set and no language dimension. Selected slice: every tier. No count is published for this slice. The filter changes the denominator a row would be measured over. Every measured cell reads not run in every slice.
No sort applied. Rows are in source order.
| openai | OpenAI | not set | not run | not run | not run | 0 | not run — OPENAI_API_KEY not set; no reachable model interface |
|---|---|---|---|---|---|---|---|
| anthropic | Anthropic | not set | not run | not run | not run | 0 | not run — ANTHROPIC_API_KEY not set; no reachable model interface |
| not set | not run | not run | not run | 0 | not run — GOOGLE_API_KEY not set; no reachable model interface | ||
| mistral | Mistral | not set | not run | not run | not run | 0 | not run — MISTRAL_API_KEY not set; no reachable model interface |
| local-vllm | self-hosted | not set | not run | not run | not run | 0 | not run — LOCAL_OPENAI_BASE_URL not set; no reachable model interface |
| local-ollama | self-hosted | not set | not run | not run | not run | 0 | not run — LOCAL_OPENAI_BASE_URL not set; no reachable model interface |
| aws-textract | Amazon Web Services | AnalyzeDocument | not run | not run | not run | 0 | not run — AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY not set; no reachable model interface |
| azure-document-intelligence | Microsoft Azure | prebuilt-document | not run | not run | not run | 0 | not run — AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT, AZURE_DOCUMENT_INTELLIGENCE_KEY not set; no reachable model interface |
| google-document-ai | Google Cloud | not set | not run | not run | not run | 0 | not run — GOOGLE_APPLICATION_CREDENTIALS, GOOGLE_DOCAI_PROCESSOR not set; no reachable model interface |
| http-endpoint | generic | not set | not run | not run | not run | 0 | not run — ENTAIL_HTTP_ENDPOINT_URL not set; no reachable model interface |
| entail-pipeline | Entailment Labs | not set | not run | not run | not run | 0 | not run — ENTAIL_HTTP_ENDPOINT_URL not set; no reachable model interface |
Column headings sort the table. A figure that was never produced sorts last in both directions; it is not a low score. A model version reading "not set" is a decision a person makes before a run, per charter 10.3; the harness stores no version string that nobody chose. Charter 5.6: our own system is scored by the same harness, from the same commit, with the same prompts, and sits wherever the sort puts it, with no highlight and no position advantage.
Nothing to plot. No system has been run, so there is no document-level straight-through-processing rate to draw. Charter 10.4: a chart with no run renders an empty state, not example bars. The reason for each row is in the status column above.
Metric definitions
Read from charter 1.0.0 section 3 when this page was built. Each metric carries its formula, its numerator, its denominator and its exclusions, and each has clause language in charter/contract-clauses.md so it can be written into a statement of work. The charter's arithmetic examples are left out here: they are invented numbers that demonstrate a formula, and beside a table of "not run" they would read as results.
Field-level accuracy
Charter 1.0.0 section 3.3 · read it in the charter · SOW clause 2
- Formula
Field-level accuracy = correct field instances ÷ field instances assessed.
- Numerator
Field instances whose returned value matches the labelled value under the match rule for that field type. Match rules, which are the rules already used in
06-delivery/build-standards.mdsection 6.1: exact for identifiers and codes; normalised for dates (compared as ISO 8601 calendar dates), amounts (compared as a numeric value plus a currency code, with separators, symbols and whitespace removed), and names (case, punctuation, diacritics, honorifics and multiple spaces normalised); free-text fields scored only where a tolerance rule is stated, and reported separately from the exact and normalised fields. A field the ground truth marks absent is correct only if the system returns an explicit null or empty value for it.- Denominator
Every field instance in the ground truth for the documents scored, plus every field instance the system returned that has no counterpart in the ground truth. A returned field that should not exist counts as one assessed instance and is always incorrect. This is the point of the rule: a system cannot raise its accuracy by inventing fields, and it cannot raise it by returning fewer.
- Excluded
Fields outside the published schema for that document type. Field instances whose ground truth is marked unreadable by the labeller, which are counted and reported as a separate line rather than scored. Documents that failed to process at all, which are excluded from this metric and counted under the processing-failure line, never dropped from the manifest.
- Reported as
Overall, per field, per document type, per tier and per language, with three-run mean and spread.
- Contract sentence
"Field-level accuracy means the number of field instances whose returned value matches the labelled value under the match rules in Schedule [X], divided by the number of field instances assessed, where field instances assessed comprise every field instance in the labelled set for the documents scored plus every field returned by the System for which the labelled set holds no counterpart. The Provider shall achieve field-level accuracy of not less than placeholder percent, measured on the labelled set named in clause [X] at each measurement point."
Document-level straight-through-processing rate
Charter 1.0.0 section 3.4 · read it in the charter · SOW clause 3
- Formula
Straight-through-processing rate = documents released with no human touch ÷ documents admitted to processing. Straight-through means zero human touch, not "little human touch", and not "approved quickly".
- Numerator
Documents whose output was released to the downstream system without any human action of any kind: no review-queue entry, no field correction, no approval action, no reviewer opening the item. One exception, stated so that measurement does not corrupt the measure: a document drawn into the sampled-audit queue (
AUDITin06-delivery/build-standards.mdsection 7.1) still counts as straight-through if the audit reviewer changed nothing, because the audit is a measurement device applied after release. If the audit review changed the output, the document is not straight-through and is counted as an exception under section 3.5.- Denominator
Documents admitted to processing in the window: documents received, less documents rejected before processing by a pre-processing rule named in the statement of work. Both counts are reported, so the effect of the admission rule on the rate is visible.
- Excluded
Documents rejected before processing by a named rule, which are counted and reported separately. Documents still in flight at the end of the window, which are counted and reported as in flight; the window is chosen so that the in-flight share is small enough to state.
- Reported as
Overall and per tier, per document type and per language, always beside field-level accuracy on the same row. Straight-through rate on its own is not a result: a system that releases everything untouched scores 100 percent and may be wrong on most of it.
- Contract sentence
"Straight-through-processing rate means the number of Documents released to the Partner's downstream system with no human action of any kind, divided by the number of Documents admitted to processing in the measurement window, where a Document drawn into the sampled audit is treated as straight-through only if the audit did not change its output. The Provider shall achieve a straight-through-processing rate of not less than placeholder percent while maintaining field-level accuracy at or above the floor in clause [X], and neither measure is satisfied without the other."
Exception rate
Charter 1.0.0 section 3.5 · read it in the charter · SOW clause 4
- Formula
Exception rate = documents that entered human review ÷ documents admitted to processing.
- Numerator
Documents with at least one review-queue entry under the codes
LOWCONF,VALFAIL,FLAG,FAILorDRIFT, plus documents drawn into the sampled audit whose output the reviewer changed. A document counts once however many fields triggered it and however many times it re-entered the queue; the count of re-entries is reported separately.- Denominator
Documents admitted to processing, the same denominator as section 3.4. The harness asserts the identity: straight-through rate plus exception rate equals one. A supplier's figures that do not satisfy that identity are using two different denominators, and the report says so.
- Excluded
Sampled-audit draws that confirmed the output unchanged, which are reported separately as the audit rate. Documents rejected before processing by a named rule. Queue entries created by the partner for training or calibration, which are counted separately.
- Reported as
Overall, by entry code, per tier and per confidence threshold, because the exception rate is a function of the threshold and moves the moment the threshold does.
- Contract sentence
"Exception rate means the number of Documents that entered the human review queue under any entry code other than a sampled audit that resulted in no change, divided by the number of Documents admitted to processing in the measurement window. The Provider shall keep the exception rate at or below placeholder percent, measured over a calendar month at the confidence thresholds recorded in the configuration in force during that month, and shall state any threshold change and its date in the Monthly Report."
Confidence calibration, expected calibration error
Charter 1.0.0 section 3.6 · read it in the charter · SOW clause 5
- Why it is here
A review queue is built on a confidence threshold. If the confidence is not calibrated, the threshold routes the wrong items, and both the accuracy floor and the exception ceiling become unreachable at the same time. Calibration is therefore a delivery metric, not a research one.
- Formula
Expected calibration error = the sum over bins of (instances in the bin ÷ total instances) × the absolute difference between the accuracy of the bin and the mean reported confidence of the bin.
- Numerator and denominator
The unit is one field instance for the document suites, one decision for the voice and back-office suites. For each bin: accuracy of the bin = correct instances in the bin ÷ instances in the bin; mean confidence of the bin = the mean of the reported confidences in the bin. The weight of each bin is instances in the bin ÷ total instances carrying a reported confidence. Ten equal-width bins on the interval zero to one are the default; any other binning is stated with the figure, because the bin count changes the number.
- Excluded
Instances for which the system reports no confidence, which are counted and reported as unscored for calibration with their share of the total. A system that reports no confidence at all is reported as "no confidence output". It is never reported as an expected calibration error of zero. Instances excluded from accuracy under section 3.3.4 are excluded here too.
- Reported with
Two figures always travel with the expected calibration error: the reliability diagram, and the high-confidence check, which is the accuracy of instances whose reported confidence is at or above 0.95. The high-confidence check is what a threshold actually depends on.
- Contract sentence
"Expected calibration error means the weighted mean absolute difference between the accuracy and the mean reported confidence of each of ten equal-width confidence bins, measured over field instances carrying a reported confidence. The Provider shall keep the expected calibration error at or below placeholder, and shall ensure that field instances returned with a confidence of 0.95 or above are correct in not less than placeholder percent of cases. Where either measure is missed, the Provider shall recalibrate the confidence thresholds at no charge and restate the resulting exception rate before the change is applied."
<!-- Benchmark charter, part 2. Indexed in ../methodology.md. Sections 3.7 to 3.13. -->
Cost per document
Charter 1.0.0 section 3.7 · read it in the charter · SOW clause 6
- Formula
Cost per document = total run cost ÷ documents admitted to processing.
- Numerator
Every charge incurred to process the documents in the run: input, output and any separately billed reasoning tokens; per-page or per-request charges for document services; the charges for retries and for calls that failed and were repeated; and, for a self-hosted model, the compute rate stated in
harness/prices.yamlmultiplied by the measured occupancy. Charges are taken from published list prices on a stated date. The price list date is printed with the figure.- Denominator
Documents admitted to processing, as in section 3.4. Cost is reported per document, and also per page and per thousand documents, because document size differs between suites and between partners.
- Excluded
Human review labour, which is measured separately in section 3.16 and combined with this figure only in the net cost per item in the Exception Economics report. One-off build and integration cost. The cost of running the harness itself. Negotiated discounts, committed-use pricing and any private rate, all of which are excluded because they are not reproducible by a reader; a partner's own effective price is expected to differ, and section 9.4 says so plainly.
- Contract sentence
"Cost per document means the total provider and compute charges incurred in processing Documents in the measurement window, at the list prices in force on the date stated in the Monthly Report, divided by the number of Documents admitted to processing. The Provider shall keep the cost per document at or below placeholder in the currency stated in clause [X], and shall notify the Partner within placeholder Business Days of any provider price change that would take the figure above that ceiling, together with the options to restore it."
Latency
Charter 1.0.0 section 3.8 · read it in the charter · SOW clause 7
- Formula
Latency is a distribution over documents, not a ratio. Report the 50th, 95th and 99th percentiles by the nearest-rank method, with the mean, the maximum and the count.
- What is timed
From the moment the document is admitted to processing, which the harness records immediately before the first provider call and which in production is the intake timestamp, to the moment the complete validated output is written, or the moment the document enters the review queue, whichever comes first. Both endpoints are recorded in the audit trail.
- Numerator, denominator and population
Latency is a duration, not a ratio: each observation is one document's elapsed time, so there is no numerator to count. The denominator is the count of documents in the population, and it is what fixes the rank a percentile lands on. The population is documents that completed, in the window or in the scored split. The population size is printed with every percentile, because a percentile over a handful of documents is one document.
- Excluded
Time waiting in the review queue, which is queue age and belongs to operations, not to the system. Documents that failed to process, whose times are reported separately as failure times. Time spent in rate-limit backoff, which is reported twice, once with backoff included and once without, because backoff is a property of the account, not of the model.
- Contract sentence
"Latency means the elapsed time from admission of a Document to processing until the complete validated output is written or the Document enters the human review queue, whichever occurs first, reported as the 50th, 95th and 99th percentiles by the nearest-rank method over Documents completed in the measurement window. The Provider shall keep the 95th percentile at or below placeholder seconds. Time spent in the human review queue is not included, and is reported separately as queue age."
Difficulty tiers
Charter 1.0.0 section 4.2. A tier is a property of the item, assigned when it is generated, and it never changes because a system found the item hard.
The degradation tiers used by datasets/messy-scan/. Each item carries every parameter below in its manifest entry.
| Tier | Source and capture | Geometry | Optical | Composition | Language |
|---|---|---|---|---|---|
| T1 | Born-digital PDF with a text layer | No rotation, no skew | No noise added, no compression artefacts | One document per file, one page or a clean multi-page set in order | One language |
| T2 | Flatbed scan, 200 to 300 dpi, greyscale or colour | Skew 0.5 to 3 degrees, no perspective | Light scanner noise, even lighting | One document per file, pages in order | One language |
| T3 | Phone photograph, 8 to 12 megapixel source | Skew 3 to 12 degrees, perspective present, one or more corners cropped or curled | Shadow across part of the page, glare on at least one region, uneven white balance | One document per file | One language |
| T4 | Fax-quality raster, 100 to 200 dpi, bitonal | Skew as T3, staple shadow or torn corner | Heavy compression, speckle | Stamps and signatures overlapping printed text, handwriting in the margins and in at least one field, correction marks | One language |
| T5 | Mixed: any of T1 to T4 within one bundle, plus messaging-app recompression at low quality | Pages rotated 90, 180 or 270 degrees, page order not guaranteed | As T4, plus at least one page below the legibility threshold recorded in the manifest | Multi-document bundle, at least one duplicated page, at least one page belonging to a different document | Two languages on at least one page, drawn from English with Hindi, Gujarati or Tagalog |
4.2.1 A tier is assigned only if every criterion in its row holds. An item that meets some criteria of T4 and some of T3 is generated again, not promoted.
4.2.2 The tier mix in the public sample and in the private split is stated in the datasheet, and the two mixes are the same, so that a divergence between them is a signal about the system rather than about the sample.
The data
This suite has no dataset. It is a rubric and a set of scripted exercises run against a live deployment, ours or anyone's, sixty days after go-live.
The public sample
Nothing to download. The rubric, the scripted incidents and the self-assessment are documents, listed under the reproduce section below.
Reproduce
No reproduce.md exists for this suite, because no run has been made. The commands below are read at build time from datasets/messy-scan/README.md, harness/README.md: they rebuild the dataset from its seed and run the harness against it.
Rebuild the dataset: Regenerate the whole dataset from a seed
python3 generate.py --seed 20260902 # plan + ground truth for 1,000 documents
python3 render.py # HTML -> Chromium -> PDF + PNG per page
python3 degrade.py # tier degradation, hashes, splitsRebuild the dataset: Regenerate the whole dataset from a seed
python3 validate.pyRebuild the dataset: Partial builds
python3 render.py --select splits # public sample + private split only
python3 render.py --select splits --stratified 100 # plus 100 more across every subtype and tier
python3 render.py --skip-existing # finish an interrupted run
python3 degrade.py --shards 2 --shard 0 --no-splits & # one core
python3 degrade.py --shards 2 --shard 1 --no-splits & # the other
python3 degrade.py --skip-existing # final pass: ground truth + splitsRun the suite: 1. Install
cd 10-benchmarks/harness
pip install -e .Run the suite: 1. Install
entail-bench --version
entail-bench list-modelsRun the suite: 3. Point the harness at it
cp config.example.yaml entail-bench.yamlRun the suite: 4. Check it before you spend anything
entail-bench validate-configRun the suite: 4. Check it before you spend anything
entail-bench run --dry-run --dataset ./their-folder --runs 3Run the suite: 5. Run a model
export OPENAI_API_KEY=...
entail-bench run --suite messy-scan --model openai --model-id <the model you are scoring> \
--dataset ./their-folder --runs 3 --max-spend 25.00The documents this suite is run from
- Messy Scan dataset v1.0.0 —
datasets/messy-scan/README.md· Regenerate the whole dataset from a seed · Tier distribution · What is in this folder · One ground-truth record · What validate.py checks · Licence - Datasheet — Messy Scan dataset v1.0.0 —
datasets/messy-scan/datasheet.md· Motivation · Composition · Collection and generation process · Degradation parameters and their ranges · Preprocessing, cleaning and labelling · Uses - entail-bench —
harness/README.md· Five-minute quickstart, on your own documents · Environment variables, per adapter · What the harness measures · Prompts · Cost · Reproducibility
Charter 5.5
Every result is reproducible from a commit. A figure that cannot be reproduced from the dataset version and hash, the harness version and commit, the prompt set hash, the model version string, the run date, the price list date and the exact command line is withdrawn, not defended.
Versions and hashes
| Dataset | datasets/messy-scan/ — not a dataset |
|---|---|
| Dataset seed | not applicable |
| Dataset version in the results | not run |
| Harness version | 1.0.0 |
| Harness commit | not run |
| Scorer version | not run |
| Charter version | 1.0.0 |
| Ground-truth hash | not published for this suite |
| Dataset manifest hash | not published for this suite |
| Results folder | does not exist — the suite has not been run |
| Run date | not run |
| Price list date | not run — no provider charge has been incurred |
Charter 7.3
No table mixes versions. A row produced under a different dataset, harness or charter version sits in a different table, and a superseded table stays published, marked superseded, with a link to the one that replaced it.