In short
A profile defines how much of EN 16931 is in the XML. MINIMUM and BASIC WL contain no invoice lines and therefore not all mandatory details; they do not count as e-invoices in Germany. BASIC, EN 16931, EXTENDED and XRECHNUNG do. If in doubt, use EN 16931: the complete standard and Quittio’s default.
What a profile is
ZUGFeRD (Factur-X in France) is a PDF/A-3 with embedded XML. How much is in that XML is decided by the profile. Every profile writes its own identifier into field BT-24 (specification identifier), so the recipient knows which rules the invoice follows.
The profiles build on each other: each level contains everything of the previous one and more. The names grew historically; the EN 16931 profile used to be called COMFORT.
The six profiles at a glance
| Profile | Contains | E-invoice in Germany? |
|---|---|---|
| MINIMUM | Header data: number, date, seller and buyer (name only), totals. No lines, no addresses, no VAT breakdown | no |
| BASIC WL | MINIMUM plus addresses, payment data, VAT breakdown and document-level allowances. No lines (WL = “without lines”) | no |
| BASIC | BASIC WL plus lines with quantity, unit, price, VAT and item name | yes |
| EN 16931 | The complete European standard, including item descriptions, item numbers, order references and contacts | yes, recommended |
| EXTENDED | EN 16931 plus sub lines, several discount tiers, instalments, structured late fees and more fields | yes |
| XRECHNUNG | EN 16931 with the XRechnung rules (BR-DE), embedded in the PDF | yes |
Why MINIMUM and BASIC WL are not enough
An e-invoice must contain all mandatory VAT details in the structured part, i.e. in the XML and not just in the PDF. The mandatory details under sec. 14 (4) of the German VAT Act include the quantity and type of goods or the scope and type of service. Exactly this line data is missing in MINIMUM and BASIC WL.
The German tax administration has made this explicit: ZUGFeRD from version 2.0.1 counts as an e-invoice, except for the MINIMUM and BASIC WL profiles. These two profiles were originally meant as a booking aid: the PDF is the invoice and the XML only provides some header data for accounting.
Consequence
An invoice in the MINIMUM or BASIC WL profile is an “other invoice” for domestic B2B in Germany. It is only allowed during the transition periods: until the end of 2026, and until the end of 2027 for businesses with up to €800,000 prior-year turnover.
Quittio writes into each profile only what it may contain and reports data the profile cannot carry as warning QUITTIO-PROFILE-NOT-ALLOWED. A missing mandatory field of the profile is an error (QUITTIO-PROFILE-REQUIRED).
BASIC or EN 16931?
BASIC already is an e-invoice but does not cover every field of the standard. Missing are, among others:
- Item description and seller and buyer item numbers
- Classification, country of origin and attributes of an item
- References to order lines, projects, contracts and receiving advice
- Seller and buyer contacts
- Payment means text, card data, account name and BIC
As soon as you need one of these, which happens quickly, BASIC is too small. That is why EN 16931 is the sensible default: complete, understood by every recipient and the starting point for XRechnung and Peppol.
When EXTENDED?
EXTENDED goes beyond the standard. You need it for sub lines (e.g. a bundle with individual parts), several discount tiers, instalments, exchange rates as structured data or line references.
Quittio switches to EXTENDED automatically when an invoice contains such data and you have not set a profile. Quittio never changes a profile you set explicitly; the validation then reports which data does not fit. With auto_upgrade_profile = false, such an invoice fails instead.
XRechnung has no EXTENDED
For XRechnung with sub lines, use the XRechnung extension: ->format('xrechnung-ubl')->profile('xrechnung-extension').
Choosing profiles in Quittio
Usually you don’t choose a profile: every format has a default, and the automatic choice uses EN 16931. If a recipient explicitly requires a profile, set it:
// default: EN 16931
$result = Quittio::make($invoice)->format('zugferd')->render();
// EXTENDED, e.g. for sub lines
$result = Quittio::make($invoice)->format('zugferd')->profile('extended')->render();
// only if a recipient explicitly requires it
$result = Quittio::make($invoice)->format('zugferd')->profile('basic')->render();
// XRechnung embedded in a PDF
$result = Quittio::make($invoice)->format('zugferd')->profile('xrechnung')->render();To set the profile for all invoices, use defaults.profile in config/quittio.php. It is skipped where it does not fit, e.g. basic for XRechnung or Peppol.
Checking the profile of incoming invoices
When you receive a ZUGFeRD invoice, check whether it is a real e-invoice. Quittio reads the profile and can validate against an expected profile:
$read = Quittio::readFile('/path/to/incoming.pdf');
$read->profile; // e.g. "en16931", "basic-wl" or "xrechnung"
// php artisan quittio:validate incoming.pdf --profile=en16931If an invoice arrives in the MINIMUM or BASIC WL profile, it is not a valid e-invoice once the transition periods have ended. Ask the supplier for an invoice in a suitable profile.
Under review
Whether Quittio will block or only warn about plain PDFs and the MINIMUM and BASIC WL profiles for domestic B2B invoices is currently being reviewed with a tax adviser.