Inicio / Blog / Tutoriales / Auditoría Odoo · checklist 50 puntos
TutorialesLATAM

Auditoría Odoo: checklist de 50 puntos para PYME LATAM

Diez bloques, cincuenta puntos, severidad explícita.
Cómo decidir en una tarde si tu Odoo está sano, tiene 3-7 defectos must-fix, o ya no se salva.

Sergei Filatov
Sergei FilatovFounder · data-metrics.pro · 26 may 2026
◷ 12 min de lectura

Resumen en un minuto

Si tu Odoo lleva más de un año en producción y nunca recibió una revisión independiente, la estadística es estable: por dentro tiene entre 3 y 7 defectos must-fix. El partner que lo instaló prefiere no mencionarlos, porque cada uno es el próximo proyecto facturable.

Este artículo es un mapa. 50 puntos organizados en 10 bloques, desde la versión del stack hasta el plan de recuperación ante desastre. Aplica en cualquier país LATAM con el ajuste del regulador local: SUNAT en Perú, SAT en México, DIAN en Colombia, ARCA (ex AFIP) en Argentina, SII en Chile, SRI en Ecuador, DGI en Uruguay, SET en Paraguay. El checklist es el mismo. Los puntos sobre l10n_* cambian por país.

  • 70% de las PYME LATAM que implementaron Odoo vía partner conviven con 3-7 defectos must-fix.
  • Auditoría ≠ diagnóstico de venta. Es forensia: lectura de Postgres, código custom, cron jobs, integraciones y hooks l10n_*.
  • En 2026 SUNAT, SAT, DIAN, ARCA y SII endurecieron validaciones — un error en l10n anula la deducibilidad de toda la cadena.
  • El checklist cubre 10 bloques: stack, localización, código custom, datos, performance, cron, integraciones, seguridad, backups, equipo.
  • Una auditoría externa cuesta USD 1,500-5,000. El costo de no hacerla, en promedio, es USD 30,000-80,000 al año en multas, deducibilidad perdida y reprocesos.
  • En ~7% de los casos el resultado es «no se salva, hay que migrar». También es un resultado: ahorra 6 meses de presupuesto.
!
Lo que no es una auditoría. Si tu partner te ofrece «revisión gratuita» con cotización adjunta, eso es un diagnóstico comercial, no una auditoría. La diferencia: una auditoría real entrega un PDF con SQL queries reproducibles, severidad por punto y la fecha exacta de cada hallazgo. No incluye estimación de horas para arreglarlo. Eso viene después, y puede hacerlo cualquiera.

Por qué 2026 es el año de las auditorías Odoo en LATAM

Cada regulador de la región endureció la disciplina fiscal al mismo tiempo. Odoo, como ERP multi-país, quedó en el centro del impacto — no por mala arquitectura, sino porque el 80% de las implementaciones LATAM se hicieron rápido, a través de partners Gold o Silver con cobro por hora, y por eso sin incentivo para cerrar el proyecto del todo.

Perú (SUNAT). SIRE — Sistema Integrado de Registros Electrónicos — es obligatorio para todos los contribuyentes del régimen general. Los libros de compras y ventas se generan automáticamente desde la factura electrónica; ya no se acepta PLE manual. La inconsistencia entre SIRE y factura se sanciona por código 175.1 del Código Tributario: piso de 50% UIT (S/. 2,675 con UIT 2026 = S/. 5,350), techo de 0.6% de ingresos anuales. La GRE — Guía de Remisión Electrónica — es obligatoria para traslados incluso si la PYME factura menos de S/. 300,000.

México (SAT). CFDI 4.0 y Carta Porte 3.1 se validan en tiempo real vía PAC. El regulador cruza CFDI contra DIOT y contabilidad electrónica. La multa por inconsistencia, según Art. 83 + 84 CFF, llega a MXN 134,840 por documento defectuoso. Una Carta Porte con RFC del receptor incorrecto anula la deducibilidad del comprador.

Colombia (DIAN). La nómina electrónica es obligatoria para todos los empleadores desde 2024en 2026 DIAN cruza nómina contra PILA — el desfase anula la deducibilidad de salarios en el impuesto de renta. El documento equivalente electrónico aplica a todos los pequeños proveedores desde julio 2024; las validaciones se reforzaron.

Argentina (ARCA). Desde octubre 2024 AFIP pasó a ser Agencia de Recaudación y Control Aduanero. Monotributo y Régimen General están unificados en el portal ARCA, y la Factura Electrónica con QR (RG 5616/2024) es obligatoria para todos. Las configuraciones viejas de Odoo con webservices wsfev1 y wsfex siguen funcionando, pero los endpoints se movieron — decenas de PYME lo descubrieron tarde durante el primer trimestre de 2026.

Chile (SII). El DTE — Documento Tributario Electrónico — existe desde hace años; la Boleta Electrónica con QR rige desde 2022En 2026 se sumaron validaciones para Factura de Compra en régimen de agente retenedor. l10n_cl en versiones 16 y 17 sin parches backport recibe rechazo XML.

Versión Odoo. Odoo 18 es el release estable actual (octubre 2024). OCA y Odoo S.A. soportan las 3 versiones anteriores. Si seguís en Odoo 15 en 2026, estás fuera del corredor de soporte: los parches l10n para los nuevos requisitos salen primero en master y rara vez en backport.

El checklist · 50 puntos en 10 bloques

Cada punto tiene severidad: 🔴 must-fix, 🟡 should, 🟢 nice-to-have. La regla práctica: una auditoría que entrega menos de tres 🔴 en una PYME LATAM de más de un año probablemente miró superficialmente. Si entrega más de diez, el roadmap de remediation conviene escalonarlo a 3-6 meses, no a 3-6 semanas.

#1. Stack y versión (5 puntos)

  1. 🔴 Versión Odoo en N o N-1. Si seguís en Odoo ≤ 15 en 2026, estás fuera de soporte. El upgrade-path arranca en USD 8,000 para una PYME con base de 5-20 GB.
  2. 🟡 Postgres ≥ 14. Postgres 12 quedó EOL en noviembre 2024. Sin security patches.
  3. 🟡 Python 3.10+ para Odoo 17/18. Cero tolerancia a 2.7 o 3.6.
  4. 🟡 Reverse proxy con TLS 1.3. nginx o traefik. Apache 2.2 es versión de hace 12 años y sigue apareciendo en producción.
  5. 🟢 Contenedorización o monitoreo real. Docker Compose, k8s o systemd unit con journald. nohup ./odoo-bin & en una EC2 aparece más seguido de lo que parece.

#2. Localización l10n_* (8 puntos)

  1. 🔴 l10n_pel10n_mx_edil10n_col10n_ar_edil10n_cl_edi instalado y activo por compañía. Muchas veces el módulo está instalado pero no activado en la compañía concreta.
  2. 🔴 Certificados PSE / PAC / firmante vigentes. En Colombia duran 2 años, en Chile 3, en Perú el certificado digital SUNAT dura 2.
  3. 🔴 Endpoints del regulador en producción, no sandbox. Aparecen instalaciones de producción apuntando a URLs demo.
  4. 🔴 Catálogos de impuestos (account.tax) actualizados. IGV PE 18%, IVA CO 19%, IVA AR 21%, IVA MX 16%, IVA CL 19% — la configuración debe coincidir con las resoluciones 2026.
  5. 🟡 Hooks SUNAT/SAT/DIAN/ARCA sin parches manuales. Si el consultor editó account_edi directo en addons/ en vez de hacer override-módulo, cada upgrade rompe la integración.
  6. 🟡 GRE / Carta Porte / Remisión configuradas. No todas las PYME saben que GRE en Perú aplica incluso a movimientos intra-empresa.
  7. 🟡 Libros (PLE para PE, DIOT para MX, IIBB jurisdicción para AR) se generan automáticamente. Si PLE se exporta a Excel y después se edita a mano, es bandera roja.
  8. 🟢 Extensiones OCA l10n_* para documentos específicos (nota crédito vs nota débito, factura agregada, retenciones).

#3. Código custom (5 puntos)

  1. 🔴 Inventario de módulos custom. ¿Cuántos módulos viven en custom/El 60% de las PYME tiene más de 8.
  2. 🔴 Cobertura mínima de smoke-tests. Si tests/ está vacío, cada deploy es lotería.
  3. 🟡 Módulos que duplican funcionalidad nativa, marcados para borrar. Un custom sale_extension que agrega 3 campos está bien. Un CRM custom entero en vez del nativo, hay que reescribirlo.
  4. 🟡 __manifest__.py con depends y version correctos. Si un módulo lleva 4 años con version: '1.0', el versionado no está funcionando.
  5. 🟢 Git history con mensajes legibles. Mínimo para que git blame sirva.

#4. Calidad de datos (6 puntos)

  1. 🔴 Duplicados en res.partner por RUC / RFC / NIT / CUIT. Típicamente 8-15% de los registros.
  2. 🔴 Productos sin bom_id en producción, o con BoM viejo. Si MRP está activo y la BoM no se revisó en un año, el costeo miente.
  3. 🟡 Asientos sin contrapartida. Query de control: SELECT COUNT(*) FROM account_move WHERE state='posted' AND id NOT IN (SELECT move_id FROM account_move_line); — debe dar 0.
  4. 🟡 product.product sin default_code por encima del 10%: la identificación de stock cojea.
  5. 🟡 Stock negativo en productos físicos — bypass de workflow.
  6. 🟢 Campos notedescription sin lógica de negocio en texto libre. «No despachar antes del 15» en un comentario al pedido es un proceso disfrazado de nota.

#5. Performance (5 puntos)

  1. 🔴 Top-20 de queries lentas analizado con pg_stat_statements. Si la extensión está apagada, prendela y recolectá datos por 7 días mínimo.
  2. 🟡 Índices en columnas FK. Odoo no siempre crea índice automático en m2o; en tablas grandes (stock_moveaccount_move_line) es crítico.
  3. 🟡 Workers / cron workers ajustados al tamaño de infra. Fórmula: workers = (CPU × 2) + 1cron_workers = max(2, CPU / 2).
  4. 🟡 limit_memory_hard y limit_time_real configurados. Los defaults de Odoo a veces son demasiado estrictos o demasiado laxos.
  5. 🟢 Redis para sesiones o cache dedicado si tenés más de 50 usuarios concurrentes.

#6. Cron jobs (4 puntos)

  1. 🔴 Cada cron activa con owner y descripción. Query: SELECT name, interval_number, interval_type, lastcall FROM ir_cron WHERE active=true; — cada fila debe ser explicable.
  2. 🟡 Cron sin ejecutarse hace más de 90 días, marcada para borrar.
  3. 🟡 Sin crons de intervalo < 10 minutos sin justificación de negocio. Polling cada minuto en 20 crons30% de CPU sin trabajo útil.
  4. 🟢 Logging de errores de cron a sistema externo (Sentry, Datadog o al menos un archivo con rotation).

#7. Integraciones (5 puntos)

  1. 🔴 Webhooks con retry (mínimo 3 reintentos) y dead-letter queue. Sin retry, Shopify → Odoo pierde pedidos en picos de tráfico.
  2. 🔴 Registro de API endpoints. No código: una tabla con qué llama a qué, autenticación, owner y SLA.
  3. 🟡 Idempotencia. Un webhook reenviado con el mismo ID no debe crear un pedido duplicado.
  4. 🟡 API keys / OAuth tokens en encrypted secrets, no en ir.config_parameter plain text.
  5. 🟢 Monitoreo de latencia de integraciones. Si ContPaq, Siigo, MercadoLibre o Tiendanube tarda, te avisa el monitoreo, no el usuario.

#8. Seguridad (6 puntos)

  1. 🔴 Sin cuenta admin compartida. Cada empleado, un usuario propio con permisos por rol.
  2. 🔴 2FA activo para admin y roles financieros.
  3. 🔴 Filestore no accesible público. La URL directa /web/content/... debe requerir auth.
  4. 🟡 Rate-limit en /web/login y endpoints de API. Odoo nativo no lo tiene — se configura en nginx.
  5. 🟡 Audit log en modelos críticos (res.usersaccount.taxaccount.move posted) vía mail.tracking u OCA auditlog.
  6. 🟢 Revisión de permisos trimestral.

#9. Backups y DR (4 puntos)

  1. 🔴 Backup de Postgres + filestore, diario, off-site. Si el backup vive en el mismo servidor, no es backup.
  2. 🔴 RTO probado. No «tenemos backups», sino «ayer restauramos la base en 2.5 horas».
  3. 🟡 Retention policy documentada. 7 / 30 / 365 días — cada empresa decide consciente.
  4. 🟢 Disaster recovery plan en una página. Quién llama a quién, en qué orden, cuál es el primer paso.

#10. Equipo y procesos (2 puntos)

  1. 🔴 Bus factor > 1. Si una sola persona sabe deployar o conoce el código custom, no es riesgo, es inevitabilidad.
  2. 🟡 Documentación de los top-10 procesos. No describir cada botón — describir «cómo hacemos el cierre de mes» en 1-2 páginas.

Cinco errores que repite cada PYME

Los hallazgos cambian de empresa en empresa, pero hay un núcleo duro de cinco errores que aparecen en una de cada dos auditorías. Los listo con consecuencia concreta — sin la consecuencia, todo «es importante»; con la consecuencia, se prioriza.

Error 1. Módulos custom encima de account_edi sin patrón override. El consultor edita el XML template dentro de addons/l10n_pe_edi/ directamente. En el siguiente git pull o upgrade, los cambios se pierden y la factura sale con estructura por defecto. Consecuencia: 6 meses de rechazos silenciosos y multa SUNAT en el quarterly check por decenas de miles de soles. Se cura con el patrón «mi módulo hereda y sobreescribe», como Odoo lo pensó.

Error 2. pg_stat_statements apagado. PYME con base de 40 GB y 80 usuarios concurrentes. El POS lagea los sábados. Nadie sabe por qué. Activamos la extensión, en 3 días vemos: un reporte custom hace full table scan en account_move_line (12M filas) cada 15 minutos. La solución es un índice. El costo previo al diagnóstico: 8 horas de equipo cada sábado, por 6 meses.

Error 3. Cron jobs heredados de consultores ya fuera. En ir_cron hay 17 tareas activas. 11 apuntan a código en custom/-módulos borrados o inactivos. Cada una loguea error cada 5 minutos. Los logs crecen a 8 GB/día, el disco se llena, Odoo cae. Desactivarlas: 30 minutos. Nadie lo hacía, porque «y si era importante».

Error 4. Certificado PSE / PAC vencido, nadie avisado. En Colombia el certificado DIAN venció un sábado. Hasta el lunes contabilidad no se enteró. Lunes 09:00: todas las facturas rechazadas, el e-commerce frena la emisión. Por resolución DIAN, falla de registro de 5 días hábiles arranca en 1 SMMLV (~ COP 1,420,000 en 2026) y suma la pérdida de clientes B2B. Cura: calendario de certificados en Google Calendar + monitoreo de expiration.

Error 5. Backups en /opt/backups/ de la misma máquina. PYME con Odoo de 3 años30 GB de Postgres. El contenedor crashea, el disco se corrompe, el sysadmin restaura — los backups estaban en el mismo volumen. Recuperan desde un backup de 14 meses en el laptop de la contadora. Hueco: un año de transacciones. Off-site vía S3 o rsync.net cuesta USD 40 al mes.

«El partner instaló el ERP. Le pagamos por hora durante 18 meses. Cuando pedimos la auditoría, el primer hallazgo fue que el partner había sido la fuente de 9 de los 14 must-fix.»
i
Quién paga la auditoría. El conflicto de interés es obvio: si la audita el mismo partner que la implementó, el reporte tiende a ser corto. La cura no es buscar otro partner igual de comercial, sino contratar a alguien que no quiera ganar el proyecto de remediation. Auditoría externa fixed-fee elimina el incentivo. Si después el remediation lo hace tu partner actual, perfecto — pero la foto la sacó alguien externo.

Caso anónimo: retail en Colombia, 6 puntos, Odoo 16 → auditoría → estabilidad

Caso anonimizado de comienzos de 2026: cadena de retail de ropa, 6 puntos físicos en Bogotá y Medellín, e-commerce en Shopify, Odoo 16 community con módulo custom de integración a Shopify y a DIAN vía PSE «X». Síntomas previos a la auditoría:

  • 11% de facturas rechazadas por DIAN con motivo «inconsistencia en NIT del adquirente».
  • Cierre de mes en 11 días hábiles (su norma: menos de 5).
  • POS que se congelaba en pago en horas pico.
  • Un dev freelance «sabe todo», el resto teme tocarlo.

Lo que apareció en 6 días hábiles de auditoría:

  • En res.partner había 14% de duplicados por NIT, incluido clientes con NIT 222222222222 «cliente genérico» — ese era el origen real de los rechazos DIAN.
  • El webhook custom de Shopify no tenía retry; perdían ~2% de pedidos en horas pico.
  • 9 cron jobs venían de una integración anterior con un PSE viejo; 3 intentaban llamar a un endpoint apagado.
  • account.tax del IVA para productos excluidos (libros, productos de primera necesidad) estaba mal configurado desde 2023.

Lo que se arregló en 6 semanas según el roadmap:

FrenteAcciónResultado a 8 semanas
DatosDeduplicación res.partner con OCA partner_deduplicateRechazo DIAN: 11% → 0.6%
IntegracionesWebhook retry + DLQ vía OCA queue_jobPérdida de pedidos: ~2% → 0%
CronDesactivar 9 crons huérfanos, audit log onLogs: 8 GB/día → 200 MB/día
ImpuestosActualizar account.tax según DIAN 2026Cierre de mes: 11 días → 4 días
EquipoPairing del dev freelance con dos juniorsBus factor: 1 → 3

Costo total auditoría + remediation: USD 7,200 (USD 1,800 auditoríaUSD 5,400 por 6 semanas a USD 900/semana). Costo evitado anual, estimado: USD 38,000 entre multas DIAN, pérdidas en e-commerce y reprocesos de equipo.

Descargar el checklist · qué viene después

El checklist completo de 50 puntos, con queries SQL para auto-revisar 30 de ellos, un template de reporte y una calculadora simple de ROI (avoided cost vs cost of audit) se envía por mail. Dejá el correo y llega el PDF. No es un newsletter con «artículos útiles» cada semana. Un archivo, máximo un follow-up a los 14 días.

Después del PDF tenés tres caminos posibles: arreglar con tu partner actual (con requisitos concretos sacados del reporte), arreglar con otro partner o un freelance, o migrar a otra plataforma. Los tres son válidos. La elección depende del score y del presupuesto restante. Si querés conversar el reporte una vez emitido, la página del servicio de auditoría tiene el formulario; también listo abajo materiales relacionados con cada decisión.

Preguntas frecuentes

¿Cuánto dura una auditoría?

5-10 días hábiles, siempre que el acceso a Postgres read-only y filestore se entreguen el día 1. Sin acceso, se estira.

¿La auditoría interrumpe la operación?

No. Todo lo que se lee es read-only. El ancho de banda contra Postgres es de máximo 5% sobre la carga normal.

¿Trabajo con un partner Gold — necesito auditoría independiente?

Si el partner cobra por hora y vende el «siguiente etapa», sí. Si está en contrato fixed-scope con phased payments y SLA escritos, probablemente no.

¿Puedo hacer la auditoría yo mismo con este checklist?

Sí, el 60% de los puntos se verifica con SQL y grepEl 40% restante requiere leer código custom y contexto de negocio. Una auditoría interna por un dev propio toma 40-60 horas; una externa, las mismas 40-60, pero sin sesgo.

¿Y si la conclusión es que el Odoo no se salva?

En ~7% de los casos el resultado es migración o reimplementación. Recibís un roadmap de migración (Odoo Enterprise vs SAP Business One vs Microsoft Dynamics 365 BC vs Defontana), estimación de costos y plan de cut-over. Sale más barato que seguir parchando.

¿La auditoría cubre Odoo Enterprise y Community?

Ambos. Enterprise agrega algunos módulos comerciales (Studio, Documents, Helpdesk Pro), pero arquitectónicamente la auditoría es idéntica.

¿Y con Odoo SaaS (odoo.com hosted)?

En SaaS no hay acceso a Postgres y no se permite custom-code propio. La auditoría se limita a UI, configuración y exportaciones por XML-RPC. Formato reducido, alrededor de USD 800.

¿Qué pide el auditor el día 1?

Usuario Postgres read-only, acceso al filestore, listado de módulos en custom/ con su Git remote, credenciales sandbox del PAC/PSE, último reporte ir.cron y conversación de 30 minutos con quien hace el cierre de mes. Sin estos cinco insumos, los primeros dos días se gastan pidiéndolos.