XRechnung an Vermögen und Bau Baden-Württemberg: Alle Pflichtangaben mit dem Aloaha ZUGFeRD SDK

Thema
VB.NET
SDK-Mitglieder
ActualDeliveryDate_102 Add_AdditionalReferencedDocument() Add_AdditionalReferencedFile() Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument() AddBuyerAssignedID() AddBuyerTAX() AddContractReferencedDocument() AddDocumentNote() AddPaymentMeans() AddProduct_Comfort()
Business Terms
BT-10 Referenz des Käufers BT-11 Projektreferenz BT-13 Bestellreferenz BT-18 Objektkennung BT-56 Kontaktstelle des Käufers BT-128 Objektkennung auf Ebene der Rechnungsposition BT-126 Kennung der Rechnungsposition BT-84 Kennung des Zahlungskontos
Codebeispiele
VB.NET
Veröffentlicht

Kurz: Vermögen und Bau Baden-Württemberg (Amt Freiburg) verlangt in jeder E-Rechnung neben den üblichen Angaben die Leitweg-ID (BT-10), eine Projektnummer (BT-11), die Bestellreferenz bzw. Mittelbindungsnummer (BT-13), eine Objektkennung (BT-18), Kontaktdaten des Rechnungsstellers (BT-41 bis BT-43), die IBAN (BT-84) und eine eindeutige Positionsnummer (BT-126). Das Aloaha ZUGFeRD SDK schreibt alle Felder aus den „Hinweisen zur elektronischen Rechnungsstellung“ – als XRechnung oder als ZUGFeRD-PDF mit XRechnung. Eine damit erzeugte Rechnung mit allen Angaben wurde vom KoSIT-Validator ohne Fehler und Warnungen angenommen.

Worum geht es?

Seit dem 1. Januar 2022 nehmen die Behörden des Landes Baden-Württemberg Rechnungen nur noch elektronisch an. Vermögen und Bau Baden-Württemberg, Amt Freiburg, hat dazu ein Merkblatt für Auftragnehmer veröffentlicht. Es legt fest, in welchem Datenfeld der EN 16931 welche Angabe stehen muss – etwa die Projektnummer in BT-11 und die Objektkennung (Ort, Straße, Hausnummer, Nutzer) in BT-18. Fehlt eine Pflichtangabe, kann die Rechnung nicht zugeordnet werden. Die Leitweg-IDs und Projektnummern stehen in der Anlage „Leitweg-IDs des Amtes Freiburg“, die Sie mit dem Auftrag erhalten.

Angaben des Rechnungsempfängers

AngabeFeldPflichtSDK
Name, Straße, Ort, PLZ, Land des AuftraggebersBT-44, BT-50, BT-52, BT-53, BT-55jaWriteBuyer
Leitweg-ID (Käuferreferenz)BT-10jaWriteBuyer (Parameter Leitweg_ID) oder BuyerReference
Kontaktstelle (Abteilung/Referat oder Person)BT-56optionalWriteBuyerContactPerson
Telefon und E-Mail der KontaktstelleBT-57, BT-58optionalWriteBuyerContactPerson
LieferantennummerBT-29optionalSellerID
USt-IdNr. des KäufersBT-48jaAddBuyerTAX (Schema VA)
Projektnummer (Projektdefinition oder Leistungsart)BT-11jaAddSpecifiedProcuringProject
VertragsnummerBT-12optionalAddContractReferencedDocument
Bestellreferenz, bei Baumaßnahmen die MittelbindungsnummerBT-13jaAddBuyerAssignedID
Ausschreibungsreferenz (Vergabe- oder Losnummer)BT-17optionalAdd_AdditionalReferencedDocument mit TypeCode 50
Objektkennung (Ort, Straße, Hausnummer, Nutzer)BT-18jaAdd_AdditionalReferencedDocument mit TypeCode 130
Bemerkungen (Ansprechperson, Hinweis auf Anlagen)BT-22jaAddDocumentNote
Anlagen (Stundenlohnzettel, Rapporte, PDF-Rechnung)BG-24 (BT-122 bis BT-125)je nach AuftragAdd_AdditionalReferencedFile

Angaben des Rechnungsstellers

AngabeFeldPflichtSDK
Kontaktstelle, Telefon, E-MailBT-41, BT-42, BT-43jaWriteSellerContactPerson
Auftragsreferenz (Auftragsbestätigung)BT-14optionalAddSellerAssignedID
Zahlungsbedingungen bzw. FälligkeitsdatumBT-20 / BT-9eins von beiden bei positivem ZahlbetragAddTradePaymentTerms
IBANBT-84jaAddPaymentMeans
Kennung der RechnungspositionBT-126jaerster Parameter von AddProduct_Comfort
Objektkennung der Position (z. B. Raum, Zählernummer)BT-128optionalAdd_SpecifiedLineTradeSettlement_AdditionalReferencedDocument mit TypeCode 130

Der Weg der Einreichung (Portal service-bw.de oder E-Mail an die im Merkblatt genannte Adresse) ist kein Datenfeld der Rechnung. Das SDK erzeugt die Datei, versendet wird sie über Ihr Portal-Konto oder Ihr E-Mail-Programm.

Geprüft mit dem KoSIT-Validator

Wir haben mit dem Beispielcode unten eine XRechnung erzeugt, die alle Angaben aus dem Merkblatt enthält, und sie mit dem KoSIT-Validator (XRechnung-Konfiguration 3.0.2) geprüft (Stand 13.10.2026):

  • ohne Anlage: angenommen, keine Fehler, keine Warnungen;
  • mit eingebettetem Stundenlohnzettel als PDF (BG-24): angenommen, keine Fehler, keine Warnungen.

Das SDK bleibt dabei im Profil EN 16931 (COMFORT); keines der Felder erfordert EXTENDED. Wie Sie Ihre eigenen Rechnungen prüfen, steht unter XRechnung vor dem Versand prüfen.

Beispiel: XRechnung für Vermögen und Bau BW (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("RE-2026-0815", "", "20261013", "102", , "", "EUR")
alo.AddDocumentNote("Ansprechperson: Bauleitung Abschnitt 3. Anlagen: Stundenlohnzettel KW 40.")   ' BT-22

' Rechnungssteller
alo.WriteSeller("Bau Beispiel GmbH", "79098", "Freiburg im Breisgau", "Werkstraße 5", "", "DE", "DE123456789")
alo.WriteSellerContactPerson("Erika Beispiel", "", "rechnung@bau-beispiel.example", "+49 761 123456")  ' BT-41..43
alo.set_URIUniversalCommunication("rechnung@bau-beispiel.example", "EM", True)                         ' BT-34
alo.SellerID = "LIEF-4711"                                                                             ' BT-29 Lieferantennummer

' Rechnungsempfänger mit Leitweg-ID aus der Anlage des Amtes
alo.WriteBuyer("Öffentlicher Auftraggeber (Beispiel)", "79098", "Freiburg im Breisgau", "Amtsstraße 1", "", "DE", _
               "", "", "04011000-12345-34")                                                            ' BT-44..55, BT-10
alo.AddBuyerTAX("DE999999999", "VA")                                                                   ' BT-48
alo.WriteBuyerContactPerson("Referat Hochbau", "", "hochbau@amt.example", "+49 761 000000")            ' BT-56..58
alo.set_URIUniversalCommunication("rechnung@amt.example", "EM", False)                                 ' BT-49

' Transaktionsspezifische Angaben
alo.AddSpecifiedProcuringProject("P-2026-17", "Sanierung Verwaltungsgebäude")                          ' BT-11
alo.AddContractReferencedDocument("V-2026-0042")                                                       ' BT-12
alo.AddBuyerAssignedID("MB-2026-123456")                                                               ' BT-13 Mittelbindungsnummer
alo.AddSellerAssignedID("AB-7781")                                                                     ' BT-14
alo.Add_AdditionalReferencedDocument("VG-2026-55", "", "50")                                           ' BT-17
alo.Add_AdditionalReferencedDocument("Freiburg, Amtsstraße 1, Gebäude B", "", "130")                   ' BT-18
alo.Add_AdditionalReferencedFile("C:\Rechnungen\stunden-kw40.pdf", "STZ-KW40", "", "916", _
                                 "Stundenlohnzettel KW 40")                                            ' BG-24
alo.ActualDeliveryDate_102 = "20261009"                                                                ' BT-72

' Zahlung
alo.AddPaymentMeans("58", "Überweisung", "DE02120300000000202051", "Bau Beispiel GmbH", "", "BYLADEM1001")  ' BT-84..86
alo.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen ohne Abzug.", "20261112", "102")                  ' BT-20, BT-9

' Position mit eindeutiger Kennung (BT-126) und Objektkennung (BT-128)
Dim p As Integer = alo.AddProduct_Comfort("1", "", "ART-100", "40", "HUR", "Facharbeiterstunden", "", "", "EUR", "", "HUR", _
                       False, "", "", "", "55.00", "EUR", "1", "HUR", "VAT", "S", "19.00", "", "2200.00", "EUR", "", "")
alo.Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument(p, "130", "Raum B.2.14")             ' BT-128

' Steuern und Summen
alo.AddTradeTax("418.00", "EUR", "2200.00", "EUR", "VAT", "S", "19.00")
alo.WriteTotals("2200.00", "2618.00", "2618.00", "2200.00", "418.00", "0.00", "0.00", "0.00", "0.00")

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

Alle Namen, Nummern, die Leitweg-ID, die USt-IdNr. und die Bankdaten sind Muster-Werte. Die echten Werte – Leitweg-ID, Projektnummer und USt-IdNr. des Amtes – entnehmen Sie dem Merkblatt und seiner Anlage.

Drei Stolpersteine

  • Kontaktstelle des Amtes (BT-56): Geben Sie eine Person oder eine Abteilung an, nicht beides – Name und Abteilung gleichzeitig führen in der XRechnung zu Warnungen (CII-SR-465/466). Eine Person steht im ersten Parameter von WriteBuyerContactPerson, eine Abteilung im zweiten: WriteBuyerContactPerson("", "Referat Hochbau", mail, telefon) schreibt DepartmentName. Ältere Versionen des SDK schreiben ohne ersten Parameter keinen Kontakt; tragen Sie dort das Referat im ersten Parameter ein (wie im Beispiel oben).
  • Objektkennung (BT-18) und Ausschreibung (BT-17): Beide stehen im selben Element (AdditionalReferencedDocument) und unterscheiden sich nur im TypeCode: 130 für das Objekt, 50 für die Ausschreibung. Ohne TypeCode schreibt das SDK 916 – das wäre eine Anlage (BT-122), keine Objektkennung.
  • Positionsnummer (BT-126): Jede Position braucht eine eigene Kennung. Vergeben Sie im ersten Parameter von AddProduct_Comfort fortlaufende Nummern und verwenden Sie keine Nummer doppelt.

Als ZUGFeRD-PDF statt als reine XML-Datei

Das Merkblatt erlaubt auch ZUGFeRD im Profil XRechnung. Mit isKOSIT = True erzeugt das SDK das XML im XRechnung-Format; daraus wird mit dem SDK oder mit zugcmd ein PDF/A-3 mit eingebettetem XML. Prüfen Sie das fertige PDF vor dem Versand ebenfalls mit einem Validator.

Weiterführend

Häufige Fragen

Welche Pflichtangaben verlangt Vermögen und Bau Baden-Württemberg in der E-Rechnung?

Anschrift des Auftraggebers (BT-44 bis BT-55), Leitweg-ID (BT-10), USt-IdNr. des Käufers (BT-48), Projektnummer (BT-11), Bestellreferenz bzw. Mittelbindungsnummer (BT-13), Objektkennung (BT-18), Bemerkungen (BT-22), Kontaktdaten des Rechnungsstellers (BT-41 bis BT-43), IBAN (BT-84) und eine eindeutige Kennung je Rechnungsposition (BT-126).

In welches Feld gehört die Projektnummer?

In BT-11 (Projektreferenz, im CII-Format SpecifiedProcuringProject). Mit dem Aloaha ZUGFeRD SDK schreiben Sie sie mit AddSpecifiedProcuringProject.

Wo trage ich die Mittelbindungsnummer bei Baumaßnahmen ein?

In BT-13, die Bestellreferenz des Käufers. Im SDK ist das AddBuyerAssignedID.

Wie schreibe ich die Objektkennung (BT-18)?

Mit Add_AdditionalReferencedDocument und dem TypeCode 130, zum Beispiel Add_AdditionalReferencedDocument("Freiburg, Amtsstraße 1, Gebäude B", "", "130").

Kann ich Stundenlohnzettel als Anlage mitschicken?

Ja. Add_AdditionalReferencedFile bettet eine PDF-Datei als Anlage (BG-24) in die XRechnung ein. Eine solche XRechnung wurde vom KoSIT-Validator ohne Fehler und Warnungen angenommen.

Business Terms in diesem Artikel: BT-10 BT-11 BT-13 BT-18 BT-56 BT-128 BT-126 BT-84 BT-44 BT-48 BT-29 BT-12 BT-14 BT-17 BT-20 BT-9 BT-22 BT-41 BT-42 BT-43 BT-57 BT-58 BT-122