- ہوم
- Apps
- SaaS Tools
- Tanzania TRA EFD Compliance for ERPNext
مثالی پیش منظرA build-to-order Frappe app that fiscalizes ERPNext Sales Invoices against Tanzania Revenue Authority EFD/VFD
requirements, returning the fiscal receipt number, verification code and QR back onto the invoice.
ECOSIRE builds, installs and supports it for your ERPNext v15/v16 site after a scoping call.
Tanzania TRA EFD Compliance for ERPNext کیا ہے؟
A build-to-order Frappe app that fiscalizes ERPNext Sales Invoices against Tanzania Revenue Authority EFD/VFD requirements, returning the fiscal receipt number, verification code and QR back onto the invoice. ECOSIRE builds, installs and supports it for your ERPNext v15/v16 site after a scoping call. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $999.00 USD; request a quote for a scoped proposal.
اہم خصوصیات
آرڈر پر تیار، مکمل طور پر آپ کے لیے
خود سیٹ اپ کی ضرورت نہیں — ایک کام کرنے والی ایپ جو ECOSIRE بناتا، انسٹال اور سپورٹ کرتا ہے۔
- 1
آپ آرڈر دیتے ہیں
ایک بار کی تعمیر کی قیمت سے آغاز کریں۔ آغاز پر ہم آپ کے ساتھ مل کر دائرہ کار طے کرتے ہیں۔
- 2
ہم بناتے اور انسٹال کرتے ہیں
ECOSIRE اسے آپ کے ERPNext پر بناتا، ترتیب دیتا اور انسٹال کرتا ہے۔
- 3
لائیو + معاونت
آپ تقریباً ایک کاروباری ہفتے میں لائیو ہو جاتے ہیں، گو لائیو کے بعد دو ہفتوں کی معاونت کے ساتھ۔ ہمارے فراہم کردہ کوڈ کی خرابیاں مفت درست کی جاتی ہیں۔
تکنیکی تفصیلات
- ERPNext ہم آہنگی
- —
- لائسنس
- لائسنس کی تصدیق درکار ہے
- Python کی ضرورت
- Python 3.10+
- ڈیٹابیس
- MariaDB 10.6+
اس مصنوع کے بارے میں
Finance teams invoicing in Tanzania run a split process: the sale is recorded in ERPNext, but the fiscal receipt is produced somewhere else — a physical EFD terminal on the counter, a vendor portal, or a spreadsheet the accountant re-keys at month end. ERPNext core has no concept of a fiscal device. A Sales Invoice submits happily whether or not TRA ever saw it, the naming series bears no relationship to the fiscal receipt number, and the Tanzanian VAT breakdown lives in Sales Taxes and Charges in a shape no fiscal endpoint accepts. The result is the familiar pattern: invoices posted in the ERP that were never fiscalized, fiscal receipts issued that were never posted, and a reconciliation exercise before every VAT return that nobody enjoys.
We build a proper Frappe app — its own module, its own DocTypes, its own git repository — that makes fiscalization a first-class step of the ERPNext posting lifecycle rather than a parallel process. A TRA EFD Settings single DocType holds the per-company device credentials, VFD registration details, endpoint URLs and certificate material, with secrets stored as Password fieldtype so they are encrypted at rest and never rendered back to the browser. A TRA Fiscal Document DocType is created for each fiscalization attempt and carries the full request payload, the raw response, the fiscal receipt number, verification code, verification URL, TRA timestamp and the resulting status. A hooks.py doc_events handler on Sales Invoice on_submit enqueues the fiscalization through frappe.enqueue so a slow or unreachable device never blocks a cashier's submit, and a companion handler blocks on_cancel for any invoice that already holds a successful fiscal receipt — because a fiscalized document is corrected with a credit note, never quietly cancelled.
Tax mapping is driven from your existing ERPNext master data rather than a hard-coded table. We map each Item Tax Template and Sales Taxes and Charges Template to the TRA tax code it represents — standard-rated, zero-rated, exempt, special rate — so a change in the master data changes the fiscal output without touching code. Line-level rounding is computed to the tolerance the endpoint expects rather than inherited from ERPNext's display precision, which is the single most common cause of rejection on first go-live. Human-readable and machine formats come out of the same posting: the signed payload goes to TRA, and a customised Print Format renders the fiscal receipt number, verification code and a QR code pointing at the TRA verification URL onto the customer-facing invoice, so one submit produces both the fiscal record and the document the customer actually receives.
Rejections are treated as a workflow, not an exception in a log. A failed fiscalization leaves the TRA Fiscal Document in a Failed state with the TRA error code and message parsed onto named fields, an indicator on the linked Sales Invoice, and a retry action exposed as a whitelisted method (@frappe.whitelist()) so an authorised finance user can re-attempt after correcting the underlying data. A scheduler_events hourly job sweeps stuck and pending documents, refreshes the device token before expiry, and raises an exception report of anything that has aged past your tolerance. Permissions ship as a dedicated TRA Compliance Officer role with a matching Role Profile, so operators can fiscalize and retry without gaining rights to edit the credentials in Settings. Everything is reachable over the standard Frappe REST API for your own integrations, and archiving is real archiving — every request and response is retained immutably against the fiscal document with a versioned audit trail, exportable for a TRA audit.
This is build-to-order, not a marketplace download. We start with a short scoping call to confirm your TRA registration and device model, your ERPNext version (v15 or v16), your VAT template structure and your branch or POS topology. From confirmed scope, typical delivery is one working week: we build against a staging copy of your site, run UAT with your finance team on real invoice shapes, then install on production with a documented rollback. You receive the installable source for your version, the git repository, technical and user documentation, a training session, and a post-go-live support window while the first VAT period runs through the new flow.
What you get
- Installable source code for your exact Frappe/ERPNext version (v15 or v16), branch-pinned and bench-installable
- Installation and configuration on your site, including `TRA EFD Settings` populated with your registration and device details
- Technical documentation: DocType reference, hooks and scheduler map, tax-code mapping table, API endpoints and error-code catalogue
- User guide plus a live training session for finance and cashier users covering fiscalization, rejection handling and credit-note correction
- UAT on a staging copy of your site using your own invoice shapes, signed off before any production install
- Documented production install with a tested rollback plan and a pre-install site backup
- Post-go-live support window covering defect fixes through your first full VAT period on the new flow
- Handover of the private git repository so your team owns the source outright
Who this is for
Finance Manager / Chief Accountant
Owns the VAT return and signs off the numbers. Needs every posted Sales Invoice to have a matching TRA fiscal receipt with no manual reconciliation, and a defensible audit trail when TRA asks for the underlying request and response.
ERP / IT Manager running ERPNext
Responsible for the site's stability and upgrade path. Wants a proper Frappe app in its own repository with hooks and scheduler events they can read, not a pile of Server Scripts and Custom Fields that break on the next `bench update`.
Accounts Receivable / Billing Team Lead
Issues invoices daily and absorbs the pain when a fiscalization fails. Needs the rejection reason visible on the invoice itself, a retry they are permitted to run, and a clear rule about when to raise a credit note rather than cancel.
Group Controller with Tanzanian operations
Runs multiple companies or branches where only some entities are TRA-registered. Needs per-company settings, correct behaviour on non-Tanzanian entities, and consolidated visibility of fiscalization exceptions across all branches.
How Tanzania TRA EFD Compliance for ERPNext Compares
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext نیٹو |
|---|---|---|---|---|
| Fiscalization trigger | `on_submit` doc event on Sales Invoice, queued via `frappe.enqueue` so a slow device never blocks the user | Usually a Server Script fired synchronously — the cashier waits, and a timeout aborts the submit | Often a manual button the user must remember to press after posting | None — ERPNext has no concept of a fiscal device |
| Tax mapping to TRA codes | Driven from `Item Tax Template` and `Sales Taxes and Charges Template`, editable as master data | Typically hard-coded rates in the script, reopened for every rate change | Fixed mapping tuned to the vendor's reference chart of accounts | Tax templates exist but carry no TRA tax-code concept |
| Rejection handling | `Failed` state with parsed TRA error code, an invoice indicator and a permissioned retry action | Usually an entry in the Error Log nobody reads until the VAT return | Retry exists, but the reason is often a raw response dump | Not applicable |
| Cancellation safety | `on_cancel` guard forces a credit note once a fiscal receipt exists | Rarely implemented — cancelled invoices drift out of sync with TRA | Varies by vendor; frequently unguarded | Cancels freely, with no fiscal awareness |
| Audit archive | Immutable request/response pairs on `TRA Fiscal Document` with Frappe versioning and an audit export | Whatever the developer chose to log, often truncated | Response stored, request frequently discarded | Standard document versioning only, no fiscal payloads |
| Permissions model | `TRA Compliance Officer` role and Role Profile separating fiscalize/retry from credential edit rights | Usually runs as System Manager because it was quicker | Generic role; credentials often visible to anyone who can fiscalize | Standard Accounts roles, no fiscal separation |
| Upgrade path | Proper Frappe app in its own repo, branch-pinned to v15/v16 and handed to you | Custom Fields and Server Scripts that survive `bench update` only by luck | Vendor-controlled release cadence; you wait for their version support | Upgrades cleanly, but delivers no fiscalization at all |
| Source ownership | Private git repository handed over — your team can maintain it | You own it, but the person who wrote it may not still be there | Licensed or vendor-hosted app; source usually not provided | Open source, but the capability does not exist |
Frequently Asked Questions about Tanzania TRA EFD Compliance
Can I download and install this today?
No — this is build-to-order, and we say so plainly. There is no instant download and no existing Frappe Cloud Marketplace listing. We build the app against your ERPNext version, your TRA registration and your VAT template structure, then install and support it.
How long does delivery take?
Typical delivery is one working week from confirmed scope. The clock starts once the scoping call has settled your ERPNext version, TRA/VFD registration and device details, tax mapping and branch topology — not from the day you enquire. Wider scope such as multi-company, POS lanes or a middleware layer is quoted separately.
Which ERPNext versions are supported?
Frappe/ERPNext v15 and v16. We build and test against the version you actually run and pin the app branch to it. If you are mid-upgrade, say so on the scoping call and we will target the version you will be on at go-live.
What happens when TRA rejects an invoice?
The `TRA Fiscal Document` moves to a `Failed` state with the TRA error code and message parsed onto named fields, the linked Sales Invoice shows a clear indicator, and an authorised user can correct the underlying data and trigger a retry. An hourly scheduler job ages anything that stays unresolved into an exception report, so nothing is silently lost.
Can I still cancel a fiscalized invoice in ERPNext?
Deliberately not. Once a Sales Invoice holds a successful fiscal receipt, an `on_cancel` guard blocks cancellation and directs you to raise a credit note instead — the correct treatment for a document TRA has already seen. Invoices that failed or were never fiscalized cancel normally.
What support and updates do I get after go-live?
A post-go-live support window covering defect fixes runs through your first full VAT period on the new flow. Beyond that we offer an annual support and maintenance agreement covering TRA specification changes, ERPNext version compatibility and enhancements. You also receive the git repository, so your own team can maintain the source if you prefer.
Do you touch our production site during the build?
Not until UAT is signed off. We build and test against a staging copy, run acceptance with your finance team on real invoice shapes, and only then perform the production install — with a site backup taken first and a documented rollback plan in hand.
Related Modules

Table & Reservation Management for ERPNext
A build-to-order Frappe app that turns ERPNext into a full-service reservation and floor-management system with a drag-and-drop floor plan, online bookings, waitlists and turn-time analytics. ECOSIRE scopes, builds, installs and supports it for you.

Tally to ERPNext Migrator
A build-to-order Frappe app that imports Tally masters and vouchers into ERPNext with accurate ledger, group and GST mapping, opening balances, and reconciliation reports. ECOSIRE scopes, builds, installs, and supports it for your specific Tally company file.

Tap & PayTabs Payment Gateway for MENA
Collect online payments across the GCC via Tap and PayTabs, fully wired into ERPNext invoices, quotations, and the web shop. ECOSIRE scopes, builds, installs, and supports the integration for your instance.

Team Messaging & Collaboration
Slack-style team chat built directly into ERPNext, with channels, direct messages, and threads pinned to the exact Sales Order, Task, or HD Ticket being discussed. ECOSIRE builds, installs, and supports it on your Frappe/ERPNext v15/v16 site after you request a quotation.
Tanzania TRA EFD Compliance
A build-to-order Frappe app that fiscalizes ERPNext Sales Invoices against Tanzania Revenue Authority EFD/VFD requirements, returning the fiscal receipt number, verification code and QR back onto the invoice. ECOSIRE builds, installs and supports it for your ERPNext v15/v16 site after a scoping call.
- Dedicated Frappe app with its own module, DocTypes and git repository — installed with `bench get-app` and `bench --site <site> install-app`, never as loose customisations scattered across your site
- `TRA EFD Settings` single DocType per company: VFD/EFD registration details, endpoint URLs, certificate material and credentials stored as encrypted `Password` fieldtype
- `TRA Fiscal Document` DocType recording every attempt — request payload, raw response, fiscal receipt number, verification code, verification URL, TRA timestamp and status
- `hooks.py` `doc_events` on `Sales Invoice.on_submit` that enqueues fiscalization via `frappe.enqueue`, so an unreachable device never blocks the cashier's submit