System · Logistics
DDT Scan
Automatic reading of fish-industry delivery notes and CMR documents, with master-data mapping and review only of the exceptions, running in production on the company network.
Role
Product and development
Year
2026
Context
Fish logistics and transport documents
-
Context
Every day DDT and CMR documents come in: senders, recipients, destinations, document numbers, weights. They were read on screen, copied by hand, checked against the internal master data.
-
Problem
Reading the document and recognising the companies were two separate jobs, both manual, both done under pressure while the PDFs kept arriving.
No certainty over who was really the seller and who was only the carrier.
Weights copied by eye, names that didn't match the internal codes.
-
Idea
Let a vision model read the sheet, and keep company identity out of it: a deterministic table, not the model's memory.
-
What I built
An n8n pipeline: PDFs land on a Samba share, PaddleOCR rasterises the pages, GPT extracts the printed fields. Flask applies the mappings (name and VAT number → internal code), checks that net weight matches the lines, and learns the associations when you validate.
Exceptions-first dashboard: conflicts, new names, weights that don't add up.
Excel export.
Windows client on WebView2.
Docker behind Caddy on the LAN.
-
Result
The flow closes itself: the document that was read is already on the day's list, with the right codes. You only intervene where the sheet and the master data don't match.
-
What I learned
The model has to copy what's on the paper, not invent who the company is. Treating master data as the source of truth, and extraction as reading, made everything around it reliable.
Stack
n8n · PaddleOCR · OpenAI · Flask · Docker · WebView2