dmn-engine
v1.0.6
Published
Business Rules Engine for Javascript and Node.js, with built-in Expression Language supporting DMN Decision Table
Downloads
35
Readme
Business-Rules Engine
Condition Symbols
Column Value:
$$
example DateDiff($$,@now)variable symbol:
$
example:$caseId
this is needed since we allow multi words operations likestarts with
Is null value or empty:
Null
orEmpty
Any Value:
-
All types:
null
orempty
not null
true
orfalse
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 file
Invoke
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"
andhigh
are acceptablecoditional operators and functions without referencing the variable like
>500
Empty Condition or
-
indicates all values are trueFor numeric variables:
500
- between 500 and 700
For Date variables, functions like:
> 30 days
,> 50 minutes
,< 10 years
etc.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