Start with reproducible synthetic cases, learn the shape of historical public records, then evaluate against an authorized partner cohort with adjudicated outcomes.
Ask a recovery firm or enterprise AP team for a bounded, authorized historical category with adjudicated outcomes.
Proves
Incremental accepted cases, reviewer productivity and costs against an incumbent baseline.
Access route
Paid evaluation scope, approved environment, documented data rights and a qualified reviewer.
OregonBuys coverage: the published report includes contracts and purchases, excludes statewide price agreements and purchases under them, and documents exclusions and variable coding. Its values are procurement records as of retrieval, with limitations. Source checked 4 November 2026. An anomaly remains a candidate for review.
Working browser demo
A small recovery queue.
Run the same deterministic engine used by the command-line benchmark. Processing stays in your browser; no paid API calls.
1,070
Export rows from 1,000 base invoices
20
Synthetic contracts with dated amendments
100
Posted full or partial credit records
150
Planted review candidates
Ready. Rules check paid price variance and separate duplicate payments.
…
Candidate cases
…
Synthetic candidate value
…
Repeated paid export rows ignored
…
Contract data issues
Invoice
Rule
Candidate amount
Supporting calculation
First 12 candidates displayed. Download the full queue for all source references.
What the fixture includes
50 uncredited price variances, 50 legitimate amended prices, 50 fully credited differences, 50 partially credited differences, 50 additional duplicate payments, 50 canceled invoices, 50 unpaid invoices and 650 clean base invoices. Twenty repeated export rows test ingestion; eighteen are paid and pass through payment deduplication.
Benchmark interpretation
The checked-in regression result finds 150 expected cases, with 0 false positives, 0 false negatives and 0 amount mismatches. Because the fixtures and rules were developed together, this score is a software check. Independent specialist-authored cases and a blind historical cohort are required to assess generalization.
Ground truth is stored in the repository outside the published site. The engine reads only transaction records. The fixture has simplified one-line, single-currency invoices and one paid event per normal invoice; installments, tax, freight, FX and complex credit allocation require further rules.
Historical data acquisition
Ask for a complete case chain.
Record
Minimum fields
Purpose
Contract & amendments
Contract/vendor/item IDs, terms, unit, effective dates and document references
Establish the applicable price or obligation
Invoice lines
Invoice/vendor/item IDs, date, quantity, unit price, tax and freight
Compare like units against the contract
Payments & credits
Stable payment IDs, invoice allocations, posting date and realized credits
Separate invoice exceptions from paid exposure
Incumbent dispositions
Already worked, accepted/rejected, dispute, posted cash and reversals
Freeze baseline and evaluate incremental outcomes
First partner request
Propose one closed category, six to twelve months of history, stable pseudonymous identifiers and linked contract/invoice/payment/credit records. Agree a manageable sample size after measuring missing documents. Ask the partner to retain the answer key for blind scoring.
Public-data sample acquired
A bounded 100-row sample and retrieval manifest are checked into the repository. Its fields include record ID, purchase order, agency, vendor and purchase-order total. Next, inspect the dictionary and coverage, then reconcile counts before seeking transaction-level access.
npm install
npm run data:oregon # bounded 100-row public procurement sample
npm run data:generate # seed 42; fixtures + separate answer key
npm run data:run # analyze + score; fails on mismatches
npm test # edge cases + cost arithmetic
npm run dev # Astro development server
npm run build # static output in dist/
The demo implements structured-data rules. OCR, language-model extraction, specialist adjudication and collection remain production workstreams. Next: add independently authored holdout cases, then document renderings and an extraction evaluation.