A build-to-order Frappe app that turns ERPNext Sales Invoices into validated OIOUBL documents and exchanges them over Nemhandel/Peppol without leaving the ERP. ECOSIRE builds, installs and supports it for your Frappe/ERPNext v15 or v16 site. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order Frappe app that turns ERPNext Sales Invoices into validated OIOUBL documents and exchanges them
over Nemhandel/Peppol without leaving the ERP.
ECOSIRE builds, installs and supports it for your Frappe/ERPNext v15 or v16 site.
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 ERPNext.
You go live in about 2–4 weeks, with a post-launch support window.
Danish public-sector buyers will not accept a PDF. If you invoice a municipality, a region, or a state institution in Denmark, the document has to arrive as a structurally valid OIOUBL XML delivered through Nemhandel — and increasingly through Peppol BIS, which Danish practice now runs alongside OIOUBL. ERPNext gives you a clean Sales Invoice, a tax template, a customer master and a print format, but nothing that produces a schema-valid OIOUBL-2.1 invoice, resolves the receiver's endpoint, transmits it, or tells you what happened after it left. Most finance teams close the gap with a portal: someone re-keys the invoice into a web form, downloads a receipt, and files it in a shared drive. That works until volume rises, until a credit note has to reference the original invoice, or until an auditor asks you to prove which exact XML was sent for a given posting.
We build a proper Frappe app — its own repo, its own module, installed with bench get-app and bench install-app — that closes the loop inside ERPNext. A Danish E-Invoicing Settings single DocType holds the sender endpoint (CVR/GLN scheme identifiers), access-point credentials, environment (test/production) and per-company defaults. A child mapping DocType translates ERPNext master data into UBL semantics: Item Tax Templates to Danish VAT categories and rates, UOM to UN/ECE Rec 20 codes, Payment Terms to UBL payment means, and Company Address into the AccountingSupplierParty block. Fields we add live on Customer and Sales Invoice as custom fields shipped in fixtures — EAN/GLN, EndpointID scheme, buyer reference (Rekvirent/contract reference), and the order reference a public buyer requires — so nothing is stored in a stray text field the next upgrade will lose.
Generation and delivery are driven by hooks.py doc events. on_submit on Sales Invoice enqueues a background job that renders the UBL from a Jinja/lxml builder, validates it against the OIOUBL/Peppol BIS schema plus the Schematron business rules, and refuses to transmit on a hard failure — the invoice stays submitted in ERPNext while the delivery record shows exactly which rule broke and on which field. Transmission goes through your chosen Nemhandel access point over its REST/AS4 interface; a dedicated E-Invoice Transmission DocType is the audit spine, storing the generated XML as a private File, the message identifier, timestamps, and every status transition. A scheduler event polls for message-level responses and delivery states, so a rejection lands as a comment and a notification on the invoice rather than in someone's inbox. Rejections open a correction workflow: the app links the corrective Credit Note or re-issued invoice back to the original transmission, carries the correct BillingReference, and keeps both documents in the archive chain. The same posting produces both machine and human output — the validated XML and a matching print format — so what the customer reads and what the system sent can never drift. Whitelisted methods expose retry, re-validate and download-XML to the Frappe REST API and to client-script buttons, and role profiles keep transmission and retry rights separate from ordinary invoice entry.
Delivery is build-to-order, not a marketplace download. After a scoping call we confirm your Frappe/ERPNext version (v15 or v16), your access-point provider, whether you also need inbound Purchase Invoice ingestion, and your VAT and archiving requirements. We then build the app against your version, install it on a staging bench, run UAT with your own invoices and your provider's test endpoint, and only then deploy to production with a rollback plan. Typical delivery is 2-4 weeks from confirmed scope. You receive the full source in a git repository you own, so nothing about your compliance path is locked to us.
Invoices municipalities, regions or state institutions and must deliver OIOUBL over Nemhandel to get paid at all. Wants issuing to be a normal ERPNext submit, with rejections visible on the invoice instead of arriving as an email from a portal.
Runs one ERPNext site across several countries and needs the Danish entity compliant without forking the chart of accounts or the invoicing process. Needs per-company settings, clean VAT mapping and an audit trail their statutory auditor accepts.
Owns upgrades and does not want compliance logic living in server scripts and custom fields that a `bench migrate` can silently break. Wants a versioned app in a git repo, documented hooks, and a rollback plan for every deployment.
Sends and chases invoices every day and needs to know which documents were delivered, which were rejected and why, and how to issue a linked correction without re-keying anything into a supplier portal.
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| OIOUBL / Peppol document generation | Schema- and Schematron-validated UBL built from the Sales Invoice posting, both profiles from one mapping layer | Hand-rolled XML templates that pass today and break on the next OIOUBL release | Generic Peppol export, often without Danish OIOUBL specifics or buyer-reference handling | PDF print formats only — no UBL output of any kind |
| Delivery over Nemhandel | Connector to your chosen access point, queued via background jobs with full status polling | Usually a manual upload to the provider portal, or a script nobody owns after the developer leaves | Often bound to one specific access-point vendor you must switch to | Not available — delivery happens outside ERPNext entirely |
| Tax and master-data mapping | Configurable mapping from Item Tax Templates, Tax Categories and UOM to UBL codes, per company | Hard-coded rates and codes in script logic; every new tax case is a code change | Fixed assumptions that rarely match a real Danish chart of accounts | Tax templates exist but carry no UBL category or exemption-reason semantics |
| Rejection and correction handling | Responses written to the invoice timeline, with a correction workflow linking credit notes via UBL BillingReference | Rejections arrive by email and are reconciled by hand | Status field updated, correction linkage usually left to the user | No concept of e-invoice delivery status at all |
| Audit trail and archiving | Exact transmitted XML and every response stored per invoice as a retrievable transmission record | XML often kept only in logs or a shared drive, hard to tie back to a posting | Varies; frequently stores only the last payload | Standard document versioning only — no payload archive |
| Upgrade resilience | Versioned Frappe app with fixtures and documented hooks, built for your v15 or v16 site | Server scripts and custom fields that a `bench migrate` can silently break | Depends on the maintainer keeping pace with your ERPNext version | Upgrades cleanly, but there is nothing compliance-related to upgrade |
| Fit to your process | Scoped to your entities, buyers, VAT cases and access point before a line is written | Fully bespoke, but you carry the specification and the compliance research | You adapt your process to the app's assumptions | Generic invoicing with no Danish-specific process support |
| Ownership and support | Private git repo handed over, documentation, training and a post-go-live support window | You own it, and you also own every future fix and regulatory change | Subscription with support quality tied to the vendor's roadmap | Community ERPNext support only for the core, nothing for OIOUBL |
This is a build-to-order app, not an instant download. Typical delivery is 2-4 weeks from confirmed scope. We start with a short scoping call, confirm your Frappe/ERPNext version, access-point provider and whether inbound documents are in scope, then build against your version, run UAT on staging with your own invoices, and deploy to production with a rollback plan. You receive installable source code, documentation, training and a git repository you own.
Yes. Nemhandel and Peppol delivery is performed by a registered access point, and the app integrates with the one you choose or already use. We implement the connector against your provider's REST or AS4 interface, store the credentials in the settings DocType, and handle the configuration of your endpoint identifiers as part of the work. We do not resell the access-point subscription.
We build for Frappe/ERPNext v15 or v16 — you tell us which one your site runs, and the app is developed and tested against exactly that version rather than a lowest-common-denominator build. If you are mid-upgrade, we scope the target version so the app lands on the site you will actually be running.
Validation failures are caught before transmission: the app runs schema and Schematron checks and shows the failing rule and field on the document, so nothing invalid leaves your site. If the receiver or access point rejects a delivered message, the scheduler picks up the message-level response, writes the status and reason onto the invoice timeline and notifies the responsible role. The correction workflow then links your corrective Credit Note or re-issued invoice to the original transmission with the right UBL reference.
Every build includes a post-go-live support window for defect fixes and configuration adjustments. Beyond that, ongoing support and changes driven by new OIOUBL/Peppol releases or Danish regulatory updates are handled under a separate maintenance agreement. Because you own the git repository, you are never blocked from having someone else maintain the code.
Yes, as an in-scope option. The inbound lane polls your access point for received OIOUBL or Peppol documents, parses them, and stages draft Purchase Invoices with supplier, item and tax matching against your ERPNext master data for human review. Tell us at scoping and it is included in the build; it is not enabled silently.
It is a proper app with versioned DocTypes, fixtures and hooks — not a pile of custom fields and server scripts. Custom fields ship as fixtures so they are reproducible, and the app is pinned to a branch for your version. Upgrades across major ERPNext versions are a scoped piece of work, and the documentation includes the exact hook and scheduler surface a reviewer needs to check.

A build-to-order 2Checkout (Verifone) payment integration for ERPNext, giving global digital-goods sellers card acceptance, 45+ local payment methods, multi-currency checkout, and reconciled invoices. ECOSIRE scopes, builds, installs, and supports it on your ERPNext v15/v16 instance.

A build-to-order ERPNext application for anonymous 360-degree reviews — configurable peer, manager, report and self rater groups, weighted competency scoring, and aggregated gap-analysis and heatmap reports. ECOSIRE scopes, builds, installs and supports it on your Frappe/ERPNext v15/v16 instance.

A build-to-order ERPNext app that detects abandoned webshop and POS carts, then runs multi-channel WhatsApp, email, and SMS recovery and win-back sequences with dynamic cart content and coupon injection. ECOSIRE scopes, builds, installs, and supports it for your v15/v16 instance.

A build-to-order ERPNext app for running B2B account-based campaigns: define target-account lists, sequence outreach calls, auto-distribute them to agents, and score account engagement across every contact. ECOSIRE designs, builds, installs and supports it after you confirm scope.
A build-to-order Frappe app that turns ERPNext Sales Invoices into validated OIOUBL documents and exchanges them over Nemhandel/Peppol without leaving the ERP. ECOSIRE builds, installs and supports it for your Frappe/ERPNext v15 or v16 site.