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).
simple-rule-engine is a Python library that enables declarative specification of decision or scoring rules.
Bureau Score | Marital Status | Decision |
---|---|---|
between 650 and 800 | in [Married, Unspecified] | GO |
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"
- Ability to declaratively author both Scoring and Decision Rules.
- The library offers composable functional syntax that can be extended with various format adapters. See here for an example of such an extension.
- Ability to version control rule declarations thus enabling auditing of rule changes over a period of time.
- Ability to author chained rules. Evaluation of one rule can refer to the result of another rule, thus enabling modular, hierarchical rules.
pip install simpleruleengine==2.0.3