Skip to content

A simple composable rule engine, built in object-oriented way, to reduce manual work.

License

Notifications You must be signed in to change notification settings

jeyabalajis/simple-rule-engine

Repository files navigation

simple-rule-engine

A lightweight yet powerful rule engine that allows declarative specification of business rules and saves tons of repeated development work.

  • This library has been utilized in authoring & evaluation of a number of complex credit decisioning, upgrade/downgrade, and lender evaulation criteria rules at FundsCorner
  • This library can also be considered as a Policy Framework for validating IaC (Infrastructure as Code).

CodeFactor CircleCI

At a glance

simple-rule-engine is a Python library that enables declarative specification of decision or scoring rules.

Example Decision matrix

Bureau Score Marital Status Decision
between 650 and 800 in [Married, Unspecified] GO

Rule specification

from simpleruleengine.conditional.when_all import WhenAll
from simpleruleengine.expression.expression import Expression
from simpleruleengine.operator.between import Between
from simpleruleengine.operator.string_in import In
from simpleruleengine.rulerow.rule_row_decision import RuleRowDecision
from simpleruleengine.ruleset.rule_set_decision import RuleSetDecision
from simpleruleengine.token.numeric_token import NumericToken
from simpleruleengine.token.string_token import StringToken

if __name__ == "__main__":
    cibil_score_between_650_800 = Expression(
        NumericToken("cibil_score"),
        Between(floor=650, ceiling=800)
    )
    marital_status_in_married_unspecified = Expression(
        StringToken("marital_status"),
        In("Married", "Unspecified")
    )

    rule_row_decision_go = RuleRowDecision(
        WhenAll(
            cibil_score_between_650_800,
            marital_status_in_married_unspecified
        ),
        "GO"
    )
    rule_set_decision = RuleSetDecision(rule_row_decision_go)

    fact = dict(
        cibil_score=700,
        marital_status="Married"
    )
    assert rule_set_decision.evaluate(fact) == "GO"

Key Features

  1. Ability to declaratively author both Scoring and Decision Rules.
  2. The library offers composable functional syntax that can be extended with various format adapters. See here for an example of such an extension.
  3. Ability to version control rule declarations thus enabling auditing of rule changes over a period of time.
  4. Ability to author chained rules. Evaluation of one rule can refer to the result of another rule, thus enabling modular, hierarchical rules.

Installation

pypi repository

pip install simpleruleengine==2.0.3

Source Code

simple-rule-engine GitHub Repository

Simple Rule Engine - Motivation and Under-the-Hood

https://jeyabalajis.gitbook.io/simple-rule-engine/

About

A simple composable rule engine, built in object-oriented way, to reduce manual work.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages