BPMN: Modelando processos de negócio com elementos avançados (Parte I)

A notação BPMN (Business Process Model and Notation), atualmente na versão 2.0, reúne um conjunto de elementos intuitivos e robustos, que auxiliam usuários técnicos e de negócio na documentação de seus processos em diferentes níveis de detalhes, de maneira que possam mapear, de maneira padrão, todos os processos de negócios de sua organização.

A lista de elementos gráficos de BPMN apresenta desde elementos essenciais para a modelagem dos processos, utilizados em uma documentação simples, até elementos avançados, requeridos para desenhar modelos de processos complexos.

Dedicaremos os artigos semanais de janeiro para contribuir com o estudo dos elementos avançados, requeridos para a compreensão de uma modelagem complexa.

Marcadores de Atividades

Abordaremos neste primeiro artigo os marcadores de atividades, conhecidos também como atributos especiais.

Os marcadores de atividades ou atributos especiais tem o objetivo de indicar o comportamento específico de uma atividade durante sua execução.

Marcadores de Atividades

Marcadores de Atividades

No artigo “Um guia para iniciar estudos em BPMN”, vimos que atividades (activities) representam um trabalho realizado em uma etapa do processo de negócio e podem ser do tipo “Tarefa” (task) ou “Subprocesso” (subprocess).

Subprocesso

Um subprocesso representa um conjunto de atividades realizadas dentro de um processo de negócio. São representados graficamente de duas formas, contraído ou expandido.

A Imagem acima demostra o subprocesso contraído (collapsed), representado pelo símbolo “+” indicando a existência de outro nível de detalhe, que pode ser expandido (expanded).

Subprocesso contraído

subprocesso contraído

Subprocesso contraído (Busca de informações): No exemplo acima o processo inicia-se com a execução da tarefa de solicitação de reembolso, após sua execução o fluxo segue dando início ao subprocesso que buscará as informações das despesas. Após a análise destas informações, o subprocesso é finalizado voltando ao fluxo do processo principal da solicitação de reembolso e partindo para a tarefa da aprovação do gestor.

Subprocesso Expandido

O mesmo subprocesso pode ser representado de forma expandida (expanded), apresentando o seu conjunto de detalhes no próprio processo “pai”.

Subprocesso Expandido

Exemplo de subprocesso expandido: O mesmo fluxo do subprocesso contraído é executado, porém o subprocesso de busca de informações apresenta o detalhamento de suas atividades visíveis no processo “pai”.

Atenção: O fluxo do processo “pai” não pode atravessar de forma alguma a fronteira do subprocesso.

subprocesso Expandido fronteira atravessada

Uma regra importante no BPMN é que um subprocesso nunca pode ter sua fronteira cruzada pelo fluxo de sequência. O fluxo de sequência apresenta a ordem de execuções das atividades em um processo e nunca entre processos. Os fluxos de sequência de entrada e saída devem ser ligados no limite do subprocesso (sua borda), e não deve iniciar e terminar os eventos no nível de expansão dentro do retângulo arredondado (subprocesso expandido), conforme mostra a figura acima.

Loop – Atividade cíclica

Representado por uma linha circular com seta (conforme imagem abaixo), atributo em atividades que simula a operação “do-while”, uma atividade pode ser executada várias vezes em ciclo.

Utilizada quando o número de repetições não é conhecido;
A atividade de repetição será repetida enquanto a condição do loop for atendida.

Loop

Loop – Atividade cíclica

Uma atividade de loop terá uma expressão booleana que é avaliada para cada ciclo. Se a expressão for verdadeira, então irá continuar. O loop irá avaliar a expressão após a realização da atividade, isto significa que atividade será realizada pelo menos uma vez.

Loop subprocesso

No exemplo acima, o subprocesso “Seleção de Candidato” avalia candidatos a serem selecionados para entrevista. A expressão booleana para este loop poderia ser “O candidato não passou na seleção?” se a resposta for “verdadeira” então a atividade será realizada novamente e se for “falsa” o processo seguirá seu fluxo.

Em nosso próximo artigo:
Continuaremos o estudo sobre os Marcadores de Atividades, iniciado neste primeiro artigo.


Confira todos os artigos deste guia de BPMN: Modelando processos de negócio com elementos avançados:

14 ideias sobre “BPMN: Modelando processos de negócio com elementos avançados (Parte I)

  1. Senhores,

    Tenho achado o material de vocês muito interessante, mas gostaria que me tirassem uma dúvida se possível, geralmente temos conectores de fluxo de uma pagina para outra, mas eu queria saber qual seria o conector para demonstrar que em fluxo de atividade de um processo “Y” que a partir de uma determinada atividade deste processo iremos para o fluxo do Processo “X” e depois virá do Fluxo do processo “X” e continuará e finalizaremos o processo “Y”.

  2. Olá Kaleb! Para este tipo de situação, os eventos mais apropriados seriam o de sinal (signal) ou mensagem (message). A opção por um ou outro depende basicamente se existem informações que devem ir de um processo para o outro, ou se simplesmente ao chegar em um ponto, o outro processo passaria a dar andamento (como uma flag). Confira neste artigo como são usados esses eventos:
    http://blog.iprocess.com.br/2012/08/bpmn-diferencas-entre-eventos-de-link-message-e-signal/.

  3. Usando o processo “Contratação de Colaborador” do exemplo acima, vemos um subprocesso expandido “Seleção de Candidato” com o atributo “Repetição em loop” para tratar cada candidato de uma lista de candidatos que enviaram currículo e teste de raciocínio e lógica, ou seja que as tarefas do subprocesso expandido “Seleção de Candidato” serão aplicadas para cada candidato.
    Da forma como está a atividade “Entrevistar candidatos” parece que todos os candidatos selecionados para entrevista participarão juntos numa única entrevista.
    Caso fôssemos ter uma entrevista com cada candidato individualmente, a atividade “Entrevistar candidatos” seria renomeada “Entrevistar candidato” (singular)
    e ela teria o atributo “Repetição em loop” para realizá-la para cada candidato da lista de candidatos selecionados para entrevista, e ao final, no gateway “Resultado da entrevista” seria escolhido um único candidato para ser contratado.
    Meu raciocínio está correto?

  4. Olá Alexandre, sim, seu raciocínio está correto.
    No caso modelado, a tarefa de entrevistar é única mas não está detalhado no diagrama como ela é realizada. Se tivéssemos o detalhamento, poderia estar previsto diferentes formas de executá-la, como a) que ele agendaria uma entrevista única com todos os candidatos ou b) que ele agendaria e faria as entrevistas separadamente mas só daria terminada a tarefa quando após realizar todas as entrevistas saísse com algum contratado (ou não, quem roteia isso é o gateway seguinte).
    No caso sugerido por você, teríamos esse cenário de entrevistas separadas com cada candidato mais explícita (oque eu diria que é uma boa prática).

  5. Boa tarde senhores,
    Obrigado mais uma vez por disponibilizar este rico material.

    Gostaria de saber como representar o loop do último exemplo, na qual aparentemente temos uma caixa e dentro dela a um processo.

    Isto está disponível no Bizagi?

    Abs

  6. Olá Henrique,
    Sim, para incluir este marcador em qualquer atividade (seja tarefa ou subprocesso) no Bizagi, você deve acionar o menu do elemento (clique sobre ele com o botão direito do mouse) e escolher a opção “Tipo de loop / Padrão”.

  7. Bom dia, Kelly. Parabéns pelos artigos. Tenho uma dúvida sobre comunicação de subprocessos. Se o fragmento do fluxo que eu desejo condensar em um subprocesso possuir uma comunicação com uma outra pool, como fica a representação na forma expandida. Imagino que as setas pontilhadas devem ser apontadas na borda do subprocesso. Mas como represento o ponto do processo que gera esta comunicação? Na falta de um modelo para ter como base, tenho utilizado os eventos de mensagem.

  8. Watabe, a especificação oficial não traz muitos exemplos sobre isso, mas entendemos que se você tem o subprocesso expandido, pode sim mapear as mensagens entrando e saindo diretamente nos elementos em que estas mensagens são emitidas ou recebidas. No documento BPMN 2.0 By Examples (documento não normativo criado pelo grupo de trabalho responsável pela notação BPMN 2.0, disponível em http://www.omg.org/cgi-bin/doc?dtc/10-06-02.pdf) há um exemplo na página 36 que exemplifica isto: 12 – Email Voting Example. Veja que as mensagens provenientes das pools black box com a qual ocorre a comunicação no processo são conectadas aos eventos de envio/recebimento de mensagens.
    Se você está fazendo assim, então está fazendo certo =)
    PS – algumas ferramentas (como o Bizagi, por exemplo) não implementam este recurso e a conexão vai so até a borda do subprocesso, independente dele estar contraído ou expandido. Isto também é correto na especificação, mas neste caso não ficam claros os pontos que enviam/recebem cada mensagem dentro do processo subprocesso.

  9. Primeiramente parabéns pelo material, surgiu uma duvida quando estou em um processo e insiro a ferramenta de ‘subprocesso’ e peço para editá-la não aparece os swimlanes no local, isso é normal no Bizagi?

  10. Sim, este é o comportamento do BPMN também porque o elemento que você adicionou é um subprocesso incorporado (embedded). Para criar pool e lanes dentro do subprocesso, você precisa transformá-lo em um subprocesso reusável (reusable).
    Para isso: inclua um elemento de subprocesso no diagrama, clique com o botão direito nele para abrir o menu de contexto, e selecione “tipo de subprocesso > Reusable Sub-Process”. Você deve notar que a borda do subprocesso vai mudar e se tornar um pouco mais espessa. Se editá-lo agora, poderá incluir pool e lanes.
    A principal diferença entre estes dois subprocessos é esta: o subprocesso incorporado presume que todas as tarefas dentro dele são de responsabilidade da lane em que o subprocesso está inserido no processo principal. Jà o subprocesso reusável permite definir uma estrutura mais complexa, como um processo inteiro que pode ser chamado por diferentes processos.

  11. Bom dia, Kelly… excelente material. Este e outros aqui postados.
    Tenho uma dúvida. Existe um limite de subprocessos que podemos criar, o visual fica mais clean desta forma, por isto a dúvida.

  12. Oi Michele, não há nenhuma regra de limitação. Neste caso vai mais do bom senso de não quebrar demais o processo em múltiplos níveis, o que poderia dificultar a sua leitura ponta a ponta.

  13. Gostaria de saber como diferenciar um subprocesso de loop e um de múltiplas instâncias. Vocês podem ajudar? Não estou conseguindo discernir a diferença entre eles.

  14. Olá Camila, segue a dica:
    Esses marcadores servem tanto para subprocessos quanto para tarefas, então vou chamar aqui de “atividade”:
    Atividade com loop (aquele com um símbolo redondo que parece voltar para o mesmo ponto) implica um conceito de “do-while”, ou seja, a atividade (subprocesso ou tarefa) se repete até que uma condição se torne verdadeira. Por exemplo: se repete para uma aprovação, subindo numa escala de aprovadores até que o valor da compra a ser aprovada seja igual ou menor à alçada do aprovador. Neste momento, o ciclo se interrompe e o processo segue o fluxo.
    Atividade com múltiplas instâncias (aquele com símbolo de três tracinhos): a lista que determina quantas instâncias serão executadas já é conhecida quando o subprocesso começa. Por exemplo, em um processo de requisição de materiais que tem compras de diferentes tipos, gerando “N” ordens de compra que precisam, cada uma, ser orçada e aprovada separadamente. É possível criar um subprocesso de ordem de compra do tipo múltiplo, cujo fator de quantas instâncias serão executadas é o número de OCs geradas a partir da requisição. Assim, podemos ter uma requisição que gere apenas 1 Ordem de Compra, enquanto outras requisições podem gerar múltiplas OCs, cada uma executando seu fluxo com o subprocesso de múltipla instância. É importante observar que o marcador de atividade com múltipla instância pode ser três tracinhos verticais ou horizontais. Os traços verticais indicam que as atividades múltiplas serão executadas paralelamente, enquanto os horizontais indicam que serão em sequência (o segundo só começa depois do primeiro terminar e assim por diante).

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>