Skip to main content

Peppol E-Invoicing (BIS Billing 3.0)

The ECOSIRE Peppol E-Invoicing module (ecosire_einvoice_peppol) adds full Peppol BIS Billing 3.0 e-invoicing to Odoo. It generates standards-conformant UBL 2.1 invoice XML on the EN 16931 semantic model, runs a mandatory pre-flight validation against BIS 3.0 schematron rules, and hands the validated document to a certified Access Point for delivery over the 4-corner Peppol AS4 network. It ships as a standard pack on top of the ecosire_einvoice_core engine.

This module covers the supplier-side (Corner 1) workflow: build, validate, and submit. Corner 2 (Access Point transport) requires a certified AP that you configure separately — the module ships with a clear configuration interface and a manual mode for portal-upload workflows, but live AS4 transmission requires an AP account.

Compatibility: Odoo 17 / 18 / 19 (Community or Enterprise) Price: $499 (one-time) — requires ecosire_einvoice_core ($499, sold separately) License: LGPL-3 | Up to 3 domain activations Standard: Peppol BIS Billing 3.0 v3.0.20-hotfix (mandatory enforcement 2026-02-23) Legislative basis: EU Directive 2014/55/EU (B2G mandatory across the EU since April 2020)

What it does

  • BIS Billing 3.0 document generation — builds UBL 2.1 XML with the correct CustomizationID (BT-24) and ProfileID (BT-23) per spec v3.0.20-hotfix, reusing Odoo's native account_edi_ubl_cii builder (account.edi.xml.ubl_bis3). Does not hand-roll UBL.
  • EN 16931 + BIS pre-flight validation — checks all mandatory BT fields (BT-1 through BT-126), validates the seller EAS scheme, and surfaces a B2G warning when the buyer reference field (BT-10) is missing on government partners.
  • Peppol EAS management on partners — adds Peppol EAS Scheme and Peppol Endpoint ID fields to res.partner; computes the full scheme:value participant identifier automatically. Covers the full BIS 3.0 EAS code list (0002, 0007, 0088, 0151, 0192, 0193, 0195, 0199, 0204, 0208, 0211, 0212, 0245, and more).
  • SML/SMP participant lookup — a wizard checks whether a buyer is registered on the Peppol network using the public, no-auth Peppol Directory and SMP infrastructure. No AP account required for the lookup.
  • Pluggable Access Point adapter — a company-level AP configuration record selects the adapter kind: Unconfigured, Manual (portal upload), Odoo IAP Access Point, or Storecove REST API. Each adapter is clearly scoped; nothing fabricates a vendor endpoint.
  • Per-document transmission log — one peppol.transmission record per send attempt, tracking the generated UBL payload, AP submission GUID, proof-of-delivery reference, and lifecycle state (Draft → Validated → Ready → Sent → Delivered / Error).

Prerequisites

RequirementDetail
Odoo17.0, 18.0, or 19.0 (Community or Enterprise)
ecosire_einvoice_coreCore e-invoicing engine — must be installed first
ecosire_license_clientECOSIRE license enforcement module
account_edi_ubl_ciiOdoo's UBL 2.1 builder — ships with Odoo Accounting (Enterprise or the relevant Community package)
Pythonlxml (install via pip install lxml)
ECOSIRE licenseAn active license for ecosire_einvoice_peppol
Access Point (for live AS4)A certified Peppol AP account — Odoo IAP (via account_peppol) or a third-party such as Storecove. See Access Point configuration.

Installation

  1. Download the module ZIP for ecosire_einvoice_core and ecosire_einvoice_peppol from your ECOSIRE Dashboard.
  2. Extract both modules to your Odoo addons directory:
    unzip ecosire-einvoice-core-*.zip -d /opt/odoo/addons/
    unzip ecosire-einvoice-peppol-*.zip -d /opt/odoo/addons/
  3. Install the required Python package into the Odoo environment:
    pip install lxml
  4. Restart the Odoo service:
    sudo systemctl restart odoo
  5. Navigate to Apps, click Update Apps List.
  6. Search for "ECOSIRE E-Invoicing | Peppol" and click Install. Odoo will install ecosire_einvoice_core automatically as a dependency.
  7. Enter your ECOSIRE license key when prompted (or activate it under Settings > ECOSIRE License).
tip

If account_edi_ubl_cii is not already installed in your database, install it first. It ships with Odoo Accounting on Enterprise and with the account_edi Community package. The module raises a clear UserError during document generation if the native UBL builder is absent.

Configuration

Step 1: Activate Your ECOSIRE License

  1. Go to Settings > ECOSIRE License.
  2. Enter the license key you received after purchase.
  3. Click Activate. The status banner must show Active before any generation or transmission action is available.

A license that is not yet active will block the Validate, Generate, and Send buttons with a clear notification.

Step 2: Configure Your Company's Peppol Participant

  1. Navigate to Accounting > Configuration > Companies (or Settings > Companies > Your Company).
  2. Open the Peppol tab (added by this module).
  3. Set the Peppol EAS Scheme for your company — for example, 0192 for a Norwegian organisation number, 0204 for a German Leitweg-ID, or 0211 for an Italian IVA number.
  4. Enter the Peppol Endpoint ID — the raw identifier value paired with the scheme (e.g. the organisation number without the scheme prefix).
  5. The Peppol Participant field (scheme:value) is computed automatically and used as the sender identifier on all outgoing transmissions.

Step 3: Configure Your Access Point

Go to Peppol E-Invoicing > Configuration > Access Points and create an AP record:

FieldDescription
NameA label for this AP configuration (e.g. "Storecove Production")
CompanyThe Odoo company this AP serves
AdapterThe kind of AP — see options below
EnvironmentSandbox / Test or Production
API Base URLRequired for Storecove: https://api.storecove.com/api/v2/
API Key / TokenRequired for Storecove: your API key from app.storecove.com/api_keys
Sender Legal-Entity IDYour registered sender ID on the AP side (one-time AP registration)

Adapter options:

  • Not configured (no transport) — default. Buttons that require AS4 delivery raise a clear UserError. Use this while you are setting up.
  • Manual / out-of-band (portal upload) — the module generates and validates the BIS 3.0 UBL XML, saves it in the transmission record, and marks the document as Ready to Send. You download the XML and upload it to your AP's web portal manually. No AP credentials required in Odoo.
  • Odoo IAP Access Point — delegates transmission to Odoo's own certified Peppol AP via the account_peppol module (IAP credits). Requires account_peppol to be installed and your Peppol registration completed under Accounting > Configuration > Settings > Electronic Invoicing (Peppol).
  • Storecove REST API — sends via the Storecove /document_submissions endpoint. Requires a Storecove account (app.storecove.com), your API key, and a registered sender legal entity. A free sandbox is available at Storecove for testing before going live.
Live AS4 submission requires an AP account

The Peppol standard defines no universal ERP-facing transport API. Each certified Access Point exposes its own API. This module ships a clean adapter interface and the two above integrations; live document delivery to the Peppol network requires your AP account to be active and the adapter credentials to be entered. The Manual mode and the SML/SMP lookup work without any AP account.

Step 4: Set Peppol Participant IDs on Buyers

For each customer you will invoice via Peppol:

  1. Open the customer record in Contacts (or Accounting > Customers).
  2. Go to the Peppol tab.
  3. Set Peppol EAS Scheme — select the appropriate scheme for the buyer's country (e.g. 0192 for Norway, 0204 for Germany, 0151 for Australia).
  4. Enter Peppol Endpoint ID — the buyer's registered identifier value.
  5. The Peppol Participant field is computed as scheme:value.
  6. Optionally, click Check on Peppol Directory (the participant lookup wizard) to confirm the buyer is registered and can receive BIS Billing 3.0 documents before sending your first invoice.

The Send via Peppol flag on invoices is automatically set to True when the customer has a Peppol participant identifier and the invoice is of type customer invoice or credit note.

Usage

Core workflow: Generate, Validate, Transmit

  1. Create and post the customer invoice as normal in Odoo Accounting. The invoice must be in Posted state before Peppol actions are available.
  2. Open the posted invoice. If the customer has a Peppol participant identifier, the Peppol section appears in the form.
  3. Click Validate BIS 3.0 to run the pre-flight check. The module verifies:
    • All mandatory BT fields (BT-1 invoice number, BT-2 date, BT-3 type code, BT-5 currency, seller and buyer party information, tax totals, document totals, at least one invoice line).
    • The seller EAS scheme is set on your company.
    • If the buyer is a government entity, a warning is logged if BT-10 (buyer reference) is missing — many public bodies reject invoices without it.
    • Errors raise a UserError listing every violation. Warnings are posted to the invoice chatter.
  4. Click Generate BIS 3.0 Document (license-gated). The module:
    • Calls Odoo's native account.edi.xml.ubl_bis3 builder to produce the UBL 2.1 XML.
    • Creates a peppol.transmission record in Validated state, attaching the XML payload.
    • Opens the transmission record so you can review the document before sending.
  5. On the transmission record, click Send via Access Point (license-gated). The outcome depends on the configured AP adapter:
    • Manual: transmission moves to Ready to Send; download the XML from the attachment and upload it to your AP's portal.
    • Odoo IAP / Storecove: the document is submitted to the AP; the AP submission GUID is recorded; the transmission moves to Sent or Delivered when confirmed.
  6. Track all transmissions for an invoice via the Peppol Transmissions smart button on the invoice form.

Participant Lookup Wizard

Go to Peppol E-Invoicing > Operations > Check Participant (or from a partner record) to run an SML/SMP lookup. The wizard uses the public, no-auth Peppol Directory to confirm whether a participant ID is registered and which document types they can receive. This works without any AP account.

Troubleshooting / FAQ

IssueCauseFix
"No Access Point configured" on SendAdapter is Not configuredCreate an AP record and set it as the company default under Company > Peppol tab, or set it on the transmission record directly
"account_peppol module not installed"Odoo IAP adapter selected but the module is absentInstall account_peppol from Odoo's App Store, then complete Peppol registration under Accounting > Settings
"Storecove selected, but live transmission requires…"Storecove adapter chosen but no API key enteredEnter your Storecove API key and Sender Legal-Entity ID on the AP configuration record
"Post the invoice before generating"Generate clicked on a draft invoiceConfirm and post the invoice first (Confirm button)
"BIS Billing 3.0 UBL generation reuses Odoo's native builder…"account_edi_ubl_cii not installedInstall it (ships with Odoo Accounting Enterprise, or via account_edi Community package) and restart Odoo
Validation error: mandatory BT field missingRequired invoice field not populatedCheck the error list in the UserError; fill in the highlighted fields (seller VAT, buyer address, invoice lines, currency)
"B2G buyer reference (BT-10) missing" warningGovernment buyer partner does not have a buyer referenceAsk the buyer for their reference number and enter it on the invoice; many public bodies reject without it
"A Peppol Endpoint ID requires an EAS scheme"Endpoint value saved without selecting a scheme firstSelect the EAS scheme on the partner before entering the endpoint ID
License not active error on Validate/Generate/SendECOSIRE license not activated or expiredGo to Settings > ECOSIRE License, verify the key is entered, and click Activate
Transmission stuck in Error stateAP returned an error (network, auth, or validation)Check the Last Error field on the transmission record; fix the root cause and click Send again to retry
"Peppol standard pack is not installed"Internal check failed — module not fully loadedRestart Odoo and re-try; if it persists, verify ecosire_einvoice_peppol is installed (not just ecosire_einvoice_core)

Country-specific notes

The base BIS Billing 3.0 module covers the generic Peppol 4-corner profile used in most EU B2G contexts and by countries that have adopted base BIS 3.0 (Norway, Netherlands, Belgium, Austria, Australia/NZ, Singapore, Japan, Malaysia, etc.). The following are not served by this module:

  • Italy — uses the SDI (Sistema di Interscambio) system, not native Peppol.
  • France — uses the Chorus Pro / PDP Y-model, not a pure 4-corner Peppol flow.
  • KSA ZATCA — covered by ecosire_einvoice_ksa (separate module with ECDSA signing and ZATCA-specific fields).
  • UAE e-invoicing — covered by a separate UAE pack.

Germany XRechnung (a CIUS on BIS 3.0, EAS 0204 Leitweg-ID) and Belgium CIUS-BE are close to base BIS 3.0 and work with this module for document generation; verify country-specific schematron enforcement with your AP.

Support