Technologie: Laravel 12, React, React Native (Expo), Electron, PostgreSQL, Docker
Wdrożenie dedykowanego systemu magazynowo-sprzedażowego, który zastąpił Excele i ręczne przepisywanie stanów – jedno źródło prawdy dla magazynu centralnego i wszystkich punktów sprzedaży, z aplikacją webową, mobilną i desktopową działającą na tym samym API.
Liczby projektu
- 3 platformy – web, mobile (iOS/Android), desktop (Windows/macOS) w pełnym parytecie
- 1 API – jedno REST API
/api/v1obsługuje wszystkie trzy aplikacje - 100% operacji punktu sprzedaży objętych systemem – od przyjęcia dostawy po paragon
- Offline – sprzedaż działa bez internetu, dane synchronizują się po powrocie sieci
Wyzwanie
Firma odzieżowa prowadząca magazyn centralny i sieć punktów sprzedaży zarządzała towarem w arkuszach kalkulacyjnych i papierowych zestawieniach. Stany magazynowe w punktach rozjeżdżały się ze stanem faktycznym, zamówienia towaru z punktów do magazynu chodziły telefonicznie i mailowo, a sprzedaż internetowa (PrestaShop) była osobnym, ręcznie aktualizowanym światem.
Problemy, które klient zgłosił na starcie:
- Rozjazd stanów – ten sam towar „istniał" w Excelu i nie istniał na półce; brak kontroli nad tym, kto i kiedy zmienił stan.
- Zamówienia towaru bez obiegu – punkt prosił o towar telefonicznie, magazyn nie miał kolejki ani historii decyzji.
- Podwójna praca przy e-commerce – każdą zmianę ceny i stanu trzeba było wprowadzić drugi raz w sklepie internetowym.
- Dokumenty poza systemem – faktury VAT i etykiety kurierskie wystawiane ręcznie, w oderwaniu od sprzedaży.
- Brak ograniczeń per punkt – każdy widział wszystko, nie było ról ani zakresu danych.
- Zero danych do decyzji – żadnego raportu dziennego, żadnej analizy sprzedaży.
Przed i po
| Przed | Po |
|---|---|
| Excel i papierowe zestawienia | Jedno źródło prawdy dla wszystkich punktów |
| Ręczne przepisywanie stanów | Stany schodzą automatycznie przy sprzedaży |
| Zamówienia towaru telefonicznie | Obieg punkt → magazyn ze statusami i historią |
| PrestaShop aktualizowany osobno | Automatyczna synchronizacja katalogu i stanów |
| Faktury i etykiety wystawiane ręcznie | Faktura VAT i przesyłka InPost z poziomu sprzedaży |
| Każdy widzi wszystko | Role hierarchiczne + zakres danych per punkt |
| Brak raportów | Raport dzienny, kasa i analityka z wykresami |
| Praca tylko przy komputerze | Web, telefon i stanowisko desktopowe – ten sam zakres |
Rozwiązanie
Zbudowaliśmy dedykowany system w architekturze Laravel + React, gdzie backend od pierwszego dnia jest czystym REST API. Dzięki temu ta sama logika biznesowa obsługuje aplikację webową, mobilną i desktopową – bez duplikowania kodu i bez rozjazdu zachowań między platformami.
Architektura systemu
- Warstwa API (Laravel 12, PostgreSQL) – logika biznesowa w serwisach domenowych, operacje na stanach wyłącznie przez lockowany
StockService(brak oversell, brak stanu ujemnego), soft delete i audit log na każdej istotnej operacji. - Warstwa operacyjna (web, React + TypeScript) – katalog, magazyn, zamówienia towaru, sprzedaż ze skanerem, kasa, dokumenty i raporty.
- Warstwa mobilna (React Native / Expo) – pełny parytet z webem plus tryb offline: kolejka operacji w lokalnej bazie SQLite i synchronizacja po odzyskaniu sieci.
- Warstwa stanowiska (Electron) – ta sama aplikacja web jako renderer, plus obsługa sprzętu (skaner kodów jako HID, drukarka etykiet), tryb offline i wymuszona aktualizacja.
- Warstwa integracji – PrestaShop, Fakturownia, InPost, GUS/VIES i kursy NBP, z logiem każdego wywołania i testem połączenia w panelu administratora.
Bezpieczeństwo jako fundament, nie dodatek
Model uprawnień był projektowany razem ze schematem bazy, a nie doklejany później:
- Role hierarchiczne – administrator, kierownik magazynu, kierownik punktu, kasjer, obsługa; każda wyższa rola zawiera uprawnienia niższych.
- Scoping danych per punkt egzekwowany po stronie serwera – punkt nie widzi i nie może zmienić danych innego punktu, niezależnie od tego, co wyśle klient.
- Audit log i soft delete – każde usunięcie jest odwracalne i wiadomo, kto je wykonał.
- Pieniądze liczone wyłącznie na serwerze – ceny, rabaty i VAT nigdy nie pochodzą z aplikacji klienckiej.
Jedno API, trzy aplikacje. Każda reguła biznesowa – od blokady oversellu po naliczanie VAT – istnieje w kodzie dokładnie raz. Aplikacje web, mobilna i desktopowa są tylko różnymi interfejsami do tej samej logiki, więc nie ma sytuacji, w której „na telefonie liczy inaczej niż na komputerze".
Proces wdrożenia
Projekt realizowany przyrostowo, w 6 etapach – każdy kończył się działającą, demonstrowalną wersją i tygodniem testów po stronie klienta.
- Etap 1 – fundament operacyjny. Role i uprawnienia, magazyn centralny i magazyny punktów, katalog (kategorie, atrybuty, cechy, warianty), stany, zamówienia towaru, sprzedaż ze skanowaniem kodów, raport dzienny.
- Etap 2 – rozszerzenia. Import OCR dokumentów, obsługa skaz i reklamacji ze zdjęciami, druk etykiet z kodami kreskowymi, kasa dzienna, waluty wg kursu NBP.
- Etap 3 – integracje. PrestaShop (katalog, ceny, stany, kategorie, rozmiary), Fakturownia (faktury VAT), InPost (przesyłki i etykiety), GUS (dane kontrahenta).
- Etap 4 – aplikacja mobilna. Skanowanie, stany, odbiór zamówień, zgłoszenia skaz; UI zaprojektowane pod obsługę jedną ręką.
- Etap 5 – pełny parytet mobilny. Sprzedaż, faktury, raporty i tryb offline.
- Etap 6 – aplikacja desktopowa. Electron, obsługa sprzętu stanowiska, tryb offline i wymuszona aktualizacja wersji.
Wyzwania przed wdrożeniem systemu magazynowo-sprzedażowego
W sieci sklepów odzieżowych koszt braku danych jest natychmiastowy: towar, którego „nie ma w systemie", nie sprzedaje się, a towar, który jest w systemie, ale nie na półce, generuje anulowane zamówienia internetowe. Arkusze kalkulacyjne radzą sobie do momentu, w którym punktów jest więcej niż jeden, a asortyment ma warianty rozmiarowe i kolorystyczne – wtedy liczba kombinacji rośnie szybciej niż zdolność do ręcznego ich pilnowania.
Drugim progiem jest sprzedaż wielokanałowa. Dopóki sklep internetowy jest utrzymywany osobno, każda operacja wykonywana jest dwa razy – i prędzej czy później jedna z nich zostaje pominięta.
Szybki test: jeśli ta sama zmiana stanu albo ceny musi być wpisana w więcej niż jednym miejscu, masz już rozjazd danych – tylko jeszcze o tym nie wiesz. Więcej o tym, kiedy arkusze przestają wystarczać, piszemy w artykule Kiedy Excel przestaje wystarczać.
Jak działa dedykowany system do zarządzania magazynem i sprzedażą
- Kasjer – skanuje kod, dodaje do koszyka, wybiera walutę i formę płatności (również płatność dzielona: gotówka + karta + przelew), wystawia paragon albo fakturę VAT i – jeśli to wysyłka – od razu tworzy przesyłkę InPost z etykietą.
- Kierownik punktu – otwiera i zamyka zmianę kasową, pilnuje bilansu i różnicy, zamawia towar z magazynu centralnego, zgłasza skazy i reklamacje ze zdjęciami.
- Kierownik magazynu – obsługuje kolejkę zamówień z punktów, przyjmuje dostawy, prowadzi katalog i zarządza stanami magazynu centralnego.
- Administrator – konfiguruje integracje, role, punkty i ustawienia obiegu akceptacji, ma wgląd w audit log i logi wywołań integracji.
Pełna kontrola nad towarem i sprzedażą bez dzwonienia po punktach.
Zakres wdrożenia i integracje
- PrestaShop – synchronizacja produktów, cen, stanów, kategorii i rozmiarów; aplikacja jest źródłem prawdy, sklep internetowy miejscem sprzedaży.
- Fakturownia – automatyczne faktury VAT, korekty, serie numeracji per punkt.
- InPost – przesyłki paczkomatowe i kurierskie z etykietą generowaną z poziomu sprzedaży.
- GUS / VIES – pobieranie i weryfikacja danych kontrahenta po NIP.
- NBP – kursy walut dla sprzedaży w EUR i USD.
- Sprzęt stanowiska – skaner kodów kreskowych i drukarka etykiet (konfiguracja per punkt).
Efekty biznesowe po wdrożeniu
Eliminacja podwójnego wprowadzania danych zdjęła z pracowników godziny pracy tygodniowo i usunęła całą klasę błędów wynikających z przepisywania. Stany są spójne między punktami, magazynem centralnym i sklepem internetowym, bo zmienia je jeden mechanizm. Dokumenty sprzedażowe powstają w tym samym kroku co sprzedaż, więc nie ma zaległości na koniec dnia. Kierownictwo dostało raport dzienny i analitykę (trend sprzedaży, dni tygodnia, top produkty) zamiast zbierania danych na żądanie.
Dlaczego firma wybrała dedykowane oprogramowanie zamiast gotowego systemu
- Specyfika procesu – obieg towaru między magazynem centralnym a punktami, skazy, reklamacje B2B i przyjęcia dostaw działają u tego klienta inaczej niż w gotowych ERP; dopasowanie systemu do procesu było tańsze niż dopasowanie firmy do systemu.
- Jedno API, trzy aplikacje – gotowe rozwiązania rzadko dają spójny parytet weba, aplikacji mobilnej i stanowiska desktopowego z trybem offline.
- Pełna kontrola nad rozwojem – kolejne etapy powstają w tempie klienta, bez czekania na roadmapę dostawcy i bez opłat za użytkownika.
Rezultaty
- Jedno źródło prawdy o stanach dla magazynu centralnego, wszystkich punktów i sklepu internetowego
- Eliminacja podwójnego wprowadzania danych i całej klasy błędów z przepisywania
- Sprzedaż i dokumenty (paragon, faktura VAT, etykieta przesyłki) w jednym kroku
- Pełna kontrola dostępu – role hierarchiczne i zakres danych per punkt sprzedaży
- Praca bez przerw także przy utracie internetu dzięki trybowi offline
- Raport dzienny, rozliczenie kasy i analityka sprzedaży dostępne od ręki
- Odwracalność i rozliczalność operacji – soft delete oraz audit log
Funkcjonalności
- Katalog produktów z wariantami, atrybutami, cechami i kodami kreskowymi
- Magazyn centralny i magazyny punktów – korekty, transfery, przyjęcia dostaw
- Zamówienia towaru w obiegu punkt → magazyn lub zakup od producenta
- Sprzedaż ze skanerem: koszyk, paragony, płatność dzielona, waluty PLN/EUR/USD
- Faktury VAT (Fakturownia + lookup GUS) i przesyłki InPost z etykietą
- Kasa dzienna per punkt – otwarcie, zamknięcie, wpłaty i wypłaty, bilans i różnica
- Skazy i reklamacje B2B ze zdjęciami i kolejką akceptacji
- Import OCR – dodanie produktów lub zamówienia ze zdjęcia dokumentu
- Druk etykiet z kodami kreskowymi (drukarka konfigurowana per punkt)
- Raport dzienny i analityka z wykresami
- Integracje z PrestaShop, Fakturownią, InPost i GUS z logiem wywołań
- Aplikacja mobilna i desktopowa z trybem offline i synchronizacją
- Pełna dwujęzyczność interfejsu i komunikatów API (PL/EN), gotowa na kolejne języki
Potrzebujesz podobnego rozwiązania?
Jeśli Twoja firma prowadzi magazyn i sprzedaż w wielu punktach, a dane nadal żyją w arkuszach – opowiedz nam o swoim procesie. Zaprojektujemy system pod niego, a nie odwrotnie.
Pełny opis wdrożenia wraz z architekturą i etapami znajdziesz w case study systemu magazynowo-sprzedażowego. Zobacz też, jak wyglądał dedykowany system do zarządzania produkcją oraz inne nasze realizacje.