Projects

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

  1. 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.

  2. 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.

  3. Let a vision model read the sheet, and keep company identity out of it: a deterministic table, not the model's memory.

  4. 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.

  5. 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.

  6. 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