Skip to content

Business Rules Engine for Javascript and Node.js, with built-in Expression Language supporting DMN Decision Table

License

Notifications You must be signed in to change notification settings

ralphhanna/dmn-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Business-Rules Engine

Condition Symbols

  • Column Value: $$ example DateDiff($$,@now)

  • variable symbol: $example: $caseId this is needed since we allow multi words operations like starts with

  • Is null value or empty: Null or Empty

  • Any Value: -

  • All types:

    • null or empty
    • not null
    • true or false
Type SyntaxExamples
Numbersvalue500
compare operator>500
<500
between 500 and 700
StringvalueLow-Income
Quoted Value'Low-Income'
string operatorsstarts with 'Low'
ends with 'Income'
contains 'Income'
not 'Low-Income'
DateQuoted value'2020/12/01'
Date operatorsafter '2020/12/01'
>30 days
<10 years
contains 'Income'
not 'Low-Income'

Project Status: Active - The project has reached a stable, usable state and is being actively developed.

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 Example

Anatomy

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);

tests

UI for Testing and expeirmenting

Rule Syntax

Conditions

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

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

About

Business Rules Engine for Javascript and Node.js, with built-in Expression Language supporting DMN Decision Table

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages