DSL - Funções e Variáveis
A DSL (Domain-Specific Language) do Wisedit é a linguagem utilizada dentro dos nós de Processamento e Condicionais para calcular valores, formatar textos, manipular datas e definir a lógica do seu fluxo.
⚠️ A DSL é uma linguagem fechada. Não é JavaScript e não permite criar funções próprias, usar métodos nativos de string/array (
.replace(),.toUpperCase(), etc.) ou importar bibliotecas externas. Apenas os operadores e funções nativas prefixadas com@listados nesta documentação estão disponíveis.
1. O Editor de Funções (Atalhos e Ícones)
Seção intitulada “1. O Editor de Funções (Atalhos e Ícones)”Para facilitar a escrita da sua lógica e evitar erros de digitação ao buscar variáveis do sistema, o editor de código do Wisedit possui um menu inteligente de sugestões (autocomplete) e identificação visual de tipos de dados.
Menu de Sugestões (Autocomplete)
Seção intitulada “Menu de Sugestões (Autocomplete)”Para abrir o menu de sugestões de variáveis, funções e constantes diretamente no código, posicione o cursor de texto e utilize o atalho do seu sistema operacional:
- Windows / Linux:
CTRL + ESPAÇO - macOS:
CTRL + ESPAÇO
Ao abrir o menu, o sistema apresenta duas categorias principais: Base e Operadores. Você também pode invocar as opções de base digitando diretamente seus respectivos gatilhos no teclado:
@— Palavras reservadas e funções (ex:@if,@now()).$[— Constantes de API (usado para buscar valores de tabelas e retornos estruturados).${— Variáveis do sistema (os campos que você declarou no Início do fluxo ou mapeou nos nós anteriores).
Tipagem Visual de Variáveis
Seção intitulada “Tipagem Visual de Variáveis”Ao selecionar uma variável através do menu, ela será inserida no editor em formato de um “bloco” visual (badge). Cada bloco possui um ícone à esquerda que indica rapidamente qual é o tipo de dado daquela variável, ajudando você a evitar erros de formatação:
Tt(Texto): Indica variáveis do tipo String (ex: Nomes, Status, Textos).#(Sustenido): Indica variáveis numéricas, como Inteiros ou Floats (ex: Distâncias, Valores monetários, Idades).✓(Visto / Check): Indica variáveis do tipo Booleano (ex:trueoufalse).- 📅 (Calendário): Indica variáveis do tipo Data ou Data/Hora (ex: Data de Nascimento).
⚠️ Regra Importante de Tipagem: Campos complexos do tipo array e objeto possuem uma limitação. Eles só podem ser usados dentro do mapeamento do retorno de integrações (Nó de Requisição). Eles não podem ser manipulados como variáveis simples diretamente no editor de funções.
2. Operadores Nativos da DSL
Seção intitulada “2. Operadores Nativos da DSL”A DSL possui operadores nativos que não são funções, mas sim parte da sintaxe da linguagem.
Operadores Lógicos
Seção intitulada “Operadores Lógicos”&&— E lógico||— OU lógico!— NEGAÇÃO
Operadores de Comparação
Seção intitulada “Operadores de Comparação”==— Igual!=— Diferente>— Maior que<— Menor que>=— Maior ou igual<=— Menor ou igual
Operadores Aritméticos
Seção intitulada “Operadores Aritméticos”+— Soma-— Subtração*— Multiplicação/— Divisão
⚠️ Comparações de string são case-sensitive.
"REGULAR" == "regular"retornafalse. Para comparações seguras, normalize o valor antes com@uppercase()ou@lowercase().
Exemplo de uso:
// Validar aprovação por range de pontuação@if(${Pontuacao Cliente} >= 11 && ${Pontuacao Cliente} <= 100) { @var RespostaRegra = "Aprovado"; @return true;} @else { @return false;}Exemplo de comparação case-sensitive:
// ✅ Comparação segura (normalizada)@if(@uppercase(${statusContrato}) == "REGULAR") { @return true;}
// ❌ Pode falhar se o valor vier como "regular" ou "Regular"@if(${statusContrato} == "REGULAR") { @return true;}3. Variáveis
Seção intitulada “3. Variáveis”@var — Declaração de variáveis locais
Seção intitulada “@var — Declaração de variáveis locais”- Máscara de uso:
@var nome = expressão - Retorno: Depende da expressão atribuída.
- Descrição: Declara uma variável local ao nó, obrigatoriamente com valor inicial.
Descrição detalhada:
- Escopo local ao nó (não compartilhada entre nós).
- Pode receber literais, operações matemáticas, funções e referências globais/constantes.
- Suporta constantes globais (
$[ids.path]), variáveis globais (${id}), operações (+,-,*,/) e funções (@tostring,@toint,@tofloat,@totimestamp,@max,@min,@round,@sanitized,@uppercase,@lowercase,@day,@month,@year,@sen,@cos). - Para acessar o valor posteriormente, use
${nome_variavel}.
Exemplos:
// ✅ Válido@var idade = 20@var valorMax = @max($[salarios.valor])@var total = ${valor1} + ${valor2}@var idade_anos = @datediff(@now(), ${data_nascimento}, 'years')
// Recuperando constantes de uma integração@var mesesComConsumo = $[IntegracaoEnergia.mesesComConsumo];@var statusInstalacao = $[IntegracaoEnergia.statusInstalacao];
// ❌ Inválido (Declaração sem atribuição)@var maior;4. Controle de Fluxo
Seção intitulada “4. Controle de Fluxo”@if/@else
Seção intitulada “@if/@else”- Máscara de uso:
@if(expressaoBooleana) { bloco } @else { bloco } - Descrição: Executa blocos condicionais. O bloco
@elseé opcional.
Descrição detalhada:
- Aceita expressões booleanas que envolvem variáveis e constantes locais ou globais.
- Respeita semântica de tipos (ex.: number com number).
Tooltip da DSL: Executa blocos condicionais baseado em uma expressão booleana. Como usar:
@if(expressaoBooleana) { bloco } @else { bloco }
Exemplo:
// Validar maioridade@var idade = @datediff(@now(), ${data_nascimento}, 'years')@if(${idade} >= 18) { @return true} @else { @return false}// ❌ Inválido (comparação de tipos diferentes)@if("10" > 5) { }- Máscara de uso:
@for(fonte as alias) { bloco } - Descrição: Percorre arrays, expondo um alias para cada item. Não possui condição de parada automática (estilo foreach).
Descrição detalhada:
- Itera sobre cada elemento do array informado em
fonte. - O
aliasrepresenta o item atual da iteração. - Permite o uso de todas as outras funções dentro do bloco.
- Aceita arrays via path (
$[array.path]) ou variáveis (${array}).
Tooltip da DSL: Percorre arrays, expondo um alias para cada item. Não possui condição de parada (foreach). Como usar:
@for(fonte as alias) { bloco }
Exemplo:
// Somar todos os valores de uma lista@var total_valores = 0@for($[lista_valores] as item) { @var total_valores = ${total_valores} + ${item.valor}}@if(${total_valores} > 15000) { @return false} @else { @return true}// Mapeando dados geográficos baseados em UF e Cidade@for($[BaseLatitudeLongitude.CidadesBR] as base) { @if(${UF Cliente} == ${base.UFGenerico} && ${Cidade Cliente} == ${base.CidadeGenerico}) { @var LatitudeCliente = ${base.LatitudeGenerica}; @var LongitudeCliente = ${base.LongitudeGenerica}; @break; }}@return true;// ❌ Inválido (faltou 'as alias')@for($[lista_valores]) { }@return
Seção intitulada “@return”- Máscara de uso:
@return trueou@return false - Descrição: Finaliza o script e retorna um booleano. Obrigatório para nós condicionais.
Descrição detalhada:
- Encaminha o resultado ao orquestrador e encerra a execução imediatamente.
- Deve retornar
trueoufalse(boolean obrigatório para nós condicionais).
Exemplo:
@if(${score} >= 600) { @return true} @else { @return false}// ❌ Inválido (tipo incorreto)@return "true"- Máscara de uso:
@break - Descrição: Interrompe imediatamente a execução de um loop
@for.
Descrição detalhada:
- Faz com que a execução continue após o bloco do loop.
- Útil para otimizar busca quando o elemento desejado é encontrado.
- Só pode ser usado dentro de blocos
@for.
Tooltip da DSL: Interrompe a execução do loop
@forimediatamente. Só pode ser usado dentro de loops.
Exemplo:
@var encontrado = false@for(${lista} as item) { @if(${item} > 100) { @var encontrado = true @break }}@return ${encontrado}// ❌ Inválido (usado fora de um loop)@break5. Conversão de Tipos
Seção intitulada “5. Conversão de Tipos”@tostring(valor)
Seção intitulada “@tostring(valor)”- Máscara de uso:
@tostring(valor) - Retorno:
string - Descrição: Converte um valor para string. Aceita números, booleanos, datas, variáveis ou constantes.
Tooltip da DSL: Converte um valor para string. Aceita números, booleanos, datas, variáveis ou constantes. Exemplo:
@var idStr = @tostring(${1234})
Exemplo:
// ✅ Válido@var idStr = @tostring(${1234})
// ❌ Inválido (argumento ausente)@var s = @tostring()@toint(valor)
Seção intitulada “@toint(valor)”- Máscara de uso:
@toint(valor) - Retorno:
number(inteiro) - Descrição: Converte valor para inteiro. Aceita strings ou floats e trunca valores decimais.
Tooltip da DSL: Converte valor para inteiro. Aceita strings ou floats e trunca valores decimais. Exemplo:
@var idade = @toint("20")
Exemplo:
// ✅ Válido@var idade = @toint("20")
// ❌ Inválido (truncamento ou erro de tipo)@var n = @toint("10.5")@tofloat(valor)
Seção intitulada “@tofloat(valor)”- Máscara de uso:
@tofloat(valor) - Retorno:
number(float) - Descrição: Converte um valor para número decimal (float). Aceita string numérica, int ou expressão. Falha se contiver caracteres não numéricos.
Tooltip da DSL: Converte um valor para número decimal (float). Aceita string numérica, int ou expressão. Exemplo:
@var preco = @tofloat("3500.00")
Exemplo:
// ✅ Válido@var preco = @tofloat("3500.00")
// ❌ Inválido (contém caracteres não numéricos)@var n = @tofloat("R$ 10")Exemplo de uso combinado (Comparando distâncias decimais):
@if(@tofloat(${Calculo Distancia}) > @tofloat(${Distancia Minima}) && @tofloat(${Calculo Distancia}) < @tofloat(${Distancia Maxima})) { @var RespostaDistancia = "AprovadoDistancia";} @else { @var RespostaDistancia = "ReprovadoDistancia";}6. Matemática Básica
Seção intitulada “6. Matemática Básica”@sum(valor1, valor2, ...)
Seção intitulada “@sum(valor1, valor2, ...)”- Máscara de uso:
@sum(valor1, valor2, ...) - Retorno:
number - Descrição: Soma todos os valores numéricos fornecidos como argumentos. Aceita múltiplos valores separados por vírgula.
Tooltip da DSL: Soma todos os valores fornecidos. Aceita múltiplos argumentos. Exemplo:
@var total = @sum(${valor1}, ${valor2}, ${valor3})
Exemplo:
// Somar valores de diferentes fontes@var total = @sum(${valor_fonte_a}, ${valor_fonte_b}, ${valor_fonte_c})@if(${total} > 15000) { @return false} @else { @return true}// ❌ Inválido (nenhum argumento fornecido)@var s = @sum()@max(array.path)
Seção intitulada “@max(array.path)”- Máscara de uso:
@max($[array.path]) - Retorno:
number - Descrição: Retorna o maior valor de um array numérico. Path deve referenciar array de números. Aceita apenas arrays via path (
$[array.path]).
Tooltip da DSL: Retorna o maior valor de um array numérico. Exemplo:
@var valor = @max($[salarios_recentes.valor])
Exemplo:
// Encontrar maior valor em array@var valor = @max($[salarios_recentes.valor])@if(${valor} > 15000) { @return false} @else { @return true}// ❌ Inválido (não numérico)@var m = @max($[cargo])@min(array.path)
Seção intitulada “@min(array.path)”- Máscara de uso:
@min($[array.path]) - Retorno:
number - Descrição: Retorna o menor valor de um array numérico. Path deve referenciar array de números. Aceita apenas arrays via path (
$[array.path]).
Tooltip da DSL: Retorna o menor valor de um array numérico. Exemplo:
@var valor = @min($[scores.valor])
Exemplo:
// Encontrar menor valor em array@var menor_valor = @min($[scores.valor])@if(${menor_valor} < 300) { @return false} @else { @return true}// ❌ Inválido (não numérico)@var m = @min($[cargo])@round(numeroOuPath)
Seção intitulada “@round(numeroOuPath)”- Máscara de uso:
@round(numeroOu$[array.path]) - Retorno:
number(inteiro) - Descrição: Arredonda valores numéricos para o inteiro mais próximo. Aceita número ou array path. Exemplo:
1234.51→1235,1234.49→1234.
Tooltip da DSL: Arredonda valores numéricos para o inteiro mais próximo. Aceita número ou array path. Exemplo:
@var valor = @round(1234.51)// retorna 1235
Exemplo:
// Arredondar valor calculado para inteiro@var parcela = @round(${valor_total} / ${num_parcelas})// 1234.51 → 1235@if(${parcela} <= (${renda} * 0.30)) { @return true} @else { @return false}7. Trigonometria
Seção intitulada “7. Trigonometria”Essas funções são vitais para cálculos avançados, como o georreferenciamento (distância entre duas coordenadas).
@sen(angulo) ou @sin(angulo)
Seção intitulada “@sen(angulo) ou @sin(angulo)”- Máscara de uso:
@sen(anguloGraus)ou@sin(anguloGraus) - Retorno:
number(-1 a 1) - Descrição: Retorna o seno de um ângulo em graus.
Tooltip da DSL: Retorna seno de um ângulo em graus. Aceita números. Exemplo:
@var s = @sen(45)
Exemplo:
// ✅ Válido@var s = @sen(45)
// ❌ Inválido (valor não numérico)@var s = @sen("45°")@cos(angulo)
Seção intitulada “@cos(angulo)”- Máscara de uso:
@cos(anguloGraus) - Retorno:
number(-1 a 1) - Descrição: Retorna o cosseno de um ângulo em graus.
Tooltip da DSL: Retorna cosseno de um ângulo em graus. Aceita números. Exemplo:
@var c = @cos(45)
Exemplo:
// ✅ Válido@var c = @cos(45)
// ❌ Inválido (valor não numérico)@var c = @cos("45°")@acos(valor)
Seção intitulada “@acos(valor)”- Máscara de uso:
@acos(valor) - Retorno:
number(radianos) - Descrição: Retorna o cosseno inverso de um valor, em radianos.
@radians(graus)
Seção intitulada “@radians(graus)”- Máscara de uso:
@radians(graus) - Retorno:
number(radianos) - Descrição: Converte um valor angular de graus em radianos.
8. Data/Tempo
Seção intitulada “8. Data/Tempo”- Máscara de uso:
@now() - Retorno:
datetime - Descrição: Retorna a data e hora atual do sistema. Não requer parâmetros. Útil para comparações de datas e cálculos relativos ao tempo atual.
Tooltip da DSL: Retorna data/hora atual do sistema. Não requer parâmetros. Exemplo:
@var hoje = @now()
Exemplo:
@if(${data_nascimento} > @now()) { @return false} @else { @return true}// ❌ Inválido (não aceita parâmetros)@var n = @now(123)@datediff(data1, data2, unidade)
Seção intitulada “@datediff(data1, data2, unidade)”- Máscara de uso:
@datediff(data1, data2, unidade) - Retorno:
number(inteiro) - Descrição: Calcula a diferença entre
data1edata2na unidade especificada. Retorna um número inteiro representando a diferença. Útil para calcular idades, prazos, etc.
Parâmetros:
data1: Data inicialdata2: Data finalunidade:'days','months'ou'years'
Tooltip da DSL: Calcula diferença entre datas na unidade especificada (days, months, years). Exemplo:
@var idade = @datediff(@now(), ${data_nascimento}, 'years')
Exemplo:
// Verificar contrato recente@var dias = @datediff(@now(), ${data_ultimo_contrato}, 'days')@if(${dias} <= 7) { @return false} @else { @return true}
// Calcular idade@var idade = @datediff(@now(), ${data_nascimento}, 'years')// ❌ Inválido (unidade inválida)@var d = @datediff(@now(), ${data}, 'semanas')@day(data)
Seção intitulada “@day(data)”- Máscara de uso:
@day(data|timestamp) - Retorno:
number - Descrição: Extrai o dia (1-31) de uma data ou timestamp.
Tooltip da DSL: Extrai dia (1-31) de uma data ou timestamp. Exemplo:
@var dia = @day("2023-05-01T10:30:00Z")
Exemplo:
// ✅ Válido@var dia = @day("2023-05-01T10:30:00Z")
// ❌ Inválido (valor não é data)@var d = @day("maio")@month(data)
Seção intitulada “@month(data)”- Máscara de uso:
@month(data|timestamp) - Retorno:
number - Descrição: Extrai o mês (1-12) de uma data ou timestamp.
Tooltip da DSL: Extrai mês (1-12) de uma data ou timestamp. Exemplo:
@var mes = @month("2023-05-01T10:30:00Z")
Exemplo:
// ✅ Válido@var mes = @month("2023-05-01T10:30:00Z")
// ❌ Inválido (valor não é data)@var m = @month("maio")@year(data)
Seção intitulada “@year(data)”- Máscara de uso:
@year(data|timestamp) - Retorno:
number - Descrição: Extrai o ano de uma data ou timestamp.
Tooltip da DSL: Extrai ano de uma data ou timestamp. Exemplo:
@var ano = @year("2023-05-01T10:30:00Z")
Exemplo:
// ✅ Válido@var ano = @year("2023-05-01T10:30:00Z")
// ❌ Inválido (valor não é data)@var a = @year("maio")9. String Básica
Seção intitulada “9. String Básica”@concat(str1, str2, ...)
Seção intitulada “@concat(str1, str2, ...)”- Máscara de uso:
@concat(string1, string2, ...) - Retorno:
string - Descrição: Concatena múltiplas strings em uma única string. Aceita múltiplos argumentos separados por vírgula. Todos os argumentos são convertidos para string antes da concatenação.
Tooltip da DSL: Concatena múltiplas strings em uma única string. Aceita múltiplos argumentos. Exemplo:
@var msg = @concat('Olá ', ${nome}, '!')
Exemplo:
// Criar mensagem de alerta@var msg = @concat('Cliente com ', @tostring(${num_pendencias}), ' pendências')// ❌ Inválido (nenhum argumento fornecido)@var c = @concat()@uppercase(texto)
Seção intitulada “@uppercase(texto)”- Máscara de uso:
@uppercase(texto) - Retorno:
string - Descrição: Converte todo o texto para letras MAIÚSCULAS. Aceita variáveis, constantes ou literais string.
Tooltip da DSL: Converte texto para maiúsculo. Aceita variáveis, constantes ou literais string. Exemplo:
@var nomeMaiusculo = @uppercase("string")
Exemplo:
// Normalizar nome de companhia para comparação@var comp = @uppercase(${companhia})@if(${comp} == 'EMPRESA_A' || ${comp} == 'EMPRESA_B') { @return true} @else { @return false}// ❌ Inválido (entrada inválida)@var s = @uppercase(123)@lowercase(texto)
Seção intitulada “@lowercase(texto)”- Máscara de uso:
@lowercase(texto) - Retorno:
string - Descrição: Converte todo o texto para letras minúsculas. Aceita variáveis, constantes ou literais string.
Tooltip da DSL: Converte texto para minúsculo. Aceita variáveis, constantes ou literais string. Exemplo:
@var nomeMinusculo = @lowercase("STRING")
Exemplo:
// ✅ Válido@var nomeMinusculo = @lowercase("STRING")
// ❌ Inválido (entrada inválida)@var s = @lowercase(123)@sanitized(string)
Seção intitulada “@sanitized(string)”- Máscara de uso:
@sanitized(texto) - Retorno:
string - Descrição: Remove caracteres especiais (símbolos, pontuação, etc.) e espaços nas extremidades (trim). Mantém acentos (á, é, í, ó, ú, etc.) e não remove espaços entre palavras.
Tooltip da DSL: Remove caracteres especiais e espaços nas extremidades (trim). Mantém espaços entre palavras e acentos. Exemplo:
@var nome_limpo = @sanitized(${nome})
Exemplo:
@var nome_limpo = @sanitized(${nome})// " João@#$Silva " → "JoãoSilva"// "João@#$ Silva" → "João Silva" (espaço entre palavras mantido)// " Texto@#$ com espaços " → "Texto com espaços"@substr(texto, inicio, tamanho)
Seção intitulada “@substr(texto, inicio, tamanho)”- Máscara de uso:
@substr(string, number, number) - Retorno:
string - Descrição: Retorna uma substring a partir de uma posição inicial especificada (base 0), limitando à quantidade de caracteres definida no tamanho.
Exemplo:
// Extrai os caracteres nas posições 7 e 8 de um documento (Base 0)@var fragmento = @substr(${Documento Cliente}, 7, 2);
@if(@toint(${fragmento}) < 90) { @return true;} @else { @return false;}10. Array
Seção intitulada “10. Array”@countif(array, lambda)
Seção intitulada “@countif(array, lambda)”- Máscara de uso:
@countif(array, @lambda(alias, expressao)) - Retorno:
number(inteiro) - Descrição: Conta quantos elementos de um array atendem à condição especificada na função lambda interna.
Descrição detalhada:
array: Array a ser percorrido.lambda: Função que define a condição (usando@lambda(alias, expressao)).- Retorna o número inteiro de elementos que satisfazem a condição.
Tooltip da DSL: Conta elementos do array que atendem a condição definida na função lambda. Exemplo:
@var qtd = @countif($[lista], @lambda(item, item.ativo == true))
Exemplo:
// Contar itens ativos e validar por faixa etária@var qtd_ativos = @countif(${lista_itens}, @lambda(c, c.ativo == true))@var idade = @datediff(@now(), ${data_nascimento}, 'years')
@if((${idade} >= 41 && ${qtd_ativos} > 8) || (${idade} > 26 && ${idade} < 41 && ${qtd_ativos} > 4)) { @return false} @else { @return true}// ❌ Inválido (faltou função lambda)@var c = @countif(${lista})11. Sintaxe da DSL — Referência Rápida
Seção intitulada “11. Sintaxe da DSL — Referência Rápida”Convenções
Seção intitulada “Convenções”- Variáveis de input:
${nome} - Constantes:
$[NOME]ou$[path.constante] - Funções:
@nomeFuncao(params) - Declaração:
@var nome = expressão - Operadores:
&&,||,!,==,!=,>,<,>=,<=,+,-,*,/
12. Regras de Ouro
Seção intitulada “12. Regras de Ouro”- Linguagem fechada: A DSL não suporta criação de funções customizadas, métodos JavaScript nativos (
.replace(),.split(), etc.) nem importação de bibliotecas. Use exclusivamente as funções@desta documentação. - Retorno obrigatório: Nós condicionais devem retornar um
boolean. - Escopo local: Variáveis criadas com
@varexistem apenas dentro do próprio nó. - Constantes: Use
$[NOME]ou$[path.constante]para acessar constantes de integrações. - Operadores nativos: Use
&&,||,!para condicionais lógicas. - Case-sensitive: Comparações de string diferenciam maiúsculas e minúsculas. Normalize com
@uppercase()ou@lowercase()quando necessário. - Sanitized: Remove caracteres especiais e espaços nas extremidades (trim), mas mantém espaços entre palavras e acentos.
- Funções depreciadas:
age()econtains()foram movidas para V2. Use@datediff(@now(), ${data}, 'years')como alternativa para idade.
13. Casos de Uso Reais
Seção intitulada “13. Casos de Uso Reais”Para inspirar a construção das suas políticas, separamos exemplos complexos utilizando as funções nativas da DSL:
Validação Múltipla de Integração Externa
Seção intitulada “Validação Múltipla de Integração Externa”Combinando a coleta de constantes ($[...]) com validações lógicas booleanas, numéricas e de string em uma única condicional:
@var scoreCliente = $[IntegracaoExterna.scoreCliente];@var possuiRestricao = $[IntegracaoExterna.possuiRestricao];@var statusDocumento = $[IntegracaoExterna.statusDocumento];
@if(${statusDocumento} == "REGULAR" && ${possuiRestricao} == false && ${scoreCliente} >= 300) { @return true;} @else { @return false;}Validação Completa com Condicionais Aninhadas
Seção intitulada “Validação Completa com Condicionais Aninhadas”Exemplo de validação utilizando múltiplas faixas de pontuação com condicionais aninhadas e variáveis de integração:
@var idade = @datediff(@now(), ${data_nascimento}, 'years')@if(${score} >= 598 && ${num_pendencias} < 1 && ${classificacao_risco} == 'A') { @return true} @else { @if(${score} >= 504 && ${score} <= 598 && ${num_pendencias} < 1) { @return true } @else { @return false }}Cálculo de Distância Geográfica (Fórmula de Haversine)
Seção intitulada “Cálculo de Distância Geográfica (Fórmula de Haversine)”Utilizando o poder completo das funções trigonométricas (@acos, @cos, @radians, @sen) e de conversão (@tofloat) para calcular a distância em KM entre o cliente e o estabelecimento, levando em consideração a curvatura da Terra (Raio aproximado = 6371km):
@if(${Latitude Cliente} == null || ${Longitude Cliente} == null) { @return true;} @else { @var CalcDistancia = 6371 * (@acos(@cos(@radians(90 - (@tofloat(${Latitude Cliente})))) * @cos(@radians(90 - (@tofloat(${Latitude Loja})))) + @sen(@radians(90 - (@tofloat(${Latitude Cliente})))) * @sen(@radians(90 - (@tofloat(${Latitude Loja})))) * @cos(@radians((@tofloat(${Longitude Cliente}) - @tofloat(${Longitude Loja}))) + 0.000005)));
// A variável CalcDistancia agora possui a distância em KM e pode ser usada no próximo passo.}