Case studyGeanonimiseerd klantprojectLees in het Engels

Een sorteermachinemonitor die elk pakket op de verkeerde baan vindt

Deze service houdt de pakketsorteermachine van een Nederlands 3PL-fulfilmentbedrijf in de gaten. De sorteermachine stuurt een kopie van elke scan naar een webhook, die uit de barcode de vervoerder afleidt en controleert of het pakket op de juiste baan is beland. Managers krijgen elk uur een mail met de nauwkeurigheid.

In het kort

De sorteermachinemonitor is een kleine Node.js-webhook die elke scan van de pakketsorteermachine ontvangt. Hij herkent de vervoerder met 14 barcoderegels, vergelijkt de verwachte baan met de baan waar het pakket echt naartoe ging en telt herhaalde scans maar één keer. Tellingen worden per uur opgeslagen, en managers krijgen een mail met de nauwkeurigheid, pakketten op de verkeerde baan en onbekende barcodes.

Barcoderegels
14
Gecontroleerde sorteerbanen
10, incl. error/manual
Rapportage-interval
Elk uur
Geautomatiseerde tests
24
Sorter Monitor | Parcel Sorter Lane Accuracy: hoofdscherm van het project

01 / Het probleem

Waarom dit systeem nodig was

Het magazijn installeerde een pakketsorteermachine die pakketten naar de banen van DHL, PostNL, bpost, Colis Privé, Evri en andere vervoerders stuurt. De sorteermachine kiest zelf de baan. Niemand aan de operationele kant kon zien hoe vaak dat goed ging.

Een pakket op de verkeerde baan vertrekt met de verkeerde vervoerder of blijft in een rolcontainer staan tot iemand het vindt. Zonder data kwamen missorteringen pas dagen later boven als klachten van vervoerders en tickets over zoekgeraakte pakketten. Een fout van de sorteermachine was niet te onderscheiden van een nieuw labelformaat.

De service moest ook veilig bereikbaar zijn. Het is het enige systeem dat de leverancier van de sorteermachine kan bereiken. Daarom had het eigen sleutels, een IP-allowlist en limieten nodig, en mocht het geen scans vertragen of kwijtraken als de sorteermachine opnieuw verstuurde.

02 / De bouw

Hoe ik het heb gebouwd

Ik schreef de herkenning van vervoerders als een geordende lijst regex-regels, overgenomen uit de baanconfiguratie die met de leverancier van de sorteermachine is afgesproken. Specifieke prefixen gaan eerst en de brede bpost-regel van 24 cijfers als laatste. Een barcode die nergens op past, hoort op de error/manual-baan. De service leest de uitvoerbaan uit de scan of uit het apparaat-ID en markeert elke scan als correct, verkeerde baan of niet te controleren.

Elke scan krijgt een ID dat is gehasht uit de barcodes, de verzendtijd, het apparaat en de baan. Herhaalde scans hebben hetzelfde ID en tellen één keer mee over de huidige en vorige periode. Tellingen blijven in het geheugen en worden per periode als één document naar Firestore geschreven met atomaire ophogingen, elke 5 minuten of als een periode eindigt. Bij een mislukte schrijfactie blijven de tellingen bewaard voor de volgende poging, en bij afsluiten wordt eerst alles weggeschreven.

De beveiliging bestaat uit meerdere lagen. Er kunnen twee sleutels tegelijk actief zijn, zodat een nieuwe sleutel zonder downtime wordt uitgerold, en sleutels worden in constante tijd vergeleken. Berichten zijn beperkt tot een IP-allowlist, een token-bucket rate limit, vertraging bij verkeerde sleutels per adres en maximale groottes van 64 KB per scan en 2 MB per batch. Via een health-endpoint kan de host de service herstarten als die stopt.

03 / Functies

Wat de sorteermachinemonitor doet

01

Webhook voor scans

Endpoints voor losse scans en batches accepteren de JSON van de sorteermachine, inclusief varianten in veldnamen en dubbel gecodeerde berichten.

02

Vervoerder herkennen aan de barcode

Veertien geordende regex-regels koppelen elke barcode aan een vervoerdersbaan. Onbekende formaten gaan naar error/manual.

03

Verwachte tegenover werkelijke baan

Elke scan wordt vergeleken met de baan die de vervoerder hoort te gebruiken en gemarkeerd als correct, verkeerde baan of niet te controleren.

04

Dubbele scans filteren

Dankzij een gehasht scan-ID wordt een scan die de sorteermachine twee keer stuurt maar één keer opgeslagen en geteld.

05

Tellingen per periode

Per periode worden de tellingen en tot 200 probleempakketten bewaard, zodat Firestore maar een paar schrijfacties per uur krijgt.

06

Nauwkeurigheidsmail per uur

Managers krijgen de nauwkeurigheid, pakketten op de verkeerde baan met verwachte en werkelijke baan, en onbekende barcodes die misschien een nieuwe regel nodig hebben.

07

Toegangscontrole

Wisselende sleutels, een IP-allowlist, rate limits en maximale berichtgroottes beschermen het enige endpoint dat de leverancier ziet.

08

Testmodus en health-check

Met een testvlag zie je hoe een scan is gelezen zonder dat die wordt opgeslagen, en een health-endpoint maakt automatische herstarts mogelijk.

04 / Workflow

Zo werkt het, stap voor stap

  1. 01

    De scan ontvangen

    De sorteermachine stuurt elk resultaat naar de webhook, die eerst sleutel, IP, tempo en berichtgrootte controleert.

  2. 02

    De vervoerder herkennen

    De barcode wordt opgeschoond, naar hoofdletters gezet en langs de geordende regels gehaald om de verwachte baan te vinden.

  3. 03

    Vergelijken en tellen

    Verwachte en werkelijke baan worden vergeleken, herhaalde scans vallen weg en het resultaat telt mee in de huidige periode.

  4. 04

    Rapporteren aan managers

    Een minuut na het einde van elk uur mailt het beheerpaneel één keer de nauwkeurigheid en de probleempakketten van die periode.

05 / Schermen

Productschermen

Kies een scherm om de interface, workflow en operationele details te bekijken.

01 / 02
Sorter Monitor | Parcel Sorter Lane Accuracy: Overzicht van functies

Overzicht van functies

06 / Wat er veranderde

Het resultaat in de praktijk

  • Managers zien elk uur de nauwkeurigheid per baan, in plaats van dagen later via vervoerders over missorteringen te horen.
  • Pakketten op de verkeerde baan staan in een lijst met barcode, scantijd en beide banen, zodat de vloer weet welke pakketten opgezocht en omgeleid moeten worden.
  • Nieuwe labelformaten van vervoerders verschijnen in de lijst met onbekende barcodes. Zo weet het team wanneer een baanregel moet worden toegevoegd.

Veelgestelde vragen

Vragen over een vergelijkbaar systeem

Vergelijk bij elke scan de baan waar het pakket heen had moeten gaan met de baan waar het echt naartoe ging. De service herkent de vervoerder aan de barcode, zoekt de baan van die vervoerder op en leest de werkelijke baan uit het bericht van de sorteermachine. De nauwkeurigheid is het aantal correcte scans gedeeld door alle controleerbare scans, elk uur gerapporteerd.

Die telt één keer. Elke scan krijgt een ID dat is gehasht uit de barcodes, de verzendtijd, het apparaat en de baan, dus een herhaling levert hetzelfde ID op. De service onthoudt ID's uit de huidige en vorige periode, zodat ook herhalingen net na de wisseling van het uur worden afgevangen. De sorteermachine kan na elke fout veilig opnieuw versturen.

Die horen op de error/manual-baan en staan in het uurrapport. Een barcode die op geen enkele vervoerdersregel past, wordt gemarkeerd als onbekend formaat. De mail toont die pakketten met scantijd en baan, en meldt dat een nieuw labelformaat van een vervoerder misschien een regel nodig heeft.

Elk pakket op de verkeerde baan staat in de uurmail met de barcode, de vervoerdersregel, de verwachte baan en de werkelijke baan. Het rapport toont ook de eigen redencode van de sorteermachine als die er een meestuurt. Per periode worden tot 200 probleempakketten getoond, terwijl de tellingen altijd alle scans omvatten.

Een korte storing van de database kost geen tellingen. Mislukt een schrijfactie naar Firestore, dan blijven de tellingen in het geheugen en gaan ze mee met de volgende keer wegschrijven. Bij een nieuwe deploy slaat de service eerst zijn tellingen op. Kan een scan niet worden geaccepteerd, dan krijgt de sorteermachine een foutmelding met het verzoek opnieuw te sturen, en het filteren van dubbele scans voorkomt dat die herhaling twee keer telt.

Hij accepteert alleen berichten met een geldige sleutel, van toegestane IP-adressen en binnen de limieten voor tempo en grootte. Tijdens een sleutelwissel kunnen twee sleutels actief zijn, pogingen met een verkeerde sleutel worden per adres vertraagd, en berichten boven 64 KB, of 2 MB voor batches, worden geweigerd. Behalve de scanpaden en een health-check stelt de service niets open.

Samenwerken

Wil je weten hoe nauwkeurig je sorteermachine echt is?

Ik bouw monitoring en koppelingen voor magazijnapparatuur, van webhooks voor de sorteermachine tot de rapporten die je managers elk uur lezen.

Bespreek je project

Verder lezen