(Założenia projektowe)
1. Wprowadzenie
2. Potrzeba wymiany informacji
3. Symulacja wymiany danych
4. SENT GEO a Trawers
5. Tematy powiązane
(AsystentAI)
1. Wprowadzenie
SENT a Trawers ERP. W skrócie
SENT (zgłoszenia): TAK
SENT (korekty/aktualizacje): TAK
SENT (statusy, numer referencyjny, błędy): TAK
SENT GEO (tracking GPS / ślad trasy / mapa): NIE
(to domena telematyki/TMS)
2. Potrzeba wymiany informacji
SENT chce wiedzieć jakie towary, kiedy i przez kogo będą przewożone.
A dlaczego Trawers chce informacji od SENT. ?
Trawers chce informacji od SENT po to, aby domknąć proces operacyjny i zgodności w ERP.
W praktyce, informacje z SENT są potrzebne z 5 powodów:
1) Aby mieć w ERP numer referencyjny SENT i móc go powiązać z wysyłką
Po wysłaniu zgłoszenia SENT system nadaje numer/identyfikator.
Jeśli Trawers go zapisze przy RO/wysyłce:
* wiadomo, że dana wysyłka jest zgłoszona,
* można go wydrukować/udostępnić (np. dla kierowcy, przewoźnika, działu logistyki),
* można szybko odszukać zgłoszenie po numerze SENT.
Bez tej informacji użytkownik musiałby trzymać numer 'gdzieś obok' (mail, Excel), co rodzi błędy.
2) Żeby wiedzieć, czy zgłoszenie zostało przyjęte czy odrzucone
SENT potrafi zwrócić błędy walidacji (brak danych, zły format, niespójność).
Trawers potrzebuje tej odpowiedzi, żeby:
* oznaczyć wysyłkę jako DO_POPRAWY,
* pokazać użytkownikowi konkretne braki (np. brak numeru pojazdu),
* nie dopuścić do wysyłki 'na drogę' bez poprawnego zgłoszenia (jeśli tak ustawicie proces).
3) Żeby sterować procesem magazyn-transport (workflow)
Statusy z SENT pozwalają ustawić reguły w Trawersie, np.:
* nie pozwól zamknąć wysyłki / wydrukować dokumentów transportowych, dopóki SENT nie jest przyjęty,
* zablokuj wydanie dla towarów wymagających SENT, jeśli zgłoszenie ma błąd,
* kieruj zadania do osób odpowiedzialnych (logistyka/księgowość).
Czyli: SENT -> Trawers = 'czy mogę jechać / czy mam komplet'.
4) Audyt i kontrola zgodności (ślad dowodowy)
W wielu firmach celem integracji jest możliwość wykazania:
kiedy zgłoszono, kto zgłosił, jaki był wynik, jakie były korekty, jaki numer.
Trzymanie tego w Trawersie daje:
* spójny audyt na poziomie dokumentu (RO/wysyłka),
* mniej ręcznej pracy przy kontrolach i reklamacjach.
5) Obsługa korekt i zmian 'w locie'
Jeśli po zgłoszeniu zmienia się coś istotnego (np. pojazd), to w praktyce:
* trzeba wysłać aktualizację do SENT,
* a Trawers musi wiedzieć, którego zgłoszenia dotyczy zmiana i jaki jest jego aktualny status.
Bez informacji z SENT (numeru i statusu) trudno to robić automatycznie i bez pomyłek.
Podsumowanie:
SENT zbiera dane o przewozie, a Trawers zbiera od SENT potwierdzenie i stan sprawy,
żeby użytkownicy ERP mogli bezpiecznie prowadzić proces (wydanie-wysyłka-rozliczenie) i mieć to udokumentowane.
Minimalne informacje zapisywane w Trawersie: numer SENT + status + lista błędów + historia zdarzeń.
3. Symulacja wymiany danych
Zasymuluj wymianę danych Trawers <--> SENT używając przykładowych danych
Poniżej jest symulację wymiany danych Trawers <--> SENT (PUESC) na przykładowych danych.
Nie stosuję tu oficjalnego formatu usług PUESC (to by wymagało konkretnych schematów),
dlatego pokazuję to jako czytelny pseudo-JSON/XML.
Idea, pola, kierunki i logika są takie, jak w integracjach w rzeczywistości.
0) Przykładowe dane w Trawersie (źródło: Wysyłka/Załadunek powiązana z RO)Dokument źródłowy w Trawersie
* WysyłkaID: `WYS/2026/000123`
* RO: `RO/01/2026/04567`
* Data wysyłki: `2026-01-23 10:30`
* Nadawca (firma własna): `FIRMA-PL` (NIP: `1112223344`)
* Odbiorca: `KONTR-ABC` (NIP: `5250001111`)
* Przewoźnik: `TRANS-X` (NIP: `6780009999`)
* Miejsce załadunku: Poznań, ul. Magazynowa 1
* Miejsce rozładunku: Warszawa, ul. Klienta 15
* Pojazd: `POZ 1234A` (ciągnik), naczepa `POZ 9876N`
* Kierowca: Jan Nowak (ID: `KIER/00045`)
* Pozycje (towary):
1. `OLEJ-NAP-20L` - Olej napędowy, Ilość: 2 000 L
2. `ROZPUSZ-5L` - Rozpuszczalnik, Ilość: 100 L
> W praktyce w Trawersie dobrze mieć na towarach dodatkowe pola 'SENT':
np. grupa/rodzaj towaru, kod wymagany w zgłoszeniu, jednostka raportowa, itd.
1) Krok 1: OutBound (Trawers -> Integracja SENT w Trawersie)1A. OutBound: pobranie paczki SENT dla wysyłkiRequest (wewnętrzne wywołanie w Trawersie / SOA OutBound):
```json
{
"service": "SOA.OutBound.GetShipmentForSENT",
"shipmentId": "WYS/2026/000123"
}
```
Response (dane przygotowane do mapowania na SENT):
```json
{
"shipmentId": "WYS/2026/000123",
"sourceDocument": { "type": "RO", "number": "RO/01/2026/04567" },
"plannedDeparture": "2026-01-23T10:30:00",
"parties": {
"sender": { "code": "FIRMA-PL", "nip": "1112223344", "name": "Firma PL Sp. z o.o." },
"receiver": { "code": "KONTR-ABC", "nip": "5250001111", "name": "ABC Market S.A." },
"carrier": { "code": "TRANS-X", "nip": "6780009999", "name": "Trans-X Sp. z o.o." }
},
"locations": {
"loading": { "country": "PL", "city": "Poznań", "street": "Magazynowa 1", "postalCode": "60-001" },
"unloading": { "country": "PL", "city": "Warszawa", "street": "Klienta 15", "postalCode": "00-001" }
},
"transport": {
"tractorPlate": "POZ1234A",
"trailerPlate": "POZ9876N",
"driver": { "id": "KIER/00045", "name": "Jan", "surname": "Nowak" }
},
"items": [
{ "lineNo": 1, "itemCode": "OLEJ-NAP-20L", "name": "Olej napędowy", "sentGroup": "FUEL", "qty": 2000, "uom": "L" },
{ "lineNo": 2, "itemCode": "ROZPUSZ-5L", "name": "Rozpuszczalnik", "sentGroup": "CHEM", "qty": 100, "uom": "L" }
]
}
```
2) Krok 2: Utworzenie zgłoszenia SENT (Trawers SENT/PUESC)2A. Budowa payloadu SENT (mapowanie)Przykładowy payload do wysłania (pseudostruktura zgłoszenia):
```json
{
"sentSubmission": {
"externalRef": "WYS/2026/000123",
"documentRef": "RO/01/2026/04567",
"plannedStart": "2026-01-23T10:30:00",
"sender": { "nip": "1112223344", "name": "Firma PL Sp. z o.o." },
"receiver": { "nip": "5250001111", "name": "ABC Market S.A." },
"carrier": { "nip": "6780009999", "name": "Trans-X Sp. z o.o." },
"loadingPlace": { "country": "PL", "city": "Poznań", "street": "Magazynowa 1", "postalCode": "60-001" },
"unloadingPlace": { "country": "PL", "city": "Warszawa", "street": "Klienta 15", "postalCode": "00-001" },
"vehicle": { "tractorPlate": "POZ1234A", "trailerPlate": "POZ9876N" },
"items": [
{ "pos": 1, "category": "FUEL", "name": "Olej napędowy", "quantity": 2000, "unit": "L" },
{ "pos": 2, "category": "CHEM", "name": "Rozpuszczalnik", "quantity": 100, "unit": "L" }
]
}
}
```
2B. Odpowiedź SENT (PUESC -> Trawers)Response - przyjęcie zgłoszenia i nadanie numeru referencyjnego:
```json
{
"result": "ACCEPTED",
"sentReferenceNumber": "SENT-PL-2026-0000998877",
"status": "REGISTERED",
"message": "Zgłoszenie przyjęte do obsługi",
"timestamp": "2026-01-23T10:31:12"
}
```
3) Krok 3: InBound (SENT/PUESC -> Trawers) czyli zapis zwrotny w Trawersie
Tu InBound wykonuje prace: odkłada numer SENT + status + log zdarzenia do wysyłki/dokumentu.
Request (dedykowana usługa InBound w Trawersie):
```json
{
"service": "SOA.InBound.UpdateSENTStatusForShipment",
"shipmentId": "WYS/2026/000123",
"sent": {
"referenceNumber": "SENT-PL-2026-0000998877",
"status": "REGISTERED",
"statusDate": "2026-01-23T10:31:12",
"info": "Zgłoszenie przyjęte do obsługi"
}
}
```
Efekt w Trawersie (na dokumencie Wysyłka/RO):
* Numer SENT: `SENT-PL-2026-0000998877`
* Status SENT: `REGISTERED`
* Data statusu: `2026-01-23 10:31:12`
* Log: zapis request/response (z maskowaniem danych wrażliwych, jeśli potrzeba)
4) Krok 4: Dopytanie o status (Trawers <--> SENT) i aktualizacja w Trawersie
Tu: (kody json - tylko skrótowo)
4A. Trawers -> SENT: pobranie statusu
{
"sentStatusRequest": {
"sentReferenceNumber": "SENT-PL-2026-0000998877"
}
}
4B. SENT -> Trawers: status W TRAKCIE
{
"sentReferenceNumber": "SENT-PL-2026-0000998877",
"status": "IN_PROGRESS",
"timestamp": "2026-01-23T11:05:00"
}
4C. InBound do Trawersa: aktualizacja statusu
{
"service": "SOA.InBound.UpdateSENTStatusForShipment",
"shipmentId": "WYS/2026/000123",
"sent": {
"referenceNumber": "SENT-PL-2026-0000998877",
"status": "IN_PROGRESS",
"statusDate": "2026-01-23T11:05:00"
}
}
5) Symulacja błędu walidacji (żeby było widać pełny cykl)5A. Brak wymaganego pola - np. brak numeru rejestracyjnego
np. Trawers wysyła zgłoszenie bez tractorPlate.
SENT -> Trawers (odrzucenie):
{
"result": "REJECTED",
"status": "VALIDATION_ERROR",
"errors": [
{ "code": "E_VEH_001", "field": "vehicle.tractorPlate", "message": "Brak numeru rejestracyjnego pojazdu" }
],
"timestamp": "2026-01-23T10:31:12"
}
5B. InBound: zapis błędu i ustawienie statusu DO_POPRAWY
.... nie wgrywam kodu
Efekt w Trawersie:
Status SENT: DO_POPRAWY
Lista błędów widoczna na dokumencie
Użytkownik uzupełnia numer rejestracyjny -> ponowienie wysyłki
Mini-mapa: które dane skąd i dokąd
* Trawers (dokument wysyłki/RO) -> OutBound: kontrahenci, adresy, towary, ilości, transport
* Trawers (moduł SENT) -> SENT/PUESC: zgłoszenie (payload)
* SENT/PUESC -> Trawers InBound: numer referencyjny, statusy, błędy, historia zdarzeń
* Trawers -> SENT/PUESC: odpytywanie statusu / korekty / anulowanie (jeśli w procesie)
Teraz mogę zrobić tę samą symulację w wersji czysto SOA
tj. osobno pokazać: jak wyglądałby GetShipmentForSENT, CreateSENTSubmission,
GetSENTStatus, UpdateSENTStatusForShipment).
Oraz zaproponować konkretne statusy workflow w Trawersie,
np. DO_WYSŁANIA / WYSŁANE / PRZYJĘTE / BŁĄD / DO_POPRAWY / ZAMKNIĘTE)
wraz z regułami przejść.
JD: wgrywam przykłady do .prg
4. SENT GEO a Trawers
SENT GEO
SENT GEO to moduł platformy SENT, który umożliwia przesyłanie danych geolokalizacyjnych
pojazdu przewożącego towary objęte nadzorem skarbowym.
Przewoźnik korzystający z SENT GEO musi wyposażyć pojazd w urządzenie z funkcją
przesyłania danych geolokalizacyjnych.
Ministerstwo Finansów publikuje wymogi techniczne przekazywania danych geolokalizacyjnych
środka transportu, strukturę interfejsu SENT GEO i określa sposób przekazywania danych.
Funkcje geolokalizacji (mapa, ślad GPS, geofencing) nie są częścią Trawers ERP -
to obszar telematyki/TMS Transport Management System.
Telematyka/TMS obsługuje geolokalizację i raportowanie (np. z urządzenia w pojeździe
lub w aplikacji kierowcy), a Trawers dostaje tylko: numer SENT, statusy, potwierdzenia,
ewentualnie link do śledzenia.
Trawers inicjuje proces (zlecenie/wysyłka -> SENT), a 'kanał GPS' jest oddzielny,
chociaż powiązany tym samym identyfikatorem przewozu.
Trawers może ew. przechowywać dane:
- pojazd/kierowca,
- identyfikator kursu w systemie GPS/TMS,
- link do mapy/trackingu,
- zdarzenia statusowe: wyjazd / przyjazd / rozładunek / zakończono,
- ewentualnie 'dowody': podpis, zdjęcie, timestamp.
Podsumowanie
Trawers może wspierać obieg SENT jako element procesu logistycznego:
- przygotowanie danych do zgłoszenia,
- wysyłkę zgłoszenia,
- zapis numeru SENT,
- obsługę odpowiedzi (przyjęte/odrzucone),
- korekty i cykliczne odpytywanie statusów.
Funkcje geolokalizacji nie są częścią Trawers ERP.
Rozwiązania SENT GEO. Kryteria wyboru
Sugerowane kryteria wyboru rozwiązania zewnętrznego dostawcy.
* Obsługa SENT-GEO zgodnie z wymaganiami PUESC (tryb aplikacji kierowcy i/lub urządzenia)
* API do integracji (przekazanie numeru przewozu / identyfikatora zgłoszenia, pobieranie statusów)
* Możliwość pracy w modelu: własna flota i/lub przewoźnicy zewnętrzni
* Raporty i audyt: historia zdarzeń, potwierdzenia, eksport danych
* Stabilne wsparcie wdrożeniowe i serwisowe
Powiązanie z Trawers
Wysyłka/WZ <--> identyfikator SENT <--> identyfikator w telematyce