Germany and France ยท XInvoice Guide
๐ฉ๐ช ๐ซ๐ท Issue invoices in Germany (X-Rechnung & ZUGFeRD) and France (Factur-X).
Introduction
XInvoice covers the German and French electronic invoice standards. The integration is the same for both countries. The supported standards are:
- X-Rechnung: one of the two standards used in Germany. It consists on an XML file. It can be implemented using two different syntaxes, CII and UBL. They both contain the same information, but include different field names.
- ZUGFeRD: the other standard used in Germany. It a hybrid format that consists on a PDF document with an embedded X-Rechnung file. The only supported syntax for this case is CII.
- Factur-X: the standard used in France. It consists on a PDF document with an embedded XML file. It is worth noting that ZUGFeRD and Factur-X are a joint project between Germany and France, and their content is identical.
When referring to syntaxes, it is important to note that X-Rechnung, ZUGFeRD and Factur-X are all semantic data models. What this means is that they define the data that must be present in the invoice, but not the actual format of the data or the explicit name of the fields.
To implement the semantic models, there are two syntaxes approved by the EU: UN/CEFACT Cross Industry Invoice (CII) and OpenOasis Universal Business Language (UBL).
Prerequisites
To convert invoices to XInvoice format, ensure you have:
- A valid API key and a basic understanding of the workflow engine and API.
- An invoice with:
Setup
To issue invoices, follow these instructions in the Invopop Console:
Connect the XInvoice app
- Navigate to Configuration โ Apps.
- Locate XInvoice France/Germany in the app discovery list.
- Click Connect to activate.
No additional configuration is needed.
Configure invoice workflow
Copy and paste into a new Empty Invoice workflow code view.
First, review our workflows guide to understand the basics.
In Console create a new workflow and select Empty Invoice workflow in the template selector, then add the essential steps:
- Set State - Select
Processing
- Sign Envelope: The envelope must be signed before processing.
- Convert to XRechnung/Factur-X: Generates the XInvoice XML document.
- Generate PDF: For ZUGFeRD and Factur-X formats, this step creates the PDF with the embedded XML.
- Set State - Select
Sent
.
Finally, in the โError Handlingโ area, add Set State and select Error
.
Running
Invopop uses the GOBL library to process conversions. Some example invoices are provided below, along with an example workflow to send the invoices to. We also recommend using the GOBL Builder to create your own invoices.
Be sure to set the regime
field to DE
or FR
in your invoices. This will add some extra validations to ensure the document is compliant. If you plan to issue X-Rechnung invoices, we also recommend using the X-Rechnung addon in the invoice file (see example below), to add further validation.
Sample Invoices
Regular B2B Invoice
Regular B2B Invoice
Regular B2C Invoice
Regular B2C Invoice
B2B Invoice with Additional Fields
B2B Invoice with Additional Fields
You can now generate invoices in the XInvoice format via the API or console. For more details, visit the GOBL docs and XInvoice repo, or contact Invopop Support.
FAQ
Which X-Rechnung syntax should I choose, UBL or CII?
Which X-Rechnung syntax should I choose, UBL or CII?
Both syntaxes are equally valid and contain the same information, so in the majority of cases the choice has no consequences.
If you plan on sending Invoices through the PEPPOL network, we recommend using UBL as it is the supported format. If you plan on also issuing invoices in ZUGFeRD or Factur-X, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X.
How can I view an XML attached to a PDF?
How can I view an XML attached to a PDF?
For ZUGFeRD and Factur-X PDFs, the XML file is embedded within the PDF itself. To extract and view it, you can use the Attachments
section in Adobe Acrobat Reader.
Alternatively, you can use specialized tools like the SysTools PDF Extractor to extract the XML file.