e-invoicing (Peppol)

Discuss strategies to grow your store - SEO, paid ads, email campaigns, conversions, branding, and more...
Share what’s working, ask for input, and learn from other shopowners focused on increasing revenue.
Post Reply
User avatar
martindavinci
Member
Posts: 38
Joined: Mon Mar 08, 2021 8:33 am
Phoenix Version: 1.1.0.5
Has thanked: 2 times

e-invoicing (Peppol)

Post by martindavinci »

Have you given any thought to e-invoicing yet? It’s already mandatory in Belgium and will become mandatory in the Netherlands in 2028.

E-invoicing for online shops means that invoices are automatically sent in a structured digital format (usually via the Peppol network), which ensures faster processing and fewer errors. It is on the rise and is mandatory in many countries for B2B and public sector contracts. For B2C, it is not mandatory, but it is efficient when linked to accounting software.

I have government contracts where invoices can now only be accepted via e-invoicing, which isn’t exactly ideal, hence my question.
I look forward to your responses,
Regards, Martin

Translated with DeepL.com (free version)


Join The Code Co-op to get access to your library in the Code Co-op Forum
User avatar
burt
Core Team
Posts: 4551
Joined: Tue Oct 29, 2019 9:37 am
Phoenix Version: v1.1.0.8
Has thanked: 252 times
Been thanked: 412 times

Re: e-invoicing (Peppol)

Post by burt »

New Customer Data modules to capture:
  1. `customers_peppol_id`
  2. `customers_vat_id`
Store these in new columns on the `customers` table. Both columns should be **nullable**, as shops may operate:
  • B2B (PEPPOL)
  • B2G (PEPPOL)
  • B2C (most likely no PEPPOL)
Issuing the invoice:

When the invoice is issued (i.e. finalised, not at checkout):
  1. Take a snapshot of the Order data
  2. Transform it into a structured payload (JSON is the easiest way here)
  3. Send it to your chosen Peppol access point (whichever one needs to support JSON)
This could be hooked into "finalised" Order Status for automation.
Or an extra button to press.

---

The main challenge is ensuring the data is valid. Before sending, you must guarantee:
  • Customer has a valid `customers_peppol_id` (if not skip PEPPOL entirely)
  • VAT numbers are present and correctly formatted (for B2B)
  • Country codes are ISO 2 letter
  • Line-level tax calculations are correct (not just order totals)
  • Totals reconcile exactly (no rounding differences)
  • Required address fields are populated (not blank)
If any of the above are missing or inconsistent
-> the access point will reject the invoice
-> you fix, and re-submit

Practical advice

Do not send at checkout - only when the invoice is final
Do not attempt to "fix" data at send-time - validate beforehand or at worst, allow re-submit
Do not assume existing order data is sufficient ... a simple validation step before sending would be good. Maybe a button somewhere to allow shopowner to see what Peppol will receive before finalised send ?

Peppol Status column in Orders page

To Send [eg on new Orders not yet finalised]
Failure [allow re-try]
Success

---

It's a lot of jigsaw pieces.
From which you need to make a clear picture.

What's your next move?


Join The Code Co-op to get access to your library in the Code Co-op Forum
Post Reply