Archyno
BPMNReferencia de notación

Las compuertas de BPMN

Rombos, y la marca dentro de cada uno. Una compuerta nunca hace trabajo: solo decide cuántos de los caminos salientes llevan un testigo, que resulta ser de lo que va realmente toda discusión sobre un proceso.

14 min de lecturaBPMN 2.03 de 7

La respuesta corta

  • Una compuerta no hace ningún trabajo. Es lo único en BPMN que cambia cuántos tokens hay vivos, y todo lo demás se deriva de ahí.
  • La exclusiva toma exactamente un camino de salida, la paralela los toma todos sin condiciones, la inclusiva toma cada camino cuya condición sea cierta.
  • Una compuerta basada en eventos no decide nada: espera, y gana el primer evento que ocurre mientras los demás se descartan.
  • A cada divergencia le corresponde una convergencia del mismo tipo. Inclusiva que converge en paralela se bloquea; paralela que converge en exclusiva ejecuta dos veces todo lo que sigue.
Un proceso BPMN que usa compuertas. Tras un evento de inicio siniestro recibido, una compuerta paralela se divide en una tarea comprobar la póliza y una tarea comprobar el fraude. Una segunda compuerta paralela las une, y después una compuerta exclusiva etiquetada cubierto se divide en una tarea liquidar en la rama sí y una tarea rechazar en la rama no.
Dos tipos de compuerta. El más divide en caminos que se ejecutan todos, y el más correspondiente espera a ambos; la cruz elige exactamente una rama y después no hay nada que esperar.

01Una compuerta es una regla sobre tokens#

El modelo de ejecución de BPMN es un token que recorre el diagrama. La compuerta es lo único que cambia cuántos tokens hay: una división puede convertir un token en varios, una convergencia puede devolverlos a uno. Todo lo demás se sigue de ahí.

Una nota sobre el nombre. La especificación dice gateway; la mayoría dice compuerta o puerta y busca eso. Es lo mismo, y el rombo es el mismo rombo, pero en el título de un diagrama conviene gateway, porque es la palabra que leerán todas las herramientas BPMN y todos los revisores.

Dos consecuencias que conviene retener. Primera, una compuerta no hace ningún trabajo: evalúa condiciones ya calculadas, y si quieres comprobar algo, eso es una tarea antes de la compuerta. Segunda, una división suele necesitar una convergencia del mismo tipo, porque lo que creó tokens de más tiene que volver a unirlos o correrán por separado hasta el final.

02Los cinco tipos#

ElementoNotaciónQué significa
Exclusiva (XOR)rombo con una X, o vacíoSe toma exactamente un camino saliente. Las condiciones se evalúan en orden y gana la primera verdadera. La opción por defecto y la primera a la que recurrir.
Paralela (AND)rombo con un +Se toman todos los caminos salientes, sin condición alguna. Como convergencia, espera a cada camino entrante antes de continuar.
Inclusiva (OR)rombo con un círculoSe toma cada camino cuya condición sea verdadera: uno, varios o todos. Como convergencia espera exactamente a los caminos activados, lo que es más listo de lo que suena y de donde vienen los bloqueos.
Basada en eventospentágono en doble círculoNo decide: espera. Se toma el camino cuyo evento ocurre primero y los demás se descartan.
Complejarombo con un asteriscoUna salida de emergencia para reglas que las otras cuatro no expresan: «continuar cuando estén tres de las cinco aprobaciones». Rara, y normalmente señal de que el proceso pide reestructurarse.

03Dividir, converger y unir#

El mismo símbolo hace ambos trabajos, y cuál está haciendo depende solo de si tiene más flujos salientes o entrantes. Una compuerta con una entrada y tres salidas divide; tres dentro y una fuera converge.

Conviene fijar el vocabulario, porque para el caso convergente se usan tres palabras. Una compuerta paralela convergente es una unión: espera a cada rama. Una compuerta exclusiva convergente es una fusión: no espera nada y deja pasar cada token. Ambas se dibujan como el mismo rombo que al dividir, y llamar unión a una fusión es como un diagrama acaba afirmando terminado un trabajo que nunca se ejecutó.

ElementoNotaciónQué significa
Fusión exclusivavarias dentro, una fueraDeja pasar cada token en cuanto llega. No espera, porque de todos modos solo se tomó una rama.
Unión paralela (AND-join)varias dentro, una fueraEspera a cada camino entrante y luego emite un token. Esta es la que bloquea, y debería bloquear a propósito. Es la construcción que en BPMN suele designarse con join.
Fusión inclusivavarias dentro, una fueraEspera exactamente a las ramas activadas aguas arriba. Exige que el motor razone sobre todo el proceso, y es la construcción cuyo comportamiento más varía entre herramientas.
Compuerta mixtavarias dentro, varias fueraLegal. Ilegible. Divide con una compuerta y converge con otra, y el diagrama te dirá solo lo que hace.

04Contar tokens en el diagrama de arriba#

Todo lo anterior es una sola habilidad: pon el dedo en el evento de inicio y cuenta. Aquí está el proceso de siniestro del principio de esta página, recorrido paso a paso, con el número de tokens vivos tras cada uno.

  1. Ocurre «Claim received». Un token. Está en el flujo hacia la primera compuerta.
  2. La división paralela. Dos tokens. No se evalúa ninguna condición y no se elige nada: una división paralela emite siempre un token por flujo saliente.
  3. La comprobación de póliza y la de fraude se ejecutan. Siguen dos. Son realmente concurrentes: el diagrama no afirma nada sobre cuál termina antes, y no lo necesita.
  4. La unión paralela. De vuelta a uno. El token que llegue primero espera ahí. Cuando llega el segundo, la unión consume ambos y emite uno.
  5. «Covered?» Un token, una rama. Una compuerta exclusiva nunca cambia la cuenta: solo cambia en qué flujo está el token.
  6. Indemnizar o rechazar, luego el fin. Cero. La instancia del proceso termina cuando el último token lo consume un evento de fin.

Ahora rómpelo a propósito, porque los dos fallos clásicos se ven solo con la cuenta.

Haz exclusiva la primera compuerta y deja paralela la unión. La división emite ahora un token, así que se ejecuta una comprobación. La unión paralela sigue esperando dos. Por el segundo flujo no llega nada nunca, y el siniestro se queda en la unión durante toda la vida del sistema. Ese es el interbloqueo, y costó una marca cambiada.

Deja paralela la división y haz exclusiva la unión. Llegan dos tokens y una fusión exclusiva no espera nada, así que ambos pasan directos. «Covered?» se evalúa dos veces, la tarea de indemnizar se ejecuta dos veces y al cliente se le paga dos veces. Esto es peor que el interbloqueo, porque un interbloqueo se anuncia solo y un pago doble no.

05La compuerta basada en eventos#

Una compuerta basada en eventos. Tras una tarea solicitar documentos, una compuerta basada en eventos lleva a dos eventos receptores: un evento de mensaje documentos recibidos y un temporizador de catorce días. El camino del mensaje continúa hacia una tarea valorar el siniestro; el del temporizador, hacia una tarea cerrar como incompleto.
Aquí no se decide nada. La compuerta espera, los dos eventos compiten y el que ocurre primero toma su camino mientras el otro se descarta.

Esta es la construcción que hace expresable en una sola imagen «esperamos los documentos, pero no eternamente». Cualquier otra forma de dibujarlo -un evento temporizador de borde en una tarea de espera, un bucle con condición- o duplica la lógica del vencimiento o la esconde.

La acompañan dos reglas. Los destinos de una compuerta basada en eventos deben ser eventos intermedios de captura o tareas receive, nunca tareas simples: la compuerta es una carrera entre cosas que llegan, y una tarea no llega. Y las ramas deben ser realmente excluyentes en el tiempo, cosa que son automáticamente: la primera en ocurrir descarta el resto.

06Condiciones y flujos por defecto#

Las condiciones viven en los flujos de secuencia salientes, no en la compuerta. Escríbelas como expresiones cortas que un lector pueda evaluar - amount > 10000, policy status = active - y ponlas en la línea cerca de la compuerta y no cerca del destino.

Exactamente una rama de una compuerta divergente debería ser el flujo por defecto, dibujado con una pequeña marca cruzando su base. Se toma cuando ninguna otra condición se cumple, y es lo que evita que un proceso se atasque en una compuerta donde los datos resultaron ser algo que nadie previó.

Úsalo cuando

  • Exclusiva cuando aplica precisamente un camino, que es casi siempre
  • Paralela cuando ambos caminos deben ejecutarse y ninguno depende del otro
  • Basada en eventos cuando el proceso espera y decide algo externo
  • Un flujo por defecto en cada compuerta divergente exclusiva o inclusiva

Usa otra cosa cuando

  • Inclusiva donde bastaría la exclusiva: cuesta claridad y añade riesgo de interbloqueo
  • Compleja, casi siempre: reestructura en su lugar
  • Una compuerta justo detrás de otra sin nada en medio
  • Condiciones escritas como párrafos de prosa en la etiqueta del flujo

07Cuando la respuesta no es una compuerta en absoluto#

Quien acaba de aprender compuertas recurre a ellas para cada bifurcación del mundo, y el resultado es un diagrama que es 40 % rombo. Otras cuatro construcciones de BPMN expresan mejor una decisión en los casos siguientes, y conocerlas es la mayor parte de la diferencia entre un modelo de proceso que cabe en una página y otro que no.

ElementoNotaciónQué significa
Flujo de secuencia condicionalun rombo pequeño en el arranque del flujoUna condición escrita directamente en un flujo que sale de una tarea, sin compuerta. Correcto para un paso opcional -«enviar un recibo si el cliente lo pidió»- e incorrecto en cuanto hay dos, porque no hay dónde poner un flujo por defecto y nada impide que se disparen ambos.
Evento de bordeun círculo en el borde de una tareaPara algo que interrumpe un trabajo ya en marcha: un vencimiento, un error, una cancelación. Una compuerta solo puede hacer su pregunta entre dos tareas, así que modelar «si esto falla a medias» con una significa inventar un bucle de sondeo que no existe.
Subproceso de eventoun rectángulo redondeado punteadoPara algo que puede ocurrir en cualquier punto del proceso y no en un lugar conocido: el cliente cancela, el regulador pide el expediente. Dibujar eso con compuertas significa una compuerta detrás de cada tarea.
Tarea de regla de negociouna tarea con marcador de tablaCuando la decisión son cuarenta reglas en vez de una pregunta. Una tarea que apunta a una tabla de decisión dice «esto lo deciden las reglas de precios» y deja las reglas donde se pueden cambiar sin redibujar el proceso.

Cuatro maneras de expresar una decisión que no son un rombo. Cada una mantiene fuera del diagrama algo que una compuerta habría arrastrado a él.

La prueba es si la bifurcación es parte del proceso o parte de una decisión. Un siniestro que va a vía rápida o a revisión manual es proceso: los dos caminos se ven distintos y el lector necesita ver ambos. En cuál de nueve bandas de riesgo cae es una decisión: los caminos después son idénticos, y ponerlo en el diagrama cuesta ocho rombos para decir una cosa. Mira cómo dibujar un diagrama BPMN para ver dónde suele caer esa línea en la práctica.

08Errores comunes#

  1. División paralela, fusión exclusiva. La división hizo dos tokens; la fusión exclusiva deja pasar ambos, y todo lo que va después ocurre dos veces.
  2. División inclusiva, unión paralela. El interbloqueo de arriba. Haz coincidir tus compuertas.
  3. Trabajo dentro de la compuerta. Un rombo etiquetado «Validar y enrutar» es una tarea y una compuerta bajo un mismo contorno. Sepáralas.
  4. Ramas sin etiquetar. Dos líneas saliendo de un rombo sin nada escrito obligan al lector a adivinar, y la mitad adivinará mal.
  5. Sin flujo por defecto. Llega la única entrada en la que nadie pensó y el token no tiene adónde ir.
  6. Tareas simples tras una compuerta basada en eventos. No es legal, y normalmente significa que se quería una compuerta exclusiva.

Las compuertas y los eventos son las dos mitades del control de flujo en BPMN: las compuertas deciden, los eventos esperan e interrumpen. Un proceso modelado solo con compuertas tiende a crecer en largas cadenas de sondeo; el que usa eventos de borde donde debe se queda mucho más cerca de lo que de verdad ocurre.

En una línea cada uno

  1. 01Una compuerta cambia cuántos tokens existen y no hace trabajo propio.
  2. 02Exclusiva toma un camino, paralela los toma todos, inclusiva toma los verdaderos.
  3. 03La compuerta basada en eventos no decide: hace competir eventos de captura.
  4. 04Empareja cada división con una convergencia del mismo tipo.
  5. 05División inclusiva hacia una unión paralela es el interbloqueo clásico.
  6. 06Nombra la compuerta como una pregunta y etiqueta cada rama con una respuesta.

09Preguntas frecuentes#

¿Qué diferencia hay entre una compuerta exclusiva y una inclusiva?

Una compuerta exclusiva, marcada con una X, toma exactamente un camino saliente. Una inclusiva, marcada con un círculo, evalúa todas las condiciones salientes y toma todas las que sean ciertas, que pueden ser una, varias o todas.

¿Qué hace una compuerta paralela?

Una compuerta paralela, marcada con un más, toma todos los caminos salientes sin condiciones, porque no tiene ninguna que evaluar. Usada como fusión espera un testigo en cada camino entrante antes de continuar, que es como se modela cuando todas las ramas han terminado.

¿Qué es una compuerta basada en eventos?

Una compuerta cuyos caminos salientes empiezan cada uno con un evento intermedio de captura, donde el primer evento en ocurrir decide qué camino se toma. Es como se modela una carrera, por ejemplo una respuesta o un tiempo agotado, lo que llegue antes.

¿Por qué se bloquea una compuerta inclusiva?

Porque una fusión inclusiva espera exactamente las ramas que activó su división emparejada, y solo puede saber cuáles fueron si las dos están bien emparejadas. Divide con una compuerta inclusiva y fusiona con una paralela, y la fusión esperará para siempre una rama que nunca corrió.

¿Hacen algún trabajo las compuertas de BPMN?

No. Una compuerta solo enruta testigos: nunca ejecuta una actividad ni consume tiempo. Lo que una compuerta parece decidir lo calculó la actividad anterior, y las condiciones de los flujos salientes solo leen ese resultado.

En esta serie

Lecturas relacionadas

Todos los artículos