Case 01 — Voorraad- en kassasysteem
Voorraadbeheer
Een voorraad- en kassasysteem voor een kleine winkel of opslag. Scan met je telefoon of een handscanner en zie het meteen live op het dashboard.

ADe uitdaging
Kleine zaken houden hun voorraad vaak bij in een spreadsheet of op papier. Dat loopt altijd achter: wat er net verkocht is, wat er binnenkwam en wat bijna op is, zie je pas als iemand het overtypt. Het doel was één systeem voor inboeken, verkopen en opvolgen, dat werkt met wat er al ligt: een telefoon of een goedkope barcodescanner.
BDe aanpak
Een Flask-app op een SQLite-database, met een JSON-API voor de interactieve pagina's. Elke voorraadwijziging wordt bewaard met de reden erbij, elke prijswijziging komt in een historie. Mobiel eerst: op een telefoon zit de navigatie onderaan binnen duimbereik, op een groot scherm in een zijbalk.
CWat het doet
-
01
Live dashboard
Kerncijfers, voorraadwaarde, omzet van vandaag en alles wat er net gescand is, zonder te verversen.
-
02
Scannen
Met de camera van je telefoon of een USB- of bluetoothscanner. Een onbekende barcode koppel je meteen aan een product.
-
03
Kassa
Scan of zoek producten, reken af met kaart of contant, inclusief wisselgeld, en krijg een bon. De voorraad gaat vanzelf omlaag.
-
04
Prijshistorie
Elke prijswijziging wordt bewaard en in een grafiek getoond, met verkoop- en inkoopprijs en de marge.
-
05
Labels
Producten zonder barcode krijgen een eigen EAN-13-code. Print labels op een A4-stickervel of met een labelprinter.
-
06
Logboek
Elke verandering van de voorraad staat in een logboek met de reden: verkoop, inboeken of telling.
DIn beeld




EOnder de motorkap
- 01HTTPS op je eigen netwerk
- Browsers geven alleen camera-toegang via een beveiligde verbinding. De app maakt bij de eerste start zelf een certificaat aan, zodat scannen met je telefoon werkt op je eigen wifi.
- 02Eigen barcodes
- Interne EAN-13-codes beginnen met een 2, het bereik voor intern gebruik, en krijgen een correct berekend controlecijfer. Ze worden als SVG getekend, scherp op elk formaat.
- 03Live zonder websockets
- Het dashboard vraagt elke twee seconden alleen de scans op die nieuwer zijn dan de laatste die het kent, en pauzeert als het tabblad niet zichtbaar is.
- 04Voorraad die klopt
- Afrekenen en voorraad aanpassen gebeurt in één databasetransactie. Lukt één regel niet, dan wordt er niets weggeschreven.
- 05Grafieken zonder bibliotheek
- De omzet- en prijsgrafieken zijn met eigen JavaScript getekend, zonder externe chart-library.
FIn cijfers
- regels code
- 4.356
- databasetabellen
- 7
- manieren om te scannen
- 3
- grafiekbibliotheken
- 0