Business Rules Engine for Javascript and Node.js, with built-in Expression Language supporting DMN Decision Table
npm install dmn-engineBusiness-Rules Engine
===========
$$ example DateDiff($$,@now)
$example: $caseId this is needed since we allow multi words operations like starts with
Null or Empty
-
null or empty
not null
true or false
| Type | Syntax | Examples |
|---|---|---|
| Numbers | value | 500 |
| compare operator | >500 | |
| <500 | ||
| between 500 and 700 | ||
| String | value | Low-Income |
| Quoted Value | 'Low-Income' | |
| string operators | starts with 'Low' | |
| ends with 'Income' | ||
| contains 'Income' | ||
| not 'Low-Income' | ||
| Date | Quoted value | '2020/12/01' |
| Date operators | after '2020/12/01' | |
| >30 days | ||
| <10 years | ||
| contains 'Income' | ||
| not 'Low-Income' |
js
const Rules=requires('./business-rules.json')'
const dt= Rules.load('client-category);
let result=dt.run({type:'Private', deposit: 500 , netWorth: 500});
console.log(result.category);
`
$3
`js
const tester=Rules.loadTest('./client-category-tests.json');
let results=tester.run();
console.log(results.summary);
`
!tests
$3
Rule Syntax
$3
#### Expression Language
#### Simple Conditions shortcuts
- Literal values with or without quotes, so "high" and high are acceptable
- coditional operators and functions without referencing the variable like >500
- Empty Condition or - indicates all values are true
- For numeric variables:
- > 500
- between 500 and 700
- For Date variables, functions like:
- > 30 days , > 50 minutes , < 10 years etc.
- before '2018/01/01' or after '2018/03/01'
- between '2018/01/01' and '2019/12/31'
-
#### Complex Conditions
- And , Or and Not operators, brackets () can also be used
-
- complex operations and functions can reference the variable using @ symbol
$3
Output expressions can use the full expression language and reference any input or ouput variable.
Expression Engine
`js
const exp=new Expression(2+3*4);
const result= expr.evaluate();
console.log(result);
`
Expressions are compiled into AST
`js
const exp=new Expression(2+3*4);
const compiled= expr.compile();
// or reloaed
const expr=Expression.load(compiled);
const result= expr.evaluate();
console.log(result);
`
Language Constructs
Literals
- Strings: 'John'
- Numbers: 123.25
Words
salary
customer.address
Operators
The package already defines a set of operators but you can add your own
$3
+ -' * / etcs.
between is defined as a word operator
true
false
null