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 $399.00 USD; request a quote for a scoped proposal.
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.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your Odoo.
You go live in about 2–4 weeks, with a post-launch support window.
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 2 to 4 weeks from confirmed scope, and we support Odoo 17.0, 18.0 and 19.0 on Community or Enterprise. Pricing starts from $399 (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.
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.
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.
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.
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.
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 |
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.
Typical delivery is 2 to 4 weeks 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.
Pricing starts from $399 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.
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.
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.
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.
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.
A build-to-order Odoo localization that loads Algeria's full wilaya and commune hierarchy with bilingual French and Arabic names, wired into partner addresses and reporting. ECOSIRE builds, installs, and supports it after your quotation.
A build-to-order Odoo module that lets you render any accounting report — P&L, Balance Sheet, aged reports, journals, trial balance — in a currency of your choice, with automatic conversion at the rate you define. ECOSIRE scopes, builds, installs and supports it for your Odoo 17/18/19 environment.
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.