Denmark OIOUBL / NemHandel e-Invoicing
Bookkeeping Act compliance for Odoo — OIOUBL 2.1 / OIOUBL-3 generation and NemHandel / Peppol dispatch
Turn Odoo customer invoices and credit notes into Danish OIOUBL UBL documents and send them over NemHandel and the Peppol network through your own access point. OIOUBL is the Danish customisation of UBL 2.1 maintained by the Danish Business Authority (Erhvervsstyrelsen); OIOUBL-3 is realigned to EN 16931 / Peppol BIS Billing 3.0. Non-reporting businesses above DKK 300,000 turnover come into scope from January 2026.
OIOUBL 2.1 & OIOUBL-3
Peppol BIS Billing 3.0 aligned UBL Invoice and CreditNote XML with the Danish CustomizationID / ProfileID, the DK:CVR party scheme (0184) and the NemHandel/Peppol EndpointID (CVR 0184 or EAN/GLN 0088). Choose the modern OIOUBL-3 profile or the legacy OIOUBL 2.1 identifiers.
NemHandel / Peppol dispatch
Submit the document to your own access point's REST facade, poll delivery status, look up recipient capability and list inbound documents. Sandbox and production endpoints are editable; requests retry with exponential backoff and every call is logged.
Danish VAT, done right
Lines are mapped to the EN 16931 VAT categories — 25% standard (S), zero-rated (Z), exempt (E), reverse charge (AE) and export (G) — with tax subtotals and credit-note referencing of the original invoice for the Bookkeeping Act audit trail.
Real CVR validation
An 8-digit modulus-11 CVR check-digit validator runs on the company and partners, with SE-number (DK########) formatting. EAN/GLN endpoints are validated with the GS1 modulus-10 algorithm.
Business-rule validation
A Danish rule set layered on the engine's EN 16931 core checks the seller CVR and NemHandel endpoint, the buyer CVR on B2B sales, line VAT categories and DKK currency before anything is dispatched.
Bring-your-own-key
Your access-point API key and sender participant id live on the connection record, never in the module. They are transmitted only to the access-point endpoint you configure — nowhere else.
Guided onboarding
A wizard captures your CVR, NemHandel/Peppol endpoint, network and access-point key, validates the CVR, and leaves the company ready to issue OIOUBL invoices. An optional cron drains posted documents to the access point in batches.
Compatible with Odoo 18 and Odoo 19.
Disclosure
This module transmits invoice data only to the NemHandel / Peppol access-point endpoint you configure. Your access-point API key and participant identifier are stored solely on your own database and are never sent anywhere else.
Screenshots
Posted Dkk Invoice With Oiou
Update date: 2026-07-02