F: Was bedeuten „zero rated goods“ und „commercial invoice“ bei einer §13b-Abschlagsrechnung?

Thema
Fragen und Antworten
SDK-Mitglieder
ActualDeliveryDate_102 AddBuyerAssignedID() AddContractReferencedDocument() AddDocumentNote() AddPaymentMeans() AddProduct_Comfort() AddTradeAllowanceCharge() AddTradePaymentTerms() AddTradeTax() BusinessProcessSpecifiedDocumentContextParameter
Business Terms
BT-3 Code für den Rechnungstyp BT-118 Code der Umsatzsteuerkategorie BT-151 Code der Umsatzsteuerkategorie des in Rechnung BT-121 Code für den Umsatzsteuerbefreiungsgrund BT-120 Umsatzsteuerbefreiungsgrund BT-31 Umsatzsteuer-Identifikationsnummer des Verkäufers BT-48 Umsatzsteuer-Identifikationsnummer des Käufers BT-12 Vertragsreferenz
Codebeispiele
VB.NET
Veröffentlicht

Kurz: Wenn ein Rechnungsempfänger meldet, Ihre E-Rechnung enthalte „zero rated goods“ statt „VAT reverse charge“ und sei eine „commercial invoice“ statt einer „partial construction invoice“, dann zitiert er die englischen Namen der Codes im XML. „Zero rated goods“ ist die Steuerkategorie Z, „commercial invoice“ die Rechnungsart 380. Für eine Abschlagsrechnung über Bauleistungen nach § 13b UStG sind richtig: Steuerkategorie AE mit dem Befreiungsgrund VATEX-EU-AE und die Rechnungsart 875. Beides lässt sich mit dem Aloaha ZUGFeRD SDK setzen.

Warum man die Begriffe im XML nicht findet

Eine XRechnung oder ZUGFeRD-Rechnung enthält keine Klartexte für Steuerart und Rechnungsart, sondern Codes aus Codelisten. Prüfprogramme und Rechnungseingangssysteme zeigen dazu die englische Bezeichnung aus der Codeliste an:

Im XMLFeldBezeichnung in der CodelisteBedeutung
<ram:CategoryCode>Z</ram:CategoryCode>BT-118, BT-151Zero rated goodsSteuersatz 0 % (Nullsatz)
<ram:CategoryCode>AE</ram:CategoryCode>BT-118, BT-151VAT Reverse ChargeSteuerschuldnerschaft des Leistungsempfängers (§ 13b UStG)
<ram:TypeCode>380</ram:TypeCode>BT-3Commercial invoicenormale Rechnung
<ram:TypeCode>875</ram:TypeCode>BT-3Partial construction invoiceAbschlagsrechnung (Bauleistung)
<ram:TypeCode>876</ram:TypeCode>BT-3Partial final construction invoiceTeilschlussrechnung
<ram:TypeCode>877</ram:TypeCode>BT-3Final construction invoiceSchlussrechnung

Technisch ist eine Rechnung mit Z und 380 oft gültig – der Validator findet keinen Fehler. Inhaltlich ist sie aber falsch: Bei § 13b schuldet der Empfänger die Umsatzsteuer, die Leistung ist nicht steuerfrei. Viele Empfänger prüfen deshalb Steuerkategorie und Rechnungsart und lehnen die Rechnung ab.

So setzen Sie es mit dem SDK

  • Rechnungsart (BT-3): Eigenschaft Document_Type mit PartialConstructionInvoice (875), PartialFinalConstructionInvoice (876) oder FinalConstructionInvoice (877). Aus VBA/COM geht auch Document_TypeINT = 875. Ohne Angabe schreibt das SDK 380. Wichtig: Die Eigenschaft erst nach CreateInvoice setzen – CreateInvoice legt jede neue Rechnung mit 380 an.
  • Steuerkategorie in den Positionen (BT-151): in AddProduct_Comfort "AE" statt "Z", Steuersatz 0.
  • Steueraufschlüsselung (BG-23): AddTradeTax mit Kategorie "AE", Befreiungsgrund als Text (BT-120) und Code VATEX-EU-AE (BT-121).
  • USt-IdNr.: Bei AE müssen die USt-IdNr. des Verkäufers (BT-31) und des Käufers (BT-48) in der Rechnung stehen – über WriteSeller und WriteBuyer bzw. AddBuyerTAX.

Beispiel: Abschlagsrechnung mit Reverse Charge (VB.NET)

Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL")
alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice
alo.isKOSIT = True                                       ' XRechnung
alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
alo.CreateInvoice("AR-2026-001", "", "20261008", "102", , "", "EUR")
alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.PartialConstructionInvoice   ' BT-3 = 875
alo.AddDocumentNote("Steuerschuldnerschaft des Leistungsempfängers nach § 13b UStG.")

alo.WriteSeller("Bau Beispiel GmbH", "35390", "Gießen", "Werkstraße 5", "", "DE", "DE123456789")   ' BT-31
alo.WriteSellerContactPerson("Erika Beispiel", "", "rechnung@bau-beispiel.example", "+49 641 123456")
alo.set_URIUniversalCommunication("rechnung@bau-beispiel.example", "EM", True)
alo.WriteBuyer("Kunde Beispiel GmbH & Co. KG", "63667", "Nidda", "Kundenstraße 1", "", "DE", "", "DE987654321")   ' BT-48
alo.BuyerReference = "25000151"
alo.set_URIUniversalCommunication("rechnungseingang@kunde.example", "EM", False)
alo.AddBuyerAssignedID("25000151")                       ' Bestellnummer BT-13
alo.AddContractReferencedDocument("7615")                ' Vertragsnummer BT-12
alo.ActualDeliveryDate_102 = "20261007"
alo.AddPaymentMeans("58", "Überweisung", "DE02120300000000202051", "Bau Beispiel GmbH")
alo.AddTradePaymentTerms("Zahlbar ohne Abzug innerhalb von 21 Tagen", "20261029", "102")

' Position mit Kategorie AE und 0 %
alo.AddProduct_Comfort("1", "", "", "1", "H87", "1. Abschlagsrechnung gemäß Aufstellung", "", "", "EUR", "", "H87", _
                       False, "", "", "", "196289.81", "EUR", "1", "H87", "VAT", "AE", "0.00", "", "196289.81", "EUR", "", "")

' 4 % Nachlass auf Rechnungsebene (BG-20), ebenfalls Kategorie AE
alo.AddTradeAllowanceCharge(False, "196289.81", "EUR", "7851.59", "EUR", "VAT", "AE", "0.00", "Nachlass", "4", "95")

' Steueraufschlüsselung mit Befreiungsgrund und VATEX-Code
alo.AddTradeTax("0.00", "EUR", "188438.22", "EUR", "VAT", "AE", "0.00", _
                "Steuerschuldnerschaft des Leistungsempfängers (§ 13b UStG)", "", "", "", "VATEX-EU-AE")
alo.WriteTotals("196289.81", "188438.22", "188438.22", "188438.22", "0.00", "7851.59", "0.00", "0.00", "0.00")

alo.SaveXML("C:\Rechnungen\abschlag.xml")
If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error)

Alle Namen, Nummern und Bankdaten sind Muster-Werte. Eine mit genau diesem Aufbau erzeugte XRechnung wurde vom KoSIT-Validator (XRechnung-Konfiguration 3.0.2) ohne Fehler und ohne Warnungen angenommen (Stand 14.10.2026).

Weitere typische Fehler bei solchen Rechnungen

  • Rechnungsart als Hinweistext: Der zweite Parameter von CreateInvoice ist kein Code für die Rechnungsart, sondern ein Rechnungshinweis (BT-22). alo.CreateInvoice(Nr, "875", Datum, …) schreibt deshalb <ram:IncludedNote><ram:Content>875</ram:Content></ram:IncludedNote> ins XML, die Rechnungsart bleibt 380. Richtig:
    alo.CreateInvoice(Nr, "", Datum, "102", , "", "EUR")      ' 2. Parameter = Hinweistext (BT-22), hier leer
    alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.PartialConstructionInvoice   ' danach: BT-3 = 875
  • Nachlass als Position: Eine Position „abzgl. 4 % Nachlass“ mit positivem Einzelpreis und negativem Positionsbetrag passt nicht zusammen (Preis × Menge ≠ Betrag). Besser ist ein Nachlass auf Rechnungsebene wie im Beispiel.
  • Vertragsnummer nur als Freitext: Sie gehört in BT-12 (AddContractReferencedDocument), damit sie maschinell zugeordnet werden kann.
  • Platzhalter: Werte wie „Buchungsreferenz“ in BT-19 oder „1“ als Käuferreferenz weglassen bzw. durch die echten Werte des Kunden ersetzen.

Wie Abschläge in der Schlussrechnung verrechnet werden, steht unter Schlussrechnung mit Abschlagsrechnungen als XRechnung. Ihre eigene Rechnung prüfen Sie wie unter XRechnung vor dem Versand prüfen beschrieben.

Häufige Fragen

Was bedeutet „zero rated goods“ in einer E-Rechnung?

Das ist die englische Bezeichnung der Umsatzsteuerkategorie Z (Nullsatz, 0 %). Sie steht im XML als CategoryCode Z. Für Rechnungen nach § 13b UStG ist sie falsch – richtig ist AE (VAT Reverse Charge).

Welche Steuerkategorie gilt für § 13b UStG?

AE („VAT Reverse Charge“) mit 0 % Steuersatz, einem Befreiungsgrund als Text und dem Code VATEX-EU-AE. Die USt-IdNr. von Verkäufer und Käufer müssen in der Rechnung stehen.

Was bedeutet „commercial invoice“?

Das ist die Rechnungsart 380, die normale Handelsrechnung. Abschlagsrechnungen über Bauleistungen haben die Rechnungsart 875 („partial construction invoice“), Teilschlussrechnungen 876 und Schlussrechnungen 877.

Erlaubt die XRechnung die Rechnungsart 875?

Ja. Die XRechnung erlaubt unter anderem 326, 380, 381, 384, 389, 875, 876 und 877. Eine Abschlagsrechnung mit 875 und Reverse Charge wurde vom KoSIT-Validator ohne Fehler angenommen.

Wie setze ich die Rechnungsart 875 mit dem Aloaha ZUGFeRD SDK?

Mit alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.PartialConstructionInvoice oder aus VBA/COM mit alo.Document_TypeINT = 875 – immer nach CreateInvoice. Ohne Angabe schreibt das SDK 380.

Warum steht 875 im Hinweis statt in der Rechnungsart?

Weil 875 als zweiter Parameter an CreateInvoice übergeben wurde. Dieser Parameter ist der Rechnungshinweis (BT-22), nicht die Rechnungsart. Die Rechnungsart setzen Sie nach CreateInvoice mit Document_Type bzw. Document_TypeINT.

Business Terms in diesem Artikel: BT-3 BT-118 BT-151 BT-121 BT-120 BT-31 BT-48 BT-12 BG-20