Skip to Content

Tu ATS reporta retenciones en cero aunque sí las registraste? Aquí está la solución gratuita

Te explicamos por que ocurre y como solucionarlo en menos de 5 minutos, sin tocar una sola linea de codigo.

El problema que nadie te cuenta sobre el ATS en Odoo

Imagina esta situacion: llevas meses trabajando con Odoo en tu empresa en Ecuador. Facturas, cobros, retenciones... todo parece fluir correctamente. Llega el momento de generar el Anexo Transaccional Simplificado (ATS) para el SRI y lo descargas confiado.

Abres el archivo XML, revisas la seccion de ventas y ahi esta el problema:

<detalleVentas>
    <tpIdCliente>04</tpIdCliente>
    <idCliente>1790012345001</idCliente>
    <tipoComprobante>18</tipoComprobante>
    <baseImponible>5000.00</baseImponible>
    <valorRetIva>0.00</valorRetIva>
    <valorRetRenta>0.00</valorRetRenta>
</detalleVentas>

valorRetIva: 0.00. valorRetRenta: 0.00.

Pero tu sabes que ese cliente te entrego una retencion. La registraste en Odoo, la publicaste, el comprobante esta ahi. Entonces, por que el ATS dice que no hay retencion?

La respuesta corta: Odoo no esta leyendo esos datos. El metodo interno que genera la seccion de ventas del ATS inicializa ambos campos en cero y nunca los llena con los valores reales de las retenciones recibidas.

Y no, no es algo que estes haciendo mal. Es una omision en el codigo base del modulo l10n_ec_reports_ats que afecta a todas las empresas ecuatorianas que usan Odoo Enterprise.

Por que esto importa mas de lo que parece

Quizas pienses: "bueno, el SRI no me ha rechazado el ATS todavia". Y es posible. Pero considera lo siguiente:

  • Inconsistencia tributaria: Si tu cliente declara que te retuvo $600 de IVA, pero tu ATS dice que no recibiste ninguna retencion, hay una discrepancia que el SRI puede detectar en sus cruces de informacion.
  • Auditorias futuras: Un ATS con retenciones en cero cuando deberian tener valores reales es una senal de alerta para cualquier auditor.
  • Perdida de tiempo: Muchos contadores terminan editando el XML a mano antes de subirlo al SRI. Cada mes. Para cada cliente.

La historia de Veronica: editando XML cada mes

Veronica es contadora en una distribuidora de productos alimenticios en Guayaquil. Cada mes, despues de generar el ATS desde Odoo, abria el XML en un editor de texto y buscaba cada registro de venta donde sabia que habia recibido retenciones. Uno por uno, reemplazaba los ceros con los montos correctos que sacaba de los comprobantes de retencion.

"En un buen mes eran 15 o 20 clientes con retenciones", cuenta. "En epoca alta, mas de 40. Me tomaba toda una manana solo corregir el archivo."

Veronica no sabia que el problema no era de ella ni de su equipo. Era del sistema.

Que causa exactamente el problema

Para quienes quieran entender el detalle tecnico (sin necesidad de ser programador), aqui va la explicacion simplificada:

Odoo genera el ATS a traves de un metodo interno llamado _get_sales_info_by_partner. Este metodo recorre las facturas de venta, agrupa la informacion por cliente y genera los campos que el SRI requiere. Sin embargo, cuando llega a los campos de retenciones de ventas, hace esto:

# Codigo original de Odoo (simplificado)
resultado = {
    'baseImponible': base_calculada,
    'valorRetIva': 0.0,      # Siempre cero
    'valorRetRenta': 0.0,    # Siempre cero
}

Los valores se inicializan en cero y nunca se consultan los registros de retencion (out_withhold) que el propio Odoo almacena correctamente en la base de datos.

Los datos estan ahi. Odoo simplemente no los lee al momento de armar el XML.

La solucion: un modulo gratuito que se instala en 2 minutos

Hemos desarrollado un modulo llamado ATS Sales Retention (l10n_ec_ats_sales_retention) que corrige esta omision de forma automatica. Es gratuito, de codigo abierto, y no requiere ninguna configuracion adicional.

Como funciona

El modulo extiende el metodo original para agregar un paso adicional despues de que Odoo genera los datos base:

  1. Llama al metodo original (preserva todo el comportamiento existente).
  2. Busca en la base de datos todos los registros de retencion (out_withhold) que estan en estado publicado y vinculados a las facturas de venta del periodo.
  3. Filtra por tipo de impuesto:
    • withhold_vat_sale para retenciones de IVA.
    • withhold_income_sale para retenciones de Renta.
  4. Suma los montos y los asigna a valorRetIva y valorRetRenta en el grupo correcto del ATS.

El resultado en el XML pasa de esto:

<valorRetIva>0.00</valorRetIva>
<valorRetRenta>0.00</valorRetRenta>

A esto:

<valorRetIva>72.00</valorRetIva>
<valorRetRenta>17.50</valorRetRenta>

La historia de Veronica (continuacion)

Despues de instalar l10n_ec_ats_sales_retention, Veronica genero el ATS del mes siguiente directamente desde Odoo. Abrio el XML esperando tener que corregirlo como siempre.

"Revise los primeros tres clientes y los montos ya estaban correctos. Revise cinco mas. Todos bien. No tuve que cambiar ni un solo numero."

Lo que antes le tomaba una manana entera, ahora le toma exactamente cero minutos extra.

Instalacion paso a paso

No necesitas ser programador. Si puedes instalar un modulo en Odoo, puedes resolver este problema ahora mismo.

Paso 1: Descargar el modulo

Descarga l10n_ec_ats_sales_retention desde la Odoo App Store y colocalo en tu directorio de addons personalizados.

Paso 2: Actualizar la lista de aplicaciones

En Odoo, ve a Aplicaciones y haz clic en Actualizar lista de aplicaciones.

Paso 3: Buscar e instalar

Busca "ATS Sales Retention" en el listado de aplicaciones y haz clic en Instalar.

Paso 4: No hay paso 4

En serio. No hay nada que configurar. El modulo empieza a funcionar automaticamente la proxima vez que generes el ATS.

Requisitos

  • Odoo 18 Enterprise (compatible con Odoo.SH y despliegues on-premise).
  • El modulo l10n_ec_reports_ats debe estar instalado (es el modulo estandar de ATS que viene con la localizacion ecuatoriana).

Es seguro? Que pasa si Odoo corrige el problema en el futuro?

Esta es una pregunta que nos hacen frecuentemente, y la respuesta es: lo hemos pensado desde el diseno.

Proteccion proactiva integrada

El modulo incluye una verificacion automatica: si en una futura version de Odoo el metodo original ya devuelve valores distintos de cero para valorRetIva o valorRetRenta, l10n_ec_ats_sales_retention detecta que el problema ya fue resuelto y se desactiva automaticamente. No duplica montos, no genera conflictos.

Es decir: puedes dejarlo instalado indefinidamente. El dia que Odoo lo arregle nativamente, el modulo simplemente dejara de hacer su trabajo porque ya no sera necesario.

Desinstalacion sin riesgo

Si en algun momento decides desinstalarlo, la operacion es completamente limpia:

  • No crea tablas nuevas en la base de datos.
  • No agrega campos a modelos existentes.
  • No modifica vistas XML.
  • No genera registros de datos.

El modulo es, literalmente, una extension de logica pura. Se instala limpio y se desinstala limpio.

La historia de Carlos: el administrador precavido

Carlos es el jefe de TI de una empresa importadora en Quito. Cuando su contadora le pidio instalar el modulo, su primera reaccion fue la misma que tendria cualquier administrador responsable: "Y si despues no lo puedo quitar?"

Reviso la documentacion, vio que el modulo no tocaba la base de datos y decidio probarlo primero en el entorno de staging de Odoo.SH. Lo instalo, genero el ATS, verifico que los numeros cuadraban, y lo desinstalo para confirmar que no dejaba rastro.

"Lo instale en produccion esa misma tarde", dice Carlos. "Es el tipo de modulo que deberia venir incluido en Odoo."

Como verificar que esta funcionando correctamente

Despues de instalar l10n_ec_ats_sales_retention, puedes hacer una prueba rapida con estos escenarios:

Escenario 1: Retencion basica de IVA

  1. Crea y publica una factura de venta.
  2. Registra una retencion del cliente (out_withhold) con un impuesto de retencion de IVA (por ejemplo, 10%).
  3. Publica la retencion.
  4. Genera el ATS desde Contabilidad, Informes, Informe de Impuestos, ATS.
  5. Abre el XML y busca el registro de ese cliente.

Resultado esperado: valorRetIva muestra el monto real de la retencion. valorRetRenta permanece en 0.00 (porque no aplicaste retencion de renta).

Escenario 2: Retencion combinada IVA + Renta

  1. Crea una factura de venta y registra una retencion con ambos tipos: IVA y Renta.
  2. Genera el ATS.

Resultado esperado: Ambos campos muestran los montos correctos.

Escenario 3: Retencion cancelada

  1. Registra una retencion y luego cancelala.
  2. Genera el ATS.

Resultado esperado: Los montos de la retencion cancelada no aparecen en el XML. Solo se incluyen retenciones publicadas.

Preguntas frecuentes

Este modulo afecta las retenciones de compras?

No. El modulo solo modifica la seccion de ventas (<ventas>) del ATS. Las retenciones que tu empresa aplica a sus proveedores (in_withhold) se manejan por separado y no se ven afectadas.

Funciona con multi-empresa?

Si. El modulo utiliza la infraestructura estandar de Odoo y respeta completamente los limites de empresa.

Necesito hacer algo despues de actualizar Odoo?

No. Gracias a la proteccion proactiva, el modulo se adapta automaticamente. Si una actualizacion de Odoo corrige el problema, el modulo lo detecta y deja de intervenir.

En que versiones de Odoo funciona?

Actualmente esta disponible para Odoo 18 Enterprise. Es compatible con Odoo.SH y despliegues on-premise.

Conclusion

El ATS es una obligacion tributaria mensual para todas las empresas ecuatorianas. Si usas Odoo, no deberia haber una brecha entre lo que realmente ocurre en tu contabilidad y lo que el sistema reporta al SRI.

l10n_ec_ats_sales_retention Este modulo cierra esa brecha. Se instala en minutos, no necesita configuracion, se auto-protege contra futuras correcciones de Odoo, y se puede desinstalar sin dejar rastro.

Es gratuito porque creemos que la informacion tributaria correcta no deberia ser un lujo.

Descarga el modulo gratis y corrige tu ATS hoy

Deja de editar el XML a mano. Instala el modulo, genera tu ATS y comprueba que los numeros finalmente cuadran.


Necesitas implementar Odoo en Ecuador?

En Ganemo somos Gold Partner de Odoo y el desarrollador #1 en apps de localizacion latinoamericana. Implementamos, migramos y personalizamos Odoo para empresas ecuatorianas con soporte dedicado en espanol.

Tu ATS reporta retenciones en cero aunque sí las registraste? Aquí está la solución gratuita
Wilfredo Fernando Pastor Avila February 12, 2026
Share this post
Archive
Sign in to leave a comment
¿Tu equipo pierde horas valiosas en tareas repetitivas? Descubre cómo la automatización puede transformar tu negocio
Aprende a diferenciar entreImagina recuperar el tiempo que tu equipo dedica a procesos manuales y enfocarlo en lo que realmente importa: crecer. Te mostramos cómo lograrlo.