Skip to content

kyriosdata/regras

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

regras

Biblioteca para Execução de Regras (BER).

Dependency Status Sonarqube Javadocs


Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.
Fábio Nogueira de Lucena - Fábrica de Software - Instituto de Informática (UFG).

Como usar (via maven)?

Acrescente a dependencia abaixo no arquivo pom.xml:

<dependency>
  <groupId>com.github.kyriosdata.regras</groupId>
  <artifactId>regras</artifactId>
  <version>1.0.0</version>
</dependency>

O que é uma regra?

Regra é o instrumento empregado para produzir um valor para uma dada entrada. A entrada é definida por um conjunto de objetos (JSON). O resultado é um valor numérico, uma data, um valor lógico ou uma sequência de caracteres. A saída também é fornecida como um objeto JSON. Em tempo, uma regra também é definida por um objeto JSON.

Abaixo segue uma regra do tipo expressão que soma os valores das variáveis "x" e "y". O resultado é associado à variável identificada por "soma". A variável deve ser única em um conjunto de regras, ou seja, não é permitido outra regra que deve ser avaliada juntamente com aquela abaixo e também define como variável o identificador "soma". Dessa forma, em outra regra, a variável "soma" pode fazer parte da expressão.

{ 
   "tipo"      : "expressao", 
   "variavel"  : "soma", 
   "expressao" : "x + y" 
}

Uma regra possui alguns atributos predefinidos, por exemplo, "valorMaximo". Enquanto a regra acima pode resultar no valor 150, por exemplo, para os valores de x e y, 100 e 50, respectivamente, aquela abaixo teria como resultado o valor 107 para os mesmos valores de x e y, pois 107 é o valor máximo indicado para essa regra.

{ 
  "variavel"    : "soma", 
  "expressao"   : "x + y",
  "valorMaximo" : 107 
}

O que é uma configuração?

Em geral estamos interessados na avaliação de várias regras. Configuração é o meio que permite reunir várias regras. Abaixo segue uma configuração formada por duas regras.

{ 
  "regras" : 
  [
    { 
       "tipo"        : "expressao",
       "variavel"    : "soma", 
       "expressao"   : "x + y",
       "valorMaximo" : 107 
    },
    { 
      "tipo"      : "expressao", 
      "variavel"  : "somaLimitada", 
      "expressao" : "x + y" 
    }
  ]
}

Quais são as entradas/saídas?

As entradas são definids por objetos JSON. Os atributos desses objetos, quaisquer que sejam eles, são tratados como variáveis pelas regras. Por exemplo, para o relato (objeto JSON) abaixo

{ 
  "altura" : 1.8 
}

fornecido como entrada para a execução da regra

{ 
  "tipo"      : "expressao", 
  "variavel"  : "alturaEmCentimetros", 
  "expressao" : "altura * 100" 
}

o resultado é uma pontuação, nesse caso, o valor resultante é 180, que passa a estar disponível por meio do atributo "alturaEmCentimetros" no objeto JSON retornado

{ 
  "pontuacoes" : 
  [ 
    { 
      "atributo" : "alturaEmCentimetros", 
      "valor" : 
      { 
        "tipo"  : 0, 
        "valor" : 180 
      }
    } 
  ] 
}

O JSON acima representa uma contagem, ou seja, o resultado da aplicação de regras (configuração) a um conjunto de relatos (relatório).

Como executar um conjunto de regras?

A execução de várias regras, uma configuração, produz uma coleção de valores, conforme ilustrado pelo método abaixo.

String configuracao = // recupera conjunto de regras (JSON)
String relatos = // recupera conjunto de objetos (JSON)
String parametros = // recupera valores iniciais (JSON)
Contagem resultado = Regras.avalia(configuracao, relatos, parametros);

Observe que o resultado é uma instância de Contagem. A versão JSON pode ser obtida com

String resultado = Regras.avaliaAsJson(configuracao, relatos, parametros);

Nesse ponto podemos ilustrar uma chamada completa para avaliação de uma regra.

About

Máquina de Execução de Regras (MER)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages