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 655d49b4c7 [Incubator kie issues#2013] Deprecates use of time types 
with timezones. (#6385)
655d49b4c7 is described below

commit 655d49b4c77d28029113afd2526dae85c437b2ef
Author: ChinchuAjith <[email protected]>
AuthorDate: Tue Jul 1 21:26:22 2025 +0530

    [Incubator kie issues#2013] Deprecates use of time types with timezones. 
(#6385)
    
    * Deprecate type time with timezone
    
    * [incubator-kie-issues#2011] Implemented support for 1.6. Refactored to 
avoid duplication and moved common code to abstract classes
    
    * [incubator-kie-issues#2011] Remove leftover xsd
    
    * Added code changes to get the current model version
    
    * [incubator-kie-issues#2011] Fixed license headers
    
    * [incubator-kie-issues#2011] Fixed license headers
    
    * get dmn model version changes
    
    * code changes to get dmn model version
    
    * DMN Engine 1.6 changes
    
    * Fixing Review comments fix
    
    * Fixing Review comments
    
    * seperating group imports
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../main/java/org/kie/dmn/api/core/DMNVersion.java | 71 ++++++++++++++++++++++
 .../core/jsr223/JSR223DTExpressionEvaluator.java   | 13 +++-
 .../kie/dmn/core/ast/DMNInvocationEvaluator.java   |  7 ++-
 .../org/kie/dmn/core/compiler/DMNCompilerImpl.java | 12 ++--
 .../org/kie/dmn/core/compiler/DMNFEELHelper.java   | 13 ++--
 .../kie/dmn/core/compiler/DMNTypeRegistryV16.java} | 34 ++++++-----
 .../java/org/kie/dmn/core/impl/DMNModelImpl.java   | 17 +++++-
 .../org/kie/dmn/core/pmml/DMNImportPMMLInfo.java   |  3 +-
 .../test/java/org/kie/dmn/core/DMNRuntimeTest.java | 42 +++++++++++++
 .../core/compiler/DMNEvaluatorCompilerTest.java    |  3 +-
 .../kie/dmn/core/compiler/DMNFEELHelperTest.java   |  3 +-
 .../core/impl/DMNContextFEELCtxWrapperTest.java    |  6 ++
 .../org/kie/dmn/feel/lang/EvaluationContext.java   |  3 +
 .../dmn/feel/lang/impl/EvaluationContextImpl.java  | 27 +++++---
 .../org/kie/dmn/feel/lang/impl/FEELBuilder.java    | 10 ++-
 .../java/org/kie/dmn/feel/lang/impl/FEELImpl.java  | 11 +++-
 .../impl/SilentWrappingEvaluationContextImpl.java  |  6 ++
 .../feel/runtime/functions/BaseFEELFunction.java   | 20 ++++++
 .../dmn/feel/runtime/functions/FEELFnResult.java   | 16 +++++
 .../dmn/feel/runtime/functions/RangeFunction.java  |  3 +-
 .../dmn/feel/runtime/functions/TimeFunction.java   |  8 ++-
 .../src/main/java/org/kie/dmn/feel/util/Msg.java   |  2 +-
 .../dmn/feel/runtime/FEELDateTimeDurationTest.java | 32 +++++-----
 .../feel/runtime/functions/FEELFnResultTest.java}  | 59 ++++++------------
 .../dmn/feel/util/EvaluationContextTestUtil.java   |  5 +-
 .../legacy/tests/core/v1_1/DMNCompilerTest.java    |  9 +--
 .../kie/dmn/openapi/impl/BaseNodeSchemaMapper.java |  3 +-
 .../org/kie/dmn/openapi/impl/MapperHelper.java     |  5 +-
 .../valid_models/DMNv1_5/timeFunction.dmn          | 54 ++++++++++++++++
 .../valid_models/DMNv1_6/timeFunction.dmn          | 60 ++++++++++++++++++
 30 files changed, 438 insertions(+), 119 deletions(-)

diff --git 
a/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/DMNVersion.java 
b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/DMNVersion.java
new file mode 100644
index 0000000000..1510b14cd1
--- /dev/null
+++ b/kie-dmn/kie-dmn-api/src/main/java/org/kie/dmn/api/core/DMNVersion.java
@@ -0,0 +1,71 @@
+/*
+ * 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.api.core;
+
+import java.util.Collection;
+
+public enum DMNVersion {
+
+    V1_1(11),
+    V1_2(12),
+    V1_3(13),
+    V1_4(14),
+    V1_5(15),
+    V1_6(16);
+
+    private final int dmnVersion;
+
+
+    DMNVersion(int dmnVersion) {
+        this.dmnVersion = dmnVersion;
+    }
+
+    public int getDmnVersion() {
+        return dmnVersion;
+    }
+
+    public static DMNVersion getLatest() {
+        DMNVersion latest = null;
+        for (DMNVersion version : DMNVersion.values()) {
+            if (latest == null || version.dmnVersion > latest.dmnVersion) {
+                latest = version;
+            }
+        }
+        return latest;
+    }
+
+    public static DMNVersion inferDMNVersion(Collection<String> 
nsContextValues) {
+        DMNVersion toReturn = DMNVersion.getLatest();
+        if 
(nsContextValues.stream().anyMatch(org.kie.dmn.model.v1_6.KieDMNModelInstrumentedBase.URI_DMN::equals))
 {
+            toReturn = DMNVersion.V1_6;
+        }else if 
(nsContextValues.stream().anyMatch(org.kie.dmn.model.v1_5.KieDMNModelInstrumentedBase.URI_DMN::equals))
 {
+            toReturn = DMNVersion.V1_5;
+        } else if 
(nsContextValues.stream().anyMatch(org.kie.dmn.model.v1_4.KieDMNModelInstrumentedBase.URI_DMN::equals))
 {
+            toReturn = DMNVersion.V1_4;
+        } else if 
(nsContextValues.stream().anyMatch(org.kie.dmn.model.v1_3.KieDMNModelInstrumentedBase.URI_DMN::equals))
 {
+            toReturn = DMNVersion.V1_3;
+        } else if 
(nsContextValues.stream().anyMatch(org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase.URI_DMN::equals))
 {
+            toReturn = DMNVersion.V1_2;
+        } else if 
(nsContextValues.stream().anyMatch(org.kie.dmn.model.v1_1.KieDMNModelInstrumentedBase.URI_DMN::equals))
 {
+            toReturn = DMNVersion.V1_1;
+        }
+        return toReturn;
+    }
+
+}
\ No newline at end of file
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 73f77b7c4a..7cac3907f1 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
@@ -30,6 +30,7 @@ import javax.script.ScriptException;
 import org.drools.model.functions.Function1;
 import org.kie.dmn.api.core.DMNResult;
 import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.api.core.DMNVersion;
 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;
@@ -98,7 +99,7 @@ public class JSR223DTExpressionEvaluator implements 
DMNExpressionEvaluator {
                     results.addResult(rIndex, "", new 
Fn(rule.outLiteralExpr.getEval()));
                 }
             }
-            Object dtr = results.applyHitPolicy(new 
JSR223WrappingEC(contextValues, events), hitPolicy, decisionTableModel);
+            Object dtr = results.applyHitPolicy(new 
JSR223WrappingEC(contextValues, events, DMNVersion.getLatest()), hitPolicy, 
decisionTableModel);
 
             r = DMNDTExpressionEvaluator.processEvents( events, dmrem, result, 
node );
             return new EvaluatorResultImpl( dtr, r.hasErrors ? 
ResultType.FAILURE : ResultType.SUCCESS );
@@ -171,10 +172,12 @@ public class JSR223DTExpressionEvaluator implements 
DMNExpressionEvaluator {
         private final List<FEELEvent> events;
         // Defaulting FEELDialect to FEEL
         private final FEELDialect dialect = FEELDialect.FEEL;
+        private final DMNVersion dmnVersion;
 
-        public JSR223WrappingEC(Map<String, Object> values, List<FEELEvent> 
events) {
+        public JSR223WrappingEC(Map<String, Object> values, List<FEELEvent> 
events, DMNVersion dmnVersion) {
             this.values = Collections.unmodifiableMap(values);
             this.events = events;
+            this.dmnVersion = dmnVersion;
         }
 
         @Override
@@ -256,6 +259,12 @@ public class JSR223DTExpressionEvaluator implements 
DMNExpressionEvaluator {
         public FEELDialect getFEELDialect() {
             return dialect;
         }
+
+        @Override
+        public DMNVersion getDMNVersion() {
+            return dmnVersion;
+        }
+
     }
 
 }
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 7ea11a4169..5370103ee2 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
@@ -26,13 +26,14 @@ import java.util.function.BiFunction;
 import javax.xml.namespace.QName;
 
 import org.kie.dmn.api.core.DMNContext;
-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.EvaluatorResult;
+import org.kie.dmn.api.core.DMNMessage;
+import org.kie.dmn.api.core.DMNVersion;
 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.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;
@@ -188,7 +189,7 @@ public class DMNInvocationEvaluator
             FEELEventListenersManager listenerMgr = new 
FEELEventListenersManager();
             listenerMgr.addListener(events::add);
 
-            EvaluationContextImpl ctx = new EvaluationContextImpl(listenerMgr, 
eventManager.getRuntime(), FEELDialect.FEEL);
+            EvaluationContextImpl ctx = new EvaluationContextImpl(listenerMgr, 
eventManager.getRuntime(), FEELDialect.FEEL, DMNVersion.getLatest());
 
             invocationResult = function.invokeReflectively( ctx, namedParams );
 
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNCompilerImpl.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNCompilerImpl.java
index f5e2c8560e..3bd3bffe2f 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNCompilerImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNCompilerImpl.java
@@ -37,11 +37,12 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import javax.xml.namespace.QName;
 import org.kie.api.io.Resource;
-import org.kie.dmn.api.core.DMNCompiler;
-import org.kie.dmn.api.core.DMNCompilerConfiguration;
 import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNModel;
 import org.kie.dmn.api.core.DMNType;
+import org.kie.dmn.api.core.DMNVersion;
+import org.kie.dmn.api.core.DMNCompiler;
+import org.kie.dmn.api.core.DMNCompilerConfiguration;
 import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
 import org.kie.dmn.api.core.ast.DMNNode;
 import org.kie.dmn.api.core.ast.DecisionNode;
@@ -203,7 +204,7 @@ public class DMNCompilerImpl implements DMNCompiler {
         }
         DMNModelImpl model = new DMNModelImpl(dmndefs, resource);
         model.setRuntimeTypeCheck(((DMNCompilerConfigurationImpl) 
dmnCompilerConfig).getOption(RuntimeTypeCheckOption.class).isRuntimeTypeCheck());
-        DMNCompilerContext ctx = configureDMNCompiler(model.getFeelDialect(), 
relativeResolver);
+        DMNCompilerContext ctx = configureDMNCompiler(model.getFeelDialect(), 
model.getDMNVersion(), relativeResolver);
         if (!dmndefs.getImport().isEmpty()) {
             iterateImports(dmndefs, dmnModels, model, relativeResolver );
         }
@@ -215,13 +216,14 @@ public class DMNCompilerImpl implements DMNCompiler {
     /**
      * This method will Configures and creates a DMNCompilerContext for the 
DMN compiler, setting up the FEEL helper and relative resolver.
      * @param feeldialect : It used by the DMN compiler for parsing and 
evaluating FEEL expressions.
+     * @param dmnVersion : DMN version of the model.
      * @param relativeResolver : A Function that resolves relative paths to 
resources as Reader.
      * @return A configured DMNCompilerContext instance that can be used in 
the DMN compilation process.
      */
-    private DMNCompilerContext configureDMNCompiler(FEELDialect feeldialect, 
Function<String, Reader> relativeResolver) {
+    private DMNCompilerContext configureDMNCompiler(FEELDialect feeldialect, 
DMNVersion dmnVersion, Function<String, Reader> relativeResolver) {
         DMNCompilerConfigurationImpl cc = (DMNCompilerConfigurationImpl) 
dmnCompilerConfig;
         List<FEELProfile> helperFEELProfiles = cc.getFeelProfiles();
-        DMNFEELHelper feel = new DMNFEELHelper(cc.getRootClassLoader(), 
helperFEELProfiles, feeldialect);
+        DMNFEELHelper feel = new DMNFEELHelper(cc.getRootClassLoader(), 
helperFEELProfiles, feeldialect, dmnVersion);
         DMNCompilerContext ctx = new DMNCompilerContext(feel);
         ctx.setRelativeResolver(relativeResolver);
         return ctx;
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNFEELHelper.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNFEELHelper.java
index 87e954201a..33187ab0a9 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNFEELHelper.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNFEELHelper.java
@@ -35,6 +35,7 @@ import org.antlr.v4.runtime.CommonToken;
 import org.kie.dmn.api.core.DMNContext;
 import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNType;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.core.impl.BaseDMNTypeImpl;
@@ -74,17 +75,19 @@ public class DMNFEELHelper {
     private final FEELEventsListenerImpl listener;
     private final List<FEELProfile> feelProfiles = new ArrayList<>();
     private final FEELDialect feelDialect;
+    private final DMNVersion dmnVersion;
 
-    public DMNFEELHelper(List<FEELProfile> feelProfiles, FEELDialect 
feelDialect) {
-        this(ClassLoaderUtil.findDefaultClassLoader(), feelProfiles, 
feelDialect);
+    public DMNFEELHelper(List<FEELProfile> feelProfiles, FEELDialect 
feelDialect, DMNVersion dmnVersion) {
+        this(ClassLoaderUtil.findDefaultClassLoader(), feelProfiles, 
feelDialect, dmnVersion);
     }
 
-    public DMNFEELHelper(ClassLoader classLoader, List<FEELProfile> 
feelProfiles, FEELDialect feelDialect) {
+    public DMNFEELHelper(ClassLoader classLoader, List<FEELProfile> 
feelProfiles, FEELDialect feelDialect, DMNVersion dmnVersion) {
         this.classLoader = classLoader;
         this.feelProfiles.addAll(feelProfiles);
         this.listener = new FEELEventsListenerImpl();
         this.feelDialect = feelDialect;
         this.feel = createFEELInstance();
+        this.dmnVersion = dmnVersion;
     }
 
     private FEEL createFEELInstance() {
@@ -101,6 +104,7 @@ public class DMNFEELHelper {
         return FEELBuilder.builder().withClassloader(classLoader)
                 .withProfiles(feelProfiles)
                 .withFEELDialect(feelDialect)
+                .withDMNVersion(dmnVersion)
                 .build();
     }
 
@@ -114,6 +118,7 @@ public class DMNFEELHelper {
         return FEELBuilder.builder().withClassloader(classLoader)
                 .withProfiles(feelProfiles)
                 .withFEELDialect(overridingFeelDialect)
+                .withDMNVersion(dmnVersion)
                 .build();
     }
 
@@ -122,7 +127,7 @@ public class DMNFEELHelper {
         FEELEventsListenerImpl listener = new FEELEventsListenerImpl();
         manager.addListener( listener );
         // Defaulting FEELDialect to FEEL
-        EvaluationContextImpl ctx = new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), manager, 
FEELDialect.FEEL);
+        EvaluationContextImpl ctx = new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), manager, 
FEELDialect.FEEL, DMNVersion.getLatest());
         try {
             ctx.enterFrame();
             if ( dmnContext != null ) {
diff --git 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNTypeRegistryV16.java
similarity index 50%
copy from 
kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
copy to 
kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNTypeRegistryV16.java
index f530daa76f..db6c0915dc 100644
--- 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/compiler/DMNTypeRegistryV16.java
@@ -16,26 +16,32 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.feel.util;
+package org.kie.dmn.core.compiler;
 
-import org.kie.dmn.feel.lang.EvaluationContext;
-import org.kie.dmn.feel.lang.FEELDialect;
-import org.kie.dmn.feel.lang.impl.EvaluationContextImpl;
-import org.kie.dmn.feel.lang.impl.FEELEventListenersManager;
+import org.kie.dmn.api.core.DMNType;
+import org.kie.dmn.core.impl.SimpleTypeImpl;
+import org.kie.dmn.core.impl.TupleIdentifier;
+import org.kie.dmn.model.v1_6.KieDMNModelInstrumentedBase;
 
-public class EvaluationContextTestUtil {
+import javax.xml.namespace.QName;
+import java.util.Map;
 
-    private EvaluationContextTestUtil() {
-        // only static methods for util class.
+public class DMNTypeRegistryV16 extends DMNTypeRegistryAbstract {
+
+    private static final DMNType UNKNOWN = 
SimpleTypeImpl.UNKNOWN_DMNTYPE(KieDMNModelInstrumentedBase.URI_FEEL);
+
+
+    public DMNTypeRegistryV16(Map<TupleIdentifier, QName> aliases) {
+        super(aliases);
     }
 
-    public static EvaluationContext 
newEmptyEvaluationContext(FEELEventListenersManager mgr) {
-        // Defaulting FEELDialect to FEEL
-        return new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), mgr, 
FEELDialect.FEEL);
+    @Override
+    public DMNType unknown() {
+        return UNKNOWN;
     }
 
-    public static EvaluationContext newEmptyEvaluationContext() {
-        // Defaulting FEELDialect to FEEL
-        return new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL);
+    @Override
+    public String feelNS() {
+        return KieDMNModelInstrumentedBase.URI_FEEL;
     }
 }
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNModelImpl.java 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNModelImpl.java
index 3d918943df..48728e1b33 100644
--- a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNModelImpl.java
+++ b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNModelImpl.java
@@ -44,6 +44,7 @@ import org.kie.api.io.Resource;
 import org.kie.dmn.api.core.DMNMessage;
 import org.kie.dmn.api.core.DMNMessageType;
 import org.kie.dmn.api.core.DMNModel;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.core.ast.BusinessKnowledgeModelNode;
 import org.kie.dmn.api.core.ast.DMNNode;
 import org.kie.dmn.api.core.ast.DecisionNode;
@@ -59,11 +60,12 @@ import org.kie.dmn.core.ast.BusinessKnowledgeModelNodeImpl;
 import org.kie.dmn.core.ast.DecisionNodeImpl;
 import org.kie.dmn.core.compiler.DMNCompilerImpl;
 import org.kie.dmn.core.compiler.DMNTypeRegistry;
-import org.kie.dmn.core.compiler.DMNTypeRegistryV11;
+import org.kie.dmn.core.compiler.DMNTypeRegistryV14;
 import org.kie.dmn.core.compiler.DMNTypeRegistryV12;
+import org.kie.dmn.core.compiler.DMNTypeRegistryV11;
 import org.kie.dmn.core.compiler.DMNTypeRegistryV13;
-import org.kie.dmn.core.compiler.DMNTypeRegistryV14;
 import org.kie.dmn.core.compiler.DMNTypeRegistryV15;
+import org.kie.dmn.core.compiler.DMNTypeRegistryV16;
 import org.kie.dmn.core.pmml.DMNImportPMMLInfo;
 import org.kie.dmn.core.util.DefaultDMNMessagesManager;
 import org.kie.dmn.feel.lang.FEELDialect;
@@ -107,6 +109,8 @@ public class DMNModelImpl
 
     private FEELDialect feelDialect;
 
+    private DMNVersion dmnVersion;
+
     public DMNModelImpl() {
         // needed because Externalizable.
     }
@@ -119,6 +123,7 @@ public class DMNModelImpl
         String expressionLanguage = definitions.getExpressionLanguage() != 
null ? definitions.getExpressionLanguage() : "";
         try {
             feelDialect = FEELDialect.fromNamespace(expressionLanguage);
+            dmnVersion = 
DMNVersion.inferDMNVersion(definitions.getNsContext().values());
         } catch (IllegalArgumentException e) {
             feelDialect = FEELDialect.FEEL;
         }
@@ -134,6 +139,10 @@ public class DMNModelImpl
         return feelDialect;
     }
 
+    public DMNVersion getDMNVersion() {
+        return dmnVersion;
+    }
+
     private void wireTypeRegistry(Definitions definitions) {
         if (definitions instanceof org.kie.dmn.model.v1_1.TDefinitions) {
             types = new 
DMNTypeRegistryV11(Collections.unmodifiableMap(importAliases));
@@ -143,8 +152,10 @@ public class DMNModelImpl
             types = new 
DMNTypeRegistryV13(Collections.unmodifiableMap(importAliases));
         } else if (definitions instanceof org.kie.dmn.model.v1_4.TDefinitions) 
{
             types = new 
DMNTypeRegistryV14(Collections.unmodifiableMap(importAliases));
-        } else {
+        } else if (definitions instanceof org.kie.dmn.model.v1_5.TDefinitions) 
{
             types = new 
DMNTypeRegistryV15(Collections.unmodifiableMap(importAliases));
+        } else {
+            types = new 
DMNTypeRegistryV16(Collections.unmodifiableMap(importAliases));
         }
     }
     
diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/DMNImportPMMLInfo.java
 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/DMNImportPMMLInfo.java
index a623c9918f..e89aa0f977 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/DMNImportPMMLInfo.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/pmml/DMNImportPMMLInfo.java
@@ -35,6 +35,7 @@ import org.dmg.pmml.OutputField;
 import org.dmg.pmml.PMML;
 import org.dmg.pmml.Value;
 import org.kie.dmn.api.core.DMNType;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.core.compiler.DMNCompilerConfigurationImpl;
 import org.kie.dmn.core.compiler.DMNFEELHelper;
 import org.kie.dmn.core.impl.CompositeTypeImpl;
@@ -67,7 +68,7 @@ public class DMNImportPMMLInfo extends 
PMMLInfo<DMNPMMLModelInfo> {
                 String dfName =df.getName();
                 BuiltInType ft = getBuiltInTypeByDataType(df.getDataType());
                 List<FEELProfile> helperFEELProfiles = cc.getFeelProfiles();
-                DMNFEELHelper feel = new 
DMNFEELHelper(cc.getRootClassLoader(), helperFEELProfiles, 
model.getFeelDialect());
+                DMNFEELHelper feel = new 
DMNFEELHelper(cc.getRootClassLoader(), helperFEELProfiles, 
model.getFeelDialect(), model.getDMNVersion());
                 List<UnaryTest> av = new ArrayList<>();
                 if (df.getValues() != null && !df.getValues().isEmpty() && ft 
!= BuiltInType.UNKNOWN) {
                     final BuiltInType feelType = ft;
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 b59610dcb4..c1d1f8a781 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
@@ -62,6 +62,7 @@ import 
org.kie.dmn.api.core.event.BeforeEvaluateContextEntryEvent;
 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.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.core.api.DMNFactory;
 import org.kie.dmn.api.core.EvaluatorResult;
 import org.kie.dmn.core.ast.DMNContextEvaluator;
@@ -76,7 +77,9 @@ import org.kie.dmn.feel.lang.FEELProperty;
 import org.kie.dmn.feel.lang.types.BuiltInType;
 import org.kie.dmn.feel.lang.types.impl.ComparablePeriod;
 import org.kie.dmn.feel.marshaller.FEELStringMarshaller;
+import org.kie.dmn.feel.runtime.events.FEELEventBase;
 import org.kie.dmn.feel.util.BuiltInTypeUtils;
+import org.kie.dmn.feel.util.Msg;
 import org.kie.dmn.feel.util.NumberEvalHelper;
 import org.kie.dmn.model.api.Decision;
 import org.kie.dmn.model.api.Definitions;
@@ -770,6 +773,45 @@ public class DMNRuntimeTest extends 
BaseInterpretedVsCompiledTest {
         
assertThat(dmnResult.getContext().get("time")).as(DMNRuntimeUtil.formatMessages(dmnResult.getMessages())).isEqualTo(LocalTime.of(5,
 48, 23));
     }
 
+    @ParameterizedTest
+    @MethodSource("params")
+    void timeFunctionWithoutWarningEvent(boolean useExecModelCompiler) {
+        init(useExecModelCompiler);
+        final DMNRuntime runtime = 
DMNRuntimeUtil.createRuntime("valid_models/DMNv1_5/timeFunction.dmn", 
getClass());
+        runtime.addListener(DMNRuntimeUtil.createListener());
+
+        final DMNModel dmnModel = 
runtime.getModel("https://kie.org/dmn/_72913353-6A25-4439-AE70-4383A0544F31";, 
"DMN_50C0E61A-D1F2-41F0-8BD4-CE42BA135F43");
+        assertThat(dmnModel).isNotNull();
+        
assertThat(dmnModel.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnModel.getMessages())).isFalse();
+
+        final DMNContext context = DMNFactory.newContext();
+        context.set("a_time", "00:01:00@Etc/UTC");
+        final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context);
+        assertThat(dmnResult).isNotNull();
+        assertThat(dmnResult.getMessages().size()).isEqualTo(0);
+    }
+
+    @ParameterizedTest
+    @MethodSource("params")
+    void timeFunctionWithWarningEvent(boolean useExecModelCompiler) {
+        init(useExecModelCompiler);
+        String expectedMessage = 
Msg.createMessage(Msg.DEPRECATE_TIME_WITH_TIMEZONE);
+        final DMNRuntime runtime = 
DMNRuntimeUtil.createRuntime("valid_models/DMNv1_6/timeFunction.dmn", 
getClass());
+        runtime.addListener(DMNRuntimeUtil.createListener());
+
+        final DMNModel dmnModel = 
runtime.getModel("https://kie.org/dmn/_72913353-6A25-4439-AE70-4383A0544F31";, 
"DMN_50C0E61A-D1F2-41F0-8BD4-CE42BA135F43");
+        assertThat(dmnModel).isNotNull();
+        
assertThat(dmnModel.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnModel.getMessages())).isFalse();
+
+        final DMNContext context = DMNFactory.newContext();
+        context.set("a_time", "00:01:00@Etc/UTC");
+        final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context);
+        assertThat(dmnResult).isNotNull();
+        assertThat(dmnResult.getMessages().size()).isEqualTo(1);
+        
assertThat(dmnResult.getMessages().get(0).getFeelEvent().getMessage()).isEqualTo(expectedMessage);
+    }
+
+
     @ParameterizedTest
     @MethodSource("params")
     void alternativeNSDecl(boolean useExecModelCompiler) {
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNEvaluatorCompilerTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNEvaluatorCompilerTest.java
index d316b3bea3..0d5c577351 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNEvaluatorCompilerTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNEvaluatorCompilerTest.java
@@ -28,6 +28,7 @@ import org.kie.api.io.Resource;
 import org.kie.dmn.api.core.DMNModel;
 import org.kie.dmn.api.core.DMNRuntime;
 import org.kie.dmn.api.core.DMNType;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.core.api.DMNExpressionEvaluator;
 import org.kie.dmn.core.ast.DMNBaseNode;
 import org.kie.dmn.core.ast.DMNConditionalEvaluator;
@@ -62,7 +63,7 @@ class DMNEvaluatorCompilerTest {
 
     @BeforeAll
     static void setUp() {
-        DMN_FEEL_HELPER = new DMNFEELHelper(Collections.emptyList(), 
DEFAULT_FEEL_DIALECT);
+        DMN_FEEL_HELPER = new DMNFEELHelper(Collections.emptyList(), 
DEFAULT_FEEL_DIALECT, DMNVersion.getLatest());
         DMN_COMPILER_CONTEXT = new DMNCompilerContext(DMN_FEEL_HELPER);
 
         DMNCompilerImpl compiler = new DMNCompilerImpl();
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNFEELHelperTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNFEELHelperTest.java
index 7de9cdba7a..9aca7b6c3a 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNFEELHelperTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/compiler/DMNFEELHelperTest.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.feel.FEEL;
 import org.kie.dmn.feel.lang.FEELDialect;
 import org.kie.dmn.feel.lang.impl.FEELImpl;
@@ -35,7 +36,7 @@ class DMNFEELHelperTest {
 
     @BeforeAll
     static void setUp() {
-        DMN_FEEL_HELPER = new DMNFEELHelper(Collections.emptyList(), 
DEFAULT_FEEL_DIALECT);
+        DMN_FEEL_HELPER = new DMNFEELHelper(Collections.emptyList(), 
DEFAULT_FEEL_DIALECT, DMNVersion.getLatest());
     }
 
     @Test
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNContextFEELCtxWrapperTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNContextFEELCtxWrapperTest.java
index a2b59ef19c..d5322832cf 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNContextFEELCtxWrapperTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/impl/DMNContextFEELCtxWrapperTest.java
@@ -26,6 +26,7 @@ import java.util.function.Supplier;
 
 import org.junit.jupiter.api.Test;
 import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.core.BaseDMNContextTest;
@@ -167,6 +168,11 @@ class DMNContextFEELCtxWrapperTest extends 
BaseDMNContextTest {
             // Defaulting FEELDialect to FEEL
             return FEELDialect.FEEL;
         }
+
+        @Override
+        public DMNVersion getDMNVersion() {
+            return DMNVersion.getLatest();
+        }
     }
 
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
index 622412cb83..b521f0dcf0 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import java.util.function.Supplier;
 
 import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 
@@ -60,4 +61,6 @@ public interface EvaluationContext {
     Object getRootObject();
 
     FEELDialect getFEELDialect();
+
+    DMNVersion getDMNVersion();
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/EvaluationContextImpl.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/EvaluationContextImpl.java
index 9fb8b396c2..bbd79af6d4 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/EvaluationContextImpl.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/EvaluationContextImpl.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.function.Supplier;
 
 import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.feel.lang.EvaluationContext;
@@ -45,20 +46,22 @@ public class EvaluationContextImpl implements 
EvaluationContext {
     private boolean performRuntimeTypeCheck = false;
     private ClassLoader rootClassLoader;
     private final FEELDialect feelDialect;
+    private final DMNVersion dmnVersion;
 
-    private EvaluationContextImpl(ClassLoader cl, FEELEventListenersManager 
eventsManager, Deque<ExecutionFrame> stack, FEELDialect feelDialect) {
+    private EvaluationContextImpl(ClassLoader cl, FEELEventListenersManager 
eventsManager, Deque<ExecutionFrame> stack, FEELDialect feelDialect, DMNVersion 
dmnVersion) {
         this.eventsManager = eventsManager;
         this.rootClassLoader = cl;
         this.stack = new ArrayDeque<>(stack);
         this.feelDialect = feelDialect;
+        this.dmnVersion = dmnVersion;
     }
 
-    public EvaluationContextImpl(ClassLoader cl, FEELEventListenersManager 
eventsManager, FEELDialect feelDialect) {
-        this(cl, eventsManager, 32, feelDialect);
+    public EvaluationContextImpl(ClassLoader cl, FEELEventListenersManager 
eventsManager, FEELDialect feelDialect, DMNVersion dmnVersion) {
+        this(cl, eventsManager, 32, feelDialect, dmnVersion);
     }
 
-    public EvaluationContextImpl(ClassLoader cl, FEELEventListenersManager 
eventsManager, int size, FEELDialect feelDialect) {
-        this(cl, eventsManager, new ArrayDeque<>(), feelDialect);
+    public EvaluationContextImpl(ClassLoader cl, FEELEventListenersManager 
eventsManager, int size, FEELDialect feelDialect, DMNVersion dmnVersion) {
+        this(cl, eventsManager, new ArrayDeque<>(), feelDialect, dmnVersion);
         // we create a rootFrame to hold all the built in functions
         push( RootExecutionFrame.INSTANCE );
         // and then create a global frame to be the starting frame
@@ -68,19 +71,20 @@ public class EvaluationContextImpl implements 
EvaluationContext {
     }
 
     @Deprecated
-    public EvaluationContextImpl(FEELEventListenersManager eventsManager, 
DMNRuntime dmnRuntime, FEELDialect feelDialect) {
-        this(dmnRuntime.getRootClassLoader(), eventsManager, feelDialect);
+    public EvaluationContextImpl(FEELEventListenersManager eventsManager, 
DMNRuntime dmnRuntime, FEELDialect feelDialect, DMNVersion dmnVersion) {
+        this(dmnRuntime.getRootClassLoader(), eventsManager, feelDialect, 
dmnVersion);
         this.dmnRuntime = dmnRuntime;
     }
 
-    private EvaluationContextImpl(FEELEventListenersManager eventsManager, 
FEELDialect feelDialect) {
+    private EvaluationContextImpl(FEELEventListenersManager eventsManager, 
FEELDialect feelDialect, DMNVersion dmnVersion) {
         this.eventsManager = eventsManager;
         this.feelDialect = feelDialect;
+        this.dmnVersion = dmnVersion;
     }
 
     @Override
     public EvaluationContext current() {
-        EvaluationContextImpl ec = new EvaluationContextImpl(eventsManager, 
feelDialect);
+        EvaluationContextImpl ec = new EvaluationContextImpl(eventsManager, 
feelDialect, dmnVersion);
         ec.stack = stack.clone();
         ec.rootClassLoader = this.rootClassLoader;
         ec.dmnRuntime = this.dmnRuntime;
@@ -238,4 +242,9 @@ public class EvaluationContextImpl implements 
EvaluationContext {
     public FEELDialect getFEELDialect() {
         return feelDialect;
     }
+
+    @Override
+    public DMNVersion getDMNVersion() {
+        return dmnVersion;
+    }
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELBuilder.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELBuilder.java
index deb4841665..d53c834e0c 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELBuilder.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELBuilder.java
@@ -21,6 +21,7 @@ package org.kie.dmn.feel.lang.impl;
 import java.util.Collections;
 import java.util.List;
 
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.feel.FEEL;
 import org.kie.dmn.feel.lang.FEELDialect;
 import org.kie.dmn.feel.lang.FEELProfile;
@@ -40,6 +41,7 @@ public class FEELBuilder {
         private ClassLoader classLoader;
         private List<FEELProfile> profiles;
         private FEELDialect feelDialect;
+        private DMNVersion dmnVersion;
 
         private Builder() {
         }
@@ -59,11 +61,17 @@ public class FEELBuilder {
             return this;
         }
 
+        public Builder withDMNVersion(DMNVersion dmnVersion) {
+            this.dmnVersion = dmnVersion;
+            return this;
+        }
+
         public FEEL build() {
             ClassLoader classLoaderToUse = classLoader != null ? classLoader : 
ClassLoaderUtil.findDefaultClassLoader();
             List<FEELProfile> profilesToUse = profiles != null ? profiles : 
Collections.emptyList();
             FEELDialect feelDialectToUse = feelDialect != null ? feelDialect : 
FEELDialect.FEEL;
-            return new FEELImpl(classLoaderToUse, profilesToUse, 
feelDialectToUse);
+            DMNVersion dmnVersionToUse = dmnVersion != null  ? dmnVersion : 
DMNVersion.getLatest();
+            return new FEELImpl(classLoaderToUse, profilesToUse, 
feelDialectToUse, dmnVersionToUse);
         }
     }
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELImpl.java 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELImpl.java
index f825fcd7b3..aadea6e4c4 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELImpl.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/FEELImpl.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.feel.FEEL;
 import org.kie.dmn.feel.codegen.feel11.CompiledFEELExpression;
@@ -60,8 +61,9 @@ public class FEELImpl
     private final Collection<FEELFunction> customFunctions;
     private final boolean doCompile;
     private final FEELDialect feelDialect;
+    private final DMNVersion dmnVersion;
 
-    FEELImpl(ClassLoader cl, List<FEELProfile> profiles, FEELDialect 
feelDialect) {
+    FEELImpl(ClassLoader cl, List<FEELProfile> profiles, FEELDialect 
feelDialect, DMNVersion dmnVersion) {
         this.classLoader = cl;
         this.profiles = Collections.unmodifiableList(profiles);
         ExecutionFrameImpl frame = null;
@@ -85,6 +87,7 @@ public class FEELImpl
         customFrame = Optional.ofNullable(frame);
         customFunctions = 
Collections.unmodifiableCollection(functions.values());
         this.feelDialect = feelDialect;
+        this.dmnVersion = dmnVersion;
     }
 
     @Override
@@ -174,7 +177,7 @@ public class FEELImpl
      */
     public EvaluationContextImpl newEvaluationContext(ClassLoader cl, 
Collection<FEELEventListener> listeners, Map<String, Object> inputVariables) {
         FEELEventListenersManager eventsManager = getEventsManager(listeners);
-        EvaluationContextImpl ctx = new EvaluationContextImpl(cl, 
eventsManager, inputVariables.size(), feelDialect);
+        EvaluationContextImpl ctx = new EvaluationContextImpl(cl, 
eventsManager, inputVariables.size(), feelDialect, dmnVersion);
         if (customFrame.isPresent()) {
             ExecutionFrameImpl globalFrame = (ExecutionFrameImpl) ctx.pop();
             ExecutionFrameImpl interveawedFrame = customFrame.get();
@@ -228,4 +231,8 @@ public class FEELImpl
     public FEELDialect getFeelDialect() {
         return feelDialect;
     }
+
+    public DMNVersion getDMNVersion() {
+        return dmnVersion;
+    }
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/SilentWrappingEvaluationContextImpl.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/SilentWrappingEvaluationContextImpl.java
index 8b9da824c3..621b45948f 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/SilentWrappingEvaluationContextImpl.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/impl/SilentWrappingEvaluationContextImpl.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.function.Supplier;
 
 import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
 import org.kie.dmn.feel.lang.EvaluationContext;
@@ -122,4 +123,9 @@ public class SilentWrappingEvaluationContextImpl implements 
EvaluationContext {
     public FEELDialect getFEELDialect() {
         return wrapped.getFEELDialect();
     }
+
+    @Override
+    public DMNVersion getDMNVersion() {
+        return wrapped.getDMNVersion();
+    }
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/BaseFEELFunction.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/BaseFEELFunction.java
index fc2e701775..1ead0a7bdd 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/BaseFEELFunction.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/BaseFEELFunction.java
@@ -20,6 +20,7 @@ package org.kie.dmn.feel.runtime.functions;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -50,6 +51,7 @@ public abstract class BaseFEELFunction
         implements FEELFunction {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+    private static final int DMN_VERSION = 15;
 
     private String name;
     private Symbol symbol;
@@ -268,6 +270,7 @@ public abstract class BaseFEELFunction
                                    Supplier<List<String>> 
parameterNamesSupplier,
                                    Supplier<List<Object>> 
parameterValuesSupplier) {
         source = getFEELDialectAdaptedEither(ctx, source);
+        source = getEventedValueEither(ctx, source);
         return source.cata((left) -> {
             ctx.notifyEvt(() -> {
                         if (left instanceof InvalidParametersEvent 
invalidParametersEvent) {
@@ -299,6 +302,23 @@ public abstract class BaseFEELFunction
         }
     }
 
+    /**
+     * Resolves a value from the given Either, notifying the EvaluationContext
+     * if it contains a FEELEvent from a FEELFnResult
+     * @param ctx the evaluation context to notify of events
+     * @param source the input value, possibly a FEELFnResult with an event
+     * @return a right Either with the resolved value if an event is present, 
else the original source
+     */
+    private Either<FEELEvent, Object> getEventedValueEither(EvaluationContext 
ctx, Either<FEELEvent, Object> source) {
+        if(ctx.getDMNVersion().getDmnVersion() > DMN_VERSION && source 
instanceof FEELFnResult<Object> feelFnresult && feelFnresult.getEvent() != null 
) {
+            ctx.notifyEvt(feelFnresult::getEvent);
+            return Either.ofRight(feelFnresult.getOrElse(null));
+        } else {
+            return source;
+        }
+
+    }
+
     /**
      * Adapt the given <code>Object</code> to FEEL-Dialect-specific value, if 
needed
      *
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FEELFnResult.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FEELFnResult.java
index f68e345b89..154fe8d52d 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FEELFnResult.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FEELFnResult.java
@@ -26,8 +26,16 @@ import org.kie.dmn.feel.util.Either;
 
 public class FEELFnResult<T> extends Either<FEELEvent, T> {
 
+    private FEELEvent event;
+
     protected FEELFnResult(Optional<FEELEvent> left, Optional<T> right) {
         super(left, right);
+        event = null;
+    }
+
+    protected FEELFnResult(Optional<FEELEvent> left, Optional<T> right, 
FEELEvent warningEvent) {
+        this(left, right);
+        this.event = warningEvent;
     }
 
     public static <T> FEELFnResult<T> ofError(FEELEvent event) {
@@ -37,6 +45,10 @@ public class FEELFnResult<T> extends Either<FEELEvent, T> {
     public static <T> FEELFnResult<T> ofResult(T value) {
         return new FEELFnResult<>(Optional.empty(), 
Optional.ofNullable(value));
     }
+
+    public static <T> FEELFnResult<T> ofEventedResult(T value, FEELEvent 
warningEvent) {
+        return new FEELFnResult<>(Optional.empty(), 
Optional.ofNullable(value), warningEvent);
+    }
     
     public <X> FEELFnResult<X> map(Function<T, X> rightFn) {
         return isLeft()
@@ -50,4 +62,8 @@ public class FEELFnResult<T> extends Either<FEELEvent, T> {
                 : rightFn.apply(this.getRight().get());
     }
 
+    public FEELEvent getEvent() {
+        return event;
+    }
+
 }
\ No newline at end of file
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
index b4429da1a0..309e8699cc 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
@@ -34,6 +34,7 @@ import java.util.Objects;
 import java.util.function.Predicate;
 
 import org.antlr.v4.runtime.tree.ParseTree;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.feel.lang.EvaluationContext;
 import org.kie.dmn.feel.lang.FEELDialect;
@@ -200,7 +201,7 @@ public class RangeFunction extends BaseFEELFunction {
         if (STUBBED == null) {
             // Defaulting FEELDialect to FEEL
             STUBBED = new 
EvaluationContextImpl(Thread.currentThread().getContextClassLoader(),
-                                                new 
FEELEventListenersManager(), 0, FEELDialect.FEEL);
+                                                new 
FEELEventListenersManager(), 0, FEELDialect.FEEL, DMNVersion.getLatest());
         }
         return STUBBED;
     }
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/TimeFunction.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/TimeFunction.java
index dc1e6813be..776d704f3a 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/TimeFunction.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/TimeFunction.java
@@ -39,7 +39,9 @@ import org.kie.dmn.api.feel.runtime.events.FEELEvent;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent.Severity;
 import org.kie.dmn.feel.runtime.FEELTimeFunction;
 import org.kie.dmn.feel.runtime.custom.ZoneTime;
+import org.kie.dmn.feel.runtime.events.FEELEventBase;
 import org.kie.dmn.feel.runtime.events.InvalidParametersEvent;
+import org.kie.dmn.feel.util.Msg;
 
 import static org.kie.dmn.feel.util.NumberEvalHelper.coerceIntegerNumber;
 
@@ -94,7 +96,8 @@ public class TimeFunction
             if (parsed.query(TemporalQueries.offset()) != null) {
                 // it is an offset-zoned time, so I can know for certain an 
OffsetTime
                 OffsetTime asOffSetTime = parsed.query(OffsetTime::from);
-                return FEELFnResult.ofResult(asOffSetTime);
+                return FEELFnResult.ofEventedResult( asOffSetTime, new 
FEELEventBase( Severity.WARN,
+                        Msg.createMessage(Msg.DEPRECATE_TIME_WITH_TIMEZONE), 
null));
             } else if (parsed.query(TemporalQueries.zone()) == null) {
                 // if it does not contain any zone information at all, then I 
know for certain is a local time.
                 LocalTime asLocalTime = parsed.query(LocalTime::from);
@@ -104,7 +107,8 @@ public class TimeFunction
                 LocalTime asLocalTime = parsed.query(LocalTime::from);
                 ZoneId zoneId = parsed.query(TemporalQueries.zone());
                 ZoneTime zoneTime = ZoneTime.of(asLocalTime, zoneId, 
hasSeconds);
-                return FEELFnResult.ofResult(zoneTime);
+                return FEELFnResult.ofEventedResult( zoneTime, new 
FEELEventBase( Severity.WARN,
+                        Msg.createMessage(Msg.DEPRECATE_TIME_WITH_TIMEZONE) 
,null));
             }
             return FEELFnResult.ofResult(parsed);
         } catch (DateTimeException e) {
diff --git a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/Msg.java 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/Msg.java
index 4f23ab3bd3..885168af56 100644
--- a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/Msg.java
+++ b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/Msg.java
@@ -68,7 +68,7 @@ public final class Msg {
     public static final Message0 OPERATION_IS_UNDEFINED_FOR_PARAMETERS = new 
Message0("Based on the specification, the operation is undefined for the 
specified parameter set.");
 
     public static final Message3 INVALID_PARAMETERS_FOR_OPERATION = new 
Message3("Based on the specification, the '%s' operation is not applicable with 
the specified parameters '%s' and '%s'");
-
+    public static final Message0 DEPRECATE_TIME_WITH_TIMEZONE = new 
Message0("Usage of 'time' with a timezone is deprecated in DMN 1.6. This usage 
may be removed in future versions.");
     public static String createMessage( Message0 message) {
         return Msg.buildMessage(message);
     }
diff --git 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELDateTimeDurationTest.java
 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELDateTimeDurationTest.java
index 4cdd38cdaf..26293715be 100644
--- 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELDateTimeDurationTest.java
+++ 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELDateTimeDurationTest.java
@@ -89,13 +89,13 @@ public class FEELDateTimeDurationTest extends BaseFEELTest {
                 { "duration( \"P26M\" )", ComparablePeriod.parse( "P2Y2M" ) , 
null},
                 { "years and months duration( date(\"2011-12-22\"), 
date(\"2013-08-24\") )", ComparablePeriod.parse( "P1Y8M" ) , null},
                 { "@\"xyz\"", null , FEELEvent.Severity.ERROR },
-                { "(@\"13:20:00@Europe/Rome\").timezone", "Europe/Rome" , 
null},
-                { "(@\"13:20:00@Etc/UTC\").timezone", "Etc/UTC" , null},
-                { "(@\"13:20:00@Etc/GMT\").timezone", "Etc/GMT" , null},
+                { "(@\"13:20:00@Europe/Rome\").timezone", "Europe/Rome" , 
FEELEvent.Severity.WARN},
+                { "(@\"13:20:00@Etc/UTC\").timezone", "Etc/UTC" , 
FEELEvent.Severity.WARN},
+                { "(@\"13:20:00@Etc/GMT\").timezone", "Etc/GMT" , 
FEELEvent.Severity.WARN},
                 { "-duration( \"P2Y2M\" )", ComparablePeriod.parse( "-P2Y2M" ) 
, null},
                 {"@\"2023-10-10T10:31:00@Australia/Melbourne\"", 
DateTimeFormatter.ISO_DATE_TIME.parse("2023-10-10T10" +
                                                                                
                                ":31+11:00[Australia/Melbourne]", 
ZonedDateTime::from), null},
-                {"@\"10:15:00@Australia/Melbourne\"", 
ZoneTime.of(LocalTime.of(10, 15), ZoneId.of("Australia/Melbourne"), true), 
null},
+                {"@\"10:15:00@Australia/Melbourne\"", 
ZoneTime.of(LocalTime.of(10, 15), ZoneId.of("Australia/Melbourne"), true), 
FEELEvent.Severity.WARN},
 
                 // comparison operators
                 { "duration( \"P1Y6M\" ) = duration( \"P1Y6M\" )", 
Boolean.TRUE , null},
@@ -196,21 +196,21 @@ public class FEELDateTimeDurationTest extends 
BaseFEELTest {
                                                                                
                                              ":31+11:00[Australia/Melbourne]", 
ZonedDateTime::from), null},
                 { "@\"-P1D\" + @\"2023-10-10T10:31:00@Australia/Melbourne\"", 
DateTimeFormatter.ISO_DATE_TIME.parse("2023-10-09T10" +
                                                                                
                                              ":31+11:00[Australia/Melbourne]", 
ZonedDateTime::from), null},
-                { "@\"P1D\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), null},
-                { "@\"-P1D\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), null},
-                { "@\"PT1H\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("11:15", "Australia/Melbourne"), null},
-                { "@\"-PT1H\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("09:15", "Australia/Melbourne"), null},
+                { "@\"P1D\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"-P1D\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"PT1H\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("11:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"-PT1H\" + @\"10:15:00@Australia/Melbourne\"", 
getCorrectZoneTime("09:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
 
 
-                { "@\"10:15:00@Australia/Melbourne\" + @\"P1D\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), null},
-                { "@\"10:15:00@Australia/Melbourne\" - @\"P1D\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), null},
-                { "@\"10:15:00@Australia/Melbourne\" + @\"-P1D\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), null},
-                { "@\"10:15:00@Australia/Melbourne\" + @\"PT1H\"", 
getCorrectZoneTime("11:15", "Australia/Melbourne"), null},
-                { "@\"10:15:00@Australia/Melbourne\" - @\"PT1H\"", 
getCorrectZoneTime("09:15", "Australia/Melbourne"), null},
-                { "@\"10:15:00@Australia/Melbourne\" + @\"-PT1H\"", 
getCorrectZoneTime("09:15", "Australia/Melbourne"), null},
+                { "@\"10:15:00@Australia/Melbourne\" + @\"P1D\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"10:15:00@Australia/Melbourne\" - @\"P1D\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"10:15:00@Australia/Melbourne\" + @\"-P1D\"", 
getCorrectZoneTime("10:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"10:15:00@Australia/Melbourne\" + @\"PT1H\"", 
getCorrectZoneTime("11:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"10:15:00@Australia/Melbourne\" - @\"PT1H\"", 
getCorrectZoneTime("09:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
+                { "@\"10:15:00@Australia/Melbourne\" + @\"-PT1H\"", 
getCorrectZoneTime("09:15", "Australia/Melbourne"), FEELEvent.Severity.WARN},
 
-                {"string(@\"10:10@Australia/Melbourne\" + @\"PT1H\")", 
"11:10@Australia/Melbourne", null},
-                {"string(@\"10:10:00@Australia/Melbourne\" + @\"PT1H\")", 
"11:10:00@Australia/Melbourne", null},
+                {"string(@\"10:10@Australia/Melbourne\" + @\"PT1H\")", 
"11:10@Australia/Melbourne", FEELEvent.Severity.WARN},
+                {"string(@\"10:10:00@Australia/Melbourne\" + @\"PT1H\")", 
"11:10:00@Australia/Melbourne", FEELEvent.Severity.WARN},
 
 
                 // TODO support for zones - fix when timezones solved out 
(currently returns ZonedDateTime)
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FEELFnResultTest.java
similarity index 50%
copy from 
kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
copy to 
kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FEELFnResultTest.java
index 622412cb83..05a41d4182 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/EvaluationContext.java
+++ 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FEELFnResultTest.java
@@ -16,48 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.dmn.feel.lang;
+package org.kie.dmn.feel.runtime.functions;
 
-import java.util.Collection;
-import java.util.Map;
-import java.util.function.Supplier;
 
-import org.kie.dmn.api.core.DMNRuntime;
+import org.junit.jupiter.api.Test;
 import org.kie.dmn.api.feel.runtime.events.FEELEvent;
-import org.kie.dmn.api.feel.runtime.events.FEELEventListener;
-
-public interface EvaluationContext {
-
-    void enterFrame();
-
-    void exitFrame();
-
-    EvaluationContext current();
-
-    void setValue(String name, Object value );
-
-    Object getValue(String name );
-
-    Object getValue(String[] name );
-
-    boolean isDefined( String name );
-
-    boolean isDefined( String[] name );
-
-    Map<String, Object> getAllValues();
-
-    DMNRuntime getDMNRuntime();
-
-    ClassLoader getRootClassLoader();
-
-    void notifyEvt(Supplier<FEELEvent> event);
-
-
-    Collection<FEELEventListener> getListeners();
-
-    void setRootObject(Object v);
-
-    Object getRootObject();
-
-    FEELDialect getFEELDialect();
+import org.kie.dmn.feel.runtime.events.FEELEventBase;
+import org.kie.dmn.feel.util.Msg;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class FEELFnResultTest {
+
+    @Test
+    void testOfWarnedResult() {
+        FEELEvent warningEvent = new FEELEventBase( FEELEvent.Severity.WARN, 
Msg.createMessage(Msg.DEPRECATE_TIME_WITH_TIMEZONE), null);
+        String value = "test";
+        FEELFnResult<String> result = FEELFnResult.ofEventedResult(value, 
warningEvent);
+        assertThat(result).isNotNull();
+        assertThat(result.getEvent()).isEqualTo(warningEvent);
+        assertThat(result.getOrElse(null)).isEqualTo(value);
+    }
 }
diff --git 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
index f530daa76f..0468db5f6d 100644
--- 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
+++ 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/EvaluationContextTestUtil.java
@@ -18,6 +18,7 @@
  */
 package org.kie.dmn.feel.util;
 
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.feel.lang.EvaluationContext;
 import org.kie.dmn.feel.lang.FEELDialect;
 import org.kie.dmn.feel.lang.impl.EvaluationContextImpl;
@@ -31,11 +32,11 @@ public class EvaluationContextTestUtil {
 
     public static EvaluationContext 
newEmptyEvaluationContext(FEELEventListenersManager mgr) {
         // Defaulting FEELDialect to FEEL
-        return new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), mgr, 
FEELDialect.FEEL);
+        return new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), mgr, 
FEELDialect.FEEL, DMNVersion.getLatest());
     }
 
     public static EvaluationContext newEmptyEvaluationContext() {
         // Defaulting FEELDialect to FEEL
-        return new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL);
+        return new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL, DMNVersion.getLatest());
     }
 }
diff --git 
a/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNCompilerTest.java
 
b/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNCompilerTest.java
index 66dc085476..91fe9a70e1 100644
--- 
a/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNCompilerTest.java
+++ 
b/kie-dmn/kie-dmn-legacy-tests/src/test/java/org/kie/dmn/legacy/tests/core/v1_1/DMNCompilerTest.java
@@ -20,12 +20,7 @@ package org.kie.dmn.legacy.tests.core.v1_1;
 
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
-import org.kie.dmn.api.core.DMNContext;
-import org.kie.dmn.api.core.DMNMessage;
-import org.kie.dmn.api.core.DMNModel;
-import org.kie.dmn.api.core.DMNResult;
-import org.kie.dmn.api.core.DMNRuntime;
-import org.kie.dmn.api.core.DMNType;
+import org.kie.dmn.api.core.*;
 import org.kie.dmn.api.core.ast.ItemDefNode;
 import org.kie.dmn.core.api.DMNFactory;
 import org.kie.dmn.core.impl.CompositeTypeImpl;
@@ -71,7 +66,7 @@ public class DMNCompilerTest extends BaseDMN1_1VariantTest {
         final SimpleTypeImpl feelType = (SimpleTypeImpl) type;
 
         // Defaulting FEELDialect to FEEL
-        final EvaluationContext ctx =  new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL);
+        final EvaluationContext ctx =  new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL, DMNVersion.getLatest());
         assertThat(feelType.getFeelType()).isInstanceOf(AliasFEELType.class);
         
assertThat(feelType.getFeelType().getName()).isEqualTo("tEmploymentStatus");
         assertThat(feelType.getAllowedValuesFEEL()).hasSize(4);
diff --git 
a/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/BaseNodeSchemaMapper.java
 
b/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/BaseNodeSchemaMapper.java
index 6a4411ffb1..4d47b226db 100644
--- 
a/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/BaseNodeSchemaMapper.java
+++ 
b/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/BaseNodeSchemaMapper.java
@@ -26,6 +26,7 @@ import java.util.Set;
 import java.util.function.BiConsumer;
 
 import org.eclipse.microprofile.openapi.models.media.Schema;
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.feel.lang.FEELDialect;
 import org.kie.dmn.feel.lang.ast.AtLiteralNode;
 import org.kie.dmn.feel.lang.ast.BaseNode;
@@ -51,7 +52,7 @@ public class BaseNodeSchemaMapper {
     private static BiConsumer<BaseNode, Schema> ATLITERALNODE_CONSUMER = 
(node, schema) -> {
         // Defaulting FEELDialect to FEEL
         EvaluationContextImpl emptyEvalCtx =
-                new 
EvaluationContextImpl(BaseNodeSchemaMapper.class.getClassLoader(), new 
FEELEventListenersManager(), FEELDialect.FEEL);
+                new 
EvaluationContextImpl(BaseNodeSchemaMapper.class.getClassLoader(), new 
FEELEventListenersManager(), FEELDialect.FEEL, DMNVersion.getLatest());
         Object evaluated = node.evaluate(emptyEvalCtx);
         Object toStore = evaluated != null ? evaluated : ((AtLiteralNode) 
node).getStringLiteral().toString();
         populateEnumSchema(schema, toStore);
diff --git 
a/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/MapperHelper.java
 
b/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/MapperHelper.java
index ff27d9e78d..07f7c6393e 100644
--- 
a/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/MapperHelper.java
+++ 
b/kie-dmn/kie-dmn-openapi/src/main/java/org/kie/dmn/openapi/impl/MapperHelper.java
@@ -18,6 +18,7 @@
  */
 package org.kie.dmn.openapi.impl;
 
+import org.kie.dmn.api.core.DMNVersion;
 import org.kie.dmn.feel.lang.FEELDialect;
 import org.kie.dmn.feel.lang.ast.AtLiteralNode;
 import org.kie.dmn.feel.lang.ast.InfixOpNode;
@@ -31,12 +32,12 @@ public class MapperHelper {
 
     static Object evaluateInfixOpNode(InfixOpNode toEvaluate) {
         // Defaulting FEELDialect to FEEL
-        return toEvaluate.evaluate(new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL));
+        return toEvaluate.evaluate(new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL, DMNVersion.getLatest()));
     }
 
     static Object evaluateAtLiteralNode(AtLiteralNode toEvaluate) {
         // Defaulting FEELDialect to FEEL
-        return toEvaluate.evaluate(new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL));
+        return toEvaluate.evaluate(new 
EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null, 
FEELDialect.FEEL, DMNVersion.getLatest()));
     }
 
     private MapperHelper() {
diff --git 
a/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/timeFunction.dmn
 
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/timeFunction.dmn
new file mode 100644
index 0000000000..e6e0875eaf
--- /dev/null
+++ 
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_5/timeFunction.dmn
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+-->
+<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/_72913353-6A25-4439-AE70-4383A0544F31"; 
id="_150E738D-C81A-4BE8-8595-D85A63A8D60B" 
name="DMN_50C0E61A-D1F2-41F0-8BD4-CE42 [...]
+  <decision name="time" id="_13CBFAD6-3811-459A-930D-026239B0B26E">
+    <variable name="time" id="_8809F755-F0B3-4A31-9E10-02AE1C54B2A2" 
typeRef="time" />
+    <informationRequirement id="_F0D8BBA6-6707-4433-8212-0324F8CB927E">
+      <requiredInput href="#_CD0AF8FB-4B6D-41C9-A5E2-8B01D4731B20" />
+    </informationRequirement>
+    <literalExpression id="_6A50752C-AFA3-4497-8F04-693338815A09" 
typeRef="time" label="time">
+      <text>time(a_time)</text>
+    </literalExpression>
+  </decision>
+  <inputData name="a_time" id="_CD0AF8FB-4B6D-41C9-A5E2-8B01D4731B20">
+    <variable name="a_time" id="_85F94F9C-49AF-4AB2-A772-6A0326280049" 
typeRef="string" />
+  </inputData>
+  <dmndi:DMNDI>
+    <dmndi:DMNDiagram id="_4CF8B0C0-E536-4E12-B339-B3DD51296C11" name="Default 
DRD" useAlternativeInputDataShape="false">
+      <di:extension>
+        <kie:ComponentsWidthsExtension>
+          <kie:ComponentWidths 
dmnElementRef="_6A50752C-AFA3-4497-8F04-693338815A09">
+            <kie:width>190</kie:width>
+          </kie:ComponentWidths>
+        </kie:ComponentsWidthsExtension>
+      </di:extension>
+      <dmndi:DMNShape id="_6C6FB1EF-3A38-4A39-ADC2-A685725800AE" 
dmnElementRef="_13CBFAD6-3811-459A-930D-026239B0B26E" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="320" y="40" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="_C2DBDC70-E1CE-452C-BF2C-99E9F25AD0CA" 
dmnElementRef="_CD0AF8FB-4B6D-41C9-A5E2-8B01D4731B20" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="340" y="280" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNEdge id="_14682216-2859-4037-9FA4-6019EA3A3F88" 
dmnElementRef="_F0D8BBA6-6707-4433-8212-0324F8CB927E" 
sourceElement="_C2DBDC70-E1CE-452C-BF2C-99E9F25AD0CA" 
targetElement="_6C6FB1EF-3A38-4A39-ADC2-A685725800AE">
+        <di:waypoint x="420" y="320" />
+        <di:waypoint x="400" y="120" />
+      </dmndi:DMNEdge>
+    </dmndi:DMNDiagram>
+  </dmndi:DMNDI>
+</definitions>
diff --git 
a/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_6/timeFunction.dmn
 
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_6/timeFunction.dmn
new file mode 100644
index 0000000000..c0efdd1f34
--- /dev/null
+++ 
b/kie-dmn/kie-dmn-test-resources/src/test/resources/valid_models/DMNv1_6/timeFunction.dmn
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+-->
+<definitions xmlns="https://www.omg.org/spec/DMN/20240513/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/20240513/FEEL/";
+             
namespace="https://kie.org/dmn/_72913353-6A25-4439-AE70-4383A0544F31"; 
id="_150E738D-C81A-4BE8-8595-D85A63A8D60B" 
name="DMN_50C0E61A-D1F2-41F0-8BD4-CE42BA135F43">
+  <decision name="time" id="_13CBFAD6-3811-459A-930D-026239B0B26E">
+    <variable name="time" id="_8809F755-F0B3-4A31-9E10-02AE1C54B2A2" 
typeRef="time" />
+    <informationRequirement id="_F0D8BBA6-6707-4433-8212-0324F8CB927E">
+      <requiredInput href="#_CD0AF8FB-4B6D-41C9-A5E2-8B01D4731B20" />
+    </informationRequirement>
+    <literalExpression id="_6A50752C-AFA3-4497-8F04-693338815A09" 
typeRef="time" label="time">
+      <text>time(a_time)</text>
+    </literalExpression>
+  </decision>
+  <inputData name="a_time" id="_CD0AF8FB-4B6D-41C9-A5E2-8B01D4731B20">
+    <variable name="a_time" id="_85F94F9C-49AF-4AB2-A772-6A0326280049" 
typeRef="string" />
+  </inputData>
+  <dmndi:DMNDI>
+    <dmndi:DMNDiagram id="_4CF8B0C0-E536-4E12-B339-B3DD51296C11" name="Default 
DRD" useAlternativeInputDataShape="false">
+      <di:extension>
+        <kie:ComponentsWidthsExtension>
+          <kie:ComponentWidths 
dmnElementRef="_6A50752C-AFA3-4497-8F04-693338815A09">
+            <kie:width>190</kie:width>
+          </kie:ComponentWidths>
+        </kie:ComponentsWidthsExtension>
+      </di:extension>
+      <dmndi:DMNShape id="_6C6FB1EF-3A38-4A39-ADC2-A685725800AE" 
dmnElementRef="_13CBFAD6-3811-459A-930D-026239B0B26E" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="320" y="40" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNShape id="_C2DBDC70-E1CE-452C-BF2C-99E9F25AD0CA" 
dmnElementRef="_CD0AF8FB-4B6D-41C9-A5E2-8B01D4731B20" isCollapsed="false" 
isListedInputData="false">
+        <dc:Bounds x="340" y="280" width="160" height="80" />
+      </dmndi:DMNShape>
+      <dmndi:DMNEdge id="_14682216-2859-4037-9FA4-6019EA3A3F88" 
dmnElementRef="_F0D8BBA6-6707-4433-8212-0324F8CB927E" 
sourceElement="_C2DBDC70-E1CE-452C-BF2C-99E9F25AD0CA" 
targetElement="_6C6FB1EF-3A38-4A39-ADC2-A685725800AE">
+        <di:waypoint x="420" y="320" />
+        <di:waypoint x="400" y="120" />
+      </dmndi:DMNEdge>
+    </dmndi:DMNDiagram>
+  </dmndi:DMNDI>
+</definitions>


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

Reply via email to