dmn-engine v1.0.6
Business-Rules Engine
Condition Symbols
- Column Value:
$$example DateDiff($$,@now) - variable symbol:
$example:$caseIdthis is needed since we allow multi words operations likestarts with - Is null value or empty:
NullorEmpty Any Value:
-All types:
nulloremptynot nulltrueorfalse
Introduction
Is a Business Rules Engine supporting DMN Decision Tables. Allowing developers to integrate Rules into JavaScript or Node.js applications.
This solution utilizes deterministic rules vs Rete based solutions that are non-deterministic.
This package is designed specifically for Node.js and TypeScript
As an example of Decisition Table


Usage
Definition
Decision table can be defined as a JSON or CSV fileInvoke
To invoke the above example
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);Testing
const tester=Rules.loadTest('./client-category-tests.json');
let results=tester.run();
console.log(results.summary);
UI for Testing and expeirmenting
Rule Syntax
Conditions
Expression Language
Simple Conditions shortcuts
Literal values with or without quotes, so
"high"andhighare acceptablecoditional operators and functions without referencing the variable like
>500Empty 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 yearsetc.before '2018/01/01'orafter '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
Output
Output expressions can use the full expression language and reference any input or ouput variable.Expression Engine
const exp=new Expression(`2+3*4`);
const result= expr.evaluate();
console.log(result);Expressions are compiled into AST
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
Operator Symbols
+ -'*/` etcs.
Word Operators
between is defined as a word operator
Functions
Keywords
The following literals are defined as Keywords
-true
-false
-null