Kurz gesagt
Ein Profil legt fest, wie viel der EN 16931 im XML steht. MINIMUM und BASIC WL enthalten keine Rechnungspositionen und damit nicht alle Pflichtangaben; sie gelten in Deutschland nicht als E-Rechnung. BASIC, EN 16931, EXTENDED und XRECHNUNG gelten. Nimm im Zweifel EN 16931: Das ist die vollständige Norm und der Standard in Quittio.
Was ein Profil ist
ZUGFeRD (in Frankreich Factur-X) ist ein PDF/A-3 mit eingebettetem XML. Wie viel in diesem XML steht, bestimmt das Profil. Jedes Profil schreibt eine eigene Kennung in das Feld BT-24 (Spezifikationskennung), damit der Empfänger weiß, nach welchen Regeln die Rechnung aufgebaut ist.
Die Profile sind aufeinander aufgebaut: Jede Stufe enthält alles der vorherigen und mehr. Die Namen sind historisch gewachsen; das Profil EN 16931 hieß früher COMFORT.
Die sechs Profile im Überblick
| Profil | Enthält | E-Rechnung in Deutschland? |
|---|---|---|
| MINIMUM | Kopfdaten: Nummer, Datum, Verkäufer und Käufer (nur Name), Summen. Keine Positionen, keine Adressen, keine Steueraufschlüsselung | nein |
| BASIC WL | MINIMUM plus Adressen, Zahlungsdaten, Steueraufschlüsselung und Nachlässe auf Belegebene. Keine Positionen (WL = „without lines“) | nein |
| BASIC | BASIC WL plus Positionen mit Menge, Einheit, Preis, Steuer und Artikelname | ja |
| EN 16931 | Die vollständige europäische Norm, zum Beispiel auch Artikelbeschreibung, Artikelnummern, Bestellbezüge und Ansprechpartner | ja, empfohlen |
| EXTENDED | EN 16931 plus Unterpositionen, mehrere Skontostufen, Raten, strukturierte Verzugszinsen und weitere Felder | ja |
| XRECHNUNG | EN 16931 mit den Regeln der XRechnung (BR-DE), eingebettet in das PDF | ja |
Warum MINIMUM und BASIC WL nicht reichen
Eine E-Rechnung muss alle umsatzsteuerlichen Pflichtangaben im strukturierten Teil enthalten, also im XML und nicht nur im PDF. Zu den Pflichtangaben nach § 14 Abs. 4 UStG gehören Menge und Art der gelieferten Gegenstände oder Umfang und Art der Leistung. Genau diese Positionsdaten fehlen in MINIMUM und BASIC WL.
Die Finanzverwaltung hat das klargestellt: ZUGFeRD ab Version 2.0.1 gilt als E-Rechnung, mit Ausnahme der Profile MINIMUM und BASIC WL. Diese beiden Profile waren ursprünglich als Buchungshilfe gedacht: Das PDF ist die Rechnung, das XML liefert nur ein paar Kopfdaten für die Buchhaltung.
Rechtsfolge
Eine Rechnung im Profil MINIMUM oder BASIC WL ist im inländischen B2B-Bereich eine „sonstige Rechnung“. Sie ist nur noch in den Übergangsfristen zulässig: bis Ende 2026, für Unternehmen bis 800.000 € Vorjahresumsatz bis Ende 2027.
Quittio schreibt in jedes Profil nur, was es enthalten darf, und meldet Daten, die das Profil nicht tragen kann, als Warnung QUITTIO-PROFILE-NOT-ALLOWED. Fehlt ein Pflichtfeld des Profils, ist das ein Fehler (QUITTIO-PROFILE-REQUIRED).
BASIC oder EN 16931?
BASIC ist bereits eine E-Rechnung, deckt aber nicht alle Felder der Norm ab. Unter anderem fehlen:
- Artikelbeschreibung und Artikelnummern von Verkäufer und Käufer
- Klassifizierung, Herkunftsland und Merkmale eines Artikels
- Bezüge auf Bestellpositionen, Projekte, Verträge und Wareneingang
- Ansprechpartner von Verkäufer und Käufer
- Freitext zur Zahlungsart, Kartendaten, Kontoinhaber und BIC
Sobald du eine dieser Angaben brauchst, und das passiert schnell, ist BASIC zu klein. EN 16931 ist deshalb der sinnvolle Standard: vollständig, von allen Empfängern verstanden und der Ausgangspunkt für XRechnung und Peppol.
Wann EXTENDED?
EXTENDED geht über die Norm hinaus. Du brauchst es für Unterpositionen (zum Beispiel ein Paket mit Einzelteilen), mehrere Skontostufen, Ratenzahlungen, Wechselkurse als strukturierte Angabe oder Positionsbezüge.
Quittio wechselt automatisch zu EXTENDED, wenn eine Rechnung solche Daten enthält und du kein Profil vorgegeben hast. Ein ausdrücklich gewähltes Profil ändert Quittio nie; dann meldet die Prüfung, welche Daten nicht hineinpassen. Mit auto_upgrade_profile = false schlägt eine solche Rechnung stattdessen fehl.
XRechnung kennt kein EXTENDED
Für XRechnung mit Unterpositionen gibt es die XRechnung-Extension: ->format('xrechnung-ubl')->profile('xrechnung-extension').
Profile in Quittio wählen
Meist wählst du kein Profil: Jedes Format hat einen Standard, und die automatische Wahl nimmt EN 16931. Wenn ein Empfänger ausdrücklich ein Profil verlangt, gibst du es an:
// Standard: EN 16931
$result = Quittio::make($invoice)->format('zugferd')->render();
// EXTENDED, z. B. für Unterpositionen
$result = Quittio::make($invoice)->format('zugferd')->profile('extended')->render();
// nur wenn ein Empfänger es ausdrücklich verlangt
$result = Quittio::make($invoice)->format('zugferd')->profile('basic')->render();
// XRechnung eingebettet in ein PDF
$result = Quittio::make($invoice)->format('zugferd')->profile('xrechnung')->render();Das Profil für alle Rechnungen setzt du mit defaults.profile in config/quittio.php. Es wird übersprungen, wo es nicht passt, zum Beispiel basic für XRechnung oder Peppol.
Profile eingehender Rechnungen prüfen
Bekommst du eine ZUGFeRD-Rechnung, solltest du prüfen, ob sie eine echte E-Rechnung ist. Quittio liest das Profil aus und prüft auf Wunsch gegen ein erwartetes Profil:
$read = Quittio::readFile('/path/to/incoming.pdf');
$read->profile; // z. B. "en16931", "basic-wl" oder "xrechnung"
// php artisan quittio:validate incoming.pdf --profile=en16931Kommt eine Rechnung im Profil MINIMUM oder BASIC WL, ist das nach Ablauf der Übergangsfristen keine gültige E-Rechnung. Bitte den Lieferanten dann um eine Rechnung in einem geeigneten Profil.
In Prüfung
Ob Quittio ein reines PDF und die Profile MINIMUM und BASIC WL für inländische B2B-Rechnungen künftig blockiert oder nur warnt, wird derzeit mit einer Steuerberatung abgestimmt.