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:
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:
---
🔧 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:
| Alternativa | Pros | Contras |
| Renombrar tax group a "IEPS" | Solución inmediata, sin código | Requiere que el nombre sea exactamente "IEPS" |
| Modificar el filtro del wizard | Más flexible, no depende del nombre específico | Requiere desarrollo |
| Filtrar por `l10n_mx_tax_type` | Más robusto, usa campo SAT existente | Requiere 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.
Impacto:
Timeline de implementación:
ROI estimado:
---
📋 Para Profundizar
---
¿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