Skip to main content
EFRIS is the Uganda Revenue Authority’s Electronic Fiscal Receipting and Invoicing System. When EFRIS is enabled for a business, Hitaji fiscalises your sales invoices with URA automatically as you send them — obtaining a Fiscal Document Number (FDN), an anti-fake verification code, and a QR code that print on the invoice. Voiding a fiscalised invoice raises the corresponding credit note with URA. You’ll find the settings at: /settings/erp/finance/efris (navigation: ERP Settings → Finance → EFRIS E-Invoicing). The older link /accounting/efris-settings redirects here.
📷 Screenshot: EFRIS E-Invoicing settings page (URA fiscalisation card) — to be added.

How it works at a glance

EFRIS is configured per business, not per invoice. Once a business is enabled and a sale invoice is sent for the first time, Hitaji decides — from the business’s saved configuration — whether and how to fiscalise:
  • Online mode — Hitaji talks directly to URA. The invoice is fiscalised before its accounting entry is finalized: if URA rejects it, the invoice send is blocked so you never have a legally issued invoice without an FDN.
  • Offline mode — Hitaji posts the invoice’s accounting entry first, then queues the fiscalisation through a TCS (Tax Control System) enabler and completes it in the background. If queuing fails, the accounting entry still stands and the submission is recorded as failed for retry.
Either way, the successful result (FDN, anti-fake code, QR) is stored on the invoice and on a submission record, and a fiscal badge on the invoice reflects the status. Fiscalisation only ever applies to true sale invoices. Internal/other-receivable “debt” invoices are never fiscalised, and credit notes follow their own EFRIS path (below).

Setting up EFRIS for a business

Open ERP Settings → Finance → EFRIS E-Invoicing (/settings/erp/finance/efris). The page works against the currently selected business, so make sure you’re in the right business first.

Main fiscalisation settings

Click Save settings to store the configuration.
📷 Screenshot: EFRIS settings form — transport mode, environment, TIN, device number, seller details — to be added.

Signing keypair (online mode only)

Online fiscalisation is cryptographically signed, so an RSA-2048 signing keypair is required:
  1. Set Transport mode to Online and save.
  2. In the Signing keypair card, click Generate keypair (or Rotate keypair if one exists).
  3. Hitaji stores the private key encrypted and shows you the public key.
  4. Copy the public key and upload it on the URA EFRIS portal under Device Management.
⚠️ Rotating a keypair invalidates the public key already uploaded to URA. Online fiscalisation will fail until you upload the new public key on the portal. The page warns you and asks for confirmation before rotating — only rotate when you intend to.
📷 Screenshot: Signing keypair card with the generated public key and “Copy public key” — to be added.

Validate a buyer’s TIN

For business-to-business invoices you can verify a buyer’s TIN/NIN/BRN against URA before invoicing. This requires EFRIS to be enabled for the business.

What happens when you send an invoice

You send invoices the normal way; EFRIS runs automatically on the first send:
  1. Hitaji resolves the business’s EFRIS configuration for the invoice’s accounting book.
  2. Online: the invoice is submitted to URA (interface T109). On success the FDN, anti-fake code, and QR are written to the invoice in one atomic step; on failure the send is blocked and the submission is recorded as FAILED.
  3. Offline: the accounting entry is posted, then the fiscalisation is enqueued to the TCS and drained in the background. A failure to enqueue is logged and recorded as FAILED, but the accounting entry stands.
  4. Resending an already-fiscalised invoice never double-fiscalises — each invoice fiscalises once.

Submission statuses

A fiscal badge on the invoice shows where the submission stands:

Retrying a failed fiscalisation

The invoice fiscal badge offers a Retry for a PENDING/FAILED submission:
  • Offline businesses: the retry re-enqueues the submission.
  • Online businesses: you re-send the invoice instead — re-driving the queue would re-fiscalise without re-posting the (failure-reversed) accounting entry, so online retries go through the send path. Hitaji blocks the queue-retry for online businesses and tells you to re-send.
  • An already-FISCALISED invoice has nothing to retry.

Voiding a fiscalised invoice → credit note

Voiding an invoice that carries an FDN is the legal “credit this invoice” moment. Hitaji:
  1. Reverses the invoice’s accounting entry.
  2. Submits an EFRIS credit note (interface T110) referencing the original invoice’s FDN.
  3. For B2C buyers, URA auto-approves and Hitaji fetches the credit-note FDN immediately. For B2B / B2G buyers, the credit note stays SUBMITTED and Hitaji polls URA every few minutes until it’s approved (then captures the credit-note FDN, anti-fake code, and QR) or rejected.
If the EFRIS credit note fails, the accounting reversal still stands — the failure is logged and the credit note can complete asynchronously. The default void reason sent to URA is “Goods returned.”
📷 Screenshot: Voiding a fiscalised invoice and the resulting credit-note status — to be added.

Who can manage EFRIS

EFRIS configuration is privileged. Saving settings, generating/rotating the keypair, fetching the public key, validating a TIN, and retrying a submission all require the efris:config permission. The system also self-verifies that the selected business belongs to your tenant on every EFRIS call, so the configuration and signing keys of one business can never be touched from another. The EFRIS E-Invoicing settings tile itself appears for users with the efris:config scope.

Tips

  • Start in Test (sandbox) environment and validate end-to-end (send → fiscalise → void → credit note) before switching to Production.
  • In online mode, keep the URA-uploaded public key in sync with Hitaji’s keypair — a mismatch is the most common cause of online fiscalisation failures.
  • Watch the fiscal badge on invoices; a lingering FAILED means the invoice carries no FDN and needs a retry (offline) or re-send (online).