- Home
- Apps
- SaaS Tools
- Norway SAF-T Financial + EHF/Peppol for Odoo
Illustrative previewA build-to-order Odoo module that produces Skatteetaten-compliant SAF-T Financial XML and sends EHF 3.0 (Peppol
BIS Billing 3) invoices with KID payment references and correct MVA codes.
ECOSIRE scopes, builds, installs and supports it for your specific chart of accounts.
What is Norway SAF-T Financial + EHF/Peppol for Odoo?
A build-to-order Odoo module that produces Skatteetaten-compliant SAF-T Financial XML and sends EHF 3.0 (Peppol BIS Billing 3) invoices with KID payment references and correct MVA codes. ECOSIRE scopes, builds, installs and supports it for your specific chart of accounts. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Norwegian businesses face two obligations that Odoo core does not cover out of the box. When the tax authority (Skatteetaten) requests it during an audit or bookkeeping review, you must be able to hand over a SAF-T Financial file — a strictly-schema'd XML export of your ledger, accounts, customers, suppliers and tax codes mapped to the national standard account set. Separately, to invoice the Norwegian public sector (and increasingly B2B partners), you must send EHF 3.0 documents over the Peppol network rather than PDF. Stock Odoo (account, account_edi, l10n_no) gives you a Norwegian chart of accounts and MVA tax setup, but there is no SAF-T generator, no standard-account cross-mapping, no EHF 3.0 UBL builder, and no KID reference on the payment slip. Teams end up exporting to spreadsheets and re-keying invoices into an Access Point portal by hand.
This is what ECOSIRE builds for you as a made-to-order module. On the SAF-T side we add a generator that walks your account.move / account.move.line data for a selected period and emits the Skatteetaten Audit File - Financial structure: masterfiles (accounts, customers, suppliers, tax table), the general-ledger entries, and the header block carrying your Organisasjonsnummer. Each Odoo account is cross-mapped to the SAF-T standard account (NS 4102-based) via a configurable mapping model, so your own multi-digit chart still exports against the government's standard codes. Every MVA tax in Odoo is mapped to its SAF-T tax code, and we generate the MVA-melding (VAT return) summary figures from the same posted entries. Before anything leaves the system the XML is validated against the official XSD, so you catch structural errors at your desk instead of at the portal.
On the e-invoicing side we implement EHF 3.0 / Peppol BIS Billing 3 as a document type extending account_edi. When you confirm a customer invoice, the module renders Access-Point-ready UBL 2.1 — correct cbc/cac structure, Peppol participant identifiers derived from the validated Organisasjonsnummer, MVA breakdown per rate, and a computed KID (kidnummer) payment reference using the MOD-10 or MOD-11 check-digit scheme your bank uses. The UBL is handed off to your chosen Peppol Access Point for transmission; we do not resell network access, we make Odoo produce a document your provider will accept. We also add inbound EHF: supplier documents you receive are parsed into draft account.move vendor bills for review, so incoming Peppol traffic lands in Odoo instead of an inbox. All of this ships as clean, upgrade-safe code — proper __manifest__.py dependencies, models.Model extensions with @api.depends computes for the KID and MVA fields, ir.model.access.csv plus record rules for who can export SAF-T, XML/OWL views, and a QWeb layout for the KID-bearing invoice. The JSON-RPC/XML-RPC API surface stays intact so your other integrations keep working.
Because it is build-to-order, delivery follows a short, predictable path: a scoping call to confirm your chart of accounts, MVA setup, bank KID scheme and Access Point; a fixed quotation; then we build, validate against the XSD and a real Peppol test corner, run UAT on a staging copy of your database, and deploy with a documented rollback. Typical delivery is one working week from confirmed scope, and we support Odoo 17.0, 18.0 and 19.0 on Community or Enterprise. Pricing starts from $999 (indicative, single-company base scope); additional legal entities, a non-standard chart of accounts requiring deeper standard-account mapping, custom KID rules, or inbound-EHF automation depth increase the quoted scope.
What you get
- Installable source code for your Odoo version (17.0, 18.0 or 19.0), Community or Enterprise
- Installation and configuration on your environment, including standard-account and MVA code mapping for your chart
- Technical documentation covering models, fields, the SAF-T/EHF pipeline and configuration points
- User guide plus a live training session for your finance/accounting team
- Post-go-live support window for defect fixes and configuration questions
- UAT on a staging copy of your database, validated against the SAF-T XSD and a Peppol test corner, with a documented rollback plan
- Git repository handover with tagged release and commit history
- Configuration workbook capturing your KID scheme, Access Point details and account mappings for future reference
Who this is for
Norwegian SME finance manager
Runs bookkeeping in Odoo and must be able to produce a valid SAF-T Financial file on demand when Skatteetaten or the auditor asks, without exporting to spreadsheets and re-formatting by hand.
Public-sector supplier / AR team
Sells to Norwegian government bodies that mandate EHF over Peppol and needs confirmed Odoo invoices to become Access-Point-ready UBL with the correct KID reference, instead of manual entry in a portal.
Accounting firm serving Norwegian clients
Manages multiple client databases and wants one reliable, upgrade-safe SAF-T and EHF module they can standardise on across engagements rather than patching each client individually.
Odoo implementation partner / internal ERP lead
Owns an Odoo rollout in Norway and needs a documented, git-handed-over localization layer with clear models, access rules and tests so the compliance piece is maintainable in-house.
How Norway SAF-T Financial + EHF/Peppol for Odoo Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| SAF-T Financial export | Built-in generator emitting the Skatteetaten structure, XSD-validated before export | Possible but you specify and build the whole XML schema yourself | May cover basic SAF-T but rarely tuned to your chart or validated | Not available in Odoo core |
| Standard-account mapping | Configurable mapping of your accounts to the NS 4102-based standard set | Hand-coded mapping you must design and maintain | Fixed mapping assumptions, hard to adapt to your COA | No standard-account concept at all |
| EHF 3.0 / Peppol invoicing | UBL 2.1 document type, Access-Point-ready with Peppol identifiers | Build the UBL builder and identifier logic from scratch | Generic EHF that may not match your Access Point's expectations | Only generic `account_edi`, no EHF/Peppol BIS builder |
| KID payment reference | Computed KID with MOD-10 or MOD-11 matching your bank scheme | You implement and test the check-digit algorithm yourself | KID sometimes present but scheme choice may be fixed | No KID generation |
| Inbound EHF vendor bills | Received Peppol UBL parsed into draft vendor bills for review | Separate parser project on top of the outbound work | Often outbound-only, no inbound path | Not handled |
| Fit to your setup | Scoped to your COA, MVA codes, KID scheme and Access Point | Fully bespoke but on your time and QA budget | One-size-fits-all, you adapt around its assumptions | Generic Norwegian localization only |
| Delivery & support | Built, installed, UAT + rollback, support window, git handover | Depends entirely on your internal capacity and timeline | Download plus forum/ticket support, self-install | Community support only, no localization delivery |
| Odoo version coverage | 17.0 / 18.0 / 19.0, Community or Enterprise, upgrade-safe | Whatever you build and then re-test each upgrade | Varies by listing; upgrades not guaranteed | Ships with each version but without SAF-T/EHF |
Frequently Asked Questions about Norway SAF-T Financial + EHF/Peppol
Is this an app I can download and install right now?
No. This is a build-to-order module. ECOSIRE builds it for your specific chart of accounts, MVA setup, KID scheme and Peppol Access Point, then installs and supports it. It is not an existing apps.odoo.com download, and we never claim an instant download.
How long does delivery take?
Typical delivery is one working week from confirmed scope. After the scoping call and a fixed quotation, we build the module, validate the SAF-T output against the official XSD and test EHF over a Peppol test corner, run UAT on a staging copy of your database, and then deploy with a rollback plan.
How does pricing and scoping work?
Pricing starts from $999 as an indicative single-company base scope. We give you a firm fixed quote only after a scoping call, because the real drivers are the number of legal entities, how non-standard your chart of accounts is for standard-account mapping, custom KID rules and how much inbound-EHF automation you want. The from-price is indicative, not a fixed quote.
Does this send my invoices onto the Peppol network directly?
The module produces Access-Point-ready EHF 3.0 / Peppol BIS Billing 3 UBL from your confirmed Odoo invoices and hands it to your chosen Peppol Access Point for transmission. We do not resell network access; we make Odoo generate a document your Access Point will accept, and we help wire up the handoff.
What about support and future Odoo updates?
Every build includes a post-go-live support window for defect fixes and configuration questions, and you receive the full git repository so the code is yours to maintain. We keep the SAF-T and EHF logic upgrade-safe, and we can quote a separate engagement to migrate the module when you move to a newer Odoo version.
Which Odoo versions and editions are supported?
We support Odoo 17.0, 18.0 and 19.0 on both Community and Enterprise. The module builds on `account`, `account_edi`, `base_vat` and `l10n_no`, and we confirm any edition-specific behaviour during the scoping call.
Can it handle both the SAF-T export and the VAT return figures?
Yes. The SAF-T Financial export and the MVA-melding (VAT return) summary are computed from the same posted journal entries, so your audit file and your VAT figures reconcile against one source. The SAF-T file is validated against the Skatteetaten XSD before you export it.
Related Modules

Nigeria FIRS E-Invoicing & VAT Compliance for Odoo
A build-to-order Odoo module that makes Nigerian companies compliant with FIRS e-invoicing, 7.5% VAT and withholding tax — with a localized chart of accounts, TIN validation and return-ready reports. ECOSIRE scopes, builds, installs and supports it on Odoo 17, 18 or 19.

Nigeria Payroll (PAYE, Pension, NHF)
Build-to-order Odoo Nigeria payroll localization: PAYE, pension, NHF, NSITF & ITF in NGN. ECOSIRE builds, installs and supports it.

Odoo AI Agent (MCP Server)
A Model Context Protocol (MCP) server that exposes your Odoo ERP as a set of scoped, permissioned tools so external AI agents like Claude and ChatGPT can query and act on it safely. Built, installed, and supported by ECOSIRE for Odoo 17.0, 18.0, and 19.0.

Odoo AI Copilot — Chat with Your Database
Secure agentic AI copilot for Odoo 17/18/19 — search, create & update any record in plain English, with approvals and full audit logging.
Norway SAF-T Financial + EHF/Peppol
A build-to-order Odoo module that produces Skatteetaten-compliant SAF-T Financial XML and sends EHF 3.0 (Peppol BIS Billing 3) invoices with KID payment references and correct MVA codes. ECOSIRE scopes, builds, installs and supports it for your specific chart of accounts.
- SAF-T Financial XML export generating the Skatteetaten `Audit File - Financial` structure (masterfiles, GL entries, header) for any selected period
- Configurable standard-account mapping model that cross-references each Odoo account to the SAF-T standard account set (NS 4102-based) so your own chart still exports against government codes
- MVA-to-SAF-T tax-code mapping table covering domestic, reverse-charge, zero-rated and exempt rates
- MVA-melding (VAT return) summary computed from the same posted `account.move.line` entries used for SAF-T