1. Conceito do Motor de Regras
O conceito fundamental do motor de regras é permitir que as regras de negócio sejam expressas e implementadas de forma independente do código-fonte do Portal de Entradas. Em vez de codificar as regras diretamente no código (hardcode), as regras são configuradas no motor de regras, o que oferece maior flexibilidade e facilidade na manutenção e atualização das regras.
O motor de regras segue uma abordagem baseada em parâmetros de ativação e efeitos. Os parâmetros de ativação são expressões lógicas que avaliam os dados de entrada, enquanto os efeitos são as instruções executadas quando os parâmetros de ativação são satisfeitos. As regras podem ser compostas por múltiplos parâmetros de ativação e efeitos, permitindo a criação de lógica de negócio complexa.
2. Principais benefícios de utilizar o motor de regras
Os principais benefícios contribuem para otimizar operações, reduzir erros e custos, e melhorar a eficiência global dos processos de negócio. Aqui estão alguns deles:
-
Agilidade e flexibilidade: O motor de regras permite que as regras de negócio sejam configuradas e atualizadas de forma ágil, sem a necessidade de modificar o código-fonte da aplicação. Isso permite responder rapidamente a mudanças nas regras e nos requisitos do negócio, sem a necessidade de longos ciclos de desenvolvimento e implantação.
-
Precisão e consistência: Ao automatizar processos e tomadas de decisão por meio de um motor de regras, é possível garantir que as regras sejam aplicadas de forma consistente, sem erros humanos ou variações. Isso melhora a precisão dos resultados e evita discrepâncias ou inconsistências nas operações.
-
Transparência e auditoria: Um motor de regras permite ter uma visão clara e transparente das regras de negócio aplicadas. Isso facilita a compreensão e a verificação da lógica por trás das decisões tomadas, sendo especialmente útil em setores regulados, nos quais é necessário garantir a conformidade com normas e regulamentações.
-
Escalabilidade: Com um motor de regras, é possível lidar com grandes volumes de dados e processos de forma escalável. As regras podem ser aplicadas a múltiplos registros ou eventos de forma eficiente, permitindo o processamento rápido e eficaz de tarefas repetitivas.
-
Facilidade de manutenção: Separar as regras de negócio do código-fonte da aplicação simplifica a manutenção do sistema. As regras podem ser atualizadas ou modificadas independentemente da aplicação, reduzindo os riscos de impacto em outras partes do sistema. Isso facilita a evolução e a adaptação do sistema às mudanças do negócio ao longo do tempo.
3. Etapas da esteira Invoice2Pay
4. Tempo de execução das regras: BEFORE e AFTER
Para entender o tempo de execução das regras é essencial entender o que o corre no processamento feito no código-fonte de cada step (detalhado no item 3). No contexto do motor de regras, os termos "BEFORE" e "AFTER" referem-se aos momentos em que as regras são executadas durante o fluxo de processamento da esteira.
BEFORE: As regras "BEFORE" são executadas antes da ação ou processamento principal ocorrer (aquele feito no código-fonte do step). Elas são usadas para realizar validações, tomar decisões preliminares ou realizar modificações nos dados de entrada antes que qualquer ação seja realizada. As regras "BEFORE" podem ter a finalidade de preparar o contexto para a ação principal ou filtrar eventos indesejados.
AFTER: As regras "AFTER" são executadas após a ação principal ou processamento ter ocorrido (aquele feito no código-fonte do step). Elas são usadas para realizar ações adicionais ou tomar decisões com base nos resultados, ou nos dados gerados pela ação principal. As regras "AFTER" são geralmente usadas para lidar com ações secundárias ou tarefas complementares.
5. Banco de dados e principais collections
O banco de dados é uma estrutura organizada para armazenar e gerenciar dados e também funciona como suporte a consultas e análises de dado. Todas as informações visíveis na esteira estão dentro do banco de dados (e muito mais).
Os dados são estruturados e organizados de acordo com um modelo específico e é aí que entram as collections. De forma simplificada, imagine que você tem um armário com várias gavetas. Cada gaveta pode armazenar diferentes tipos de objetos, como roupas, documentos, utensílios de cozinha, entre outros. Cada gaveta pode conter um conjunto de itens relacionados, mas diferentes entre si. Agora, pense em um banco de dados como esse armário e as gavetas como as collections. Uma collection é como uma gaveta em um banco de dados, onde você pode armazenar informações relacionadas. No banco de dados, você pode ter várias collections, assim como você pode ter várias gavetas num armário.
As principais collections para uso no dia-a-dia são:
-
file: armazena dados sobre o arquivo e não o conteúdo dele em si. Exemplo: classificação, master, formato (pdf, xml, etc), data de entrada, nome de exibição do arquivo, origem (e-mail, baixa automática, upload, etc), usuário que fez o envio, status da integração no ERP, etc;
-
file-content: armazena dados do conteúdo do arquivo. Exemplo: dados do emitente, dados do destinatário, data de emissão, valor total, valor líquido, número do pedido de compra / folha de serviço / contrato guarda-chuva, código de serviço, produtos (código, ncm, cest, etc), valores de tributos destacados no documento fiscal, chave de acesso, código de autenticação, etc;
-
relationships: armazena os dados dos vínculos. Essa collection é basicamente um compilado de alguns dados referente aos documentos vinculados;
-
tax-analysis: armazena dados referentes a tela de Análise Fiscal. Exemplo: alíquotas de impostos retidos da coluna documento, minha base, robô ROIT e base legal. Além disso, também traz dados do emitente e destinatário do documento fiscal conforme collection file-content;
-
purchase-order, service-link e service-sheets: armazena os dados referente ao Pedido de Compra, Contrato Guarda-Chuva e Folha de Serviço. Exemplo: dados do fornecedor, dados do destinatário, serviço, itens (descrição, ncm, cest, etc), valores, quantidades, forma e condição de pagamento, número do Pedido de Compra / Contrato Guarda-Chuva / Folha de Serviço, etc.
6. Metadados
Um metadado fornece informações sobre um arquivo principal. Ele descreve características do arquivo, como seus atributos, origem e outros detalhes relevantes.
Imagine que você tem um álbum de fotos no seu computador. Os metadados podem incluir informações sobre quando e onde as fotos foram tiradas, as configurações da câmera utilizada, as pessoas na foto, etc. Essas informações adicionais permitem que você encontre fotos específicas com base em critérios de busca, como local ou data.
Tipos / Formatos de metadados:
-
String: é um tipo de dado que representa um texto. Pense em uma sequência de caracteres, como palavras, frases ou até mesmo uma única letra. Por exemplo, "Olá, mundo!" é uma string. As strings podem conter letras, números, símbolos e espaços. Elas são amplamente utilizadas para armazenar e manipular informações de texto em computadores.
-
Number: é um tipo de dado que representa um valor numérico. Isso inclui tanto números inteiros (como 1, 10, -5) quanto números decimais (como 3.14, 2.5). Os números são usados para realizar cálculos matemáticos e quantificar valores em diferentes contextos, como quantidades, medidas e valores monetários.
-
Array: é uma estrutura de dados que permite armazenar vários valores relacionados em uma única variável. É como uma lista de itens. Por exemplo, imagine uma lista de compras contendo itens como "maçã", "pão" e "leite". Cada item seria um elemento do array. Os arrays podem armazenar qualquer tipo de dado, como strings, números e até mesmo outros arrays. Eles são úteis quando você precisa trabalhar com um conjunto de valores relacionados.
-
Date: é um tipo de dado que representa uma data específica. As datas são usadas para registrar eventos, agendar compromissos, calcular durações e realizar operações relacionadas ao tempo. Elas podem incluir informações como dia, mês, ano, hora e minuto. No banco de dados a data está no formato ISO 8601 (yyyy-MM-ddTHH:mm:ssZ)
-
Boolean: é um tipo de dado que representa um valor lógico, indicando verdadeiro ou falso. É como responder a uma pergunta com "sim" ou "não". Por exemplo, ao perguntar se está chovendo, a resposta pode ser verdadeiro (sim, está chovendo) ou falso (não, não está chovendo). Os booleanos são usados para tomar decisões e controlar o fluxo de um programa com base em condições verdadeiras ou falsas.
7. Verificando se um metadado está configurado no motor de regras
Para verificar se um metadado está configurado para uso, acesse o motor de regras e clique em “Configurações”. Depois pesquise pelo metadado e verifique se ele irá aparecer nos resultado da busca.
As principais formas de fazer a busca são por meio de:
-
“Data Key”, que é como o dado está estruturado no banco de dados; e
-
“Description”, que é o nome/descrição que foi dado ao metadado por quem o configurou.
Exemplo do print abaixo: metadado do código de serviço com busca através do “Data Key” (file-content.serviceCode)
8. Como criar e gerenciar regras no motor
8.1 Ativação da Regra
Os parâmetros de ativação de uma regra em um motor de regras são as condições ou critérios que determinam se a regra deve ser executada ou não. Esses parâmetros são definidos com base nas características específicas dos dados de entrada. Normalmente, os parâmetros de ativação consistem em uma ou mais cláusulas condicionais que devem ser atendidas para que a regra seja acionada. Essas cláusulas podem incluir comparações, operações lógicas e outros tipos de expressões condicionais.
Exemplos:
-
Comparação: verificar se uma determinada variável ou atributo possui um valor específico, como "valor > 50000".
-
Combinação de condições: verificar se várias condições são verdadeiras ao mesmo tempo, usando operadores lógicos, como "valor > 50000 && valor < 100000".
-
Uso de funções ou métodos: chamar funções ou métodos específicos para avaliar condições complexas, como unificar a CSRF para integração.
-
Mais critérios incluem: data maior que, data menor que, é igual, maior igual que, maior que, menor igual que, menor que, é vazio, contém no texto, é diferente, etc.
8.2 Condições
É onde o ROIT Forms é utilizado para solicitar informações extras. Sempre será exibido em tela e também pode ser enviado via e-mail (se necessário);
Configurações de Grupos de usuários
Nas configurações das condições, podemos definir os emails utilizados com base em emails fixos, dinâmicos com metadados ou também com os emails definidos nos Grupos de usuários (opção disponível nas configurações do admin).
Para criar novas opções na listagem do campo, podemos configurar metadados para vincular com grupos de usuários.
Grupos de emails nos componentes
8.3 Efeitos
Os efeitos podem variar amplamente, dependendo do propósito da regra. Alguns exemplos comuns de efeitos incluem:
-
Definição de valores: A regra pode definir valores para variáveis ou atributos com base nas condições definidas. Por exemplo, uma regra pode definir o atributo "file.message" (status) de um arquivo como “Divergência documento x Robô ROIT” quando a Análise Fiscal apontar alguma divergência.
-
Ativação de eventos: A regra pode desencadear a ativação de eventos, como, por exemplo, a ativação de alguma API (Documentos Processados / Integrações).
-
Execução de ações: A regra pode executar ações específicas, como, por exemplo, unificar os impostos da CSRF para integração no ERP.
-
Modificação do fluxo: A regra pode influenciar o fluxo de execução do sistema, direcionando-o para diferentes caminhos, como, por exemplo, excluir, pular ou avançar o arquivo para uma etapa específica da esteira.
É importante considerar cuidadosamente os efeitos das regras e garantir que eles sejam consistentes com as necessidades e objetivos do cliente, bem como do processo de hiperautomação que a ROIT propõe através do Portal de Entradas. Além disso, é importante realizar testes e validações adequados para verificar se os efeitos das regras estão ocorrendo conforme o esperado e se estão produzindo os resultados desejados.
8.4 Notificações
O disparo de uma notificação quando uma regra é ativada envolve o envio de um e-mail para um ou mais destinatários, informando sobre um evento ou condição específica acionada pelo motor de regras. Esse recurso é frequentemente utilizado para fornecer informações em tempo real e permitir que as partes interessadas ajam prontamente com base nos eventos ocorridos.
Para configurar um template basta clicar no ícone da engrenagem, conforme print abaixo:
O template é formatado em HTML e para correto funcionamento, o assunto e todos os parâmetros devem ser preenchidos (conforme print abaixo). Também é possível enviar o arquivo anexo.
Grupos de usuário
No uso notificações, podemos utilizar os emails dos usuários cadastrados nos Grupos de usuários disponível na parte dos admins.
.png?width=688&height=109&name=17e15681-596c-4622-8eee-3d77760595a8%20(1).png)
Podemos optar por usar um grupo ao selecionar a opção “Usar grupos”, com isso todos os emails cadastrados no grupo vão ser utilizados no envio.
Nessa utilização precisamos selecionar um campo dinâmico que está sendo usado como classificação nos grupos de usuário.
Documentação com detalhes de uso das classificações: Grupos de emails nos componentes
8.5 Aplicação da Regra de Negócio

8.6 Ordem de execução
Recurso que permite a organização da ordem de execução de regras e a validação de outras regras para a execução da regra em questão.
Critérios da Ordem de execução.
"Se a regra XXXXX for verdadeira, processar essa regra": nesse critério, a regra que está em tela será processada apenas se a regra que foi inserida na ordem de execução for verdadeira, ou seja, se for ativada.
-
Retorna TRUE se a regra XXXXX for compatível.
-
Retorna FALSE se a regra XXXXX não for compatível
"Se a regra XXXXX for negativo, processar essa regra": nesse critério, a regra que está em tela será processada apenas se a regra que foi inserida na ordem de execução for falsa.
-
Retorna FALSE se a regra XXXXX for compatível
-
Retorna TRUE se a regra XXXXX não compatível
"Se a regra XXXXX for verdadeira, não processar essa regra": nesse critério, a regra que está em tela não será processada se a regra que foi inserida na ordem de execução for verdadeira.
-
Retorna FALSE se a regra XXXXX for compatível
-
Retorna TRUE se a regra XXXXX não for compatível
"Se a regra XXXXX for negativo, não processar essa regra": nesse critério, a regra que está em tela não será processada se a regra que foi inserida na ordem de execução for falsa.
-
Retorna TRUE se a regra XXXXX for verdadeira
-
Retorna FALSE se a regra XXXXX for falsa
Existem dois tipos de condicionais AND e OR.
Com base no resultado de cada ordem de execução inserida é feita a lógica de compatibilidade.
Exemplo:
Levando em conta que temos uma regra (REGRA 1) que possui uma ordem de execução com 3 regras com a composição AND, e que ambas possuem a regra “For verdadeira, não processar essa regra”.
Sendo que a REGRA 2 e REGRA 3. São verdadeiras e são executadas no arquivo em questão e a REGRA 4, não é executada
REGRA COM AND.
Teremos os seguintes resultados
-
REGRA 2 = FALSE
-
REGRA 3 = FALSE
-
REGRA 4 = TRUE.
Ao final do processo isso é levado a um agrupamento lógico e temos o seguinte resultado:
(FALSE AND FALSE AND TRUE) = FALSE
Portanto, como obtivemos o resultado FALSE, a REGRA 1 não vai ser executada.
REGRA COM OR.
Se levarmos o mesmo cenário em consideração, mas utilizando o operador OR, vamos ter:
-
REGRA 2 = FALSE
-
REGRA 3 = FALSE
-
REGRA 4 = TRUE
(FALSE OR FALSE OR TRUE) = TRUE
Portanto, como obtivemos o resultado FALSE, a REGRA 1 vai ser executada.
Usar mais de um grupo de regras.
Usando a mesma situação acima e mais um conjunto que resulta em um resultado verdadeiro, temos a seguinte situação.
No final do processo, cada conjunto sempre vai ser unido em uma condicional AND, sendo assim temos:
CONJUNTO 1: FALSO
CONJUNTO 2: TRUE
(FALSE AND TRUE) = FALSE
Portanto, como obtivemos o resultado FALSE, a REGRA 1 não vai ser executada.