DocVal
Bank-statement extraction + validation pipeline
Native PDF or scan in; typed, validated transactions out. Hybrid
routing — deterministic parsing when a text layer exists, vision-LLM
per page when it doesn't — landing in one Pydantic schema, checked by
a balance-continuity validator no model can sweet-talk.
- Held-out txn F1
- 0.92 syn / 0.12 scans
- Header accuracy
- 0.89
- Cost per document
- $0.005
ReconMatch
Transaction matching + break resolution
Statement lines vs. internal ledger: exact, date-windowed, and
split-matching tiers, deterministic and greedy — every match
explainable. Unmatched lines get classified breaks with suggested
resolutions, so ops attention goes only where trust ran out.
- Auto-match rate
- 95.4% @ P 1.00
- Pair F1
- 0.976
- Held-out, never tuned
- 50 sets × 40 entries
The eval case study
How I measure accuracy in document-extraction pipelines
Schema enforcement, deterministic validation, held-out evals with
cost tracked next to accuracy — and what the harness caught that
vibes never would: output-cap truncation, temperature-0
nondeterminism, provider flakiness, and a third-party benchmark
whose own scorer was broken.
- Layers of trust
- schema → arithmetic → eval
- Regression gate
- CI, every push, ±1pt