A build-to-order Frappe app that turns ERPNext Sales Invoices into GRA E-VAT compliant fiscal documents, with rejection handling, correction workflow and a complete audit trail. ECOSIRE scopes, builds, installs and supports it on your bench. 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 GRA E-VAT compliant fiscal documents,
with rejection handling, correction workflow and a complete audit trail.
ECOSIRE scopes, builds, installs and supports it on your bench.
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.
Finance teams invoicing in Ghana carry an obligation ERPNext core was never designed for: every taxable sale has to be presented to the Ghana Revenue Authority in the GRA's own machine format, carry the fiscal identifiers the GRA returns, and be reproducible on demand years later. Out of the box, ERPNext gives you a Sales Invoice, a Sales Taxes and Charges Template, and a print format. It does not give you a fiscalisation state on the document, a queue that retries a failed transmission, a place to store the GRA response identifiers against the invoice, or a legal way to correct a document that has already been fiscalised. Most teams end up with a parallel spreadsheet and a person who re-keys invoices into a portal — which is slow, unauditable, and breaks the moment volume grows or that person is on leave.
We build a proper Frappe app — its own module, its own DocTypes, installed on your bench alongside ERPNext rather than patched into it. The core is a Ghana E-VAT Settings single DocType holding endpoint, credentials and environment (sandbox vs live), plus a child DocType that maps your ERPNext tax accounts and Item Tax Templates onto the GRA's tax categories and rate codes, so the classification lives in master data and not in code. A hooks.py doc event on Sales Invoice.on_submit builds the payload from the submitted document, and a queued background job (never the web request) performs the transmission, so a slow or unreachable GRA endpoint can never block a user pressing Submit. Every attempt is written to a Ghana E-VAT Transmission Log DocType: request payload, response body, HTTP status, timestamp, and the operator who triggered it — an append-only trail you can hand an auditor.
The same posting produces both outputs the law and the customer need. The machine format is generated from the invoice's own fields — no re-keying — while a Frappe print format renders the human-readable invoice carrying the GRA identifiers, the QR or verification data returned on acceptance, and the fiscal reference, so the document a customer receives and the document the GRA holds are provably the same posting. Rejections are treated as a first-class state rather than an error: the invoice carries a fiscalisation status field (Pending, Queued, Accepted, Rejected, Cancelled) with the GRA's reason code and message rendered inline via a client script, a list-view indicator so finance can see the whole backlog at a glance, and a correction workflow that produces a properly linked credit note or re-submission rather than silently editing a submitted document. A scheduler event sweeps stuck and rejected records on your chosen cadence and can alert a role, so nothing sits unnoticed until month end. Whitelisted methods expose retry, status refresh and bulk re-submission over the Frappe REST API for your own tooling, and a dedicated role plus role profile keeps credentials and manual re-submission away from ordinary invoice clerks.
This is build-to-order, not a marketplace download. We start with a short scoping call to confirm your GRA registration status, invoice volume, tax categories in use, ERPNext version and any customisations already on Sales Invoice. We then build against your actual bench and your Frappe/ERPNext version — v15 and v16 are both supported — deliver to a staging site for UAT with your own invoices, and only then go live with a documented rollback. Typical delivery is 2 to 4 weeks from confirmed scope. You receive the full source in a git repository you own, so nothing about your compliance depends on our continued involvement.
Accountable for the accuracy of what the GRA holds versus what the ledger says. Needs every taxable sale fiscalised without a parallel spreadsheet, a visible backlog of rejections, and a defensible audit trail at year end.
Issues the invoices daily and feels every second of friction. Needs Submit to stay fast, rejections to explain themselves in plain language on the document, and a correction path that does not require calling IT.
Owns the bench and will inherit the code. Needs a proper app rather than customisations sprayed across Custom Fields and Server Scripts, clean hooks, readable logs, and a repository they can maintain through the next `bench update`.
Operates Ghana alongside other jurisdictions on one ERPNext instance. Needs Ghana E-VAT handled per-company without disturbing the tax setup of other entities, and evidence the control is automated rather than person-dependent.
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| Fit to your GRA setup and tax categories | Mapped to your actual tax accounts and Item Tax Templates during scoping | Exactly what you specify, if you can specify it correctly first time | Generic mapping you bend your master data to fit | No GRA concept at all — only ERPNext tax templates |
| Time to a working system | 2-4 weeks from confirmed scope, staging UAT included | Months of hiring, spec writing and iteration | Fast to install, then weeks of workarounds | Immediate, but the compliance work stays manual |
| Rejection and correction handling | Status states, GRA reason codes on the document, linked credit note workflow | Built only if someone thought to specify it | Often a raw error log with no correction path | Not applicable — nothing is transmitted |
| Audit trail and archiving | Append-only Transmission Log with payload, response and operator, exportable | Depends entirely on the developer's discipline | Usually a truncated error field | Version history on the invoice only |
| Upgrade path across Frappe v15/v16 | Tested per version, with patches and fixtures for `bench update` | Your team owns every migration | Depends on the vendor's release cadence and priorities | Core upgrades handled, compliance gap unchanged |
| Source code ownership | Full source in a git repo you own, no lock-in | Yours, at full development cost | Licensed binary or vendor-controlled repo | Open source core, no compliance layer to own |
| Cost profile | Fixed build price after scoping, plus optional support | Open-ended developer time plus ongoing maintenance | Low list price, hidden customisation and rework cost | Free software, expensive manual process |
| Who carries the compliance risk day to day | Automated control with an alerting scheduler and named role | Whoever built it, until they leave | You, once the vendor's assumptions diverge from yours | One person and a spreadsheet |
This is a build-to-order app, not an instant download. Typical delivery is 2 to 4 weeks from confirmed scope — that clock starts once we have agreed the tax mapping, your GRA credentials or sandbox access, and your ERPNext version. The scoping call itself takes about 30 minutes and is where we establish that scope.
Every engagement includes a post-go-live support window covering defect fixes within the delivered scope. Beyond that, you own the git repository, so you can maintain it in house or retain us on a support agreement. When the GRA changes its specification or you upgrade Frappe/ERPNext, we quote that as a defined change — we do not silently push updates into your production bench.
Usually yes, and that is exactly what the scoping call is for. The app installs as its own module and hooks into standard doc events rather than editing core files, so it coexists with Custom Fields, Server Scripts and other apps. If you already have a heavily customised submit flow, we review it before quoting so the integration is designed, not discovered mid-build.
Transmission runs as a background job, so a slow or unreachable endpoint never blocks a user submitting an invoice. Failed attempts stay Queued and are retried by a scheduler event with backoff; a rejection moves the invoice to Rejected and surfaces the GRA reason code on the document, with a correction workflow to issue a linked credit note or re-submit. Nothing is silently dropped and every attempt is logged.
We build and test against Frappe/ERPNext v15 and v16. We build for the version you actually run — tell us on the scoping call and we target that branch. Supporting a second version later is a small, quotable change rather than a rebuild.
No. We build and test against the GRA sandbox environment wherever one is available to your organisation. Live credentials are entered by your own team into the Ghana E-VAT Settings DocType at cutover, stored as Password fields, and are never held by us.
Yes. The app exposes whitelisted methods for retry, status refresh and bulk re-submission over the Frappe REST API, authenticated with normal Frappe API keys and governed by the same role permissions as the UI. If you invoice from an external system that already posts into ERPNext, fiscalisation follows automatically from the submit event.

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 GRA E-VAT compliant fiscal documents, with rejection handling, correction workflow and a complete audit trail. ECOSIRE scopes, builds, installs and supports it on your bench.