Aula 18 - Integração de DMN com Motores de Processo BPMN ⚙️
Objetivo Pedagógico
Objetivo: Conectar modelos de decisão DMN 1.3 a fluxos operacionais de processos BPMN 2.0 através da tarefa nativa Business Rule Task no motor Camunda, orquestrando fluxos condicionais baseados no resultado da decisão.
📑 1. Fundamentos Teóricos & Análise Técnica
Processos de negócio (BPMN) e regras de decisão (DMN) possuem propósitos complementares: o BPMN responde à pergunta "O que fazer e quando?" (orquestração temporal e delegação de tarefas), enquanto o DMN responde à pergunta "Como decidir?" (lógica determinística de regras).
A união arquitetural entre as duas especificações resolve a poluição clássica de processos: 1. O Antipadrão do Gateway Spaghetti: - Modelar decisões complexas utilizando dezenas de gateways exclusivos (XOR) no BPMN resulta em diagramas caóticos e ilegíveis (Spaghetti Process). 2. A Tarefa de Regra de Negócio (Business Rule Task): - Elemento padrão do BPMN (representado por uma tabela no canto superior esquerdo da atividade) que invoca diretamente o motor DMN de forma síncrona. - O processo passa as variáveis de instância como contexto de entrada para a tabela DMN. O motor DMN avalia as regras e devolve um mapa de variáveis de volta ao processo. 3. Decisões Orientadas a Roteamento em Camunda: - Os gateways subsequentes do BPMN tornam-se mínimos e elegantes, inspecionando apenas uma variável semântica de saída retornada pelo DMN (ex: decisao.status == 'APROVADO').
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph LR
Start([Início do Processo]) --> Collect["User Task: Coleta de Documentos"]
Collect --> RuleTask[["Business Rule Task: Executa Tabela DMN"]]
RuleTask --> Gate{"Status da Decisão?"}
Gate -- APROVADO --> AutoApprove["Service Task: Liberar Pagamento"]
Gate -- ANALISE_MANUAL --> ManualTriage["User Task: Parecer do Gerente"]
Gate -- REJEITADO --> RejectTask["Send Task: Notificar Recusa"]
AutoApprove --> End([Fim])
ManualTriage --> End
RejectTask --> End
style Start fill:#e1f5fe,stroke:#01579b
style RuleTask fill:#fff3e0,stroke:#e65100
style Gate fill:#f3e5f5,stroke:#7b1fa2
style AutoApprove fill:#e8f5e9,stroke:#2e7d32
style RejectTask fill:#ffebee,stroke:#c62828 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Despoluição de Processos BPMN: Substituição de redes intrincadas de gateways lógicos por uma única chamada atômica ao motor DMN. - Manutenção Independente: Especialistas de crédito podem alterar taxas e faixas de score no DMN sem alterar o fluxo de tarefas do BPMN. - Mapeamento Automático de Variáveis: Injeção transparente de payloads JSON do processo na memória de execução da tabela DMN. - Auditoria de Decisões em Tempo Real: Histórico unificado no Camunda Cockpit rastreando quais regras exatas foram disparadas em cada instância.
🛠️ 2. Implementação Prática em Camunda Platform, BPMN 2.0 e Business Rule Task
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// processo_com_dmn.bpmn (Fragmento BPMN 2.0 Conectando Business Rule Task)
<bpmn:businessRuleTask id="Task_AvaliarRisco"
name="Avaliar Risco via DMN"
camunda:decisionRef="DecisaoScore"
camunda:resultVariable="resultadoDecisao"
camunda:mapDecisionResult="singleResult">
<bpmn:incoming>Flow_DocumentosColetados</bpmn:incoming>
<bpmn:outgoing>Flow_ParaGateway</bpmn:outgoing>
</bpmn:businessRuleTask>
<bpmn:exclusiveGateway id="Gateway_RoteamentoDecisao" name="Roteamento">
<bpmn:incoming>Flow_ParaGateway</bpmn:incoming>
<bpmn:outgoing>Flow_Aprovado</bpmn:outgoing>
<bpmn:outgoing>Flow_Rejeitado</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="Flow_Aprovado" name="Aprovado" sourceRef="Gateway_RoteamentoDecisao" targetRef="Task_LiberarCredito">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">
${resultadoDecisao.status == 'APROVADO_VIP' || resultadoDecisao.status == 'APROVADO_PADRAO'}
</bpmn:conditionExpression>
</bpmn:sequenceFlow>
💡 Análise Passo a Passo do Código
- Propriedade
camunda:decisionRef: Aponta o identificador exato da tabela DMN versionada no motor. - Mapeamento
singleResult: Converte a linha satisfeita da tabela em um mapa simples acessível por expressões JUEL no BPMN. - Condição Declarativa
${...}: Mantém a lógica do gateway focada exclusivamente na rota sem embutir regras de crédito.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto