Trilha 03 · DMN e regras de negócio
Tabela de decisão interativa
Aprenda lendo e editando tabelas reais. Ao final você saberá montar uma regra no Autoflow do zero — entradas, saídas, linhas, teste e publicação — e ligá-la ao fluxo.
Anatomia de uma tabela
Entradas
O que a regra lê. Cada entrada tem um nome (a variável do processo) e um tipo. Nas células vão testes: “maior que 5”, “igual a PF”.
Saídas
O que a regra devolve. Nas células vão valores: 15, “GROUP_ADMIN”, true.
Hit policy
A letra (U, F, C) diz o que fazer se mais de uma linha casar. Lição seguinte.
Uma linha casa quando todos os testes de entrada dela passam. As células de uma mesma linha são ligadas por “E”: a linha >= 60 / false significa “idade maior ou igual a 60 e sem determinação judicial”.
Laboratório
Use a tabela abaixo para praticar. Ela tem quatro exemplos — três deles reais, dos pacotes de segmento do Autoflow. Faça os exercícios sugeridos depois do componente.
Exercícios
- Prioridade de atendimento. Teste idade
59e60com judicialfalse. Por que>=e não>faz diferença aqui? (Casos de borda são onde regras mal escritas falham.) - Mesma tabela. Mude a primeira linha de
-para>= 60na coluna idade e teste idade 70 com judicialtrue. O que deixou de funcionar? (A ordem judicial deixou de valer para quem tem menos de 60.) - Prazo por ato. Teste
"AGRAVO". Qual linha respondeu? Agora apague a última linha e teste de novo. O que voltou? - Documentos por tipo de venda. Teste
"PF"e"PJ". Repare que COLLECT devolve vários valores. Troque a hit policy para FIRST e veja o que se perde. - Alçada de desconto. Teste 15. Quem aprova? E 15,01? Discuta com um colega se o cliente quis dizer “acima de 15” ou “a partir de 15”.
Um erro de > versus >= numa alçada pode fazer um desconto de exatamente 15% passar sem aprovação de diretoria. Em órgão público, pode tirar um idoso de 60 anos exatos da fila prioritária. Sempre pergunte ao cliente sobre o valor exato do limite e anote a resposta.
A sintaxe das células (FEEL simplificado)
As células de entrada usam testes da linguagem FEELFEEL — Friendly Enough Expression Language — linguagem das células DMN: > 10, [1..5], "PF", not("X").. Você vai usar quase sempre estes:
| Escreva | Significa | Exemplo |
|---|---|---|
- |
qualquer valor | linha “senão” |
> 5000 |
maior que | valor do pedido |
<= 10 |
menor ou igual | dias de atraso |
[1..10] |
entre 1 e 10, inclusive | faixa de pontuação |
"PF" |
texto exatamente igual | tipo de pessoa |
"A","B" |
um dos valores | tipos de ato com o mesmo prazo |
not("X") |
diferente de | tudo menos cancelamento |
true / false |
sim / não | tem procurador? |
A próxima lição sobre FEEL aprofunda intervalos abertos, datas e erros comuns.
Tipos de dados no Autoflow
No editor de regras do Autoflow, cada entrada e saída tem um tipo. Escolher o tipo certo evita erros e libera recursos especiais.
| Tipo na UI | Entrada | Saída | Para que serve |
|---|---|---|---|
| Texto | sim | sim | categorias, códigos: "PF", "APELACAO" |
| Número | sim | sim | valores, dias, percentuais |
| Data | sim | sim | datas de referência |
| Cargo | — | sim | devolve uma chave de cargo, conferida na publicação; pode virar o responsável de uma tarefa |
| Unidade | sim | — | decidir pela matriz/filial do processo |
| Documento | — | sim | só em “Junta o resultado de todas”: lista de documentos para a Solicitação de documentos |
Também existe o tipo sim/não (booleano) para entradas e saídas, como em precisaAprovacao.
Saída do tipo Cargo: responsável dinâmico
É um dos recursos mais poderosos. A regra alcadaDesconto devolve aprovador com tipo Cargo. No fluxo, a tarefa “Aprovar desconto” recebe como grupo candidato a expressão ${aprovador}. Resultado: se o desconto for 12%, a tarefa aparece na fila do Gerente de matriz; se for 20%, na do Administrador do grupo. Mudou a política de alçadas? Publique nova versão da regra. O fluxo não muda.
O editor de fluxos só aceita ${variavel} como grupo candidato se essa variável for saída do tipo Cargo de uma regra anterior (validação rule.positionVariable). E se a regra devolver vazio (nenhuma linha casou), a tarefa fica sem candidato — ninguém a vê. Por isso a linha “senão” é obrigatória na prática.
Saída do tipo Documento: lista de itens a pedir
Com a política “Junta o resultado de todas”, a regra docsPorTipoDeVenda devolve docsExigidos como uma lista separada por vírgulas: NOTA_FISCAL,CNH,COMPROVANTE_ENDERECO. No bloco Solicitação de documentos, o campo Itens a pedir recebe ${docsExigidos}, e o sistema pede só aqueles documentos. Pessoa física e jurídica passam pelo mesmo bloco, cada uma com sua lista.
Passo a passo: criar uma regra no Autoflow
- Abra Administração › Modelagem › Regras e crie uma nova regra. Dê uma chave estável (ela é usada pelo fluxo) e um nome legível.
- Declare as entradas em “Entradas (o que a regra lê)”. Use exatamente a mesma chave que o campo do formulário que alimenta aquele dado.
- Declare as saídas em “Saídas (o que a regra grava)”. Cada saída vira uma variável simples do processo com aquele nome.
- Escolha a política em “Quando mais de uma linha casa”.
- Preencha as linhas, terminando com a linha “senão”. Use a anotação para registrar o motivo ou a base legal.
- Clique em Testar. O Autoflow faz uma publicação temporária no motor real, avalia com os valores que você informou, mostra as saídas e destaca as linhas que casaram, e depois remove a publicação temporária. É o mesmo motor da produção: se passou no teste, vai funcionar.
- Salve rascunho enquanto ajusta; Publique quando estiver validada com o dono da regra.
- No fluxo, coloque o bloco Regra de negócio, escolha a regra e use as saídas nos gateways, no responsável das tarefas ou em “Itens a pedir”.
Ao escolher a regra no bloco, o editor gera a referência à decisão com vínculo “latest”, o mapeamento do resultado (único ou coleção) e um parâmetro de saída para cada saída da regra. Você não precisa escrever XML; o validador do editor também recusa publicar se a regra não existir (rule.unknown) ou não estiver escolhida (rule.missing).
Versões e assinatura
Uma regra também tem versões. Duas regras importantes para planejar mudanças:
- Vigência “latest”: a versão publicada vale na próxima avaliação de todos os processos, inclusive os que já estão rodando. Decisões já tomadas ficam gravadas como foram.
- Assinatura protegida: com a regra em uso por algum fluxo, uma nova versão não pode remover, renomear nem trocar o tipo de uma saída (erro
rule_signature_incompatible). Isso evita quebrar processos que dependem daquela variável. Precisa mudar a saída? Crie uma regra nova e troque o bloco no fluxo.
Resumo
- Linhas casam quando todos os testes de entrada passam (E lógico).
- Células de entrada são testes FEEL; células de saída são valores.
- No Autoflow há tipos especiais: Cargo (responsável dinâmico) e Documento (itens a pedir).
- Sempre feche com uma linha “senão” e teste os casos de borda.
- Testar usa o motor real; a versão publicada vale na próxima avaliação de todos os processos.