Pasos, decisiones y esperas
El catálogo de los nodos de un workflow — condiciones, escrituras en el registro, notificaciones, correos, scripts, esperas, ciclos, paralelismo y uniones.
Esta página recorre todos los tipos de paso que se arrastran de la paleta Nodos al lienzo. Para cada uno: qué hace, qué se rellena y qué ocurre en la ejecución.
Antes de eso, una pieza que se repite en casi todos: el origen de un valor.
De dónde viene un valor
Siempre que un paso pide un valor — el lado derecho de una condición, lo que se escribe en un campo — la interfaz ofrece los mismos cuatro orígenes:
| Origen | Qué trae |
|---|---|
| Valor fijo | Un texto escrito a mano («Ganha», «25000»). |
| Campo del registro | Un campo del registro del que la ejecución trata. |
| Variable | Una de las variables del proceso. |
| Quien inició | Quien mandó arrancar el proceso — Usuario (el username) o Id del usuario. |
Por esto un proceso no necesita código para la mayor parte de lo que hace: las decisiones y las escrituras se componen con estas cuatro piezas.
Condición
Abre dos caminos a partir de una pregunta. Tiene siempre dos salidas fijas: Verdadero y Falso.

- Selecciona el paso y abre Condiciones en el botón ….
- Haz clic en Añadir condición.
- Elige el origen del lado izquierdo (normalmente Campo del registro), el campo, el operador y el lado derecho.
Los operadores son los mismos de los filtros y de las reglas de formato del resto de la plataforma:
| Operador | Significa |
|---|---|
eq / neq |
Igual a / distinto de |
gt / gte |
Mayor que / mayor o igual a |
lt / lte |
Menor que / menor o igual a |
contains |
Contiene el texto |
startsWith / endsWith |
Empieza por / acaba en |
isEmpty / isNotEmpty |
Está vacío / no está vacío |
«Todas tienen que cumplirse» — varias condiciones en el mismo paso se combinan con Y, nunca con O. Para un O, usa dos pasos de condición en cadena.
Sin ninguna condición, «sigue siempre por "Verdadero"» — útil mientras se diseña, peligroso si se queda así.
Escribir en el registro
Graba campos en el registro del que la ejecución trata. Es el paso que cierra el circuito: el proceso decidió, ahora la ficha del CRM tiene que reflejarlo.

- Abre Campos a escribir en el botón ….
- Haz clic en Añadir campo.
- Elige el Campo y el origen del valor.
En el ejemplo, el paso Marcar como Ganha escribe fase = "Ganha"
(valor fijo) y responsavel = Quien inició (el username de quien empezó el
proceso).
Nota
La escritura se hace «por el mismo GraphQL de la app, con la autorización de quien empezó». Es decir: los permisos cuentan. Si quien inició el proceso no puede alterar esa entidad, el paso falla — y falla bien, porque un proceso no es una puerta trasera a los permisos.
Un paso sin ningún campo «no hace nada» — la interfaz lo dice en vez de esconderlo.
Notificar
Manda una notificación dentro de la app — la campana de la navegación, en tiempo real para quien tiene sesión abierta, y en el buzón para quien no.
| Campo | Notas |
|---|---|
| Usuarios | Cuentas de la app, elegidas a mano. |
| Roles | Todos los usuarios con ese role. Sobrevive a entradas y salidas de personas. |
| Título | La línea que aparece en la notificación. |
| Texto | El cuerpo. |
En el título y en el texto puedes meter valores del registro o de variables
entre llaves: La oportunidad {titulo} fue rechazada.
Igual que Notificar, pero el destino es el correo, por el canal configurado en los ajustes de la app. Tiene dos campos más: el cuerpo es HTML, escrito en un editor propio, y puede llevar un informe adjunto.

| Campo | Notas |
|---|---|
| Usuarios / Roles | Los destinatarios. Quien no tenga correo queda fuera. |
| Asunto | Acepta {campo} como el resto de los mensajes. |
| Texto | Abre un editor de HTML en el botón … (Cuerpo del email). |
| Adjuntar informe | Uno de los informes de la app, o Sin adjunto. |
Sobre el adjunto: «el PDF se genera en el momento del envío, para el registro de esta ejecución» — no es un archivo guardado, es el documento de ese caso, hecho en ese instante. Ver el capítulo Informes.
Atención
Sin canal de correo activo y con SMTP completo en los ajustes de la app, el paso no puede enviar. Configúralo en Ajustes de la app → Notificaciones antes de poner el proceso a correr.
Ejecutar script
Llama a un script Python de la app, a mitad del proceso. Es la válvula de escape para todo lo que el diseño no hace: llamar a un servicio externo, calcular un margen, validar contra otro sistema.

| Campo | Notas |
|---|---|
| Script | Uno de los scripts de la app. |
| Guardar en | La variable donde queda lo que el script devuelva. Vacío = «se descarta». |
El script «recibe el registro, la clave y las variables en los argumentos» — no hace falta pasarlos a mano. Lo que devuelva queda en la variable indicada y pasa a estar disponible para los pasos siguientes.
Si el script falla, la ejecución queda en Falló en ese paso, con el error guardado en el historial.
Esperar
Aplaza el proceso por un tiempo fijo: Días y Horas. «Cero en ambos = no espera nada.»
Es la pieza de «avísame dentro de tres días si aún no hay respuesta». La ejecución duerme y se retoma automáticamente a la hora exacta, aunque el servidor se haya reiniciado por el medio.
Esperar evento
Aplaza el proceso hasta que alguien mande una señal con un nombre acordado.

El único campo es el Nombre de la señal (en el ejemplo,
dados-completos). «Quien manda la señal escribe este nombre. Sin hora
marcada: si nadie la manda, el proceso se queda esperando.»
La señal se manda de dos formas:
- en un evento de pantalla (TypeScript):
keplin.workflow.signal("dados-completos", id) - en un script (Python):
workflow.signal("dados-completos", key=id)
Sin indicar el registro, la señal despierta a todos los procesos parados en ese nombre; con el registro, solo a los de ese. Cero despertados no es error — quiere decir que nadie estaba esperando.
Consejo
Es común combinar Esperar evento con una flecha de vuelta a una tarea: la persona devuelve el caso pidiendo más datos, el proceso se queda esperando la señal, y cuando el comercial completa la ficha la señal trae el caso de vuelta a la misma tarea. Es exactamente lo que hace el ejemplo de esta documentación.
Ciclo
Recorre una lista, un valor cada vez. Tiene dos salidas: Cada (el cuerpo del ciclo, que corre una vez por valor) y Al final (cuando la lista se acaba).
| Campo | Notas |
|---|---|
| Lista | La variable con los valores a recorrer. «Un paso de script suele ser quien la produce.» |
| Guardar cada en | La variable que se queda con el valor de la vuelta actual. |
Sin lista elegida, el diseño avisa: «Este ciclo no dice qué lista recorrer: sale directamente por "Al final".»
Paralelo
Arranca varios caminos al mismo tiempo. Cada rama es una salida del nodo.
- Abre Ramas en paralelo en el botón ….
- Cada fila es una rama, con una Etiqueta (lo que se lee en el diseño) y un Identificador.
- Conecta cada salida al primer paso de la rama respectiva.
En el ejemplo, el paso Fechar e comunicar abre dos ramas: Registo (que graba la fase) y Cliente (que envía el correo). Ninguna espera por la otra.
Unión
Vuelve a juntar las ramas de un Paralelo. Es el paso que responde a «¿por cuántas se espera?».

| Esperar por | Qué hace |
|---|---|
| Todas las ramas | El proceso solo sigue cuando llegue la última rama. |
| La primera decide | Sigue con la primera que llegue — «las otras ramas se cancelan cuando una llega». |
| Un número de ellas | Sigue al cabo de Cuántas ramas indiques. |
Sub-workflow
Llama a otro proceso, sobre el mismo registro.
| Campo | Notas |
|---|---|
| Proceso a ejecutar | Uno de los workflows de la app. |
| Esperar a que acabe | Activado, este proceso para hasta que el otro termine. «Desactivado, este proceso sigue adelante y el otro corre por su cuenta.» |
«Corre sobre el MISMO registro, y por eso tiene que tratar de la misma entidad» — un proceso sobre oportunidades no puede llamar a un proceso sobre cuentas. Y un proceso no puede llamarse a sí mismo: «sería una recursión sin fin», y el diseño lo acusa.
Con Esperar a que acabe activado, este proceso sigue cuando el otro termina — por el nodo de Fin, por quedarse sin camino, o por fallar. El historial de este proceso dice cómo acabó el otro; un proceso llamado que falla no hace fallar al que lo llamó.
Fin
Termina la ejecución. Tiene un único campo, Resultado, un texto corto
como aprovado, ganha o perdida. «Queda en el historial y es lo que el
widget de estado muestra.»
Un proceso puede tener varios nodos de Fin — uno por desenlace — y eso es lo que se debe hacer: en vez de un Fin genérico, uno por resultado, para que el historial le diga algo a quien lo lea meses después.
Cómo se lee un paso en el lienzo
Cada caja en el lienzo muestra tres cosas: el nombre del paso (lo que escribiste en Nombre del paso, y lo que aparece en el historial), el tipo en letras pequeñas debajo, y las salidas a la derecha, con el nombre de cada una. Un triángulo ámbar en la esquina señala un paso con problemas.
Consejo
Da nombres de negocio a los pasos — «Aprobación de la dirección», «Marcar como Ganha» — y no nombres técnicos. Ese texto es el que vas a leer en el historial de cada ejecución cuando alguien pregunte «¿dónde está parado este caso?».
