Neste artigo, vamos guiá-lo através de um passo a passo detalhado, mostrando como você pode implementar um fluxo com subprocessos no OmniSiga.
Vamos criar um fluxo para receber e processar pedidos de uma pizzaria. O funcionamento do fluxo será o seguinte:
- O cliente informa os dados do pedido: sabor, endereço e pagamento;
- Cada setor recebe os dados do pedido separadamente e os confirma;
- Após todos os dados serem confirmados, a entrega poderá ser realizada.

Funcionamento
Para atender o funcionamento proposto iremos criar 2 fluxos de atendimento:
- O primeiro fluxo (processo "pai") recebe os dados do pedido, dispara os subprocessos e aguarda a confirmação dos dados.
- Os demais fluxos (subprocessos "filhos") receberão os dados separadamente e poderão ser finalizados em qualquer ordem. Ao final de cada subprocesso é enviado o sinal ao fluxo "pai".
- Por fim ao receber todos os sinais dos subprocessos "filhos" o fluxo irá continuar até o passo final que é disparar um último subprocesso com os dados da entrega.
Montagem do fluxo "pai"
Para receber os dados, utilizaremos a caixa de "coletar dados". Dentro de cada caixa é criada uma variável onde ficará armazenado o dado solicitado. Para este exemplo criamos 3 caixas (sabor,local e pagar).

Para disparar os subprocessos, utilizaremos a caixa de "criar subprocesso". Neste exemplo criaremos um subprocesso para cada uma das variáveis que recebemos. Durante a criação do subprocesso, adicionaremos uma nova variável (tipo) para identificar qual processo estamos iniciando. No campo "Variáveis de entrada" enviaremos o dado recebido e também a identificação do dado em formato JSON.
Ex.:

Finalmente após disparar os subprocessos iremos utilizar a caixa de "aguardar sinal". Neste passo aguardaremos os sinais que virão dos subprocessos e após receber todos o fluxo irá prosseguir ao próximo passo que é criar o último subprocesso com os dados da entrega.

Montagem do fluxo "filho"
Para criar os subprocessos, configuramos um fluxo que consegue identificar os dados recebidos do fluxo "pai" e cria um ticket de atendimento do tipo "backoffice". Após a finalização do atendimento deste atendimento backoffice o sinal é disparado de volta ao fluxo "pai".

Para identificar o "tipo" de dado recebido, utilizamos a caixa de "decisão" que encaminha o subprocesso de acordo com o dado recebido.
Ex.:

Neste exemplo a lógica aplicada na decisão é: "Se a variável "tipo" é igual a "estoque" vai para a caixa "confirma estoque".
Depois de identificar o dado recebido o subprocesso é enviado à criação de um ticket de atendimento humano do tipo "backoffice".
Ex.:

Aplicamos a configuração que ao finalizar o atendimento um sinal é disparado ao fluxo "pai". Que por sua vez poderá prosseguir ao passo final que é criar o subprocesso da entrega.

Neste ultimo subprocesso, estamos enviando todas as variáveis disponíveis para que a entrega seja feita.
Ex.:

A entrega é finalizada e também todo o fluxo quando este subprocesso for finalizado (Finaliza atendimento).
Conclusão
Dessa forma conseguimos criar um fluxo que cria subprocessos os quais podem ser finalizados em qualquer ordem ou sequência. Ao receber o sinal que os subprocessos foram finalizados, o processo "pai" pode seguir para os passos seguintes.