Rwanda RRA EBM 2.1 - Point of Sale Fiscalisation
Real-time fiscal receipts for Rwandan retail: signature, Internal Data, MRC and verification QR - sent through your own certified VSDC
What it does
The Rwanda Revenue Authority (RRA) requires every retail sale to be fiscalised through the Electronic Billing Machine (EBM 2.1) model. Each Point of Sale receipt must be processed by a certified Secure Data Controller (SDC) reached through the Virtual Sales Data Controller (VSDC), which returns the receipt's Internal Data and Receipt Signature records together with the SDC ID and Machine Registration Code (MRC) that must be printed on the slip.
This module turns Odoo Point of Sale into an EBM-ready front office. It
builds the exact trnsSalesSaveWr payload the VSDC expects,
computes the VAT breakdown across the four RRA categories, transmits the
receipt to your own certified VSDC, stores the returned records and
renders the RRA verification QR code.
Real-time POS fiscalisation
Every POS order is queued and sent to the VSDC. The returned 26-character Internal Data and 16-character Receipt Signature are stored and grouped into the printed 4-character blocks.
Correct VAT arithmetic
POS prices are VAT-inclusive in Rwanda. Each line is split into a taxable base and an 18% VAT amount, then aggregated per RRA category A/B/C/D for the receipt summary.
Verification QR code
A QR code resolving to the RRA EBM public receipt verificator is generated for every fiscalised receipt, carrying the seller TIN, receipt number and signature.
TIN validation
Company and customer 9-digit RRA TINs are structurally validated before a receipt is sent, so malformed numbers never reach the VSDC.
RRA EBM 2.1 codes implemented
| Area | Codes |
|---|---|
| VAT categories (taxTyCd) | A = Exempt (0%), B = Taxable (18% standard VAT), C = Export (0%), D = Non-taxable (0%) |
| Receipt type (rcptTyCd) | S = Sale, R = Refund |
| Transaction type (salesTyCd) | N = Normal, C = Copy, T = Training, P = Proforma |
| Payment type (pmtTyCd) | 01 Cash, 02 Credit, 03 Cash/Credit, 04 Bank cheque, 05 Card, 06 Mobile money, 07 Other |
| SDC records | Internal Data (26 Base-32 chars), Receipt Signature (16 Base-32 chars), grouped in 4-char blocks |
| Timestamps | yyyyMMddHHmmss (cfmDt), yyyyMMdd (salesDt) |
Feature list
- POS order EBM status (To Fiscalise / Fiscalised / Rejected / Error / Offline preview) with batch and scheduled retry.
- VSDC
trnsSalesSaveWrsales payload builder with full per-line and per-category tax breakdown. - Per-product RRA VAT category override (A/B/C/D) for exports and non-taxable supplies.
- Refund receipts that reference the original receipt number.
- Internal Data + Receipt Signature normalisation, length validation and printed grouping.
- Local SHA-256 verification digest of the canonical signing data-string for tamper detection.
- BYOK VSDC connection profile with connection test, SDC ID / MRC discovery and full transport logging.
- Business-rule validation (TIN, category/rate consistency, totals reconciliation) before transmission.
Boundary & disclosure
This module performs format generation and transmits the receipt to your own certified VSDC/SDC using your credentials (BYOK). It is not a certified Secure Data Controller and does not supply, proxy or impersonate one: the legal fiscal signature is produced by your RRA-registered device. The VSDC base URL and device identifiers are your configuration and stay in your database; no receipt data is sent anywhere other than the VSDC endpoint you configure.
Screenshots
Vsdc Connections
Fiscalise Receipts
Update date: 2026-07-02