Automatiza validaciones en Odoo con los módulos de excepción de la OCA
Mejora la calidad de tus procesos empresariales controlando errores en ventas, compras, contabilidad e inventario mediante reglas de excepción configurables en Odoo.
22 julio, 2025 por
Automatiza validaciones en Odoo con los módulos de excepción de la OCA
Sara Castelló Molina



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_exceptionque 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)

  1. Instala los módulos correspondientes.
  2. Asigna el permiso "Administrador de excepciones" a tu usuario.

  3. Accede a Configuración > Reglas de excepción dentro del módulo (Ventas, Compras, Contabilidad o Inventario).

  4. Crea una nueva regla indicando:
    • Nombre de la excepción: Título identificativo de la regla.
    • Descripción: M​otivo 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)
  5. 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)]
  • 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)]
  • 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.