Get in touch
  • OpenCart
  • Payments
  • v1.0.0

e-Factura ANAF for OpenCart — RO e-Factura invoices to ANAF (SPV) straight from orders

Romanian RO e-Factura invoices from OpenCart 4 orders: UBL 2.1 under CIUS-RO 1.0.1, sent directly to the ANAF API (SPV) through your own OAuth application, no accounting SaaS. Upload index, status and the signed ANAF answer on the order, a CUI field with a check at checkout, counties and Bucharest sectors, TEST and PRODUCTION. Pro — B2C, credit notes, EU and non-EU buyers, currencies with the BNR rate, a printable invoice for customers. Lifetime licence.

Download Free
Pro · lifetime licence The more sites, the less each one costs
Compatibility
OpenCart 4.0.2+ and 4.1 · PHP 8.0+ · standard OpenCart checkout · UBL 2.1 / CIUS-RO 1.0.1 · RO e-Factura API (OAuth)
Licence
one site, lifetime
Trial
7 days, no card, one per site
Updated
September 2026
Or all 144 Pro modules with All Access — 4 990 ₴ / year

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
380 invoice (UBL 2.1, CIUS-RO 1.0.1) from the order of a Romanian company with a CUI in RON: seller, buyer, products, shipping, coupons, VAT per rate ✔ ✔
Automatic on the order statuses you choose ✔ ✔
Direct upload to the ANAF API through your own ANAF OAuth application, no third-party service ✔ ✔
ANAF status (stareMesaj) and the signed answer ZIP — in the register and on the invoice page ✔ ✔
Rejected — the ANAF error list and "Regenerate and send" with the same number ✔ ✔
An uncertain upload (timeout) is never resent blindly — "Send again as it is" after checking SPV ✔ ✔
CUI field at checkout with check digit validation (with or without RO), created with one button ✔ ✔
Counties as RO-XX and Bucharest sectors for CIUS-RO ✔ ✔
Several VAT rates from OpenCart taxes, lines without VAT, seller not registered for VAT (O), "TVA la încasare" ✔ ✔
Your own number series with a yearly or monthly counter ✔ ✔
TEST and PRODUCTION environments ✔ ✔
Invoice register, invoice page, e-Factura panel on the order page ✔ ✔
XML check and PDF through the public ANAF services ✔ ✔
Module languages: English, română ✔ ✔
B2C reporting through uploadb2c: CNP or 13 zeros — ✔
381 credit notes: full on an order status, partial by lines or amount — ✔
Buyers from the EU (K) and outside the EU (G) with extern=DA — ✔
Invoices in EUR, USD and other currencies with the BNR rate and VAT in RON — ✔
Printable invoice for the customer: e-mail link and a block in the account — ✔
Invoices for past orders, CSV register, e-mails on rejected invoices and connection problems — ✔

What it looks like

e-Factura ANAF invoice register in the OpenCart 4 admin with ANAF statuses
Invoice register: invoices and credit notes with the “In SPV” status and upload indexes, an invoice in EUR, an EU buyer and an invoice ANAF refused on upload. TEST environment, ANAF answers simulated.
e-Factura panel on the order page in the OpenCart admin
The “e-Factura” panel on the order: the buyer’s tax number with the check, a field to correct the CUI and the invoice with the “In SPV” status.
CUI / CIF field on the standard OpenCart 4 checkout
Standard OpenCart 4.1 checkout: the “CUI / CIF (company)” field next to the e-mail; prices in lei, 21 % VAT.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.

Technical requirements

  • OpenCart 4.0.2.0+ or 4.1 (tested on 4.0.2.3 and 4.1.0.3, mysqli and pdo drivers). There are no builds for OpenCart 3 and 2.3.
  • PHP 8.0+ with cURL, OpenSSL and ZipArchive
  • A qualified certificate of a person with SPV rights for the seller’s CUI
  • An ANAF application for the “E-Factura” service with the storefront callback URL (index.php?route=extension/cc_efactura/efactura.oauth). Whether ANAF accepts a callback URL with parameters has not been verified live; if not, tokens from Postman can be pasted into the settings.
  • Currency: RON in Free; other currencies with the BNR rate in Pro
  • Checkout: the standard OpenCart checkout. Third-party checkouts and themes that redraw the order page have not been tested.
  • Module languages: English and Romanian.

Version history

v1.0.0 Current September 2026

For OpenCart 4.0.2+ and 4.1: UBL 2.1 / CIUS-RO 1.0.1, ANAF OAuth, upload, stareMesaj, descarcare, the signed answer kept in the database, rejected invoices and “Regenerate and send”, CUI…

Frequently bought with e-Factura ANAF for OpenCart

4 modules in one order — 40% cheaper than separately

“Store starter” bundle e-Factura ANAF Nova Poshta Premium LiqPay Telegram notifications and Viber/SMS for customers Need more — all 144 modules in All Access for 4 990 ₴.
3 790 ₴ lifetime instead of 6 260 UAH bought separately
Buy the bundle →

Full module description

e-Factura ANAF for OpenCart is a module for shops in Romania on OpenCart 4 that have to report their invoices to the national RO e-Factura system (SPV) of the ANAF tax authority. It turns an order into an electronic invoice in UBL 2.1 under the Romanian specification CIUS-RO 1.0.1 and sends it to the ANAF API itself, through your own OAuth application — without an accounting SaaS in between and without a monthly subscription. The upload index, the ANAF status and the signed answer of the Ministry of Finance are kept with the invoice.

What you need. A company registered in SPV; a qualified digital certificate of a person with SPV rights for the company’s CUI; your own ANAF application for the “E-Factura” service, registered on the ANAF portal with the callback URL the module shows. OpenCart 4.0.2+ or 4.1.

How it was tested, honestly. The module was tested on local OpenCart 4.1.0.3 and 4.0.2.3 stores (mysqli and pdo database drivers) with ANAF answers simulated from the official API documentation (upload, stareMesaj, descarcare, uploadb2c) and the examples of Romania’s Ministry of Finance: installation with the standard Installer, guest checkout, B2B and B2C invoices, credit notes, EUR with the BNR rate, an EU buyer, a rejection and a resend. The XML of the test orders passed the official ANAF validator (UBL 2.1 XSD + CIUS-RO 1.0.9 schematron); the offline validator cannot identify an EU buyer (extern=DA), that document passed the XSD and the schematron. We have not run the module against the live ANAF, test or production, yet: that needs the certificate of a Romanian company. Start in the TEST environment during the 7-day Pro trial — if ANAF answers differently from its documentation, we fix it promptly.

Responsibility for the content of the invoice stays with the shop. The module builds the invoice from the OpenCart order data and from the VAT settings you choose: categories for lines without VAT, the non-VAT-payer mode, “TVA la încasare”, B2C reporting, the BNR rate for currencies. These are your accountant’s decisions — show them the settings before switching to PRODUCTION.

What the admin gets

  • Extensions → Modules → e-Factura ANAF: the “Invoices”, “Settings”, “Tools” and “Licence” tabs.
  • Invoice register: number, order, buyer with CUI, total and currency, status (“In SPV”, “Rejected by ANAF”, “Not delivered”), upload index or the ANAF message; filter and search. “Send queued invoices now” sends the queue at once.
  • Invoice page: the XML, the signed ANAF answer, a check and a PDF through the public ANAF services, “Regenerate and send” for a rejected invoice.
  • Notices at the top of the module: no connection or an expired one, invoices that have not reached SPV for a while.

The order page in the admin gets an “e-Factura” panel: the buyer’s tax number with the check result, a field to correct the CUI for the invoice (the customer’s data is not changed) and the order’s invoices with their ANAF status. A rejected invoice shows the error list from the ANAF answer; once fixed — “Regenerate and send” with the same number.

Uncertain uploads. If ANAF does not answer after an upload has started (a timeout), the module never resends the invoice blindly — that could create a duplicate in SPV. The invoice becomes “Not delivered”, and “Send again as it is” sends the same XML after you have checked in SPV that the first one did not arrive.

What the buyer sees

The standard OpenCart checkout gets a “CUI / CIF (company)” field — an ordinary OpenCart custom field (Customers → Custom Fields) that the module creates with a button in the settings. It is optional: without a CUI the order is an ordinary one, a company with a CUI gets an invoice in RON. “14399840”, “RO14399840” and “RO 14399840” are all accepted.

A Romanian CUI with a wrong check digit does not pass: the error appears under the field, and the order cannot be placed until the number is fixed. VAT numbers from other EU countries and foreign tax numbers are accepted.

How it works — step by step

  1. ANAF application. In the developer section of the ANAF portal you register an application for the “E-Factura” service with the callback URL from the module settings; ANAF gives you a Client ID and a Client Secret.
  2. Connection. Settings → Connection to ANAF: Client ID and Client Secret, “Connect with ANAF”, choose the qualified certificate, “Check the connection”.
  3. Seller. CUI, name, address, county or Bucharest sector, VAT payer or not, the number series; the “Create the CUI field” button.
  4. Order status. The order gets the status you chose (for example “Complete”): the module builds the XML with the next number and queues it.
  5. Sending. The invoice is uploaded to ANAF right after the status change; the OpenCart scheduler checks the queue every hour, and for faster statuses add a hosting cron with the address from the “Tools” tab every 5 minutes.
  6. Answer. Accepted — status “In SPV”, the index and the signed ANAF answer on the invoice; rejected — the error list and “Regenerate and send”.
  7. Failures. ANAF down — the invoice waits in the queue and goes later; an uncertain upload waits for your decision.

Pro. The “Refunded” status (or one you choose) produces a full 381 credit note referencing the invoice; a partial credit note is created by hand by lines or by amount. Orders without a CUI are reported through uploadb2c with the CNP (an optional field of its own) or 13 zeros. EU buyers with a VAT number get category K, buyers outside the EU get G, both with extern=DA. Orders in EUR, USD and other currencies get an invoice with the BNR rate and the VAT total in RON.

Under the hood

  • UBL 2.1, CustomizationID CIUS-RO 1.0.1: 380 invoice and 381 credit note; counties coded as ISO 3166-2:RO, Bucharest sectors as SECTOR1–6.
  • ANAF OAuth: authorization code on logincert.anaf.ro, token_content_type=jwt, a state against forged callbacks. Tokens and the Client Secret are stored encrypted; the encryption key lives in the shop’s storage folder.
  • RO e-Factura API: upload / uploadb2c, stareMesaj, descarcare within the ANAF limits — polling with a growing pause, the answer is downloaded once.
  • ANAF answers are kept in the shop database, not as files in the site folder: they cannot be opened by a direct URL, downloads go only through the admin.
  • OpenCart events (order status change, checkout, order panel) and an OpenCart scheduler task — no core files are edited.
  • Log cc_efactura.log in the shop’s log folder, viewable in the “Tools” tab.
  • Uninstall: without “Delete data” the invoice register and counters stay for your accounting; with “Delete data” the CUI/CNP fields created by the module are removed too.

Installation

  1. Extensions → Installer → Upload: cc_efactura.ocmod.zip, then Install.
  2. Extensions → Extensions → Modules → e-Factura ANAF → Install → Edit.
  3. Register an “E-Factura” application on the ANAF portal with the callback URL from the “Settings” tab.
  4. Paste the Client ID and Client Secret, “Connect with ANAF”, sign in with the certificate, “Check the connection”.
  5. Fill in the seller data, click “Create the CUI field”, switch invoicing on, keep the TEST environment.
  6. Place a test order with a CUI and set it to “Complete” — the invoice appears in the register with its ANAF status.
  7. Show the VAT settings to your accountant and switch the environment to PRODUCTION. For Pro — the key from the e-mail after payment or the 7-day trial.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
What do I need to start?

A company registered in SPV, a qualified digital certificate of a person with SPV rights for its CUI and your own application for the "E-Factura" service, registered on the ANAF portal with the callback URL the module shows. The Client ID and Client Secret go into the settings, then you sign in with the certificate.

What has the module been tested on?

On local OpenCart 4.1.0.3 and 4.0.2.3 stores (mysqli and pdo database drivers) with ANAF answers simulated from the official API documentation. The XML of the test orders passed the official ANAF validator (CIUS-RO 1.0.9 schematron). It has not yet worked with the live ANAF: that needs the certificate of a Romanian company. Try it in the TEST environment with your company during the 7-day Pro trial.

Are there builds for OpenCart 3 and 2.3?

No, OpenCart 4.0.2+ and 4.1 only.

How often do I sign in with the certificate?

The access token lasts 90 days and is renewed by the module, the refresh token lasts 365 days. Once a year you sign in with the certificate again; the module warns you in advance.

Who is responsible for the content of the invoice?

The shop. The module builds the invoice from the order data and from the VAT settings you choose. VAT categories, "TVA la încasare", B2C reporting, the BNR rate for currencies are your accountant's decisions; show them the settings before switching to PRODUCTION.

Is the licence yearly?

No. For OpenCart the licence is lifetime: one payment, no yearly fees.

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module