Com alguns anos de experiência participando de projetos e treinamentos envolvendo processos de negócio, percebo situações recorrentes quanto à aplicação de exceções na lógica do fluxo do processo de negócio que está sendo desenhado e documentado. A boa modelagem de processos de negócio em BPMN é o resultado do domínio da notação (estudo e compreensão dos elementos), mas para uma modelagem que represente corretamente uma situação de negócio, não basta saber aplicar as regras da notação BPMN, conhecer seus símbolos e o que cada um significa. É preciso também entender os detalhes da lógica do processo de negócio em questão.
Vou aproveitar o tema para repassar as regras da notação BPMN relacionadas à representação de exceções durante a execução de atividades, apresentar algumas ilustrações, de forma a esclarecer algumas dúvidas e confusões comuns quanto à representação da lógica do negócio.
Como já tratado em outros artigos, atividades retratam o comportamento ou trabalho realizado em um contexto do processo, gerando uma transformação (resultado) ao final deste trabalho. Atividades que podem gerar mais de um resultado normalmente são testadas, pois levam o fluxo por caminhos diferentes (alternativos ou paralelos). Para contextualizar, usarei como exemplo um processo fictício de liberação de crédito, representado abaixo.
No exemplo acima, o Processo de Liberação de Crédito realiza dois trabalhos para identificar se o crédito pode ou não ser aprovado. O Processo consiste em analisar se comprador possui restrições de crédito e limite para liberação de crédito.
O processo possui duas tarefas que analisam se o solicitante pode receber o crédito solicitado. A primeira tarefa Consultar situação de crédito (Tarefa de Usuário) analisa se solicitante está em situação de inadimplência ou sem débitos. Caso a tarefa resulte por situação de crédito por inadimplência, o processo é automaticamente finalizado por solicitação reprovada. Se não houver débito(s) o processo segue para verificação do limite. A segunda tarefa Verificar limite de crédito(Tarefa de Serviço) analisa se o solicitante possui limite para liberação de crédito solicitado. Caso o limite de crédito esteja dentro do limite solicitado, o processo é finalizado por solicitação aprovada. Se o limite de crédito estiver abaixo do solicitado, o processo é automaticamente finalizado por solicitação reprovada.
Mapeando exceções nas atividades do fluxo do processo
Descrevi acima um fluxo típico de processo de liberação de crédito, onde a situação de negócio está bem explícita em cada uma de suas tarefas, tanto no que consiste o trabalho realizado, quanto suas saídas (possíveis resultados). Porém algumas situações fora do comum, que não se espera que aconteçam (mas que podem acontecer) foram ignoradas. Estas situações são conhecidas também por exceções. Vejamos algumas situações que deverão ser representadas no fluxo do processo de liberação de crédito.
Situação 1
A tarefa Consultar situação de crédito deve conter um prazo para execução e, caso o prazo seja excedido, uma notificação deverá ser disparada para o responsável.
Situação 2
Caso uma informação de referência da tarefa Consultar situação de crédito estiver incorreta (ex. cpf inválido) e não for possível finalizar a tarefa, deverá ser realizado um tratamento para correção da informação.
Situação 3
Caso o serviço utilizado na tarefa Verificar limite de crédito estiver indisponível ou apresentar erro na sua execução impossibilitando a finalização da tarefa, uma notificação deverá ser disparada para o responsável, finalizando o processo por indisponibilidade no sistema.
Imagine que em nível de negócio todas estas situações devem ser previstas e representadas no fluxo do processo. Como representar estas situações? Qual seria a forma mais adequada de representá-las, levando em conta a lógica do processo e as regras da especificação BPMN 2.0?
Começaremos avaliando, neste artigo, apenas a Situação 1.
Antes de apresentar a solução, mostraremos uma confusão na hora de desenhar esta situação. Um erro bastante comum que presenciamos ao corrigir os exercícios dos alunos nos nossos cursos e por vezes também identificado em processos de melhoria, é a forma como é aplicado o controle de prazos nas tarefas, que geralmente é representado com um evento intermediário diretamente no fluxo do processo, posicionado logo após a tarefa que deveria ser controlada (já vimos casos que o prazo também havia sido posicionado antes da tarefa).
Aqui começa a primeira confusão: o evento que controla o prazo deve ser representado como uma exceção à saída da tarefa. Veremos mais abaixo, nas regras de especificação da notação, que este tipo de situação deve ser representado por um evento anexado a borda da tarefa a ser controlada, e não diretamente no fluxo do processo. Neste caso o evento de tempo deve ser acionado somente se a tarefa não tiver sido executada dentro do prazo e nunca obrigar, como modelado no exemplo abaixo, que o fluxo aguarde sempre por um período de tempo, desta forma paralisando o fluxo. Outro erro, também demonstrado na imagem abaixo, está no gateway que testa a situação de crédito. Veja que foi incluída uma nova saída Em atraso que deverá ser acionada caso a tarefa seja executada após o prazo.
Da forma como o fluxo acima foi modelado, a tarefa Consultar situação de crédito não possui, de fato, um controle de tempo. Ela deve ser necessariamente executada para que o fluxo prossiga. Após a conclusão da tarefa é apresentado um controle de tempo contido diretamente no fluxo do processo, que obriga ao processo uma parada no fluxo, por dois (2) dias.
Vejam que o processo acima é válido do ponto de vista da notação BPM. Porém ele não representa corretamente a situação do negócio proposto na situação 1, pois não deveria obrigar a parada do fluxo, e sim controlar o tempo da tarefa Consultar situação de crédito.
Solução proposta para Situação 1:
- A tarefa deverá possuir uma condição de tempo associada à sua execução.
- A tarefa, mesmo em atraso, poderá ser executada (não deverá ser cancelada).
- A tarefa, caindo em atraso, deverá executar um fluxo de exceção para disparo de uma notificação de atraso para o responsável.
Regras da especificação BPMN 2.0:
- Segundo a especificação oficial da notação BPMN 2.0, quando uma atividade possui prazo para execução, deve ser representado através do elemento Evento Intermediário do tipo Tempo (Timer), conectado à borda da atividade.
- No momento que a atividade for iniciada, o evento será monitorado e controlado seu tempo.
- Se o evento for disparado, o fluxo mapeado a partir do evento é executado.
- A interrupção da tarefa é representada através do desenho da borda do evento. Neste caso, deve conter a borda tracejada, que demonstra que a tarefa, mesmo em atraso, poderá ser executada. A borda contínua representa que, ao ser disparado o evento de tempo, a tarefa seria cancelada.
Levando em conta a lógica desejada para o processo e as regras da especificação BPMN, apresentamos abaixo a solução mais adequada para a situação 1:
O controle do prazo para execução da tarefa está representado corretamente pela exceção – neste caso o evento intermediário de tempo anexado a borda da tarefa. Como já dito, assim que a tarefa é iniciada, o evento passa a controlar seu tempo e caso a tarefa não seja executada e finalizada em até dois (2) dias, o evento de tempo é disparado e o fluxo segue para o próximo ponto onde dispara uma notificação de atraso ao responsável.
Continuaremos em um próximo artigo…
falando a respeito da segunda e terceira situações, bem como as confusões mais comuns na hora de desenhá-las.
Fique ligado!
Entre para nossa lista e receba conteúdos exclusivos GRATUITOS com prioridade
Não durma no ponto! Não perca nenhum conteúdo da BPM ACADEMY!
E não se preocupe, assim como você, não suportamos SPAM.
Espero que tenha gostado deste artigo!
Deixe seu comentário abaixo, sua opinião neste blog é muito importante!
Se estiver procurando por um assunto que não encontrou, comente!
Se este artigo te surpreendeu, compartilha!
Aproveita e siga a BPM ACADEMY nas redes sociais…
isso seria ótimo para a disseminação do conhecimento e a cultura da Gestão por Processos!
Nos vemos no próximo artigo!
Até mais!!!