E-invoicing, send and receive over the PEPPOL network

PEPPOL for everyone!

We have just tagged v5.11.0 which is a big release for users in the EU zones where receiving e-invoices is mandated from the 1st of January 2025. Of course, there are lots of options available within Invoice Ninja to comply with mandate.

Community members @LarsK1 and @paulwer have been central to the implementations of both the Zugferd xml generation and also import of .xml files into expenses within Invoice Ninja. These two features allow you to comply with the coming mandate easiliy.

However we know that receiving einvoices is only the start, the next part is delivery, looking to the future we have decided to join the PEPPOL network as an access point and provide both of Hosted and Self hosted users access to receive and send einvoices via the PEPPOL network!

As far as we know, we are the only platform available that provides this functionality for self hosted users!

The current EU einvoicing system is fragmented, with some countries having their own proprietary standards (I’m looking at you Spain, Italy, Romania, France and others!) However by 2030 the EU will have a single accepted standard - PEPPOL - which will allow seamless intra and inter community einvoicing.

As such not all EU countries are currently supported, the following EU countries have immediate support for sending and receiving einvoices:

Austria
Belgium
Denmark
Estonia
Finland
Germany
Iceland
Lithuania
Luxembourg
Netherlands
Norway
Sweden
Ireland

There are also some special edge cases where we support sending einvoices into some EU regions:

Sending to Government Department of the following EU countries:

  1. France
  2. Greece
  3. Romania
  4. Spain
  5. Great Britain (post brexit)
  6. Portugal
  7. Slovenia

ok enough, how do i get started?

There are a couple of requirements for sending over the PEPPOL network, Invoice Ninja has a duty for KYC (Know Your Customer) this is to ensure that sending over the Peppol network is not polluted with spam invoices.

Self Hosted Requirements:

  1. Verified White Label user. Your white label license will be part of the KYC process and we will use this as a reference during authentication with our service.

  2. Purchase of ecredits. Sending and receiving over the network is unfortunately not free, there is a huge volume of compliance requirements both initial and ongoing to join and stay on the PEPPOL network. We do expect these costs to reduce over time. We have two bundles available for prepurchase.

500 ecredits (receive / send up to 500 documents over a 12 month period) $50
1000 ecredits (receive / send up to 1000 documents over a 12 month period) $100

There are no ongoing fees, it is a simple transactional service. You can also opt to only “receive” or “send” from the service.

How does it work

In your .env file insert a new key

LICENSE_KEY=your_license_key_here

Then navigate to Settings > E Invoice

Select PEPPOL and click on Get Started

You’ll then be asked some questions, it is important to note that your VAT number is essentially your identifier on the network, if you do not have a VAT number, but something like a Steurnummer or KLK number, you may want to wait to join in the network as I do not think it is ready as yet for users like yourself at this point

Your VAT number and company details must be as they are registered with your local authority, the details you enter here will be used directly on your einvoices, after making this submission changes you make within Invoice Ninja are NOT USED this is to prevent fraud / spam across the network.

VAT numbers are typically prefixed with your country code, ie DE123123123 and must contain no spaces.

Once you are registered on the network. Your company will be assigned a legal entity id which is how Invoice Ninja will be able to identify you on the network. At this point essentially you are on the PEPPOL network and you can be reached by other senders on the network!

Sending

We have detailed information in the docs about the additional requirements around einvoicing, but it is super important you understand these prior to sending.

1. Exclusive Taxes + Line Item Taxes only.

If you were previously using inclusive taxes and/or total taxes, it is time to change. We only support exclusive taxes and line item taxes, this is due to line item tax categorization and in the future product categorization options. The Calculate Taxes engine has been upgraded to support this, so we suggest unsetting all default taxes and changing to a single Line Item Tax along with Exclusive taxes and toggling on Calculate Taxes.

This allows us to calculate Nexus ( where tax is due ) and also allows us to perform advanced functionality, for example, if you are selling from Germany into Austria and are above the EU tax threshold, then you are required to register for an AT VAT Number. This can be added as an additional tax identifier in Invoice Ninja, and we will understand when this VAT number should be used and use this vat number in the einvoice.

2. Payment Means are mandatory

For an einvoice to be valid you need to have a valid payment means, typically in the EU zone this will be a Credit Transfer (Code 30)

You will enter in your IBAN / BIC and Account Name

3. A buyer reference is mandatory

Best practice which we will enforce is to include a buyer reference onto the invoice, for this field, please use the Purchase Order Number Field (PO #) in the UI

You will also note that the interface has a new tab called E-Invoice. In here you can inspect any validation problems with the e-invoice prior to sending.

We use a special extension (saxon) to compare the Peppol invoice rule book against the invoice document, sometimes the returned messages can be quite cryptic, but generally they will refer to either a missing field or some illegal configuration. After updating an invoice, you can use the Validate button to recheck the invoice for errors. You can also attempt to send the einvoice directly from the page - or - simply use the Email Invoice button, and we’ll also take care of the einvoice sending.

3. Make sure your clients are classified correctly!

We’ve made incremental upgrades to the client object to ensure important context is captured, in particular, you will want to ensure that the clients VAT (or ID) number is correct. The clients classification is also super important. If you tag them as a business, with no VAT number present, then the tax calculator will apply taxes regardless.

We have toggles that can override some of the base functionality, in particular, the Valid VAT number toggle can be used when you want to enforce whether the vat number is legitimate or note. You can also set a client as Tax Exempt at this point if they are a special Government body which is tax exempt.

** What happens if my client is not on the PEPPOL network?**

In this instance, the einvoice is sent directly to the client via email.

** How do I receive einvoices (Expenses) **

Invoice Ninja will proxy einvoices that are received and transfer them directly to your self hosted instance… It is important to note that nothing survives the request cycle, we pipe the data from Invoice Ninja directly to your Self Hosted installation.

We’ve taken additional measures in the implementation to ensure compliance with data handling in this regard as we know this is super important to all users.

By default, your self hosted installation will poll our Hosted Servers every 4 hours. We’ll check if any documents have been received, and if they have, we pipe these to your self hosted server.

These are imported as Expenses, which we convert for you, we also provide the original .xml document received and also a .html representation of the expense (invoice).

If you are a self hosted user, in one of these regions, and have a white label license and would like to be part of a feedback group to help us iron out any small issues, we are happy to provide 500 credits to early adopters. Please send an email to [email protected] with Peppol Self Hosted Beta in the subject and we can assign credits to your account directly.

As always, if you have any questions, please ask away!

For more details please ask questions here, and we also have further reading here: Free Source Available Invoicing, Expenses & Time-Tracking | Invoice Ninja

3 Likes

Congrats @david, this is a huge accomplishment!

Thank you to all of the community members who have helped.

1 Like

Hello,
where are those servers located, please?

@Schmitti

We have partnered with Storecove for our PEPPOL functionality. This is where all of your PEPPOL related data resides which is in Ireland.

More information on their data privacy policies can be found on their factsheet here:

Thanks, so the Peppol-Server are within the EU and so on DSGVO-compliant I guess.

But one is not forced to use Peppol, isn’t one?

To the manual and the Zugferd-implemantation: As long as negative amounted invoices are only not allowed if payment-option is set to banking-transfer, is there no chance to set this up for each invoice to provide negative amounted zugferd-invoices? At least negative line-amounts are possible by setting negative quantities.

I’m asking because in Germany we shall write negative invoices as “normal” invoices with it’s ongoing invoice-numbering. They just shall be called as “Stornorechnung”, “Korrekturrechnung”, or “Rechnungskorrektur” instead of “Rechnung” (invoice).

For me I would like to avoid Peppol as long as possible. So I need a system which is able to import e-invoices like xmls or ZUGFeRD manually or by an automated but self-hosted imap- or pop-based e-mail-importing-feature.

You already wrote me in another thread or on Github that ZUGFeRD-importing is still in progress. I guess setting focus on Peppol was definetely better for EU-wide compatibility-issues. I and many German users just need a plan how to proceed from 01.01.2025 on. That’s why I’m asking so much.

Peppol is 100% opt in. You can certainly use the current XInvoice implementation in the system

We’d need to get an update from @LarsK1 about the negative invoices for zugferd, and whether they are supported or not.

The expense import functionality is avaialble currently, but only using a transactional service such as Postmark, Mailgun or Brevo.

You can definitely drag and drop xml files into the Expense Import section of the react application to automatically ingest zugferd documents!

You are 100% compliant right now with invoice ninja for 1/1/2025 regulations with our Zugferd implementation.

If you are not processing a huge volume of invoices / expenses then manual Zugferd is fine. However if you do get a chance to jump onto the PEPPOL implementation it is super nice to have this all automated now.

Taking off my Invoice Ninja hat…

I have spent the better part of a full year working on this implementation. And the one thing has become extremely clear is that this is the first step for governments to put themselves well and truly between each transaction for their own benefit and with only additional burden for end users.

For the average user einvoicing will be a painful adoption and the personalization we have all grown accustomed will be wiped out. Gone will be the nice email talking to your clients along with your invoice. Replaced with an xml document that is simply registered in a system somewhere… all context lost…

I can only hope there is enough push back from small to medium sized businesses that can alter the path that we are on as it will result in a very stale environment for businesses to communicate with their clientele.

Hi @david @Schmitti ,
you’re right. XInvoice 3.0 does not allow to set a negative line item price, so you’ll need to set a positiv line item pricing with a negative quantity.
The feature for a “Stornorechnung” is missing, since a long time, since germany is probably one of a few countries that needs something like that :slight_smile: .
I personally use credit notes, for cancelling a wrong invoice.

workflow:

  • write an wrong invoice
  • note that is actually wrong
  • copy the invoice to a credit note
  • apply the credit note to the invoice (both are then payed)
  • create a new (hopefully now) correct invoice.

That’s the way the Finazamt and our tax adviser agreed on.

I’m running version 11 on a Synology NAS. However, I keep receiving a popup stating that the license key cannot be found. I have the WithLabel license installed.

Can you post a screenshot of what you’re seeing?

The white label license is optional, if it isn’t purchased you shouldn’t see any popups.

@oliviervb

Have you added the environment variable

LICENSE_KEY=xxxxxxx in your .env file?

just to note as part of the KYC, we do require the white label license for users to access the Peppol integration.

Maybe a stupid question. But where and how can I access that file on a docker (synology)

not a silly question

the .env file is a hidden file, you may need to turn on show hidden files.

@david Thank you very much for your detailed answer! We’ll see how it’s going to be.

Hi, @LarsK1 ,

what do you mean by “apply the credit note to the invoice”? How to you involve the original invoice-number?

I’m going to ask the local tax-office for advice. In the end I’ll have to do what they “like”. :-/

However thank you for your posting.

Greetz

ok thx. and where do I need to buy the peppol license?

During the registration process, you’ll be offered a link to purchase credits.

ok one step closer…
afther the puchase, I entered my company information (step4 form). when i click on Continue i receive this:

@oliviervb

Can you please send an email to [email protected]

We can debug this offline.