System ERP/WMS Stacja 2.0

Program do zarządzania magazynem, sprzedażą, pakowaniem, wysyłką, dostawami i dokumentami. MVP zbudowałem w 2 tygodnie, potem doszli agenci AI od wyceny i dopasowania części oraz synchronizacja sprzedaży wielokanałowej.

60%+
krótsza realizacja zamówień
10x
wzrost przychodu kanału sprzedaży
5x
szybsze katalogowanie produktów
  • Nuxt
  • PostgreSQL
  • Python
  • FastAPI
  • Electron
  • Web scraping
  • AI Agents
  • SellRocket
  • Baselinker
System ERP/WMS Stacja 2.0

Wprowadzenie

Kiedy zaczynałem w firmie, korzystała ona z przestarzałego, niededykowanego programu do zarządzania demontażem pojazdów. Przez około rok jakoś działał, miał swoje błędy, ale dawało się na nim pracować. Był jednak wolny, wyglądał archaicznie, a pakiety trzeba było dodawać osobnym narzędziem.

Zanim powstała Stacja, napisałem kilka osobnych programów, które miały po prostu współpracować ze starym systemem i przyspieszać pracę. Program do dodawania pakietów, pakowacz i program do robienia zdjęć, każdy łatał inne wąskie gardło. Wszystkie powstały w Nuxt i Electronie.

Punktem zwrotnym było Allegro. Zaczęło wymagać danych GPSR do wystawiania i edycji ofert, a stary program tego nie obsługiwał. Firma po prostu przestała wystawiać i straciła jeden z dwóch kanałów sprzedaży. To był kluczowy powód, żeby zamiast dalej łatać stary system, zbudować własny od zera.

Tak powstała Stacja. MVP zbudowałem w dwa tygodnie, żeby jak najszybciej odblokować wystawianie na Allegro. Ponieważ wcześniejsze narzędzia były już w Nuxt i Electronie, wpięcie ich w Stację 2.0 poszło gładko.

Architektura

Dziś Stacja prowadzi cały obieg firmy, od magazynu, przez sprzedaż, pakowanie i wysyłkę, po dostawy i dokumenty magazynowe.

Program działa na Electronie, dzięki czemu każdy komputer odpala własny lokalny serwer. Zdjęcia i baza są trzymane lokalnie, więc program działa nawet wtedy, gdy padnie internet. Całość ma też tryb ciemny, żeby każdy pracował tak, jak mu wygodniej.

Stacja jest też częścią większego ekosystemu narzędzi.

  • AWP, osobny program do licytacji, który dostarcza wygrane pakiety.
  • Fotki, program do robienia zdjęć części.
  • Stacja na skanery, aplikacja do odkładania i kompletacji.

Tutaj opisuję główny moduł magazynowy.

Fotki

Z poziomu Stacji można też uruchomić program „fotki” do robienia zdjęć części. Powstał, podobnie jak dodawanie i pakowacz, jeszcze przed Stacją i nadal działa jako osobny moduł, który opiszę oddzielnie.

Magazyn

Sercem programu jest sam magazyn. Mamy wybór tabel, z których czytamy dane, oraz kilka predefiniowanych widoków. Każde ustawienie zapisuje się per użytkownik, a kolumny każdy układa po swojemu.

  • Zmiana kolejności i ukrywanie zbędnych kolumn.
  • Filtr na każdej kolumnie z osobna.
  • Sortowanie i zmiana szerokości.
  • Podgląd zdjęcia części po kliknięciu w wiersz (lewy dolny róg).
  • Eksport całości jednym przyciskiem.

Tabela magazynu: ponad 22 000 części w jednym widoku, z konfigurowalnymi kolumnami i podglądem zdjęć.

Mamy obecnie ponad 22 000 części. Wyrenderowanie tylu wierszy zwykłym v-for potrafiłoby zaciąć cały program, dlatego użyłem Clusterize. W drzewie DOM żyje tylko około 50 wierszy widocznych na ekranie, a reszta dorysowuje się w locie podczas przewijania.

22 000+ części w jednym widoku, a przeglądarka maluje naraz tylko ~50 wierszy. Lista zostaje płynna, a filtrowanie działa natychmiast.

Tu też zaznaczysz produkty, na przykład te, które leżą na magazynie od dwóch lat, i przecenisz je o zadany procent.

Szczegóły produktu

Każdy produkt ma rozbudowany modal, który zbiera wszystkie dane w jednym miejscu.

  • Nazwa, cena, strona montażu, numer fabryczny, kolor, przebieg, stan i lokalizacje.
  • Ilość przyjęta, wydana i pozostała oraz koszt magazynowy.
  • Wymiary i masa (długość, szerokość, wysokość).
  • Kod kreskowy (używany w wersji na skanery).
  • Opis i wewnętrzna notatka, na przykład o defekcie.
  • W rogu informacja, kto i kiedy dodał część.

Szczegóły produktu ze zdjęciami, które można przestawiać, obracać i przycinać. Poprawki od razu trafiają na marketplace'y.

Z prawej strony siedzą zakładki.

  • Zdjęcia, wszystkie fotki części. Można zmienić kolejność, przyciąć, obrócić i usunąć.
  • Pasuje do, dopasowanie do modeli aut. Im więcej dopasowań, tym lepsza wyszukiwalność.
  • Numery, inne numery tej samej części (kilka identycznych części potrafi mieć różne numery).
  • Historia, pełna oś czasu części, czyli dodanie, zdjęcia, odłożenie, sprzedaż, podniesienie z magazynu i spakowanie.

Zakładka dopasowań: auto dawcy oraz wszystkie modele, do których część pasuje, dobierane z bazy ponad 70 000 pojazdów.

Po zapisaniu zmiany (zdjęcia, opisy i parametry) od razu lecą na oferty na marketplace'ach.

Lokalizacje

W firmie jest kilka magazynów. Dzięki tej zakładce można sprawdzić, co znajduje się na danej półce.

Inwentaryzacja

Zwykła inwentaryzacja. Można sprawdzić, które lokalizacje zostały już przeliczone i z jakim wynikiem, czyli ile części wyszło na plus, a ile na minus.

Dodawanie

Dodawanie powstało jeszcze przed Stacją, jako osobne narzędzie do starego programu, a potem weszło do Stacji 2.0. Tutaj pracuje agent AI, którego zbudowałem według tego samego wzorca, co agentów dla klientów. LLM jest mózgiem, agent dostaje narzędzia, czyli dostęp do naszej bazy, scraping i porównanie cen, i sam decyduje, czego użyć, żeby uzupełnić pola wymagane do dodania części.

Dodawanie części: agent AI uzupełnia numery zamienne, nazwę i dopasowania, a następnie sugeruje cenę.

Pracownikowi wystarczy numer OE odczytany z części. Po kliknięciu ikonki żarówki agent rusza po kolei.

  1. Sprawdza bazę. Jeśli część już była na magazynie, uzupełnia znane pola.
  2. Odpala scraping. Szuka nazwy, numerów zamiennych, dopasowań do pojazdów i cen na wielu stronach naraz.
  3. Porządkuje dane przez LLM. DeepSeek mapuje pobrane nazwy na nasz słownik, a z bazy ponad 70 000 pojazdów wybiera tylko pasujące modele. Najpierw zawężam markę, żeby nie przekroczyć kontekstu modelu.
  4. Analizuje ceny. Na podstawie cen ze scrapingu proponuje własną, a po dodaniu części od razu drukuje etykietę z kodem kreskowym.

Paru rzeczy agent nie zrobi za pracownika. Wymiary części trzeba zmierzyć i wpisać ręcznie, bo nie ma ich w żadnym źródle, a dalej potrzebuje ich pakowacz. Opis skleja się z gotowych szablonów zależnie od uzupełnionych pól, ale można dopisać coś od siebie. Przyciskami do marketplace'ów pracownik szybko sprawdzi, czy cena zaproponowana przez agenta trzyma się rynku. Jeśli część była już w bazie, widać jej dotychczasową cenę. Można też skopiować wiersz, ponownie wydrukować etykietę i zaktualizować starą, nieaktualną cenę.

Dzięki agentowi pięciokrotnie zwiększyłem tempo dodawania części i zdjąłem z ludzi ręczne szukanie po stronach.

Magazyn pakietów

Towar pochodzi z pakietów wygrywanych na licytacjach, co obsługuje osobny program (AWP). Raz dziennie Stacja zaciąga wygrane pakiety i przetwarza je, wyciągając numery OE i ilości. Dalej pakiet idzie ścieżką dokumentów.

  1. Trafia do magazynu pakietów i czeka na przyjęcie, nieprzyjętego nie da się dodawać.
  2. Przyjęcie generuje dokument PZ → dopiero teraz można dodawać zawartość.
  3. Po dodaniu wszystkiego pracownik zamyka pakiet → powstają RW i PW.
  4. Część rusza dalej, na zdjęcia (program „fotki”) i na odłożenie (Stacja na skanery).

Sprzedaż i wysyłka

W Stacji można zarządzać każdą ofertą oddzielnie i ręcznie, czyli zmieniać jej stan, ilość i cenę. Program jest też w pełni połączony z systemami OMS (wcześniej Baselinker, obecnie SellRocket). Gdy pojawi się zamówienie, Stacja automatycznie zrzuca tę część ze stanu i edytuje pozostałe oferty, tak żeby nie sprzedać tej samej części dwa razy. Zamówienia trafiają na listę „Do zebrania” i na skanery, gdzie pracownicy kompletują je z magazynu.

Lista „Do zebrania”: zamówienia pobierane automatycznie z systemu OMS, gotowe do kompletacji i widoczne na skanerach.

Pakowacz

Pakowacz też powstał jeszcze przed Stacją, jako osobny program w Nuxt i Electronie, więc wpięcie go nie było problemem. Po zeskanowaniu kodu kreskowego z zamówienia rusza pakowanie.

  1. Program podpowiada, jak ułożyć części (gdy jest ich kilka) i którego kartonu użyć, na podstawie wymiarów z dodawania.
  2. Pracownik wpisuje wymiary gotowej paczki.
  3. Pojawiają się opcje wysyłki, z cenami liczonymi przez API każdego kuriera z umową, albo jedna wymuszona w zamówieniu, albo wszystkie, z automatycznym wyborem najtańszej.
  4. Drukuje się etykieta, a metoda dostawy ląduje w systemie OMS.

Pakowacz: podpowiedź kartonu na podstawie wymiarów części i automatyczny wybór najtańszej wysyłki.

Wydania

Wszystkie wydania to sprzedaż części z datą albo jej złomowanie. Mamy je w jednym miejscu, więc widać dokładnie, co i kiedy opuściło magazyn.

Dokumenty magazynowe

Dokumenty generują się automatycznie w trakcie pracy.

  • PZ, przy przyjęciu pakietu.
  • RW i PW, przy zamknięciu pakietu.
  • WZ, przy sprzedaży, po wygenerowaniu faktury lub paragonu.
  • Korekta WZ, przy zwrocie.

Raporty i administracja

Są trzy różne raporty.

  • Okresowy, wysyłany codziennie na maila. Pokazuje sprzedaż, dodane części i zrobione zdjęcia na wykresie w czasie, z porównaniem do innych dni i podziałem na pracowników.
  • Ogólny, wszystko od początku firmy. Wszystkie pakiety, ile z każdego się wyprzedało i czy przyniósł już zysk.
  • Wiek części, pokazuje, jak stare są części na magazynie. Jeśli zaczyna zalegać ich za dużo, to sygnał, że czas na promocję.

Raport ogólny: rentowność pakietów i kluczowe metryki od początku działalności.

Panel admina

Panel admina pokazuje, kto i o której się zalogował, ile pracuje i co robi w danym momencie. Czas jest podzielony na czynności, dzięki czemu łatwiej planować pracę.

  • Dodawanie, ile potrwa dodanie kolejnego pakietu z podobnymi częściami.
  • Pakowanie, czy dorzucić więcej osób, żeby zdążyć z wysyłkami.
  • Odnoszenie, kto ile odłożył.
  • Zdjęcia, postęp robienia fotek.

Panel admina: czas pracy i status pracowników z podziałem na czynności.

Aktualności

Po zalogowaniu pracownik trafia na ekran aktualności. To miejsce na posty osób, które chcą coś przekazać reszcie zespołu, czyli uwagi, ustalenia i bieżące informacje. Pod postami można dodawać komentarze i łapki, a u góry od razu widać, ile pakietów czeka jeszcze na zamknięcie.

Podsumowanie

W jednym projekcie spięło się naprawdę dużo elementów, od scrapingu, przez wywołania modeli LLM, pobieranie zamówień z systemów OMS, dokumenty magazynowe i pakowanie z doborem kuriera, aż po przeniesienie danych ze starego systemu. Najważniejsze efekty zebrałem poniżej.

  • Legacy zastąpione jednym systemem, a sprzedaż odblokowana dzięki MVP w dwa tygodnie.
  • Pięciokrotnie więcej dodawanych części dzięki agentowi AI, bez ręcznego szukania po stronach.
  • Tabela 22 000 części chodzi płynnie dzięki Clusterize.
  • Sprzedaż w pełni zautomatyzowana, ze stanami i zamówieniami zsynchronizowanymi z OMS oraz pakowaniem z automatycznym doborem kartonu i najtańszej wysyłki.
  • Działa offline dzięki lokalnemu serwerowi na Electronie.

Najmocniejsza lekcja z tego projektu jest taka, że największą wartość dało nie samo postawienie systemu, tylko wpięcie AI dokładnie tam, gdzie zdejmowało z ludzi najnudniejszą i najbardziej powtarzalną pracę, i zrobienie tego tak, żeby zespół zaufał temu na produkcji.