Introdução

Um Sistema de Gerenciamento de Processos permite que uma sequência de tarefas, sejam esta manuais, que envolvem uma interação humana, ou automatizadas, que são executadas por uma aplicação, possam ser gerenciadas, monitoradas e customizadas sem que seja necessário modificar o código padrão da aplicação, permitindo que a empresa possa controlar e identificar pontos de melhorias em seus processos de negócio, ou então responder a alguma demanda de mercado de forma mais fácil e ágil.

Exemplo de um processo de negócio em um Sistema de Gerenciamento de Armazéns (WMS):

Como as execuções dos processo de negócio passam a ser gerenciadas por um sistema, é possível extrair deste informações no que dizem respeito da responsabilidade, completude e performance de todas as tarefas e processos gerenciados da empresa.

Exemplo de um painel de monitoramento dos processos de negócio em um Sistema de Gestão Integrada (ERP):

Padrão BPMN

Um padrão indiscutível na descrição de um processo de negócio é o BPMN, ou notação de modelagem de processos de negócio. É uma linguagem, no formato XML, que pode permite definir a sequência de execução de um processo de negócio, e esta definição pode ser utilizada para automatizar e gerenciar a execução destes processos.

Exemplo da representação gráfica de um processo de negócio escrito em BPMN:

Exemplo de um processo de negócio escrito em BPMN:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <message id="startMessage" name="startMessage"></message>
  <process id="request" name="request" isExecutable="true">
    <endEvent id="endevent1" name="End"></endEvent>
    <serviceTask id="servicetask1" name="Service Task" activiti:delegateExpression="${workerB}"></serviceTask>
    <sequenceFlow id="flow1" sourceRef="messagestartevent1" targetRef="servicetask1"></sequenceFlow>
    <startEvent id="messagestartevent1" name="Start">
      <messageEventDefinition messageRef="startMessage"></messageEventDefinition>
    </startEvent>
    <serviceTask id="servicetask2" name="Service Task" activiti:delegateExpression="${workerC}"></serviceTask>
    <sequenceFlow id="flow3" sourceRef="servicetask2" targetRef="endevent1"></sequenceFlow>
    <sequenceFlow id="flow4" sourceRef="servicetask1" targetRef="exclusivegateway1"></sequenceFlow>
    <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
    <sequenceFlow id="flow5" name="Approved" sourceRef="exclusivegateway1" targetRef="servicetask2">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${status}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="flow6" name="Reproved" sourceRef="exclusivegateway1" targetRef="endevent1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${! status}]]></conditionExpression>
    </sequenceFlow>
  </process>
</definitions>

Padrão DMN

O padrão BPMN define ainda um outro padrão chamado Notação e Modelagem de Decisões (DMN), que permite a modelagem de Regras de Negócio que podem ser inferidas por meio de uma Tarefa de Regra de Negócio (Business Rule Task) na modelagem dos processos.

No exemplo abaixo temos uma tabela de decisão definida em DMN, nela propriedades (o contexto) do processo são inferidos para definir o estado de uma outra propriedade, no caso a elegibilidade de uma pessoa, e esta informação pode ser utilizada, por exemplo, para controlar o fluxo do processo de negócio em questão.

DDD e Contexto Delimitado

O principal conceito do Desenvolvimento Orientado à Domínios (DDD) chama-se Contexto Delimitado (Bounded Context), e ele define como desenvolver uma aplicação de forma modularizada, separada por modelos (domínios) e times (de desenvolvimento) com limites e responsabilidades bem definidas. O DDD se aplica naturalmente no desenvolvimento de uma aplicação para uma plataforma de Micro Serviços.

Este conceito de Contexto Delimitado também deve ser aplicado na modelagem de um processo de negócio, facilitando assim a compreenssão e o gerenciamento dos processos de negócio num ambiente distribuído. Isso não significa que não teremos processos de negócio que gerenciem processos em vários domínios, porém estes processos macro passam a gerenciar os outros processos (dos domínios) como sub-processos.

Por outro lado, o fato de termos vários repositórios de execuções de processos, dificulta um pouco a análise dos mesmos, principalmente no que diz respeito a correlação de eventos entre processos de domínios distintos, o que pode ser resolvido com a implementação de um repositório centralizado (ex: Data Lake) com todas as informações relevantes dos repositórios distribuídos.

Exemplo de uma modelagem respeito o conceito de Bounded Context:

Arquitetura

A interação de um Sistema de gerenciamento de Processos com a aplicação ocorre, por examplo, quando:

  • É necessário iniciar uma nova instância de um processo (Start Event)
  • Quando uma tarefa automatizada precisa chamar um serviço da aplicação (Service Task)
  • Quando uma tarefa manual precisa ser realizada por um usuário da aplicação (User Task)

O mecanismo de execução de processos homologado pelo TJF é o Flowable, um componente/biblioteca que pode ser embutido diretamente na aplicação e permite a interação síncrona e direta com aplicações escritas na plataforma Java, em especial com o Spring Framework.

Contudo, para que as tarefas possam realizadas por microsserviços diversos, não importando a plataforma de desenvolvimento, a interação deve ser sempre realizada por meio de mensagens (comandos e eventos) no barramento de mensagens.

Arquitetura de comunicação entre o microsserviço de orquestração e o da aplicação:

Modelador

O Flowable provê um modelador de processos de negócio baseado na Web, bem como um plugin para o Eclipse que pode ser instalado utilizando as instruções deste link https://www.flowable.org/docs/userguide/index.html#flowableDesigner.

Implementação

https://tjf.totvs.com.br/wiki/v1/tjf-process-core

Elaboração
Apresentação

 

Implementação


Issue JIRA


  • Sem rótulos