Projekty IdeaWood P.03

IS WoodSoft

Systém pro obchod se dřevem, který jsme v týmu navrhli a já postavil: sklad, dodací listy, fakturace, mapy a hlášení EUDR pro firmy, které dřevo vykupují a prodávají.

Role
Návrh, vývoj, provoz
Období
2026 → dnes
Rozsah
Backend (REST API, administrace), webová aplikace
Stav
V provozu

Produkt na ideawood.cz ↗

Nástěnka: faktury, sklad dřeva, aktivní obchody a stav EUDR na jedné obrazovce, takže obchodník nemusí otevírat jednotlivé moduly. Ukázková data, žádný skutečný zákazník.
Fig. 1 · Nástěnka: faktury, sklad dřeva, aktivní obchody a stav EUDR na jedné obrazovce, takže obchodník nemusí otevírat jednotlivé moduly. Ukázková data, žádný skutečný zákazník.

Zadání

Zadání bylo postavit jeden systém pro obchod se dřevem, ve kterém je sklad, dodací listy, fakturace, mapy a povinné hlášení podle nařízení EUDR. Aplikace je určená pro víc firem najednou a každá z nich vidí jen svoje data.

Postavil jsem ji celou, od REST API a administrace po webovou aplikaci, a také ji provozuju. Produkt je popsaný i na ideawood.cz ↗.

Co stojí za zmínku

01

Hlášení EUDR přímo do systému EU TRACES

Prohlášení o náležité péči se podává úřadu EU a obsahuje polygony pozemků. Systém z pozemků a hodnocení rizika složí XML prohlášení, podepíše SOAP požadavek hlavičkou WS-Security, odešle ho do EU TRACES a potom z TRACES načte stav prohlášení a referenční čísla. Testovací server EU nebývá pořád dostupný, proto vedle skutečného klienta existuje falešný, který simuluje chybný klíč, výpadek nebo stažené prohlášení. Klíč zákazníka se ukládá šifrovaně přes libsodium. Staré doklady k prohlášením maže samostatný příkaz.

02

Import dokumentů od dodavatelů: parsery a AI, které nic neukládá samo

Dodavatelé posílají ceníky, smlouvy a přejímky v různých formátech a systém je má načíst bez ručního přepisování. Import má dvě cesty. CSV, XML a PDF ve známé šabloně čtou deterministické parsery, které při nesrovnalosti selžou, místo aby hádaly. Dokument, který žádný parser nepozná, jde přes AI import s Mistral OCR a jazykovým modelem a každá cena, kterou vrátí, se kontroluje proti citovanému řádku dokumentu. Obě cesty končí v náhledu, který potvrdí člověk, a teprve potom se cokoliv uloží.

03

Čtení lesnických hospodářských plánů do mapy

Lesnický hospodářský plán (LHP) se nahraje jako archiv a zpracuje ho na pozadí samostatná parsovací služba, takže nahrávání nezdržuje webovou aplikaci. Při chybě sítě nebo serveru se zpracování zopakuje, při chybě v samotném plánu se plán označí jako neúspěšný. Z výsledku se porosty ukládají po dávkách do 500 prvků jako prvky mapy a porosty s předepsanou těžbou mají vlastní vrstvu. Mapa běží na Leafletu a vedle plánů ukazuje katastr a ortofoto.

Jak to vypadá

Hlášení EUDR: seznam prohlášení o náležité péči se stavem Podáno v TRACES nebo Koncept, takže je vidět, které prohlášení už odešlo a které je rozpracované
Fig. 2 · Hlášení EUDR: seznam prohlášení o náležité péči se stavem Podáno v TRACES nebo Koncept, takže je vidět, které prohlášení už odešlo a které je rozpracované
Dodací listy: seznam dodacích listů s tlačítkem Import přejímky, kterým se do systému dostávají přejímky z pily
Fig. 3 · Dodací listy: seznam dodacích listů s tlačítkem Import přejímky, kterým se do systému dostávají přejímky z pily
Mapa: ortofoto s katastrem a vrstvami lesnických hospodářských plánů, tlačítko Nahrát LHP je v panelu vrstev
Fig. 4 · Mapa: ortofoto s katastrem a vrstvami lesnických hospodářských plánů, tlačítko Nahrát LHP je v panelu vrstev

Více o WoodSoftu na ideawood.cz ↗

Na čem to běží

  • PHP
  • Nette
  • Doctrine
  • PostgreSQL
  • Redis
  • Symfony Messenger
  • React
  • TypeScript
  • Vite
  • Mistral OCR

Dokumenty od dodavatelů čtou deterministické parsery (CSV, XML a rozpoznané šablony PDF), neznámé skeny čte AI import přes Mistral OCR. V obou případech vznikne náhled, který potvrdí člověk, teprve potom se cokoliv uloží.

Architektura WoodSoftu Webová aplikace volá REST API. API ukládá do PostgreSQL s row-level security, posílá úlohy do fronty, vytváří PDF a hlásí EUDR do EU TRACES. Dokumenty od dodavatelů do fronty vstupují dvěma cestami: deterministické parsery a AI import přes Mistral OCR. Fronta ukládá výsledek do databáze jako náhled ke schválení. WEB APP (REACT) API (NETTE) PDF (GOTENBERG) EU TRACES QUEUE WORKER POSTGRESQL + RLS DOCUMENT PARSERS MISTRAL OCR

Postup, jakým takové systémy stavím, popisuju na stránce Jak pracuju.

Chcete postavit něco podobného?

Napsat mi →