- 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
| Angabe | Feld | Pflicht | SDK |
|---|---|---|---|
| Name, Straße, Ort, PLZ, Land des Auftraggebers | BT-44, BT-50, BT-52, BT-53, BT-55 | ja | WriteBuyer |
| Leitweg-ID (Käuferreferenz) | BT-10 | ja | WriteBuyer (Parameter Leitweg_ID) oder BuyerReference |
| Kontaktstelle (Abteilung/Referat oder Person) | BT-56 | optional | WriteBuyerContactPerson |
| Telefon und E-Mail der Kontaktstelle | BT-57, BT-58 | optional | WriteBuyerContactPerson |
| Lieferantennummer | BT-29 | optional | SellerID |
| USt-IdNr. des Käufers | BT-48 | ja | AddBuyerTAX (Schema VA) |
| Projektnummer (Projektdefinition oder Leistungsart) | BT-11 | ja | AddSpecifiedProcuringProject |
| Vertragsnummer | BT-12 | optional | AddContractReferencedDocument |
| Bestellreferenz, bei Baumaßnahmen die Mittelbindungsnummer | BT-13 | ja | AddBuyerAssignedID |
| Ausschreibungsreferenz (Vergabe- oder Losnummer) | BT-17 | optional | Add_AdditionalReferencedDocument mit TypeCode 50 |
| Objektkennung (Ort, Straße, Hausnummer, Nutzer) | BT-18 | ja | Add_AdditionalReferencedDocument mit TypeCode 130 |
| Bemerkungen (Ansprechperson, Hinweis auf Anlagen) | BT-22 | ja | AddDocumentNote |
| Anlagen (Stundenlohnzettel, Rapporte, PDF-Rechnung) | BG-24 (BT-122 bis BT-125) | je nach Auftrag | Add_AdditionalReferencedFile |
Angaben des Rechnungsstellers
| Angabe | Feld | Pflicht | SDK |
|---|---|---|---|
| Kontaktstelle, Telefon, E-Mail | BT-41, BT-42, BT-43 | ja | WriteSellerContactPerson |
| Auftragsreferenz (Auftragsbestätigung) | BT-14 | optional | AddSellerAssignedID |
| Zahlungsbedingungen bzw. Fälligkeitsdatum | BT-20 / BT-9 | eins von beiden bei positivem Zahlbetrag | AddTradePaymentTerms |
| IBAN | BT-84 | ja | AddPaymentMeans |
| Kennung der Rechnungsposition | BT-126 | ja | erster Parameter von AddProduct_Comfort |
| Objektkennung der Position (z. B. Raum, Zählernummer) | BT-128 | optional | Add_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)schreibtDepartmentName. Ä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
- Vertrags-, Projekt- und Lieferavis-Referenz (BT-11, BT-12, BT-16)
- Objektkennung und Buchungsreferenz je Position (BT-128, BT-133)
- Rechnungsbegründende Unterlagen (BG-24) angeben und auslesen
- VeR-Pflichtfelder für den Handel
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