The archive was not lost. It was on a server, organised by year, backed up nightly, and completely inert. Every page was an image. Answering a question that spanned more than one document meant someone opening folders until they found it.
Scanned pages are files, not records
The distinction sounds pedantic and it is the whole engagement. A file can be stored, moved and backed up. A record can be queried, joined, corrected and audited. Digitisation projects that stop at "we scanned it" have converted paper into a slightly less accessible form of paper.
The target state was that any field on any page could be retrieved as structured data with a link back to the exact page image it came from.
Extraction as a pipeline, not a button
Recognition quality varied by decade, by scanner, and by how the original had been stored. A single model applied uniformly produced good results on the recent material and unusable results on the oldest, which is the material people most needed.
What worked was a staged pipeline: image conditioning, layout detection, recognition, then field-level extraction with a confidence score attached to every value rather than to the document. Confidence at the field level is what makes the next stage possible.
The review queue, where a person is cheaper than more model
Below a confidence threshold, a field goes to a human queue rather than into the record. The queue shows the extracted value beside the cropped region of the original image, and the reviewer confirms or corrects it in a keystroke.
The economics here are not close. Pushing recognition accuracy on the worst decade of scans from acceptable to excellent was months of work with an uncertain ceiling. Routing the uncertain three percent to a person cost a fortnight and reached a higher effective accuracy immediately.
The right question is not how accurate the model can be. It is how much of the work has to be perfect, and what the cheapest route to perfect on that subset is.
A corrected record keeps its history
Every value carries where it came from: which page, which region, which model version, which confidence, and whether a person changed it. A correction does not overwrite. It appends, and the previous value stays readable.
This is not an abstraction. In an archive used to answer questions with consequences, the ability to show why a figure says what it says is the difference between a useful system and an unusable one.
Running inside a restricted network
The environment had no route to the public internet. Every model ran on premise, every dependency was vendored, and the deployment had to be installable from media by an administrator with no external package access.
That constraint removes a large part of the usual toolkit and it clarifies the architecture considerably. Model backends sit behind an interface, so the specific model is a deployment decision rather than a structural one, and upgrading it does not touch the pipeline around it.
What accuracy means when the source is a bad scan
On a page where the original ink has faded into the paper texture there is a ceiling no amount of model quality gets past, because the information is not present in the image. Reporting a single accuracy number across an archive with that much variance is close to meaningless.
We reported per decade and per field type instead, which was less flattering and considerably more useful for deciding where to put review effort.
What we would build differently
The review queue was built after the pipeline. It should have been built first, with a deliberately weak extractor behind it, because the queue is where you learn what the fields actually are. Two weeks of reviewing badly extracted pages would have changed the schema before it was expensive to change.