Módulo para Odoo

StateFlow

Cada cambio de estado, bajo control. Sin escribir código.

Define qué cambios de estado están permitidos en cualquier modelo de Odoo, qué debe cumplirse antes de hacerlos y qué ocurre después. Lo configuras desde la interfaz y se aplica en el servidor: da igual que el cambio venga de un botón, de una importación, de la API o de otro módulo.

Precio240 €Pago único · impuestos no incluidos

Disponible para Odoo 16, en Community y Enterprise. La adaptación a nuevas versiones de Odoo está incluida durante 12 meses desde la compra.

4
momentos en cada transición: antes y después de salir y de entrar
6
tipos de validación que bloquean el cambio
10
tipos de acción automática tras el cambio
195
pruebas automáticas en verde antes de cada entrega

En movimiento

Así se ve un flujo con StateFlow

Las tarjetas, las flechas, el panel de reglas y el simulador, tal y como aparecen en Odoo: dibujas una transición, abres las reglas de un estado y compruebas un cambio antes de hacerlo.

Animación recreada a partir del módulo real. Las capturas de esta página están hechas en Odoo 16.

El problema

En Odoo, las reglas de un estado viven repartidas por el código

Que un pedido no se confirme sin fecha de entrega, que una baja exija un motivo o que al aprobar una tarea se avise al responsable suele acabar en un desarrollo: un método sobrescrito, una acción automática que no sabe de dónde viene el registro o un botón que valida lo que otra vía de entrada se salta.

  • Cada regla es un desarrollo

    Los campos obligatorios por estado, los permisos para avanzar o los avisos al cambiar de etapa se programan modelo a modelo. Cambiar una regla de negocio obliga a desplegar código.

  • El botón valida, la importación no

    Si la comprobación vive en el botón, una importación, una llamada a la API o un arrastre en el kanban la esquivan. El registro queda en un estado que nunca debió alcanzar.

  • Nadie sabe cuánto tarda cada fase

    El chatter cuenta que algo cambió, pero no cuánto tiempo pasó un registro en cada estado, quién lo movió ni por qué. Medir los cuellos de botella exige exportar y cruzar datos.

StateFlow reúne todo en un solo lugar: un flujo por modelo, configurado desde la interfaz, aplicado en un único punto del servidor y registrado transición a transición.

Cuatro momentos

Una transición tiene cuatro momentos, y puedes actuar en cada uno

Salir de un estado también tiene efectos propios, no solo entrar en el siguiente. Cada regla se engancha a uno de los cuatro momentos y se limita a una transición concreta (de Presupuesto a Confirmado) o a cualquier entrada o salida de un estado.

  1. 01

    Antes de salir

    Comprueba que el estado actual queda cerrado: por ejemplo, que no quedan actividades pendientes.

    Puede bloquear

  2. 02

    Antes de entrar

    Exige lo que el estado destino necesita: campos rellenos, una condición o un permiso.

    Puede bloquear

  3. 03

    Después de salir

    Recoge lo que deja el estado anterior: cancela o cierra las actividades que el flujo abrió en él.

    No bloquea

  4. 04

    Después de entrar

    Pone en marcha el estado nuevo: programa actividades, envía correos, escribe campos o avisa a otro sistema.

    No bloquea

Y un quinto, el plazo vencido: si un registro pasa más horas de las previstas en un estado, se ejecutan sus acciones una sola vez por estancia.

Qué puedes configurar

Validaciones que bloquean y acciones que trabajan por ti

Las validaciones van antes del cambio y, si una falla, la transición entera se deshace. Las acciones van después y nunca mueven el estado del registro que transita: así no hay bucles ni registros a medio camino.

Puede bloquear Validaciones

  • Campos obligatorios

    Lista de una vez todos los campos vacíos, no uno a uno.

  • Condición de dominio

    El registro debe cumplir un dominio de Odoo; el mensaje lo escribes tú.

  • Grupo

    Solo los miembros de unos grupos pueden hacer el cambio.

  • Sin actividades abiertas

    No se sale del estado con actividades pendientes de los tipos que elijas.

  • Registros hijos

    Todas las líneas o subtareas deben cumplir una condición; se indica cuántas fallan.

  • Código Python

    Para casos especiales, una expresión evaluada de forma segura. Solo la configuran administradores del sistema.

No bloquea Acciones

  • Programar actividad
  • Cancelar actividades
  • Marcar actividades como hechas
  • Publicar en el chatter
  • Enviar correo con plantilla
  • Añadir o quitar seguidores
  • Escribir campos
  • Ejecutar una acción de servidor
  • Llamar a un webhook
  • Solicitar otra transición

Destinatarios que siguen al equipo

Actividades, correos y seguidores aceptan usuarios, grupos, una ruta de campo (el comercial del pedido, el responsable del proyecto) o las filas de una relación filtrada. La configuración sigue valiendo cuando cambian las personas. Los textos pueden incluir el motivo, el estado de origen y el de destino.

Actividades propias del flujo

Cada actividad que crea una regla recuerda su origen. Al salir del estado, «cancelar las actividades de este estado» cierra solo esas, nunca las que alguien creó a mano.

Control de las transiciones

Solo se mueve lo que está permitido, por quien debe y con su porqué

Dibujas las transiciones permitidas y el motor rechaza el resto. Cada una puede exigir grupos y un motivo, y cuando algo falla el usuario recibe un único mensaje con todo lo que falta.

  • Modo estricto

    Con transiciones definidas, cualquier cambio no listado se rechaza. Sin transiciones, todos están permitidos y solo se aplican las reglas: así puedes adoptar el módulo poco a poco.

  • Grupos por transición

    Aprobar puede quedar reservado a Dirección mientras Ventas mueve el resto. El servidor lo exige aunque el cambio llegue por otra vía.

  • Motivo obligatorio

    Rechazar, cancelar o reabrir puede pedir un motivo. Se abre un diálogo, el cambio se repite con el motivo y este queda en el historial.

  • Un solo mensaje con todo

    Todos los campos que faltan, para todos los registros del lote, en un único aviso con la referencia de cada uno. Sin ir corrigiendo error a error.

Ilustración esquemática. No es una captura del producto.

Sin bucles

Solo el motor mueve estados

Una automatización que cambia el estado del registro que la disparó es la receta clásica de un bucle infinito o de un registro muerto. StateFlow lo impide en dos capas y ofrece una vía segura para encadenar.

  • Al guardar la configuración

    Una regla que escribiría el campo de estado se rechaza antes de guardarse, con un mensaje que explica por qué.

  • Durante la ejecución

    Mientras corren sus reglas, el registro queda marcado como «en transición». Si una acción de servidor intenta cambiar su estado, la operación se deshace con un error claro.

  • Encadenado controlado

    Para «cuando todas las subtareas estén hechas, cerrar la tarea padre» existe la acción Solicitar transición: deja la petición en cola y el motor la ejecuta al terminar, con todas sus validaciones y su propio registro en el historial.

  • Ciclos y profundidad

    Los cambios encadenados entre registros distintos se vigilan: si el mismo registro reaparece en la cadena o se supera la profundidad máxima (3 por defecto), se aborta.

Mapa del flujo

Ves el flujo entero, y lo editas sobre el propio mapa

Una tarjeta por estado y una flecha por transición, con los datos reales de tu base: cuántos registros hay ahora en cada estado y cuánto tiempo pasan en él de media.

  • Arrastra las tarjetas a su sitio, o deja que la distribución automática las ordene.
  • Crea una transición arrastrando de una tarjeta a otra; bórrala con confirmación.
  • Pulsa un estado o una flecha y, en el panel lateral, ves y editas sus reglas agrupadas por momento.
  • Las flechas indican si la transición pide motivo, tiene botón o lleva plazo; las reglas en segundo plano se distinguen a simple vista.
  • El recuento de cada tarjeta abre la lista con los registros que están en ese estado.
Captura del mapa de un flujo de prueba en Odoo 16: seis tarjetas de estado unidas por flechas con sus iconos, y el panel lateral con las reglas del estado Proposal agrupadas por momento.
Captura real del módulo en Odoo 16: el mapa de un flujo de prueba y, a la derecha, las reglas del estado seleccionado.

Simulador

Pregunta qué pasaría antes de mover nada

Eliges un registro real y un estado destino, y el simulador te dice si el cambio se haría o sería rechazado, qué validación falla y qué acciones se ejecutarían después. No escribe nada ni lanza ninguna acción. Pruébalo aquí con un pedido de ejemplo.

En el producto, el mapa resalta además el estado actual y el destino, en verde o en rojo según el resultado.

Pedido S00128 · estado actual: Presupuesto

Mover a

✕ Sería rechazado

Transición

  • Transición permitida en este flujo
  • Tienes el grupo Ventas / Responsable

Validaciones

  • Cliente informado
  • Completa Fecha de entrega antes de confirmar
  • Todas las líneas tienen producto

Se ejecutaría después

  • Nada
Ilustración esquemática. No es una captura del producto.
Captura del simulador en Odoo 16: el cambio de Proposal a Won se realizaría; el panel lista las comprobaciones de la transición, la validación y las acciones que se ejecutarían después.
Captura real del simulador en Odoo 16, sobre un registro de prueba.
Ilustración esquemática. No es una captura del producto.

Recorrido de un registro

El historial que el chatter no te da: quién, cuándo, por qué y cuánto tiempo

Cada transición deja una línea con origen, destino, usuario, fecha, motivo, resultado y las horas que el registro pasó en el estado anterior. El recorrido lo dibuja paso a paso y cuelga debajo los registros que se movieron a raíz de cada cambio.

  • Tiempo en cada estado, también en el actual, para encontrar los cuellos de botella sin exportar nada.
  • Cadena padre-hijo: ves qué cambio provocó otro, aunque sea en otro modelo.
  • Registro en bruto filtrable por flujo, modelo, usuario o resultado, para auditoría.
  • Respeta los permisos: las ramas de otros registros solo aparecen si puedes leerlos.

Automatización fiable

Tú decides qué pasa cuando una acción falla

No todas las acciones pesan lo mismo. Las que sostienen la coherencia de los datos deshacen el cambio si fallan; un aviso no crítico no debería impedirlo; una llamada a otro sistema merece reintentos.

Si la acción fallaQué ocurreCuándo usarlo
Deshacer (por defecto)Se revierte la transición completa.Acciones de las que dependen los datos.
Registrar y seguirEl cambio se mantiene; el error queda en el historial y en el chatter.Notificaciones no críticas.
En segundo planoSe ejecuta tras confirmar el cambio, con reintentos a los 5, 10, 20 y 40 minutos.Correos masivos, webhooks y llamadas externas.
  • Plazos por estado

    Indica cuántas horas puede pasar un registro en un estado. Al vencer, se ejecutan sus acciones una sola vez por estancia: un recordatorio, una escalada o un cambio solicitado.

  • Webhooks con protección

    Envía a otro sistema el modelo, el registro, los estados, el usuario y los campos que elijas. Se rechazan direcciones internas o privadas y no se siguen redirecciones.

  • Exportar e importar flujos

    Lleva un flujo de pruebas a producción, o de un cliente a otro, en un archivo. Lo que no se pueda resolver en el destino se informa y se omite, y el flujo llega archivado para revisarlo antes de activarlo.

  • Trabajos visibles y reintentables

    Cada acción en segundo plano tiene su ficha con intentos, último error y un botón para reintentarla. Nada falla en silencio.

Botones generados

Los botones del formulario salen de las propias transiciones

Pon un texto de botón a una transición y aparece en el formulario cuando el registro está en su estado de origen. El primero destaca; quien no tiene el grupo necesario no lo ve. Al pulsarlo, el cambio pasa por el mismo motor que cualquier otra vía.

Ilustración esquemática. No es una captura del producto.

Comparativa

Qué cambia frente a resolverlo con lo que trae Odoo

La comparación se hace con las herramientas que Odoo incluye de serie (etapas, acciones automáticas y desarrollo a medida), no con módulos concretos de terceros.

NecesidadOdoo de serieStateFlow
Limitar a qué estados se puede pasar desde cada unoProgramando el método o el botón de cada transición.Transiciones dibujadas en el mapa; el resto se rechaza en el servidor.
Campos obligatorios según el estado destinoRestricciones en Python o atributos en la vista (solo en pantalla).Validación declarativa que lista todo lo que falta, en cualquier vía de entrada.
Pedir un motivo al rechazar o cancelarUn asistente desarrollado para cada caso.Una casilla en la transición; el motivo queda en el historial.
Acciones al cambiar de estadoAcciones automáticas sin noción de origen y destino ni protección contra bucles.Cuatro momentos por transición, política de errores y anti-bucle.
Tiempo que pasa cada registro en cada estadoReconstruirlo a partir del chatter o de informes a medida.Guardado en cada transición, con medias por estado en el mapa.
Saber por qué no se puede mover un registroProbar y leer el error, o revisar el código.El simulador lo explica sin tocar el registro.
Avisar si un registro se queda paradoUna tarea programada escrita a mano.Plazo en horas en el propio estado, una ejecución por estancia.

Una regla que solo vive en un botón no es una regla

Si la comprobación está en la interfaz, una importación, la API o un arrastre en el kanban la esquivan. StateFlow se engancha a la escritura del modelo, el único punto por el que pasan todas.

Seguro por defecto

Mecanismos nativos de Odoo, sin servicios externos

  • Sin flujos, nada cambia

    Con el módulo instalado y sin flujos definidos, Odoo se comporta igual que antes. Un modelo sin flujo sale del motor de inmediato.

  • Un único punto de entrada

    Botones, importaciones, API, arrastres y otros módulos pasan por el mismo motor. También los estados calculados y almacenados, como la etapa de una tarea.

  • Nunca a medio camino

    Las validaciones y las acciones críticas corren en la misma transacción que el cambio. Si una falla, todo vuelve atrás, aunque quien llamó capture el error.

  • Lo delicado, solo para administradores

    El código Python, las expresiones, los webhooks y ejecutar como superusuario solo los configura un administrador del sistema, también al importar un flujo.

  • Sin clave ni servicio externo

    No requiere clave de activación ni conexión a ningún servicio. Los datos no salen de tu Odoo, salvo los webhooks que tú configures.

  • Diseñado para no ralentizar Odoo

    La configuración se guarda en caché y se invalida al cambiar un flujo. Un lote de registros ejecuta cada regla una vez por grupo, no una vez por registro. No publicamos mediciones.

Para quién es

Para quien responde de que los procesos se cumplan

  • Responsables de operaciones

    Ven dónde se acumulan los registros y cuánto tarda cada fase, y ajustan las reglas sin esperar a un desarrollo.

  • Integradores y consultores

    Entregan procesos cerrados y revisables, con flujos que se exportan de pruebas a producción y se reutilizan entre clientes.

  • Empresas con auditoría o certificación

    Necesitan demostrar quién aprobó qué, cuándo y con qué motivo, y que ningún registro se saltó un paso.

Casos de uso habituales

  • Que un pedido no se confirme sin cliente, fecha de entrega y plazo de pago.
  • Que solo Dirección apruebe compras por encima de un importe.
  • Que cancelar una oportunidad o una factura pida siempre un motivo.
  • Que una tarea no se cierre con subtareas abiertas, y que el proyecto avance cuando se cierren todas.
  • Que al aprobar una incidencia se cree una actividad para su responsable y se avise al cliente.
  • Que un presupuesto sin respuesta en 72 horas genere un recordatorio al comercial.

Qué incluye la compra

Condiciones de la compra

Qué recibes, durante cuánto tiempo y bajo qué condiciones.

Módulo
StateFlow completo: motor de transiciones, validaciones y acciones, mapa del flujo, simulador, recorrido e historial, botones generados, plazos, acciones en segundo plano y exportación e importación de flujos.
Versiones de Odoo
Odoo 16. Si tu empresa usa otra versión, indícalo en la solicitud y te diremos la fecha de disponibilidad antes de cobrar nada.
Ediciones y alojamiento
Desarrollado y probado sobre Odoo Community. Solo depende de los módulos base y mail, por lo que se instala igual en Enterprise, en Odoo.sh y en instalaciones propias. No es instalable en Odoo Online (SaaS estándar), porque Odoo no admite módulos de terceros en ese servicio.
Licencia
OPL-1 (Odoo Proprietary License v1.0): el código es legible y puedes adaptarlo para uso propio, pero no redistribuirlo.
Ámbito de la licencia
Una licencia por empresa. Incluye su base de datos de producción y todas sus bases de pruebas, preproducción y desarrollo, sin límite de usuarios ni de flujos. Un integrador necesita una licencia por cada cliente final.
Actualizaciones
Corrección de errores sin límite de tiempo para las versiones adquiridas. Mejoras, funciones nuevas y adaptación a nuevas versiones de Odoo, incluidas durante 12 meses desde la compra.
Soporte
Por correo electrónico, en español e inglés, durante 12 meses desde la compra. Primera respuesta en un máximo de 2 días laborables. Incluye ayuda con la instalación y con la configuración de tu primer flujo. No incluye desarrollos a medida: consulta nuestro servicio de desarrollo a medida.
Devolución
30 días, sin condiciones: si el módulo no encaja, se devuelve el importe íntegro. Si en esos 30 días aparece un conflicto con otro módulo, lo corregimos o te devolvemos el dinero.
Cómo se entrega
Tras tu solicitud, recibes por correo la factura y las instrucciones de pago. Una vez confirmado el pago, recibes el enlace de descarga del módulo y la guía de instalación en un día laborable como máximo.
Cómo se cobra
240 €, pago único, sin suscripción ni cuotas. Impuestos no incluidos: se aplican según tu país y tu régimen fiscal y se detallan en la factura.
Marca que firma
uKodeIT firma y vende el módulo.

Preguntas frecuentes

Preguntas habituales antes de instalarlo

¿Qué ocurre si instalo el módulo y no creo ningún flujo?

Nada. Odoo se comporta exactamente igual. Un modelo sin flujo no pasa por el motor, y un flujo sin transiciones definidas permite todos los cambios y solo aplica sus reglas.

¿En qué modelos funciona?

En cualquier modelo con un campo de estado de tipo selección (como state) o una relación a etapas (como stage_id). Se ha probado con pedidos de venta y con tareas de proyecto, además de un modelo de pruebas propio. Puedes tener varios flujos sobre un mismo modelo, separados por un dominio o por empresa.

¿Se puede eludir con una importación, la API o un arrastre en el kanban?

No. El motor se engancha a la creación y la escritura del modelo, por donde pasan todas esas vías. Lo único que queda fuera son las escrituras SQL directas, que no pasan por el ORM de Odoo.

¿Puede una acción provocar un bucle?

Una acción no puede cambiar el estado del registro que está transitando: se rechaza al guardar la regla y, si una acción de servidor lo intenta en ejecución, la operación se deshace. Los cambios encadenados en otros registros tienen detección de ciclos y una profundidad máxima configurable.

¿Quién puede configurar los flujos?

Los usuarios del grupo StateFlow / Administrador, que los administradores reciben al instalar. El mapa y el simulador están reservados a ese grupo. El código Python, las expresiones, los webhooks y ejecutar como superusuario exigen además ser administrador del sistema.

¿Funciona en Community, Enterprise, Odoo.sh y Odoo Online?

Sí en las tres primeras: se desarrolla y se prueba sobre Odoo Community y solo depende de los módulos base y mail. No se puede instalar en Odoo Online (SaaS estándar), porque Odoo no admite módulos de terceros en ese servicio.

¿Cómo afecta al rendimiento?

Si el modelo no tiene flujo o la escritura no toca el campo de estado, la salida es inmediata. La configuración se consulta en caché y los lotes agrupan los registros para ejecutar cada regla una vez por grupo. Las acciones pesadas pueden ir en segundo plano. No hay mediciones publicadas.

¿Qué pasa si una acción en segundo plano falla?

El cambio de estado ya está hecho y no se deshace. La acción se reintenta a los 5, 10, 20 y 40 minutos, hasta cinco intentos, y su ficha guarda cada error y un botón para reintentarla a mano.

¿Puede entrar en conflicto con otros módulos?

El módulo se engancha de forma genérica a la creación y la escritura de los modelos con flujo, y no podemos garantizar la compatibilidad con cualquier módulo de terceros. Nuestro compromiso es este: si en los primeros 30 días aparece un conflicto, lo corregimos o te devolvemos el dinero. Aun así, conviene probarlo primero en una copia de tu base de datos.

¿Necesita una clave de activación o conexión a un servicio externo?

No. El módulo funciona por completo dentro de tu Odoo. Solo sale información hacia fuera si tú configuras un webhook.

Compra

StateFlow para Odoo

240 €

Impuestos no incluidos: se aplican según tu país y tu régimen fiscal y se detallan en la factura.

Pago único. Una licencia por empresa, con sus bases de datos de producción y de pruebas. Devolución íntegra durante 30 días.

Déjanos tus datos y recibirás por correo la factura y las instrucciones de pago. Una vez confirmado el pago, te enviamos el enlace de descarga y la guía de instalación en un día laborable como máximo.

uKodeIT es un integrador independiente de Odoo y no es partner de Odoo S.A. Odoo es una marca de Odoo S.A.

Procesos que se cumplen, no que se recuerdan

Dibuja el flujo, compruébalo con el simulador y deja que el servidor haga cumplir cada transición, venga de donde venga.

240 €