Když přijde dodávka, někdo musí zkontrolovat, co v ní je. V B2B e-shopu s autodíly to znamená vzít krabici, přečíst číslo dílu, najít ho v systému, zapsat množství — a opakovat, dokud není paleta prázdná. Na telefonu, ve skladu, kde není stůl ani klávesnice.
Nedávno jsem do jednoho white-label e-shopu přidal příjem zboží foťákem. Tohle je, jak to funguje a proč to není jen „naskenuj čárový kód”.
Tři cesty, jak poznat krabici
Krabice nemá vždy čárový kód — a když ho má, nemusí v něm být číslo dílu, které systém zná. Proto skener zkouší tři věci za sebou.
1. Nativní čtečka (když to jde)
Chrome na Androidu má vestavěný barcode detector. Otevřete foťák, namíříte na krabici, cvak — a číslo dílu je v příjemce. Detektor běží v prohlížeči, nikam neposílá data, funguje offline.
Problém: Safari na iOS vestavěný detektor nemá. A na skladový telefon nechcete tahat externí závislost, která může kdykoli zmizet.
2. WebAssembly fallback (když to nejde)
Pro Safari a starší prohlížeče se používá ZXing — čtečka čárových kódů přeložená do WebAssembly. Kdybychom ji tahali z CDN, skladový telefon by při každém příjmu posílal request na cizí server. A kdyby to CDN spadlo, příjem zboží stojí.
Binárku ZXingu si proto hostíme sami. Build script ji zkopíruje do public/ a CSP ji pustí z vlastní domény. Žádný externí dependency, žádný výpadek.
3. OCR (když není čárový kód)
Některé krabice mají číslo dílu jen vytištěné — písmena a číslice na kartonu. Tady pomáhá Tesseract, který běží na serveru. Snímek z foťáku putuje na API, kde OCR přečte text a systém zkusí najít odpovídající díl v katalogu dodavatele.
Důležité: OCR není stoprocentní. Písmeno “S” přečte jako “5”, “O” jako “0”. Proto se naskenovaný kód nepřijímá automaticky — admin ho musí potvrdit. Lepší dvě vteřiny kontroly než zboží na špatné polici.
Co se systém naučí
Dodavatel CoraHB (jeden z největších v oboru) neumí vyhledávat podle EAN kódů. Když na krabici svítí EAN, který katalog nezná, skener ho nevyhodí — uloží si ho. Admin přiřadí kód k dílu jednou a příště už se krabice pojmenuje sama.
Tahle „učící se” databáze je jediná cesta, jak tyhle kódy vůbec zpracovat. Dodavatel je neposkytuje, ruční párování by bylo šílenství.
Detaily, které dělají rozdíl
- Stejná krabice dvakrát → jeden řádek s množstvím 2, ne dva řádky.
- Neznámý kód → řádek stejně vznikne, jen s prázdným názvem. Nezastaví to celý příjem kvůli jedné krabici.
- Alternativní díly → když katalog vrátí k dílu i jeho alternativy, hledaný díl je vždy první v seznamu, ne až na jedenáctém místě. Ať už dodavatel řadí jakkoli.
Výsledek
Příjem zboží, který dřív znamenal „otevři laptop, přepiš čísla z krabic”, teď zvládne jeden člověk s telefonem u palety. Foťák, cvak, další krabice. Žádné externí služby, žádné CDN, žádné přepisování.
A když foťák nestíhá, pořád jde číslo napsat rukou — starý způsob nikdo nezrušil.