Case Study: Automatyzacja przetwarzania dokumentów logistycznych dla firmy FMCG - File to order

Wyzwanie

Europejska firma z branży FMCG działająca na polskim rynku poświęcała znaczną część czasu pracowników na ręczne przepisywanie dokumentów logistycznych do formatów wymaganych przez operatora 3PL — firmę Raben. Proces obejmował dwa kluczowe obiegi:

Zamówienia wychodzące — firma otrzymuje zamówienia zakupowe od swoich partnerów handlowych. Każdy partner wysyła zamówienia w zupełnie innym formacie: jedni jako arkusze Excel, inni jako pliki PDF, a jeden jako pliki tekstowe. Każde zamówienie musiało być ręcznie przepisane do ustandaryzowanego 48-kolumnowego szablonu Raben, zanim można było zaplanować wysyłkę.

Dostawy przychodzące — awiza dostawcze od dostawcy przychodziły jako dwujęzyczne dokumenty PDF o złożonej zagnieżdżonej strukturze: bloki produktów zawierające wiele partii, każda z własną datą przydatności i liczbą kartonów. Dane te musiały być przetworzone do 21-kolumnowego szablonu Raben.

Kluczowe problemy

  • 25+ różnych formatów wejściowych — każdy partner handlowy stosuje własny układ dokumentu, nazewnictwo kolumn, identyfikatory produktów i formaty dat
  • Ręczne tłumaczenie kodów SKU — kody produktowe klientów musiały być wyszukiwane w wewnętrznej matrycy, aby znaleźć prawidłowe kody magazynowe
  • Rozpoznawanie adresów wielu magazynów — ponad połowa partnerów dostarcza do wielu centrów dystrybucji; prawidłowy identyfikator magazynu musiał być wyszukiwany ręcznie dla każdego zamówienia
  • Przeliczanie ilości — niektórzy partnerzy raportują ilości w kartonach, inni w sztukach, co wymagało mnożenia dla każdego produktu
  • Wysoki poziom błędów — ręczne przepisywanie setek linii produktowych dziennie prowadziło do częstych pomyłek
  • Presja czasowa — terminy logistyczne wymagały przetworzenia zamówień tego samego dnia

Rozwiązanie

Zbudowałem aplikację desktopową w Pythonie, która w pełni automatyzuje oba procesy. Narzędzie działa wyłącznie na lokalnym komputerze klienta — żadne dane nie są wysyłane do zewnętrznych serwisów ani chmury.

Jak to działa

Użytkownik wrzuca pliki źródłowe do wyznaczonego folderu, klika jeden przycisk i w ciągu kilku sekund otrzymuje gotowy plik XLSX zgodny z szablonem Raben. Przetworzone pliki są automatycznie archiwizowane według daty.

Wewnętrzna logika aplikacji:

  1. Identyfikacja źródła — analiza struktury pliku, sygnatur zawartości i formatu w celu określenia, od którego z partnerów handlowych (lub dostawcy) pochodzi dokument
  2. Ekstrakcja danych — dedykowany parser dla każdego formatu odczytuje odpowiednie pola za pomocą dopasowywania wzorców, ekstrakcji tabel i logiki maszyny stanów
  3. Rozwiązywanie kodów produktowych — tłumaczenie identyfikatorów produktów specyficznych dla klienta na wewnętrzne kody SKU magazynu na podstawie matrycy danych master
  4. Rozwiązywanie adresów dostawy — dla partnerów z wieloma magazynami, system określa prawidłowy identyfikator magazynu Raben na podstawie adresu dostawy, wykorzystując wielopoziomowy mechanizm rozmytego dopasowywania (kody pocztowe, nazwy miast, kody magazynów, znormalizowane dopasowywanie tekstu)
  5. Generowanie pliku wyjściowego — zapis kompletnego, gotowego do przesłania pliku XLSX z wszystkimi wartościami stałymi, sekwencyjnymi numerami zamówień i przeliczonymi ilościami
  6. Archiwizacja — przeniesienie przetworzonych plików do folderów z datą; pliki z błędami trafiają do kolejki do weryfikacji

Wyzwania techniczne

Kryptograficzne dekodowanie PDF — system jednego z partnerów handlowych generuje pliki PDF z niestandardowym kodowaniem czcionek (CID), w którym znaki zastąpione są kodami numerycznymi. Standardowe biblioteki PDF zwracają nieczytelny tekst. Opracowałem technikę, która wykorzystuje znane wzorce tekstowe osadzone w dokumencie (ścieżki plików, numery zamówień) do automatycznej rekonstrukcji mapowania znaków — de facto metoda known-plaintext, która dekoduje dokument bez żadnej interwencji ręcznej.

Parser dwujęzycznych awiz dostawczych — dwujęzyczne awiza PDF mają zagnieżdżoną strukturę, gdzie pojedynczy produkt może obejmować wiele partii, każda z inną datą przydatności i ilościami wyrażonymi w kartonach zamiast sztuk. Parser wykorzystuje maszynę stanów do śledzenia kontekstu między wierszami i prawidłowo przelicza ilości sztuk z liczby kartonów i współczynników pakowania.

Inteligentne dopasowywanie adresów — system rozwiązywania adresów radzi sobie z realnymi problemami: polskie znaki diakrytyczne gubione przez ekstrakcję PDF (Wyszków → Wyszkow), wiele magazynów w tym samym mieście wymagające rozróżnienia po kodach magazynowych, kolizje między klientami, gdy różne firmy mają magazyny w tym samym mieście. System wykorzystuje indeksy filtrowane po kliencie ze znormalizowanym dopasowywaniem tekstu.

Dwuprocesowy GUI — przejrzysty interfejs z zakładkami pozwala pracownikom nietechnicznym przełączać się między przetwarzaniem zamówień wychodzących a dostaw przychodzących. Wbudowane zarządzanie numeracją, podgląd postępu i raportowanie błędów.

Rezultaty

Wskaźnik Przed Po
Czas przetwarzania partii 45–90 min (ręcznie) Poniżej 10 sekund
Poziom błędów Częste (ręczne przepisywanie) Bliski zeru (automatyczna walidacja)
Obsługiwane formaty Wymagana wiedza specjalistyczna W pełni automatyczna identyfikacja
Bezpieczeństwo danych Nie dotyczy 100% przetwarzanie lokalne, zero ekspozycji w chmurze
Zależność od pracownika Wymagany przeszkolony operator Każdy członek zespołu może obsługiwać

Co się zmieniło

  • Odzyskane godziny tygodniowo — to, co wcześniej pochłaniało znaczną część dnia koordynatora logistyki, teraz zajmuje sekundy
  • Eliminacja błędów ludzkich — automatyczne rozwiązywanie kodów SKU i przeliczanie ilości usunęły najczęstsze źródło pomyłek
  • Zniwelowanie tzw. 'wąskiego gardła' — wcześniej tylko jedna przeszkolona osoba mogła przetwarzać zamówienia; teraz każdy w zespole może kliknąć przycisk
  • Skalowalność — zastąpienie skomplikowanego procesu, który podczas nieobecności głównego specjalisty generował błędy, prostą automatyzacją
  • Odporność na zmiany — gdy dostawca zmienił układ swojego PDF, modularna architektura pozwoliła na celową poprawkę bez wpływu na resztę systemu

Technologia

Element Szczegóły
Język Python 3.11+
GUI Tkinter (natywny, bez przeglądarki)
Przetwarzanie PDF pdfplumber
Obsługa Excel openpyxl, xlrd
Architektura Modularny pipeline z wymiennymi parserami
Wdrożenie Lokalna aplikacja, bez serwera, bez chmury
Bezpieczeństwo danych Przetwarzanie wyłącznie na urządzeniu; dane nie opuszczają komputera

To rozwiązanie zostało zbudowane jako dedykowany projekt automatyzacji procesów biznesowych. Aplikacja działa wyłącznie na lokalnym sprzęcie klienta, co gwarantuje, że wrażliwe dane handlowe — ceny, wolumeny zamówień, relacje z klientami — nigdy nie opuszczają jego kontroli.

Scrolluj mniej & zabierz mnie na górę