Control de errores en Odoo con módulos de excepción de OCA
Con el ritmo acelerado de la jornada, es común que se cometan errores al registrar datos en Odoo, lo que puede generar incoherencias y afectar negativamente el funcionamiento de los procesos empresariales. Para prevenir este tipo de problemas, la Odoo Community Association (OCA) ha desarrollado una serie de módulos - sale_exception, purchase_exception, account_move_exception y stock_exception - que actúan como un sistema de alertas y bloqueos ante situaciones irregulares. Estos módulos permiten mantener la calidad de los datos y garantizar un mayor control en las operaciones críticas del sistema.
¿Qué son los módulos de excepción en Odoo?
Los módulos de excepción permiten automatizar el control de errores en procesos clave de Odoo. Su objetivo es detectar automáticamente condiciones no deseadas —por ejemplo, precios fuera de rango o datos incompletos— y bloquear el documento afectado hasta que éste se corrija.
Estos módulos actúan sobre los modelos de datos de Odoo, que representan documentos como pedidos, facturas o albaranes. Un modelo agrupa los campos y reglas necesarias para cada tipo de documento. Las excepciones permiten validar estos modelos mediante reglas configurables que pueden definirse con condiciones simples (dominios) o a través de código Python.
Módulos de excepción disponibles en Odoo
Atendiendo a esta definición de modelos, encontramos la herramienta de excepciones para los siguientes documentos clave:
- Pedido de venta (sale.order)
➤ sale_exception: Reglas para validar condiciones en pedidos de venta. Pedido de compra (purchase.order)
➤ purchase_exception: Verifica condiciones en pedidos de compra.Asiento contable (account.move)
➤ account_move_exception: Controla excepciones en los asientos contables.Movimientos de inventario (stock.picking)
➤ stock_exception: Evalúa reglas en transferencias de stock y operaciones logísticas.
Todos ellos dependen del módulo base base_exception, que proporciona un modelo abstracto para gestionar las excepciones que se aplicarán en los diferentes modelos, recuerda añadirlo en tu repositorio.
Funcionalidades destacadas
Validación automática de reglas
Condiciones configurables mediante dominios o Python
Alertas visuales y bloqueo de documentos
Integración con los flujos operativos de Odoo
Creación de una regla de excepción en Odoo (guía práctica)
- Instala los módulos correspondientes.
Asigna el permiso "Administrador de excepciones" a tu usuario.
Accede a Configuración > Reglas de excepción dentro del módulo (Ventas, Compras, Contabilidad o Inventario).
- Crea una nueva regla indicando:
- Nombre de la excepción: Título identificativo de la regla.
- Descripción: Motivo de la excepción para el usuario.
- Aplicar en: Modelo afectado (sale.order, account.move...)
- Tipo de Excepción:
- Por dominio.
- Por código Python.
- Por método (sólo disponible en base_exception, aún no integrado completamente en los demás)
- Está bloqueado: Si se marca, la regla bloqueará el flujo hasta corregir el error.

Ejemplos prácticos de uso por módulo
A continuación mostraremos diferentes casos de uso en cada uno de los modelos para los tipos de excepción más empleados: por dominio y por código phyton. Por método, esta opción viene dada por el módulo base, pero todavía no está integrada en el resto de módulos.
sale_exception - Excepciones en pedidos de venta
Configura la regla de excepción por dominio para controlar precios negativos en ventas
- Accede a Ventas > Configuración > Pedidos de venta > Reglas de excepciones para ventas.
- Regla: Bloquear pedidos con líneas cuyo precio unitario sea igual o inferior a 0.
- Modelo: Pedido de venta (sale.order.line)
- Dominio:
- Líneas del pedido > Precio unitario "<=" 0
[("order_line.price_unit", "<=", 0)]
- Líneas del pedido > Precio unitario "<=" 0
- Está Bloqueado: ✔
- Resultado: Impide confirmar pedidos que tengan productos gratuitos sin aplicar descuento.

Resultado de la excepción para el control de errores en ventas
Cuando un usuario intente confirmar un pedido de venta con líneas cuyo precio unitario sea igual a 0, Odoo mostrará automáticamente una ventana emergente de advertencia indicando la excepción.
Si la opción "Está bloqueado" está activada en la configuración de la regla, el pedido se mantendrá en estado "Presupuesto" y no podrá ser confirmado hasta que se corrija la línea afectada.
En caso de que esta opción no esté activada, la advertencia funcionará como un aviso informativo, permitiendo continuar con la validación si el usuario así lo decide. Esta flexibilidad permite adaptar el sistema a distintos escenarios comerciales, como promociones o productos gratuitos planificados.

purchase_exception - Excepciones en pedidos de compra
Configura la excepción directamente con código Phyton para controlar cantidades a cero en compras
- Accede a Compras > Configuración > Reglas de excepciones de compra.
- Regla: Bloquear pedidos con líneas cuyo precio unitario sea igual o inferior a 0.
- Modelo: Línea de pedido de compra (purchase.order.line)
- Código Python:
if self.product_qty < 0:
failed=True
- Está bloqueado: ✔
- Resultado: Impide confirmar pedidos de compra con cantidades negativas.

stock_exception - Excepciones en movimientos de stock
Configura la excepción directamente editando el código del dominio para evitar el uso de productos archivados en la validación de albaranes
- Accede a Inventario > Configuración > Reglas de excepciones.
- Regla: Bloquear movimientos de stock de productos que se encuentren archivados.
- Modelo: Transferencia de mercancía (stock.move)
- Dominio:
- Producto > Activo "no es" establecido
[("product_id.active", "!=", True)]
- Producto > Activo "no es" establecido
- Está bloqueado: ✔
- Resultado: A la validación del movimiento de stock, bloquea el albarán en caso de que el producto se encuentre inactivo.
📌 Activa el modo desarrollador para editar directamente sobre el código del dominio.

account_move_exception - Excepciones en asientos contables
Configura la excepción a través de código para evitar falta de información en la ficha del contacto antes de validar una factura
Accede a Inventario > Configuración > Excepciones > Normas de excepción en cuentas.
- Regla: Bloquear pedidos con líneas cuyo precio unitario sea igual o inferior a 0.
- Modelo: Línea de pedido de compra (purchase.order.line)
- Código Python:
if self.product_qty < 0:
failed=True - Está bloqueado: No
- Resultado: A la confirmación de la factura, genera un aviso en caso de no tener el vendedor el correo electrónico registrado.

Conclusión
Los módulos de excepción de la OCA son una solución para empresas que buscan automatizar la validación de datos en Odoo y asegurar su coherencia los procesos críticos. Estas herramientas permiten detectar errores antes de que impacten en el negocio, bloqueando documentos con inconsistencias y manteniendo la calidad operativa en ventas, compras, inventario y contabilidad.
Adoptar estas reglas te permitirá reducir errores manuales, mejorar la productividad de los equipos y garantizar decisiones basadas en información fiable. Además, su configuración flexible mediante edición de dominio y código Python lo hace apto para diferentes necesidades empresariales.