Peppol Credit Note EU
Peppol BIS Billing 3.0 (EN 16931) UBL credit-note generator with referenced-invoice linkage and reason codes
What this module does
This module turns any posted Odoo customer credit note (refund) into a fully structured Peppol BIS Billing 3.0 UBL CreditNote document. The generated XML is EN 16931 compliant, carries the mandatory CustomizationID and ProfileID identifiers, and - crucially for a credit note - links back to the preceding invoice through the BillingReference / InvoiceDocument Reference business group (BT-25 / BT-26).
Everything runs on the Odoo Community accounting base. There are no external accreditation requirements: the module produces the standards-compliant payload, which you transmit through your own Peppol Access Point or archive as required.
Key features
UBL 2.1 CreditNote (type 381)
Generates the Peppol BIS Billing 3.0 CreditNote with the strict UBL element ordering, document type code 381 (and the other Peppol-allowed credit-note codes 396 / 81 / 83 / 532).
Referenced-invoice linkage
Automatically fills cac:BillingReference /
cac:InvoiceDocumentReference from the reversed invoice
or the document reference, so every credit note points at the
invoice it corrects.
Credit reason codes
A catalogue of business credit reasons (goods returned,
damaged goods, price correction, quantity correction,
duplicate invoice, order cancelled, post-sale discount, VAT
correction) drives the cbc:Note on the document.
EN 16931 VAT breakdown
One cac:TaxSubtotal per VAT category with the
correct UNCL 5305 category code, rate and the mandatory
exemption-reason text for reverse-charge, intra-Community,
export, exempt and out-of-scope supplies.
EU VAT validation
Structural VIES checks for every EU/EEA country plus real check-digit algorithms for Germany (MOD 11,10), France (DGFiP key), the Netherlands (11-test), Belgium (97-complement), Italy (Luhn) and Spain (NIF control letter).
Business-rule pre-check
A Peppol/EN 16931 rule engine flags missing billing references, invalid VAT identifiers, inconsistent totals and wrong VAT categories before you generate or send.
Standards & codes implemented
| Element | Value / source |
|---|---|
| CustomizationID | urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 |
| ProfileID | urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 |
| Credit note type code (BT-3) | UNCL 1001 subset: 381, 396, 81, 83, 532 |
| VAT category codes (BT-118) | UNCL 5305: S, Z, E, AE, K, G, O, L, M |
| Allowance / charge reasons | UNCL 5189 / UNCL 7161 |
| Payment means (BT-81) | UNCL 4461 subset |
| Document syntax | OASIS UBL 2.1 CreditNote |
How it works
- Enable Peppol credit notes on the company and set the seller electronic address (EndpointID) and scheme.
- Set the Peppol endpoint on your customers.
- Post a customer credit note (refund). It is flagged To Generate.
- Pick a credit reason and credit-note type code, then run Validate Peppol to check the business rules.
- Run Generate Peppol Credit Note to produce the downloadable UBL XML, or use the batch wizard / cron for bulk generation.
Scope & disclosure
This module is a pure format generator. It builds the Peppol BIS Billing 3.0 credit-note payload; it does not act as a certified Peppol Access Point. Transmission is performed through your own Access Point with your own credentials. All data stays in your Odoo database.
Screenshots
Batch Generate
Credit Notes
Update date: 2026-07-02