Zum Inhalt

Peppol BIS nach KSeF FA(3)

Diese Seite beschreibt, wie xTool Peppol BIS Billing 3.0 (UBL-Rechnung oder Gutschrift) auf KSeF FA(3) abbildet.

Die Konvertierung ist einseitig: Peppol → KSeF. Der umgekehrte Weg (KSeF → Peppol) existiert separat und wird hier nicht beschrieben.

Peppol-BIS-XML  →  xtool.canonical.1_0  →  KSeF-FA(3)-XML
Rolle Formatcode
Quellrechnung peppol_bis_billing.invoice.3_0.xml_ubl
Quellgutschrift peppol_bis_billing.credit_note.3_0.xml_ubl
Ziel ksef_fa.invoice.3_0.xml

xTool mappt Peppol zuerst in den Canonical-Hub (xtool.canonical.1_0) und erzeugt daraus FA(3). Das Ergebnis wird gegen die offizielle FA(3)-XSD validiert.

Zum Verbinden der Organisation mit KSeF vor dem Versand: Mit KSeF verbinden. Zum automatischen Konvertieren: Validieren und konvertieren und SFTP (+fa3 im Dateinamen). Bei einem Raw PDF per SFTP nutzt xTool PDF-Erkennung nach FA(3) statt Peppol-zu-FA-Konvertierung — siehe Raw PDF mit Formatcode.


Rechnungen (Typ 380)

Eine Peppol-Handelsrechnung (InvoiceTypeCode = 380) wird zu einem Standard-KSeF-Dokument mit RodzajFaktury = VAT. Beträge werden unverändert übernommen — das Vorzeichen wird nicht geändert.

Peppol BIS KSeF FA(3) Hinweis
Rechnungsnummer (BT-1) P_2 Unverändert
Ausstellungsdatum (BT-2) P_1 Unverändert
Steuerzeitpunkt (BT-7) / Lieferdatum P_6 Lieferdatum, falls vorhanden, sonst Steuerzeitpunkt
Rechnungszeitraum P_6_OD / P_6_DO Beginn und Ende
Währung (BT-5) KodWaluty z. B. PLN, EUR
Verkäufer (BG-4) Podmiot1 NIP, Name, Adresse, Kontakte
Käufer (BG-7) Podmiot2 NIP / EU-USt-IdNr. / andere ID
Lieferempfänger (BG-13) Podmiot3 Rolle = 2 (Odbiorca)
Positionen (BG-25) FaWiersz Eine FA(3)-Zeile je Peppol-Position
Steueraufschlüsselung P_13_x / P_14_x Bemessungsgrundlage und USt je Satz
Fälliger Betrag (BT-115) P_15 Zahlbetrag inklusive USt
Zahlung (BG-16) Platnosc Art, Konto, Fälligkeit
Hinweise (BT-22) Stopka Zusammengeführter Hinweistext
Bestellung (BT-13) WarunkiTransakcji Bestellnummer
Lieferadresse (BG-13) WarunkiTransakcji/Transport Lieferanschrift
Versandanzeige (BT-16) WZ Falls vorhanden

Gutschriften (Typ 381)

KSeF kennt keinen eigenen „negativen“ Dokumenttyp. Eine Peppol-Gutschrift (381) wird entweder als Korrekturrechnung (KOR) oder als Standardrechnung (VAT) mit negativen Nettobeträgen dargestellt.

KOR oder VAT

Die Wahl hängt von einer Referenz auf die Ursprungsrechnung (BG-3) ab:

Bedingung KSeF-Typ Logik
Gutschrift enthält eine echte Ursprungsrechnungsnummer KOR + DaneFaKorygowanej Korrektur mit Verweis auf das Original
Gutschrift enthält keine Ursprungsrechnungsnummer VAT mit negativen Nettobeträgen KOR ist ohne Pflichtreferenz nicht zulässig

Platzhalter gelten als fehlend: N/A, NA, -, none, null oder leere Zeichenkette. So entsteht kein KOR-Dokument ohne echte Originalnummer.

DaneFaKorygowanej (korrigierte Rechnung)

Nur bei KOR:

FA(3)-Feld Quelle Beschreibung
DataWystFaKorygowanej Ausstellungsdatum der Ursprungsrechnung Sonst das Ausstellungsdatum der Gutschrift
NrFaKorygowanej Nummer der Ursprungsrechnung Original-Rechnungsnummer
NrKSeFN Immer 1 Ursprungsrechnung wurde außerhalb von KSeF ausgestellt

NrKSeFN = 1 gilt für alle eingehenden Peppol-Gutschriften: xTool hat keine KSeF-Nummer des Originals, weil es über Peppol ausgestellt wurde.

Beim VAT-Fallback entfällt DaneFaKorygowanej. PrzyczynaKorekty und TypKorekty werden geleert — sie sind bei VAT unzulässig.

Vorzeichen der Beträge

KSeF erwartet eine Korrektur als Delta nach der Korrektur. Bei einer mindernden Gutschrift ist das Netto-Delta negativ. xTool wendet -abs() auf Positionsnetto, Einzelpreis, Positionsrabatt und Dokumentensummen (einschließlich Zahlbetrag) an:

FA3_Betrag = -abs(Peppol_Betrag)
Vorzeichen in der Peppol-Gutschrift Ergebnis für Netto / Preis / Zahlbetrag
Positiv (übliche Peppol-Konvention) Negativ
Bereits negativ (nicht standardkonformer Sender) Negativ — nicht erneut invertiert
Null (z. B. Zeile mit 0 %) Null

Unbedingtes × -1 würde einen bereits negativen Betrag positiv machen. -abs() verhindert das.

Dieses Vorzeichen gilt für:

  • Positionen (FaWiersz): P_11 (Netto), P_9A (Einzelpreis), P_10 (Positionsrabatt, falls vorhanden)
  • Kopf (Fa): P_13_x (Bemessungsgrundlagen aus den Positionen), P_15 (Zahlbetrag)

USt-Beträge werden nicht ebenso invertiert. Die Steueraufschlüsselung auf Dokumentebene (Peppol-TaxSubtotal) wird unverändert nach P_14_x übernommen. Die Zeilen-P_11_VAT wird anschließend an diese Kopf-USt angeglichen. Bei der üblichen Peppol-Konvention (positive TaxSubtotals) bleiben P_14_x und die abgeglichene P_11_VAT positiv, während Netto und Zahlbetrag negativ sind.

Hat eine Peppol-Zeile eine negative Menge, nimmt xTool den Betrag der Menge und setzt das Vorzeichen auf den Einzelpreis. KSeF erwartet bei Gutschriften eine positive Menge und einen negativen Preis.

Korrekturgrund

Peppol BIS hat im xTool-Modell kein eigenes Feld für Korrekturgrund oder Korrekturtyp. Bei KOR setzt xTool PrzyczynaKorekty immer auf Korekta faktury (vom FA(3)-Schema verlangt). TypKorekty wird nicht gesetzt.


Parteien (Podmiot)

Podmiot1 (Verkäufer)

Feld Quelle Hinweis
NIP USt-IdNr. oder Steuernummer des Verkäufers Falls leer, aus Peppol-Endpoint-Schema 9945
Name Name des Verkäufers "-" wenn leer
Adresse Adresse des Verkäufers Straße, Ort, PLZ, Land
Kontakte E-Mail und Telefon Falls vorhanden
GLN Endpoint-ID (Schema 0088) Falls vorhanden

Die Verkäufer-NIP ist pflicht. Kann xTool keine 10-stellige polnische NIP ermitteln, schlägt die Konvertierung fehl.

Podmiot2 (Käufer)

Die Käuferidentifikation wird in dieser Reihenfolge gewählt:

  1. Polnische NIP (Käufer-USt-IdNr. beginnt mit PL oder 10-stellige Steuernummer)
  2. EU-USt-IdNr. (Ländercode + Nummer, für nicht-PL-USt-IdNrn.)
  3. Steuernummer (Land + Nummer)
  4. Andere Partei-ID (Land + Nummer)
  5. Endpoint-ID (Schema 9945 → PL-NIP; andere EU-USt-Schemata → EU-USt-IdNr.; übrige Schemata → ID)
  6. Brak ID = 1, wenn nichts gefunden wird

Podmiot3 (Lieferempfänger)

Wird angelegt, wenn Lieferdaten eine Adresse enthalten. Rolle = 2 (Odbiorca).


Steuersätze

Peppol-Satz / Code KSeF P_12 Kopf-Felder
23 % 23 P_13_1 / P_14_1 (Standard)
22 % 22 P_13_1 / P_14_1 (Standard)
8 % 8 P_13_2 / P_14_2 (ermäßigt 1)
7 % 7 P_13_2 / P_14_2 (ermäßigt 1)
5 % 5 P_13_3 / P_14_3 (ermäßigt 2; FA(3) beschreibt diesen Bucket aktuell als 5 %)
4 % 4 Nur Zeile P_12 — nicht in Kopf-P_13_x / P_14_x summiert
3 % 3 Nur Zeile P_12 — nicht in Kopf-P_13_x / P_14_x summiert
0 %, Code E / ZW zw P_13_7 (befreit)
0 %, Code AE / OO oo P_13_10 (Reverse Charge)
0 %, jeder andere Code (einschließlich S, G, K, O) 0 KR P_13_6_1 (null, Inland)

Ein nicht unterstützter Prozentsatz (z. B. 19 %) bricht die Konvertierung mit einer klaren Fehlermeldung ab. Eine 0-%-Zeile mit einem anderen Code als E / ZW / AE / OO schlägt nicht fehl: sie wird als 0 KR geschrieben. Innergemeinschaftliche (K) und Export-Codes (G) werden nicht auf 0 WDT bzw. 0 EX abgebildet.

Die Zeilen-USt (P_11_VAT) wird immer als Netto × Satz berechnet (übersprungen für Codes E, AE, O). Die Kopf-USt (P_14_x) bevorzugt die Steueraufschlüsselung auf Dokumentebene, sofern vorhanden. Weicht die Summe der Zeilen-USt von der Kopfaufschlüsselung ab, wird die Differenz auf die letzte Zeile dieses Satzes gelegt.


Positionen (FaWiersz)

Jede Peppol-Position wird zu einer FaWiersz (oder ZamowienieWiersz bei Anzahlungsrechnungen ZAL / KOR_ZAL):

FA(3)-Feld Peppol-Quelle Beschreibung
P_6A Positionszeitraum Endedatum, sonst Startdatum
P_7 Artikelname Beschreibung, wenn der Name leer ist
P_8A Maßeinheit UN/ECE-Code (z. B. C62); überschreibbar durch Eigenschaft unit_of_measure
P_8B Menge Absolutwert, wenn die Peppol-Menge negativ war
P_9A Einzelpreis Netto; negativ bei Gutschriften
P_10 Positionsrabatt Falls vorhanden; negativ bei Gutschriften
P_11 Positionsnetto Negativ bei Gutschriften
P_11_VAT Positions-USt Netto × Satz; anschließend an Kopf-P_14_x angeglichen (siehe Steuersätze)
P_12 USt-Satzcode Siehe Tabelle oben
PKWiU Klassifikation Schema PKWIU / PKWIUZ
CN KN-Code Schema CN
PKOB PKOB Schema PKOB
GTIN Standard-Artikel-ID Falls vorhanden
Indeks Verkäufer-Artikel-ID Falls vorhanden

Zahlung (Platnosc)

Der Zahlungsblock entsteht, wenn Zahlungsdaten oder ein Fälligkeitsdatum vorhanden sind.

FA(3)-Feld Quelle Beschreibung
FormaPlatnosci Zahlungsmittelcode / -name 6, wenn der Code 30, 31, 42 oder 58 ist oder der Name Transfer/SEPA/Bank enthält. 1–5 und 7 werden nur am Namen erkannt (cash, card, voucher, cheque/check, credit, mobile/phone). Sonst entfällt das Feld. Andere UNECE-Codes (z. B. 10 Bar, 48 Karte) werden nicht über den Code gemappt.
RachunekBankowy IBAN / Kontonummer + BIC Empfängerkonto
TerminPlatnosci Fälligkeitsdatum (BT-9) Datum, bis zu dem die Rechnung zu zahlen ist
Zaplacono Bezahlt vs. Zahlbetrag 1, wenn der gezahlte Betrag ≥ Zahlbetrag
DataZaplaty Fälligkeitsdatum Gesetzt, wenn Zaplacono = 1

Währung und Kurs

Ist die Rechnung nicht in PLN:

  1. KodWaluty erhält die Rechnungswährung.
  2. Ist ein Wechselkurs vorhanden, füllt xTool KursWalutyZ und USt-Beträge in PLN (P_14_1W, P_14_2W, P_14_3W).
  3. Ohne Kurs wird eine Warnung protokolliert; die PLN-Umrechnungsfelder bleiben leer (von der XSD erlaubt).

Zusätzliche Beschreibungen (DodatkowyOpis)

Quelle Schlüssel Ebene
Kundenauftragsreferenz (BT-14) sales_order_reference Kopf
Sonstige Positionseigenschaften Eigenschaftsname Zeile (mit Zeilennummer)

Heißt eine Positionseigenschaft unit_of_measure, wird ihr Wert nach P_8A geschrieben und nicht als DodatkowyOpis angelegt.


Annotationen (Adnotacje)

Mit schema-sicheren Standardwerten:

Feld Standard Überschreibung
P_16 2 (nein) —
P_17 2 (nein) 1 bei Typen 389 / 527
P_18 2 (nein) —
P_18A 2 (nein) —
Zwolnienie P_19N = 1 (keine Befreiung) P_19 = 1, P_19A = <Text> bei Befreiungsgrund (BT-6)
NoweSrodkiTransportu P_22_N = 1 (nein) —
P_23 2 (nein) —
PMarzy P_PMarzy_N = 1 (nein) —

Fußzeile (Stopka)

Dokumenthinweise (BT-22) werden zusammengeführt und nach Stopka/Informacje geschrieben.


XSD-Validierung

Das konvertierte XML wird gegen FA(3) geprüft. Dazu gehören:

  • Elementreihenfolge in Sequenzen
  • Pflichtfelder
  • Auswahlen (z. B. NrKSeF / NrKSeFFaKorygowanej oder NrKSeFN in DaneFaKorygowanej)
  • Datentypen (TKwotowy, TWybor1, TStawkaPodatku, TFormaPlatnosci)
  • Zeichenkettenlängen

Validierungsfehler beenden die Konvertierung mit einer ausführlichen Meldung.


Aktuelle Einschränkungen

Einschränkung Beschreibung
Rabatte/Zuschläge auf Dokumentebene Werden nicht nach KSeF gemappt (Warnung im Log)
Anzahlungsrechnungen (ZAL) Struktur ZamowienieWiersz existiert; volle Anzahlungslogik ist nicht umgesetzt
Kopfsummen 4 % / 3 % Werden nach Zeile P_12 geschrieben; nicht in P_13_x / P_14_x summiert
WDT / Export 0 % Peppol-Codes K / G werden zu 0 KR, nicht zu 0 WDT / 0 EX
Kopf-USt bei Gutschriften P_14_x folgt Peppol-TaxSubtotal (nicht -abs()); Zeilen-P_11_VAT wird daran angeglichen
USt-Margenverfahren Nicht unterstützt (P_23 = 2)
Neue Transportmittel Nicht unterstützt (P_22_N = 1)
Factoring Nicht unterstützt (RachunekBankowyFaktora leer)
Bevollmächtigter Nicht unterstützt (PodmiotUpowazniony leer)

Rechnung vs. Gutschrift

Aspekt Rechnung (380) Gutschrift (381) mit Referenz Gutschrift (381) ohne Referenz
RodzajFaktury VAT KOR VAT
DaneFaKorygowanej Nein Ja (NrKSeFN = 1) Nein
PrzyczynaKorekty Nein Ja (immer Korekta faktury) Nein
TypKorekty Nein Nein Nein
Vorzeichen Netto / Zahlbetrag Unverändert Negativ (-abs) Negativ (-abs)
Vorzeichen USt (P_14_x) Unverändert Wie Peppol-TaxSubtotal Wie Peppol-TaxSubtotal
Positionen FaWiersz FaWiersz FaWiersz
XSD-Validierung Voll Voll Voll

Nächste Schritte