9.2 Secciones del JSON del flujo

Secciones del JSON del flujo


 
El JSON del flujo se divide en varias secciones:
  • Generalidades (obligatorio): Nombre e ID del flujo.
  • Conectores (obligatorio): Configura la secuencia de pasos según el diagrama del flujo.
  • Decisiones (opcional): Configura las decisiones.
  • Acciones (obligatorio): Configura las acciones, que pueden ser de tipo action (realiza una acción en Sepiia) o event (configura el evento y actor relacionado con el flujo y sus atributos).
  • Tareas (opcional): Enlaza los formularios que conforman cada tarea o TASK dentro del flujo.
 
A continuación se explicará cómo se configura cada sección de un flujo, tomando como ejemplo el Diagrama de flujo del Registro de un Hallazgo o Incidente, el cual consta de dos formularios, el TRIGGER (quien gatilla el flujo) y un TASK, tres decisiones y seis acciones.
 
Diagrama de Flujo: Registro de Hallazgo o Incidente.
Diagrama de Flujo: Registro de Hallazgo o Incidente.
 

Generalidades

{ "operationId": "24", "user": "admin.prevries@smartdici.com", "code": "INCI_FLOW", "description": "", "geoPosition": "0.0 0.0", "name": "Reporte de incidencia", "operationAreasTrigger": [45], "triggerData": { "flowBeginDate": "", "flowTittle": "Incidencia ##_SEQUENCE.incidente_prevencion#. '#_TRIGGER.reporte.INCI_TITULO#'" }, "type": "WORKFLOW" "template": { "actions": [], "connectors": [], "decisions": [], "tasks": [] } }
Parámetro
Valor
Descripción
operationId
"24"
Identificador único de la operación.
user
"admin.prevries@smartdici.com"
Email del usuario que realiza la operación.
code
"INCI_FLOW"
Código que identifica el flujo o proceso.
description
""
Descripción del flujo o proceso (vacío en este caso).
geoPosition
"0.0 0.0"
Posición geográfica relacionada con el flujo (en formato latitud y longitud).
name
"Reporte de incidencia"
Nombre descriptivo del flujo.
operationAreasTrigger
[45]
Áreas de la operación que pueden activar el flujo.
triggerData
Array de objetos JSON
Array que especifica los datos del flujo.
triggerData.flowBeginDate
""
Fecha de inicio del flujo (vacío en este caso).
triggerData.flowTittle
"Incidencia ##_SEQUENCE.incidente_prevencion#. '#_TRIGGER.reporte.INCI_TITULO#'"
Título dinámico del flujo generado por el disparador.
type
"WORKFLOW"
Tipo de flujo, en este caso un flujo de trabajo.
template
Objeto JSON que incluye acciones, conectores, decisiones y tareas.
template.actions
Array de objetos JSON
Acciones definidas en la plantilla del flujo.
template.connectors
Array de objetos JSON
Conectores entre diferentes elementos del flujo (por ejemplo, tasks, decisiones y acciones).
template.decisions
Array de objetos JSON
Decisiones que determinan la ruta del flujo según las condiciones evaluadas.
template.tasks
Array de objetos JSON
Tareas específicas definidas en el flujo.
 
 

Conectores

Los conectores son la manera de indicar a Sepiia el orden de ejecución de los objetos en el flujo. Se forman de la siguiente forma:
"connectors": [ { "from": "start", "text": "", "to": "D1", "type": "line" }, { "from": "D1", "text": "", "to": "A1", "type": "lineYes" }, { "from": "D1", "text": "", "to": "A2", "type": "lineNot" }, { "from": "A1", "text": "", "to": "end", "type": "line" }, { "from": "A2", "text": "", "to": "end", "type": "line" } ],
Parámetro
Valor
Explicación
from
"start", "D1", "A1", etc.
Identificador del punto de inicio del conector. Start = Trigger, D1 = Decisión, A1= Acción, T1 = Task.
to
"D1", "A1", "T1", "end", etc.
Identificador del punto de destino del conector.
type
"line", "lineYes", "lineNot"
Tipo de línea que representa la decisión o flujo entre elementos. lineYes = lleva a una Decisión Afirmativa, lineNot = lleva a una decisión negativa. line = si no esta involucrada ninguna decisión. END = fin del flujo.
text
""
Texto descriptivo asociado con el conector (vacío en estos casos).
 
 

Decisiones

Las decisiones permiten bifurcar el flujo en diferentes caminos según las opciones seleccionadas en el formulario. En el flujo de ejemplo, se utiliza una decisión llamada decision, que puede leer y validar los datos del formulario para verificar si se cumple una condición (lineYes y lineNot).
Las decisiones pueden causar:
  • Que dentro del formulario activo aparezca una sección u otra con distinta información, desencadenando diferentes caminos del flujo.
  • Que en el siguiente formulario o paso se muestre una u otra opción de tarea (TASK), tomando diferentes caminos en el flujo según la decisión.
  • Que dependiendo de la decisión, el flujo termine o continúe con un siguiente formulario o paso (TASK).
 
A continuación, se muestra cómo configurar una decisión en el flujo en el ejemplo que venimos  trabajando, “Registro de hallazgo”.
"decisions": [ { "cond": "'#_TRIGGER.reporte.INCI_RIES_PERCI.key#' == 'personas'", "id": "D1", "text": "¿Riesgo persona?", "type": "decision" }, { "cond": "#_TASK.T1.solucion.INCI_ACEPTA_INCI# == true", "id": "D2", "text": "¿El área designada toma el caso?", "type": "decision" }, { "cond": "'#_TASK.T1.solucion.INCI_RIES_PERCI.key#' == 'personas'", "id": "D3", "text": "¿Riesgo persona?", "type": "decision" } ],
Parámetro
Valor
Explicación
id
"D1", "D2", "D3"
Identificador único de cada decisión, debe coincidir con el nombre colocado en los conectores.
text
"¿Riesgo persona?", "¿El área designada toma el caso?"
Pregunta o texto que describe la decisión a tomar.
type
"decision"
Tipo de elemento, indicando que es una decisión.
cond
"cond": "'#_TASK.T1.solucion.INCI_RIES_PERCI.key#' == 'personas'"
Condiciones evaluadas para determinar el flujo basado en variables dinámicas.
 
 

Acciones

Las acciones corresponden a tareas que Sepiia puede ejecutar como llamar a distintas APIs o enviar correos electrónicos.
 
Las acciones se configuran de la siguiente forma:
"actions": [ { "data": { "channel": "_WEB_", "clientId": 24, "details": "SmartPNG", "element": "#_TRIGGER._SEQUENCE.incidente_prevencion#", "elementType": "INCI_PREV", "eventId": "SET_INCI_PREV", "eventProcessId": 1, "forced": false, "parameters": [ { "key": "INCI_COD_INCI_PREV", "value": "#_TRIGGER._SEQUENCE.incidente_prevencion#" }, { "key": "INCI_ACEPTA_INCI", "value": "null" }, { "key": "INCI_AREA_SECTOR", "value": "#_TRIGGER.reporte.INCI_AREA_SECTOR.key#" }, { "key": "INCI_CATEGO_PERS", "value": "#_TRIGGER.reporte.INCI_CATEGO_PERS.key#" }, { "key": "INCI_ESTADO", "value": "abierta" }, { "key": "INCI_FEC_REPO", "value": "fx(getDate('#_TRIGGER.reporte.INCI_FEC_REPO#','dd-MM-yyyy HH:mm:ss');dateFormat($result,'yyyy-MM-dd HH:mm:ss'))" }, { "key": "INCI_ID_TSK_GANTT", "value": "657" } ], "user": "WEB" }, "id": "A1", "text": "Registra Incidente de prevención - Persona", "type": "event" }, { "data": { "channel": "_WEB_", "clientId": 24, "details": "SmartPNG", "element": "#_TRIGGER._SEQUENCE.incidente_prevencion#", "elementType": "INCI_PREV", "eventId": "SET_INCI_PREV", "eventProcessId": 1, "forced": false, "parameters": [ { "key": "INCI_COD_INCI_PREV", "value": "#_TRIGGER._SEQUENCE.incidente_prevencion#" }, { "key": "INCI_ACEPTA_INCI", "value": "null" }, { "key": "INCI_FEC_REPO", "value": "fx(getDate('#_TRIGGER.reporte.INCI_FEC_REPO#','dd-MM-yyyy HH:mm:ss');dateFormat($result,'yyyy-MM-dd HH:mm:ss'))" } ], "user": "WEB" }, "id": "A2", "text": "Registra Incidente de prevención - Producción", "type": "event" } ]
Parámetro
Valor
Explicación
id
"A1", "A2", etc.
Identificador único de cada acción, debe coincidir con los nombres colocados en conectores.
text
"Registra Incidente de prevención - Persona", etc.
Descripción textual de la acción.
type
"event"/ "addTaskGantt"/ “action”
Tipo de acción, event = que puede ser un evento, addTaskGantt = la adición de una tarea a un proyecto, action = cuand se ejecuta una Regla configurada es Sepiia, se debe hacer referencia al id de la Regla.
data.channel
"_WEB_"
Canal por el cual se ejecuta la acción, en este caso web.
data.clientId
24
Es el id de la operación.
data.details
"SmartPNG"
No cambiar.
data.element
"#_TRIGGER._SEQUENCE.incidente_prevencion#"
Elemento o identificador que dispara la acción, el cual tiene la siguiente estructura: #formulario.key_sección.key_campo#
data.elementType
"INCI_PREV"
Código del elemento o actor asociado a la acción.
data.eventId
"SET_INCI_PREV"
Código del evento relacionado con la acción.
data.eventProcessId
1
Identificador del proceso de evento.
data.forced
false
Indica si la acción es forzada.
data.parameters
Array de objetos con claves y valores específicos.
Parámetros configurados para cada acción, como códigos, estados, y otros identificadores dinámicos.
data.parameters.key
"INCI_SOLUCION",etc.
Corresponde al código del atributo.
data.parameters.value
"#_TASK.T1.solucion.descrip#"
Corresponde al lugar del formulario desde donde se obtiene el valor, se forma de la siguiente manera: #formulario.key_sección.key_campo#
data.user
"WEB", “APP”
Usuario que ejecuta la acción.
 
 

Tipo Action

La accion de tipo “action” permite configurar el envío de un correo, notificación firebase, alerta firebase, después de que se ejecuta un paso en el flujo. Esta acción (correo, notificación o alerta) se configura desde la plataforma en el Menú Reglas y Estrategias, pero posteriormente se debe enlazar esa notificación con la Acción del flujo, esto se realiza anotando el código de la regla correspondiente.
 
{ "loopTimes": "", "text": "Envia correo de notificación", "id": "A2", "type": "action", "ruleId": 1913 }
Parámetro
Valor
Explicación
“id”
"A2"
Identificador único de cada acción, debe coincidir con los nombres colocados en conectores.
text
"Envía correo de notificación”
Descripción textual de la acción.
type
“action”
Tipo de acción, Action = cuando se ejecuta una Regla configurada es Sepiia, se debe hacer referencia al id de la Regla.
“ruleId”
1913
Corresponde al id de la Regla configurada para que ejecute la acción, en este caso Envío de correo. Este id se puede ver en la Web.
 
 

Tipo addTaskGantt

La acción de tipo addTaskGantt permite crear una tarea de proyecto y alojarla dentro de un proyecto en específico, sin importar el área de operación u organización, ya que sólo se debe indicar el flujo al que pertenece (alojado en la tabla gestion.flujo) y dentro de una Etapa en específico de ese proyecto (alojados en gestion.gantt).
{ "data": { "assignedHours": "#_TASK.T1.solucion.assignedHours#", "budget": "#_TASK.T1.solucion.presupuesto#", "criticalId": "#_TASK.T1.solucion.critic.id#", "description": "#_TASK.T1.solucion.descrip#", "endDate": "fx( getDate('#_TASK.T1.solucion.fecha_fin#','dd-MM-yyyy'); dateFormat($result,'yyyy-MM-dd') )", "flowId": "#_TASK.T1.solucion.flowTaskId#", "formId": "657", "id": "#_TRIGGER._SEQUENCE.incidente_prevencion#", "managerId": "#_TASK.T1.solucion.asig.id#", "name": "#_TASK.T1.solucion.titulo#", "parentTaskId": "#_TASK.T1.solucion.parentTaskId#", "startDate": "fx( getDate('#_TASK.T1.solucion.fecha_inicio#','dd-MM-yyyy'); dateFormat($result,'yyyy-MM-dd') )", "userId": "#_CURRENT.user_id#" }, "id": "A6", "text": "Agrega una tarea a una gantt existente", "type": "addTaskGantt" }
Parámetros
Descripción
"data":
"formId":
Id del template del formulario que tendrá la tarea de proyecto.
"endDate":
Fecha de término de la tarea.
"parentTaskId":
Id de la etapa del proyecto donde se almacenará la tarea en gestion.gantt.
"criticalId":
Criticidad de la tarea.
"name":
Nombre o título de la tarea.
"description":
Descripción de la tarea.
"managerId":
Id del responsable de ejecutar la tarea.
"flowId":
Id del flujo del proyecto en gestion.flujo.
"userId":
Creador de la tarea.
"startDate":
Fecha de inicio.
"budget":
Presupuesto (opcional).
"assignedHours":
Horas diarias que el responsable le dedicará a la tarea (opcional).
"text":
"Agrega una tarea a una gantt existente"
Texto descriptivo, visible en el log.
"id":
numérico
Identifica la acción dentro del flujo.
"type":
"addTaskGantt"
Es el tipo de acción, no modificar.
 
 

Tareas

Las tareas corresponden a formularios digitales, los cuales a su vez pueden representar un paso en el proceso productivo. Un flujo puede estar compuesto por uno o más pasos.
 
Las tasks se configuran de la siguiente forma:
"tasks": [ { "approveType": "MANAGER", "assignmentTypeId": "POSITION", "duration": 1440, "formCode": "RESP_INCI", "id": "T1", "operationId": 24, "positionJobCode": "#_GLOBAL.cargo_code#", "text": "Solución incidencia", "type": "task" } ]
Parámetro
Valor
Descripción
id
"T1"
Identificador único de la tarea. Debe coincidir con lo colocado en los conectores.
text
"Solución incidencia"
Descripción textual de la tarea.
type
"task"
Tipo de elemento, indicando que es una tarea.
approveType
"MANAGER"
Tipo de aprobación requerida para la tarea.
assignmentTypeId
"POSITION"
Tipo de asignación basado en la posición del empleado. Para ver otros tipos de asignaciones (Asignación de tareas)
duration
1440
Duración estimada de la tarea en minutos para que su avance programado sea de un 100%.
formCode
"RESP_INCI"
Código del formulario asociado a la tarea.
operationId
24
Identificador de la operación asociada a la tarea.
positionJobCode
"#_GLOBAL.cargo_code#"
Código del puesto de trabajo necesario para la tarea.
“managerId”
numérico, id del usuario
Completar sólo si el “assignmentTypeId” es PREDIFINED. Se debe colocar el id del usuario o bien el campo del formulario desde donde se rescata. Es a quien se le pasa la responsabilidad de aprobar la tarea. Los otros miembros podrán seguir viendo el formulario pero no aprobarlo y pasar al siguiente paso.
 
 

Asignación de tareas

Las tareas dentro de cada formulario pueden asignarse de 3 maneras diferentes.
1. Asignación por área de operación: La tarea aparecerá en el Escritorio de todas las personas que sean parte de un Área de operación. El primer usuario que haga clic en ella tendrá la responsabilidad de aprobar o rechazar la tarea. Los demás participantes podrán seguir viendo la tarea pero sin poder aprobarla. Se debe indicar el "operationAreaId" que equivale al área de operación en cuestión. Los ID deben pedirse a soporte.
{ "duration": 1440, "formId": 556, "approveType": "MANAGER", "assignmentTypeId": "MANUALLY", "operationAreaId": 63, "text": "Validación líder asistencia", "id": "T1", "type": "task" },
 
2. Asignación por cargo: La tarea aparecerá en el Escritorio de todas las personas que compartan un cargo. Se debe indicar el ID del cargo y la operación a la que pertenece. Los ID deben consultarse con soporte.
{ "duration": 1440, "formId": 592, "approveType": "MANAGER", "assignmentTypeId": "POSITION", "positionJobId": 9, || "positionJobCode": #_GLOBAL.cargo_code#", "operationId": 14, "text": "Asignación Revisor", "id": "T1", "type": "task" },
 
3. Asignación a usuario: La tarea aparecerá en el Escritorio del usuario asignado. La asignación debe hacerse por el ID de usuario el cual puede rescatarse a través de un selection que contenga una query a los sepiia.USUARIO y usar el ID.   
{ "duration": 1440, "formId": 593, "approveType": "MANAGER", "assignmentTypeId": "PREDEFINED", "managerId": "#_TASK.T1.asig.revisor_asignado.id#", "operationAreaId": 63, "text": "Revisión", "id": "T2", "type": "task" },