Tally · Uganda · URA EFRIS

Fiscalise Tally invoices to URA EFRIS, automatically

Raise the sales voucher in Tally as you already do. It is submitted to EFRIS, and the fiscal document number, verification code and QR code come back onto the voucher — ready to print on the invoice your customer receives. Nobody re-keys anything into the URA portal.

Tally is reached on your own network, not over the internet

Tally keeps its company data on your machine or your server, so there is no cloud account to authorise. Something has to run where the data is. Two ways of doing that, and they can be combined.

Tally's own XML interface

Both TallyPrime and Tally.ERP 9 will act as an HTTP server on your network and answer XML requests — the same mechanism Tally's own import and export uses. A connector on the LAN reads new sales vouchers through it and writes the EFRIS result back.

Nothing is changed inside Tally itself, which is the lighter option and the one to prefer where the installation is already customised.

A TDL customisation inside Tally

Tally's own extension language can carry the fiscal document number, verification code and QR code on the voucher as fields, and put them on the printed invoice format your customers already recognise. Fiscalisation can be triggered as the voucher is accepted rather than a moment later.

This is what makes the printed document look right without anyone having to learn a second screen.

Either way, the machine holding the company data has to be running when invoices are raised. On a multi-user Tally licence that is the server, which is usually on anyway; on a single-user installation it is the accountant's own computer, and that is worth settling before it becomes a surprise.

What comes across

EFRIS needs more than the invoice itself. These are read from Tally and kept in step.

Sales vouchers

Fiscalised to EFRIS, with the fiscal document number, verification code and QR code returned and held against the voucher for printing.

Credit notes

Raised against the original invoice, which URA requires — a credit note detached from its invoice is rejected.

Stock items and service ledgers

Registered with URA through the API as part of the integration, carrying their unit of measure and tax treatment. Nothing is keyed in by hand.

Stock movements

For goods: opening stock and subsequent movements, which URA requires before those goods can be invoiced. Services carry no stock.

Party ledgers

Buyer type and TIN where the sale is business-to-business, read from the party master, which changes what EFRIS requires on the document.

Tax treatment

Standard-rated, zero-rated, exempt and deemed VAT, plus excise duty where it applies — resolved per line rather than taken from the voucher total.

Where Tally and EFRIS disagree

Reaching Tally is not the difficult part. Reconciling how the two systems think about a sale is, and it is where in-house attempts usually stall.

A voucher can be altered after it is saved. A fiscal document cannot

Tally lets you reopen a saved voucher and change the amount, or delete it outright. EFRIS has no equivalent — once a document is issued it exists at URA, and the only correction is a credit note against it. The integration has to notice the alteration and treat it as a correction, rather than quietly submitting a second version of the same sale.

Not every sale in Tally names a stock item

An invoice raised as an accounting voucher moves money between ledgers and names no item at all, which is ordinary practice in Tally and unusable to EFRIS — every line URA receives has to name something that exists in the catalogue. Those sales need a mapping decided once, not improvised per invoice.

An item valid in Tally can still be unknown to URA

A product has to exist in the EFRIS catalogue before an invoice can mention it, and its unit of measure must come from URA’s own list rather than whatever the stock item calls it — Nos, Pcs and Units are Tally conventions, not URA ones. Registration happens through the API, one of the first calls an integration makes, so this is handled rather than typed in somewhere.

Discounts are a separate line, not a column

Tally puts a discount percentage on the line it reduces. EFRIS will not accept that — the discount must follow as its own negative line, flagged as the discount and carrying no quantity at all. A quantity there is rejected outright.

Voucher numbers collide across companies and branches

EFRIS enforces uniqueness of the seller reference per taxpayer, across every till and every integration on that TIN. Tally numbers vouchers per company and per voucher type, so two branches each running their own company file will produce the same number twice, and the rejection reads as a duplicate submission rather than as a numbering problem.

Each of these is a rejection code we have already worked through. The error-code reference documents them, free to read, whether or not you ever work with us.

Two ways to do this

Most businesses want the first. Software companies, Tally partners and teams with their own developers usually want the second.

We set it up

We set up the environment and everything your business needs to start issuing fiscalised invoices. You keep working in Tally exactly as before.

Talk to us
Your developers build it

Send invoices to our API as ordinary JSON and it handles the EFRIS protocol, the signing and the tax reconciliation — your side stays a TDL or XML exercise. Or licence the whole platform as source and run it on your own infrastructure.

efrisgateway.com
Questions & Answers

Tally and EFRIS — common questions

Can Tally connect to URA EFRIS?
Yes. Tally does not talk to EFRIS on its own, but it can be connected so that sales vouchers raised in Tally are fiscalised with URA automatically and the fiscal document number, verification code and QR code come back onto the voucher for printing. Both TallyPrime and Tally.ERP 9 can be connected.
Does it work with Tally.ERP 9, or only TallyPrime?
Both. The mechanism is the same in each: Tally exposes its data over an XML interface on your own network, and a connector alongside it reads sales vouchers and writes the EFRIS result back. TallyPrime is the newer release, but an existing Tally.ERP 9 installation does not have to be upgraded first.
Do I have to change how I raise invoices in Tally?
No. You continue raising sales vouchers in Tally as you do now. The fiscalisation happens behind it, and what changes is that the printed invoice carries the EFRIS fiscal document number, verification code and QR code that URA requires.
Does Tally have to be connected to the internet?
The machine holding the company data needs a working internet connection at the moment invoices are fiscalised, because EFRIS is a URA service reached over the internet. Tally itself keeps working offline; invoices raised while the connection is down are queued and submitted when it returns, rather than lost.
What happens if someone edits or deletes a voucher after it has been fiscalised?
A fiscal document already issued at URA cannot be withdrawn, so the correction is a credit note against it. The integration detects that the voucher changed and treats it as a correction rather than submitting the sale a second time, which URA would reject as a duplicate seller reference.
Do I need to be a URA-accredited integrator to use this?
No. The fiscalisation is done using your own taxpayer credentials and device, so the invoices are issued by your business exactly as URA expects.
Other systems

Running something else?

The EFRIS side is identical whatever you run. What changes is how the invoice leaves your system, so each has its own notes.

A custom ERP, an in-house system or a POS nobody has heard of is not a problem either — if it can produce an invoice, it can be connected. Tell us what you run.