Ir al contenido

Cómo configurar el Reporte IEPS en Odoo — Una aventura galáctica

📌 Contexto
12 de junio de 2026 por
BloVox

Cómo configurar el Reporte IEPS en Odoo — Una aventura galáctica

📌 Contexto

Hace mucho tiempo, en una instancia de Odoo muy, muy lejana... un administrador de sistemas se enfrentaba a un problema que muchos en la galaxia fiscal mexicana conocen bien: el Reporte IEPS no arrojaba datos.

Si trabajás con impuestos mexicanos en Odoo, probablemente ya te cruzaste con el IEPS (Impuesto Especial sobre Producción y Servicios). Es ese impuesto que se aplica a productos como bebidas saborizadas, snacks, chocolates, helados y otros "vicios" que el SAT considera dignos de tributación especial. Y si alguna vez intentaste generar un reporte de IEPS en Odoo, es probable que te hayas encontrado con un CSV vacío que te miraba como un stormtrooper mirando un blanco: con total ineficacia.

Este artículo cuenta cómo una empresa de producción de bebidas resolvió el misterio del reporte IEPS fantasma — un caso que involucraba tax groups, wizards, y la Fuerza misma de la configuración de Odoo.

¿Para quién es este artículo? Intermedio. Se asume conocimiento básico de Odoo (facturación, impuestos) y configuración de módulos. No se requiere dominio de la Fuerza, aunque ayuda.

---

🎯 El Desafío

Historia de usuario:

Como contador de una empresa de bebidas, necesito generar el reporte IEPS mensual para presentar ante el SAT, pero el wizard me devuelve un archivo vacío sin importar qué parámetros use.

El escenario:

La empresa en cuestión — llamémosla "La Cantina de Mos Eisley" (una productora de bebidas con presencia en toda la galaxia) — tenía configurado Odoo v18 con la localización mexicana (l10n_mx_edi). Los impuestos IEPS estaban creados: IEPS 8%, IEPS 25%, IEPS 26%, cada uno con su clasificación SAT correspondiente. Las facturas de venta y compra se generaban correctamente con los impuestos aplicados.

Pero cuando llegaba el momento de generar el Reporte IEPS (un wizard de reporte personalizado), el resultado era siempre el mismo: un CSV con encabezados pero sin datos. Como intentar encontrar a Yoda en el lado oscuro de la Fuerza — simplemente no aparecía.

Soluciones que NO funcionaron:

  • **Cambiar las fechas del reporte:** El wizard permite seleccionar un rango de fechas. Probaron con el mes completo, el trimestre, el año... siempre vacío.
  • **Verificar que las facturas tuvieran IEPS:** Las facturas sí tenían impuestos IEPS aplicados correctamente. El problema no estaba ahí.
  • **Revisar la conciliación de pagos:** El reporte IEPS funciona sobre **pagos conciliados**, no sobre facturas emitidas. Los pagos estaban conciliados. Seguía vacío.
  • El costo del problema:

    Sin el reporte IEPS, la empresa no podía presentar la declaración informativa ante el SAT. Cada día sin reporte era un día de multa acumulada y riesgo fiscal. El equipo de contabilidad estaba generando los reportes manualmente en Excel — un proceso de 3-4 días por mes, propenso a errores.

    ---

    🔍 Análisis Técnico

    ¿Cómo funciona el Reporte IEPS?

    El wizard de reporte IEPS genera un CSV basado en pagos conciliados, no en facturas. La clave para entender el problema es que el reporte no mira las facturas directamente, sino las conciliaciones bancarias.

    El flujo es así:

    1. El wizard ejecuta una query SQL directa sobre account_partial_reconcile (la tabla que registra conciliaciones parciales)

    2. Filtra por max_date dentro del rango seleccionado

    3. Filtra por tipo de cuenta: asset_receivable o liability_payable

    4. Calcula un porcentaje de conciliación por línea

    5. Busca las líneas de factura que tienen impuestos del grupo "IEPS"

    6. Aplica el porcentaje de conciliación a esos montos

    El filtro crítico

    Aquí es donde entra el villano de nuestra historia. El filtro busca impuestos así:

    
    ("tax_ids.tax_group_id.name", "=", "IEPS"),
    

    Es decir, busca líneas de factura (account.move.line) que tengan impuestos cuyo grupo de impuestos se llame exactamente "IEPS".

    Arquitectura de datos:

  • Modelo principal: `account.move.line` (líneas de factura)
  • Relación: `tax_ids` (many2many a `account.tax`) → `tax_group_id` (many2one a `account.tax.group`)
  • El filtro usa `tax_ids.tax_group_id.name = "IEPS"` para identificar líneas IEPS
  • La query SQL usa `account_partial_reconcile` para obtener pagos conciliados y sus porcentajes
  • ---

    🔧 La Solución

    El descubrimiento fue que el filtro tax_ids.tax_group_id.name = "IEPS" era la causa del problema. El cliente tenía los impuestos IEPS configurados correctamente, pero pertenecían a un tax group con nombre diferente.

    La solución poderosa: renombrar el tax group para que coincida con el filtro. Como decirle a C-3PO "el nombre es Obi-Wan" y ver cómo finalmente conecta los puntos.

    Alternativas de solución:

    AlternativaProsContras
    Renombrar tax group a "IEPS"Solución inmediata, sin códigoRequiere que el nombre sea exactamente "IEPS"
    Modificar el filtro del wizardMás flexible, no depende del nombre específicoRequiere desarrollo
    Filtrar por `l10n_mx_tax_type`Más robusto, usa campo SAT existenteRequiere desarrollo

    Pasos para la configuración (en UI)

    1. Ir a Contabilidad → Configuración → Impuestos

    2. Identificar el tax group al que pertenecen los impuestos IEPS

    3. Verificar que el nombre del tax group sea exactamente "IEPS"

    4. Si no lo es, renombrarlo

    Código esencial

    
    # En el wizard de reporte IEPS, línea ~135
    # El filtro que busca líneas con impuestos IEPS
    ("tax_ids.tax_group_id.name", "=", "IEPS"),
    

    Mejora propuesta (para futuros viajes galácticos):

    Cambiar el filtro para usar l10n_mx_tax_type en vez del nombre del grupo:

    
    ("tax_ids.l10n_mx_tax_type", "=", "ieps"),
    

    Esto haría el reporte independiente de cómo se llame el tax group, usando en cambio el campo específico de localización mexicana que guarda el tipo de impuesto SAT.

    Verificación funcional: Confirmar desde la UI que el wizard genera datos después del cambio.

    ---

    ✅ Resultados y Beneficios

    Después de renombrar el tax group a "IEPS", el wizard comenzó a generar reportes con datos completos.

  • El reporte IEPS se genera automáticamente desde el wizard
  • Los datos incluyen ventas y compras conciliadas con sus porcentajes correctos
  • Se generan reportes detallados y resumidos
  • Impacto:

  • De 3-4 días de trabajo manual en Excel a 5 minutos de generación automática
  • Cero errores de cálculo en los montos de IEPS
  • Cumplimiento fiscal puntual ante el SAT
  • Timeline de implementación:

  • Análisis: 1 día (revisión de código y configuración)
  • Configuración: 10 minutos (renombrar tax group)
  • Testing: 1 hora (verificar reporte con datos reales)
  • **Total: 1-2 días**
  • ROI estimado:

  • Reducción de 3-4 días manuales a 5 minutos automáticos por reporte
  • Eliminación de errores humanos en el cálculo de IEPS
  • Cumplimiento oportuno de obligaciones fiscales ante el SAT
  • ---

    📋 Para Profundizar

  • [Documentación de Contabilidad en Odoo](https://www.odoo.com/documentation/18.0/accounting.html) — Configuración de impuestos y conciliación bancaria
  • [Localización México en Odoo](https://www.odoo.com/documentation/18.0/es/localization/mexico.html) — Impuestos mexicanos y CFDI 4.0
  • [Forum Odoo: Impuestos IEPS](https://www.odoo.com/forum/) — Consultas sobre impuestos mexicanos
  • ---

    ¿Tu experiencia es diferente? ¿Te encontraste con algún otro filtro caprichoso en los reportes de Odoo? ¿Conocés algún módulo OCA que resuelva esto de manera más elegante? Dejá tu experiencia en los comentarios — en la galaxia de Odoo, siempre hay múltiples caminos hacia el Lado Luminoso de la configuración correcta.

    Que la Fuerza (y los impuestos) te acompañen.

    ---

    Tipo: bugfix

    Audiencia: funcional

    Versión Odoo: v18

    Topic origen: #XXXX

    Estado: BORRADOR

    📬 ¿No querés perderte ningún artículo nuevo?

    Dejanos tu correo y te avisamos cuando publiquemos algo.

    ¡Gracias por suscribirte!