1. Introdução
Neste artigo, explicaremos em detalhes como funciona nosso aplicativo de exemplo de seguro-viagem. Começaremos com uma visão geral de todo o aplicativo web e de seus componentes e, em seguida, passaremos para uma descrição detalhada do Rule Flow que controla o processo de cálculo. Ao final deste artigo, você terá uma compreensão clara de como o aplicativo funciona e de como o Rule Flow controla todo o processo de cálculo.
Se você não sabe o que é um aplicativo de demonstração, confira nosso artigo anterior: decisionrules.io/articles/decisionrules-in-action.
Todos os aplicativos de exemplo disponíveis podem ser encontrados em samples.decisionrules.io.
2. Como o aplicativo funciona?
Antes de entrarmos na descrição do aplicativo web, do Rule Flow e das regras individuais no DecisionRules, é importante esclarecer o processo que ocorre durante a execução do aplicativo, bem como os dados com os quais ele trabalha.
2.1. Visão geral da execução do aplicativo
Execução do aplicativo de seguro-viagem: entrada, processamento do Rule Flow e saída calculada
- No aplicativo web, o usuário preenche todos os dados de entrada em um formulário simples.
- Depois que todos os dados de entrada são preenchidos e validados, inicia-se a comunicação em tempo real com o DecisionRules por HTTPS.
- O DecisionRules processa esses dados de entrada usando o Rule Flow e as regras individuais contidas nele e, em seguida, envia os dados de saída calculados de volta ao aplicativo web.
- O aplicativo web recebe esses dados de saída e os apresenta ao usuário.
2.2. Modelo de entrada e saída
Para entender completamente como todo o aplicativo funciona, é essencial saber quais dados são processados.
2.2.1. Exemplo de dados de entrada
2.2.2. Exemplo de dados de saída
Os dados de saída são usados no site para apresentar ao cliente o resultado do cálculo.
3. Descrição do aplicativo web
Rule Flow que orquestra os fatores de risco, o risco total e a precificação dos pacotes de seguro
O aplicativo web é composto por duas páginas principais:
- Na primeira página, há um formulário simples no qual o cliente pode escolher o período, o destino, o tipo de viagem, as atividades esportivas e o número de pessoas com suas respectivas idades (Entradas). Esses dados são então usados para calcular os preços de cada pacote de seguro. Além disso, há um rodapé na parte inferior da tela que mostra o preço-base dos pacotes (Saída), calculado em tempo real sempre que os valores de entrada mudam. Assim, os clientes podem ver como suas escolhas afetam o custo total do pacote de seguro.
- Na segunda página, há uma tabela com os diferentes pacotes de seguro (array de saída). Depois que os preços desses pacotes são calculados com base nos dados de entrada fornecidos na primeira página, eles são exibidos na tabela. Isso permite que os clientes vejam o custo específico de cada pacote de seguro e os comparem para tomar uma decisão bem informada. A tabela também inclui outras informações relevantes sobre os pacotes, como a cobertura de despesas médicas ou acidentes.
4. Descrição do Rule Flow e de suas regras individuais
4.1. Descrição do Rule Flow
Rule Flow que orquestra os fatores de risco, o risco total e a precificação dos pacotes de seguro
Todo o processo de cálculo no DecisionRules é controlado por este Rule Flow, que contém regras de diferentes tipos (Decision Tables e Scripting Rules). Na imagem acima, você pode ver o diagrama do Rule Flow.
Descrição do diagrama do Rule Flow:
- O Rule Flow recebe dados de entrada do aplicativo web. (Entrada)
- Na primeira seção, cada regra calcula seu próprio fator de risco, exceto a regra “Dates”, que calcula o número de dias da viagem. Os cálculos das regras se baseiam nos dados de entrada do aplicativo web.
- Na segunda seção, a regra “Total Risk Factor” calcula o risco geral da viagem a partir dos valores calculados anteriormente (fatores de risco e número de dias da viagem).
- Na terceira seção, são calculados os preços de cada pacote. O cálculo do preço depende do valor “totalRiskFactor”, calculado na etapa anterior.
- Por fim, o Rule Flow devolve os pacotes calculados ao aplicativo web, onde eles são apresentados ao usuário. (Saída)
4.2. Descrição das regras individuais
Cada regra tem uma função específica no cálculo do preço final do seguro, seja estimar o fator de risco, seja calcular os preços finais dos pacotes de viagem. O cálculo se baseia principalmente nos chamados fatores de risco, números entre 0 e 1 que determinam o grau de risco de cada dado de entrada. Há vários fatores de risco, como o fator de risco da região, o fator de risco da idade etc. Depois que todos os fatores individuais são estimados e o número de dias da viagem é calculado, os valores são inseridos em uma fórmula predefinida, que calcula o valor “totalRiskFactor” usado para determinar os preços finais dos pacotes. Os fatores de risco são comumente usados pelos responsáveis pelo negócio, que podem estimá-los e atualizar facilmente as regras com seus valores; as alterações são simples, não exigem implementação e são aplicadas com um clique.
Talvez você também tenha percebido que nosso Rule Flow usa algumas Scripting Rules. Ao projetar essas regras, consideramos mais adequado e eficiente colocar determinadas operações em Scripting Rules. Todas elas são usadas para trabalhar com dados de forma avançada ou modificá-los, mas é importante observar que essa não é a única abordagem disponível. Todas as Scripting Rules usadas neste exemplo podem ser substituídas por Decision Tables ou outras alternativas.
4.2.1. Dates (Decision Table)
Decision Table Dates calculando o número de dias da viagem
Esta regra é usada para calcular os dias da viagem. Ela recebe os valores “departureDate” e “arrivalDate” como entrada e retorna o número de dias da viagem. Para esse cálculo, usamos a função DATEDIFF(), que, como o nome sugere, calcula a diferença entre duas datas. Se quiser saber mais sobre a função DATEDIFF(), consulte nossa documentação.
4.2.2. Regras de continentes
Este conjunto de regras foi criado para estimar o valor continentsRiskFactor de um determinado array de continentes. A entrada das regras é um array de continentes, e a saída é um único valor que representa o fator de risco geral de todos os continentes contidos no array de entrada.
Para calcular o valor continentsRiskFactor, a Scripting Rule "Continents Script" chama a Decision Table "Continents" para determinar o fator de risco de cada continente no array de entrada. Os resultados da Decision Table são então devolvidos à Scripting Rule, que os soma em um único fator de risco geral.
Como exemplo, considere o seguinte array como entrada: \["europe","america"\]. Nesse caso, a Scripting Rule "Continents Script" chamará a Decision Table "Continents" para determinar os fatores de risco individuais do primeiro continente (“europe”) e do segundo continente (“america”). Em seguida, a Scripting Rule somará esses valores de fator de risco para produzir um fator de risco geral chamado continentsRiskFactor. Neste exemplo, o valor resultante de continentsRiskFactor seria "0.45".
4.2.2.1. Continents Script (Scripting Rule)
Esta Scripting Rule calcula o fator de risco total de um conjunto (um array) de continentes chamando uma Decision Table chamada "Continents" com os dados de entrada (array de continentes selecionados) como payload. A Decision Table retorna o fator de risco de cada continente. Esses valores são então mapeados e armazenados em um array chamado "continentsRiskFactorMapped". Em seguida, a Scripting Rule usa o método reduce() para somar todos os valores de "continentsRiskFactorMapped" e obter um único número que representa o fator de risco total dos continentes selecionados, “totalContinentsRiskFactor”. Esse número é arredondado para duas casas decimais para compensar o arredondamento decimal dos números de ponto flutuante binários do JavaScript. Esse fator de risco total arredondado é então definido como saída e retornado.
É importante observar que os usuários de negócio não precisam atualizar o script, que foi preparado como uma solução pronta; basta gerenciar a Decision Table com toda a configuração dos fatores de risco.
4.2.2.2. Continents (Decision Table)
Decision Table Continents usada para calcular o risco geográfico
Esta regra é usada para atribuir os valores dos fatores de risco a um determinado conjunto de continentes com base nas condições predefinidas. Ela recebe o array "continents" como entrada e retorna um array de valores "continentRiskFactor". Por exemplo, se o array de entrada for \["europe", "america"\], a saída será \[{"continentRiskFactor": 0.35}, {"continentRiskFactor": 0.1}\].
4.2.3. Travel Types (Decision Table)
Decision Table Travel Types com fatores de risco para cada tipo de viagem
Esta regra é usada para atribuir o fator de risco de um tipo específico de viagem com base nas condições predefinidas. Ela recebe o valor "travelType" como entrada e retorna o valor "travelTypeRiskFactor" correspondente. Por exemplo, se o valor de entrada for "study-visit", o valor de "travelTypeRiskFactor" será “0.4”.
4.2.4. Sport Activities (Decision Table)
Decision Table Sport Activities usada para calcular o risco das atividades
Esta regra é usada para atribuir o fator de risco de uma atividade esportiva específica com base nas condições predefinidas. Ela recebe o valor "sportActivities" como entrada e retorna o valor "sportRiskFactor" correspondente. Por exemplo, se o valor de entrada for "risk-sports", o valor de "sportRiskFactor" será “0.9”.
4.2.5. Idade das pessoas
Este conjunto de regras foi criado para estimar o valor peopleRiskFactor de um determinado array de pessoas e suas idades. A entrada das regras é um array de objetos, no qual as idades individuais são propriedades dos objetos, e a saída é um único valor que representa o fator de risco geral de todas as pessoas do array.
Para calcular o valor peopleRiskFactor, a Scripting Rule "People's Age Script" chama a Decision Table "People's Age" para determinar o fator de risco de cada pessoa no array de entrada. Os resultados da Decision Table são então devolvidos à Scripting Rule, que os soma em um único fator de risco geral.
Como exemplo, considere o seguinte array como entrada: \[{"age": 18}, {"age": 26}\]. Nesse caso, a Scripting Rule "People's Age Script" chamará a Decision Table "People's Age" para determinar os fatores de risco individuais da primeira pessoa (idade: 18) e da segunda pessoa (idade: 26). Em seguida, a Scripting Rule somará esses valores de fator de risco para produzir um fator de risco geral chamado peopleRiskFactor. Neste exemplo, o valor resultante de peopleRiskFactor seria "0.75".
4.2.5.1. People’s Age Script (Scripting Rule)
Esta Scripting Rule calcula o fator de risco total de um determinado array de pessoas com base em suas idades. Ela chama uma Decision Table chamada "People's Age" com os dados de entrada (ou seja, o array de objetos, em que a idade de cada pessoa é uma propriedade do objeto correspondente) como payload. Devido à estrutura da Decision Table “People's Age", a chamada usa a estratégia de resolução FIRST\_MATCH para funcionar como esperado. A Decision Table retorna o fator de risco de cada pessoa. Esses valores são então mapeados e armazenados em um array chamado "peopleRiskFactorsMapped". Em seguida, a Scripting Rule usa o método reduce() para somar todos os valores de "peopleRiskFactorsMapped" e obter um único número que representa o fator de risco total das pessoas selecionadas (totalAgeRiskFactor). Esse número é arredondado para duas casas decimais para compensar o arredondamento decimal dos números de ponto flutuante binários do JavaScript. Esse fator de risco total arredondado é então definido como saída e retornado.
Mais uma vez, é importante observar que os usuários de negócio não precisam atualizar o script, preparado como uma solução pronta, pois o cálculo é controlado pelos parâmetros da Decision Table.
4.2.5.2. People’s Age (Decision Table)
Decision Table People’s Age usada para calcular o risco relacionado à idade
Esta regra é usada para atribuir o fator de risco de uma faixa etária com base nas condições predefinidas. Ela recebe o valor "age" como entrada e retorna o valor "ageRiskFactor" correspondente. Por exemplo, se o valor de entrada for "23", o valor de "ageRiskFactor" será “0.4”. É importante observar que, devido à estrutura desta Decision Table, precisamos usar a estratégia de resolução FIRST\_MATCH; caso contrário, a regra retornará todos os resultados que atendam às condições.
4.2.6. Total Risk Factor (Decision Table)
Cálculo do Total Risk Factor combinando as entradas de risco da viagem
Esta regra é usada para calcular o fator de risco total. Ela recebe como entradas todos os fatores de risco calculados e o número de dias da viagem e retorna o valor totalRiskFactor. O totalRiskFactor é calculado com uma fórmula provisória mostrada na imagem acima, que pode ser substituída por uma fórmula mais precisa a qualquer momento.
Vale mencionar que, neste exemplo, não precisamos usar nenhuma condição para esta regra. No entanto, as Decision Tables geralmente exigem pelo menos uma condição. Portanto, precisamos usar uma condição provisória como "peopleRiskFactor == anything", pois ela sempre será avaliada como verdadeira.
4.2.7. Pacotes
Este conjunto de regras calcula os preços finais dos pacotes com base no totalRiskFactor. A entrada dessas regras é o valor totalRiskFactor, e a saída é um array de objetos de pacotes calculados individualmente, que podem ser facilmente modificados na Decision Table.
Esta Scripting Rule é usada apenas para formatar os valores de retorno. Ela chama uma Decision Table chamada "Packages" com o valor totalRiskFactor como payload e retorna os pacotes calculados como saída.
4.2.7.2. Packages (Decision Table)
Decision Table Packages calculando preços a partir do fator de risco total
Esta regra é usada para criar, excluir, gerenciar e calcular os preços dos pacotes. Ela recebe totalRiskFactor como entrada e retorna os pacotes calculados. Os preços dos pacotes são calculados por meio de uma fórmula provisória mostrada na imagem acima, que pode ser substituída por uma fórmula mais precisa a qualquer momento. O cálculo do preço usa a função ROUND(), que, como o nome sugere, arredonda o número — neste caso, para duas casas decimais.
Você pode adicionar mais pacotes facilmente duplicando um dos pacotes existentes e editando seus dados. Como alternativa, pode alterar rapidamente o cálculo do preço modificando a fórmula de cálculo. As possibilidades de modificação são praticamente ilimitadas.
Vale mencionar que, neste exemplo, não precisamos usar nenhuma condição para esta regra. No entanto, as Decision Tables geralmente exigem pelo menos uma condição. Portanto, precisamos usar uma condição provisória como "peopleRiskFactor == anything", pois ela sempre será avaliada como verdadeira."
5. Conclusão
Neste artigo, apresentamos uma visão abrangente de nosso aplicativo de exemplo. Começamos explorando o aplicativo web e, em seguida, analisamos em detalhes o Rule Flow e suas regras individuais. Esperamos que essas informações tenham sido úteis e que agora você entenda melhor como nosso aplicativo de exemplo funciona.
Se quiser saber mais sobre como o DecisionRules pode ajudar e beneficiar sua empresa, visite nosso site ou nossa página no LinkedIn. Você também pode conversar com nossos especialistas sobre seu caso de uso específico ou sobre os recursos do DecisionRules. Nossa equipe de vendas está disponível para responder a qualquer dúvida e terá prazer em agendar uma demonstração para que você veja o DecisionRules em ação.
Agradecemos a leitura!