Skip to main content

A lightweight rule engine that allows declarative specification of business rules.

Project description

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.2

Source Code

simple-rule-engine GitHub Repository

Simple Rule Engine - Motivation and Under-the-Hood

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simpleruleengine-2.0.3.tar.gz (11.9 kB view hashes)

Uploaded Source

Built Distribution

simpleruleengine-2.0.3-py3-none-any.whl (27.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page