
Falando de componente Exclusivo...
O componente Exclusivo representa um ponto onde o processo pode tomar um caminho ou outro automaticamente, dependendo das condições definidas e dos dados obtidos para atender a uma das condições. Dessa forma, ele permite automatizar decisões e aumentar a produtividade, flexibilizando a personalização de processos e reduzindo possíveis falhas. Ele também facilita a resolução de exceções em tempo real e garante conformidade com normas de governança.
Esse componente permite definir regras claras para compor as condições que serão consideradas para determinar uma rota única na qual o processo deve seguir a partir desse ponto, decidindo assim, o seu destino. Ou seja, ele funciona como uma porta – gateway – que direciona a solicitação para a próxima etapa baseando-se em dados que atendam à uma condição.
Para determinar essa rota, ele considera uma informação já existente no contexto da solicitação quando ela chega nesse ponto e, a partir dessa informação, verifica qual condição é atendida por ela e direciona a solicitação para o fluxo correspondente à condição atendida.
As condições são verificadas na ordem em que foram criadas. Assim que uma das condições for atendida, as demais não são verificadas. Como cada condição possui um fluxo de destino vinculado, a solicitação é movimentada para a primeira etapa do fluxo correspondente à condição que foi atendida.
Quando um processo é dividido em duas ou mais rotas utilizando o componente Exclusivo, cada rota a ser seguida é determinada por um dado com valor diferente.
 Em um processo de Envio de mercadoria, é preciso decidir qual método de envio utilizar dependendo da região para onde a mercadoria será enviada. Sendo assim, o dado a ser analisado é a região, que pode ser Metropolitana ou Interior. Se for Metropolitana, o método de envio será o Express. Se for Interior, o método de envio será o Padrão.
 Em um processo de Aprovação de despesas, o gestor responsável por aprovar cada despesa varia de acordo com sua categoria, que pode ser Equipamento, Publicidade, Contratação etc. Dessa forma, o dado a ser analisado é a categoria. Quando a categoria for Equipamento, a aprovação deve ser enviada para o gestor de Infraestrutura. Se for Publicidade, para o gestor de Marketing e quando for Contratação, para o gestor de RH.
|
Quando o processo possui um fluxo sincronizado utilizando esse componente, é importante ressaltar que, dentre as entradas que chegam no ponto de sincronização, apenas uma é suficiente para que a solicitação siga adiante, ou seja, não serão aguardados outros fluxos para movimentar a solicitação.
Ao utilizar o componente Exclusivo, o resultado é auto excludente, ou seja, não há possibilidade da solicitação seguir por mais de uma rota do processo, ela sempre seguirá pela rota da primeira condição atendida. Desse conceito se origina o nome do componente: Exclusivo. |
**imagem**
Requisitos para utilização
Para utilizar o componente Exclusivo, é necessário atentar-se a alguns pontos:
- o fluxo de entrada para ele não pode ter retorno, pois como ele se comporta como uma atividade automática, a solicitação sempre seguirá para o fluxo de saída que corresponder à condição atendida;
- se um dos fluxos de saída possuir retorno, quando a solicitação retornar, a decisão será executada de forma automática novamente;
- para criar as condições, é necessário que já exista um formulário vinculado ao processo e, pelo menos, uma etapa/atividade posterior a ele. Isso porque, para construir as regras de cada condição, é necessário selecionar os campos do formulário que devem ser considerados na verificação da condição e a etapa para a qual a solicitação será enviada quando a condição for atendida;
- ele precisa de, pelo menos, uma condição para funcionar corretamente.
Condição simples
A condição simples permite criar as regras a partir da própria interface, definindo a origem dos dados e os operadores para determinar o que deve ser validado. Para cada regra, é necessário definir:
- o campo do formulário do qual será obtido o valor que será utilizado na comparação;
- o operador que vai determinar qual tipo de comparação será feita: igual ao, maior que, menor que, igual ou maior que, menor ou igual a, diferente de, parcialmente igual a, parcialmente diferente de e qualquer um;
- a origem do valor que será comparado com o valor do campo do formulário, podendo ser um valor vindo de outro campo do mesmo formulário ou um valor inserido manualmente em um campo da regra;
- o outro campo do formulário ou o valor que será comparado com o primeiro campo do formulário, dependendo do que foi definido no tipo.
A validação da regra ocorre da seguinte forma em relação ao segundo valor a ser comparado:
- se a origem do valor é um Campo de formulário, ela será feita comparando o valor dos dois campos do formulário que foram selecionados;
- se a origem é um valor fixo, ela será feita comparando o valor do primeiro campo do formulário selecionado com o valor inserido manualmente no campo da regra.
É possível criar múltiplas regras para compor cada condição. E, também, é possível criar múltiplas condições para cada componente Exclusivo.
As regras são validadas considerando o operador E, ou seja, todas as regras que compõem a condição precisam ser verdadeiras para que a condição seja atendida. |
A primeira regra criada nunca pode ser excluída, apenas as regras criadas depois da primeira, pois é necessário que exista pelo menos uma regra para que o componente funcione corretamente.
Exemplos de uso
Reunimos aqui vários cenários utilizando as condições simples no componente Exclusivo. Os exemplos contam com a necessidade de decisão do processo, as condições que serão verificadas pelo componente e o resultado de acordo com a condição atendida.
Clique em cada cenário para ver seus detalhes.
<script>
(function() {
function toggleAreas(isExpand, $parent) {
var $items = $parent.find('.panel');
$.each($items, function(idx, el) {
var $arrow = $(el).find('span.cloakToggle').find('span');
var $content = $(el).find('span.cloak');
if (isExpand) {
$arrow.removeClass('cloakDefaultOpen').addClass('cloakDefaultClose');
$content.show();
} else {
$arrow.addClass('cloakDefaultOpen').removeClass('cloakDefaultClose');
$content.hide();
}
});
}
$(document).on('click', '#toggleAll-1', function(ev) {
ev.preventDefault();
var isExpand = $(this).data('expand');
var $parent = $(this).nextAll('.sectionColumnWrapper').first();
toggleAreas(isExpand, $parent);
$(this).data('expand', !isExpand);
});
})();
</script>
<a id="toggleAll-1" href="#" data-expand="true">Abrir/fechar todos os exemplos</a> |
Aprovação de compra com faixas de valor.
 Em um processo de Aprovação de compra, é necessário que a aprovação seja feita pelo responsável pela alçada de acordo com o valor da compra. Ou seja, se for uma compra de até R$ 1.000,00, o próprio coordenador pode aprovar. Se for entre R$ 1.001,00 e R$ 5.00,00, precisar ser aprovado pelo gestor. E, acima de R$ 5.001,00, é necessário que o diretor da área aprove.
 → Xxxxxxxxxxx
→ Significa que, quando a solicitação chegar no componente Exclusivo, será avaliado o valor total da compra e será verificada qual condição é atendida com base nesse valor, encaminhando a solicitação para o aprovador correspondente. |
|
Contratação de funcionário com base em sua experiência.
 Em um processo de Recrutamento e seleção, após a entrevista inicial, a empresa precisa decidir se vai contratar o candidato, se ele será reprovado ou se precisa de mais informações. A decisão será baseada na experiência que o candidato possui, na entrevista realizada e no seu desempenho no teste aplicado. O resultado dessa decisão pode ser a contratação imediata, uma segunda entrevista, a oferta de uma posição júnior ou a reprovação.
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
|
6. Exemplo de Estrutura da Regra
Se um usuário criar uma regra com dois critérios obrigatórios, ela pode ser assim:
Se o campo "Gestor Solicitante" for igual ao campo "Atribuição do Gestor" E o campo "Gestor Solicitante" for igual a "João da Silva", então o fluxo seguirá para a próxima atividade.
Por exemplo: para uma informação “Resultado da avaliação” os resultados podem ser “aprovado” ou “reprovado”.
Em um outro exemplo, a informação verificada pode ser “Valor total”, em que os resultados podem ser aplicados para regras definidas como “até 1000 reais”, “de 1001 a 5000 reais” ou “acima de 5000 reais”.
Condição avançada
A condição avançada permite criar as regras a partir de codificação, flexibilizando a criação de condições para pessoas mais técnicas que saibam programar e desejam criar expressões avançadas para as condições usando JavaScript.
Para esse tipo de condição, é disponibilizada uma IDE embutida, ou seja, um editor de código onde as expressões avançadas podem ser escritas. O ambiente para codificação permite a escrita de códigos de forma estruturada.
A condição avançada deve ser escrita utilizando expressões JavaScript e seguindo a estrutura:
- Propriedade: campo do formulário ou variável do processo;
- Condição: operadores como ===, >, <, != etc.;
- Valor: valor fixo ou outra variável.
No ambiente para codificação, também são disponibilizados snippets prontos com os HPIs da plataforma para facilitar a criação das condições. Assim, é possível inserir facilmente chamadas e manipulação de dados. Esses snippets ajudam a reduzir erros de codificação e aceleram a configuração das condições avançadas.
Além disso, o ambiente para codificação exibe um exemplo de condição avançada para facilitar o entendimento da construção das regras.
Clique aqui e veja todos os métodos que estão disponíveis por meio da hAPI e que podem ser utilizados na criação de condições avançadas. |
** Verificar se existem outras documentações que auxiliam a criação da condição avançada. **
Exemplos de uso
Reunimos aqui vários cenários utilizando as condições avançadas no componente Exclusivo. Os exemplos contam com a necessidade de decisão do processo, as condições que serão verificadas pelo componente e o resultado de acordo com a condição atendida.
Clique em cada cenário para ver seus detalhes.
<script>
(function() {
function toggleAreas(isExpand, $parent) {
var $items = $parent.find('.panel');
$.each($items, function(idx, el) {
var $arrow = $(el).find('span.cloakToggle').find('span');
var $content = $(el).find('span.cloak');
if (isExpand) {
$arrow.removeClass('cloakDefaultOpen').addClass('cloakDefaultClose');
$content.show();
} else {
$arrow.addClass('cloakDefaultOpen').removeClass('cloakDefaultClose');
$content.hide();
}
});
}
$(document).on('click', '#toggleAll-2', function(ev) {
ev.preventDefault();
var isExpand = $(this).data('expand');
var $parent = $(this).nextAll('.sectionColumnWrapper').first();
toggleAreas(isExpand, $parent);
$(this).data('expand', !isExpand);
});
})();
</script>
<a id="toggleAll-2" href="#" data-expand="true">Abrir/fechar todos os exemplos</a> |
Xxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
Xxxxxxxxxxx.
 Em um processo de Xxxxxxxxxx, .
 → Xxxxxxxxxxx
→ Significa que xxxxxxxxxxx. |
|
|
Configurar componente Exclusivo
01. No diagrama do processo, clique no componente Exclusivo
que deseja configurar.
As configurações disponíveis são exibidas na lateral direita. |
02. Defina um título ou nome para o componente que representa o direcionamento da solicitação para uma das etapas possíveis do fluxo do processo, de acordo com o resultado obtido.
O nome também pode ser alterado diretamente no componente, clicando sobre seu nome atual e depois em Editar – localizado no lado direito.  Em um processo de Xxxxxxx, o componente poderia receber o nome Xxxxxxxx.
|
|
03. Clique em
Adicionar condição para definir as condições que precisam ser atendidas para que a solicitação seja direcionada para a etapa correspondente.
04. Em Nome da condição, insira um nome para identificar a condição depois de criada.
05. Selecione o tipo de condição que deseja criar.
As opções disponíveis são: - Condição simples: permite definir regras a partir de operadores (igual, maior, menor, maior ou igual, etc.) para compor as condições. Obtenha mais detalhes em Condição simples.
- Condição avançada: permite definir regras a partir de codificação em JavaScript para compor as condições. Obtenha mais detalhes em Condição avançada.
|
06. Xxxxxxxxxxxxxxx
07. Xxxxxxxxxxxxxxx
08. Xxxxxxxxxxxxxxx
09. Clique em Salvar rascunho – localizado no lado direito da barra superior – para salvar as configurações feitas no componente Exclusivo.
Adicionar condição simples
01. No diagrama do processo, clique no componente Exclusivo
para o qual deseja adicionar uma condição simples.
02. Clique em
Adicionar condição.
03. Em Nome da condição, insira um nome para identificar a condição simples depois de criada.
04. Selecione o tipo Condição simples.
05. Xxxxxxx
06. Clique em Salvar.
07. Ao concluir a inclusão de todas as condições simples desejadas, clique em Fechar
– localizado no canto superior direito.
Editar condição simples
01. No diagrama do processo, clique no componente Exclusivo
do qual deseja editar uma condição simples.
02. Em Condições criadas, localize a condição que deseja editar e clique em Ações
– localizado no seu lado direito.
03. Clique em Editar.
04. Xxxxxxxxxx.
Excluir condição simples
01. No diagrama do processo, clique no componente Exclusivo
do qual deseja excluir uma condição simples.
02. Em Condições criadas, localize a condição que deseja excluir e clique em Ações
– localizado no seu lado direito.
03. Clique em Excluir.
04. Xxxxxxxxxx.
Adicionar condição avançada
01. No diagrama do processo, clique no componente Exclusivo
para o qual deseja adicionar uma condição avançada.
02. Clique em
Adicionar condição.
03. Em Nome da condição, insira um nome para identificar a condição simples depois de criada.
04. Selecione o tipo Condição avançada.
05. Xxxxxxx
06. Clique em Salvar.
07. Ao concluir a inclusão de todas as condições avançadas desejadas, clique em Fechar
– localizado no canto superior direito.
Editar condição avançada
01. No diagrama do processo, clique no componente Exclusivo
do qual deseja editar uma condição avançada.
02. Em Condições criadas, localize a condição que deseja editar e clique em Ações
– localizado no seu lado direito.
03. Clique em Editar.
04. Xxxxxxxxxx.
Excluir condição avançada
01. No diagrama do processo, clique no componente Exclusivo
do qual deseja excluir uma condição avançada.
02. Em Condições criadas, localize a condição que deseja excluir e clique em Ações
– localizado no seu lado direito.
03. Clique em Excluir.
04. Xxxxxxxxxx.
Dúvidas frequentes
Confira aqui algumas dúvidas frequentes sobre o componente Exclusivo.
<script>
(function() {
function toggleAreas(isExpand, $parent) {
var $items = $parent.find('.panel');
$.each($items, function(idx, el) {
var $arrow = $(el).find('span.cloakToggle').find('span');
var $content = $(el).find('span.cloak');
if (isExpand) {
$arrow.removeClass('cloakDefaultOpen').addClass('cloakDefaultClose');
$content.show();
} else {
$arrow.addClass('cloakDefaultOpen').removeClass('cloakDefaultClose');
$content.hide();
}
});
}
$(document).on('click', '#toggleAll-3', function(ev) {
ev.preventDefault();
var isExpand = $(this).data('expand');
var $parent = $(this).nextAll('.sectionColumnWrapper').first();
toggleAreas(isExpand, $parent);
$(this).data('expand', !isExpand);
});
})();
</script>
<a id="toggleAll-3" href="#" data-expand="true">Abrir/fechar todas as dúvidas</a> |
Qual a diferença entre os componentes Exclusivo, Paralelo e Inclusivo?
Basicamente, a diferença entre esses componentes é: Exclusivo: decide o destino da solicitação baseado em condições e a direciona para o fluxo da primeira condição atendida. A partir disso, ela segue adiante em um fluxo único;  Em um processo de Aprovação de crédito, um cliente faz uma solicitação de crédito para um banco e o processo precisa determinar se a solicitação é aprovada ou rejeitada. Para tomar essa decisão, esse componente analisa a pontuação de crédito que o cliente possui no mercado. Se a pontuação for maior que 700, o crédito é concedido e a solicitação segue para as etapas necessárias para que seja liberado ao cliente. Caso contrário, o crédito é negado e a solicitação é finalizada.

|
Paralelo: divide o fluxo em várias etapas que podem ser executadas em paralelo e, depois de finalizadas, o fluxo se torna único novamente;  Em um processo de Lançamento de produto, as etapas Marketing, Logística e Treinamento de vendas podem ser feitas simultaneamente. Dessa forma, esse componente divide o fluxo em três etapas e indica o início dessas etapas que serão executadas em paralelo. Quando finalizadas, as três etapas são unificadas pelo componente Join e o fluxo volta a ser único.

|
Inclusivo: é uma junção do Exclusivo e do Paralelo, ou seja, divide o fluxo no número de etapas correspondente ao número de condições que foram atendidas.  Em um processo de Análise de renda, o banco verifica qual é a renda familiar do cliente para que diferentes tipos de crédito ou investimentos sejam aprovados ou oferecidos. Existem 3 condições:
- se a renda for maior que R$ 8.000,00, o financiamento de automóvel é liberado para o cliente;
- se a renda for maior que R$ 15.000,00, o financiamento de imóvel é liberado para o cliente;
- se a renda for maior que R$ 20.000,00, a compra de títulos do governo é oferecida como investimento para o cliente.
Vamos supor que um cliente possua a renda de R$ 18.000,00. Quando sua renda for analisada, as duas primeiras condições serão atendidas. Neste caso, o fluxo seguirá paralelamente por dois caminhos: o que leva para a etapa Liberar financiamento automóvel e o que leva para a etapa Liberar financiamento imóvel. A terceira condição não é atendida, por isso, o fluxo não seguirá pelo caminho correspondente a ela. ** imagem: ainda não temos o componente Inclusivo no novo desenhador para ilustrar o exemplo ** |
|
|
O componente Exclusivo pode afetar o desempenho do processo?
Não. O componente Exclusivo por si só não costuma comprometer o desempenho de um processo de forma significativa. No entanto, o impacto no desempenho depende mais do contexto em que ele é utilizado e das decisões associadas a ele. Se houver muitas condições complexas sendo avaliadas ou se o processo tiver muitos componentes Exclusivos com decisões complicadas em cada passo, isso pode, de fato, afetar o desempenho de forma indireta, mas não por causa do componente em si, mas pela lógica de decisão ou pela quantidade de verificações necessárias. Além disso, em ambientes que exigem processamento de alta carga ou baixa latência, o número excessivo de verificações de condições em componentes Exclusivos pode, em alguns casos, aumentar o tempo de execução do processo. Isso seria mais um reflexo da lógica e da complexidade da aplicação do que do componente em si. No geral, o componente Exclusivo não costuma ser a causa direta de baixo desempenho, mas a forma como ele é aplicado, em conjunto com outras práticas e a complexidade das condições envolvidas, pode influenciar no tempo de execução do processo. |
|
É possível utilizar múltiplas regras no mesmo componente Exclusivo?
Sim, é possível criar múltiplas regras para cada condição, bem como, criar múltiplas condições para serem verificadas em cada componente Exclusivo de um processo. Porém, vale ressaltar que as condições são verificadas na ordem em que são criadas. Por isso, é importante garantir que a lógica de decisão seja clara para evitar que rotas inadequadas sejam seguidas. Também é importante que exista um fluxo padrão, que funciona como um escape e será seguido quando nenhuma das condições for atendida. Em resumo, é possível utilizar várias regras e condições, desde que cada rota tenha sua própria expressão condicional. A escolha da rota a ser seguida é feita de forma exclusiva com base na verificação dessas condições. |
|
Como alternar entre a condição Simples e a Avançada?
|
Como testar se as condições definidas estão corretas?
Para testar se as condições criadas para o componente Exclusivo estão corretas, é possível seguir algumas abordagens: - validação manual: revisar as condições – analisando as expressões e verificando se são lógicas e se não existe sobreposição ou ambiguidades entre elas – e compreender os dados envolvidos – entendendo quais variáveis ou dados são avaliados para garantir que as condições estejam de acordo com o esperado em cada situação;
- testes: criar um conjunto de entradas (valores das variáveis) que abrangem as possibilidades de decisão que o componente pode tomar. Depois, executar o processo com essas entradas e verificar se ele segue a rota correta;
- ferramentas de teste de BPMN: utilizar alguma ferramenta que ofereça recursos específicos para validação e testes do componente Exclusivo. Essas ferramentas permitem simular a execução do processo, analisar os fluxos e verificar se as decisões tomadas pelo componente estão corretas;
- revisão lógica de negócio: contar com a análise colaborativa dos especialistas no negócio pode ajudar a validar se as condições criadas fazem sentido para o objetivo do processo.
|
|
Por que a solicitação parou depois do componente Exclusivo?
Existem alguns motivos pelos quais uma solicitação pode ficar "presa" no componente Exclusivo e geralmente eles estão associados à forma como as condições e lógicas de decisão foram configuradas. Os motivos mais comuns são: - condição não atendida: nenhuma das condições configuradas para o componente foi atendida e não existe um fluxo padrão de escape. Isso pode ocorrer quando as condições não foram configuradas corretamente, não consideraram algum cenário mais específico ou a lógica das condições não foi definida de forma adequada;
- dados ou variáveis de entrada ausentes ou inválidos: quando dados ou variáveis que são utilizados para determinar a rota que a solicitação deve seguir não estão presentes no processo ou são inválidas. Por exemplo, um dado ou variável que deveria ter sido preenchida anteriormente e não foi;
- inconsistência de execução: se ocorrer alguma inconsistência ou falha técnica na plataforma que está executando o processo no momento de avaliar as condições do componente, o fluxo pode ser interrompido sem ser direcionado para uma rota válida. Isso também pode ocorrer por questões de timeout – se o fluxo envolve tempos de espera ou tempos máximos e esses tempos tenham sido atingidos sem que existam definições sobre como lidar com esses casos – e por questões de integração – quando o fluxo depende de dados de uma fonte externa (como API, banco de dados ou integração com outros produtos) e ocorrer alguma falha nessa fonte;
- falta de fluxo padrão: não há um fluxo padrão por onde a solicitação possa seguir caso nenhuma das condições seja atendida. É uma boa prática sempre definir um fluxo padrão, pois garante que o fluxo não seja interrompido quando nenhuma condição foi atendida;
- falhas em subprocesso ou etapas anteriores: se antes do componente um subprocesso ou etapa falhou ou não foi completada corretamente – não fornecendo as informações necessárias para a decisão, por exemplo – pode afetar a verificação das condições e impedir o avanço da solicitação.
Para resolver essas questões, é importante revisar as regras e condições, garantir que as variáveis de entrada estão sendo corretamente inseridas e sempre definir um fluxo padrão para que sempre haja uma rota válida para a solicitação seguir adiante. |
|
Quais linguagens são suportadas para criar scripts na condição Avançada?
Apenas a linguagem JavaScript pode ser utilizada para criar as expressões para compor as condições. |
|
|
<!-- Hotjar Tracking Code for http://tdn.totvs.com/display/fb -->
<script>
(function(h,o,t,j,a,r){
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
h._hjSettings={hjid:1280165,hjsv:6};
a=o.getElementsByTagName('head')[0];
r=o.createElement('script');r.async=1;
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
a.appendChild(r);
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script> |