Wróć do case studies

Faktura przychodzi w nocy. Rano na skrzynce leży lista rozbieżności

Cały silnik automatyzacji stoi na firmowym serwerze klienta, a baza ERP nigdy nie zostaje wystawiona do internetu. System sam pobiera faktury ze skrzynki, porównuje każdą pozycję z zamówieniem w Comarch ERP Optima i zgłasza różnice w cenie, numerze zamówienia i kaucji.

MOTO-REMO Burzyńscy Sp. k. · Dystrybucja i regeneracja turbosprężarek · Iława
u klienta
cały silnik automatyzacji, bez cudzej subskrypcji
tylko odczyt
uprawnienia konta sięgającego do bazy ERP
każda
pozycja faktury sprawdzana, nie tylko suma

Kontrola, na którą nigdy nie było czasu

Moto-Remo sprzedaje, regeneruje i serwisuje turbosprężarki. Kupuje bezpośrednio od producentów, a sprzedaż i magazyn prowadzi w Comarch ERP Optima. Firma składa zamówienie po ustalonej cenie, a fakturę dostaje kilka tygodni później. Między jednym a drugim cena może się zmienić, może dojsć kaucja za rdzeń, a numer zamówienia może zostać przepisany inaczej.

Kontrola wyglądała wtedy tak: ktoś otwierał PDF, odczytywał numer zamówienia i indeks, wchodził do Optimy, znajdował zamówienie, porównywał cenę, i to samo dla każdej kolejnej pozycji.

Jest powtarzalne i objętościowe

Faktury przychodzą przez cały miesiąc, część w paczkach po kilka naraz, a każda potrafi mieć kilkanaście pozycji.

Jest nużące, więc podatne na błędy

Porównywanie kolumn liczb to dokładnie ta praca, przy której człowiek po dwudziestej minucie przestaje patrzeć uważnie.

Błąd jest kosztowny i cichy

Niezauważona podwyżka ceny jednostkowej albo doliczona kaucja nie wywołują żadnego alarmu. Po prostu zostają zapłacone.

Nikt tego nie robił na bieżąco

Kontrola co do zasady odbywała się wyrywkowo, bo na pełną nie było czasu.

Do tego przeszkody czysto techniczne. Dane zamówień siedzą w bazie SQL Server na serwerze w firmie, niedostępnej z zewnątrz. Trzej dostawcy mają trzy różne układy dokumentu i trzy konwencje zapisu numeru zamówienia.

Wszystko stoi u klienta

To była pierwsza decyzja projektowa, nie ozdobnik doklejony na końcu. Bazy Optimy nie wolno było otworzyć na świat, a firma nie chciała, żeby kontrola jej faktur zależała od cudzej subskrypcji.

Baza ERP nie jest wystawiona na zewnątrz

Skrypt czytający Optimę działa lokalnie na firmowym serwerze i łączy się z bazą przez ODBC. Nic nie sięga do tej bazy przez internet, więc nie ma czego atakować z zewnątrz.

Konto wyłącznie do odczytu

System loguje się do bazy użytkownikiem bez uprawnień do zapisu. Nie ma technicznej możliwości zmiany czegokolwiek w ERP, nawet w razie błędu w kodzie.

Silnik automatyzacji na firmowym serwerze

n8n działa na serwerze Windows klienta, pod własną domeną, obok skryptów i folderu z fakturami. Nie ma zewnętrznej usługi pośredniczacej, na której subskrypcji opierałby się cały proces.

Panel za Cloudflare Zero Trust

Panel administracyjny nie jest wystawiony do internetu bez ochrony. Wejście wymaga uwierzytelnienia, a integracje maszynowe korzystają z osobnych tokenów serwisowych.

Wąski zakres nasłuchu poczty

Automatyzacja reaguje wyłącznie na wiadomości z domen trzech dostawców i o określonych tematach. Reszta korespondencji firmowej jest dla systemu niewidoczna.

Konta i klucze należą do klienta

Usługi zewnętrzne działają na kontach firmy, nie wykonawcy, a poświadczenia są trzymane poza treścią procesów. Zakończenie współpracy nie odcina dostępu do niczego.

Uczciwie o granicy tego rozwiązania. Z serwera wychodzą dwie rzeczy. Do arkusza pośredniego trafiają wyłącznie te pola zamówień, które są potrzebne do porównania, wybrane celowanym zapytaniem, a nie zrzutem bazy. Treść faktury jest wysyłana do modelu językowego, który zamienia PDF na listę pozycji. Poza tym proces nie opuszcza firmowej infrastruktury.

Co system robi z jedną fakturą

Baza ERP jest wewnątrz sieci firmowej i nie wolno jej wystawiać do internetu, więc dane tylko z niej wychodzą. Poczta jest usługą zewnętrzną, a logika porównania zmienia się najczęściej ze wszystkich trzech warstw, bo to ona uczy się kolejnych wyjątków.

Zgodne

Pozycja odnaleziona w ERP, cena się zgadza. Wiersz trafia do rejestru i nikt nie jest powiadamiany.

Brak dopasowania

Numeru zamówienia lub indeksu produktu nie ma w ERP. Sygnał, że coś zamówiono poza systemem albo numer zapisano inaczej.

Niezgodność kwot

Zamówienie odnalezione, ale cena na fakturze różni się od ceny w ERP. Podane są obie wartości.

Zmiana ceny historycznej

Cena zgadza się z zamówieniem, ale jest inna niż przy poprzednim zakupie. To nie błąd, tylko sygnał do działu zakupów.

Kaucja

Faktura zawiera kaucję za rdzeń, której nie oczekiwano, albo nie zawiera tej, której się spodziewano.

Rozróżnienie między niezgodnością a zmianą historyczną jest tu sednem. Pierwsze to błąd do reklamacji u dostawcy. Drugie to informacja handlowa: producent podniósł cenę, więc trzeba przeliczyć własną marżę. Wrzucenie obu do jednego worka alert sprawiłoby, że po tygodniu nikt by tych maili nie czytał.

Dlaczego to trudniejsze, niż wygląda

Opis porównaj cenę z faktury z ceną z zamówienia brzmi na jedno popołudnie pracy. Nie jest, i warto wiedzieć dlaczego, bo dokładnie te same pułapki czekają w każdym podobnym procesie.

Każdy dostawca zapisuje numer zamówienia gdzie indziej

U jednego numer jest w nagłówku, a przy fakturze wielopozycyjnej powtarza się przy każdym wierszu. U drugiego siedzi w ramce, poprzedzony literą i ukośnikiem, które trzeba odciąć. U trzeciego obowiązuje aż do następnego wystąpienia, a wiersze bez niego trzeba pominąć.

Cena to nie jedna liczba

Na fakturze bywa cena za sztukę i wartość pozycji, a w ERP raz tak, raz tak. Bez uwzględnienia tego każda pozycja z liczbą sztuk większą niż jeden zgłasza fałszywy alarm. Do tego waluty obce przeliczane po kursie z dnia dokumentu.

Indeksy produktów bywają zapisywane niekonsekwentnie

Ten sam produkt potrafi występować w dwóch wariantach zapisu, różniących się jedną cyfrą. System normalizuje kody i dopuszcza dopasowanie częściowe, bo inaczej odrzucałby prawidłowe pozycje.

Kaucja za rdzeń jest ukryta w klauzuli prawnej

Informacja o kaucji nie jest osobnym polem. To akapit drobnym drukiem pod pozycją. Model rozpoznaje tę klauzulę i zamienia ją na flagę, zestawianą z tabelą oczekiwanych kaucji.

Porównywanie liczb wymaga tolerancji

Kwoty są porównywane z dokładnością do grosza, a nie na równość. Banał, o którym łatwo zapomnieć i produkować alarmy przy różnicy rzędu setnych części grosza.

Reguły nie powstają przy biurku

Żadnej z nich nie da się wymyślić z góry. Wszystkie powstały z rozmów z działem zakupów i z przeglądania prawdziwych faktur, jedna po drugiej.

Efekt

Co się zmieniło w praktyce

  • Każda faktura od trzech kluczowych dostawców jest sprawdzana automatycznie, a nie wyrywkowo.
  • Rozbieżność trafia do właściwej osoby mailem, zwykle zanim ktokolwiek zdąży otworzyć PDF.
  • Zmiany cen u producentów są wychwytywane w momencie ich wystąpienia, a nie przy okazji rocznego przeglądu marż.
  • Powstał kompletny rejestr kontroli: każda sprawdzona pozycja z datą, statusem i plikiem źródłowym.

Co klient dostał

  • Dwie automatyzacje w n8n na własnej instancji: przechwytywanie faktur i agent porównujący.
  • Arkusz kontrolny stanowiący pełną ścieżkę audytu.
  • Powiadomienia mailowe o rozbieżnościach oraz raport Excel dla zmian cen i kaucji.
  • Monitoring dostępności instancji.

Stack

Źródło danych o zamówieniach
Comarch ERP Optima na SQL Server
Dostęp do bazy
konto wyłącznie do odczytu
Most do ERP
Python, ODBC, Harmonogram zadań
Warstwa pośrednia
Google Sheets
Orkiestracja
n8n, self-hosted u klienta
Odczyt faktur
model językowy OpenAI
Dostęp i bezpieczeństwo
Cloudflare Zero Trust
Czas trwania
styczeń 2026 → marzec 2026

Gdzie w Twojej firmie ktoś porównuje dwie kolumny liczb?

Najlepsi kandydaci do automatyzacji rzadko wyglądają efektownie. To zwykle zadania powtarzalne, nudne i takie, w których błąd nie robi hałasu, tylko po cichu kosztuje. Jeśli ktoś u Ciebie regularnie zestawia dokument z systemem, prawdopodobnie da się to zrobić tak, żeby człowiek oglądał wyłącznie przypadki, które faktycznie tego wymagają.

Umów bezpłatną konsultację

Copyright © 2025 FlowSync

instagram iconyoutube iconfacebook icontiktok icon