Quick summary (1 minute)
As of January 1, 2026 the SRI removed the 4-business-day window to authorize electronic vouchers: every invoice must transmit at the moment it is issued. Any Odoo that did not migrate in time either blocks the register or generates broken authorizations, with fines up to USD 4,250 per case.
«sri real time test» is not a marketing phrase. It is the operation you run in the SRI pruebas environment (celcer.sri.gob.ec) before every release and every certificate swap. And it is exactly what 7 out of 10 Ecuadorian SMBs skip: the code ships straight to production, a negative authorization lands on the customer, the sequence breaks, and February brings the call from the tax controller.
This checklist is 12 targeted checks of Odoo against the SRI real-time requirements for 2026. Reproducible: each step lists the XML block, the expected response status, the typical error code, and the spot in Odoo where it breaks. It applies to every version with l10n_ec_edi: Odoo 16, 17, 18 — both Community (via OCA) and Enterprise.
- SRI real-time = voucher transmission within < 60 seconds of issuance. The old 4-business-day window was removed by Resolución 14/2025 with reform 17/2025.
- Invoice cancellation — only through the 7th of the following month. After that: credit note.
- Credit and debit notes require receiver confirmation within 5 business days. Silence = rejection, and the deductibility is lost.
- Testing inside Odoo happens in the pruebas environment (
celcer.sri.gob.ec), with<ambiente>1</ambiente>. Never in production. - Top three failure points: expired
.p12, sequence desync, batch cron instead of a real-time hook.
What changed on January 1, 2026
Through the end of 2025 the issuer could queue invoices and ship them to the SRI up to 4 business days later: authorization was granted retroactively. As of January 1, 2026 that model is dead. Primicias confirms that Resolución 14/2025 with reform 17/2025 forces four changes:
- Immediate transmission. The voucher must reach the SRI «at the moment of issuance». In the controller's interpretation: ≤ 60 seconds. ATS (Anexo Transaccional Simplificado) is built from real-time data starting in 2026, and any delay is logged in the inter-agency reconciliation table.
- Cancellation only through the 7th of the following month. A January 23 invoice can be cancelled only through February 7. After that: credit note with receiver confirmation (HLB Ecuador details the procedure).
- Note confirmation (5 business days). Credit and debit notes starting in 2026 require the receiver to log into the SRI portal and either accept or reject. Five business days of silence = rejection, the document is void, the tax credit is lost.
- Contingencia mode restricted. Previously you could «go offline» and catch up in a batch. Now contingencia activates only on confirmed webservice unavailability (
estado.sri.gob.ecrecords it). Artificial use = fine.
How this hits Odoo
l10n_ec_edi (Enterprise plus the OCA build) has handled real-time since version 16.0+. But three cases break: custom XML pre-validators cause clave-de-acceso desync (error 35/43); old .p12 certificates from BCE with two-year validity expire silently — real-time returns 401; the standard 10-minute cron technically falls outside real-time. All three are caught in pruebas before they hit production. That is why the sri real time test is cheaper insurance than a month of fines.
12 points of the SRI real time test for Odoo
Run them in order. Each check is independent — you can stop after step 4 and pick up later without resetting state.
#1. Pruebas environment is enabled
Where: Configuration → Companies → Ecuador → SRI environment = «Pruebas (1)».
XML check: <ambiente>1</ambiente>. The webservice hits celcer.sri.gob.ec, not cel.sri.gob.ec.
Common failure: a custom module hard-codes the production URL in one of its branches.
#2. The.p12 digital signature is valid
Validity: ≥ today + 30 days.
Command: openssl pkcs12 -in cert.p12 -nokeys -clcerts | openssl x509 -noout -dates.
Issuer: BCE, Security Data, ANF AC or Uanataca — the SRI rejects everything else.
Common failure: the Odoo container lacks read permissions on the file; the cert path is hard-coded in an updated module.
#3. Clave de acceso is 49 digits and passes modulo 11
Formula: date(8) + docType(2) + RUC(13) + environment(1) + serie(6) + sequence(9) + numCode(8) + emissionType(1) + checkDigit(1) = 49.
Test: issue 3 invoices in a row → sequence advances +1, numCode is random, check digit passes modulo 11.
Common failure: journal.sequence without padding=9 returns an 8-digit sequence — the SRI returns error 43.
#4. RUC and razón social match the SRI registry
RUC is 13 digits, ends in 001. Razón social is character-for-character what srienlinea.sri.gob.ec/.../ConsultaRuc shows. An extra space or a lowercase where the registry has uppercase → the SRI rejects with «no coincide datos contribuyente».
#5. The recepción webservice responds RECIBIDA in ≤ 5 seconds
Manual POST to RecepcionComprobantesOffline. If timeout exceeds 30 seconds, you hit the SRI peak window of 9:00–11:00 UTC-5. Fix: retry with exponential backoff (1/2/4/8 s).
#6. Authorization returns AUTORIZADO
One to three seconds later, call AutorizacionComprobantesOffline with the same key. A transient EN PROCESO is acceptable — retry after 3 s. Error: NO AUTORIZADO with error 70 = recepción has not registered yet. Fix is retry, not panic.
#7. PDF (RIDE) and signed XML are stored in Odoo
On the account.move both attachments must be present: signed XML + RIDE PDF. The numeroAutorizacion matches in both. Enterprise stores both automatically; the OCA build sometimes keeps only the XML — the RIDE is regenerated on the fly.
#8. The receiver email goes out with XML + PDF
Template l10n_ec_edi.email_template_edi_invoice fires and both attachments are included. Failure: the 10 MB outbound SMTP cap kills batch sends of several invoice lots in one campaign.
#9. Cancellation through the 7th works; later it blocks
Issue on the 1st, cancel on the 5th → accepted. After the 7th, Odoo should disable the «Anular» button and surface «Credit Note» instead. OCA Community does not enforce the 7-day rule out of the box — you need a patch or the OCA extension l10n_ec_anulacion_window (if it exists for your version).
#10. Credit Note with receiver confirmation (5 days)
The credit note goes to the receiver, the SRI returns PENDIENTE_CONFIRMACION, and after 5 business days with no answer = RECHAZADA. Failure: the bookkeeper sees «AUTORIZADO» as the final state and closes the books — but tax-wise the document is void. The estado_confirmacion field has to be checked separately.
#11. Contingencia kicks in only on unreachable webservice
On HTTP 500 from the SRI ≥ 3 times in a row within 10 minutes → tipoEmision=2 (offline). The RIDE is generated with that flag, and once the service is back (≤ 24 h) you ship the batch through RecepcionComprobantesOffline. Mandatory: save the estado.sri.gob.ec screenshot as evidence for the controller.
#12. ATS reconciles with the authorization journal
At month end, ATS = sum of every AUTORIZADO voucher for the period. Reports → Ecuador → ATS Mensual → export to.txt → line count = AUTORIZADO count in l10n_ec.authorization. Mismatch → the SRI asks for clarification within 15 days.
<ambiente>1</ambiente> in the emitted XML and celcer in the webservice URL.When this checklist works — and when it doesn't
Works end-to-end if: Odoo 16/17/18 (Community with OCA or Enterprise) + l10n_ec_edi updated to a release of ≥ January 2026 + you issue invoices, credit notes, debit notes, and withholding vouchers.
| Scenario | Coverage | Gap |
|---|---|---|
| Odoo 18 Enterprise + l10n_ec_edi 18.0+ | 12 / 12 | none — ideal case |
| Odoo 17 Community + OCA l10n_ec_edi 17.0 | 12 / 12 | confirm commit is ≥ December 2025 |
| Odoo 16 + OCA 16.0 | 10 / 12 | steps 9 and 10 require a manual patch |
| Odoo 15 or older | 8 / 12 | real-time was a partial backport — migrate or patch |
| Custom XML generator (in-house module) | 9 / 12 | steps 3, 5, 6 break until the module ships XSD 2.1.0 |
| Third-party PSP (Datil, FactuPlus, Voucher) | n/a | the 12 checks apply to the PSP, not to l10n_ec |
Doesn't work (needs a separate playbook):
- Electronic delivery note (GRE) — separate XML structure with route and carrier. Uses
l10n_ec_guia_remision(OCA, beta). Same real-time rules, different schema. - Liquidación de compra (purchase from an individual without RUC) —
l10n_ec_edicovers the basics but RIDE and signing differ. Separate 8-step checklist. - Export vouchers — SENAE integration through ECUAPASS, not the standard real-time path.
If the business falls into «partial» or «doesn't work» — close the 12 points of the main flow first (invoices + notes), then run a separate sprint.
5 mistakes that burn cash in 2026
#1. Testing in production
The team wants to «test like in real life», switches ambiente=2, and sends a «test» invoice. The SRI accepts it against a real taxpayer. Phantom revenue in the tax return, the receiver gets an invoice that should not exist. To cancel — only through the 7th of the following month. Fine up to USD 1,130 per case. Fix: a separate Odoo database with a test RUC and ambiente=1 hard-coded in the config.
#2. Production.p12 in the pruebas environment
They copy the production cert into pruebas. The SRI accepts it, but on the next sync with the real SRI → clave-de-acceso desync, and the next live invoice fails. Fix: a separate .p12 for the test RUC, different passwords, stored separately.
#3. 10-minute cron instead of a post-validate hook
Standard l10n_ec_edi OCA 16 shipped _cron_process_documents every 10 minutes. It worked in 2024–2025. In 2026 it violates real-time. The controller compares the timestamp of issuance vs. authorization; > 60 seconds = red flag. Fix: override account.move._post() to call the SRI inline. Leave the cron only as a retry for FAILED states.
#4. Ignoring PENDIENTE_CONFIRMACION on credit notes
Starting in 2026, credit notes no longer finalize automatically after AUTORIZADO. The receiver has 5 business days. The bookkeeper sees «AUTORIZADO» and closes the books — the receiver rejects on day 4 — the tax credit is lost. Fine USD 420–1,130 per case. Fix: an estado_confirmacion field on account.move, a dashboard of pending credit notes, and an email reminder on day 3.
#5. Batch send on a midnight cron
Teams set up a cron at 23:55 «so it all goes out by end of day». Between issuance at 9:00 a.m. and the 23:55 send, there are 15 hours. Real-time violated, ATS does not reconcile. The «technical delay» excuse works once. Fix: kill every batch cron for l10n_ec, keep only real-time triggers + a retry queue for transient failures.
«We assumed the cron was fine because it had always worked. On the first Monday of January, 87 invoices went out at 9 a.m. and all of them queued until 11. The SRI called us the next day.»
Case: electronics distributor, Guayaquil, 80 invoices/day
Regional electronics distributor in Guayaquil, 35 employees, ~USD 4M/year revenue, Odoo 17 Community + l10n_ec_edi from OCA. In December 2025 they switched production to the new SRI real-time regime. By January 7 the first week of January was spent putting out fires: of 480 invoices, 113 (23.5%) ended up queued with error 70, 38 (8%) timed out, and the cashiers started writing receipts by hand on paper.
Failure number one: the standard every 10 minutes cron. The SRI had not finished registering the clave de acceso by the time the child call to AutorizacionComprobantesOffline asked for it. Error 70 («clave acceso no encontrada»), queue grew. They had not run sri real time test in pruebas — «it worked all of 2025».
What they did (3 days): ran the 12-point checklist on a duplicate environment with a test RUC → 4 out of 12 passed. Rewrote account.move._post() to run inline. Added retry with backoff (1/2/4 s). Changed sequence padding from 8 to 9. Re-issued the 151 failed invoices via credit note + new sequence.
Result after 30 days: authorization success rate 99.4% (up from 76%); average issuance → AUTORIZADO latency 1.8 seconds (down from 23 minutes); March 2026 ATS reconciled with the authorization journal at zero variance (was 8–12%). Savings: ~USD 9,000 in fines and clarifications + 32 hours of accounting time per month. Investment: 16 hours of one developer. ROI: first week.
Download the full checklist and XML templates
The 12 checks above are the public excerpt. The full PDF (28 pages) ships ready-to-use XML templates (invoice, CN, DN, withholding), the complete list of SRI error codes with translation and root cause, an «AUTORIZADO vs PENDIENTE vs DEVUELTA» decision tree, a Python script for bulk validation of claves de acceso via modulo 11, four Odoo config files for pruebas and production, and a cron schedule template for the retry queue.
Leave your email — we send it within the hour. Free, no newsletter signup.
All 12 points passed first time? Congratulations — your Odoo is production-ready. Schedule cron monitoring, daily ATS reconciliation, and the .p12 in the calendar with a 60-day expiration alert.
3–7 points failed? That is the baseline for a vanilla OCA install. 16–24 hours of patches and you re-run the test.
8+ points failed? You need an outside audit. Start with a diagnostic (Odoo audit) — 30 minutes of conversation + XML sample review + a decision: rescue vs. migration.
Related material: Odoo in Ecuador · SRI Real-Time hub · Odoo implementation · Odoo project rescue · SUNAT Peru 2026 · DIAN Colombia · SIFEN Paraguay · DGI CFE Uruguay 25.1.
Frequently asked questions
When exactly does SRI real-time go live in Ecuador?
00:00 on January 1, 2026 for all standard and special-category taxpayers. Microenterprises have a transition window through July 1, 2026.
How big is the fine for breaking real-time?
USD 1,130 for a single incident, USD 4,250 for systematic non-compliance. On top of that: loss of deductibility on the receiver side, which often costs more on the annual books than the fine itself.
Can I test in pruebas using my real RUC?
Technically yes, the SRI allows it, but it mixes test data and real documents in the same namespace. The recommended path is to request a test RUC through the SRI online form — it takes 5 business days.
What if the SRI webservice is down?
Contingencia mode kicks in: tipoEmision=2. The voucher is issued with the same clave de acceso but without online authorization. Once the service is back (≤ 24 h) you ship the batch via RecepcionComprobantesOffline. A screenshot of estado.sri.gob.ec is mandatory evidence for the controller.
Which Odoo Gold partners in Ecuador ship real-time support out of the box?
TRESCLOUD (Quito, Guayaquil, Cuenca) and GAHEOS (Quito) — both shipped updated modules for January 2026. With a Silver partner or a freelancer, check the date of the latest commit on their l10n_ec_edi repo: it should not be older than December 2025.
Can a third-party PSP replace l10n_ec_edi?
Yes: Datil, FactuPlus, Voucher, Documents Manager. In Odoo the integration runs through a webhook. The 12 checks in this checklist apply to the PSP, not to l10n_ec_edi.
Does the same checklist cover electronic delivery notes (GRE)?
Only partially. The real-time rules are identical, but the XML schema and required fields differ (route, carrier, vehicle plate). The OCA module l10n_ec_guia_remision is in beta. Recommended: build a separate 8-step GRE checklist after closing the invoice one.
