Own project · 2026
A tool I built end to end to read invoices, delivery notes, contracts and payslips and pull their fields into the system where people already work.
Somebody retypes the same six fields from the same kind of document, several hundred times a month. The task is dull, it is error-prone in a way nobody notices until an audit, and it is almost always done by the person who has the least time.
Document extraction is not a hard research problem any more. What is still hard is doing it in a way an organisation can defend.
Deployment on the user's own server or cloud, rather than on a platform of mine. That is a compliance decision before it is a technical one: the moment a company's document base passes through a third party, its data processor changes, and so does the documentation it has to maintain. A tool that quietly creates a new processing relationship is not a convenience — it is a liability someone will have to explain.
Silent extraction errors. A wrong total does not announce itself; it flows into an accounting system and surfaces weeks later. So the design keeps human review on any field involving amounts or deadlines, and flags low-confidence extractions rather than passing them through. No document travels to an external service.
GDPR by design: minimisation, and a processor the user controls. Under the EU AI Act this is a minimal-risk use, with no specific obligations beyond transparency about the use of AI — which is worth stating plainly, because the market around this is full of people implying otherwise.
What it taught me. The question that determined the architecture was not technical — which model extracts best — but one of accountability: who answers if the data comes out wrong, and where that can be evidenced. I have been applying that order of questions ever since.
The same shape appears anywhere a model's output enters a process that people rely on: a confidence threshold, a review step on the consequential fields, and a record of what was extracted and by which version. The subject matter changes; the controls do not.