I build LLM extraction systems for a living. Which is exactly why, when I built a tool to convert PDF bank statements into spreadsheets, I refused to trust the model.
Here's the failure mode that keeps me up at night. You feed a bank statement PDF to a vision-language model. It returns 700 clean-looking rows. 699 are perfect. One has 1,240.50 where the statement says 1,340.50 — a single digit, misread. Nothing about that row looks wrong. It sorts fine, imports fine, sums to a plausible total. Weeks later a bookkeeper's reconciliation is off by 100 and nobody knows why.
Wrong-but-plausible output is worse than an error, because an error you catch and a plausible lie you don't. A tool that fails loudly is annoying. A tool that's confidently, quietly wrong on financial data is dangerous. So the interesting engineering problem in this product was never "extract the transactions." Any decent VLM does that. The problem was: how do you know the extraction is right, per document, without a human checking it?
The answer turned out to be sitting in the statement itself.
A correctly parsed statement is internally consistent






