This is an automated email from the ASF dual-hosted git repository.

gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new 99c9527caa [incubator-kie-issues#1528] Implement DMNEvent reporting 
inside DMNConditionalEvaluator. (#6124)
99c9527caa is described below

commit 99c9527caa7309f7fbf0da525ac953b07de2af58
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Wed Oct 16 10:14:59 2024 +0200

    [incubator-kie-issues#1528] Implement DMNEvent reporting inside 
DMNConditionalEvaluator. (#6124)
    
    * [incubator-kie-issues#1528] Implement DMNEvent reporting inside 
DMNConditionalEvaluator.
    
    * [incubator-kie-issues#1528] Implement DMNEvent reporting inside 
DMNConditionalEvaluator.
    
    * [incubator-kie-issues#1528] Fix RiskScore_Simple.dmn
    
    * [incubator-kie-issues#1528] Fix id used to track conditional evaluation
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../org/kie/dmn/api/core}/EvaluatorResult.java     |   2 +-
 .../event/AfterConditionalEvaluationEvent.java}    |  20 +-
 .../core/event/AfterEvaluateConditionalEvent.java} |  20 +-
 .../api/core/event/DMNRuntimeEventListener.java    |  12 ++
 .../core/jsr223/JSR223DTExpressionEvaluator.java   |   4 +-
 .../jsr223/JSR223LiteralExpressionEvaluator.java   |   4 +-
 .../kie/dmn/core/api/DMNExpressionEvaluator.java   |   1 +
 .../kie/dmn/core/ast/DMNConditionalEvaluator.java  |  39 +++-
 .../org/kie/dmn/core/ast/DMNContextEvaluator.java  |   4 +-
 .../kie/dmn/core/ast/DMNDTExpressionEvaluator.java |   5 +-
 .../dmn/core/ast/DMNDecisionServiceEvaluator.java  |   4 +-
 ...DecisionServiceFunctionDefinitionEvaluator.java |   4 +-
 .../org/kie/dmn/core/ast/DMNFilterEvaluator.java   |   4 +-
 .../core/ast/DMNFunctionDefinitionEvaluator.java   |   4 +-
 .../kie/dmn/core/ast/DMNInvocationEvaluator.java   |   4 +-
 .../org/kie/dmn/core/ast/DMNIteratorEvaluator.java |   4 +-
 .../org/kie/dmn/core/ast/DMNListEvaluator.java     |   4 +-
 .../core/ast/DMNLiteralExpressionEvaluator.java    |   5 +-
 .../org/kie/dmn/core/ast/DMNRelationEvaluator.java |   4 +-
 .../org/kie/dmn/core/ast/EvaluatorResultImpl.java  |   2 +-
 .../dmn/core/compiler/DMNEvaluatorCompiler.java    |   2 +-
 .../DMNAlphaNetworkEvaluatorImpl.java              |   2 +-
 .../AfterConditionalEvaluationEventImpl.java}      |  32 ++-
 .../AfterEvaluateConditionalEventImpl.java}        |  32 ++-
 .../dmn/core/impl/DMNRuntimeEventManagerUtils.java |  18 ++
 .../java/org/kie/dmn/core/impl/DMNRuntimeImpl.java |   2 +-
 .../AbstractDMNKiePMMLInvocationEvaluator.java     |   4 +-
 .../core/pmml/AbstractPMMLInvocationEvaluator.java |   4 +-
 .../java/org/kie/dmn/core/DMNInputRuntimeTest.java |  58 ++++++
 .../test/java/org/kie/dmn/core/DMNRuntimeTest.java |   2 +-
 .../dmn/core/ast/DMNConditionalEvaluatorTest.java  | 175 ++++++++++++++++
 .../kie/dmn/core/ast/DMNContextEvaluatorTest.java  |   2 +-
 .../core/impl/DMNRuntimeEventManagerUtilsTest.java |  78 +++++++
 .../dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java |   2 +-
 .../dmn/signavio/MultiInstanceDecisionLogic.java   |   4 +-
 .../valid_models/DMNv1_5/RiskScore_Simple.dmn      | 228 +++++++++++++++++++++
 .../core/ast/DMNConditionalEvaluator.java          |   4 +-
 .../dmn/trisotech/core/ast/DMNFilterEvaluator.java |   5 +-
 .../trisotech/core/ast/DMNIteratorEvaluator.java   |   4 +-
 39 files changed, 693 insertions(+), 115 deletions(-)

diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/EvaluatorResult.java
similarity index 96%
copy from 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
copy to 
kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/EvaluatorResult.java
index 7ef00e8ac0..078bac9ce0 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
+++ 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/EvaluatorResult.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.core.api;
+package org.kie.dmn.api.core;
 
 public interface EvaluatorResult {
     
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterConditionalEvaluationEvent.java
similarity index 70%
copy from 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
copy to 
kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterConditionalEvaluationEvent.java
index 7ef00e8ac0..06b4050772 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
+++ 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterConditionalEvaluationEvent.java
@@ -16,16 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.core.api;
+package org.kie.dmn.api.core.event;
 
-public interface EvaluatorResult {
-    
-    enum ResultType {
-        SUCCESS, FAILURE;
-    }
-    
-    ResultType getResultType();
+import org.kie.dmn.api.core.EvaluatorResult;
 
-    Object getResult();
+/**
+ * Event fired after the <b>then/else</b> branches of an <b>if</b> condition 
are evaluated
+ * @see AfterEvaluateConditionalEvent
+ */
+public interface AfterConditionalEvaluationEvent {
+
+    EvaluatorResult getEvaluatorResultResult();
+
+    String getExecutedId();
 
 }
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterEvaluateConditionalEvent.java
similarity index 74%
rename from 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
rename to 
kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterEvaluateConditionalEvent.java
index 7ef00e8ac0..b0fb5f2c62 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/EvaluatorResult.java
+++ 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/AfterEvaluateConditionalEvent.java
@@ -16,16 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.core.api;
+package org.kie.dmn.api.core.event;
 
-public interface EvaluatorResult {
-    
-    enum ResultType {
-        SUCCESS, FAILURE;
-    }
-    
-    ResultType getResultType();
+import org.kie.dmn.api.core.EvaluatorResult;
 
-    Object getResult();
+/**
+ * Event fired after the if <b>if</b> conditional is evaluated
+ *
+ */
+public interface AfterEvaluateConditionalEvent {
+
+    EvaluatorResult getEvaluatorResultResult();
+
+    String getExecutedId();
 
 }
diff --git 
a/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
index ddb6e89093..258d3f8b6b 100644
--- 
a/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
+++ 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/event/DMNRuntimeEventListener.java
@@ -47,4 +47,16 @@ public interface DMNRuntimeEventListener {
     default void beforeEvaluateAll(BeforeEvaluateAllEvent event) {}
 
     default void afterEvaluateAll(AfterEvaluateAllEvent event) {}
+
+    /**
+     * Fired after the if <b>if</b> conditional is evaluated
+     *
+     */
+    default void afterEvaluateConditional(AfterEvaluateConditionalEvent event) 
{}
+
+    /**
+     * Fired after the <b>then/else</b> branches of an <b>if</b> condition are 
evaluated
+     *
+     */
+    default void afterConditionalEvaluation(AfterConditionalEvaluationEvent 
event) {}
 }
diff --git 
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
 
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
index ff114e2eb4..afa8009e4d 100644
--- 
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223DTExpressionEvaluator.java
@@ -35,8 +35,8 @@ import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.DMNDTExpressionEvaluator;
 import org.kie.dmn.core.ast.DMNDTExpressionEvaluator.EventResults;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git 
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
 
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
index 5b3a530229..48630c6459 100644
--- 
a/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core-jsr223/src/main/java/org/kie/dmn/core/jsr223/JSR223LiteralExpressionEvaluator.java
@@ -21,8 +21,8 @@ package org.kie.dmn.core.jsr223;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.slf4j.Logger;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
index c40ebcb323..c623764167 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/api/DMNExpressionEvaluator.java
@@ -19,6 +19,7 @@
 package org.kie.dmn.core.api;
 
 import org.kie.dmn.api.core.DMNResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 
 /**
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
index 7da9445a81..8f89bb1fcb 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNConditionalEvaluator.java
@@ -18,15 +18,20 @@
  */
 package org.kie.dmn.core.ast;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
+import org.kie.dmn.core.impl.DMNRuntimeEventManagerUtils;
 import org.kie.dmn.core.util.Msg;
 import org.kie.dmn.core.util.MsgUtil;
+import org.kie.dmn.model.api.Conditional;
 import org.kie.dmn.model.api.DMNElement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -40,6 +45,7 @@ public class DMNConditionalEvaluator implements 
DMNExpressionEvaluator {
     private DMNExpressionEvaluator elseEvaluator;
     private DMNElement node;
     private String name;
+    private final Map<DMNExpressionEvaluator, String> evaluatorIdMap = new 
HashMap<>();
 
     public DMNConditionalEvaluator(String name, DMNElement node, 
DMNExpressionEvaluator ifEvaluator, DMNExpressionEvaluator thenEvaluator, 
DMNExpressionEvaluator elseEvaluator) {
         this.name = name;
@@ -47,6 +53,14 @@ public class DMNConditionalEvaluator implements 
DMNExpressionEvaluator {
         this.ifEvaluator = ifEvaluator;
         this.thenEvaluator = thenEvaluator;
         this.elseEvaluator = elseEvaluator;
+        Conditional conditional = node.getChildren().stream()
+                .filter(c -> c instanceof Conditional)
+                .map(c -> (Conditional) c)
+                .findFirst()
+                .orElseThrow(() -> new RuntimeException("Missing Conditional 
element inside " + node));
+        evaluatorIdMap.put(ifEvaluator, conditional.getIf().getId());
+        evaluatorIdMap.put(thenEvaluator, conditional.getThen().getId());
+        evaluatorIdMap.put(elseEvaluator, conditional.getElse().getId());
     }
 
     @Override
@@ -54,16 +68,12 @@ public class DMNConditionalEvaluator implements 
DMNExpressionEvaluator {
         DMNResultImpl result = (DMNResultImpl) dmnr;
 
         EvaluatorResult ifEvaluation = ifEvaluator.evaluate(eventManager, 
result);
+        String executedId = evaluatorIdMap.get(ifEvaluator);
+        DMNRuntimeEventManagerUtils.fireAfterEvaluateConditional(eventManager, 
ifEvaluation, executedId);
         if (ifEvaluation.getResultType().equals(ResultType.SUCCESS)) {
             Object ifResult = ifEvaluation.getResult();
-            if (ifResult instanceof Boolean) {
-                if (((Boolean) ifResult).booleanValue()) {
-                    return thenEvaluator.evaluate(eventManager, result);
-                } else {
-                    return elseEvaluator.evaluate(eventManager, result);
-                }
-            } else if (ifResult == null) {
-                return elseEvaluator.evaluate(eventManager, result);
+            if (ifResult == null || ifResult instanceof Boolean) {
+                return manageBooleanOrNullIfResult((Boolean) ifResult, 
eventManager, result);
             } else {
                 MsgUtil.reportMessage(logger,
                                       DMNMessage.Severity.ERROR,
@@ -80,4 +90,13 @@ public class DMNConditionalEvaluator implements 
DMNExpressionEvaluator {
         return new EvaluatorResultImpl(null, ResultType.FAILURE);
     }
 
+    protected EvaluatorResult manageBooleanOrNullIfResult(Boolean 
booleanResult, DMNRuntimeEventManager eventManager, DMNResultImpl result) {
+        DMNExpressionEvaluator evaluatorToUse = booleanResult != null && 
booleanResult ? thenEvaluator : elseEvaluator;
+
+        EvaluatorResult toReturn = evaluatorToUse.evaluate(eventManager, 
result);
+        String executedId  = evaluatorIdMap.get(evaluatorToUse);
+        
DMNRuntimeEventManagerUtils.fireAfterConditionalEvaluation(eventManager, 
toReturn, executedId);
+        return toReturn;
+    }
+
 }
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
index 4fbb5c0c64..cedf3e309a 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNContextEvaluator.java
@@ -31,8 +31,8 @@ import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.DMNType;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.impl.DMNRuntimeEventManagerUtils;
 import org.kie.dmn.core.impl.DMNRuntimeImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
index 7432b3114c..8293f82e67 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDTExpressionEvaluator.java
@@ -19,7 +19,6 @@
 package org.kie.dmn.core.ast;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -32,8 +31,8 @@ import org.kie.dmn.api.core.ast.DMNNode;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.impl.DMNRuntimeEventManagerUtils;
 import org.kie.dmn.core.impl.DMNRuntimeImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
index 63a6faf1a7..328ee461b0 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceEvaluator.java
@@ -33,8 +33,8 @@ import org.kie.dmn.api.core.DMNRuntime;
 import org.kie.dmn.api.core.ast.DecisionServiceNode;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.compiler.DMNCompilerImpl;
 import org.kie.dmn.core.impl.DMNDecisionResultImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
index 21ee7e0af6..00c2c0f50f 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNDecisionServiceFunctionDefinitionEvaluator.java
@@ -31,8 +31,8 @@ import org.kie.dmn.api.core.DMNType;
 import org.kie.dmn.api.core.ast.DecisionServiceNode;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.DMNFunctionDefinitionEvaluator.FormalParameter;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.impl.DMNRuntimeImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
index ccaddaac57..b0120fd57e 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFilterEvaluator.java
@@ -28,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.IterableRange;
 import org.kie.dmn.core.util.Msg;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
index c7d6469aac..902ff74556 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNFunctionDefinitionEvaluator.java
@@ -32,8 +32,8 @@ import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
 import org.kie.dmn.api.core.ast.DMNNode;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.BaseDMNTypeImpl;
 import org.kie.dmn.core.impl.DMNContextFEELCtxWrapper;
 import org.kie.dmn.core.impl.DMNResultImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
index ec42aa0f1e..44e166bb22 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNInvocationEvaluator.java
@@ -32,8 +32,8 @@ import org.kie.dmn.api.core.DMNType;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNModelImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.Msg;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
index 1abbe18e51..1d73315ede 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNIteratorEvaluator.java
@@ -27,8 +27,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.IterableRange;
 import org.kie.dmn.core.util.Msg;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
index f0156ddfa9..0a85a47907 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNListEvaluator.java
@@ -26,8 +26,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.Msg;
 import org.kie.dmn.core.util.MsgUtil;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
index 5e42fbc420..07d1f69390 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNLiteralExpressionEvaluator.java
@@ -19,7 +19,6 @@
 package org.kie.dmn.core.ast;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.kie.dmn.api.core.DMNMessage;
@@ -29,8 +28,8 @@ import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent.Severity;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.Msg;
 import org.kie.dmn.core.util.MsgUtil;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
index 1bb21d824b..6a971ffba1 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/DMNRelationEvaluator.java
@@ -28,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.Msg;
 import org.kie.dmn.core.util.MsgUtil;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
index 73b25ca012..ed8eb06399 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
@@ -18,7 +18,7 @@
  */
 package org.kie.dmn.core.ast;
 
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 
 public class EvaluatorResultImpl implements EvaluatorResult {
     private final Object     result;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
index 9e4ad9d59e..57b4bc8f12 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNEvaluatorCompiler.java
@@ -38,7 +38,7 @@ import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
 import org.kie.dmn.api.core.ast.DMNNode;
 import org.kie.dmn.api.core.ast.DecisionNode;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.ast.DMNBaseNode;
 import org.kie.dmn.core.ast.DMNConditionalEvaluator;
 import org.kie.dmn.core.ast.DMNContextEvaluator;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
index 522eb37743..cbffc8b5c8 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/alphanetbased/DMNAlphaNetworkEvaluatorImpl.java
@@ -27,7 +27,7 @@ import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.ast.DMNBaseNode;
 import org.kie.dmn.core.ast.DMNDTExpressionEvaluator;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterConditionalEvaluationEventImpl.java
similarity index 56%
copy from 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
copy to 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterConditionalEvaluationEventImpl.java
index 73b25ca012..5d3c8eb246 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterConditionalEvaluationEventImpl.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.core.ast;
+package org.kie.dmn.core.impl;
 
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
 
-public class EvaluatorResultImpl implements EvaluatorResult {
-    private final Object     result;
-    private final ResultType code;
+public class AfterConditionalEvaluationEventImpl implements 
AfterConditionalEvaluationEvent {
 
-    public EvaluatorResultImpl(Object result, ResultType code) {
-        this.result = result;
-        this.code = code;
-    }
+    private final EvaluatorResult evaluatorResult;
+    private final String executedId;
 
-    @Override
-    public Object getResult() {
-        return result;
+    public AfterConditionalEvaluationEventImpl(EvaluatorResult 
evaluatorResult, String executedId) {
+        this.evaluatorResult = evaluatorResult;
+        this.executedId = executedId;
     }
 
     @Override
-    public ResultType getResultType() {
-        return code;
+    public EvaluatorResult getEvaluatorResultResult() {
+        return evaluatorResult;
     }
 
     @Override
-    public String toString() {
-        return "EvaluatorResultImpl{" +
-                "result=" + result +
-                ", code=" + code +
-                '}';
+    public String getExecutedId() {
+        return executedId;
     }
 }
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterEvaluateConditionalEventImpl.java
similarity index 56%
copy from 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
copy to 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterEvaluateConditionalEventImpl.java
index 73b25ca012..4aa97cec11 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/ast/EvaluatorResultImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/AfterEvaluateConditionalEventImpl.java
@@ -16,34 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.core.ast;
+package org.kie.dmn.core.impl;
 
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.EvaluatorResult;
 
-public class EvaluatorResultImpl implements EvaluatorResult {
-    private final Object     result;
-    private final ResultType code;
+public class AfterEvaluateConditionalEventImpl implements 
AfterEvaluateConditionalEvent {
 
-    public EvaluatorResultImpl(Object result, ResultType code) {
-        this.result = result;
-        this.code = code;
-    }
+    private final EvaluatorResult evaluatorResult;
+    private final String executedId;
 
-    @Override
-    public Object getResult() {
-        return result;
+    public AfterEvaluateConditionalEventImpl(EvaluatorResult evaluatorResult, 
String executedId) {
+        this.evaluatorResult = evaluatorResult;
+        this.executedId = executedId;
     }
 
     @Override
-    public ResultType getResultType() {
-        return code;
+    public EvaluatorResult getEvaluatorResultResult() {
+        return evaluatorResult;
     }
 
     @Override
-    public String toString() {
-        return "EvaluatorResultImpl{" +
-                "result=" + result +
-                ", code=" + code +
-                '}';
+    public String getExecutedId() {
+        return executedId;
     }
 }
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
index 23879b1c7a..d4a65088c7 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtils.java
@@ -26,8 +26,10 @@ import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
 import org.kie.dmn.api.core.ast.DecisionNode;
 import org.kie.dmn.api.core.ast.DecisionServiceNode;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
 import org.kie.dmn.api.core.event.AfterEvaluateAllEvent;
 import org.kie.dmn.api.core.event.AfterEvaluateBKMEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
 import org.kie.dmn.api.core.event.AfterEvaluateContextEntryEvent;
 import org.kie.dmn.api.core.event.AfterEvaluateDecisionEvent;
 import org.kie.dmn.api.core.event.AfterEvaluateDecisionServiceEvent;
@@ -42,6 +44,7 @@ import 
org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
 import org.kie.dmn.api.core.event.BeforeInvokeBKMEvent;
 import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -149,6 +152,20 @@ public final class DMNRuntimeEventManagerUtils {
         }
     }
 
+    public static void fireAfterEvaluateConditional(DMNRuntimeEventManager 
eventManager, EvaluatorResult evaluatorResult, String executedId) {
+        if( eventManager.hasListeners() ) {
+            AfterEvaluateConditionalEvent event = new 
AfterEvaluateConditionalEventImpl(evaluatorResult, executedId);
+            notifyListeners(eventManager, l -> 
l.afterEvaluateConditional(event));
+        }
+    }
+
+    public static void fireAfterConditionalEvaluation(DMNRuntimeEventManager 
eventManager, EvaluatorResult evaluatorResult, String idExecuted) {
+        if( eventManager.hasListeners() ) {
+            AfterConditionalEvaluationEvent event = new 
AfterConditionalEvaluationEventImpl(evaluatorResult, idExecuted);
+            notifyListeners(eventManager, l -> 
l.afterConditionalEvaluation(event));
+        }
+    }
+
     private static void notifyListeners(DMNRuntimeEventManager eventManager, 
Consumer<DMNRuntimeEventListener> consumer) {
         for( DMNRuntimeEventListener listener : eventManager.getListeners() ) {
             try {
@@ -159,6 +176,7 @@ public final class DMNRuntimeEventManagerUtils {
         }
     }
 
+
     private DMNRuntimeEventManagerUtils() {
         // Constructing instances is not allowed for this class
     }
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
index 12a3eebea5..203c44f32a 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
@@ -45,7 +45,7 @@ import org.kie.dmn.api.core.ast.InputDataNode;
 import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
 import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
 import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.ast.BusinessKnowledgeModelNodeImpl;
 import org.kie.dmn.core.ast.DMNBaseNode;
 import org.kie.dmn.core.ast.DMNDecisionServiceEvaluator;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
index 584005239c..414d1efbc4 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractDMNKiePMMLInvocationEvaluator.java
@@ -28,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.DMNType;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
 import org.kie.dmn.core.impl.CompositeTypeImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
index 25f6b18a96..fb07f4708a 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/AbstractPMMLInvocationEvaluator.java
@@ -30,8 +30,8 @@ import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.DMNType;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.DMNFunctionDefinitionEvaluator.FormalParameter;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
 import org.kie.dmn.core.impl.DMNModelImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
index 4feaac9d57..d89ff7ef4c 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
@@ -19,6 +19,7 @@
 package org.kie.dmn.core;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -39,7 +40,11 @@ import org.kie.dmn.api.core.ast.DecisionNode;
 import org.kie.dmn.api.core.ast.DecisionServiceNode;
 import org.kie.dmn.api.core.ast.InputDataNode;
 import org.kie.dmn.api.core.ast.ItemDefNode;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
 import org.kie.dmn.core.api.DMNFactory;
+import org.kie.dmn.core.api.event.DefaultDMNRuntimeEventListener;
 import org.kie.dmn.core.util.DMNRuntimeUtil;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -377,6 +382,59 @@ public class DMNInputRuntimeTest extends 
BaseInterpretedVsCompiledTest {
         assertThat(dmnResult3.getMessages().stream().anyMatch(m -> 
m.getMessageType().equals(DMNMessageType.ERROR_EVAL_NODE))).isTrue();
     }
 
+    @ParameterizedTest
+    @MethodSource("params")
+    void conditionalIfCheck(boolean useExecModelCompiler) {
+        init(useExecModelCompiler);
+        final String ifElementId = "_3C702CE4-E5A0-4B6F-905D-C2621FFFA387";
+        final String thenElementId = "_6481FF12-61B5-451C-B775-4143D9B6CD6B";
+        final String elseElementId = "_2CD02CB2-6B56-45C4-B461-405E89D45633";
+        final DMNRuntime runtime = 
DMNRuntimeUtil.createRuntime("valid_models/DMNv1_5/RiskScore_Simple.dmn", 
this.getClass() );
+
+
+        final List<AfterEvaluateConditionalEvent> 
afterEvaluateConditionalEvents = new ArrayList<>();
+        final List<AfterConditionalEvaluationEvent> 
afterConditionalEvaluationEvents = new ArrayList<>();
+        runtime.addListener(new DefaultDMNRuntimeEventListener() {
+
+            @Override
+            public void afterEvaluateConditional(AfterEvaluateConditionalEvent 
event) {
+                afterEvaluateConditionalEvents.add(event);
+            }
+
+            @Override
+            public void 
afterConditionalEvaluation(AfterConditionalEvaluationEvent event) {
+                afterConditionalEvaluationEvents.add(event);
+            }
+
+        });
+        final DMNModel dmnModel = runtime.getModel(
+                "https://kie.org/dmn/_A3317FB1-7BF8-4904-A5F4-2CD63AF3AEC9";,
+                "DMN_A77074C1-21FE-4F7E-9753-F84661569AFC" );
+        assertThat(dmnModel).isNotNull();
+        
assertThat(dmnModel.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnModel.getMessages())).isFalse();
+
+        final DMNContext ctx1 = runtime.newContext();
+        ctx1.set("Credit Score", "Poor");
+        ctx1.set("DTI", 33);
+        final DMNResult dmnResult1 = runtime.evaluateAll( dmnModel, ctx1 );
+        
assertThat(dmnResult1.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnResult1.getMessages())).isFalse();
+        assertThat( dmnResult1.getContext().get( "Risk Score" 
)).isEqualTo(BigDecimal.valueOf(50));
+        assertThat(afterEvaluateConditionalEvents).hasSize(1).allMatch(event 
-> event.getExecutedId().equals(ifElementId));
+        assertThat(afterConditionalEvaluationEvents).hasSize(1).allMatch(event 
-> event.getExecutedId().equals(elseElementId));
+
+        //
+        afterEvaluateConditionalEvents.clear();
+        afterConditionalEvaluationEvents.clear();
+        final DMNContext ctx2 = runtime.newContext();
+        ctx2.set("Credit Score", "Excellent");
+        ctx2.set("DTI", 10);
+        final DMNResult dmnResult2 = runtime.evaluateAll( dmnModel, ctx2 );
+        
assertThat(dmnResult2.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnResult1.getMessages())).isFalse();
+        assertThat( dmnResult2.getContext().get( "Risk Score" 
)).isEqualTo(BigDecimal.valueOf(20));
+        assertThat(afterEvaluateConditionalEvents).hasSize(1).allMatch(event 
-> event.getExecutedId().equals(ifElementId));
+        assertThat(afterConditionalEvaluationEvents).hasSize(1).allMatch(event 
-> event.getExecutedId().equals(thenElementId));
+    }
+
     @ParameterizedTest
     @MethodSource("params")
     void dmnInputDataNodeTypeTest(boolean useExecModelCompiler) {
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
index 89e261436f..13a044a657 100644
--- a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
+++ b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNRuntimeTest.java
@@ -63,7 +63,7 @@ import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
 import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
 import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
 import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.ast.DMNContextEvaluator;
 import org.kie.dmn.core.ast.DecisionNodeImpl;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNConditionalEvaluatorTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNConditionalEvaluatorTest.java
new file mode 100644
index 0000000000..4514ce77ce
--- /dev/null
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNConditionalEvaluatorTest.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.core.ast;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
+import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
+import org.kie.dmn.core.api.DMNExpressionEvaluator;
+import org.kie.dmn.core.impl.DMNResultImpl;
+import org.kie.dmn.model.api.ChildExpression;
+import org.kie.dmn.model.api.Conditional;
+import org.kie.dmn.model.api.DMNElement;
+import org.kie.dmn.model.api.DMNModelInstrumentedBase;
+import org.kie.dmn.model.api.Expression;
+import org.mockito.ArgumentCaptor;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DMNConditionalEvaluatorTest {
+
+    private static final String ID_ELEMENT_ID = "ID_ELEMENT_ID";
+    private static final String THEN_ELEMENT_ID = "THEN_ELEMENT_ID";
+    private static final String ELSE_ELEMENT_ID = "ELSE_ELEMENT_ID";
+    private static DMNRuntimeEventManager eventManagerMock;
+    private static DMNRuntimeEventListener spiedListener;
+    private static EvaluatorResult ifEvaluationMock;
+    private static EvaluatorResult thenEvaluationMock;
+    private static EvaluatorResult elseEvaluationMock;
+    private static DMNResultImpl dmnResultMock;
+    private static DMNConditionalEvaluator dmnConditionalEvaluator;
+
+    @BeforeAll
+    static void setUp() {
+        spiedListener = spy(DMNRuntimeEventListener.class);
+        Set<DMNRuntimeEventListener> listeners = 
Collections.singleton(spiedListener);
+        eventManagerMock = mock(DMNRuntimeEventManager.class);
+        when(eventManagerMock.hasListeners()).thenReturn(true);
+        when(eventManagerMock.getListeners()).thenReturn(listeners);
+        ifEvaluationMock = mock(EvaluatorResult.class);
+        thenEvaluationMock = mock(EvaluatorResult.class);
+        elseEvaluationMock = mock(EvaluatorResult.class);
+
+        dmnResultMock = mock(DMNResultImpl.class);
+        DMNExpressionEvaluator ifEvaluatorMock = 
mock(DMNExpressionEvaluator.class);
+        DMNExpressionEvaluator thenEvaluatorMock = 
mock(DMNExpressionEvaluator.class);
+        DMNExpressionEvaluator elseEvaluatorMock = 
mock(DMNExpressionEvaluator.class);
+
+        when(ifEvaluatorMock.evaluate(eventManagerMock, 
dmnResultMock)).thenReturn(ifEvaluationMock);
+        when(thenEvaluatorMock.evaluate(eventManagerMock, 
dmnResultMock)).thenReturn(thenEvaluationMock);
+        when(elseEvaluatorMock.evaluate(eventManagerMock, 
dmnResultMock)).thenReturn(elseEvaluationMock);
+
+        ChildExpression ifMock = mock(ChildExpression.class);
+        when(ifMock.getId()).thenReturn(ID_ELEMENT_ID);
+
+        ChildExpression thenMock = mock(ChildExpression.class);
+        when(thenMock.getId()).thenReturn(THEN_ELEMENT_ID);
+
+        ChildExpression elseMock = mock(ChildExpression.class);
+        when(elseMock.getId()).thenReturn(ELSE_ELEMENT_ID);
+
+        Conditional conditionalMock = mock(Conditional.class);
+        when(conditionalMock.getIf()).thenReturn(ifMock);
+        when(conditionalMock.getThen()).thenReturn(thenMock);
+        when(conditionalMock.getElse()).thenReturn(elseMock);
+
+        List<DMNModelInstrumentedBase> nodeChildren = 
Collections.singletonList(conditionalMock);
+        DMNElement nodeMock = mock(DMNElement.class);
+        when(nodeMock.getChildren()).thenReturn(nodeChildren);
+
+        dmnConditionalEvaluator = new DMNConditionalEvaluator("name",
+                                                              nodeMock,
+                                                              ifEvaluatorMock,
+                                                              
thenEvaluatorMock,
+                                                              
elseEvaluatorMock);
+    }
+
+    @BeforeEach
+    void setup() {
+        reset(spiedListener);
+    }
+
+    @Test
+    void evaluateListenerInvocation() {
+        
when(ifEvaluationMock.getResultType()).thenReturn(EvaluatorResult.ResultType.FAILURE);
 // not interested in
+        // nested execution
+
+        dmnConditionalEvaluator.evaluate(eventManagerMock, dmnResultMock);
+        ArgumentCaptor<AfterEvaluateConditionalEvent> 
evaluateConditionalEventArgumentCaptor =
+                ArgumentCaptor.forClass(AfterEvaluateConditionalEvent.class);
+        
verify(spiedListener).afterEvaluateConditional(evaluateConditionalEventArgumentCaptor.capture());
+        AfterEvaluateConditionalEvent evaluateConditionalEvent = 
evaluateConditionalEventArgumentCaptor.getValue();
+        assertThat(evaluateConditionalEvent).isNotNull();
+        
assertThat(evaluateConditionalEvent.getEvaluatorResultResult()).isEqualTo(ifEvaluationMock);
+        
assertThat(evaluateConditionalEvent.getExecutedId()).isEqualTo(ID_ELEMENT_ID);
+    }
+
+    @Test
+    void evaluateManageBooleanOrNullIfResultInvocation() {
+        
when(ifEvaluationMock.getResultType()).thenReturn(EvaluatorResult.ResultType.SUCCESS);
+        when(ifEvaluationMock.getResult()).thenReturn(true);
+
+        DMNConditionalEvaluator spiedDmnConditionalEvaluator = 
spy(dmnConditionalEvaluator);
+        spiedDmnConditionalEvaluator.evaluate(eventManagerMock, dmnResultMock);
+        verify(spiedDmnConditionalEvaluator).manageBooleanOrNullIfResult(true, 
eventManagerMock, dmnResultMock);
+    }
+
+    @Test
+    void manageBooleanOrNullIfResultWithTrue() {
+        dmnConditionalEvaluator.manageBooleanOrNullIfResult(true, 
eventManagerMock, dmnResultMock);
+        ArgumentCaptor<AfterConditionalEvaluationEvent> 
afterConditionalEvaluationEventArgumentCaptor =
+                ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+        
verify(spiedListener).afterConditionalEvaluation(afterConditionalEvaluationEventArgumentCaptor.capture());
+        AfterConditionalEvaluationEvent conditionalEvaluationEvent =
+                afterConditionalEvaluationEventArgumentCaptor.getValue();
+        assertThat(conditionalEvaluationEvent).isNotNull();
+        
assertThat(conditionalEvaluationEvent.getEvaluatorResultResult()).isEqualTo(thenEvaluationMock);
+        
assertThat(conditionalEvaluationEvent.getExecutedId()).isEqualTo(THEN_ELEMENT_ID);
+    }
+
+    @Test
+    void manageBooleanOrNullIfResultWithFalse() {
+        dmnConditionalEvaluator.manageBooleanOrNullIfResult(false, 
eventManagerMock, dmnResultMock);
+        ArgumentCaptor<AfterConditionalEvaluationEvent> 
afterConditionalEvaluationEventArgumentCaptor =
+                ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+        
verify(spiedListener).afterConditionalEvaluation(afterConditionalEvaluationEventArgumentCaptor.capture());
+        AfterConditionalEvaluationEvent conditionalEvaluationEvent =
+                afterConditionalEvaluationEventArgumentCaptor.getValue();
+        assertThat(conditionalEvaluationEvent).isNotNull();
+        
assertThat(conditionalEvaluationEvent.getEvaluatorResultResult()).isEqualTo(elseEvaluationMock);
+        
assertThat(conditionalEvaluationEvent.getExecutedId()).isEqualTo(ELSE_ELEMENT_ID);
+    }
+
+    @Test
+    void manageBooleanOrNullIfResultWithNull() {
+        dmnConditionalEvaluator.manageBooleanOrNullIfResult(null, 
eventManagerMock, dmnResultMock);
+        ArgumentCaptor<AfterConditionalEvaluationEvent> 
afterConditionalEvaluationEventArgumentCaptor =
+                ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+        
verify(spiedListener).afterConditionalEvaluation(afterConditionalEvaluationEventArgumentCaptor.capture());
+        AfterConditionalEvaluationEvent conditionalEvaluationEvent =
+                afterConditionalEvaluationEventArgumentCaptor.getValue();
+        assertThat(conditionalEvaluationEvent).isNotNull();
+        
assertThat(conditionalEvaluationEvent.getEvaluatorResultResult()).isEqualTo(elseEvaluationMock);
+        
assertThat(conditionalEvaluationEvent.getExecutedId()).isEqualTo(ELSE_ELEMENT_ID);
+    }
+}
\ No newline at end of file
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
index 066c543943..ab1f01394f 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/ast/DMNContextEvaluatorTest.java
@@ -31,7 +31,7 @@ import org.kie.dmn.api.core.DMNRuntime;
 import org.kie.dmn.api.core.ast.DecisionNode;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
 import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.impl.DMNDecisionResultImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.impl.DMNResultImplFactory;
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtilsTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtilsTest.java
new file mode 100644
index 0000000000..1a78b34fe8
--- /dev/null
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNRuntimeEventManagerUtilsTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.core.impl;
+
+import java.util.Collections;
+import java.util.Set;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.event.AfterConditionalEvaluationEvent;
+import org.kie.dmn.api.core.event.AfterEvaluateConditionalEvent;
+import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
+import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
+import org.mockito.ArgumentCaptor;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DMNRuntimeEventManagerUtilsTest {
+
+    private static DMNRuntimeEventManager eventManagerMock;
+    private static DMNRuntimeEventListener spiedListener;
+
+    @BeforeAll
+    static void setUp() {
+        spiedListener = spy(DMNRuntimeEventListener.class);
+        Set<DMNRuntimeEventListener> listeners = 
Collections.singleton(spiedListener);
+        eventManagerMock = mock(DMNRuntimeEventManager.class);
+        when(eventManagerMock.hasListeners()).thenReturn(true);
+        when(eventManagerMock.getListeners()).thenReturn(listeners);
+    }
+
+    @Test
+    void fireAfterEvaluateConditional() {
+        EvaluatorResult evaluatorResult = mock(EvaluatorResult.class);
+        String executedId = "EXECUTED_ID";
+        
DMNRuntimeEventManagerUtils.fireAfterEvaluateConditional(eventManagerMock, 
evaluatorResult, executedId);
+        ArgumentCaptor<AfterEvaluateConditionalEvent> 
evaluateConditionalEventArgumentCaptor = 
ArgumentCaptor.forClass(AfterEvaluateConditionalEvent.class);
+        verify(spiedListener).afterEvaluateConditional 
(evaluateConditionalEventArgumentCaptor.capture());
+        AfterEvaluateConditionalEvent evaluateConditionalEvent = 
evaluateConditionalEventArgumentCaptor.getValue();
+        assertThat(evaluateConditionalEvent).isNotNull();
+        
assertThat(evaluateConditionalEvent.getEvaluatorResultResult()).isEqualTo(evaluatorResult);
+        
assertThat(evaluateConditionalEvent.getExecutedId()).isEqualTo(executedId);
+    }
+
+    @Test
+    void fireAfterConditionalEvaluation() {
+        EvaluatorResult evaluatorResult = mock(EvaluatorResult.class);
+        String executedId = "EXECUTED_ID";
+        
DMNRuntimeEventManagerUtils.fireAfterConditionalEvaluation(eventManagerMock, 
evaluatorResult, executedId);
+        ArgumentCaptor<AfterConditionalEvaluationEvent> 
conditionalEvaluationEventArgumentCaptor = 
ArgumentCaptor.forClass(AfterConditionalEvaluationEvent.class);
+        verify(spiedListener).afterConditionalEvaluation 
(conditionalEvaluationEventArgumentCaptor.capture());
+        AfterConditionalEvaluationEvent evaluateConditionalEvent = 
conditionalEvaluationEventArgumentCaptor.getValue();
+        assertThat(evaluateConditionalEvent).isNotNull();
+        
assertThat(evaluateConditionalEvent.getEvaluatorResultResult()).isEqualTo(evaluatorResult);
+        
assertThat(evaluateConditionalEvent.getExecutedId()).isEqualTo(executedId);
+    }
+}
\ No newline at end of file
diff --git 
a/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
 
b/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
index b5443e3e86..e562d67e1a 100644
--- 
a/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
+++ 
b/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNRuntimeTest.java
@@ -58,7 +58,7 @@ import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
 import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
 import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
 import org.kie.dmn.core.api.DMNFactory;
-import org.kie.dmn.core.api.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.ast.DMNContextEvaluator;
 import org.kie.dmn.core.ast.DecisionNodeImpl;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git 
a/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
 
b/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
index 542b7c3ff9..aab6c9897d 100644
--- 
a/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
+++ 
b/kie-dmn/kie-dmn-signavio/src/main/java/org/kie/dmn/signavio/MultiInstanceDecisionLogic.java
@@ -33,8 +33,8 @@ import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.ast.DMNNode;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.DMNBaseNode;
 import org.kie.dmn.core.ast.DecisionNodeImpl;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
diff --git 
a/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/RiskScore_Simple.dmn
 
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/RiskScore_Simple.dmn
new file mode 100644
index 0000000000..ea0d40e36a
--- /dev/null
+++ 
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/RiskScore_Simple.dmn
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<definitions xmlns="https://www.omg.org/spec/DMN/20230324/MODEL/"; 
xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/"; 
xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"; 
xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"; 
xmlns:kie="https://kie.org/dmn/extensions/1.0"; 
expressionLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/"; 
namespace="https://kie.org/dmn/_A3317FB1-7BF8-4904-A5F4-2CD63AF3AEC9"; 
id="_49F637EB-0176-4A4A-9E4A-CBE3A969721E" 
name="DMN_A77074C1-21FE-4F7E-9753-F846 [...]
+  <itemDefinition id="_77090217-FF01-45CD-A561-C96D420D407A" name="Credit 
Score Rating" isCollection="false" 
typeLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/";>
+    <typeRef>string</typeRef>
+    <typeConstraint id="_9DB25671-9A5B-44E4-ABE6-449C844D0001" 
kie:constraintType="enumeration">
+      <text>&quot;Poor&quot;, &quot;Fair&quot;, &quot;Excellent&quot;</text>
+    </typeConstraint>
+  </itemDefinition>
+  <itemDefinition id="_22017A5D-692E-4DB4-BAE2-E99E88B4572F" name="Risk Level" 
isCollection="false" typeLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/";>
+    <typeRef>string</typeRef>
+    <typeConstraint id="_03B1B44C-3CEA-479E-BA26-8B07F3A68FB9" 
kie:constraintType="enumeration">
+      <text>&quot;High&quot;, &quot;Medium&quot;, &quot;Low&quot;</text>
+    </typeConstraint>
+  </itemDefinition>
+  <itemDefinition id="_21DBC185-4698-4F3C-9F25-5822307020EC" name="Loan 
Pre-Qualification" isCollection="false" 
typeLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/";>
+    <typeRef>string</typeRef>
+    <typeConstraint id="_AD5868E3-2107-438F-B5A2-CFD92F03F195" 
kie:constraintType="enumeration">
+      <text>&quot;Qualified&quot;, &quot;Not Qualified&quot;</text>
+    </typeConstraint>
+  </itemDefinition>
+  <inputData name="Credit Score" id="_D2C418A0-2BF8-4984-83C9-E53B9EF4EBA7">
+    <variable name="Credit Score" id="_BE4CFC54-DF9A-43B5-BB55-D5AED6674702" 
typeRef="Credit Score Rating" />
+  </inputData>
+  <inputData name="DTI" id="_7570C90B-8161-4F3B-B663-BDD72CEA6F69">
+    <variable name="DTI" id="_65E61476-DD45-4273-BC21-9CAD344B2506" 
typeRef="number" />
+  </inputData>
+  <decision name="Risk Score" id="_6C207FD6-14EA-4480-A90D-074ABC97B54B">
+    <variable name="Risk Score" id="_9D33E1E8-4F9D-4EE3-93F9-B626A24347B8" 
typeRef="number" />
+    <informationRequirement id="_2A94FC78-2E41-4674-B59D-88DF61B740CC">
+      <requiredInput href="#_D2C418A0-2BF8-4984-83C9-E53B9EF4EBA7" />
+    </informationRequirement>
+    <informationRequirement id="_33CC1417-78FB-483C-9C6A-05AB2541F3A3">
+      <requiredInput href="#_7570C90B-8161-4F3B-B663-BDD72CEA6F69" />
+    </informationRequirement>
+    <decisionTable id="_A7CCB9B9-9EF2-45B9-981B-623F2EA38C8A" 
hitPolicy="COLLECT" label="Risk Score" aggregation="SUM" typeRef="number">
+      <input id="_0E464A23-DDD9-49D6-B538-53BDFE6BCFA8">
+        <inputExpression id="_7E530C61-58CF-41A4-AD89-2EEDEA2AF87D" 
typeRef="Credit Score Rating">
+          <text>Credit Score</text>
+        </inputExpression>
+      </input>
+      <input id="_4ED67727-8A46-44AD-8E83-0930686523F5">
+        <inputExpression id="_A0CEB857-D309-4C6B-AFA9-AD0DCD294A14" 
typeRef="number">
+          <text>DTI</text>
+        </inputExpression>
+      </input>
+      <output id="_8694B6C1-E07D-49A0-B77B-B8BF99C85B1D" />
+      <annotation name="Annotations" />
+      <rule id="_1578BD9E-2BF9-4BFC-8956-1A736959C937">
+        <inputEntry id="_57DAA79A-4929-4D0C-A7D1-E7BA81674B8B">
+          <text>&quot;Poor&quot;</text>
+        </inputEntry>
+        <inputEntry id="_E2D67EAF-9023-4657-A852-7AFF89DDFF26">
+          <text>-</text>
+        </inputEntry>
+        <outputEntry id="_93601F57-F06C-4AD2-9BA0-6933AD8F6007">
+          <text>30</text>
+        </outputEntry>
+        <annotationEntry>
+          <text>// Your annotations here</text>
+        </annotationEntry>
+      </rule>
+      <rule id="_7A520705-7932-4DCD-B5CF-83E221C22C67">
+        <inputEntry id="_0251FFBE-776E-445C-9D21-1016D567E4B2">
+          <text>&quot;Fair&quot;</text>
+        </inputEntry>
+        <inputEntry id="_49919773-5835-4B07-B904-4C8AE17DFC9D">
+          <text>-</text>
+        </inputEntry>
+        <outputEntry id="_6B3C183E-44C5-4417-867D-D0E07BE873F2">
+          <text>20</text>
+        </outputEntry>
+        <annotationEntry>
+          <text></text>
+        </annotationEntry>
+      </rule>
+      <rule id="_31CD7AA3-A806-4E7E-B512-821F82043620">
+        <inputEntry id="_35282AEA-88C9-487E-9351-0C41DFD47EDD">
+          <text>&quot;Excellent&quot;</text>
+        </inputEntry>
+        <inputEntry id="_2A826B63-ACD7-4FED-95F5-A00BFD9ED6A0">
+          <text>-</text>
+        </inputEntry>
+        <outputEntry id="_6F982961-2952-4D54-8FA8-C81635E32D9B">
+          <text>10</text>
+        </outputEntry>
+        <annotationEntry>
+          <text></text>
+        </annotationEntry>
+      </rule>
+      <rule id="_01139A03-3E52-463E-B021-D71C87D85D19">
+        <inputEntry id="_AEB5E0A8-6DA5-4164-A604-B0F7080052F6">
+          <text>-</text>
+        </inputEntry>
+        <inputEntry id="_19A046D5-7580-46EB-85BB-94772286F91E">
+          <text>&gt; 40</text>
+        </inputEntry>
+        <outputEntry id="_996CE47F-5F6D-445C-8B3B-E2133B53B4C9">
+          <text>30</text>
+        </outputEntry>
+        <annotationEntry>
+          <text></text>
+        </annotationEntry>
+      </rule>
+      <rule id="_2545E1A8-93D3-4C8A-A0ED-8AD8B10A58F9">
+        <inputEntry id="_C567462E-0C4A-4451-83A2-9C8F29F186DE">
+          <text>-</text>
+        </inputEntry>
+        <inputEntry id="_D286A02E-A286-4C12-B660-3E5803BF060C">
+          <text>[20..40]</text>
+        </inputEntry>
+        <outputEntry id="_D4114EE4-CD1B-476C-B82B-CFEC94C8A5BD">
+          <text>20</text>
+        </outputEntry>
+        <annotationEntry>
+          <text></text>
+        </annotationEntry>
+      </rule>
+      <rule id="_510A50DA-D5A4-4F06-B0BE-7F8F2AA83740">
+        <inputEntry id="_682B0AF4-E50B-48D9-9DC9-BF5E4DC1BA7F">
+          <text>-</text>
+        </inputEntry>
+        <inputEntry id="_31ED8040-8FFB-47CE-9688-095652B48A56">
+          <text>&lt; 20</text>
+        </inputEntry>
+        <outputEntry id="_34B5B114-3860-4661-8736-6690FA3EED6A">
+          <text>10</text>
+        </outputEntry>
+        <annotationEntry>
+          <text></text>
+        </annotationEntry>
+      </rule>
+    </decisionTable>
+  </decision>
+  <decision name="Loan Pre-Qualification" 
id="_A1236581-4334-43F1-82A0-72CE204F07F9">
+    <variable name="Loan Pre-Qualification" 
id="_5144C9A3-5B8F-45F0-9197-85AC4A9101FF" typeRef="Loan Pre-Qualification" />
+    <informationRequirement id="_071A7C19-6F4B-4383-837D-F3AE68D790CA">
+      <requiredDecision href="#_6C207FD6-14EA-4480-A90D-074ABC97B54B" />
+    </informationRequirement>
+    <conditional id="_A80832EF-8F9C-4638-B5FB-047210860DF2" label="Loan 
Pre-Qualification" typeRef="Loan Pre-Qualification">
+      <if id="_3C702CE4-E5A0-4B6F-905D-C2621FFFA387">
+        <literalExpression id="_CA44F978-C3A3-4D65-BABB-8BDA2FBB1074" 
label="Expression Name">
+          <text>Risk Score &lt;= 30</text>
+        </literalExpression>
+      </if>
+      <then id="_6481FF12-61B5-451C-B775-4143D9B6CD6B">
+        <literalExpression id="_000EE7D4-6DAB-4BC1-8A5A-59E1E9E61B21" 
label="Expression Name">
+          <text>&quot;Qualified&quot; </text>
+        </literalExpression>
+      </then>
+      <else id="_2CD02CB2-6B56-45C4-B461-405E89D45633">
+        <literalExpression id="_EDEFF23B-55B9-4D8C-AB04-8E49F642CB22" 
label="Expression Name">
+          <text>&quot;Not Qualified&quot;</text>
+        </literalExpression>
+      </else>
+    </conditional>
+  </decision>
+  <dmndi:DMNDI>
+    <dmndi:DMNDiagram id="_5E59BB13-A55B-4CCD-A809-5AF1453F9497" name="Default 
DRD" useAlternativeInputDataShape="false">
+      <di:extension>
+        <kie:ComponentsWidthsExtension>
+          <kie:ComponentWidths 
dmnElementRef="_6296756B-FA04-4FF7-A57A-544032479953">
+            <kie:width>60</kie:width>
+            <kie:width>145</kie:width>
+            <kie:width>118</kie:width>
+            <kie:width>118</kie:width>
+            <kie:width>240</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_27AD330E-AE19-4C6A-957F-BEA0298BE91B">
+            <kie:width>120</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_9F210198-9DE3-4187-919C-0C0438B0329D">
+            <kie:width>60</kie:width>
+            <kie:width>145</kie:width>
+            <kie:width>118</kie:width>
+            <kie:width>118</kie:width>
+            <kie:width>240</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_61B65CB0-E875-402F-8523-D0B96842D149">
+            <kie:width>190</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_21462997-F64F-4B7F-ABC8-9E590D24792F">
+            <kie:width>190</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_A7CCB9B9-9EF2-45B9-981B-623F2EA38C8A">
+            <kie:width>60</kie:width>
+            <kie:width>145</kie:width>
+            <kie:width>118</kie:width>
+            <kie:width>118</kie:width>
+            <kie:width>240</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_CA44F978-C3A3-4D65-BABB-8BDA2FBB1074">
+            <kie:width>232</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_EDEFF23B-55B9-4D8C-AB04-8E49F642CB22">
+            <kie:width>232</kie:width>
+          </kie:ComponentWidths>
+          <kie:ComponentWidths 
dmnElementRef="_000EE7D4-6DAB-4BC1-8A5A-59E1E9E61B21">
+            <kie:width>190</kie:width>
+          </kie:ComponentWidths>
+        </kie:ComponentsWidthsExtension>
+      </di:extension>
+      <dmndi:DMNShape id="_A81B6612-69E6-4F16-9757-BF7B4F303F31" 
dmnElementRef="_D2C418A0-2BF8-4984-83C9-E53B9EF4EBA7" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="100" y="340" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="_B56A8877-2ED9-4EC8-8892-85AC3E43EAFC" 
dmnElementRef="_7570C90B-8161-4F3B-B663-BDD72CEA6F69" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="300" y="340" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60" 
dmnElementRef="_6C207FD6-14EA-4480-A90D-074ABC97B54B" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="200" y="180" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNEdge id="_C2F3DE23-1403-437E-8BCE-3BA2ED0DD3B3" 
dmnElementRef="_2A94FC78-2E41-4674-B59D-88DF61B740CC" 
sourceElement="_A81B6612-69E6-4F16-9757-BF7B4F303F31" 
targetElement="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60">
+        <di:waypoint x="180" y="380" />
+        <di:waypoint x="280" y="260" />
+      </dmndi:DMNEdge>
+      <dmndi:DMNEdge id="_998389B1-5594-4995-9B82-1805BF2AD884" 
dmnElementRef="_33CC1417-78FB-483C-9C6A-05AB2541F3A3" 
sourceElement="_B56A8877-2ED9-4EC8-8892-85AC3E43EAFC" 
targetElement="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60">
+        <di:waypoint x="380" y="380" />
+        <di:waypoint x="280" y="260" />
+      </dmndi:DMNEdge>
+      <dmndi:DMNShape id="_AE60ECB8-640A-4386-9D92-C5050242BA46" 
dmnElementRef="_A1236581-4334-43F1-82A0-72CE204F07F9" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="200" y="20" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNEdge id="_9D96AB19-6CE1-42DD-88F6-7D6216CBDF9F" 
dmnElementRef="_071A7C19-6F4B-4383-837D-F3AE68D790CA" 
sourceElement="_6F4414FB-5C2D-48D5-9D2A-677E989A9A60" 
targetElement="_AE60ECB8-640A-4386-9D92-C5050242BA46">
+        <di:waypoint x="280" y="220" />
+        <di:waypoint x="280" y="100" />
+      </dmndi:DMNEdge>
+    </dmndi:DMNDiagram>
+  </dmndi:DMNDI>
+</definitions>
diff --git 
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
 
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
index 4a2a1e1558..7821ce3672 100644
--- 
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
+++ 
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNConditionalEvaluator.java
@@ -22,8 +22,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.MsgUtil;
diff --git 
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
 
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
index 167a6bd01a..f5482b7b7c 100644
--- 
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
+++ 
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNFilterEvaluator.java
@@ -18,7 +18,6 @@
  */
 package org.kie.dmn.trisotech.core.ast;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
@@ -29,8 +28,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.MsgUtil;
diff --git 
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
 
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
index 0c5a30c0eb..6536b46adb 100644
--- 
a/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
+++ 
b/kie-dmn/kie-dmn-trisotech/src/main/java/org/kie/dmn/trisotech/core/ast/DMNIteratorEvaluator.java
@@ -26,8 +26,8 @@ import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.event.DMNRuntimeEventManager;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
-import org.kie.dmn.core.api.EvaluatorResult;
-import org.kie.dmn.core.api.EvaluatorResult.ResultType;
+import org.kie.dmn.api.core.EvaluatorResult;
+import org.kie.dmn.api.core.EvaluatorResult.ResultType;
 import org.kie.dmn.core.ast.EvaluatorResultImpl;
 import org.kie.dmn.core.impl.DMNResultImpl;
 import org.kie.dmn.core.util.MsgUtil;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to