Baza wiedzy Trawers ERP

KSeF. EDI INVOICE a Faktury XML

1. Faktura KSeF XML w 'świecie' EDI 2. EDI INVOICE a Faktura KSeF XML 3. Mapowanie EDI INVOICE na pola KSeF FA(3) 4. Reguły walidacyjne 5. Tematy powiązane

1. Faktura KSeF XML w 'świecie' EDI

Faktury KSeF sa jedynym dokumentem stwierdzającym transakcje. (#KSeF) Firmy, które wymieniały dane transakcyjne przy pomocy komunikatów EDI teraz muszą włączyć się do wymiany faktur KSeF - wystawiać faktury sprzedaży i pobierać faktury zakupu. Włączenie KSeF do 'świata EDI' zostało zarysowane w artykule: KSeF. Faktury a komunikaty EDI Podstawowe tezy: - Komunikaty EDI typu ORDER, DESADV, INVRPT itp. nie są częścią KSeF. Pozostają w gestii systemów ERP i platform EDI. - EDI nadal będzie wykorzystywane do wymiany danych handlowych i logistycznych, które nie są fakturami. - Firmy będą musiały zintegrować swoje systemy ERP/EDI z KSeF, aby faktury były przesyłane zgodnie z nowymi przepisami, ale pozostałe komunikaty będą nadal przesyłane jak dotychczas - np. przez AS2, FTP, API czy e-mail. - Konieczna jest integracja ERP z KSeF - zarówno do wysyłania, jak i odbierania faktur. - EDI pozostaje ważnym kanałem komunikacji, ale jego rola zmienia się - staje się uzupełnieniem, a nie głównym nośnikiem faktury. - KSeF nie zawiera wprost danych rozszerzonych, takich jak numery seryjne, lokalizacja magazynowa, dane techniczne. - Jeśli klient wymaga danych rozszerzonych (np. numery seryjne, kody partii, dane logistyczne), ERP może wygenerować dodatkowy komunikat EDI (np. INVOICE) zawierający te informacje. - Jezeli klient wymaga danych rozszerzonych to skuteczną i prostszą metodą jest włączenie tych danych do faktury KSeF w sekcji: DodatkowyOpis

2. EDI INVOICE a Faktura KSeF XML

W Polsce wprowadza się Clearance e-invoicing model. Polega na tym, że faktury przechodzą przez platformy rządowe aby urzędy podatkowe miały bieżący (real-time) wgląd do transakcji. Taki scentralizowany model istnieje w Polsce, Rumunii i we Włoszech. W takim modelu traci rację bytu EDI INVOICE. Zostaje zastąpione przez fakturę KSeF. Firmy pobierają dane faktury z FA(3), a brakujące dane procesowe uzupełniaja przez <DodatkowyOpis>. Firmy nie chcą utrzymywać dwóch równoległych strumieni tej samej faktury (KSeF + EDI INVOICE). Gdy platforma państwowa jest 'źródłem prawdy', EDI INVOICE staje się zbędne jako nośnik faktury. Takie podejście już jest częste w krajach, które mają lub wprowadzają model Clearance e-invoicing model. Wtedy wiele firm zaczyna traktować XML z platformy rządowej jako główne źródło danych faktury, a klasyczny EDI INVOICE bywa ograniczany albo wyłączany. W wielu firmach układ docelowy wygląda tak: * KSeF (lub inna platforma) = prawny i księgowy dokument faktury * EDI = reszta łańcucha supply chain (zamówienia, dostawy, rozliczenia) Dlaczego firmy uzupełniają dane przez: <DodatkowyOpis> ? To jest sposób na 'wstrzyknięcie' do faktury danych, które kiedyś często były w EDI albo w dodatkowych uzgodnieniach (np. NumerPozycjiZamowienia, IDTowaruWgNabywcy) To zmniejsza liczbę kanałów integracji, ale: * wymaga bardzo dobrego mapowania danych (zamówienie -> pozycje faktury, KIM -> ID nabywcy), * i dyscypliny formatów (np. numery pozycji, zamówień).

3. Mapowanie EDI INVOICE na pola KSeF FA(3)

Na przykładzie specyfikacji: Grupa Kingfisher plc Marki: Castorama, Brico Dépôt, B&Q, Screwfix, Koçtaş, TradePoint. Teza: KSeF FA(3) + uzupełnienia w `<DodatkowyOpis>` może funkcjonalnie zastąpić komunikat EDI INVOICE, bo w ich przewodniku wprost wymagają pól, które w EDI zwykle były krytyczne do automatycznego dopasowania (zamówienie, ASN/WZ, GLN dostawy) oraz dopisują brakujące atrybuty pozycji przez `<DodatkowyOpis>` .

3.1 Mapowanie EDI INVOICE na pola KSeF FA(3) (Castorama)

Nagłówek * `InvoiceNumber` -> `<Fa><P_2>` (numer faktury) * `InvoiceDate` -> `<Fa><P_1>` (data wystawienia) * `SalesDate` / `DeliveryDate` (jeśli wspólne) -> `<Fa><P_6>` (data dostawy/sprzedaży, gdy wspólna) * `InvoiceCurrency` -> `<Fa><KodWaluty>` * `BuyerOrderNumber`, `BuyerOrderDate` -> `<Fa><WarunkiTransakcji><Zamowienia><NrZamowienia>` i `<DataZamowienia>` * Uwaga: NrZamowienia ma mieć dokładnie 10 znaków, dopełnianie zerami z przodu * `DespatchNumber` (ASN) -> `<Fa><WZ>` (numer dokumentu magazynowego ASN) * `DeliveryLocationNumber` (GLN dostawy) -> `<Fa><WarunkiTransakcji><Transport><WysylkaDo><GLN>` Strony (GLN) Castorama wymaga też GLN w nagłówkach podmiotów: * GLN dostawcy -> `<Podmiot1><Adres><GLN>` * GLN Castorama -> `<Podmiot2><Adres><GLN>` Pozycje: EDI -> KSeF + brakujące pola w `<DodatkowyOpis>` To, co w EDI i da się przenieść wprost do `<FaWiersz>` W FA(3) pozycja ma m.in.: * `LineNumber` -> `<FaWiersz><NrWierszaFa>` * `ItemDescription` -> `<FaWiersz><P_7>` * `SupplierItemCode` -> `<FaWiersz><Indeks>` * `EAN` -> `<FaWiersz><GTIN>` * `UnitOfMeasure` -> `<FaWiersz><P_8A>` * `InvoiceQuantity` -> `<FaWiersz><P_8B>` * `InvoiceUnitNetPrice` -> `<FaWiersz><P_9A>` * `TaxRate` -> `<FaWiersz><P_12>` To, czego NIE ma w EDI, a Castorama chce w `<DodatkowyOpis>` Castorama wymaga użycia `<DodatkowyOpis>` (często per wiersz, z `<NrWiersza>` wskazującym numer pozycji faktury) dla kluczy takich jak: * `IDTowaruWgNabywcy` (ID towaru wg nabywcy) * `NumerPozycjiZamowienia` (numer pozycji zamówienia, max 5 znaków) * `LiczbaWJednostceZbiorczej` * `JmWJednostceZbiorczej` oraz (nagłówkowo): * `Numer noty` * `NumerFSC` Przykład sposobu zapisu (z `<NrWiersza>`): Wniosek praktyczny: jeżeli do tej pory te dane szły w EDI innymi kanałami (ORDERS/PRICAT/uzgodnienia) albo były 'domyślane', to przy przejściu na KSeF trzeba je skądś zasilić w generowanym XML (z zamówienia Castoramy, kartoteki indeksów wg nabywcy, danych logistycznych itd.).

3.2 Czy można zastąpić EDI INVOICE ?

* Tak, jeśli Castorama faktycznie procesuje faktury wyłącznie z KSeF FA(3) i wymaga uzupełnienia brakujących pól przez `<DodatkowyOpis>` oraz wymagane pola zamówienie/ASN/GLN. Wtedy KSeF staje się nośnikiem danych faktury jak INVOICE. * Nie w pełni, jeśli EDI INVOICE było elementem szerszego obiegu (np. automatyczne rozliczenie płatności/komunikaty zwrotne/rozbieżności). KSeF tego nie zastępuje 'z definicji' - to zależy od procesów Castoramy poza samą fakturą. Uzupełnienie opisu mapowania: NumerPozycjiZamowienia bierze sie z zamówienia [ZL] IDTowaruWgNabywcy bierze się z kartoteki: Kody u odbiorców (wg KIM) (169: OfIndeks C 20)

4. Reguły walidacyjne

Oznaczenia
BLOCK = nie pozwól wysłać do KSeF, WARN = pozwól wysłać, ale pokaż ostrzeżenie

4.1 Walidacja 1

0) Zasada nadrzędna BLOCK, jeśli brakuje któregokolwiek z 'kluczy dopasowania': NrZamowienia (10 znaków), WZ/ASN, GLN dostawy, oraz na każdej pozycji: NumerPozycjiZamowienia i IDTowaruWgNabywcy 1) Walidacje nagłówka (FA) 1.1 Zamówienie * BLOCK: brak `NrZamowienia` w `WarunkiTransakcji/Zamowienia` * BLOCK: `NrZamowienia` po normalizacji nie ma dokładnie 10 znaków cyfr (zastosuj dopełnienie zerami z lewej) * WARN: `DataZamowienia` pusta albo > `DataWystawienia` (często błąd danych) 1.2 WZ / ASN * BLOCK: brak `WZ` (ASN) * BLOCK: długość `WZ` > 16 znaków * WARN: `WZ` ma znaki inne niż [A-Z0-9/-] 1.3 GLN-y * BLOCK: brak GLN sprzedawcy (`Podmiot1/Adres/GLN`) i/lub GLN odbiorcy (`Podmiot2/Adres/GLN`) * BLOCK: brak GLN dostawy (`Transport/WysylkaDo/GLN`) * BLOCK: GLN nie ma 13 cyfr (bez spacji) * WARN: GLN dostawy # GLN nabywcy (bywa OK, ale warto sygnalizować) 1.4 Daty i waluta * BLOCK: brak `P_1` (data wystawienia) lub `P_2` (nr faktury) * WARN: `P_6` (data dostawy/sprzedaży wspólna) jest pusta mimo że u Was zwykle jest dostawa tego samego dnia * WARN: waluta # PLN (jeśli odbiorca oczekuje PLN w tym procesie) 2) Walidacje pozycji (FaWiersz + DodatkowyOpis) 2.1 Spięcie NrWiersza * BLOCK: `NrWierszaFa` nie jest unikalny lub nie jest liczbą > 0 * BLOCK: jest `DodatkowyOpis/NrWiersza`, który nie pasuje do żadnego `NrWierszaFa` * WARN: numery wierszy nie są ciągłe 1..N (technicznie może przejść, ale utrudnia diagnostykę) 2.2 Wymagane klucze na każdej pozycji Dla każdego `NrWierszaFa`: * BLOCK: brak `DodatkowyOpis` z kluczem `IDTowaruWgNabywcy` * BLOCK: `IDTowaruWgNabywcy` > 35 znaków albo puste * BLOCK: brak `DodatkowyOpis` z kluczem `NumerPozycjiZamowienia` * BLOCK: `NumerPozycjiZamowienia` > 5 znaków albo puste * WARN: `NumerPozycjiZamowienia` zawiera litery/spacje (zwykle powinno być numeryczne) 2.3 Opakowania zbiorcze (jeśli wymagane w Waszym strumieniu) * WARN -> BLOCK (jeśli odbiorca wymaga zawsze): brak `LiczbaWJednostceZbiorczej` lub `JmWJednostceZbiorczej` * BLOCK: `LiczbaWJednostceZbiorczej` 0 * WARN: `JmWJednostceZbiorczej` `P_8A` (nie zawsze błąd, ale często) 2.4 Dane towaru i ilości/ceny * BLOCK: brak `P_7` (nazwa) lub `P_8A` (JM) lub `P_8B` (ilość) lub `P_9A` (cena netto) albo wartości niepoprawne (<=0, nienumeryczne) * WARN: brak GTIN/Indeks, jeśli u Was normalnie są (nie zawsze wymagane, ale pomaga w sporach) 2.5 Spójność z zamówieniem (Twoje źródła danych) Skoro masz numer pozycji zamówienia w zamówieniu: * BLOCK: `NumerPozycjiZamowienia` nie istnieje w zamówieniu dla `NrZamowienia` * WARN: ilość na fakturze > ilość zamówiona (jeśli u Was to bywa dopuszczalne, zostaw WARN) * WARN: ten sam `NumerPozycjiZamowienia` pojawia się na wielu wierszach faktury (może być OK przy podziale, ale warto oznaczyć) Skoro `IDTowaruWgNabywcy` jest w KIM: * BLOCK: brak mapowania w KIM dla danego indeksu/GTIN -> nie generuj faktury do odbiorcy * WARN: mapowanie jest, ale nieaktywne / wygasłe (jeśli macie daty obowiązywania) 3) Walidacje sum i VAT (żeby KSeF i odbiorca liczyli tak samo) * BLOCK: suma pozycji netto # `P_13_x` (z tolerancją np. 0,01 po zaokrągleniach) * BLOCK: VAT z pozycji # `P_14_x` (tolerancja 0,01) * BLOCK: brutto # netto+VAT (tolerancja 0,01) * WARN: na fakturze są stawki VAT inne niż spodziewane dla tego kontrahenta/asortymentu (np. 23/8/0) 4) Walidacje 'porządku danych' (bardzo praktyczne) * BLOCK: w `DodatkowyOpis` występuje ten sam `Klucz` wielokrotnie dla tego samego `NrWiersza` (albo przyjmij regułę: bierz ostatni i WARN) * WARN: znaki specjalne w wartościach (np. nowe linie, taby) - znormalizuj do spacji * WARN: nadmiarowe spacje w `NrZamowienia`, `WZ`, GLN - trim/normalizacja przed wysyłką 5) Minimalny 'profil' decyzji BLOCK/WARN (proponowany) BLOCK (krytyczne dla dopasowania): * brak/format: NrZamowienia (10), WZ (16), GLN-y (13), klucze pozycji `IDTowaruWgNabywcy` i `NumerPozycjiZamowienia`, spięcie NrWiersza * niespójne sumy/VAT WARN (kontrola jakości / spory): * daty nietypowe, brak GTIN, ilość > zamówiona, duplikaty numerów pozycji zamówienia, rozjazdy JM opakowań

4.2 Walidacja 2

Walidacje BLOCK/WARN w trzech punktach procesu Punkt 1: przy zapisie ZL (zamówienia) BLOCK 1. ZL bez numeru zamówienia OBI (bo potem nie zbudujesz `NrZamowienia`) WARN 2. Numer zamówienia ma nietypowy format (np. spacje) -> normalizuj (trim) Komunikat (przykład): * `OBI: Brak numeru zamówienia (ZL). Uzupełnij numer zamówienia OBI - wymagany do KSeF.` Punkt 2: przy zamykaniu / zatwierdzaniu RO BLOCK 1. RO nie jest powiązany dokładnie z jednym ZL (złamane 1:1) 2. RO bez numeru WZ/rozchodu (bo wymagane do `Fa/WZ`) Komunikat: * `OBI: RO musi wynikać z jednego ZL (1:1). Popraw powiązania.` * `OBI: Brak numeru WZ/RO. Uzupełnij numer rozchodu - wymagany w polu FA/WZ.` Punkt 3: przed eksportem/wysłaniem FA do KSeF (najważniejsze) BLOCK (krytyczne dla OBI) 1. Brak `Fa/WZ` 2. Brak `NrZamowienia` w `WarunkiTransakcji/Zamowienia` 3. Brak `IDDostawcyWgNabywcy=123456654321` w `DodatkowyOpis` (nagłówek) 4. Brak Podmiot3 (`Rola=2` + `IDWew=01234321`) 5. Na jakiejkolwiek pozycji brak `IDTowaruWgNabywcy` w `DodatkowyOpis` z poprawnym `NrWiersza` (OBI uznaje numer artykułu za niezbędny) 6. `DodatkowyOpis/NrWiersza` wskazuje nieistniejący `NrWierszaFa` (błąd przypięcia) WARN (rekomendowane) 7) Numer faktury przekracza 16 znaków lub ma znaki specjalne - OBI może obcinać/usuwać znaki, co psuje uzgodnienia 8) Brak GTIN przy pozycji (jeśli u Was zawsze jest) 9) ILOŚĆ/CENA = 0 lub ujemne (zwykle błąd) Komunikaty (proponowane, 'serwisowalne') * `OBI/KSeF: Brak IDDostawcyWgNabywcy. Uzupełnij w kartotece kontrahenta OBI (wartość: 123456654321).` * `OBI/KSeF: Brak Podmiot3 (Rola=2) z IDWew=01234321. Uzupełnij identyfikację marketu.` * `OBI/KSeF: Pozycja {nr}: Brak IDTowaruWgNabywcy (nr artykułu OBI) w KIM. Uzupełnij kartotekę i ponów.` * `OBI/KSeF: Niespójna numeracja pozycji - DodatkowyOpis NrWiersza={x} nie pasuje do NrWierszaFa.` * `OBI: Numer faktury zawiera znaki specjalne / jest dłuższy niż 16. Zalecana zmiana numeracji dla OBI.`

5. Tematy powiązane

KSeF. Moduły w Trawers ERP KSeF. Faktury a komunikaty EDI EDI Elektroniczna wymiana dok Słowa kluczowe #TrawersERP-Architektura #TrawersERP-ProcesyGospodarcze #PTU/VAT-KSeF #Pomoc-AsystentAI