Rwanda EBM e-Invoice
Rwanda RRA EBM 2.1 e-invoicing for Odoo: certify invoices and credit notes through your VSDC (saveSales), receipt signature, SDC ID, MRC and RRA QR on the invoice, purchase reporting
Want Rwanda EBM e-Invoice installed and configured for you? Onboarding Pack: $350 one-off
Support plans from $425 a monthOdoo 19.0 · Community and Enterprise
Also available for Odoo 18.0 and 20.0 · License OPL-1 · English

Rwanda EBM e-Invoice: RRA EBM 2.1 certification through your VSDC
Certify customer invoices and credit notes, keep the receipt signature, internal data, receipt numbers, SDC ID and MRC on every invoice, print the RRA QR and report vendor bills to the RRA
Connect Odoo to the Rwanda Revenue Authority (RRA) Electronic Billing Machine system. Odoo builds the VSDC saveSales request of each customer invoice and credit note and sends it to the VSDC web service the RRA approved for your TIN and branch; the VSDC returns the receipt number, total receipt number, internal data, receipt signature, SDC ID and MRC, which are stored on the invoice and printed with the RRA receipt QR.
Vendor bills and vendor refunds are reported with savePurchases. Amounts follow the RRA VSDC API Documentation v1.0.4: VAT-inclusive item amounts, line discount rate and amount, tax types A (exempt), B (18%), C (zero-rated) and D, and the documented field lengths.
18%
standard VAT, tax type B
4
VSDC tax types A, B, C, D
6
certified fields kept per invoice
2
VSDC services: saveSales and savePurchases
Key features
Certify invoices and credit notes (saveSales)
Certify with RRA sends the invoice as receipt type S and the credit note as R with the original invoice number (orgInvcNo). Item price, supply, taxable and total amounts are VAT inclusive, with the line discount rate and amount, as in the VSDC sample request.
Receipt signature, SDC ID, MRC and RRA QR
The VSDC answer is stored on the invoice: receipt number, total receipt number, internal data, receipt signature, SDC ID and MRC. The QR follows the RRA CIS specification 7.24.7 (VSDC date and time, SDC ID, receipt number, internal data, signature) and is printed with these fields on the invoice PDF.
Purchase reporting (savePurchases)
Report Purchase to EBM sends a posted vendor bill as purchase receipt P and a vendor refund as R with the reported bill as original, with the supplier TIN, name and bill number.
Your own VSDC, no shared credentials
Odoo calls the VSDC web service deployed on your server (http://localhost:8080 by default, editable), with separate test and production addresses and the device serial number. An optional gateway key, readable by system administrators only, is sent when your VSDC sits behind an authenticating gateway. Test Connection checks the address.
VSDC tax types on your taxes
Set A, B, C or D on each sales tax. The exempt tax of the Rwanda chart of accounts is sent as A automatically, 18% as B, other 0% taxes as C. Each invoice line must carry exactly one tax, so an untaxed line is never declared zero-rated.
Checks before anything is sent
Company TIN (9 digits), the TIN of a buyer in Rwanda, currency, credit note reference, line and total arithmetic. A buyer outside Rwanda is sent without a TIN; customer, trade and item names are cut to the VSDC field lengths.
Item classification per product
Store the RRA item classification code (itemClsCd) on each product. It is sent with certified sales and is required before a purchase is reported.
Certified invoices stay as certified
A certified invoice or reported bill cannot be reset to draft or cancelled and is never sent twice; you correct it with a credit note or vendor refund, as the RRA expects.
Rejections kept, not lost
When the VSDC refuses a document the invoice moves to Rejected or Error, the answer is kept in the submission log and the transport log, and you can generate and certify again after fixing the cause.
Roles, multi-company and automation
Billing users post invoices; the E-Invoicing Manager (granted by the Accounting Administrator role) generates, certifies and reports. Connections follow company rules. An optional scheduled action certifies posted invoices every 15 minutes with the Rwanda time stamp; it is off by default.
How it works
- Apply to the RRA for VSDC, deploy the WAR file you receive on your server and activate it for your TIN, branch and device serial.
- Install the module, open Invoicing > e-Invoicing > Rwanda EBM > Onboarding and enter the company TIN, branch (bhfId, 00 for the head office), the VSDC address and the device serial number.
- Check the VSDC tax type of your sales taxes and add the RRA item classification code to your products.
- Post an invoice: its EBM status becomes To Send. Click Certify with RRA (or let the scheduled action do it); the certified fields and the QR appear on the Rwanda EBM tab and on the printed invoice.
- Post a vendor bill and click Report Purchase to EBM to report it with savePurchases.
Screenshots
A certified invoice with its RRA data
The Rwanda EBM tab of a certified invoice: receipt numbers, SDC ID, MRC, receipt signature, internal data and the RRA QR.

The printed invoice with the RRA EBM block
The invoice PDF carries the certified receipt fields and the QR next to the totals.

Connection to your own VSDC
Test and production VSDC addresses, device serial number and the last connection test.

VSDC tax type on the tax
The exempt tax of the Rwanda chart of accounts set to A - Exempt.

A vendor bill reported with savePurchases
The bill shows Purchase Reported and the submission log of the VSDC answer.

Who it is for
✓ VAT-registered companies in Rwanda
Traders, distributors and service companies that issue invoices from Odoo and must certify every sale with the RRA EBM.
✓ Companies with their own VSDC
Businesses that run the RRA VSDC on their own server and want Odoo to be the invoicing system behind it.
✓ Accountants and Odoo partners
Firms that set up Odoo for Rwandan clients and need certified invoices, credit notes and purchase reporting in standard Odoo accounting.
Disclosure
This module transmits invoice data to the RRA VSDC endpoint you configure (sandbox or production). No data is sent anywhere else, and your device credentials never leave your database.
How it works
This is a bring-your-own-key (BYOK) format-generation and transport connector. It builds the VSDC saveSales request and posts it to your own registered VSDC — you remain the registered EBM taxpayer. We are not an RRA agent or integrator and do not certify receipts ourselves; the receipt signature, internal data, SDC id and MRC are returned by the RRA SDC and are never forged locally. Targets the current EBM 2.1 standard; Rwanda standard VAT is 18%.
Frequently asked questions
Which address do I enter as the VSDC endpoint?
The address of the VSDC web service on your own server, for example http://localhost:8080 when the VSDC runs on the Odoo server. The RRA EBM 2.1 servers are contacted by the VSDC itself, not by Odoo.
Do I need an API key?
No. The VSDC takes no key. The optional gateway key is only for a VSDC you publish behind a gateway that asks for a bearer token.
How are exempt and zero-rated supplies sent?
Set the VSDC tax type on the tax: A for exempt, C for zero-rated, D for non-VAT. The Exempt tax of the Rwanda chart of accounts is already sent as A.
Can I correct a certified invoice?
Not by editing it: a certified invoice cannot be reset to draft. Issue a credit note, certify it (it references the original invoice) and issue a new invoice.
What happens to a customer outside Rwanda?
The invoice is certified without a buyer TIN; a foreign VAT number is never sent as a Rwandan TIN.
Does it work with the Rwanda chart of accounts?
Yes. It reads the taxes of the Odoo l10n_rw package and works with your own taxes as well.
Technical specifications
| Compatible | Odoo 18.0 / 19.0 / 20.0 (this page: 19.0) |
| Editions | Community and Enterprise |
| License | OPL-1 |
| Language | English |
| Dependencies | account, base, mail, einvoice_core_engine |
| VSDC services | trnsSales/saveSales, trnsPurchase/savePurchases, code/selectCodes (connection test) |
| Models | l10n.rw.ebm.config, l10n.rw.onboarding.wizard; fields on account.move, account.tax, product.template |
| Menus | e-Invoicing > Rwanda EBM > Onboarding, Connections |
| Report | RRA EBM block with QR on the customer invoice PDF |
| Reference | RRA VSDC API Documentation v1.0.4 (8 April 2022) |
| Author | Pokutsoft |
| Website | pokutsoft.com |
| Support | support@pokutsoft.com |
Compatibility notice. This module cannot be installed in the same Odoo database as l10n_rw_ebm_pos. Both define the l10n.rw.ebm.config model, and Odoo replaces one definition with the other instead of merging them. If you try, the installation is stopped with a clear error message. Choose one of them for a given database.
Update date: 2026-10-27 · Version: 19.0.1.0.16
User guides (PDF)
Related modules
Rwanda PAYE Payroll
Rwanda payroll for Odoo: RRA PAYE bands (0/10/20/30), dated RSSB pension rates (14% from January 2027), maternity, RAMA on basic salary, occupational hazards and CBHI, with a register and a statutory remittance summary.
Rwanda Holidays
Rwanda public holidays 2026-2035 for Odoo Time Off: every holiday of Presidential Order 062/01 with the weekend and coincidence rules, applied to Africa/Kigali working schedules in one action.
Korea e-Tax Invoice
Korea NTS e-Tax invoice (전자세금계산서): NTS TaxInvoice XML, PKI signature prep, BRN checksum validation, clearance via Popbill or your own ASP (BYOK)