NOTICE: All information contained herein is, and remains
the property of TechnoCore Automate.
Updated : 2026-03-27
Priority-ordered rule engine. Rules evaluate
sequentially by priority number — first match wins.
Like firewall rules for business logic.
Rule #1 (Priority 1): Bureau Status = F → BLOCK
Rule #2 (Priority 2): Bureau Status = D → BLOCK
Rule #3 (Priority 3): ptp_status IN (...) → HOLD
Rule #10 (Priority 10): balance < 50 → SUPPRESS
Rule #99 (Priority 99): ELSE → SEND
Evaluation stops at the first matching rule.
Multiple rows with the same Priority + RuleName are
ANDed. All conditions must match for the rule to fire:
Priority RuleName Field Op Value
5 High Risk dpd > 90
5 High Risk balance > 1000
Rule "High Risk" only fires if BOTH conditions match.
def_decision_ruleset — master definitiondef_decision_ruleset_rules — individual rulesdef_decision_ruleset_history — version history| Operator | Aliases | Description |
|---|---|---|
= |
MATCH, EQ | Equals (numeric or string) |
!= |
NEQ, <> | Not equals |
< |
LT | Less than |
> |
GT | Greater than |
<= |
LTE | Less or equal |
>= |
GTE | Greater or equal |
IN |
Value in comma-separated list | |
NOT IN |
Value not in list | |
CONTAINS |
LIKE | String contains |
IS NULL |
ISNULL | Null or empty |
IS NOT NULL |
ISNOTNULL | Not null |
ELSE |
DEFAULT | Always matches (catch-all) |
simulate(ruleset_name, limit) — Batch-run the ruleset against all rows in the configured DataTable. Writes results (outcome, rule_name, priority) to bloom_sim_{ruleset_name}.send_email(ruleset_name, recipients, version) — Send a branded HTML email with the rules table, version history, RACI matrix, and signoff status. Falls back to RACI contacts if no recipients specified.The def_decision_ruleset table has RACI columns: RaciSimulation, RaciProduction, RaciOutcome, RaciDevelopment. These are used by send_email() to render governance information and resolve default recipients.
# List all rulesets
python ObjDecisionRuleset.py list
# Evaluate against JSON context
python ObjDecisionRuleset.py evaluate SMS_SUPPRESS \
'{"Bureau Status": "F", "balance": 100}'
# Import from CSV
python ObjDecisionRuleset.py import-csv SMS_SUPPRESS rules.csv
# Export to CSV
python ObjDecisionRuleset.py export-csv SMS_SUPPRESS
# Run simulation against DataTable
python ObjDecisionRuleset.py run SMS_SUPPRESS --limit 1000
# Set the source DataTable
python ObjDecisionRuleset.py set-table SMS_SUPPRESS data_input
# Send email report
python ObjDecisionRuleset.py send-email SMS_SUPPRESS \
--recipients "user@example.com"
Registered as WorkflowNodeType.RULESET:
START → RULESET (SMS_SUPPRESS) → SERVICE → DONE
Context keys written:
_ruleset_outcome: winning outcome_ruleset_rule: which rule name fired_ruleset_priority: priority number_ruleset_description: outcome descriptionObjDecisionSwitch.py — tree-based decisionsObjDecisionMatrix.py — grid lookupObjCalculation.py — SQL operationsUpdated : 2026-03-27