Electronic invoices are part of modern accounting
Accounting continues to become more digital. Electronic invoice formats have long been much more than a PDF file sent by email.
A true electronic invoice contains structured data that accounting and ERP systems can process automatically.
This is exactly what we aim to address with our new open source project for Odoo 19 Community.
We have developed several extensions that we are making available to the Odoo community free of charge.
The project is publicly available on GitHub:
Odoo 19 Invoice E-Files on GitHub
Our focus is primarily on Austria, but part of the solution is also useful for businesses outside Austria.
Three modules for electronic invoicing
The project currently consists of three main components:
- ebInterface 6.1 for Austria
- ZUGFeRD for electronic invoices
- automatic submission to e-Rechnung.gv.at
This brings together different electronic invoicing requirements in a single open source project for Odoo 19 Community.
ebInterface 6.1 – the Austrian invoice format
One focus of our development is ebInterface 6.1.
ebInterface is the Austrian standard format for structured electronic invoices.
Our module
l10n_at_ebinterface
generates the corresponding ebInterface 6.1 XML from a customer invoice or credit note in Odoo.
Relevant information from the Odoo invoice is transferred to the XML structure, including:
- Invoice issuer
- Invoice recipient
- Invoice lines
- Taxes
- Payment information
- Bank details
- Invoice data
The generated XML file is linked directly to the invoice.
Why did we develop our own module for this?
During development, we found that there was currently no corresponding Odoo core or OCA module for Austria's native ebInterface standard in Odoo 19 Community.
This was exactly the gap we wanted to address.
Rather than developing an Austrian solution solely for our own installation, we implemented it as a standalone open source module.
This allows the wider Odoo community to benefit too.
ZUGFeRD automatically included with every invoice
The second focus of our project is ZUGFeRD.
ZUGFeRD combines a PDF invoice with a structured XML invoice.
The result is a hybrid invoice: people can still read the invoice as a PDF, while software can automatically process the structured invoice data it contains.
In principle, Odoo 19 already comes with support for ZUGFeRD and CII.
In practice, however, there are some limitations.
Our module
account_invoice_zugferd_ebinterface_auto
therefore addresses precisely this issue.
ZUGFeRD is no longer just an option
We wanted the workflow to be as automated as possible.
When a customer invoice is sent, the system therefore does not first check whether ZUGFeRD has been configured for that particular customer.
Instead, ZUGFeRD is used automatically for customer invoices and credit notes.
The generated ebInterface XML is also included as part of the invoice.
This creates an end-to-end process:
Odoo invoice → PDF → structured e-invoice → sending
without requiring the user to take extra steps for each invoice.
We also fill gaps in Odoo 19 Community
During development, we encountered a few quirks in the Odoo 19 implementation.
Among other things, there are dependencies in the CII exporter that can cause problems outside certain country-specific installations.
Our module addresses several of these practical limitations.
These include:
- missing fields for deferred revenue periods
- the country-specific restriction on PDF/A-3 conversion
- missing or unspecified bank details on existing invoices
This is intended to make ZUGFeRD reliable for businesses beyond the country combinations originally supported.
e-Rechnung.gv.at – direct submission to the Austrian government
The third component is particularly useful for businesses that invoice public sector clients.
With
l10n_at_erechnung_gv_at
an ebInterface invoice can be submitted directly to the Austrian e-Rechnung.gv.at web service.
This turns basic invoice creation into an automated electronic invoicing process.
For example, the workflow might look like this:
Create an invoice in Odoo
↓
Generate ebInterface XML
↓
Send the invoice
↓
Automatically submit ebInterface to e-Rechnung.gv.at
This integrates an otherwise manual process directly into Odoo.
Automatic submission only for customers who need it
Submission to e-Rechnung.gv.at is not enabled for every customer by default.
Instead, it can be enabled for each relevant Austrian customer.
For this purpose, the required details, such as
- Supplier number
- Purchasing group / branch number
- Order reference
are stored in the customer record.
The module also checks whether the requirements for activation have been met.
Test and production operation
For e-Rechnung.gv.at, you can choose between a test and a production environment.
The credentials for the USP web service are stored in the Odoo settings.
This allows the integration to be set up in a test environment before it is used to send live invoices.
Automation rather than extra work
Our aim during development was not to give accountants more buttons to press.
Quite the opposite.
The idea is:
As little manual work as possible.
An invoice is created in Odoo.
The required structured formats are generated automatically.
The relevant files are automatically attached when the invoice is sent.
For Austrian customers configured accordingly, the invoice can also be submitted automatically to e-Rechnung.gv.at.
This automation is precisely what sets a fully integrated e-invoicing solution apart from a simple file export.
Data quality issues are not swept under the carpet
An important point of our implementation, however, is this:
An electronic invoice can only be as good as the data used to generate it.
We therefore do not try to silently fill in missing mandatory information with arbitrary values.
For example, if mandatory information for ZUGFeRD or ebInterface is missing, Odoo should alert the user.
Examples include:
- missing country in the customer record
- missing tax information on invoice lines
- missing bank details
In our view, this is better than sending an electronic invoice that has been generated in the proper format but contains incorrect information.
Open source for Odoo Community
We are also making this project available free of charge as open source.
Why?
Because we benefit from open source software ourselves.
Odoo Community provides an excellent foundation for ERP, accounting and business processes. If we find a feature missing in our day-to-day work, we develop it.
And if the solution could also be useful to other businesses, we make it available to the community.
For us, that is open source in practice.
An Austrian focus – but not just for Austria
The project has a clear focus on Austria.
ebInterface and e-Rechnung.gv.at are particularly relevant to Austrian businesses.
ZUGFeRD support, meanwhile, is also relevant to businesses outside Austria.
This means the project is not solely an Austrian solution.
The combination of structured invoice data and an automatically generated PDF/A-3 document in particular may also be of interest for other Odoo installations.
For Odoo 19 Community
The modules were developed for Odoo 19 Community.
The repository currently contains:
- l10n_at_ebinterface
- account_invoice_zugferd_ebinterface_auto
- l10n_at_erechnung_gv_at
The modules have dependencies on one another, so only the components needed for a particular use case have to be installed.
Our contribution to the community
We see this project as a contribution to the ongoing development of the Odoo community, rather than a finished commercial software product.
Some users may only need ebInterface.
Another business may need ZUGFeRD.
Perhaps a company regularly has to send invoices to public-sector contracting authorities via e-Rechnung.gv.at.
Our project can provide a foundation in all three cases.
And because the source code is openly available, any user can review, adapt and develop the solution further.
Open source means improving together
We firmly believe that open source offers a major advantage, particularly for ERP systems.
Businesses have different requirements.
A solution that works perfectly for one business may need adapting for another.
Open source code makes this possible.
We therefore welcome:
- Feedback
- Bug reports
- Suggestions for improvement
- Pull requests
- support for additional use cases
A good community solution does not necessarily emerge with the first commit.
It takes shape through ongoing development by many users and developers.
Use the project free of charge
The full source code is publicly available on GitHub:
GitHub – Odoo 19 Invoice E-Files
You will also find installation information and documentation for the individual modules there.
Integrating the Austrian e-Rechnung.gv.at web service also requires the Zeep Python library.
Our contribution to an open Odoo ecosystem
With this project, we want to show that even small in-house developments can benefit an entire community.
We originally developed the modules to meet specific requirements.
We are now making these solutions available free of charge to all Odoo 19 Community users.
This allows a bespoke development to become a community solution.
Odoo 19. Open source. Electronic invoices. Austria. And free for the community.
That is exactly why we released this project.