# Como usar gateways

{% hint style="success" %}
**Assista esse conteúdo em vídeo na Universidade Stoque**

**Acesse o treinamento a seguir:** <https://universidade.stoque.com.br/member/#/playlist/185280>

**Módulo:** Gateways
{% endhint %}

{% embed url="<https://youtu.be/iqFmbppZozs>" %}

## Visão geral

**Gateway** é um dos elementos básicos da notação de desenho de processos [BPMN](/zeev/como-construir-processos/como-desenhar-processos.md#o-que-e-bpmn).

Os gateways (desvios) são elementos que podem modificar o caminho do andamento do curso de execução do processo.  Com o uso de gateways conseguimos criar processos complexos, com diversas ramificações, que representam exatamente como as coisas acontecem nas empresas.

Os gateways são representados por losangos com ícones representativos, conforme sua função:

![](/files/VCjpnCeV6MlnfvVmHNhO)

{% hint style="warning" %}
Importante: ao contrário de outros tipos de modelagem, no [BPMN](/zeev/como-construir-processos/como-desenhar-processos.md#o-que-e-bpmn), o Gateway **não** é uma tarefa. Ele é um elemento automatizado, executado pelo Zeev. Nenhum ser humano executa ou é responsável por um gateway. Todas as decisões que o gateway tomar serão baseadas em fatos e decisões **que já ocorreram antes no processo (em** [**atividades**](/zeev/como-construir-processos/como-desenhar-processos/o-que-sao-atividades.md) **ou no** [**evento de início**](/zeev/como-construir-processos/como-desenhar-processos/como-usar-eventos/evento-de-inicio.md)**).**
{% endhint %}

Os gateways podem ser **divergentes** ou **convergentes**.

## Gateways divergentes

Como elemento divergente, o gateway possui duas ou mais setas de conexão de saída. Como o nome diz, ele tem o poder de **divergir** o processo, ou seja, mudar sua rota de execução, podendo inclusive iniciar execuções em paralelo. No exemplo abaixo, após a atividade A, as atividades B, C e D poderão (ou não) serem iniciadas: uma delas, duas delas, ou as três ao mesmo tempo. &#x20;

![](/files/jRxGmxZnlF0N6k0aPYC6)

Quais atividades serão iniciadas dependerá do [tipo de gateway](#tipos-de-gateways) utilizado e das [condições associadas](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/condicoes-em-gateways.md).

## Gateways convergentes

Como elemento convergente, o gateway possui duas ou mais setas de conexão de entrada. Como o nome diz, ele tem o poder de **convergir** o processo, ou seja, aguardar dois ou mais braços do processo que estão sendo executados em paralelo para então dar sequencia no fluxo.  No exemplo abaixo, a atividade C somente iniciará após as atividades A e B concluírem.&#x20;

![](/files/W0I7DoJfSsstUV02GjaD)

Quais atividades que serão aguardadas para a atividade C iniciar dependerá do [tipo de gateway](#tipos-de-gateways) utilizado, conforme veremos nos próximos capítulos.&#x20;

## Convergente e divergente ao mesmo tempo

Um mesmo gateway pode ter comportamentos convergentes e divergentes ao mesmo tempo. No exemplo abaixo, o gateway irá esperar a finalização das tarefas A e B para, então, iniciar as tarefas C e D ao mesmo tempo.

![](/files/MnkKtNVAleYcaK8VvN9q)

<mark style="color:red;">Esse tipo de modelagem, entretanto, não é indicado como boa prática, pois pode gerar dúvidas de interpretação em processos muito complexos.</mark> O exemplo abaixo traz o mesmo comportamento porém com um desenho muito mais claro. O primeiro gateway tem comportamento convergente e o segundo gateway divergente.&#x20;

![](/files/W85AZXvjiiakAF8T1iKQ)

## Gateways convergentes e divergentes funcionam juntos

Observe o desenho abaixo, que possui um gateway divergente. Trata-se de um [gateway paralelo](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/gateway-paralelo.md), que, como veremos nos próximos tópicos, irá acionar as tarefas B, C e D **ao mesmo tempo, após finalizada  tarefa A**.&#x20;

![](/files/7DNrHBSFtsKD4Bz0Gbpn)

O problema dessa modelagem é que a tarefa E será acionada 3 vezes. E isso pode ou não pode ser o comportamento que você espera. De fato, uma vez que B, C e D estejam acionadas, cada vez que uma delas terminar, irá acionar a tarefa E.  O processo vai começar a rodar múltiplas vezes dentro da mesma solicitação, o que na maioria das vezes é errado.&#x20;

Para resolver isso, você usa um **gateway convergente complementar**:

![](/files/PNAG4nmF8YvmthhYRi0u)

No exemplo acima, o novo gateway convergente irá aguardar B, C e D finalizarem, para só então acionar E.

Em resumo, *em geral*, você deverá estar atento para criar correspondências entre gateways divergentes e gateways convergentes. Essas correspondências, algumas vezes, podem não ser tão diretas e explícitas como no desenho acima, já que desenhos de processos grandes e complexos podem ter diversas ramificações.

Veja o exemplo abaixo. O gateway divergente G-A-1, logo no início do processo, tem seu correspondente convergente G-A-2 somente no final do processo. O divergente G-B-1 igualmente tem seu correspondente distante no processo, o G-B-2. Somente G-C-1 e G-C-2 estão próximos.&#x20;

![Clique para ampliar](/files/VU6FRQ4nZmZeYOVtyb4P)

{% hint style="info" %}
Dica: como veremos no detalhamento do [gateway condicional exclusivo](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/gateway-condicional-exclusivo.md), ele não gera execuções em paralelo, na medida em que somente 1 caminho é possível. Por isso, as tarefas G e H nunca existirão ao mesmo tempo. Portanto, o [elemento convergente G-C-2 é desnecessário](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/gateway-condicional-exclusivo.md#como-convergente), por não convergir nada. Entretanto, sua existência é bem-vinda, pois torna o desenho mais claro e explícito.
{% endhint %}

## Desenhador de versões anteriores do Zeev

Se você é cliente faz mais tempo do Zeev, deve ter trabalhado com o antigo desenhador de processos. Apesar de, também, ser baseado na notação BPMN, o antigo desenhador e o novo desenhador possuem uma diferença importante no uso de gateways.&#x20;

No antigo desenhador existiam elementos específicos para representar gateways divergentes e outros elementos para representar gateways convergentes.

No novo desenhador, como vimos antes, o mesmo elemento desempenha simultaneamente o papel de divergente e convergente, seguindo inclusive a notação BPMN correta.&#x20;

Veja, assim, como ficou a correspondência de gateways entre a versão anterior e a nova:

| Elemento              | Desenhador antigo                                                  | Desenhador novo                  |
| --------------------- | ------------------------------------------------------------------ | -------------------------------- |
| Paralelo              | ![](/files/08rEAOfQTCeK1W6bNdz5)![](/files/YFP5cnVdXyaXJBW5TdQ1)   | ![](/files/DDEeyXvWitMa2sgkmgCw) |
| Condicional exclusivo | ![](/files/sDaCjR1zRrdrFYy6F8th)                                   | ![](/files/bkD9aDZtWXzxfZF9iTSy) |
| Condicional inclusivo | ![](/files/grHuPOC4DAlOKlAA0Jvi)![](/files/1BFe0vSTTULIEApfWcbh)   | ![](/files/9ecMtwgItTDz3vdEvewk) |
| Aleatório             | ![](/files/yv3jfaBsBbXN9HoGTBwB)  ![](/files/JcO2McaGmoTYToWeTgTM) | Não disponível                   |

## Conheça os tipos de gateways

Conheça, nos links abaixo, os principais tipos de gateways e suas particularidades:

{% content-ref url="/pages/gkxQGGN0etnzXKbjNTdM" %}
[Gateway paralelo](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/gateway-paralelo.md)
{% endcontent-ref %}

{% content-ref url="/pages/PG4mB5QUn08b1MMb0ME3" %}
[Gateway condicional inclusivo](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/gateway-condicional-inclusivo.md)
{% endcontent-ref %}

{% content-ref url="/pages/uWI0GfcB3faNxSHjuUWF" %}
[Gateway condicional exclusivo](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/gateway-condicional-exclusivo.md)
{% endcontent-ref %}

E, ainda, temos um tópico especial sobre a montagem de condicionais:

{% content-ref url="/pages/6EGjKeHg2RlVdRA3IFPK" %}
[Condições em gateways](/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways/condicoes-em-gateways.md)
{% endcontent-ref %}

## Demonstração prática

Confira no vídeo a seguir a demonstração de como utilizar gateways.

{% embed url="<https://youtu.be/-Fg6WhWim6o>" %}

### Erros nos Gateways

Se ao executar uma instância e seu gateway tiver algum problema de configuração, uma tela de erro será exibida, com a informação de erro de condições de gateways (incluindo o ID do aplicativo na mensagem de alerta).

<figure><img src="/files/jr5ApKLIIJ3jZKAWuVBI" alt="" width="375"><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kb.stoque.com.br/zeev/como-construir-processos/como-desenhar-processos/como-configurar-gateways.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
