diff --git a/src/policy/pom.xml b/src/policy/pom.xml
index 0818018d13bf17d3ed18c18e24c9baf396f7f16c..260368259e748fee2d4ea259da67ccf225a20e4d 100644
--- a/src/policy/pom.xml
+++ b/src/policy/pom.xml
@@ -152,6 +152,13 @@
             <artifactId>quarkus-config-yaml</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.30</version>
+            <scope>provided</scope>
+        </dependency>
+
         <!-- Testing -->
         <dependency>
             <groupId>org.assertj</groupId>
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java b/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java
index 302af09eb6ac0965e5bbca45934ee6c5f1a96668..570a7fb9e5501ce9e81037e7010cdb1c5fc35a94 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java
@@ -85,7 +85,6 @@ import org.etsi.tfs.policy.context.model.ServiceTypeEnum;
 import org.etsi.tfs.policy.context.model.SliceId;
 import org.etsi.tfs.policy.context.model.TopologyId;
 import org.etsi.tfs.policy.kpi_sample_types.model.KpiSampleType;
-import org.etsi.tfs.policy.model.*;
 import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
 import org.etsi.tfs.policy.monitoring.model.AlarmResponse;
 import org.etsi.tfs.policy.monitoring.model.AlarmSubscription;
@@ -101,6 +100,21 @@ import org.etsi.tfs.policy.monitoring.model.MonitorKpiRequest;
 import org.etsi.tfs.policy.monitoring.model.StringKpiValue;
 import org.etsi.tfs.policy.monitoring.model.SubsDescriptor;
 import org.etsi.tfs.policy.monitoring.model.SubsResponse;
+import org.etsi.tfs.policy.policy.model.*;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeService;
 import policy.Policy;
 import policy.Policy.PolicyRuleId;
 import policy.PolicyAction;
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/common/ApplicationProperties.java b/src/policy/src/main/java/org/etsi/tfs/policy/common/ApplicationProperties.java
index f01fcd9cca39350bf103fd1e2fe894334c4a3b80..daedca1f1ad7bf0bbfb1cb54615796164694d60c 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/common/ApplicationProperties.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/common/ApplicationProperties.java
@@ -16,8 +16,8 @@
 
 package org.etsi.tfs.policy.common;
 
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
 
 public class ApplicationProperties {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGateway.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGateway.java
index 42c82baa40a5b700a0f25852718ea05ae273f40b..8326775833ed3256a66a8d54d5169bab5b87a71e 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGateway.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGateway.java
@@ -21,7 +21,7 @@ import org.etsi.tfs.policy.context.model.Device;
 import org.etsi.tfs.policy.context.model.Empty;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
-import org.etsi.tfs.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
 
 public interface ContextGateway {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGatewayImpl.java
index aa959c7ae0317df2201c964ab2577e0daec561c3..4ee57445ff11bf841ab5c09c635f21e5447c364d 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGatewayImpl.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextGatewayImpl.java
@@ -27,7 +27,7 @@ import org.etsi.tfs.policy.context.model.Device;
 import org.etsi.tfs.policy.context.model.Empty;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
-import org.etsi.tfs.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
 
 @ApplicationScoped
 public class ContextGatewayImpl implements ContextGateway {
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextService.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextService.java
index a8a81ed313d9106fea018d32c53445a8bd27ece5..ae1dff4c214bd92e7cbbfe08e29a521b9de59b2b 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextService.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextService.java
@@ -21,7 +21,7 @@ import org.etsi.tfs.policy.context.model.Device;
 import org.etsi.tfs.policy.context.model.Empty;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
-import org.etsi.tfs.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
 
 public interface ContextService {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextServiceImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextServiceImpl.java
index 96f9c804f3850f253ba08407d7d20ded1bac0373..b9c733b2b106c988a68a02c62e90757bfa85abe1 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextServiceImpl.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/ContextServiceImpl.java
@@ -23,7 +23,7 @@ import org.etsi.tfs.policy.context.model.Device;
 import org.etsi.tfs.policy.context.model.Empty;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
-import org.etsi.tfs.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
 
 @ApplicationScoped
 public class ContextServiceImpl implements ContextService {
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/exception/GeneralExceptionHandler.java b/src/policy/src/main/java/org/etsi/tfs/policy/exception/GeneralExceptionHandler.java
index f6053ade2609609e5c9c3ab9ee324d5240a52fd2..9c92ef75867231e02644baa68d702f3b5bec88ff 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/exception/GeneralExceptionHandler.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/exception/GeneralExceptionHandler.java
@@ -20,7 +20,7 @@ public class GeneralExceptionHandler implements ExceptionHandlerProvider {
     public Throwable transform(Throwable t) {
         if (t instanceof ExternalServiceFailureException) {
             return new StatusRuntimeException(Status.INTERNAL.withDescription(t.getMessage()));
-        }else if (t instanceof NewException) {
+        } else if (t instanceof NewException) {
             return new StatusRuntimeException(Status.UNIMPLEMENTED.withDescription(t.getMessage()));
         } else {
             return ExceptionHandlerProvider.toStatusException(t, true);
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyGateway.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyGateway.java
similarity index 95%
rename from src/policy/src/main/java/org/etsi/tfs/policy/PolicyGateway.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyGateway.java
index 2dd059ac898ef50ef9ed2859d55d60962e723f42..dfd48c7c4987641b678c9ba6a63362cddba527d9 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyGateway.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyGateway.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy;
+package org.etsi.tfs.policy.policy;
 
 import policy.PolicyService;
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyGatewayImpl.java
similarity index 98%
rename from src/policy/src/main/java/org/etsi/tfs/policy/PolicyGatewayImpl.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyGatewayImpl.java
index 81478b014a8897e1583fda68cdd45b849ef2e1ad..9c3a2a4c9f8697bf16c9b6b2223bc38ed1477e2d 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyGatewayImpl.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyGatewayImpl.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy;
+package org.etsi.tfs.policy.policy;
 
 import context.ContextOuterClass.ServiceId;
 import io.quarkus.grpc.GrpcService;
@@ -23,6 +23,7 @@ import jakarta.inject.Inject;
 import org.eclipse.microprofile.metrics.MetricUnits;
 import org.eclipse.microprofile.metrics.annotation.Counted;
 import org.eclipse.microprofile.metrics.annotation.Timed;
+import org.etsi.tfs.policy.Serializer;
 import policy.Policy;
 import policy.Policy.PolicyRuleBasic;
 import policy.Policy.PolicyRuleDevice;
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyService.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyService.java
similarity index 83%
rename from src/policy/src/main/java/org/etsi/tfs/policy/PolicyService.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyService.java
index c0521c1925fbd2ff5e5762b9802b3f7f43c33788..ec8e3e3e96a1cd8eb66123e7e691e2dadaf290c3 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyService.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyService.java
@@ -14,12 +14,12 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy;
+package org.etsi.tfs.policy.policy;
 
 import io.smallrye.mutiny.Uni;
-import org.etsi.tfs.policy.model.PolicyRuleDevice;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
 
 public interface PolicyService {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyServiceImpl.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java
similarity index 95%
rename from src/policy/src/main/java/org/etsi/tfs/policy/PolicyServiceImpl.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java
index bb09fc883751778a3d53dc4a2b32f8f2335c6ef4..984276f59100d59a538f920d709fb3a0120c2afb 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/PolicyServiceImpl.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy;
+package org.etsi.tfs.policy.policy;
 
 import static org.etsi.tfs.policy.common.ApplicationProperties.*;
 
@@ -45,24 +45,26 @@ import org.etsi.tfs.policy.context.model.ServiceId;
 import org.etsi.tfs.policy.device.DeviceService;
 import org.etsi.tfs.policy.exception.ExternalServiceFailureException;
 import org.etsi.tfs.policy.exception.NewException;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.PolicyRule;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleDevice;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
-import org.etsi.tfs.policy.model.PolicyRuleTypeDevice;
-import org.etsi.tfs.policy.model.PolicyRuleTypeService;
 import org.etsi.tfs.policy.monitoring.MonitoringService;
 import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
 import org.etsi.tfs.policy.monitoring.model.AlarmResponse;
 import org.etsi.tfs.policy.monitoring.model.AlarmSubscription;
 import org.etsi.tfs.policy.monitoring.model.KpiValueRange;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeService;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionFieldsGetter;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
 import org.etsi.tfs.policy.service.ServiceService;
 import org.jboss.logging.Logger;
 
@@ -124,20 +126,20 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleService);
 
         if (!policyRuleService.areArgumentsValid()) {
-            LOGGER.error(policyRuleService.getExeceptionMessage());
+            LOGGER.error(policyRuleService.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleService.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleService.getExceptionMessage());
 
             return Uni.createFrom().item(policyRuleState);
         }
 
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            LOGGER.error(policyRuleService.getExeceptionMessage());
+            LOGGER.error(policyRuleService.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExceptionMessage());
             return Uni.createFrom().item(policyRuleState);
         }
 
@@ -278,26 +280,25 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleDevice);
 
         if (!policyRuleDevice.areArgumentsValid()) {
-            LOGGER.error(policyRuleDevice.getExeceptionMessage());
+            LOGGER.error(policyRuleDevice.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleDevice.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleDevice.getExceptionMessage());
 
             return Uni.createFrom().item(policyRuleState);
         }
 
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            LOGGER.error(policyRuleDevice.getExeceptionMessage());
+            LOGGER.error(policyRuleDevice.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExceptionMessage());
             return Uni.createFrom().item(policyRuleState);
         }
 
         final var deviceIds = policyRuleDevice.getDeviceIds();
-//        final var areDevicesValid = returnInvalidDeviceIds(deviceIds);
-        final var areDevicesValid = Uni.createFrom().item(List.of(true));
+        final var areDevicesValid = returnInvalidDeviceIds(deviceIds);
 
         return areDevicesValid
                 .onFailure()
@@ -408,20 +409,20 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleService);
 
         if (!policyRuleService.areArgumentsValid()) {
-            LOGGER.error(policyRuleService.getExeceptionMessage());
+            LOGGER.error(policyRuleService.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleService.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleService.getExceptionMessage());
 
             return Uni.createFrom().item(policyRuleState);
         }
 
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            LOGGER.error(policyRuleService.getExeceptionMessage());
+            LOGGER.error(policyRuleService.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExceptionMessage());
             return Uni.createFrom().item(policyRuleState);
         }
 
@@ -450,10 +451,10 @@ public class PolicyServiceImpl implements PolicyService {
         LOGGER.infof("Received %s", policyRuleDevice);
 
         if (!policyRuleDevice.areArgumentsValid()) {
-            LOGGER.error(policyRuleDevice.getExeceptionMessage());
+            LOGGER.error(policyRuleDevice.getExceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleDevice.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleDevice.getExceptionMessage());
 
             return Uni.createFrom().item(policyRuleState);
         }
@@ -462,7 +463,7 @@ public class PolicyServiceImpl implements PolicyService {
         if (!policyRuleBasic.areArgumentsValid()) {
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExceptionMessage());
             return Uni.createFrom().item(policyRuleState);
         }
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/BooleanOperator.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/BooleanOperator.java
similarity index 94%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/BooleanOperator.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/BooleanOperator.java
index 85133fc535ebfe4681e6452cc3872ae669b3776c..fe3ac35322bbd38efaf7e52f680a6ad512b2cbbd 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/BooleanOperator.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/BooleanOperator.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public enum BooleanOperator {
     POLICYRULE_CONDITION_BOOLEAN_UNDEFINED,
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/NumericalOperator.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/NumericalOperator.java
similarity index 95%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/NumericalOperator.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/NumericalOperator.java
index bc66490ddd6a210779ff5da28ca1e480c53d5768..bb6af774b5127c4c898d4d675c995cbd643571ff 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/NumericalOperator.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/NumericalOperator.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public enum NumericalOperator {
     POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED,
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRule.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRule.java
similarity index 96%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRule.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRule.java
index b879dbd7b6a3dbfbaac5c0f785f9cd724d21c20f..06b56c532306685e9ab39283791ae6f731cb7b45 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRule.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRule.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public class PolicyRule {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleAction.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleAction.java
similarity index 97%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleAction.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleAction.java
index f6b6d2e2fa88f581a93949378be89305a9c6ee22..a1d87ae78b98cb022667a1837003a37066db6256 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleAction.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleAction.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 import java.util.List;
 import java.util.stream.Collectors;
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleActionConfig.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleActionConfig.java
similarity index 96%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleActionConfig.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleActionConfig.java
index d815a3e9eb3a5af504d6e29daff33e7a657d30ad..341ecfddc7382361a76e31e9f566e4c28afb8a13 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleActionConfig.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleActionConfig.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public class PolicyRuleActionConfig {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleActionEnum.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleActionEnum.java
similarity index 95%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleActionEnum.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleActionEnum.java
index a29f4613391dd91b94e60688e3de3c57cc9c77fb..6e89898a753225bbf550118e5e12055630c5b00b 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleActionEnum.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleActionEnum.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public enum PolicyRuleActionEnum {
     POLICY_RULE_ACTION_NO_ACTION,
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleBase.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..6711fa77e1af17f00cb3d80c13d30bf23c57ae12
--- /dev/null
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleBase.java
@@ -0,0 +1,13 @@
+package org.etsi.tfs.policy.policy.model;
+
+import java.util.List;
+import lombok.Data;
+
+@Data
+public class PolicyRuleBase {
+
+    protected PolicyRuleBasic policyRuleBasic;
+    protected List<String> deviceIds;
+    protected Boolean isValid;
+    protected String exceptionMessage;
+}
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleBasic.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleBasic.java
similarity index 97%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleBasic.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleBasic.java
index 7df894abd91f23005e95a5cda8d5df6d196c61f0..305f0f26214d2a9a0ab6c53ab1ec8dc3aee6cb1c 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleBasic.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleBasic.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
@@ -72,7 +72,7 @@ public class PolicyRuleBasic {
         return isValid;
     }
 
-    public String getExeceptionMessage() {
+    public String getExceptionMessage() {
         return exceptionMessage;
     }
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleCondition.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleCondition.java
similarity index 98%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleCondition.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleCondition.java
index a293395af73cf00ed24b3b515acb1c37edd9e4e7..7169491963f72435ec1a83c7d51378afcfff15cb 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleCondition.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleCondition.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleDevice.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleDevice.java
similarity index 73%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleDevice.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleDevice.java
index f46635e87bebbcf1dee44987a770b01a2dc3b712..9d33d3a0ea8a22d07f64ae9762ed94424e01cd4e 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleDevice.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleDevice.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
@@ -22,12 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.etsi.tfs.policy.common.Util;
 
-public class PolicyRuleDevice {
-
-    private PolicyRuleBasic policyRuleBasic;
-    private List<String> deviceIds;
-    private Boolean isValid;
-    private String exceptionMessage;
+public class PolicyRuleDevice extends PolicyRuleBase {
 
     public PolicyRuleDevice(PolicyRuleBasic policyRuleBasic, List<String> deviceIds) {
 
@@ -48,22 +43,6 @@ public class PolicyRuleDevice {
         return isValid;
     }
 
-    public String getExeceptionMessage() {
-        return exceptionMessage;
-    }
-
-    public PolicyRuleBasic getPolicyRuleBasic() {
-        return policyRuleBasic;
-    }
-
-    public void setPolicyRuleBasic(PolicyRuleBasic policyRuleBasic) {
-        this.policyRuleBasic = policyRuleBasic;
-    }
-
-    public List<String> getDeviceIds() {
-        return deviceIds;
-    }
-
     @Override
     public String toString() {
         return String.format(
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleService.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleService.java
similarity index 76%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleService.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleService.java
index db25dc9bfb15bc64212ac1f141b73a18eed7ff24..3c77477d2aadb84ba60292675e0aeb2912a7c7d2 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleService.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleService.java
@@ -14,22 +14,20 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
 import java.util.ArrayList;
 import java.util.List;
+import lombok.Data;
 import org.etsi.tfs.policy.common.Util;
 import org.etsi.tfs.policy.context.model.ServiceId;
 
-public class PolicyRuleService {
+@Data
+public class PolicyRuleService extends PolicyRuleBase {
 
-    private PolicyRuleBasic policyRuleBasic;
     private ServiceId serviceId;
-    private List<String> deviceIds;
-    private Boolean isValid;
-    private String exceptionMessage;
 
     public PolicyRuleService(
             PolicyRuleBasic policyRuleBasic, ServiceId serviceId, List<String> deviceIds) {
@@ -58,26 +56,6 @@ public class PolicyRuleService {
         return isValid;
     }
 
-    public String getExeceptionMessage() {
-        return exceptionMessage;
-    }
-
-    public PolicyRuleBasic getPolicyRuleBasic() {
-        return policyRuleBasic;
-    }
-
-    public void setPolicyRuleBasic(PolicyRuleBasic policyRuleBasic) {
-        this.policyRuleBasic = policyRuleBasic;
-    }
-
-    public ServiceId getServiceId() {
-        return serviceId;
-    }
-
-    public List<String> getDeviceIds() {
-        return deviceIds;
-    }
-
     @Override
     public String toString() {
         return String.format(
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleState.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleState.java
similarity index 97%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleState.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleState.java
index 3a2c5ba428e4a0115d013e4ebd89524fbd9cb9c8..aa49d2406232d9a6a2d9a1f13f4308c9f5ef4131 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleState.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleState.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public class PolicyRuleState {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleStateEnum.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleStateEnum.java
similarity index 95%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleStateEnum.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleStateEnum.java
index 4e53491499559d085af7fc0ee58b9cdcd21010e5..9d9603f2b7070b633b0e9a50e80eec0c3453303e 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleStateEnum.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleStateEnum.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public enum PolicyRuleStateEnum {
     POLICY_UNDEFINED,
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleType.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleType.java
similarity index 94%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleType.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleType.java
index b013e48efa22d58e0e43accb3fdda68803389606..e090174a1ff4cf28b57c89f1cccbba4ec860ceda 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleType.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleType.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public interface PolicyRuleType<T> {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleTypeDevice.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleTypeDevice.java
similarity index 96%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleTypeDevice.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleTypeDevice.java
index 34c4dc3f00ee306b97a50abf02ff5f5824669ef3..907d0b304506cfb9bf3f1aa2076897eeba524287 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleTypeDevice.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleTypeDevice.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public class PolicyRuleTypeDevice implements PolicyRuleType<PolicyRuleDevice> {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleTypeService.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleTypeService.java
similarity index 96%
rename from src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleTypeService.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleTypeService.java
index 88f83aa83799b3b4448407399e70953e99560bd6..1ab3a7947847387bfb4ff24f3f454e6a34e8ea44 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/model/PolicyRuleTypeService.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/model/PolicyRuleTypeService.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy.model;
+package org.etsi.tfs.policy.policy.model;
 
 public class PolicyRuleTypeService implements PolicyRuleType<PolicyRuleService> {
 
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyRuleConditionFieldsGetter.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/service/PolicyRuleConditionFieldsGetter.java
similarity index 90%
rename from src/policy/src/main/java/org/etsi/tfs/policy/PolicyRuleConditionFieldsGetter.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/service/PolicyRuleConditionFieldsGetter.java
index 06a7e68230257c5b51d6687d5822863e5ff3a83f..34bd3c948781c9f6bfa909a5bc2f1fc29c1fcf57 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyRuleConditionFieldsGetter.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/service/PolicyRuleConditionFieldsGetter.java
@@ -14,14 +14,14 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy;
+package org.etsi.tfs.policy.policy.service;
 
 import jakarta.inject.Singleton;
 import java.util.List;
 import java.util.stream.Collectors;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
 
 @Singleton
 public class PolicyRuleConditionFieldsGetter {
diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/org/etsi/tfs/policy/policy/service/PolicyRuleConditionValidator.java
similarity index 97%
rename from src/policy/src/main/java/org/etsi/tfs/policy/PolicyRuleConditionValidator.java
rename to src/policy/src/main/java/org/etsi/tfs/policy/policy/service/PolicyRuleConditionValidator.java
index 6fd143c03886eb2fd0f02171a4e26a6d3a9108d8..fe7c91726c253a49e5c55280b7f5eacfecdbaa95 100644
--- a/src/policy/src/main/java/org/etsi/tfs/policy/PolicyRuleConditionValidator.java
+++ b/src/policy/src/main/java/org/etsi/tfs/policy/policy/service/PolicyRuleConditionValidator.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package org.etsi.tfs.policy;
+package org.etsi.tfs.policy.policy.service;
 
 import io.smallrye.mutiny.Uni;
 import jakarta.enterprise.context.ApplicationScoped;
@@ -26,7 +26,7 @@ import org.etsi.tfs.policy.context.model.Device;
 import org.etsi.tfs.policy.context.model.EndPointId;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
-import org.etsi.tfs.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
 import org.jboss.logging.Logger;
 
 @ApplicationScoped
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddDeviceTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddDeviceTest.java
index 0f25bbd5b799886de8ddb9b7c1b52dd29bb1478f..283c95f7538d7374eeac839386ea2e82bfad7c54 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddDeviceTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddDeviceTest.java
@@ -32,19 +32,21 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.etsi.tfs.policy.context.ContextService;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleDevice;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.MonitoringService;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.PolicyServiceImpl;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddServiceTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddServiceTest.java
index a829966f4656c4c0189603b6c64a5c7acc62fb3f..f693032d08a4dd553b6efbc9ed7e94bb1df4d4af 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddServiceTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyAddServiceTest.java
@@ -35,20 +35,22 @@ import org.etsi.tfs.policy.context.ContextService;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
 import org.etsi.tfs.policy.context.model.ServiceTypeEnum;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRule;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.MonitoringService;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.PolicyServiceImpl;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyDeleteServiceTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyDeleteServiceTest.java
index 84c971f762e866665a55d9d5a996c12a1aeef321..d4b156654fd910c96e80095ac3e8d8c8734ce1a1 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyDeleteServiceTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyDeleteServiceTest.java
@@ -33,22 +33,23 @@ import org.etsi.tfs.policy.context.ContextService;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
 import org.etsi.tfs.policy.context.model.ServiceTypeEnum;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRule;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
-import org.etsi.tfs.policy.model.PolicyRuleType;
-import org.etsi.tfs.policy.model.PolicyRuleTypeService;
 import org.etsi.tfs.policy.monitoring.MonitoringService;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.PolicyServiceImpl;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRule;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleType;
+import org.etsi.tfs.policy.policy.model.PolicyRuleTypeService;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyGrpcServiceTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyGrpcServiceTest.java
index b5ee77244ebdb009b7d5fdc248de4594c0331306..1f5eaa037ad112257bf5a1684394f809fca9419b 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyGrpcServiceTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyGrpcServiceTest.java
@@ -32,6 +32,7 @@ import java.util.concurrent.TimeoutException;
 import monitoring.Monitoring.KpiId;
 import org.etsi.tfs.policy.monitoring.model.FloatKpiValue;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
 import org.jboss.logging.Logger;
 import org.junit.jupiter.api.Test;
 import policy.Policy;
@@ -112,13 +113,13 @@ class PolicyGrpcServiceTest {
         final var expectedPolicyRuleConditions =
                 List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition);
 
-        org.etsi.tfs.policy.model.PolicyRuleActionConfig policyRuleActionConfig_1 =
-                new org.etsi.tfs.policy.model.PolicyRuleActionConfig("paramater1", "parameter2");
+        PolicyRuleActionConfig policyRuleActionConfig_1 =
+                new PolicyRuleActionConfig("paramater1", "parameter2");
         final var serializedPolicyRuleActionConfigList_1 =
                 serializer.serialize(policyRuleActionConfig_1);
 
-        org.etsi.tfs.policy.model.PolicyRuleActionConfig policyRuleActionConfig_2 =
-                new org.etsi.tfs.policy.model.PolicyRuleActionConfig("paramater3", "parameter4");
+        PolicyRuleActionConfig policyRuleActionConfig_2 =
+                new PolicyRuleActionConfig("paramater3", "parameter4");
         final var serializedPolicyRuleActionConfigList_2 =
                 serializer.serialize(policyRuleActionConfig_2);
 
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleBasicValidationTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleBasicValidationTest.java
index 7f969329345aab2f235daf920b9fa7c045bd89fd..437a6e23a942e04202698e607d59eb9c89f05a81 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleBasicValidationTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleBasicValidationTest.java
@@ -23,17 +23,17 @@ import io.quarkus.test.junit.QuarkusTest;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
 import org.junit.jupiter.api.Test;
 
 // TODO: Revisit PolicyRuleBasicValidationTest cases after handling exceptions in PolicyRuleBasic
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleConditionValidationTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleConditionValidationTest.java
index d81149725664a91066a30248bda3fdf395b78d78..d9ac7bddeb894f213b6ff6afcb25b56e75148bef 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleConditionValidationTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleConditionValidationTest.java
@@ -21,13 +21,13 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.stream.Stream;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
 import org.etsi.tfs.policy.monitoring.model.BooleanKpiValue;
 import org.etsi.tfs.policy.monitoring.model.FloatKpiValue;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
 import org.etsi.tfs.policy.monitoring.model.StringKpiValue;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleDeviceValidationTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleDeviceValidationTest.java
index e0e23c8a8b40a4cf48139257f4df540369f5995e..d7a7236fe48c33e8c96110f67cb91f7c8673cb53 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleDeviceValidationTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleDeviceValidationTest.java
@@ -21,18 +21,18 @@ import static org.assertj.core.api.Assertions.assertThat;
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.List;
 import java.util.UUID;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleDevice;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
 import org.junit.jupiter.api.Test;
 
 @QuarkusTest
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleServiceValidationTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleServiceValidationTest.java
index b936cae00f87ceb661a507a790e87dff95edd389..f449b702258c8c4834d5c241244503cf99238f17 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleServiceValidationTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyRuleServiceValidationTest.java
@@ -42,18 +42,19 @@ import org.etsi.tfs.policy.context.model.LocationTypeRegion;
 import org.etsi.tfs.policy.context.model.ServiceId;
 import org.etsi.tfs.policy.context.model.TopologyId;
 import org.etsi.tfs.policy.kpi_sample_types.model.KpiSampleType;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateDeviceTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateDeviceTest.java
index 34ea9bf32850f662de7aaff2eec9822b8923e4eb..8a1044676f24674a7e4655b77c9d5ad57b286c01 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateDeviceTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateDeviceTest.java
@@ -31,19 +31,21 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleDevice;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.MonitoringService;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.PolicyServiceImpl;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateServiceTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateServiceTest.java
index d50b708be74a6d844b3be1ad2aebf68a3fff1d37..e0f68a28af272b2006ec62591644ac96676bb4b5 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateServiceTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/PolicyUpdateServiceTest.java
@@ -35,19 +35,21 @@ import org.etsi.tfs.policy.context.ContextService;
 import org.etsi.tfs.policy.context.model.Service;
 import org.etsi.tfs.policy.context.model.ServiceId;
 import org.etsi.tfs.policy.context.model.ServiceTypeEnum;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.MonitoringService;
 import org.etsi.tfs.policy.monitoring.model.IntegerKpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValue;
+import org.etsi.tfs.policy.policy.PolicyServiceImpl;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
+import org.etsi.tfs.policy.policy.service.PolicyRuleConditionValidator;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/policy/src/test/java/org/etsi/tfs/policy/SerializerTest.java b/src/policy/src/test/java/org/etsi/tfs/policy/SerializerTest.java
index 8a7e35d6daae0457d6797b90ad8041e6ed7ea10c..396706f36bbf4b575ba08761cf3d088b7647c4a7 100644
--- a/src/policy/src/test/java/org/etsi/tfs/policy/SerializerTest.java
+++ b/src/policy/src/test/java/org/etsi/tfs/policy/SerializerTest.java
@@ -85,17 +85,6 @@ import org.etsi.tfs.policy.context.model.ServiceTypeEnum;
 import org.etsi.tfs.policy.context.model.SliceId;
 import org.etsi.tfs.policy.context.model.TopologyId;
 import org.etsi.tfs.policy.kpi_sample_types.model.KpiSampleType;
-import org.etsi.tfs.policy.model.BooleanOperator;
-import org.etsi.tfs.policy.model.NumericalOperator;
-import org.etsi.tfs.policy.model.PolicyRuleAction;
-import org.etsi.tfs.policy.model.PolicyRuleActionConfig;
-import org.etsi.tfs.policy.model.PolicyRuleActionEnum;
-import org.etsi.tfs.policy.model.PolicyRuleBasic;
-import org.etsi.tfs.policy.model.PolicyRuleCondition;
-import org.etsi.tfs.policy.model.PolicyRuleDevice;
-import org.etsi.tfs.policy.model.PolicyRuleService;
-import org.etsi.tfs.policy.model.PolicyRuleState;
-import org.etsi.tfs.policy.model.PolicyRuleStateEnum;
 import org.etsi.tfs.policy.monitoring.model.AlarmDescriptor;
 import org.etsi.tfs.policy.monitoring.model.AlarmResponse;
 import org.etsi.tfs.policy.monitoring.model.BooleanKpiValue;
@@ -107,6 +96,17 @@ import org.etsi.tfs.policy.monitoring.model.KpiValue;
 import org.etsi.tfs.policy.monitoring.model.KpiValueRange;
 import org.etsi.tfs.policy.monitoring.model.StringKpiValue;
 import org.etsi.tfs.policy.monitoring.model.SubsDescriptor;
+import org.etsi.tfs.policy.policy.model.BooleanOperator;
+import org.etsi.tfs.policy.policy.model.NumericalOperator;
+import org.etsi.tfs.policy.policy.model.PolicyRuleAction;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionConfig;
+import org.etsi.tfs.policy.policy.model.PolicyRuleActionEnum;
+import org.etsi.tfs.policy.policy.model.PolicyRuleBasic;
+import org.etsi.tfs.policy.policy.model.PolicyRuleCondition;
+import org.etsi.tfs.policy.policy.model.PolicyRuleDevice;
+import org.etsi.tfs.policy.policy.model.PolicyRuleService;
+import org.etsi.tfs.policy.policy.model.PolicyRuleState;
+import org.etsi.tfs.policy.policy.model.PolicyRuleStateEnum;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;