Tracking z CSV lub e-maila hurtowni powinien być importowany dopiero po jednoznacznym dopasowaniu do zamówienia oraz po kontroli formatu, duplikatów i braków. Najbezpieczniejszy klucz to stabilny identyfikator zamówienia przekazany wcześniej dostawcy. Dopasowanie wyłącznie po nazwisku klienta, kodzie pocztowym albo kwocie jest zbyt ryzykowne, bo te wartości mogą się powtarzać.
Najpierw zdefiniuj minimalny format danych
Plik nie musi mieć dwudziestu kolumn. Wystarczy kilka, ale ich znaczenie powinno być stałe. Jeżeli hurtownia raz wysyła numer zamówienia sklepu jako „order”, a innym razem własny numer magazynowy, automat zacznie zgadywać.
| Pole | Znaczenie | Czy wymagane |
|---|---|---|
| store_order_id | identyfikator zamówienia sklepu | tak |
| supplier_order_id | identyfikator po stronie hurtowni | zalecane |
| tracking_number | numer przesyłki | tak |
| carrier | przewoźnik lub kod usługi | zalecane |
| shipped_at | czas faktycznej wysyłki, jeśli dostępny | zalecane |
| package_no | numer paczki przy wielopaczkowości | opcjonalne |
Jeśli hurtownia wysyła tracking e-mailem, pierwszym krokiem powinno być ustandaryzowanie wiadomości do tego samego modelu danych. Parsowanie dowolnej treści naturalnego e-maila bez reguł jest podatne na błędy.
Dopasowanie trackingu do zamówienia: hierarchia kluczy
- Dokładny store_order_id. Najpewniejszy wariant, jeśli przekazujesz go dostawcy.
- Mapowanie supplier_order_id → store_order_id. Dobre, jeśli zapisujesz numer hurtowni po utworzeniu zamówienia.
- Złożony klucz awaryjny. Np. e-mail + kod pocztowy + data + SKU, ale tylko do kolejki ręcznej, nie do automatycznego zatwierdzenia.
- Nigdy samo nazwisko. Powtarzalne dane klienta nie są identyfikatorem technicznym.
Waliduj numer przed aktualizacją statusu
Numer trackingowy powinien zostać oczyszczony z przypadkowych spacji i znaków, ale nie wolno z góry zakładać, że składa się wyłącznie z cyfr. Różni przewoźnicy używają różnych formatów. Zamiast globalnej reguły warto mieć walidację zależną od przewoźnika lub przynajmniej kontrolę długości i niedozwolonych znaków.
Sam poprawny format nie dowodzi wysyłki. Jeżeli system przewoźnika udostępnia status, tracking może później przejść przez stan etykiety utworzonej i pierwszy skan. To odrębny problem opisany w procesie braku numeru śledzenia i eskalacji do hurtowni.
Jak wykrywać duplikaty?
Duplikat może mieć kilka znaczeń. Ten sam numer może przyjść drugi raz w kolejnym pliku — to zwykłe powtórzenie i import powinien być idempotentny. Gorzej, gdy ten sam tracking pojawia się dla dwóch różnych klientów albo dwa różne trackingi są podawane dla tej samej paczki.
- ten sam order_id + ten sam tracking: zignoruj jako bezpieczne powtórzenie;
- ten sam order_id + nowy tracking: sprawdź, czy to druga paczka czy korekta;
- różne order_id + ten sam tracking: alarm, chyba że zamówienia zostały celowo skonsolidowane;
- tracking pusty lub techniczna wartość typu „N/A”: nie zmieniaj statusu;
- tracking zmieniony po wcześniejszym pierwszym skanie: wysoka ostrożność, potrzebna historia zmian.
Import nie powinien być jedną transakcją „wszystko albo nic”
Dobrze zaprojektowany importer przetwarza każdy wiersz osobno i na końcu zwraca raport. Poprawne rekordy mogą przejść, a błędne trafić do kolejki. Dzięki temu jedna literówka w wierszu 514 nie blokuje 513 poprawnych trackingów.
| Wynik rekordu | Co robi system |
|---|---|
| matched + valid | zapisuje tracking i log zdarzenia |
| matched + duplicate identical | pomija bez ponownego wysyłania maila |
| matched + conflicting tracking | kolejka do weryfikacji |
| not matched | kolejka „brak zamówienia” |
| invalid format | kolejka „tracking do sprawdzenia” |
Co zapisać w logu?
Po kilku tygodniach najważniejsze pytanie brzmi nie „jaki tracking mamy?”, lecz „skąd on się wziął?”. Zapisuj nazwę pliku lub identyfikator e-maila, czas importu, oryginalną wartość, wynik normalizacji i identyfikator użytkownika albo procesu, który zatwierdził wyjątek. Log pozwala odtworzyć błąd bez zgadywania.
Nie wysyłaj klientowi pięciu wiadomości po ponownym imporcie
Warstwa komunikacji powinna reagować na zmianę stanu, nie na sam fakt przetworzenia wiersza. Jeżeli tracking był już zapisany, ponowny import identycznego pliku nie może uruchomić drugiego e-maila „Twoja paczka została wysłana”. To ta sama zasada idempotencji, która chroni system przy powtarzających się webhookach.
Jeżeli importowane dane dotyczą części zamówienia, system powinien wiedzieć, które SKU obejmuje paczka. W przeciwnym razie klient może dostać informację sugerującą wysłanie całego koszyka. Przydatna jest tu procedura częściowej wysyłki i komunikacji o drugim produkcie.
Minimalny workflow automatyczny
- Odbierz plik lub e-mail do kontrolowanej skrzynki.
- Zamień dane na jeden wewnętrzny format.
- Dopasuj rekord po stabilnym identyfikatorze.
- Zweryfikuj tracking i przewoźnika.
- Sprawdź duplikat lub konflikt.
- Zapisz zmianę i log.
- Wyślij komunikat tylko, jeśli status faktycznie przeszedł do nowego stanu.
- Wygeneruj raport braków i konfliktów.
FAQ
Czy można dopasować tracking po adresie klienta?
Adres może być sygnałem pomocniczym, ale nie powinien samodzielnie zatwierdzać importu. Ten sam klient może mieć kilka zamówień, a adres bywa korygowany.
Co zrobić, gdy w jednej komórce są dwa numery?
Rozbij rekord zgodnie z udokumentowanym formatem i ustal, czy to dwie paczki tego samego zamówienia. Nie łącz numerów w jeden ciąg.
Jak uniknąć ponownego maila po imporcie tego samego CSV?
Nadaj zmianom idempotentną logikę: jeśli numer i stan są już zapisane, rekord nie tworzy nowego zdarzenia klienta.
