Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Localizations
  3. ZRA Smart Invoice — Invoicing (Zambia) v 19.0
  4. Sales Conditions FAQ

ZRA Smart Invoice — Invoicing (Zambia)

by AminiTech Solutions https://www.aminitechsolutions.com
Odoo

$ 391.00

v 19.0 Third Party
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Versions 17.0 18.0 19.0
You bought this module and need support? Click here!
Versions 17.0 18.0 19.0
  • Description
  • Manifest
  • License
🎉 35% LAUNCH OFFER — Launch pricing on every ZRA Smart Invoice app. It rises as the apps gain traction, so the earlier you come in, the less you pay.
For Odoo 19 · Community & Enterprise

ZRA Smart Invoice — every invoice, declared

Declare every customer invoice and credit note to the Zambia Revenue Authority through your own VSDC in real time. The receipt number, the receipt signature, the internal data and the verification QR come straight back and print on the invoice PDF. VAT is reported in the ZRA tax types — A Standard Rated 16%, B Minimum Taxable Value, C1/C2/C3 zero-rated, D Exempt, RVAT, E and TOT — with the VAT-inclusive amounts the VSDC expects.

✅ saveSales in real time ✅ Receipt signature + QR on the PDF ✅ VAT 16% in the A–TOT bands
ZRA Smart Invoice — every invoice, declared
$391 ⭐ Implementation included

One-time purchase · unlimited documents · free updates on every ZRA Smart Invoice spec change. Requires the free ZRA Smart Invoice Base.

Overview

Post as usual — ZRA compliance happens for you

Posting a customer invoice enqueues a saveSales declaration (receipt type S); the accountant never waits on the VSDC. Credit notes go out as refunds (receipt type R) referencing the original invoice number, and the receipt number, signature, internal data, SDC ID and MRC No land on the record and on the printed PDF next to a verification QR. Because everything flows through the Base queue, posting is never blocked — and a document the ZRA has accepted is simply guarded from being reset to draft.

💳

saveSales, done right

Every posted invoice is declared to your VSDC through /trnsSales/saveSales — the customer block, the item list, the per-band tax buckets and the totals built to the ZRA specification — and the receipt number and signature come straight back onto the record.

🧾

The signature on the paper

The ZRA invoice number, receipt number, SDC ID, MRC No, VSDC date, internal data and receipt signature print on the invoice PDF beside a scannable verification QR, under a plain statement that this is a fiscal receipt declared to the ZRA.

📊

VAT the ZRA way

Tax is reported in the ZRA taxation types — A Standard Rated 16%, B Minimum Taxable Value 16%, C1 Exports, C2 Zero-rating LPO, C3 Zero-rated by nature, D Exempt, RVAT, E Disbursement and TOT Turnover Tax — with VAT-inclusive amounts, matched to the ngwee.

How it works

From draft to declared — every detail on the invoice

Customer invoice list for Kabwata Traders Ltd with eight posted invoices in ZMW, totalling 163,091.50 ZK
01 · Post as usual

Every posted invoice is declared, and posting never waits

Posting a customer invoice builds the complete saveSales payload — customer TPIN and name, the receipt block, the item list, the per-band tax buckets and the totals — and hands it to the submission queue, which sends within about two minutes or immediately on demand. Your accountant never waits on the VSDC, and if a declaration cannot even be built the invoice still posts: the failure is recorded on the document instead of blocking your books. If the company’s ZRA configuration is incomplete the document is parked as Not Configured with the exact list of what is missing, rather than firing a reject at the VSDC.

02 · The ZRA tab

The whole VSDC acknowledgement lives on the invoice

Every customer invoice and credit note gains a ZRA Smart Invoice tab in two halves. Declaration holds the ZRA Status, the receipt type (S Sale or R Refund), the ZRA invoice number, the refund reason on credit notes, the ZRA Exempt flag and which environment the document belongs to. ZRA Acknowledgement appears once the VSDC answers, holding the receipt number, total receipt number, receipt signature, internal data, SDC ID, MRC No and VSDC date. Nothing is buried in a log file — the full fiscal acknowledgement sits on the record, ready for an audit or a buyer query.

The ZRA Smart Invoice tab on invoice INV/2026/00006 showing status Declared and the acknowledgement block with receipt signature, SDC ID and MRC No
The green Declared badge in the header of a posted customer invoice next to the Draft-Posted statusbar
03 · Status at a glance

Five honest states, colour-coded in the header

A badge in the invoice header reports the fiscal state on the record itself: Queued, Declared, Failed, ZRA Exempt or Not Configured — green when the ZRA has it, red when it rejected it, amber while it is waiting or unconfigured, muted when the document is deliberately out of scope. When something goes wrong the failure reason returned by the VSDC appears in plain words on the ZRA tab, and stays hidden while everything is healthy so the form is not cluttered. Those last three matter because they are genuinely different problems: waiting, rejected and never-meant-to-go each need a different response from you.

04 · Send on demand

A “Send to ZRA” button for anything not yet declared

A Send to ZRA button sits in the header of any posted invoice or credit note that has not reached the ZRA, and disappears the moment it is declared or marked exempt — so nobody can re-declare a document that already carries a receipt signature. Pressing it enqueues the declaration if needed and pushes every pending or failed entry for that document immediately, instead of waiting for the next sweep. It refuses drafts outright: only a posted document can be declared. It is the one button an accountant needs after an outage.

A posted invoice header where the ZRA status is Declared, with the Send, Print, Pay, Preview, Credit Note and Reset to Draft actions
The ZRA Queue smart button on invoice INV/2026/00006 showing one queue entry
05 · Queue smart button

From the invoice to its declarations in one click

A ZRA Queue smart button on the invoice shows how many queue entries the document has produced and opens them filtered to that document alone. From there you see the payload that was sent, the VSDC’s answer, the attempt count and the full error history — the audit trail for this one invoice, without hunting through a global list. It hides itself when there is nothing to show.

06 · Chatter record

The declaration is written into the invoice’s own history

The chatter records the fiscal life of the document as it happens: “Queued for ZRA transmission as invoice 6 (S).” when it is enqueued, then, once the ZRA accepts, a full “Declaration accepted by the ZRA” table — the invoice number, original invoice on a refund, receipt type, sale date, customer name and TPIN, every tax band with its taxable amount and VAT, the totals, the receipt number, SDC ID, MRC No, VSDC date, the receipt signature and internal data, followed by the item lines exactly as transmitted. A first failure posts its own note in red with the VSDC’s message and a reminder that the queue keeps retrying. Nobody has to reconstruct what was sent — it is on the record, in the record’s own history.

The invoice chatter showing the OdooBot note reading Queued for ZRA transmission as invoice 6 (S)
The Declaration block on the ZRA tab showing ZRA Invoice No (invcNo) 6 and receipt type S — Sale
07 · Assigned once

The ZRA invoice number is never reissued or overwritten

Each declarable document takes the next number from your continuous per-device ZRA series the first time its payload is built, and keeps it forever — the field is indexed, never copied to a duplicate and never overwritten on a retry. That is what makes a re-send safe: the same number goes back, so the VSDC either registers it or reports it as already received, never as a second sale. It is also what keeps your series auditable, which the Base then checks hourly for holes and duplicates.

08 · Credit notes

Refunds go out as a proper refund declaration

A credit note is declared as a refund — receipt type R — carrying the original invoice’s ZRA number as orgInvcNo, plus the refund reason code and refund date. It is picked up from the reversal link automatically, so nothing has to be typed twice, and the refund reason field is editable per document with a sensible default when you leave it blank. The credit note comes back with its own receipt number and signature on its own ZRA tab, and prints its own fiscal footer. That is the ZRA-approved way to reverse a declared sale — not a hand-patched invoice.

Credit note RINV/2026/00001, a reversal of INV/2026/00001 for Chembe Wholesalers Ltd, declared as R — Refund with its own receipt signature
The 16% Standard Rate sales tax form for Kabwata Traders Ltd, the tax that maps to ZRA type A
09 · Tax types

Map each tax once, in Zambia’s own vocabulary

Every sale tax carries a ZRA Tax Type selector covering the full code class: A Standard Rated (16%), B Minimum Taxable Value (16%, charged on the retail or recommended price), C1 Exports (0%), C2 Zero-rating on a Local Purchase Order (0%), C3 Zero-rated by nature (0%), D Exempt, RVAT Reverse VAT where the buyer accounts for it, E Disbursement outside the tax base, and TOT Turnover Tax. Set it once per tax and every invoice afterwards reports VAT in the exact buckets the VSDC validates. The three different flavours of zero — export, LPO and by-nature — are genuinely different declarations, and this is where you tell them apart.

10 · Safe defaults

Unmapped taxes still declare — and zero-rating is never guessed

You do not have to hand-map a tax table before going live. Any sale tax left without a ZRA type falls back by rate: a positive rate declares as A (Standard Rated, 16%) and a zero rate as D (Exempt) — and a line with no tax at all declares as D. A one-pass classifier stamps every unmapped sale tax the same way for you. What it deliberately never does is guess C1, C2 or C3: exports, LPO zero-rating and zero-rated-by-nature are all 0% but they are legal choices, not arithmetic, so you pick them yourself.

The sales tax list showing 16% Standard Rate, 16% MTV, 0% Std EX, 0% Exports (C1), 0% Zero-rating LPO (C2) and Turnover Tax (TOT)
The totals block of the printed invoice: Untaxed Amount 15,050.00 ZK, VAT 16% 2,408.00 ZK and Total 17,458.00 ZK
11 · VAT-inclusive maths

The one calculation that trips up every Zambian connector

ZRA amounts are gross: the taxable amount includes VAT, and the VAT is extracted back out of it rather than added on top. The connector does exactly that — it grosses the unit price up by the band rate, applies the line discount as both a rate and an amount, and extracts VAT as taxable multiplied by rate over 100 plus rate. Get this backwards, as an add-on-top calculation would, and every declaration is quietly wrong by the VAT fraction while still returning a success code. Each line is declared with its band, gross unit price, supply amount, discount rate and amount, taxable amount, VAT and total.

12 · Header equals lines

The totals you print are the totals the ZRA validated

The declaration header carries a taxable amount, a rate and a VAT amount for every band from A through TOT, plus the total taxable, total VAT and grand total — and every one of those figures is aggregated from the lines that were actually sent, not recalculated separately. That means the header can never disagree with the item list, whatever rounding happened upstream, and the VAT 16% total on the printed invoice is exactly what the VSDC received. No re-keying, no second calculation to reconcile at year end.

The printed fiscal tax invoice showing three 16% lines and the VAT total that matches the amounts declared to the ZRA
Invoice lines Portland Cement 50kg, Emulsion Paint 20L White and Site Delivery (Lusaka), each declared with its own description
13 · Item identity

Every line declares a complete, coherent item block

Each line goes up with its full item identity: the item code, the UNSPSC classification, the item name, barcode, packaging unit and quantity unit, plus its sequence number, packaging and quantity. Where a product has no explicit ZRA code the connector synthesises a valid one and falls back to your company’s default classification, so an invoicing-only install declares complete lines without you touching the product catalogue first. When the invoice line has its own description — the one the customer actually reads — that is what is declared, not a generic product name.

14 · Buyer identity

The customer’s TPIN travels with the declaration

The buyer’s TPIN, name and mobile number are read from the contact and sent on the declaration, alongside your own trade name and address in the receipt block and the invoice reference as the receipt’s top message. Because the free Base validates any contact’s TPIN against the ZRA register in one click — showing the taxpayer name the ZRA holds and the date it was checked — you can confirm the buyer before you ever declare against them. That is a thirty-second check that prevents a rejected declaration later.

Contact form for Chembe Wholesalers Ltd in Lusaka showing TPIN 1002345678 with a green Valid TIN status and the ZRA registered name
The fiscal footer of the printed invoice with ZRA invoice number, receipt number, SDC ID, MRC No, VSDC date, internal data, receipt signature and QR code
15 · Fiscal PDF

The receipt signature and QR print on the invoice

Once the ZRA answers, the printed invoice carries a proper fiscal footer: the ZRA invoice number, receipt number, SDC ID, MRC No, VSDC date, internal data and receipt signature, beside a scannable QR and the plain statement that this is a fiscal receipt declared to the Zambia Revenue Authority. The VSDC returns no ready-made verification URL, so the connector composes the ZRA verification link itself from the device and signature values. The whole block prints only on documents the ZRA has actually accepted — a draft or an undeclared invoice can never carry a fake signature.

16 · Draft guard

A declared invoice cannot be quietly edited

Once the ZRA has accepted an invoice, Reset to Draft is blocked with a plain explanation: the document is declared under its ZRA invoice number, editing it would make your books diverge from the ZRA, and a credit note is the correct remedy. This stops the single most damaging mistake in a fiscalised ledger — reopening a document the revenue authority has already accepted. Invoices that were never declared, that failed, or that are marked exempt reset to draft exactly as normal.

The customer invoice list showing INV/2026/00001 marked Reversed, the correct way to undo a declared sale
The ZRA Exempt checkbox on the Declaration block of the ZRA Smart Invoice tab, unticked on a declared invoice
17 · ZRA Exempt

Keep the documents that must never be declared out of it

A ZRA Exempt tick box on the ZRA tab holds a document out of the declaration flow entirely — the right answer for opening balances, migrated history and internal documents that should never be declared. The document shows a muted ZRA Exempt badge instead of a fiscal status, the Send to ZRA button disappears, and it is copy-safe: duplicate the invoice and the flag does not travel with it, and neither do the receipt number, signature or ZRA invoice number of the original. The flag is restricted to the Manager role and is tracked in the chatter, so exempting a document is a decision with a name and a timestamp on it.

18 · Nothing left behind

An hourly sweeper catches up anything that slipped through

Beyond the Base queue, an hourly sweeper re-examines posted invoices and credit notes that never made it — the ones parked as Not Configured before you finished setup, the ones that failed, the ones that somehow have no status at all — and enqueues them oldest first, but only for companies whose transmission is Active and only where no live queue entry already exists. So the day you finish configuring your VSDC, the backlog declares itself in the right order without anyone clicking through a list. Invoices generated by Point of Sale orders are deliberately skipped, because the POS app declares its own sales at the till.

The customer invoice list for Kabwata Traders Ltd, the documents the hourly sweeper re-checks for undeclared invoices
Implementation included

We connect you to ZRA Smart Invoice

Buying the app includes the setup: we help you register your device on the ZRA Smart Invoice Taxpayer Portal, point the connector at your VSDC (or ZRA’s hosted OSDC), run the device initialisation, validate the full flow on the ZRA sandbox, then switch you to production.

1️⃣
Register

Device on the ZRA Smart Invoice portal

2️⃣
Configure

TPIN, branch, device serial, tax bands

3️⃣
Validate

Full flow on the ZRA sandbox

4️⃣
Go live

Switch to production, declare for real

The family

One suite, sold your way

Buy only what you need on the free Base, or take the all-in-one Suite.

ZRA Base
ZRA Base
Free engine · view app
ZRA Invoicing
ZRA Invoicing
E-invoicing · current
ZRA POS
ZRA POS
Point of Sale · view app
ZRA Stock
ZRA Stock
Stock & traders · view app
ZRA Manufacturing
ZRA Manufacturing
Manufacturing · view app
ZRA Importers
ZRA Importers
Imports · view app
ZRA Pro
ZRA Pro
Control tower · view app
ZRA Suite
ZRA Suite
All-in-one · view app

Frequently asked

Does it need the ZRA Smart Invoice Base?

Yes — the free Base provides the VSDC connection, the device initialization and the asynchronous submission queue this app builds on. Install it first; it costs nothing.

What VAT rate does Zambia use?

Standard VAT is 16%, declared in ZRA taxation type A. The app also covers B (Minimum Taxable Value, 16% on the retail or recommended price), C1 Exports, C2 Zero-rating LPO, C3 Zero-rated by nature, D Exempt, RVAT Reverse VAT, E Disbursement and TOT Turnover Tax. Amounts are declared VAT-inclusive, as the VSDC expects.

What about credit notes?

They are declared as refunds (receipt type R) referencing the original invoice’s ZRA number, with a refund reason code, and come back with their own receipt number and signature — the compliant way to reverse a declared sale.

Does it ever block me from posting?

No. Declaration runs on the Base queue and retries on its own, so a VSDC that is slow, restarting or unreachable never stops an invoice being posted. A declared document is guarded from being reset to draft, but posting itself is never blocked.

Can I test before going live?

Yes. Point the sandbox VSDC URL at your bridge configured for the ZRA sandbox, declare real invoices with zero fiscal impact, then switch one radio to Production — the production URL is already stored, so nothing is retyped. Every queue entry keeps a record of the environment it was declared under.

My VSDC uses a different endpoint path. Is that a problem?

No. The ZRA specification is inconsistent about endpoint pluralization and a wrong path simply 404s, so every path is overridable per company through a JSON map in the Base. Your provisioned VSDC is the authority — point the connector at what it actually exposes.

Ready for ZRA Smart Invoice compliance?

Install now, or write to us — we set up your Smart Invoice connection with you.

reach@aminitechsolutions.com
AminiTech Solutions · Lusaka · Kampala & Nairobi · www.aminitechsolutions.com
ZRA, Smart Invoice and the Zambia Revenue Authority name are the property of the Zambia Revenue Authority and are used here only to identify the system this connector integrates with. AminiTech Solutions is an independent software vendor and is not affiliated with, or endorsed by, the ZRA.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Invoicing (account)
• Discuss (mail)
Community Apps Dependencies Show
ZRA Smart Invoice — Base (Zambia)
Lines of code 2018
Technical Name aminitech_zra_invoice
LicenseOPL-1
Websitehttps://www.aminitechsolutions.com
Odoo Proprietary License v1.0

This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.

The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author or have a question related to your purchase, please use the support page.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with