https://github.com/kyriosdata/regras
Máquina de Execução de Regras (MER)
https://github.com/kyriosdata/regras
Last synced: 5 months ago
JSON representation
Máquina de Execução de Regras (MER)
- Host: GitHub
- URL: https://github.com/kyriosdata/regras
- Owner: kyriosdata
- Created: 2016-11-01T11:14:34.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-04-13T12:24:36.000Z (about 9 years ago)
- Last Synced: 2024-04-14T13:52:31.110Z (about 2 years ago)
- Language: Java
- Size: 96.7 KB
- Stars: 3
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# regras
Biblioteca para Execução de Regras (BER).
[
](https://travis-ci.org/kyriosdata/regras)
[](https://www.versioneye.com/user/projects/5818f81589f0a91d55eb921c)
[](https://sonarqube.com/dashboard/index?id=com.github.kyriosdata.regras%3Aregras)
[](http://javadoc.io/doc/com.github.kyriosdata.regras/regras)
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.