The conflict checker
- Last Updated: May 3, 2021
- 6 minute read
- Corticon
- Version 7.2
- Documentation
With the two rules expanded into four subrules, most of the Cross Product is
displayed. Click the Check for Conflicts
button in the
toolbar.
In this topic, the intent is to correlate the results of the automatic conflict check with the problems we identified first with the flowchart method, and then later with test cases. Subrules 1.1 and 2.1, the subrules highlighted in pink and yellow in Figure 1, correspond to the intersection of column 1 and row 1 of Rule 2 Expected Outcome or test case #1 in Test Cases Extracted from Cross Product. But note that Corticon Studio does not instruct the rule writer how to resolve the conflict; it alerts the rule writer to its presence. The rule writer, ideally someone who knows the business, must decide how to resolve the problem. The rule writer has two basic choices:
- Change the Actions for one or both rules. You could change the Action in
subrule 1.1 to match 2.1 or vice versa. Or, you could introduce a new Action, say
riskRating = medium, as the Action for both 1.1 and 2.1. If either method is used, then the result will be that the Conditions and Actions of subrule 1.1 and 2.1 are identical. This removes the conflict, but introduces redundancy, which, while not a logical problem, can reduce processing performance in deployment. Removing redundancies in Rulesheets is discussed in the How to optimize Rulesheets topics. - Use an Override. Think of an override as an exception. To override one rule with another means to instruct the rules engine to fire only one rule even when the Conditions of both rules are satisfied. Another way to think about overrides is to refer back to the discussion surrounding the flowchart in Flowchart with two dependent Rules. At the time, it was unclear which decision should execute first. No priority was declared in the rules. But, it made a big difference how our flowchart was constructed and what results it generated. To use an override here, select the number of the subrule to be overridden from the drop-down box at the bottom of the column of the overriding subrule, as shown circled in the following figure. This is expressed as “subrule 2.1 overrides 1.1”. It is incorrect to think of overrides as defining execution sequence. An override does not mean “fire rule 2.1 and then fire rule 1.1.” It means “fire rule 2.1 and do not fire rule 1.1”.
An override is essentially another business rule, which should to be expressed somewhere in the Rule Statements section of the Rulesheet. To express this override in plain English, the rule writer might choose to modify the rule statement for the overridden rule:
![]()
This modification successfully expresses the effect of the override.
If you are ever in doubt as to whether you have successfully resolved a conflict, click the Check for Conflicts button again. The affected subrules should not highlight as you step through any remaining ambiguities. If all ambiguities were resolved, then you see the following window:
Use overrides to handle conflicts that are logical dependencies
Overrides can be used for more than just conflicting rules. While the basic use of overrides is in cases where rules are in conflict to allow the modeler to control execution, it is not the only use. The more advanced usage applies cases where there is a logical dependency—cases where a rule might modify the data so that another rule can also execute. This type of conflict is not detected by the conflict checker.


