diff --git a/src/main/java/org/etsi/osl/tmf/am651/model/AgreementItem.java b/src/main/java/org/etsi/osl/tmf/am651/model/AgreementItem.java
index a07440a16ef1a71e1628f7fc55ad6674544411e9..17a37426d8c3180b245ec3a201c9bb952244be86 100644
--- a/src/main/java/org/etsi/osl/tmf/am651/model/AgreementItem.java
+++ b/src/main/java/org/etsi/osl/tmf/am651/model/AgreementItem.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.Objects;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingRef;
 import org.springframework.validation.annotation.Validated;
 
 import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/org/etsi/osl/tmf/am651/model/ProductOfferingRef.java b/src/main/java/org/etsi/osl/tmf/am651/model/ProductOfferingRef.java
deleted file mode 100644
index 07b20c4d6cf69676c23c1c73aefcbaccb6f11d62..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/am651/model/ProductOfferingRef.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.am651.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-
-/**
- * ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.
- */
-@Schema(description = "ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-10-19T23:51:58.660+03:00")
-
-public class ProductOfferingRef   {
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@referredType")
-  private String referredType = null;
-
-  public ProductOfferingRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the product offering
-   * @return href
-  **/
-  @Schema(description = "Reference of the product offering")
-
-
-  public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductOfferingRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the product offering
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the product offering")
-
-
-  public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductOfferingRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the product offering
-   * @return name
-  **/
-  @Schema(description = "Name of the product offering")
-
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductOfferingRef referredType(String referredType) {
-    this.referredType = referredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return referredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-
-
-  public String getReferredType() {
-    return referredType;
-  }
-
-  public void setReferredType(String referredType) {
-    this.referredType = referredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductOfferingRef productOfferingRef = (ProductOfferingRef) o;
-    return Objects.equals(this.href, productOfferingRef.href) &&
-        Objects.equals(this.id, productOfferingRef.id) &&
-        Objects.equals(this.name, productOfferingRef.name) &&
-        Objects.equals(this.referredType, productOfferingRef.referredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(href, id, name, referredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductOfferingRef {\n");
-    
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    referredType: ").append(toIndentedString(referredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
-
diff --git a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductOfferingRef.java b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductOfferingRef.java
index dd47df1336aa92cf9a7754785c0a7872e7706f21..616d8c31c7e284da215529090555918c9b528982 100644
--- a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductOfferingRef.java
+++ b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductOfferingRef.java
@@ -26,6 +26,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -35,6 +36,7 @@ import jakarta.validation.constraints.NotNull;
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2019-10-19T00:15:57.249+03:00")
 @JsonIgnoreProperties( {"uuid"} )
+@Entity(name = "ProdOffref620")
 public class ProductOfferingRef extends BaseRootNamedEntity {
 	
 	
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/BillingAccountRef.java b/src/main/java/org/etsi/osl/tmf/pim637/model/BillingAccountRef.java
index fed78010cea801c864f7eb9c529ba5f9ce3f3a04..0a30fb73c42490c5181986f3d0d1065d39dec6a1 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/BillingAccountRef.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/BillingAccountRef.java
@@ -1,9 +1,30 @@
+/*-
+ * ========================LICENSE_START=================================
+ * org.etsi.osl.tmf.api
+ * %%
+ * Copyright (C) 2019 - 2021 openslice.io
+ * %%
+ * Licensed 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.
+ * =========================LICENSE_END==================================
+ */
 package org.etsi.osl.tmf.pim637.model;
 
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -11,28 +32,14 @@ import jakarta.validation.constraints.NotNull;
  */
 @Schema(description = "BillingAccount reference. A BillingAccount is a detailed description of a bill structure.")
 @Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
+@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
 
 
-public class BillingAccountRef   {
+@Entity(name = "BillingAccRef622")
+public class BillingAccountRef extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String _atBaseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String _atSchemaLocation = null;
-
-  @JsonProperty("@type")
-  private String _atType = null;
-
   @JsonProperty("@referredType")
   private String _atReferredType = null;
 
@@ -44,8 +51,8 @@ public class BillingAccountRef   {
   /**
    * Unique identifier of the billing account
    * @return id
-   **/
-  @Schema(required = true, description = "Unique identifier of the billing account")
+  **/
+  @Schema(description = "Unique identifier of the billing account")
       @NotNull
 
     public String getId() {
@@ -64,10 +71,9 @@ public class BillingAccountRef   {
   /**
    * Reference of the billing account
    * @return href
-   **/
+  **/
   @Schema(description = "Reference of the billing account")
-      @NotNull
-
+  
     public String getHref() {
     return href;
   }
@@ -84,10 +90,9 @@ public class BillingAccountRef   {
   /**
    * Name of the billing account
    * @return name
-   **/
+  **/
   @Schema(description = "Name of the billing account")
-      @NotNull
-
+  
     public String getName() {
     return name;
   }
@@ -96,64 +101,61 @@ public class BillingAccountRef   {
     this.name = name;
   }
 
-  public BillingAccountRef _atBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
+  public BillingAccountRef baseType(String baseType) {
+    this.baseType = baseType;
     return this;
   }
 
   /**
    * When sub-classing, this defines the super-class
-   * @return _atBaseType
-   **/
+   * @return baseType
+  **/
   @Schema(description = "When sub-classing, this defines the super-class")
-      @NotNull
-
+  
     public String getAtBaseType() {
-    return _atBaseType;
+    return baseType;
   }
 
-  public void setAtBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
+  public void setAtBaseType(String baseType) {
+    this.baseType = baseType;
   }
 
-  public BillingAccountRef _atSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
+  public BillingAccountRef schemaLocation(String schemaLocation) {
+    this.schemaLocation = schemaLocation;
     return this;
   }
 
   /**
    * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return _atSchemaLocation
-   **/
+   * @return schemaLocation
+  **/
   @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-      @NotNull
-
+  
     public String getAtSchemaLocation() {
-    return _atSchemaLocation;
+    return schemaLocation;
   }
 
-  public void setAtSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
+  public void setAtSchemaLocation(String schemaLocation) {
+    this.schemaLocation = schemaLocation;
   }
 
-  public BillingAccountRef _atType(String _atType) {
-    this._atType = _atType;
+  public BillingAccountRef type(String type) {
+    this.type = type;
     return this;
   }
 
   /**
    * When sub-classing, this defines the sub-class entity name
-   * @return _atType
-   **/
+   * @return type
+  **/
   @Schema(description = "When sub-classing, this defines the sub-class entity name")
-      @NotNull
-
+  
     public String getAtType() {
-    return _atType;
+    return type;
   }
 
-  public void setAtType(String _atType) {
-    this._atType = _atType;
+  public void setAtType(String type) {
+    this.type = type;
   }
 
   public BillingAccountRef _atReferredType(String _atReferredType) {
@@ -164,10 +166,9 @@ public class BillingAccountRef   {
   /**
    * The actual type of the target instance when needed for disambiguation.
    * @return _atReferredType
-   **/
+  **/
   @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-      @NotNull
-
+  
     public String getAtReferredType() {
     return _atReferredType;
   }
@@ -189,15 +190,15 @@ public class BillingAccountRef   {
     return Objects.equals(this.id, billingAccountRef.id) &&
         Objects.equals(this.href, billingAccountRef.href) &&
         Objects.equals(this.name, billingAccountRef.name) &&
-        Objects.equals(this._atBaseType, billingAccountRef._atBaseType) &&
-        Objects.equals(this._atSchemaLocation, billingAccountRef._atSchemaLocation) &&
-        Objects.equals(this._atType, billingAccountRef._atType) &&
+        Objects.equals(this.baseType, billingAccountRef.baseType) &&
+        Objects.equals(this.schemaLocation, billingAccountRef.schemaLocation) &&
+        Objects.equals(this.type, billingAccountRef.type) &&
         Objects.equals(this._atReferredType, billingAccountRef._atReferredType);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(id, href, name, _atBaseType, _atSchemaLocation, _atType, _atReferredType);
+    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
   }
 
   @Override
@@ -208,9 +209,9 @@ public class BillingAccountRef   {
     sb.append("    id: ").append(toIndentedString(id)).append("\n");
     sb.append("    href: ").append(toIndentedString(href)).append("\n");
     sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    _atBaseType: ").append(toIndentedString(_atBaseType)).append("\n");
-    sb.append("    _atSchemaLocation: ").append(toIndentedString(_atSchemaLocation)).append("\n");
-    sb.append("    _atType: ").append(toIndentedString(_atType)).append("\n");
+    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
+    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
     sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
     sb.append("}");
     return sb.toString();
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/Money.java b/src/main/java/org/etsi/osl/tmf/pim637/model/Money.java
index 3dba051ba85661bdfba0d9fecbb8e9420c076223..446fa97b97d827175fc593aeae9d32ed30fb271f 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/Money.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/Money.java
@@ -2,8 +2,10 @@ package org.etsi.osl.tmf.pim637.model;
 
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -13,8 +15,8 @@ import jakarta.validation.constraints.NotNull;
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
 
-
-public class Money   {
+@Entity(name = "Money637")
+public class Money  extends BaseRootEntity {
   @JsonProperty("unit")
   private String unit = null;
 
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/Price.java b/src/main/java/org/etsi/osl/tmf/pim637/model/Price.java
index 0642c80684277ccbae0326de7757c738438054f1..c4f2d69eb4c3f56aac92d57d37aa9216ed129ec6 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/Price.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/Price.java
@@ -2,8 +2,12 @@ package org.etsi.osl.tmf.pim637.model;
 
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.OneToOne;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 
@@ -15,7 +19,8 @@ import jakarta.validation.constraints.NotNull;
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
 
 
-public class Price   {
+@Entity(name = "Price637")
+public class Price   extends BaseRootEntity {
   @JsonProperty("percentage")
   private Float percentage = null;
 
@@ -23,9 +28,11 @@ public class Price   {
   private Float taxRate = null;
 
   @JsonProperty("dutyFreeAmount")
+  @OneToOne(cascade = CascadeType.ALL)
   private Money dutyFreeAmount = null;
 
   @JsonProperty("taxIncludedAmount")
+  @OneToOne(cascade = CascadeType.ALL)
   private Money taxIncludedAmount = null;
 
   @JsonProperty("@baseType")
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/PriceAlteration.java b/src/main/java/org/etsi/osl/tmf/pim637/model/PriceAlteration.java
index efa04041411e57e9aa321936d867589ef1ab8a5d..e42c15a26e890b491dcb1fb5e0bbf789e9832ae0 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/PriceAlteration.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/PriceAlteration.java
@@ -2,8 +2,14 @@ package org.etsi.osl.tmf.pim637.model;
 
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingPriceRef;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.OneToOne;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 
@@ -14,17 +20,14 @@ import jakarta.validation.constraints.NotNull;
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
 
-
-public class PriceAlteration   {
+@Entity(name = "PriceAlter637")
+public class PriceAlteration   extends BaseRootNamedEntity {
   @JsonProperty("applicationDuration")
   private Integer applicationDuration = null;
 
   @JsonProperty("description")
   private String description = null;
 
-  @JsonProperty("name")
-  private String name = null;
-
   @JsonProperty("priceType")
   private String priceType = null;
 
@@ -38,9 +41,11 @@ public class PriceAlteration   {
   private String unitOfMeasure = null;
 
   @JsonProperty("price")
+  @OneToOne(cascade = CascadeType.ALL)
   private Price price = null;
 
   @JsonProperty("productOfferingPrice")
+  @OneToOne(cascade = CascadeType.ALL)
   private ProductOfferingPriceRef productOfferingPrice = null;
 
   @JsonProperty("@baseType")
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/Product.java b/src/main/java/org/etsi/osl/tmf/pim637/model/Product.java
index edb686b64b15c58b23e0b3952cea349eefa75c32..d8e5aa9be3152cbf3da75e54f675d4fc5ae460f3 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/Product.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/Product.java
@@ -8,7 +8,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.service.Characteristic;
 import org.etsi.osl.tmf.common.model.service.ResourceRef;
 import org.etsi.osl.tmf.common.model.service.ServiceRef;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingRef;
 import org.etsi.osl.tmf.po622.model.AgreementItemRef;
+import org.etsi.osl.tmf.po622.model.RelatedProductOrderItem;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductCreate.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductCreate.java
index 571957c84db23548bc76e1d4b4293864824f2417..1fcf509429d891cb2971f12959a64715aab9cd7f 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductCreate.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductCreate.java
@@ -8,7 +8,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.service.Characteristic;
 import org.etsi.osl.tmf.common.model.service.ResourceRef;
 import org.etsi.osl.tmf.common.model.service.ServiceRef;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingRef;
 import org.etsi.osl.tmf.po622.model.AgreementItemRef;
+import org.etsi.osl.tmf.po622.model.RelatedProductOrderItem;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductOfferingPriceRef.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductOfferingPriceRef.java
deleted file mode 100644
index c7fada70f667f3d10ec2d261c8deee0379616edf..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductOfferingPriceRef.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package org.etsi.osl.tmf.pim637.model;
-
-import java.util.Objects;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.springframework.validation.annotation.Validated;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * ProductPriceOffering reference. An amount, usually of money, that is asked for or allowed when a ProductOffering is bought, rented, or leased
- */
-@Schema(description = "ProductPriceOffering reference. An amount, usually of money, that is asked for or allowed when a ProductOffering is bought, rented, or leased")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
-
-
-public class ProductOfferingPriceRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String _atBaseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String _atSchemaLocation = null;
-
-  @JsonProperty("@type")
-  private String _atType = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductOfferingPriceRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-   **/
-  @Schema(required = true, description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductOfferingPriceRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-   **/
-  @Schema(description = "Reference of the related entity.")
-      @NotNull
-
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductOfferingPriceRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-   **/
-  @Schema(description = "Name of the related entity.")
-      @NotNull
-
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductOfferingPriceRef _atBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return _atBaseType
-   **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-      @NotNull
-
-    public String getAtBaseType() {
-    return _atBaseType;
-  }
-
-  public void setAtBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-  }
-
-  public ProductOfferingPriceRef _atSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return _atSchemaLocation
-   **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-      @NotNull
-
-    public String getAtSchemaLocation() {
-    return _atSchemaLocation;
-  }
-
-  public void setAtSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-  }
-
-  public ProductOfferingPriceRef _atType(String _atType) {
-    this._atType = _atType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return _atType
-   **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-      @NotNull
-
-    public String getAtType() {
-    return _atType;
-  }
-
-  public void setAtType(String _atType) {
-    this._atType = _atType;
-  }
-
-  public ProductOfferingPriceRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-   **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-      @NotNull
-
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductOfferingPriceRef productOfferingPriceRef = (ProductOfferingPriceRef) o;
-    return Objects.equals(this.id, productOfferingPriceRef.id) &&
-        Objects.equals(this.href, productOfferingPriceRef.href) &&
-        Objects.equals(this.name, productOfferingPriceRef.name) &&
-        Objects.equals(this._atBaseType, productOfferingPriceRef._atBaseType) &&
-        Objects.equals(this._atSchemaLocation, productOfferingPriceRef._atSchemaLocation) &&
-        Objects.equals(this._atType, productOfferingPriceRef._atType) &&
-        Objects.equals(this._atReferredType, productOfferingPriceRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, _atBaseType, _atSchemaLocation, _atType, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductOfferingPriceRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    _atBaseType: ").append(toIndentedString(_atBaseType)).append("\n");
-    sb.append("    _atSchemaLocation: ").append(toIndentedString(_atSchemaLocation)).append("\n");
-    sb.append("    _atType: ").append(toIndentedString(_atType)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductOfferingRef.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductOfferingRef.java
deleted file mode 100644
index e9933e86cc8b87456b33754050da64847d56851b..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductOfferingRef.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package org.etsi.osl.tmf.pim637.model;
-
-import java.util.Objects;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.springframework.validation.annotation.Validated;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.
- */
-@Schema(description = "ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
-
-
-public class ProductOfferingRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String _atBaseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String _atSchemaLocation = null;
-
-  @JsonProperty("@type")
-  private String _atType = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductOfferingRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-   **/
-  @Schema(required = true, description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductOfferingRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-   **/
-  @Schema(description = "Reference of the related entity.")
-      @NotNull
-
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductOfferingRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-   **/
-  @Schema(description = "Name of the related entity.")
-      @NotNull
-
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductOfferingRef _atBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return _atBaseType
-   **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-      @NotNull
-
-    public String getAtBaseType() {
-    return _atBaseType;
-  }
-
-  public void setAtBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-  }
-
-  public ProductOfferingRef _atSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return _atSchemaLocation
-   **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-      @NotNull
-
-    public String getAtSchemaLocation() {
-    return _atSchemaLocation;
-  }
-
-  public void setAtSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-  }
-
-  public ProductOfferingRef _atType(String _atType) {
-    this._atType = _atType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return _atType
-   **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-      @NotNull
-
-    public String getAtType() {
-    return _atType;
-  }
-
-  public void setAtType(String _atType) {
-    this._atType = _atType;
-  }
-
-  public ProductOfferingRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-   **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-      @NotNull
-
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductOfferingRef productOfferingRef = (ProductOfferingRef) o;
-    return Objects.equals(this.id, productOfferingRef.id) &&
-        Objects.equals(this.href, productOfferingRef.href) &&
-        Objects.equals(this.name, productOfferingRef.name) &&
-        Objects.equals(this._atBaseType, productOfferingRef._atBaseType) &&
-        Objects.equals(this._atSchemaLocation, productOfferingRef._atSchemaLocation) &&
-        Objects.equals(this._atType, productOfferingRef._atType) &&
-        Objects.equals(this._atReferredType, productOfferingRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, _atBaseType, _atSchemaLocation, _atType, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductOfferingRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    _atBaseType: ").append(toIndentedString(_atBaseType)).append("\n");
-    sb.append("    _atSchemaLocation: ").append(toIndentedString(_atSchemaLocation)).append("\n");
-    sb.append("    _atType: ").append(toIndentedString(_atType)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductPrice.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductPrice.java
index e233652ce0698a72742ab4b3a790cab87b83ed9d..d60d5dadbe0defb2fc58d52325a42a9e497e3b94 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductPrice.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductPrice.java
@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingPriceRef;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRef.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRef.java
index 4f0fca5465cdf134ce9acbcffab9396c498f93b4..41860d3606a81fca3f9afa7ead7e55fc4859fc13 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRef.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRef.java
@@ -2,8 +2,10 @@ package org.etsi.osl.tmf.pim637.model;
 
 import java.util.Objects;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -12,25 +14,12 @@ import jakarta.validation.constraints.NotNull;
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
 
-
-public class ProductRef   {
+@Entity(name = "ProductRef637")
+public class ProductRef   extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String _atBaseType = null;
 
-  @JsonProperty("@schemaLocation")
-  private String _atSchemaLocation = null;
-
-  @JsonProperty("@type")
-  private String _atType = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
@@ -95,65 +84,8 @@ public class ProductRef   {
     this.name = name;
   }
 
-  public ProductRef _atBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return _atBaseType
-   **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-      @NotNull
-
-    public String getAtBaseType() {
-    return _atBaseType;
-  }
-
-  public void setAtBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-  }
+  
 
-  public ProductRef _atSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return _atSchemaLocation
-   **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-      @NotNull
-
-    public String getAtSchemaLocation() {
-    return _atSchemaLocation;
-  }
-
-  public void setAtSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-  }
-
-  public ProductRef _atType(String _atType) {
-    this._atType = _atType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return _atType
-   **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-      @NotNull
-
-    public String getAtType() {
-    return _atType;
-  }
-
-  public void setAtType(String _atType) {
-    this._atType = _atType;
-  }
 
   public ProductRef _atReferredType(String _atReferredType) {
     this._atReferredType = _atReferredType;
@@ -188,15 +120,15 @@ public class ProductRef   {
     return Objects.equals(this.id, productRef.id) &&
         Objects.equals(this.href, productRef.href) &&
         Objects.equals(this.name, productRef.name) &&
-        Objects.equals(this._atBaseType, productRef._atBaseType) &&
-        Objects.equals(this._atSchemaLocation, productRef._atSchemaLocation) &&
-        Objects.equals(this._atType, productRef._atType) &&
+        Objects.equals(this.baseType, productRef.baseType) &&
+        Objects.equals(this.schemaLocation, productRef.schemaLocation) &&
+        Objects.equals(this.type, productRef.type) &&
         Objects.equals(this._atReferredType, productRef._atReferredType);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(id, href, name, _atBaseType, _atSchemaLocation, _atType, _atReferredType);
+    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
   }
 
   @Override
@@ -207,9 +139,9 @@ public class ProductRef   {
     sb.append("    id: ").append(toIndentedString(id)).append("\n");
     sb.append("    href: ").append(toIndentedString(href)).append("\n");
     sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    _atBaseType: ").append(toIndentedString(_atBaseType)).append("\n");
-    sb.append("    _atSchemaLocation: ").append(toIndentedString(_atSchemaLocation)).append("\n");
-    sb.append("    _atType: ").append(toIndentedString(_atType)).append("\n");
+    sb.append("    _atBaseType: ").append(toIndentedString(baseType)).append("\n");
+    sb.append("    _atSchemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
+    sb.append("    _atType: ").append(toIndentedString(type)).append("\n");
     sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
     sb.append("}");
     return sb.toString();
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRefOrValue.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRefOrValue.java
index e4b1308c6b07e6f8fe7727e8011ef72d81251f0a..47c37dd1c5289e25c354c32ce266be819f634e13 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRefOrValue.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductRefOrValue.java
@@ -8,7 +8,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.service.Characteristic;
 import org.etsi.osl.tmf.common.model.service.ResourceRef;
 import org.etsi.osl.tmf.common.model.service.ServiceRef;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingRef;
 import org.etsi.osl.tmf.po622.model.AgreementItemRef;
+import org.etsi.osl.tmf.po622.model.RelatedProductOrderItem;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductStatusType.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductStatusType.java
index 3623cfc29e09082713301d1da96fa59c5cfb7c55..616f74176af27154a9e12ee791aedee55a2fb4f9 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductStatusType.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductStatusType.java
@@ -7,14 +7,14 @@ import com.fasterxml.jackson.annotation.JsonValue;
  * Possible values for the status of the product
  */
 public enum ProductStatusType {
-  CREATED("created"),
-    PENDINGACTIVE("pendingActive"),
-    CANCELLED("cancelled"),
-    ACTIVE("active"),
-    PENDINGTERMINATE("pendingTerminate"),
-    TERMINATED("terminated"),
-    SUSPENDED("suspended"),
-    ABORTED_("aborted ");
+  CREATED("CREATED"),
+    PENDINGACTIVE("PENDINGACTIVE"),
+    CANCELLED("CANCELLED"),
+    ACTIVE("ACTIVE"),
+    PENDINGTERMINATE("PENDINGTERMINATE"),
+    TERMINATED("TERMINATED"),
+    SUSPENDED("SUSPENDED"),
+    ABORTED_("ABORTED_ ");
 
   private String value;
 
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductUpdate.java b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductUpdate.java
index a83911732416c5c821162012f837590aea298399..49ee4c03ce9c832e0780533045e3189d5a09e275 100644
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/ProductUpdate.java
+++ b/src/main/java/org/etsi/osl/tmf/pim637/model/ProductUpdate.java
@@ -8,7 +8,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.service.Characteristic;
 import org.etsi.osl.tmf.common.model.service.ResourceRef;
 import org.etsi.osl.tmf.common.model.service.ServiceRef;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingRef;
 import org.etsi.osl.tmf.po622.model.AgreementItemRef;
+import org.etsi.osl.tmf.po622.model.RelatedProductOrderItem;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/org/etsi/osl/tmf/pim637/model/RelatedProductOrderItem.java b/src/main/java/org/etsi/osl/tmf/pim637/model/RelatedProductOrderItem.java
deleted file mode 100644
index 3e52de617d3a47570713f4953cae2e46219621fb..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/pim637/model/RelatedProductOrderItem.java
+++ /dev/null
@@ -1,279 +0,0 @@
-package org.etsi.osl.tmf.pim637.model;
-
-import java.util.Objects;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.springframework.validation.annotation.Validated;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * RelatedProductOrderItem (ProductOrder item) .The product order item which triggered product creation/change/termination.
- */
-@Schema(description = "RelatedProductOrderItem (ProductOrder item) .The product order item which triggered product creation/change/termination.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2024-08-04T00:27:07.324017400+03:00[Europe/Athens]")
-
-
-public class RelatedProductOrderItem   {
-  @JsonProperty("orderItemAction")
-  private String orderItemAction = null;
-
-  @JsonProperty("orderItemId")
-  private String orderItemId = null;
-
-  @JsonProperty("productOrderHref")
-  private String productOrderHref = null;
-
-  @JsonProperty("productOrderId")
-  private String productOrderId = null;
-
-  @JsonProperty("role")
-  private String role = null;
-
-  @JsonProperty("@baseType")
-  private String _atBaseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String _atSchemaLocation = null;
-
-  @JsonProperty("@type")
-  private String _atType = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public RelatedProductOrderItem orderItemAction(String orderItemAction) {
-    this.orderItemAction = orderItemAction;
-    return this;
-  }
-
-  /**
-   * Action of the order item for this product
-   * @return orderItemAction
-   **/
-  @Schema(description = "Action of the order item for this product")
-      @NotNull
-
-    public String getOrderItemAction() {
-    return orderItemAction;
-  }
-
-  public void setOrderItemAction(String orderItemAction) {
-    this.orderItemAction = orderItemAction;
-  }
-
-  public RelatedProductOrderItem orderItemId(String orderItemId) {
-    this.orderItemId = orderItemId;
-    return this;
-  }
-
-  /**
-   * Identifier of the order item where the product was managed
-   * @return orderItemId
-   **/
-  @Schema(required = true, description = "Identifier of the order item where the product was managed")
-      @NotNull
-
-    public String getOrderItemId() {
-    return orderItemId;
-  }
-
-  public void setOrderItemId(String orderItemId) {
-    this.orderItemId = orderItemId;
-  }
-
-  public RelatedProductOrderItem productOrderHref(String productOrderHref) {
-    this.productOrderHref = productOrderHref;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return productOrderHref
-   **/
-  @Schema(description = "Reference of the related entity.")
-      @NotNull
-
-    public String getProductOrderHref() {
-    return productOrderHref;
-  }
-
-  public void setProductOrderHref(String productOrderHref) {
-    this.productOrderHref = productOrderHref;
-  }
-
-  public RelatedProductOrderItem productOrderId(String productOrderId) {
-    this.productOrderId = productOrderId;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return productOrderId
-   **/
-  @Schema(required = true, description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getProductOrderId() {
-    return productOrderId;
-  }
-
-  public void setProductOrderId(String productOrderId) {
-    this.productOrderId = productOrderId;
-  }
-
-  public RelatedProductOrderItem role(String role) {
-    this.role = role;
-    return this;
-  }
-
-  /**
-   * role of the product order item for this product
-   * @return role
-   **/
-  @Schema(description = "role of the product order item for this product")
-      @NotNull
-
-    public String getRole() {
-    return role;
-  }
-
-  public void setRole(String role) {
-    this.role = role;
-  }
-
-  public RelatedProductOrderItem _atBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return _atBaseType
-   **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-      @NotNull
-
-    public String getAtBaseType() {
-    return _atBaseType;
-  }
-
-  public void setAtBaseType(String _atBaseType) {
-    this._atBaseType = _atBaseType;
-  }
-
-  public RelatedProductOrderItem _atSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return _atSchemaLocation
-   **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-      @NotNull
-
-    public String getAtSchemaLocation() {
-    return _atSchemaLocation;
-  }
-
-  public void setAtSchemaLocation(String _atSchemaLocation) {
-    this._atSchemaLocation = _atSchemaLocation;
-  }
-
-  public RelatedProductOrderItem _atType(String _atType) {
-    this._atType = _atType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return _atType
-   **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-      @NotNull
-
-    public String getAtType() {
-    return _atType;
-  }
-
-  public void setAtType(String _atType) {
-    this._atType = _atType;
-  }
-
-  public RelatedProductOrderItem _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-   **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-      @NotNull
-
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    RelatedProductOrderItem relatedProductOrderItem = (RelatedProductOrderItem) o;
-    return Objects.equals(this.orderItemAction, relatedProductOrderItem.orderItemAction) &&
-        Objects.equals(this.orderItemId, relatedProductOrderItem.orderItemId) &&
-        Objects.equals(this.productOrderHref, relatedProductOrderItem.productOrderHref) &&
-        Objects.equals(this.productOrderId, relatedProductOrderItem.productOrderId) &&
-        Objects.equals(this.role, relatedProductOrderItem.role) &&
-        Objects.equals(this._atBaseType, relatedProductOrderItem._atBaseType) &&
-        Objects.equals(this._atSchemaLocation, relatedProductOrderItem._atSchemaLocation) &&
-        Objects.equals(this._atType, relatedProductOrderItem._atType) &&
-        Objects.equals(this._atReferredType, relatedProductOrderItem._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(orderItemAction, orderItemId, productOrderHref, productOrderId, role, _atBaseType, _atSchemaLocation, _atType, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class RelatedProductOrderItem {\n");
-    
-    sb.append("    orderItemAction: ").append(toIndentedString(orderItemAction)).append("\n");
-    sb.append("    orderItemId: ").append(toIndentedString(orderItemId)).append("\n");
-    sb.append("    productOrderHref: ").append(toIndentedString(productOrderHref)).append("\n");
-    sb.append("    productOrderId: ").append(toIndentedString(productOrderId)).append("\n");
-    sb.append("    role: ").append(toIndentedString(role)).append("\n");
-    sb.append("    _atBaseType: ").append(toIndentedString(_atBaseType)).append("\n");
-    sb.append("    _atSchemaLocation: ").append(toIndentedString(_atSchemaLocation)).append("\n");
-    sb.append("    _atType: ").append(toIndentedString(_atType)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/AgreementItemRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/AgreementItemRef.java
index 73de8611b1ece90f3ec9e20fe7c527b606287478..27a09bbdfc7076f0aaa4fd6cadb53a11002203c0 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/AgreementItemRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/AgreementItemRef.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/AgreementRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/AgreementRef.java
index c729d633d433442643f981874999b6fbd13d92b8..b73098707710b58bddef9ff048e87a0927604abc 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/AgreementRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/AgreementRef.java
@@ -20,12 +20,11 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,24 +33,11 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "Agreement reference. An agreement represents a contract or arrangement, either written or verbal and sometimes enforceable by law, such as a service level agreement or a customer price agreement. An agreement involves a number of other business entities, such as products, services, and resources and/or their specifications.")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class AgreementRef   {
+@Entity(name = "AgrRef622")
+public class AgreementRef  extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/Any.java b/src/main/java/org/etsi/osl/tmf/po622/model/Any.java
index 836730781fb2b5198759302676013fec36be4607..822f9aa72ae6502993b89dcd6e97a5bdeefd9720 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/Any.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/Any.java
@@ -20,7 +20,6 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import org.springframework.validation.annotation.Validated;
 
 /**
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/AppointmentRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/AppointmentRef.java
index 44e145e39b1c2156681b7699e5ee4e72dbde030a..5273f1f1a394bb6c9fcaeb995de7a9afcd41945b 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/AppointmentRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/AppointmentRef.java
@@ -20,12 +20,12 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,25 +34,15 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "Refers an appointment, such as a Customer presentation or internal meeting or site visit")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class AppointmentRef   {
+@Entity(name = "AppointmentRef622")
+public class AppointmentRef   extends BaseRootEntity {
+  
   @JsonProperty("id")
   private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
+  
   @JsonProperty("description")
   private String description = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
   @JsonProperty("@referredType")
   private String _atReferredType = null;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/BillingAccountRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/BillingAccountRef.java
deleted file mode 100644
index 5dd0323895b435b2590568adc6f58f171b212a1d..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/BillingAccountRef.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * BillingAccount reference. A BillingAccount is a detailed description of a bill structure.
- */
-@Schema(description = "BillingAccount reference. A BillingAccount is a detailed description of a bill structure.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class BillingAccountRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public BillingAccountRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the billing account
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the billing account")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public BillingAccountRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the billing account
-   * @return href
-  **/
-  @Schema(description = "Reference of the billing account")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public BillingAccountRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the billing account
-   * @return name
-  **/
-  @Schema(description = "Name of the billing account")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public BillingAccountRef baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public BillingAccountRef schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public BillingAccountRef type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public BillingAccountRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    BillingAccountRef billingAccountRef = (BillingAccountRef) o;
-    return Objects.equals(this.id, billingAccountRef.id) &&
-        Objects.equals(this.href, billingAccountRef.href) &&
-        Objects.equals(this.name, billingAccountRef.name) &&
-        Objects.equals(this.baseType, billingAccountRef.baseType) &&
-        Objects.equals(this.schemaLocation, billingAccountRef.schemaLocation) &&
-        Objects.equals(this.type, billingAccountRef.type) &&
-        Objects.equals(this._atReferredType, billingAccountRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class BillingAccountRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelOrder.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelOrder.java
index c431bb56a9f38832339da33825cf3a6b731ceb9b..24571b80de5a0072f7cc0549db014734ea5d139e 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelOrder.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelOrder.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrder.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrder.java
index 6a6ac36680f7e11d58ac5b5bc133bbe3427b121c..72083e646b25ab03ef7f7a70788edcf34df610de 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrder.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrder.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreate.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreate.java
index 018dda099b7dc16bf7e336e11dad75fa4ded6bae..4cd79a75db832a9e44944fc8535dc7aad9dd0465 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreate.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreate.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEvent.java
index 59d42a223d8dcf9be83d3d58ebf2c928a2b59c2f..f2ca2027e8a5126afc8196b82dc51efbcc20c6cf 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEventPayload.java
index 86c4ec665d8d1621ee40abc373aca724ace10748..f0454d8a0af088fbadc4806d616d92b17641e7b4 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderCreateEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEvent.java
index fd6e530f456b2f8835f760d9527aa4b33b7d2ef6..898aee36327ee245c988ff075cff5dddd96f0e16 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEventPayload.java
index 75bf9e5c494a3fad81630aa5a4108a950133852c..739c278ecb728386026698d37597485258080ef3 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderInformationRequiredEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEvent.java
index c0280f588b97658958bd157e3a55b9c42adc313a..0702f78c3ebf972774316e0eeb71dc6699ba0876 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEventPayload.java
index dde76f6dedf5ced053fee627558b3b944989b302..ff5831c19f975da6fbcfe2fd292ab08edbc3b644 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/CancelProductOrderStateChangeEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/EntityRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/EntityRef.java
deleted file mode 100644
index 97784a5b973ec5087a7b4fcf740e23cc2e9af79d..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/EntityRef.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * Entity reference schema to be use for all entityRef class.
- */
-@Schema(description = "Entity reference schema to be use for all entityRef class.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class EntityRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public EntityRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public EntityRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-  **/
-  @Schema(description = "Reference of the related entity.")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public EntityRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-  **/
-  @Schema(description = "Name of the related entity.")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public EntityRef baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public EntityRef schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public EntityRef type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public EntityRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    EntityRef entityRef = (EntityRef) o;
-    return Objects.equals(this.id, entityRef.id) &&
-        Objects.equals(this.href, entityRef.href) &&
-        Objects.equals(this.name, entityRef.name) &&
-        Objects.equals(this.baseType, entityRef.baseType) &&
-        Objects.equals(this.schemaLocation, entityRef.schemaLocation) &&
-        Objects.equals(this.type, entityRef.type) &&
-        Objects.equals(this._atReferredType, entityRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class EntityRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/Money.java b/src/main/java/org/etsi/osl/tmf/po622/model/Money.java
deleted file mode 100644
index 3e92fbf16c72573df5d511163adbff235dbf4777..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/Money.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-
-/**
- * A base / value business entity used to represent money
- */
-@Schema(description = "A base / value business entity used to represent money")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class Money   {
-  @JsonProperty("unit")
-  private String unit = null;
-
-  @JsonProperty("value")
-  private Float value = null;
-
-  public Money unit(String unit) {
-    this.unit = unit;
-    return this;
-  }
-
-  /**
-   * Currency (ISO4217 norm uses 3 letters to define the currency)
-   * @return unit
-  **/
-  @Schema(description = "Currency (ISO4217 norm uses 3 letters to define the currency)")
-  
-    public String getUnit() {
-    return unit;
-  }
-
-  public void setUnit(String unit) {
-    this.unit = unit;
-  }
-
-  public Money value(Float value) {
-    this.value = value;
-    return this;
-  }
-
-  /**
-   * A positive floating point number
-   * @return value
-  **/
-  @Schema(description = "A positive floating point number")
-  
-    public Float getValue() {
-    return value;
-  }
-
-  public void setValue(Float value) {
-    this.value = value;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    Money money = (Money) o;
-    return Objects.equals(this.unit, money.unit) &&
-        Objects.equals(this.value, money.value);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(unit, value);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Money {\n");
-    
-    sb.append("    unit: ").append(toIndentedString(unit)).append("\n");
-    sb.append("    value: ").append(toIndentedString(value)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemActionType.java b/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemActionType.java
index f9477f20bde99bbf8f17476e4fc68a8c96e40692..30871bb4ca537527212f2b54ed6ef55bda2ed8ac 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemActionType.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemActionType.java
@@ -26,10 +26,10 @@ import com.fasterxml.jackson.annotation.JsonValue;
  * action to be performed on the product
  */
 public enum OrderItemActionType {
-  ADD("add"),
-    MODIFY("modify"),
-    DELETE("delete"),
-    NOCHANGE("noChange");
+    ADD("ADD"),
+    MODIFY("MODIFY"),
+    DELETE("DELETE"),
+    NOCHANGE("NOCHANGE");
 
   private String value;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemRelationship.java b/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemRelationship.java
index 9ab03386297d958d21bc33f8409754929208a4d2..5e786ab9832ef04c0e6242c15ab093e4d54b1815 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemRelationship.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/OrderItemRelationship.java
@@ -20,33 +20,26 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 
 /**
  * OrderItemRelationship
  */
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class OrderItemRelationship   {
+@Entity(name = "OrderItemRel")
+public class OrderItemRelationship  extends BaseRootEntity {
   @JsonProperty("id")
   private String id = null;
 
   @JsonProperty("relationshipType")
   private String relationshipType = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
 
-  @JsonProperty("@type")
-  private String type = null;
 
   public OrderItemRelationship id(String id) {
     this.id = id;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/OrderPrice.java b/src/main/java/org/etsi/osl/tmf/po622/model/OrderPrice.java
index ec9f853c6460e70beb1e3cf11aa5c8141d94a459..992572d12f2f0e3c265778a31853e483f78677c0 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/OrderPrice.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/OrderPrice.java
@@ -20,14 +20,25 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
-
+import java.util.Set;
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingPriceRef;
+import org.etsi.osl.tmf.pim637.model.BillingAccountRef;
+import org.etsi.osl.tmf.pim637.model.Price;
+import org.etsi.osl.tmf.pim637.model.PriceAlteration;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.Lob;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.OneToOne;
 import jakarta.validation.Valid;
 
 /**
@@ -36,13 +47,14 @@ import jakarta.validation.Valid;
 @Schema(description = "An amount, usually of money, that represents the actual price paid by the Customer for this item or this order")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class OrderPrice   {
+@Entity(name = "OrderPrice622")
+public class OrderPrice  extends BaseRootNamedEntity {
+
+  @Lob
+  @Column(name = "LDESCRIPTION", columnDefinition = "LONGTEXT")
   @JsonProperty("description")
   private String description = null;
 
-  @JsonProperty("name")
-  private String name = null;
-
   @JsonProperty("priceType")
   private String priceType = null;
 
@@ -53,26 +65,25 @@ public class OrderPrice   {
   private String unitOfMeasure = null;
 
   @JsonProperty("billingAccount")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "billing_acc_refuuid", referencedColumnName = "uuid")  
   private BillingAccountRef billingAccount = null;
 
   @JsonProperty("price")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "price_uuid", referencedColumnName = "uuid")  
   private Price price = null;
 
   @JsonProperty("priceAlteration")
   @Valid
-  private List<PriceAlteration> priceAlteration = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<PriceAlteration> priceAlteration = new HashSet<>();
 
   @JsonProperty("productOfferingPrice")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "productOffPr_refuuid", referencedColumnName = "uuid")  
   private ProductOfferingPriceRef productOfferingPrice = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   public OrderPrice description(String description) {
     this.description = description;
@@ -209,14 +220,14 @@ public class OrderPrice   {
     this.price = price;
   }
 
-  public OrderPrice priceAlteration(List<PriceAlteration> priceAlteration) {
+  public OrderPrice priceAlteration(Set<PriceAlteration> priceAlteration) {
     this.priceAlteration = priceAlteration;
     return this;
   }
 
   public OrderPrice addPriceAlterationItem(PriceAlteration priceAlterationItem) {
     if (this.priceAlteration == null) {
-      this.priceAlteration = new ArrayList<>();
+      this.priceAlteration = new HashSet<>();
     }
     this.priceAlteration.add(priceAlterationItem);
     return this;
@@ -228,11 +239,11 @@ public class OrderPrice   {
   **/
   @Schema(description = "a strucuture used to describe a price alteration")
       @Valid
-    public List<PriceAlteration> getPriceAlteration() {
+    public Set<PriceAlteration> getPriceAlteration() {
     return priceAlteration;
   }
 
-  public void setPriceAlteration(List<PriceAlteration> priceAlteration) {
+  public void setPriceAlteration(Set<PriceAlteration> priceAlteration) {
     this.priceAlteration = priceAlteration;
   }
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/OrderTerm.java b/src/main/java/org/etsi/osl/tmf/po622/model/OrderTerm.java
index 999b3db254896118e93a69f90b8c4b553838d8aa..ff34691bbf333e59c044790cf4de680cc75ebb0e 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/OrderTerm.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/OrderTerm.java
@@ -20,11 +20,14 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.etsi.osl.tmf.common.model.Quantity;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Lob;
 import jakarta.validation.Valid;
 
 /**
@@ -33,24 +36,17 @@ import jakarta.validation.Valid;
 @Schema(description = "Description of a productTerm linked to this orderItem. This represent a commitment with a duration")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class OrderTerm   {
+@Entity(name = "OrderTerm622")
+public class OrderTerm   extends BaseRootNamedEntity {
+
+  @Lob
+  @Column(name = "LDESCRIPTION", columnDefinition = "LONGTEXT")
   @JsonProperty("description")
   private String description = null;
 
-  @JsonProperty("name")
-  private String name = null;
-
   @JsonProperty("duration")
   private Quantity duration = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   public OrderTerm description(String description) {
     this.description = description;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/PaymentRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/PaymentRef.java
index d60169ea1540fdff918f11b562e98ca8a6b09076..84ead8a4ac969920e9cfc0a7e139c05f0421fd48 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/PaymentRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/PaymentRef.java
@@ -20,12 +20,11 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,25 +33,12 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "If an immediate payment has been done at the product order submission, the payment information are captured and stored (as a reference) in the order.")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class PaymentRef   {
+@Entity(name = "PaymentRef622")
+public class PaymentRef   extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
+  
   @JsonProperty("@referredType")
   private String _atReferredType = null;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/Place.java b/src/main/java/org/etsi/osl/tmf/po622/model/Place.java
deleted file mode 100644
index 62c96891b445614dd888083ee2f247ec50e55b39..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/Place.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-
-/**
- * Place reference. Place defines the places where the products are sold or delivered.
- */
-@Schema(description = "Place reference. Place defines the places where the products are sold or delivered.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class Place   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public Place id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the place
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the place")
-  
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public Place href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Unique reference of the place
-   * @return href
-  **/
-  @Schema(description = "Unique reference of the place")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public Place name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * A user-friendly name for the place, such as [Paris Store], [London Store], [Main Home]
-   * @return name
-  **/
-  @Schema(description = "A user-friendly name for the place, such as [Paris Store], [London Store], [Main Home]")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public Place baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public Place schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public Place type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    Place place = (Place) o;
-    return Objects.equals(this.id, place.id) &&
-        Objects.equals(this.href, place.href) &&
-        Objects.equals(this.name, place.name) &&
-        Objects.equals(this.baseType, place.baseType) &&
-        Objects.equals(this.schemaLocation, place.schemaLocation) &&
-        Objects.equals(this.type, place.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Place {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/Price.java b/src/main/java/org/etsi/osl/tmf/po622/model/Price.java
deleted file mode 100644
index e1c950d7cbaa6eebc0234078bbe7542faf8a3605..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/Price.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-
-/**
- * Provides all amounts (tax included, duty free, tax rate), used currency and percentage to apply for Price Alteration.
- */
-@Schema(description = "Provides all amounts (tax included, duty free, tax rate), used currency and percentage to apply for Price Alteration.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class Price   {
-  @JsonProperty("percentage")
-  private Float percentage = null;
-
-  @JsonProperty("taxRate")
-  private Float taxRate = null;
-
-  @JsonProperty("dutyFreeAmount")
-  private Money dutyFreeAmount = null;
-
-  @JsonProperty("taxIncludedAmount")
-  private Money taxIncludedAmount = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public Price percentage(Float percentage) {
-    this.percentage = percentage;
-    return this;
-  }
-
-  /**
-   * Percentage to apply for ProdOfferPriceAlteration
-   * @return percentage
-  **/
-  @Schema(description = "Percentage to apply for ProdOfferPriceAlteration")
-  
-    public Float getPercentage() {
-    return percentage;
-  }
-
-  public void setPercentage(Float percentage) {
-    this.percentage = percentage;
-  }
-
-  public Price taxRate(Float taxRate) {
-    this.taxRate = taxRate;
-    return this;
-  }
-
-  /**
-   * Tax rate
-   * @return taxRate
-  **/
-  @Schema(description = "Tax rate")
-  
-    public Float getTaxRate() {
-    return taxRate;
-  }
-
-  public void setTaxRate(Float taxRate) {
-    this.taxRate = taxRate;
-  }
-
-  public Price dutyFreeAmount(Money dutyFreeAmount) {
-    this.dutyFreeAmount = dutyFreeAmount;
-    return this;
-  }
-
-  /**
-   * Get dutyFreeAmount
-   * @return dutyFreeAmount
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public Money getDutyFreeAmount() {
-    return dutyFreeAmount;
-  }
-
-  public void setDutyFreeAmount(Money dutyFreeAmount) {
-    this.dutyFreeAmount = dutyFreeAmount;
-  }
-
-  public Price taxIncludedAmount(Money taxIncludedAmount) {
-    this.taxIncludedAmount = taxIncludedAmount;
-    return this;
-  }
-
-  /**
-   * Get taxIncludedAmount
-   * @return taxIncludedAmount
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public Money getTaxIncludedAmount() {
-    return taxIncludedAmount;
-  }
-
-  public void setTaxIncludedAmount(Money taxIncludedAmount) {
-    this.taxIncludedAmount = taxIncludedAmount;
-  }
-
-  public Price baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public Price schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public Price type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    Price price = (Price) o;
-    return Objects.equals(this.percentage, price.percentage) &&
-        Objects.equals(this.taxRate, price.taxRate) &&
-        Objects.equals(this.dutyFreeAmount, price.dutyFreeAmount) &&
-        Objects.equals(this.taxIncludedAmount, price.taxIncludedAmount) &&
-        Objects.equals(this.baseType, price.baseType) &&
-        Objects.equals(this.schemaLocation, price.schemaLocation) &&
-        Objects.equals(this.type, price.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(percentage, taxRate, dutyFreeAmount, taxIncludedAmount, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Price {\n");
-    
-    sb.append("    percentage: ").append(toIndentedString(percentage)).append("\n");
-    sb.append("    taxRate: ").append(toIndentedString(taxRate)).append("\n");
-    sb.append("    dutyFreeAmount: ").append(toIndentedString(dutyFreeAmount)).append("\n");
-    sb.append("    taxIncludedAmount: ").append(toIndentedString(taxIncludedAmount)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/PriceAlteration.java b/src/main/java/org/etsi/osl/tmf/po622/model/PriceAlteration.java
deleted file mode 100644
index 5efe9e755634b6d00bca3967c6ceb0d023b74e86..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/PriceAlteration.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * Is an amount, usually of money, that modifies the price charged for an order item.
- */
-@Schema(description = "Is an amount, usually of money, that modifies the price charged for an order item.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class PriceAlteration   {
-  @JsonProperty("applicationDuration")
-  private Integer applicationDuration = null;
-
-  @JsonProperty("description")
-  private String description = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("priceType")
-  private String priceType = null;
-
-  @JsonProperty("priority")
-  private Integer priority = null;
-
-  @JsonProperty("recurringChargePeriod")
-  private String recurringChargePeriod = null;
-
-  @JsonProperty("unitOfMeasure")
-  private String unitOfMeasure = null;
-
-  @JsonProperty("price")
-  private Price price = null;
-
-  @JsonProperty("productOfferingPrice")
-  private ProductOfferingPriceRef productOfferingPrice = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public PriceAlteration applicationDuration(Integer applicationDuration) {
-    this.applicationDuration = applicationDuration;
-    return this;
-  }
-
-  /**
-   * Duration during which the alteration applies on the order item price (for instance 2 months free of charge for the recurring charge)
-   * @return applicationDuration
-  **/
-  @Schema(description = "Duration during which the alteration applies on the order item price (for instance 2 months free of charge for the recurring charge)")
-  
-    public Integer getApplicationDuration() {
-    return applicationDuration;
-  }
-
-  public void setApplicationDuration(Integer applicationDuration) {
-    this.applicationDuration = applicationDuration;
-  }
-
-  public PriceAlteration description(String description) {
-    this.description = description;
-    return this;
-  }
-
-  /**
-   * A narrative that explains in detail the semantics of this order item price alteration
-   * @return description
-  **/
-  @Schema(description = "A narrative that explains in detail the semantics of this order item price alteration")
-  
-    public String getDescription() {
-    return description;
-  }
-
-  public void setDescription(String description) {
-    this.description = description;
-  }
-
-  public PriceAlteration name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the order item price alteration
-   * @return name
-  **/
-  @Schema(description = "Name of the order item price alteration")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public PriceAlteration priceType(String priceType) {
-    this.priceType = priceType;
-    return this;
-  }
-
-  /**
-   * A category that describes the price such as recurring, one time and usage.
-   * @return priceType
-  **/
-  @Schema(description = "A category that describes the price such as recurring, one time and usage.")
-      @NotNull
-
-    public String getPriceType() {
-    return priceType;
-  }
-
-  public void setPriceType(String priceType) {
-    this.priceType = priceType;
-  }
-
-  public PriceAlteration priority(Integer priority) {
-    this.priority = priority;
-    return this;
-  }
-
-  /**
-   * Priority level for applying this alteration among all the defined alterations on the order item price
-   * @return priority
-  **/
-  @Schema(description = "Priority level for applying this alteration among all the defined alterations on the order item price")
-  
-    public Integer getPriority() {
-    return priority;
-  }
-
-  public void setPriority(Integer priority) {
-    this.priority = priority;
-  }
-
-  public PriceAlteration recurringChargePeriod(String recurringChargePeriod) {
-    this.recurringChargePeriod = recurringChargePeriod;
-    return this;
-  }
-
-  /**
-   * Could be month, week...
-   * @return recurringChargePeriod
-  **/
-  @Schema(description = "Could be month, week...")
-  
-    public String getRecurringChargePeriod() {
-    return recurringChargePeriod;
-  }
-
-  public void setRecurringChargePeriod(String recurringChargePeriod) {
-    this.recurringChargePeriod = recurringChargePeriod;
-  }
-
-  public PriceAlteration unitOfMeasure(String unitOfMeasure) {
-    this.unitOfMeasure = unitOfMeasure;
-    return this;
-  }
-
-  /**
-   * Could be minutes, GB...
-   * @return unitOfMeasure
-  **/
-  @Schema(description = "Could be minutes, GB...")
-  
-    public String getUnitOfMeasure() {
-    return unitOfMeasure;
-  }
-
-  public void setUnitOfMeasure(String unitOfMeasure) {
-    this.unitOfMeasure = unitOfMeasure;
-  }
-
-  public PriceAlteration price(Price price) {
-    this.price = price;
-    return this;
-  }
-
-  /**
-   * Get price
-   * @return price
-  **/
-  @Schema(description = "")
-      @NotNull
-
-    @Valid
-    public Price getPrice() {
-    return price;
-  }
-
-  public void setPrice(Price price) {
-    this.price = price;
-  }
-
-  public PriceAlteration productOfferingPrice(ProductOfferingPriceRef productOfferingPrice) {
-    this.productOfferingPrice = productOfferingPrice;
-    return this;
-  }
-
-  /**
-   * Get productOfferingPrice
-   * @return productOfferingPrice
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductOfferingPriceRef getProductOfferingPrice() {
-    return productOfferingPrice;
-  }
-
-  public void setProductOfferingPrice(ProductOfferingPriceRef productOfferingPrice) {
-    this.productOfferingPrice = productOfferingPrice;
-  }
-
-  public PriceAlteration baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public PriceAlteration schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public PriceAlteration type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    PriceAlteration priceAlteration = (PriceAlteration) o;
-    return Objects.equals(this.applicationDuration, priceAlteration.applicationDuration) &&
-        Objects.equals(this.description, priceAlteration.description) &&
-        Objects.equals(this.name, priceAlteration.name) &&
-        Objects.equals(this.priceType, priceAlteration.priceType) &&
-        Objects.equals(this.priority, priceAlteration.priority) &&
-        Objects.equals(this.recurringChargePeriod, priceAlteration.recurringChargePeriod) &&
-        Objects.equals(this.unitOfMeasure, priceAlteration.unitOfMeasure) &&
-        Objects.equals(this.price, priceAlteration.price) &&
-        Objects.equals(this.productOfferingPrice, priceAlteration.productOfferingPrice) &&
-        Objects.equals(this.baseType, priceAlteration.baseType) &&
-        Objects.equals(this.schemaLocation, priceAlteration.schemaLocation) &&
-        Objects.equals(this.type, priceAlteration.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(applicationDuration, description, name, priceType, priority, recurringChargePeriod, unitOfMeasure, price, productOfferingPrice, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class PriceAlteration {\n");
-    
-    sb.append("    applicationDuration: ").append(toIndentedString(applicationDuration)).append("\n");
-    sb.append("    description: ").append(toIndentedString(description)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    priceType: ").append(toIndentedString(priceType)).append("\n");
-    sb.append("    priority: ").append(toIndentedString(priority)).append("\n");
-    sb.append("    recurringChargePeriod: ").append(toIndentedString(recurringChargePeriod)).append("\n");
-    sb.append("    unitOfMeasure: ").append(toIndentedString(unitOfMeasure)).append("\n");
-    sb.append("    price: ").append(toIndentedString(price)).append("\n");
-    sb.append("    productOfferingPrice: ").append(toIndentedString(productOfferingPrice)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/Product.java b/src/main/java/org/etsi/osl/tmf/po622/model/Product.java
deleted file mode 100644
index 30ee6d17d80e572f8260c684e5c1a6b37a7ae864..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/Product.java
+++ /dev/null
@@ -1,857 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.time.OffsetDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.etsi.osl.tmf.common.model.service.Characteristic;
-import org.etsi.osl.tmf.common.model.service.ResourceRef;
-import org.etsi.osl.tmf.common.model.service.ServiceRef;
-import org.etsi.osl.tmf.prm669.model.RelatedParty;
-import org.springframework.validation.annotation.Validated;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-
-/**
- * A product offering procured by a customer or other interested party playing a party role. A product is realized as one or more service(s) and / or resource(s).
- */
-@Schema(description = "A product offering procured by a customer or other interested party playing a party role. A product is realized as one or more service(s) and / or resource(s).")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class Product   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("description")
-  private String description = null;
-
-  @JsonProperty("isBundle")
-  private Boolean isBundle = null;
-
-  @JsonProperty("isCustomerVisible")
-  private Boolean isCustomerVisible = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("orderDate")
-  private OffsetDateTime orderDate = null;
-
-  @JsonProperty("productSerialNumber")
-  private String productSerialNumber = null;
-
-  @JsonProperty("startDate")
-  private OffsetDateTime startDate = null;
-
-  @JsonProperty("terminationDate")
-  private OffsetDateTime terminationDate = null;
-
-  @JsonProperty("agreement")
-  @Valid
-  private List<AgreementItemRef> agreement = null;
-
-  @JsonProperty("billingAccount")
-  private BillingAccountRef billingAccount = null;
-
-  @JsonProperty("place")
-  @Valid
-  private List<RelatedPlaceRefOrValue> place = null;
-
-  @JsonProperty("product")
-  @Valid
-  private List<ProductRefOrValue> product = null;
-
-  @JsonProperty("productCharacteristic")
-  @Valid
-  private List<Characteristic> productCharacteristic = null;
-
-  @JsonProperty("productOffering")
-  private ProductOfferingRef productOffering = null;
-
-  @JsonProperty("productOrderItem")
-  @Valid
-  private List<RelatedProductOrderItem> productOrderItem = null;
-
-  @JsonProperty("productPrice")
-  @Valid
-  private List<ProductPrice> productPrice = null;
-
-  @JsonProperty("productRelationship")
-  @Valid
-  private List<ProductRelationship> productRelationship = null;
-
-  @JsonProperty("productSpecification")
-  private ProductSpecificationRef productSpecification = null;
-
-  @JsonProperty("productTerm")
-  @Valid
-  private List<ProductTerm> productTerm = null;
-
-  @JsonProperty("realizingResource")
-  @Valid
-  private List<ResourceRef> realizingResource = null;
-
-  @JsonProperty("realizingService")
-  @Valid
-  private List<ServiceRef> realizingService = null;
-
-  @JsonProperty("relatedParty")
-  @Valid
-  private List<RelatedParty> relatedParty = null;
-
-  @JsonProperty("status")
-  private ProductStatusType status = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public Product id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the product
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the product")
-  
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public Product href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the product
-   * @return href
-  **/
-  @Schema(description = "Reference of the product")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public Product description(String description) {
-    this.description = description;
-    return this;
-  }
-
-  /**
-   * Is the description of the product. It could be copied from the description of the Product Offering.
-   * @return description
-  **/
-  @Schema(description = "Is the description of the product. It could be copied from the description of the Product Offering.")
-  
-    public String getDescription() {
-    return description;
-  }
-
-  public void setDescription(String description) {
-    this.description = description;
-  }
-
-  public Product isBundle(Boolean isBundle) {
-    this.isBundle = isBundle;
-    return this;
-  }
-
-  /**
-   * If true, the product is a ProductBundle which is an instantiation of a BundledProductOffering. If false, the product is a ProductComponent which is an instantiation of a SimpleProductOffering.
-   * @return isBundle
-  **/
-  @Schema(description = "If true, the product is a ProductBundle which is an instantiation of a BundledProductOffering. If false, the product is a ProductComponent which is an instantiation of a SimpleProductOffering.")
-  
-    public Boolean isIsBundle() {
-    return isBundle;
-  }
-
-  public void setIsBundle(Boolean isBundle) {
-    this.isBundle = isBundle;
-  }
-
-  public Product isCustomerVisible(Boolean isCustomerVisible) {
-    this.isCustomerVisible = isCustomerVisible;
-    return this;
-  }
-
-  /**
-   * If true, the product is visible by the customer.
-   * @return isCustomerVisible
-  **/
-  @Schema(description = "If true, the product is visible by the customer.")
-  
-    public Boolean isIsCustomerVisible() {
-    return isCustomerVisible;
-  }
-
-  public void setIsCustomerVisible(Boolean isCustomerVisible) {
-    this.isCustomerVisible = isCustomerVisible;
-  }
-
-  public Product name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the product. It could be the same as the name of the product offering
-   * @return name
-  **/
-  @Schema(description = "Name of the product. It could be the same as the name of the product offering")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public Product orderDate(OffsetDateTime orderDate) {
-    this.orderDate = orderDate;
-    return this;
-  }
-
-  /**
-   * Is the date when the product was ordered
-   * @return orderDate
-  **/
-  @Schema(description = "Is the date when the product was ordered")
-  
-    @Valid
-    public OffsetDateTime getOrderDate() {
-    return orderDate;
-  }
-
-  public void setOrderDate(OffsetDateTime orderDate) {
-    this.orderDate = orderDate;
-  }
-
-  public Product productSerialNumber(String productSerialNumber) {
-    this.productSerialNumber = productSerialNumber;
-    return this;
-  }
-
-  /**
-   * Is the serial number for the product. This is typically applicable to tangible products e.g. Broadband Router.
-   * @return productSerialNumber
-  **/
-  @Schema(description = "Is the serial number for the product. This is typically applicable to tangible products e.g. Broadband Router.")
-  
-    public String getProductSerialNumber() {
-    return productSerialNumber;
-  }
-
-  public void setProductSerialNumber(String productSerialNumber) {
-    this.productSerialNumber = productSerialNumber;
-  }
-
-  public Product startDate(OffsetDateTime startDate) {
-    this.startDate = startDate;
-    return this;
-  }
-
-  /**
-   * Is the date from which the product starts
-   * @return startDate
-  **/
-  @Schema(description = "Is the date from which the product starts")
-  
-    @Valid
-    public OffsetDateTime getStartDate() {
-    return startDate;
-  }
-
-  public void setStartDate(OffsetDateTime startDate) {
-    this.startDate = startDate;
-  }
-
-  public Product terminationDate(OffsetDateTime terminationDate) {
-    this.terminationDate = terminationDate;
-    return this;
-  }
-
-  /**
-   * Is the date when the product was terminated
-   * @return terminationDate
-  **/
-  @Schema(description = "Is the date when the product was terminated")
-  
-    @Valid
-    public OffsetDateTime getTerminationDate() {
-    return terminationDate;
-  }
-
-  public void setTerminationDate(OffsetDateTime terminationDate) {
-    this.terminationDate = terminationDate;
-  }
-
-  public Product agreement(List<AgreementItemRef> agreement) {
-    this.agreement = agreement;
-    return this;
-  }
-
-  public Product addAgreementItem(AgreementItemRef agreementItem) {
-    if (this.agreement == null) {
-      this.agreement = new ArrayList<>();
-    }
-    this.agreement.add(agreementItem);
-    return this;
-  }
-
-  /**
-   * Get agreement
-   * @return agreement
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<AgreementItemRef> getAgreement() {
-    return agreement;
-  }
-
-  public void setAgreement(List<AgreementItemRef> agreement) {
-    this.agreement = agreement;
-  }
-
-  public Product billingAccount(BillingAccountRef billingAccount) {
-    this.billingAccount = billingAccount;
-    return this;
-  }
-
-  /**
-   * Get billingAccount
-   * @return billingAccount
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public BillingAccountRef getBillingAccount() {
-    return billingAccount;
-  }
-
-  public void setBillingAccount(BillingAccountRef billingAccount) {
-    this.billingAccount = billingAccount;
-  }
-
-  public Product place(List<RelatedPlaceRefOrValue> place) {
-    this.place = place;
-    return this;
-  }
-
-  public Product addPlaceItem(RelatedPlaceRefOrValue placeItem) {
-    if (this.place == null) {
-      this.place = new ArrayList<>();
-    }
-    this.place.add(placeItem);
-    return this;
-  }
-
-  /**
-   * Get place
-   * @return place
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<RelatedPlaceRefOrValue> getPlace() {
-    return place;
-  }
-
-  public void setPlace(List<RelatedPlaceRefOrValue> place) {
-    this.place = place;
-  }
-
-  public Product product(List<ProductRefOrValue> product) {
-    this.product = product;
-    return this;
-  }
-
-  public Product addProductItem(ProductRefOrValue productItem) {
-    if (this.product == null) {
-      this.product = new ArrayList<>();
-    }
-    this.product.add(productItem);
-    return this;
-  }
-
-  /**
-   * Get product
-   * @return product
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductRefOrValue> getProduct() {
-    return product;
-  }
-
-  public void setProduct(List<ProductRefOrValue> product) {
-    this.product = product;
-  }
-
-  public Product productCharacteristic(List<Characteristic> productCharacteristic) {
-    this.productCharacteristic = productCharacteristic;
-    return this;
-  }
-
-  public Product addProductCharacteristicItem(Characteristic productCharacteristicItem) {
-    if (this.productCharacteristic == null) {
-      this.productCharacteristic = new ArrayList<>();
-    }
-    this.productCharacteristic.add(productCharacteristicItem);
-    return this;
-  }
-
-  /**
-   * Get productCharacteristic
-   * @return productCharacteristic
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<Characteristic> getProductCharacteristic() {
-    return productCharacteristic;
-  }
-
-  public void setProductCharacteristic(List<Characteristic> productCharacteristic) {
-    this.productCharacteristic = productCharacteristic;
-  }
-
-  public Product productOffering(ProductOfferingRef productOffering) {
-    this.productOffering = productOffering;
-    return this;
-  }
-
-  /**
-   * Get productOffering
-   * @return productOffering
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductOfferingRef getProductOffering() {
-    return productOffering;
-  }
-
-  public void setProductOffering(ProductOfferingRef productOffering) {
-    this.productOffering = productOffering;
-  }
-
-  public Product productOrderItem(List<RelatedProductOrderItem> productOrderItem) {
-    this.productOrderItem = productOrderItem;
-    return this;
-  }
-
-  public Product addProductOrderItemItem(RelatedProductOrderItem productOrderItemItem) {
-    if (this.productOrderItem == null) {
-      this.productOrderItem = new ArrayList<>();
-    }
-    this.productOrderItem.add(productOrderItemItem);
-    return this;
-  }
-
-  /**
-   * Get productOrderItem
-   * @return productOrderItem
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<RelatedProductOrderItem> getProductOrderItem() {
-    return productOrderItem;
-  }
-
-  public void setProductOrderItem(List<RelatedProductOrderItem> productOrderItem) {
-    this.productOrderItem = productOrderItem;
-  }
-
-  public Product productPrice(List<ProductPrice> productPrice) {
-    this.productPrice = productPrice;
-    return this;
-  }
-
-  public Product addProductPriceItem(ProductPrice productPriceItem) {
-    if (this.productPrice == null) {
-      this.productPrice = new ArrayList<>();
-    }
-    this.productPrice.add(productPriceItem);
-    return this;
-  }
-
-  /**
-   * Get productPrice
-   * @return productPrice
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductPrice> getProductPrice() {
-    return productPrice;
-  }
-
-  public void setProductPrice(List<ProductPrice> productPrice) {
-    this.productPrice = productPrice;
-  }
-
-  public Product productRelationship(List<ProductRelationship> productRelationship) {
-    this.productRelationship = productRelationship;
-    return this;
-  }
-
-  public Product addProductRelationshipItem(ProductRelationship productRelationshipItem) {
-    if (this.productRelationship == null) {
-      this.productRelationship = new ArrayList<>();
-    }
-    this.productRelationship.add(productRelationshipItem);
-    return this;
-  }
-
-  /**
-   * Get productRelationship
-   * @return productRelationship
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductRelationship> getProductRelationship() {
-    return productRelationship;
-  }
-
-  public void setProductRelationship(List<ProductRelationship> productRelationship) {
-    this.productRelationship = productRelationship;
-  }
-
-  public Product productSpecification(ProductSpecificationRef productSpecification) {
-    this.productSpecification = productSpecification;
-    return this;
-  }
-
-  /**
-   * Get productSpecification
-   * @return productSpecification
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductSpecificationRef getProductSpecification() {
-    return productSpecification;
-  }
-
-  public void setProductSpecification(ProductSpecificationRef productSpecification) {
-    this.productSpecification = productSpecification;
-  }
-
-  public Product productTerm(List<ProductTerm> productTerm) {
-    this.productTerm = productTerm;
-    return this;
-  }
-
-  public Product addProductTermItem(ProductTerm productTermItem) {
-    if (this.productTerm == null) {
-      this.productTerm = new ArrayList<>();
-    }
-    this.productTerm.add(productTermItem);
-    return this;
-  }
-
-  /**
-   * Get productTerm
-   * @return productTerm
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductTerm> getProductTerm() {
-    return productTerm;
-  }
-
-  public void setProductTerm(List<ProductTerm> productTerm) {
-    this.productTerm = productTerm;
-  }
-
-  public Product realizingResource(List<ResourceRef> realizingResource) {
-    this.realizingResource = realizingResource;
-    return this;
-  }
-
-  public Product addRealizingResourceItem(ResourceRef realizingResourceItem) {
-    if (this.realizingResource == null) {
-      this.realizingResource = new ArrayList<>();
-    }
-    this.realizingResource.add(realizingResourceItem);
-    return this;
-  }
-
-  /**
-   * Get realizingResource
-   * @return realizingResource
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ResourceRef> getRealizingResource() {
-    return realizingResource;
-  }
-
-  public void setRealizingResource(List<ResourceRef> realizingResource) {
-    this.realizingResource = realizingResource;
-  }
-
-  public Product realizingService(List<ServiceRef> realizingService) {
-    this.realizingService = realizingService;
-    return this;
-  }
-
-  public Product addRealizingServiceItem(ServiceRef realizingServiceItem) {
-    if (this.realizingService == null) {
-      this.realizingService = new ArrayList<>();
-    }
-    this.realizingService.add(realizingServiceItem);
-    return this;
-  }
-
-  /**
-   * Get realizingService
-   * @return realizingService
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ServiceRef> getRealizingService() {
-    return realizingService;
-  }
-
-  public void setRealizingService(List<ServiceRef> realizingService) {
-    this.realizingService = realizingService;
-  }
-
-  public Product relatedParty(List<RelatedParty> relatedParty) {
-    this.relatedParty = relatedParty;
-    return this;
-  }
-
-  public Product addRelatedPartyItem(RelatedParty relatedPartyItem) {
-    if (this.relatedParty == null) {
-      this.relatedParty = new ArrayList<>();
-    }
-    this.relatedParty.add(relatedPartyItem);
-    return this;
-  }
-
-  /**
-   * Get relatedParty
-   * @return relatedParty
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<RelatedParty> getRelatedParty() {
-    return relatedParty;
-  }
-
-  public void setRelatedParty(List<RelatedParty> relatedParty) {
-    this.relatedParty = relatedParty;
-  }
-
-  public Product status(ProductStatusType status) {
-    this.status = status;
-    return this;
-  }
-
-  /**
-   * Get status
-   * @return status
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductStatusType getStatus() {
-    return status;
-  }
-
-  public void setStatus(ProductStatusType status) {
-    this.status = status;
-  }
-
-  public Product baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public Product schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public Product type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    Product product = (Product) o;
-    return Objects.equals(this.id, product.id) &&
-        Objects.equals(this.href, product.href) &&
-        Objects.equals(this.description, product.description) &&
-        Objects.equals(this.isBundle, product.isBundle) &&
-        Objects.equals(this.isCustomerVisible, product.isCustomerVisible) &&
-        Objects.equals(this.name, product.name) &&
-        Objects.equals(this.orderDate, product.orderDate) &&
-        Objects.equals(this.productSerialNumber, product.productSerialNumber) &&
-        Objects.equals(this.startDate, product.startDate) &&
-        Objects.equals(this.terminationDate, product.terminationDate) &&
-        Objects.equals(this.agreement, product.agreement) &&
-        Objects.equals(this.billingAccount, product.billingAccount) &&
-        Objects.equals(this.place, product.place) &&
-        Objects.equals(this.product, product.product) &&
-        Objects.equals(this.productCharacteristic, product.productCharacteristic) &&
-        Objects.equals(this.productOffering, product.productOffering) &&
-        Objects.equals(this.productOrderItem, product.productOrderItem) &&
-        Objects.equals(this.productPrice, product.productPrice) &&
-        Objects.equals(this.productRelationship, product.productRelationship) &&
-        Objects.equals(this.productSpecification, product.productSpecification) &&
-        Objects.equals(this.productTerm, product.productTerm) &&
-        Objects.equals(this.realizingResource, product.realizingResource) &&
-        Objects.equals(this.realizingService, product.realizingService) &&
-        Objects.equals(this.relatedParty, product.relatedParty) &&
-        Objects.equals(this.status, product.status) &&
-        Objects.equals(this.baseType, product.baseType) &&
-        Objects.equals(this.schemaLocation, product.schemaLocation) &&
-        Objects.equals(this.type, product.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, description, isBundle, isCustomerVisible, name, orderDate, productSerialNumber, startDate, terminationDate, agreement, billingAccount, place, product, productCharacteristic, productOffering, productOrderItem, productPrice, productRelationship, productSpecification, productTerm, realizingResource, realizingService, relatedParty, status, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class Product {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    description: ").append(toIndentedString(description)).append("\n");
-    sb.append("    isBundle: ").append(toIndentedString(isBundle)).append("\n");
-    sb.append("    isCustomerVisible: ").append(toIndentedString(isCustomerVisible)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    orderDate: ").append(toIndentedString(orderDate)).append("\n");
-    sb.append("    productSerialNumber: ").append(toIndentedString(productSerialNumber)).append("\n");
-    sb.append("    startDate: ").append(toIndentedString(startDate)).append("\n");
-    sb.append("    terminationDate: ").append(toIndentedString(terminationDate)).append("\n");
-    sb.append("    agreement: ").append(toIndentedString(agreement)).append("\n");
-    sb.append("    billingAccount: ").append(toIndentedString(billingAccount)).append("\n");
-    sb.append("    place: ").append(toIndentedString(place)).append("\n");
-    sb.append("    product: ").append(toIndentedString(product)).append("\n");
-    sb.append("    productCharacteristic: ").append(toIndentedString(productCharacteristic)).append("\n");
-    sb.append("    productOffering: ").append(toIndentedString(productOffering)).append("\n");
-    sb.append("    productOrderItem: ").append(toIndentedString(productOrderItem)).append("\n");
-    sb.append("    productPrice: ").append(toIndentedString(productPrice)).append("\n");
-    sb.append("    productRelationship: ").append(toIndentedString(productRelationship)).append("\n");
-    sb.append("    productSpecification: ").append(toIndentedString(productSpecification)).append("\n");
-    sb.append("    productTerm: ").append(toIndentedString(productTerm)).append("\n");
-    sb.append("    realizingResource: ").append(toIndentedString(realizingResource)).append("\n");
-    sb.append("    realizingService: ").append(toIndentedString(realizingService)).append("\n");
-    sb.append("    relatedParty: ").append(toIndentedString(relatedParty)).append("\n");
-    sb.append("    status: ").append(toIndentedString(status)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingPriceRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingPriceRef.java
deleted file mode 100644
index 25224fb75af1356ddd1477b5336339fa821c7445..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingPriceRef.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * ProductPriceOffering reference. An amount, usually of money, that is asked for or allowed when a ProductOffering is bought, rented, or leased
- */
-@Schema(description = "ProductPriceOffering reference. An amount, usually of money, that is asked for or allowed when a ProductOffering is bought, rented, or leased")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductOfferingPriceRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductOfferingPriceRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductOfferingPriceRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-  **/
-  @Schema(description = "Reference of the related entity.")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductOfferingPriceRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-  **/
-  @Schema(description = "Name of the related entity.")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductOfferingPriceRef baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductOfferingPriceRef schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductOfferingPriceRef type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public ProductOfferingPriceRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductOfferingPriceRef productOfferingPriceRef = (ProductOfferingPriceRef) o;
-    return Objects.equals(this.id, productOfferingPriceRef.id) &&
-        Objects.equals(this.href, productOfferingPriceRef.href) &&
-        Objects.equals(this.name, productOfferingPriceRef.name) &&
-        Objects.equals(this.baseType, productOfferingPriceRef.baseType) &&
-        Objects.equals(this.schemaLocation, productOfferingPriceRef.schemaLocation) &&
-        Objects.equals(this.type, productOfferingPriceRef.type) &&
-        Objects.equals(this._atReferredType, productOfferingPriceRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductOfferingPriceRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationItemRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationItemRef.java
index 1c3b20cac3b027f15c73d87ceee921a127eb076c..2ff1407ea9eae6c7ea0fcce5c95ae9270e3b8625 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationItemRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationItemRef.java
@@ -20,12 +20,11 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,15 +33,14 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "It's a productOfferingQualification item that has been executed previously.")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductOfferingQualificationItemRef   {
+@Entity(name = "ProdOffQIRef622")
+public class ProductOfferingQualificationItemRef  extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
   @JsonProperty("href")
   private String href = null;
 
-  @JsonProperty("name")
-  private String name = null;
 
   @JsonProperty("productOfferingQualificationHref")
   private String productOfferingQualificationHref = null;
@@ -53,14 +51,6 @@ public class ProductOfferingQualificationItemRef   {
   @JsonProperty("productOfferingQualificationName")
   private String productOfferingQualificationName = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationRef.java
index ed7f58a5c7aa7b4282f347aad139ba90fb1a2340..efa5411c525894fd8eb661f12625652bfceb7ed5 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingQualificationRef.java
@@ -20,12 +20,11 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,24 +33,11 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "It's a productOfferingQualification that has been executed previously")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductOfferingQualificationRef   {
+@Entity(name = "ProdOffQualRef622")
+public class ProductOfferingQualificationRef   extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingRef.java
deleted file mode 100644
index f18eb0729c49f94f98f189cb8a2581994518bf2f..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOfferingRef.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.
- */
-@Schema(description = "ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductOfferingRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductOfferingRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductOfferingRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-  **/
-  @Schema(description = "Reference of the related entity.")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductOfferingRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-  **/
-  @Schema(description = "Name of the related entity.")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductOfferingRef baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductOfferingRef schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductOfferingRef type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public ProductOfferingRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductOfferingRef productOfferingRef = (ProductOfferingRef) o;
-    return Objects.equals(this.id, productOfferingRef.id) &&
-        Objects.equals(this.href, productOfferingRef.href) &&
-        Objects.equals(this.name, productOfferingRef.name) &&
-        Objects.equals(this.baseType, productOfferingRef.baseType) &&
-        Objects.equals(this.schemaLocation, productOfferingRef.schemaLocation) &&
-        Objects.equals(this.type, productOfferingRef.type) &&
-        Objects.equals(this._atReferredType, productOfferingRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductOfferingRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrder.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrder.java
index b8a7a3848a6ed03409dbf75894c338c388a322d8..b8c4afcd5e699a3ffede0db25fc10a29ab12c692 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrder.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrder.java
@@ -21,31 +21,45 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
-
+import java.util.Set;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
 import org.etsi.osl.tmf.common.model.service.Note;
+import org.etsi.osl.tmf.pim637.model.BillingAccountRef;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.Lob;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.OneToOne;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 
 /**
- * A Product Order is a type of order which  can  be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa,
+ * A Product Order is a type of order which can be used to place an order between a customer and a
+ * service provider or between a service provider and a partner and vice versa,
  */
-@Schema(description = "A Product Order is a type of order which  can  be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa,")
+@Schema(
+    description = "A Product Order is a type of order which  can  be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa,")
 @Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductOrder   {
+@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen",
+    date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
+
+@Entity(name = "ProductOrder")
+@JsonIgnoreProperties("orderRequester")
+public class ProductOrder extends BaseRootEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
   @JsonProperty("cancellationDate")
   private OffsetDateTime cancellationDate = null;
 
@@ -55,13 +69,15 @@ public class ProductOrder   {
   @JsonProperty("category")
   private String category = null;
 
-  @JsonProperty("completionDate")
+  
   private OffsetDateTime completionDate = null;
 
+  @Lob
+  @Column(name = "LDESCRIPTION", columnDefinition = "LONGTEXT")
   @JsonProperty("description")
-  private String description = null;
+  private String description = null;;
 
-  @JsonProperty("expectedCompletionDate")
+  
   private OffsetDateTime expectedCompletionDate = null;
 
   @JsonProperty("externalId")
@@ -70,68 +86,70 @@ public class ProductOrder   {
   @JsonProperty("notificationContact")
   private String notificationContact = null;
 
-  @JsonProperty("orderDate")
   private OffsetDateTime orderDate = null;
 
   @JsonProperty("priority")
   private String priority = null;
 
-  @JsonProperty("requestedCompletionDate")
+  
   private OffsetDateTime requestedCompletionDate = null;
-
-  @JsonProperty("requestedStartDate")
+  
   private OffsetDateTime requestedStartDate = null;
 
   @JsonProperty("agreement")
   @Valid
-  private List<AgreementRef> agreement = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<AgreementRef> agreement = new HashSet<>();
 
   @JsonProperty("billingAccount")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "billing_acc_refuuid", referencedColumnName = "uuid")
   private BillingAccountRef billingAccount = null;
 
   @JsonProperty("channel")
   @Valid
-  private List<RelatedChannel> channel = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<RelatedChannel> channel = new HashSet<>();
 
   @JsonProperty("note")
   @Valid
-  private List<Note> note = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<Note> note =  new HashSet<>();
 
   @JsonProperty("orderTotalPrice")
   @Valid
-  private List<OrderPrice> orderTotalPrice = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<OrderPrice> orderTotalPrice  =  new HashSet<>();
 
   @JsonProperty("payment")
   @Valid
-  private List<PaymentRef> payment = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<PaymentRef> payment = new HashSet<>();
 
   @JsonProperty("productOfferingQualification")
   @Valid
-  private List<ProductOfferingQualificationRef> productOfferingQualification = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<ProductOfferingQualificationRef> productOfferingQualification = new HashSet<>();
 
   @JsonProperty("productOrderItem")
   @Valid
-  private List<ProductOrderItem> productOrderItem = new ArrayList<>();
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<ProductOrderItem> productOrderItem = new HashSet<>();
 
   @JsonProperty("quote")
   @Valid
-  private List<QuoteRef> quote = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<QuoteRef> quote = new HashSet<>();
 
   @JsonProperty("relatedParty")
   @Valid
-  private List<RelatedParty> relatedParty = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<RelatedParty> relatedParty =  new HashSet<>();
 
   @JsonProperty("state")
-  private ProductOrderStateType state = null;
+  private ProductOrderStateType state = ProductOrderStateType.INITIAL ;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
+  
 
   public ProductOrder id(String id) {
     this.id = id;
@@ -140,11 +158,12 @@ public class ProductOrder   {
 
   /**
    * ID created on repository side (OM system)
+   * 
    * @return id
-  **/
+   **/
   @Schema(description = "ID created on repository side (OM system)")
-  
-    public String getId() {
+
+  public String getId() {
     return id;
   }
 
@@ -159,11 +178,12 @@ public class ProductOrder   {
 
   /**
    * Hyperlink to access the order
+   * 
    * @return href
-  **/
+   **/
   @Schema(description = "Hyperlink to access the order")
-  
-    public String getHref() {
+
+  public String getHref() {
     return href;
   }
 
@@ -177,13 +197,14 @@ public class ProductOrder   {
   }
 
   /**
-   * Date when the order is cancelled. This is used when order is cancelled. 
+   * Date when the order is cancelled. This is used when order is cancelled.
+   * 
    * @return cancellationDate
-  **/
+   **/
   @Schema(description = "Date when the order is cancelled. This is used when order is cancelled. ")
-  
-    @Valid
-    public OffsetDateTime getCancellationDate() {
+
+  @Valid
+  public OffsetDateTime getCancellationDate() {
     return cancellationDate;
   }
 
@@ -197,12 +218,13 @@ public class ProductOrder   {
   }
 
   /**
-   * Reason why the order is cancelled. This is used when order is cancelled. 
+   * Reason why the order is cancelled. This is used when order is cancelled.
+   * 
    * @return cancellationReason
-  **/
+   **/
   @Schema(description = "Reason why the order is cancelled. This is used when order is cancelled. ")
-  
-    public String getCancellationReason() {
+
+  public String getCancellationReason() {
     return cancellationReason;
   }
 
@@ -216,12 +238,15 @@ public class ProductOrder   {
   }
 
   /**
-   * Used to categorize the order from a business perspective that can be useful for the OM system (e.g. \"enterprise\", \"residential\", ...)
+   * Used to categorize the order from a business perspective that can be useful for the OM system
+   * (e.g. \"enterprise\", \"residential\", ...)
+   * 
    * @return category
-  **/
-  @Schema(description = "Used to categorize the order from a business perspective that can be useful for the OM system (e.g. \"enterprise\", \"residential\", ...)")
-  
-    public String getCategory() {
+   **/
+  @Schema(
+      description = "Used to categorize the order from a business perspective that can be useful for the OM system (e.g. \"enterprise\", \"residential\", ...)")
+
+  public String getCategory() {
     return category;
   }
 
@@ -236,18 +261,35 @@ public class ProductOrder   {
 
   /**
    * Date when the order was completed
+   * 
    * @return completionDate
-  **/
+   **/
   @Schema(description = "Date when the order was completed")
+
+  @Valid
+  @JsonProperty("completionDate")
+  public String getCompletionDateString() {
+      if ( this.completionDate == null) {
+          return null;
+      }
+      return this.completionDate.toString();
+  }
   
-    @Valid
-    public OffsetDateTime getCompletionDate() {
+  @Valid
+  public OffsetDateTime getCompletionDate() {
     return completionDate;
   }
 
   public void setCompletionDate(OffsetDateTime completionDate) {
     this.completionDate = completionDate;
   }
+  
+  public void setCompletionDate(String completionDate) {
+    if (completionDate!=null) {
+        this.completionDate = OffsetDateTime.parse( completionDate );           
+    }
+}
+
 
   public ProductOrder description(String description) {
     this.description = description;
@@ -256,11 +298,12 @@ public class ProductOrder   {
 
   /**
    * Description of the product order
+   * 
    * @return description
-  **/
+   **/
   @Schema(description = "Description of the product order")
-  
-    public String getDescription() {
+
+  public String getDescription() {
     return description;
   }
 
@@ -275,18 +318,35 @@ public class ProductOrder   {
 
   /**
    * Expected delivery date amended by the provider
+   * 
    * @return expectedCompletionDate
-  **/
+   **/
   @Schema(description = "Expected delivery date amended by the provider")
+
+  @JsonProperty("expectedCompletionDate")
+  public String getExpectedCompletionDateString() {
+
+      if ( this.expectedCompletionDate == null) {
+          return null;
+      }
+      return this.expectedCompletionDate.toString();
+  }
   
-    @Valid
-    public OffsetDateTime getExpectedCompletionDate() {
+  @Valid
+  public OffsetDateTime getExpectedCompletionDate() {
     return expectedCompletionDate;
   }
 
   public void setExpectedCompletionDate(OffsetDateTime expectedCompletionDate) {
     this.expectedCompletionDate = expectedCompletionDate;
   }
+  
+  public void setExpectedCompletionDate(String expectedCompletionDate) {
+    if (expectedCompletionDate!=null) {
+        this.expectedCompletionDate = OffsetDateTime.parse( expectedCompletionDate );
+        
+    }
+}
 
   public ProductOrder externalId(String externalId) {
     this.externalId = externalId;
@@ -295,11 +355,13 @@ public class ProductOrder   {
 
   /**
    * ID given by the consumer and only understandable by him (to facilitate his searches afterwards)
+   * 
    * @return externalId
-  **/
-  @Schema(description = "ID given by the consumer and only understandable by him (to facilitate his searches afterwards)")
-  
-    public String getExternalId() {
+   **/
+  @Schema(
+      description = "ID given by the consumer and only understandable by him (to facilitate his searches afterwards)")
+
+  public String getExternalId() {
     return externalId;
   }
 
@@ -314,11 +376,13 @@ public class ProductOrder   {
 
   /**
    * Contact attached to the order to send back information regarding this order
+   * 
    * @return notificationContact
-  **/
-  @Schema(description = "Contact attached to the order to send back information regarding this order")
-  
-    public String getNotificationContact() {
+   **/
+  @Schema(
+      description = "Contact attached to the order to send back information regarding this order")
+
+  public String getNotificationContact() {
     return notificationContact;
   }
 
@@ -333,18 +397,36 @@ public class ProductOrder   {
 
   /**
    * Date when the order was created
+   * 
    * @return orderDate
-  **/
+   **/
   @Schema(description = "Date when the order was created")
   
-    @Valid
-    public OffsetDateTime getOrderDate() {
+  @Valid
+  @JsonProperty("orderDate")
+  public String getOrderDateString() {
+      if ( this.orderDate == null) {
+          return null;
+      }
+      return this.orderDate.toString();
+  }
+
+  @Valid
+  public OffsetDateTime getOrderDate() {
     return orderDate;
   }
 
   public void setOrderDate(OffsetDateTime orderDate) {
     this.orderDate = orderDate;
   }
+  
+  public void setOrderDate(String orderDate) {
+
+    if (orderDate!=null) {
+        this.orderDate = OffsetDateTime.parse( orderDate );
+        
+    }
+}
 
   public ProductOrder priority(String priority) {
     this.priority = priority;
@@ -352,12 +434,15 @@ public class ProductOrder   {
   }
 
   /**
-   * A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the highest priority, and 4 the lowest)
+   * A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the
+   * highest priority, and 4 the lowest)
+   * 
    * @return priority
-  **/
-  @Schema(description = "A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the highest priority, and 4 the lowest)")
-  
-    public String getPriority() {
+   **/
+  @Schema(
+      description = "A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the highest priority, and 4 the lowest)")
+
+  public String getPriority() {
     return priority;
   }
 
@@ -372,18 +457,37 @@ public class ProductOrder   {
 
   /**
    * Requested delivery date from the requestor perspective
+   * 
    * @return requestedCompletionDate
-  **/
+   **/
   @Schema(description = "Requested delivery date from the requestor perspective")
+
+  @Valid
+  @JsonProperty("requestedCompletionDate")
+  public String getRequestedCompletionDateString() {
+
+      if ( this.requestedCompletionDate == null) {
+          return null;
+      }
+      return this.requestedCompletionDate.toString();
+  }
   
-    @Valid
-    public OffsetDateTime getRequestedCompletionDate() {
+  @Valid
+  public OffsetDateTime getRequestedCompletionDate() {
     return requestedCompletionDate;
   }
 
   public void setRequestedCompletionDate(OffsetDateTime requestedCompletionDate) {
     this.requestedCompletionDate = requestedCompletionDate;
   }
+  
+  public void setRequestedCompletionDate(String requestedCompletionDate) {
+
+    if (requestedCompletionDate!=null) {
+        this.requestedCompletionDate = OffsetDateTime.parse( requestedCompletionDate );
+        
+    }
+}
 
   public ProductOrder requestedStartDate(OffsetDateTime requestedStartDate) {
     this.requestedStartDate = requestedStartDate;
@@ -391,28 +495,50 @@ public class ProductOrder   {
   }
 
   /**
-   * Order fulfillment start date wished by the requestor. This is used when, for any reason, requestor cannot allow seller to begin to operationally begin the fulfillment before a date. 
+   * Order fulfillment start date wished by the requestor. This is used when, for any reason,
+   * requestor cannot allow seller to begin to operationally begin the fulfillment before a date.
+   * 
    * @return requestedStartDate
-  **/
-  @Schema(description = "Order fulfillment start date wished by the requestor. This is used when, for any reason, requestor cannot allow seller to begin to operationally begin the fulfillment before a date. ")
+   **/
+  @Schema(
+      description = "Order fulfillment start date wished by the requestor. This is used when, for any reason, requestor cannot allow seller to begin to operationally begin the fulfillment before a date. ")
+
+  @Valid
+  @JsonProperty("requestedStartDate")
+  public String getRequestedStartDateString() {
+
+      if ( this.requestedStartDate == null) {
+          return null;
+      }
+      return this.requestedStartDate.toString();
+  }
   
-    @Valid
-    public OffsetDateTime getRequestedStartDate() {
+  @Valid
+  public OffsetDateTime getRequestedStartDate() {
     return requestedStartDate;
   }
 
   public void setRequestedStartDate(OffsetDateTime requestedStartDate) {
     this.requestedStartDate = requestedStartDate;
   }
+  
+  
+  public void setRequestedStartDate(String requestedStartDate) {
+
+      if (requestedStartDate!=null) {
+          this.requestedStartDate = OffsetDateTime.parse( requestedStartDate );
+          
+      }
+  }
 
-  public ProductOrder agreement(List<AgreementRef> agreement) {
+  public ProductOrder agreement(Set<AgreementRef> agreement) {
     this.agreement = agreement;
     return this;
   }
 
   public ProductOrder addAgreementItem(AgreementRef agreementItem) {
     if (this.agreement == null) {
-      this.agreement = new ArrayList<>();
+      this.agreement = new HashSet<>();
     }
     this.agreement.add(agreementItem);
     return this;
@@ -420,15 +546,16 @@ public class ProductOrder   {
 
   /**
    * A reference to an agreement defined in the context of the product order
+   * 
    * @return agreement
-  **/
+   **/
   @Schema(description = "A reference to an agreement defined in the context of the product order")
-      @Valid
-    public List<AgreementRef> getAgreement() {
+  @Valid
+  public Set<AgreementRef> getAgreement() {
     return agreement;
   }
 
-  public void setAgreement(List<AgreementRef> agreement) {
+  public void setAgreement(Set<AgreementRef> agreement) {
     this.agreement = agreement;
   }
 
@@ -439,12 +566,13 @@ public class ProductOrder   {
 
   /**
    * Get billingAccount
+   * 
    * @return billingAccount
-  **/
+   **/
   @Schema(description = "")
-  
-    @Valid
-    public BillingAccountRef getBillingAccount() {
+
+  @Valid
+  public BillingAccountRef getBillingAccount() {
     return billingAccount;
   }
 
@@ -452,14 +580,14 @@ public class ProductOrder   {
     this.billingAccount = billingAccount;
   }
 
-  public ProductOrder channel(List<RelatedChannel> channel) {
+  public ProductOrder channel(Set<RelatedChannel> channel) {
     this.channel = channel;
     return this;
   }
 
   public ProductOrder addChannelItem(RelatedChannel channelItem) {
     if (this.channel == null) {
-      this.channel = new ArrayList<>();
+      this.channel = new HashSet<>();
     }
     this.channel.add(channelItem);
     return this;
@@ -467,26 +595,27 @@ public class ProductOrder   {
 
   /**
    * Get channel
+   * 
    * @return channel
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<RelatedChannel> getChannel() {
+  @Valid
+  public Set<RelatedChannel> getChannel() {
     return channel;
   }
 
-  public void setChannel(List<RelatedChannel> channel) {
+  public void setChannel(Set<RelatedChannel> channel) {
     this.channel = channel;
   }
 
-  public ProductOrder note(List<Note> note) {
+  public ProductOrder note(Set<Note> note) {
     this.note = note;
     return this;
   }
 
   public ProductOrder addNoteItem(Note noteItem) {
     if (this.note == null) {
-      this.note = new ArrayList<>();
+      this.note = new HashSet<>();
     }
     this.note.add(noteItem);
     return this;
@@ -494,26 +623,27 @@ public class ProductOrder   {
 
   /**
    * Get note
+   * 
    * @return note
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<Note> getNote() {
+  @Valid
+  public Set<Note> getNote() {
     return note;
   }
 
-  public void setNote(List<Note> note) {
+  public void setNote(Set<Note> note) {
     this.note = note;
   }
 
-  public ProductOrder orderTotalPrice(List<OrderPrice> orderTotalPrice) {
+  public ProductOrder orderTotalPrice(Set<OrderPrice> orderTotalPrice) {
     this.orderTotalPrice = orderTotalPrice;
     return this;
   }
 
   public ProductOrder addOrderTotalPriceItem(OrderPrice orderTotalPriceItem) {
     if (this.orderTotalPrice == null) {
-      this.orderTotalPrice = new ArrayList<>();
+      this.orderTotalPrice = new HashSet<>();
     }
     this.orderTotalPrice.add(orderTotalPriceItem);
     return this;
@@ -521,26 +651,27 @@ public class ProductOrder   {
 
   /**
    * Get orderTotalPrice
+   * 
    * @return orderTotalPrice
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<OrderPrice> getOrderTotalPrice() {
+  @Valid
+  public Set<OrderPrice> getOrderTotalPrice() {
     return orderTotalPrice;
   }
 
-  public void setOrderTotalPrice(List<OrderPrice> orderTotalPrice) {
+  public void setOrderTotalPrice(Set<OrderPrice> orderTotalPrice) {
     this.orderTotalPrice = orderTotalPrice;
   }
 
-  public ProductOrder payment(List<PaymentRef> payment) {
+  public ProductOrder payment(Set<PaymentRef> payment) {
     this.payment = payment;
     return this;
   }
 
   public ProductOrder addPaymentItem(PaymentRef paymentItem) {
     if (this.payment == null) {
-      this.payment = new ArrayList<>();
+      this.payment = new HashSet<>();
     }
     this.payment.add(paymentItem);
     return this;
@@ -548,26 +679,29 @@ public class ProductOrder   {
 
   /**
    * Get payment
+   * 
    * @return payment
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<PaymentRef> getPayment() {
+  @Valid
+  public Set<PaymentRef> getPayment() {
     return payment;
   }
 
-  public void setPayment(List<PaymentRef> payment) {
+  public void setPayment(Set<PaymentRef> payment) {
     this.payment = payment;
   }
 
-  public ProductOrder productOfferingQualification(List<ProductOfferingQualificationRef> productOfferingQualification) {
+  public ProductOrder productOfferingQualification(
+      Set<ProductOfferingQualificationRef> productOfferingQualification) {
     this.productOfferingQualification = productOfferingQualification;
     return this;
   }
 
-  public ProductOrder addProductOfferingQualificationItem(ProductOfferingQualificationRef productOfferingQualificationItem) {
+  public ProductOrder addProductOfferingQualificationItem(
+      ProductOfferingQualificationRef productOfferingQualificationItem) {
     if (this.productOfferingQualification == null) {
-      this.productOfferingQualification = new ArrayList<>();
+      this.productOfferingQualification = new HashSet<>();
     }
     this.productOfferingQualification.add(productOfferingQualificationItem);
     return this;
@@ -575,19 +709,21 @@ public class ProductOrder   {
 
   /**
    * Get productOfferingQualification
+   * 
    * @return productOfferingQualification
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<ProductOfferingQualificationRef> getProductOfferingQualification() {
+  @Valid
+  public Set<ProductOfferingQualificationRef> getProductOfferingQualification() {
     return productOfferingQualification;
   }
 
-  public void setProductOfferingQualification(List<ProductOfferingQualificationRef> productOfferingQualification) {
+  public void setProductOfferingQualification(
+      Set<ProductOfferingQualificationRef> productOfferingQualification) {
     this.productOfferingQualification = productOfferingQualification;
   }
 
-  public ProductOrder productOrderItem(List<ProductOrderItem> productOrderItem) {
+  public ProductOrder productOrderItem(Set<ProductOrderItem> productOrderItem) {
     this.productOrderItem = productOrderItem;
     return this;
   }
@@ -599,27 +735,29 @@ public class ProductOrder   {
 
   /**
    * Get productOrderItem
+   * 
    * @return productOrderItem
-  **/
+   **/
   @Schema(description = "")
-      @NotNull
-    @Valid
-  @Size(min=1)   public List<ProductOrderItem> getProductOrderItem() {
+  @NotNull
+  @Valid
+  @Size(min = 1)
+  public Set<ProductOrderItem> getProductOrderItem() {
     return productOrderItem;
   }
 
-  public void setProductOrderItem(List<ProductOrderItem> productOrderItem) {
+  public void setProductOrderItem(Set<ProductOrderItem> productOrderItem) {
     this.productOrderItem = productOrderItem;
   }
 
-  public ProductOrder quote(List<QuoteRef> quote) {
+  public ProductOrder quote(Set<QuoteRef> quote) {
     this.quote = quote;
     return this;
   }
 
   public ProductOrder addQuoteItem(QuoteRef quoteItem) {
     if (this.quote == null) {
-      this.quote = new ArrayList<>();
+      this.quote = new HashSet<>();
     }
     this.quote.add(quoteItem);
     return this;
@@ -627,26 +765,27 @@ public class ProductOrder   {
 
   /**
    * Get quote
+   * 
    * @return quote
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<QuoteRef> getQuote() {
+  @Valid
+  public Set<QuoteRef> getQuote() {
     return quote;
   }
 
-  public void setQuote(List<QuoteRef> quote) {
+  public void setQuote(Set<QuoteRef> quote) {
     this.quote = quote;
   }
 
-  public ProductOrder relatedParty(List<RelatedParty> relatedParty) {
+  public ProductOrder relatedParty(Set<RelatedParty> relatedParty) {
     this.relatedParty = relatedParty;
     return this;
   }
 
   public ProductOrder addRelatedPartyItem(RelatedParty relatedPartyItem) {
     if (this.relatedParty == null) {
-      this.relatedParty = new ArrayList<>();
+      this.relatedParty = new HashSet<>();
     }
     this.relatedParty.add(relatedPartyItem);
     return this;
@@ -654,15 +793,16 @@ public class ProductOrder   {
 
   /**
    * Get relatedParty
+   * 
    * @return relatedParty
-  **/
+   **/
   @Schema(description = "")
-      @Valid
-    public List<RelatedParty> getRelatedParty() {
+  @Valid
+  public Set<RelatedParty> getRelatedParty() {
     return relatedParty;
   }
 
-  public void setRelatedParty(List<RelatedParty> relatedParty) {
+  public void setRelatedParty(Set<RelatedParty> relatedParty) {
     this.relatedParty = relatedParty;
   }
 
@@ -673,12 +813,13 @@ public class ProductOrder   {
 
   /**
    * Get state
+   * 
    * @return state
-  **/
+   **/
   @Schema(description = "")
-  
-    @Valid
-    public ProductOrderStateType getState() {
+
+  @Valid
+  public ProductOrderStateType getState() {
     return state;
   }
 
@@ -693,11 +834,12 @@ public class ProductOrder   {
 
   /**
    * When sub-classing, this defines the super-class
+   * 
    * @return baseType
-  **/
+   **/
   @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
+
+  public String getAtBaseType() {
     return baseType;
   }
 
@@ -712,11 +854,13 @@ public class ProductOrder   {
 
   /**
    * A URI to a JSON-Schema file that defines additional attributes and relationships
+   * 
    * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
+   **/
+  @Schema(
+      description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
+
+  public String getAtSchemaLocation() {
     return schemaLocation;
   }
 
@@ -731,11 +875,12 @@ public class ProductOrder   {
 
   /**
    * When sub-classing, this defines the sub-class entity name
+   * 
    * @return type
-  **/
+   **/
   @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
+
+  public String getAtType() {
     return type;
   }
 
@@ -753,46 +898,50 @@ public class ProductOrder   {
       return false;
     }
     ProductOrder productOrder = (ProductOrder) o;
-    return Objects.equals(this.id, productOrder.id) &&
-        Objects.equals(this.href, productOrder.href) &&
-        Objects.equals(this.cancellationDate, productOrder.cancellationDate) &&
-        Objects.equals(this.cancellationReason, productOrder.cancellationReason) &&
-        Objects.equals(this.category, productOrder.category) &&
-        Objects.equals(this.completionDate, productOrder.completionDate) &&
-        Objects.equals(this.description, productOrder.description) &&
-        Objects.equals(this.expectedCompletionDate, productOrder.expectedCompletionDate) &&
-        Objects.equals(this.externalId, productOrder.externalId) &&
-        Objects.equals(this.notificationContact, productOrder.notificationContact) &&
-        Objects.equals(this.orderDate, productOrder.orderDate) &&
-        Objects.equals(this.priority, productOrder.priority) &&
-        Objects.equals(this.requestedCompletionDate, productOrder.requestedCompletionDate) &&
-        Objects.equals(this.requestedStartDate, productOrder.requestedStartDate) &&
-        Objects.equals(this.agreement, productOrder.agreement) &&
-        Objects.equals(this.billingAccount, productOrder.billingAccount) &&
-        Objects.equals(this.channel, productOrder.channel) &&
-        Objects.equals(this.note, productOrder.note) &&
-        Objects.equals(this.orderTotalPrice, productOrder.orderTotalPrice) &&
-        Objects.equals(this.payment, productOrder.payment) &&
-        Objects.equals(this.productOfferingQualification, productOrder.productOfferingQualification) &&
-        Objects.equals(this.productOrderItem, productOrder.productOrderItem) &&
-        Objects.equals(this.quote, productOrder.quote) &&
-        Objects.equals(this.relatedParty, productOrder.relatedParty) &&
-        Objects.equals(this.state, productOrder.state) &&
-        Objects.equals(this.baseType, productOrder.baseType) &&
-        Objects.equals(this.schemaLocation, productOrder.schemaLocation) &&
-        Objects.equals(this.type, productOrder.type);
+    return Objects.equals(this.id, productOrder.id) && Objects.equals(this.href, productOrder.href)
+        && Objects.equals(this.cancellationDate, productOrder.cancellationDate)
+        && Objects.equals(this.cancellationReason, productOrder.cancellationReason)
+        && Objects.equals(this.category, productOrder.category)
+        && Objects.equals(this.completionDate, productOrder.completionDate)
+        && Objects.equals(this.description, productOrder.description)
+        && Objects.equals(this.expectedCompletionDate, productOrder.expectedCompletionDate)
+        && Objects.equals(this.externalId, productOrder.externalId)
+        && Objects.equals(this.notificationContact, productOrder.notificationContact)
+        && Objects.equals(this.orderDate, productOrder.orderDate)
+        && Objects.equals(this.priority, productOrder.priority)
+        && Objects.equals(this.requestedCompletionDate, productOrder.requestedCompletionDate)
+        && Objects.equals(this.requestedStartDate, productOrder.requestedStartDate)
+        && Objects.equals(this.agreement, productOrder.agreement)
+        && Objects.equals(this.billingAccount, productOrder.billingAccount)
+        && Objects.equals(this.channel, productOrder.channel)
+        && Objects.equals(this.note, productOrder.note)
+        && Objects.equals(this.orderTotalPrice, productOrder.orderTotalPrice)
+        && Objects.equals(this.payment, productOrder.payment)
+        && Objects.equals(this.productOfferingQualification,
+            productOrder.productOfferingQualification)
+        && Objects.equals(this.productOrderItem, productOrder.productOrderItem)
+        && Objects.equals(this.quote, productOrder.quote)
+        && Objects.equals(this.relatedParty, productOrder.relatedParty)
+        && Objects.equals(this.state, productOrder.state)
+        && Objects.equals(this.baseType, productOrder.baseType)
+        && Objects.equals(this.schemaLocation, productOrder.schemaLocation)
+        && Objects.equals(this.type, productOrder.type);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(id, href, cancellationDate, cancellationReason, category, completionDate, description, expectedCompletionDate, externalId, notificationContact, orderDate, priority, requestedCompletionDate, requestedStartDate, agreement, billingAccount, channel, note, orderTotalPrice, payment, productOfferingQualification, productOrderItem, quote, relatedParty, state, baseType, schemaLocation, type);
+    return Objects.hash(id, href, cancellationDate, cancellationReason, category, completionDate,
+        description, expectedCompletionDate, externalId, notificationContact, orderDate, priority,
+        requestedCompletionDate, requestedStartDate, agreement, billingAccount, channel, note,
+        orderTotalPrice, payment, productOfferingQualification, productOrderItem, quote,
+        relatedParty, state, baseType, schemaLocation, type);
   }
 
   @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append("class ProductOrder {\n");
-    
+
     sb.append("    id: ").append(toIndentedString(id)).append("\n");
     sb.append("    href: ").append(toIndentedString(href)).append("\n");
     sb.append("    cancellationDate: ").append(toIndentedString(cancellationDate)).append("\n");
@@ -800,12 +949,15 @@ public class ProductOrder   {
     sb.append("    category: ").append(toIndentedString(category)).append("\n");
     sb.append("    completionDate: ").append(toIndentedString(completionDate)).append("\n");
     sb.append("    description: ").append(toIndentedString(description)).append("\n");
-    sb.append("    expectedCompletionDate: ").append(toIndentedString(expectedCompletionDate)).append("\n");
+    sb.append("    expectedCompletionDate: ").append(toIndentedString(expectedCompletionDate))
+        .append("\n");
     sb.append("    externalId: ").append(toIndentedString(externalId)).append("\n");
-    sb.append("    notificationContact: ").append(toIndentedString(notificationContact)).append("\n");
+    sb.append("    notificationContact: ").append(toIndentedString(notificationContact))
+        .append("\n");
     sb.append("    orderDate: ").append(toIndentedString(orderDate)).append("\n");
     sb.append("    priority: ").append(toIndentedString(priority)).append("\n");
-    sb.append("    requestedCompletionDate: ").append(toIndentedString(requestedCompletionDate)).append("\n");
+    sb.append("    requestedCompletionDate: ").append(toIndentedString(requestedCompletionDate))
+        .append("\n");
     sb.append("    requestedStartDate: ").append(toIndentedString(requestedStartDate)).append("\n");
     sb.append("    agreement: ").append(toIndentedString(agreement)).append("\n");
     sb.append("    billingAccount: ").append(toIndentedString(billingAccount)).append("\n");
@@ -813,7 +965,8 @@ public class ProductOrder   {
     sb.append("    note: ").append(toIndentedString(note)).append("\n");
     sb.append("    orderTotalPrice: ").append(toIndentedString(orderTotalPrice)).append("\n");
     sb.append("    payment: ").append(toIndentedString(payment)).append("\n");
-    sb.append("    productOfferingQualification: ").append(toIndentedString(productOfferingQualification)).append("\n");
+    sb.append("    productOfferingQualification: ")
+        .append(toIndentedString(productOfferingQualification)).append("\n");
     sb.append("    productOrderItem: ").append(toIndentedString(productOrderItem)).append("\n");
     sb.append("    quote: ").append(toIndentedString(quote)).append("\n");
     sb.append("    relatedParty: ").append(toIndentedString(relatedParty)).append("\n");
@@ -826,8 +979,7 @@ public class ProductOrder   {
   }
 
   /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
+   * Convert the given object to string with each line indented by 4 spaces (except the first line).
    */
   private String toIndentedString(java.lang.Object o) {
     if (o == null) {
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEvent.java
index 84c8851a582b16709a0d522b01cbf2fdcdb8e641..b0c7a8e2b939d2fad839c21099e6d80458a23195 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEventPayload.java
index 28ebc7cf0a8888fc49274f2baddcc24155d71e10..e7cd65c1f0847d0e0ecf70c012e3468229969900 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderAttributeValueChangeEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreate.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreate.java
index 7da8d3d1b95b0772eff6aa965ef22305b6a10141..91b5fac072996972345ca8c0ea8edce69a82f25a 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreate.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreate.java
@@ -23,9 +23,9 @@ import java.time.OffsetDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.service.Note;
+import org.etsi.osl.tmf.pim637.model.BillingAccountRef;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -268,6 +268,14 @@ public class ProductOrderCreate   {
   public void setRequestedCompletionDate(OffsetDateTime requestedCompletionDate) {
     this.requestedCompletionDate = requestedCompletionDate;
   }
+  
+  public void setRequestedCompletionDate(String requestedCompletionDate) {
+
+    if (requestedCompletionDate!=null) {
+        this.requestedCompletionDate = OffsetDateTime.parse( requestedCompletionDate );
+        
+    }
+}
 
   public ProductOrderCreate requestedStartDate(OffsetDateTime requestedStartDate) {
     this.requestedStartDate = requestedStartDate;
@@ -288,6 +296,14 @@ public class ProductOrderCreate   {
   public void setRequestedStartDate(OffsetDateTime requestedStartDate) {
     this.requestedStartDate = requestedStartDate;
   }
+  
+  public void setRequestedStartDate(String requestedStartDate) {
+
+    if (requestedStartDate!=null) {
+        this.requestedStartDate = OffsetDateTime.parse( requestedStartDate );
+        
+    }
+}
 
   public ProductOrderCreate agreement(List<AgreementRef> agreement) {
     this.agreement = agreement;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEvent.java
index 4bbbc94ec5f7bc3ba9aed107aec04832793ef214..1e519b2ba9935467b208ed2f18acc212131f2140 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEventPayload.java
index f89b45db0ec823740a0bc988b02e50497b56bdc5..9dd985f1112da0bf1651d151d51d541166806a71 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderCreateEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEvent.java
index dd87d1c2594fba8e898da2403214a417ca8db98f..c434043b365717d0fcc9969e51a5bfbc87ea1572 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEventPayload.java
index 94de1d9401fe89347312f8f2c2dacf029dfcb130..474cdc8d9004d73053bbca2c555c19ffb51f492a 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderDeleteEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEvent.java
index 38a85af6c8b9818eea00504db1d7c9abaf391876..ab26a297734dc6675ec1720d50097f6f83a4d85e 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEventPayload.java
index 603295d4eb3468dba906c2eb5d27701a4f76da6e..d0743f12e1578e3506dd64077362c44f969be12e 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderInformationRequiredEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItem.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItem.java
index a2dcbb8d0562635acd83bc54fc289b228d4cb21b..96757731ce54fbf3a7ca1cd106f8a5cea7fbce8f 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItem.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItem.java
@@ -19,15 +19,22 @@
  */
 package org.etsi.osl.tmf.po622.model;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Objects;
-
+import java.util.Set;
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
+import org.etsi.osl.tmf.pcm620.model.ProductOfferingRef;
+import org.etsi.osl.tmf.pim637.model.BillingAccountRef;
+import org.etsi.osl.tmf.pim637.model.ProductRef;
+import org.etsi.osl.tmf.pim637.model.ProductRefOrValue;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.OneToOne;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 
@@ -37,7 +44,8 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "An identified part of the order. A product order is decomposed into one or more order items.")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductOrderItem   {
+@Entity(name = "POItem622")
+public class ProductOrderItem extends BaseRootEntity {
   @JsonProperty("id")
   private String id = null;
 
@@ -48,62 +56,73 @@ public class ProductOrderItem   {
   private OrderItemActionType action = null;
 
   @JsonProperty("appointment")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "appoint_refuuid", referencedColumnName = "uuid")
   private AppointmentRef appointment = null;
 
   @JsonProperty("billingAccount")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "billing_acc_refuuid", referencedColumnName = "uuid")
   private BillingAccountRef billingAccount = null;
 
   @JsonProperty("itemPrice")
   @Valid
-  private List<OrderPrice> itemPrice = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<OrderPrice> itemPrice = new HashSet<>();
 
   @JsonProperty("itemTerm")
   @Valid
-  private List<OrderTerm> itemTerm = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<OrderTerm> itemTerm = new HashSet<>();
 
   @JsonProperty("itemTotalPrice")
   @Valid
-  private List<OrderPrice> itemTotalPrice = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<OrderPrice> itemTotalPrice = new HashSet<>();
 
   @JsonProperty("payment")
   @Valid
-  private List<PaymentRef> payment = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<PaymentRef> payment = new HashSet<>();
 
   @JsonProperty("product")
-  private ProductRefOrValue product = null;
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "prod_refuuid", referencedColumnName = "uuid")
+  private ProductRef product = null;
 
   @JsonProperty("productOffering")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "prodoff_refuuid", referencedColumnName = "uuid")
   private ProductOfferingRef productOffering = null;
 
   @JsonProperty("productOfferingQualificationItem")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "prodoffqual_refuuid", referencedColumnName = "uuid")
   private ProductOfferingQualificationItemRef productOfferingQualificationItem = null;
 
   @JsonProperty("productOrderItem")
   @Valid
-  private List<ProductOrderItem> productOrderItem = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<ProductOrderItem> productOrderItem = new HashSet<>();
 
   @JsonProperty("productOrderItemRelationship")
   @Valid
-  private List<OrderItemRelationship> productOrderItemRelationship = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<OrderItemRelationship> productOrderItemRelationship = new HashSet<>();
 
   @JsonProperty("qualification")
   @Valid
-  private List<ProductOfferingQualificationRef> qualification = null;
+  @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
+  private Set<ProductOfferingQualificationRef> qualification = new HashSet<>();
 
   @JsonProperty("quoteItem")
+  @OneToOne(cascade = CascadeType.ALL)
+  @JoinColumn(name = "qitem_refuuid", referencedColumnName = "uuid")
   private QuoteItemRef quoteItem = null;
 
   @JsonProperty("state")
-  private ProductOrderItemStateType state = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
+  private ProductOrderItemStateType state = ProductOrderItemStateType.INITIAL;
 
-  @JsonProperty("@type")
-  private String type = null;
 
   public ProductOrderItem id(String id) {
     this.id = id;
@@ -205,14 +224,14 @@ public class ProductOrderItem   {
     this.billingAccount = billingAccount;
   }
 
-  public ProductOrderItem itemPrice(List<OrderPrice> itemPrice) {
+  public ProductOrderItem itemPrice(Set<OrderPrice> itemPrice) {
     this.itemPrice = itemPrice;
     return this;
   }
 
   public ProductOrderItem addItemPriceItem(OrderPrice itemPriceItem) {
     if (this.itemPrice == null) {
-      this.itemPrice = new ArrayList<>();
+      this.itemPrice = new HashSet<>();
     }
     this.itemPrice.add(itemPriceItem);
     return this;
@@ -224,22 +243,22 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<OrderPrice> getItemPrice() {
+    public Set<OrderPrice> getItemPrice() {
     return itemPrice;
   }
 
-  public void setItemPrice(List<OrderPrice> itemPrice) {
+  public void setItemPrice(Set<OrderPrice> itemPrice) {
     this.itemPrice = itemPrice;
   }
 
-  public ProductOrderItem itemTerm(List<OrderTerm> itemTerm) {
+  public ProductOrderItem itemTerm(Set<OrderTerm> itemTerm) {
     this.itemTerm = itemTerm;
     return this;
   }
 
   public ProductOrderItem addItemTermItem(OrderTerm itemTermItem) {
     if (this.itemTerm == null) {
-      this.itemTerm = new ArrayList<>();
+      this.itemTerm = new HashSet<>();
     }
     this.itemTerm.add(itemTermItem);
     return this;
@@ -251,22 +270,22 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<OrderTerm> getItemTerm() {
+    public Set<OrderTerm> getItemTerm() {
     return itemTerm;
   }
 
-  public void setItemTerm(List<OrderTerm> itemTerm) {
+  public void setItemTerm(Set<OrderTerm> itemTerm) {
     this.itemTerm = itemTerm;
   }
 
-  public ProductOrderItem itemTotalPrice(List<OrderPrice> itemTotalPrice) {
+  public ProductOrderItem itemTotalPrice(Set<OrderPrice> itemTotalPrice) {
     this.itemTotalPrice = itemTotalPrice;
     return this;
   }
 
   public ProductOrderItem addItemTotalPriceItem(OrderPrice itemTotalPriceItem) {
     if (this.itemTotalPrice == null) {
-      this.itemTotalPrice = new ArrayList<>();
+      this.itemTotalPrice = new HashSet<>();
     }
     this.itemTotalPrice.add(itemTotalPriceItem);
     return this;
@@ -278,22 +297,22 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<OrderPrice> getItemTotalPrice() {
+    public Set<OrderPrice> getItemTotalPrice() {
     return itemTotalPrice;
   }
 
-  public void setItemTotalPrice(List<OrderPrice> itemTotalPrice) {
+  public void setItemTotalPrice(Set<OrderPrice> itemTotalPrice) {
     this.itemTotalPrice = itemTotalPrice;
   }
 
-  public ProductOrderItem payment(List<PaymentRef> payment) {
+  public ProductOrderItem payment(Set<PaymentRef> payment) {
     this.payment = payment;
     return this;
   }
 
   public ProductOrderItem addPaymentItem(PaymentRef paymentItem) {
     if (this.payment == null) {
-      this.payment = new ArrayList<>();
+      this.payment = new HashSet<>();
     }
     this.payment.add(paymentItem);
     return this;
@@ -305,15 +324,15 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<PaymentRef> getPayment() {
+    public Set<PaymentRef> getPayment() {
     return payment;
   }
 
-  public void setPayment(List<PaymentRef> payment) {
+  public void setPayment(Set<PaymentRef> payment) {
     this.payment = payment;
   }
 
-  public ProductOrderItem product(ProductRefOrValue product) {
+  public ProductOrderItem product(ProductRef product) {
     this.product = product;
     return this;
   }
@@ -325,11 +344,11 @@ public class ProductOrderItem   {
   @Schema(description = "")
   
     @Valid
-    public ProductRefOrValue getProduct() {
+    public ProductRef getProduct() {
     return product;
   }
 
-  public void setProduct(ProductRefOrValue product) {
+  public void setProduct(ProductRef product) {
     this.product = product;
   }
 
@@ -373,14 +392,14 @@ public class ProductOrderItem   {
     this.productOfferingQualificationItem = productOfferingQualificationItem;
   }
 
-  public ProductOrderItem productOrderItem(List<ProductOrderItem> productOrderItem) {
+  public ProductOrderItem productOrderItem(Set<ProductOrderItem> productOrderItem) {
     this.productOrderItem = productOrderItem;
     return this;
   }
 
   public ProductOrderItem addProductOrderItemItem(ProductOrderItem productOrderItemItem) {
     if (this.productOrderItem == null) {
-      this.productOrderItem = new ArrayList<>();
+      this.productOrderItem = new HashSet<>();
     }
     this.productOrderItem.add(productOrderItemItem);
     return this;
@@ -392,22 +411,22 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<ProductOrderItem> getProductOrderItem() {
+    public Set<ProductOrderItem> getProductOrderItem() {
     return productOrderItem;
   }
 
-  public void setProductOrderItem(List<ProductOrderItem> productOrderItem) {
+  public void setProductOrderItem(Set<ProductOrderItem> productOrderItem) {
     this.productOrderItem = productOrderItem;
   }
 
-  public ProductOrderItem productOrderItemRelationship(List<OrderItemRelationship> productOrderItemRelationship) {
+  public ProductOrderItem productOrderItemRelationship(Set<OrderItemRelationship> productOrderItemRelationship) {
     this.productOrderItemRelationship = productOrderItemRelationship;
     return this;
   }
 
   public ProductOrderItem addProductOrderItemRelationshipItem(OrderItemRelationship productOrderItemRelationshipItem) {
     if (this.productOrderItemRelationship == null) {
-      this.productOrderItemRelationship = new ArrayList<>();
+      this.productOrderItemRelationship = new HashSet<>();
     }
     this.productOrderItemRelationship.add(productOrderItemRelationshipItem);
     return this;
@@ -419,22 +438,22 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<OrderItemRelationship> getProductOrderItemRelationship() {
+    public Set<OrderItemRelationship> getProductOrderItemRelationship() {
     return productOrderItemRelationship;
   }
 
-  public void setProductOrderItemRelationship(List<OrderItemRelationship> productOrderItemRelationship) {
+  public void setProductOrderItemRelationship(Set<OrderItemRelationship> productOrderItemRelationship) {
     this.productOrderItemRelationship = productOrderItemRelationship;
   }
 
-  public ProductOrderItem qualification(List<ProductOfferingQualificationRef> qualification) {
+  public ProductOrderItem qualification(Set<ProductOfferingQualificationRef> qualification) {
     this.qualification = qualification;
     return this;
   }
 
   public ProductOrderItem addQualificationItem(ProductOfferingQualificationRef qualificationItem) {
     if (this.qualification == null) {
-      this.qualification = new ArrayList<>();
+      this.qualification = new HashSet<>();
     }
     this.qualification.add(qualificationItem);
     return this;
@@ -446,11 +465,11 @@ public class ProductOrderItem   {
   **/
   @Schema(description = "")
       @Valid
-    public List<ProductOfferingQualificationRef> getQualification() {
+    public Set<ProductOfferingQualificationRef> getQualification() {
     return qualification;
   }
 
-  public void setQualification(List<ProductOfferingQualificationRef> qualification) {
+  public void setQualification(Set<ProductOfferingQualificationRef> qualification) {
     this.qualification = qualification;
   }
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItemStateType.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItemStateType.java
index 1fff283fd0a1aeb933020610f5adabe6b1e3ea56..423f489ce5d76d46502144de40759d02a69e927b 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItemStateType.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderItemStateType.java
@@ -26,16 +26,17 @@ import com.fasterxml.jackson.annotation.JsonValue;
  * Possible values for the state of the product order item
  */
 public enum ProductOrderItemStateType {
-  ACKNOWLEDGED("acknowledged"),
-    REJECTED("rejected"),
-    PENDING("pending"),
-    HELD("held"),
-    INPROGRESS("inProgress"),
-    CANCELLED("cancelled"),
-    COMPLETED("completed"),
-    FAILED("failed"),
-    ASSESSINGCANCELLATION("assessingCancellation"),
-    PENDINGCANCELLATION("pendingCancellation");
+  INITIAL("INITIAL"),
+  ACKNOWLEDGED("ACKNOWLEDGED"),
+    REJECTED("REJECTED"),
+    PENDING("PENDING"),
+    HELD("HELD"),
+    INPROGRESS("INPROGRESS"),
+    CANCELLED("CANCELLED"),
+    COMPLETED("COMPLETED"),
+    FAILED("FAILED"),
+    ASSESSINGCANCELLATION("ASSESSINGCANCELLATION"),
+    PENDINGCANCELLATION("PENDINGCANCELLATION");
 
   private String value;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderRef.java
index 3f9c0ebc819f15942017179da9d4f0832b4de5da..b6b0162b907fde895b09b21749f86cea7bca9cf2 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderRef.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEvent.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEvent.java
index 613e5c7d861858e5e1e5ccb22b6cdd8feffeac0c..68f304dc070281cc757183f5304ddb7ef99f7094 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEvent.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEvent.java
@@ -21,11 +21,8 @@ package org.etsi.osl.tmf.po622.model;
 
 import java.time.OffsetDateTime;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEventPayload.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEventPayload.java
index 3ca7b78837b469f4a93552919ec81a02123d7a7b..37e3b872a9bbfd79a36f3f0955a6f8ecf052fa55 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEventPayload.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateChangeEventPayload.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.Valid;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateType.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateType.java
index f6766150efc32f11df5816e670cc786786a5211b..dd26b1bc245f4ad34ba08a20a5b6622b51b5a0b0 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateType.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderStateType.java
@@ -26,17 +26,18 @@ import com.fasterxml.jackson.annotation.JsonValue;
  * Possible values for the state of the order
  */
 public enum ProductOrderStateType {
-  ACKNOWLEDGED("acknowledged"),
-    REJECTED("rejected"),
-    PENDING("pending"),
-    HELD("held"),
-    INPROGRESS("inProgress"),
-    CANCELLED("cancelled"),
-    COMPLETED("completed"),
-    FAILED("failed"),
-    PARTIAL("partial"),
-    ASSESSINGCANCELLATION("assessingCancellation"),
-    PENDINGCANCELLATION("pendingCancellation");
+  INITIAL("INITIAL"),
+  ACKNOWLEDGED("ACKNOWLEDGED"),
+    REJECTED("REJECTED"),
+    PENDING("PENDING"),
+    HELD("HELD"),
+    INPROGRESS("INPROGRESS"),
+    CANCELLED("CANCELLED"),
+    COMPLETED("COMPLETED"),
+    FAILED("FAILED"),
+    PARTIAL("PARTIAL"),
+    ASSESSINGCANCELLATION("ASSESSINGCANCELLATION"),
+    PENDINGCANCELLATION("PENDINGCANCELLATION");
 
   private String value;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderUpdate.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderUpdate.java
index ddef47a6244d23c6a0ea947b73a76637b3a8f965..2de1e005ae2f44e7ea158fae2d23f63a4237acc1 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderUpdate.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/ProductOrderUpdate.java
@@ -23,9 +23,9 @@ import java.time.OffsetDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.etsi.osl.tmf.common.model.service.Note;
+import org.etsi.osl.tmf.pim637.model.BillingAccountRef;
 import org.etsi.osl.tmf.prm669.model.RelatedParty;
 import org.springframework.validation.annotation.Validated;
 import io.swagger.v3.oas.annotations.media.Schema;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductPrice.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductPrice.java
deleted file mode 100644
index 58f6b58d781a484245c61ca0fb069e5b48133b01..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductPrice.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * An amount, usually of money, that represents the actual price paid by a Customer for a purchase, a rent or a lease of a Product. The price is valid for a defined period of time.
- */
-@Schema(description = "An amount, usually of money, that represents the actual price paid by a Customer for a purchase, a rent or a lease of a Product. The price is valid for a defined period of time.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductPrice   {
-  @JsonProperty("description")
-  private String description = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("priceType")
-  private String priceType = null;
-
-  @JsonProperty("recurringChargePeriod")
-  private String recurringChargePeriod = null;
-
-  @JsonProperty("unitOfMeasure")
-  private String unitOfMeasure = null;
-
-  @JsonProperty("billingAccount")
-  private BillingAccountRef billingAccount = null;
-
-  @JsonProperty("price")
-  private Price price = null;
-
-  @JsonProperty("productOfferingPrice")
-  private ProductOfferingPriceRef productOfferingPrice = null;
-
-  @JsonProperty("productPriceAlteration")
-  @Valid
-  private List<PriceAlteration> productPriceAlteration = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public ProductPrice description(String description) {
-    this.description = description;
-    return this;
-  }
-
-  /**
-   * A narrative that explains in detail the semantics of this product price.
-   * @return description
-  **/
-  @Schema(description = "A narrative that explains in detail the semantics of this product price.")
-  
-    public String getDescription() {
-    return description;
-  }
-
-  public void setDescription(String description) {
-    this.description = description;
-  }
-
-  public ProductPrice name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * A short descriptive name such as \"Subscription price\".
-   * @return name
-  **/
-  @Schema(description = "A short descriptive name such as \"Subscription price\".")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductPrice priceType(String priceType) {
-    this.priceType = priceType;
-    return this;
-  }
-
-  /**
-   * A category that describes the price, such as recurring, discount, allowance, penalty, and so forth.
-   * @return priceType
-  **/
-  @Schema(description = "A category that describes the price, such as recurring, discount, allowance, penalty, and so forth.")
-      @NotNull
-
-    public String getPriceType() {
-    return priceType;
-  }
-
-  public void setPriceType(String priceType) {
-    this.priceType = priceType;
-  }
-
-  public ProductPrice recurringChargePeriod(String recurringChargePeriod) {
-    this.recurringChargePeriod = recurringChargePeriod;
-    return this;
-  }
-
-  /**
-   * Could be month, week...
-   * @return recurringChargePeriod
-  **/
-  @Schema(description = "Could be month, week...")
-  
-    public String getRecurringChargePeriod() {
-    return recurringChargePeriod;
-  }
-
-  public void setRecurringChargePeriod(String recurringChargePeriod) {
-    this.recurringChargePeriod = recurringChargePeriod;
-  }
-
-  public ProductPrice unitOfMeasure(String unitOfMeasure) {
-    this.unitOfMeasure = unitOfMeasure;
-    return this;
-  }
-
-  /**
-   * Could be minutes, GB...
-   * @return unitOfMeasure
-  **/
-  @Schema(description = "Could be minutes, GB...")
-  
-    public String getUnitOfMeasure() {
-    return unitOfMeasure;
-  }
-
-  public void setUnitOfMeasure(String unitOfMeasure) {
-    this.unitOfMeasure = unitOfMeasure;
-  }
-
-  public ProductPrice billingAccount(BillingAccountRef billingAccount) {
-    this.billingAccount = billingAccount;
-    return this;
-  }
-
-  /**
-   * Get billingAccount
-   * @return billingAccount
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public BillingAccountRef getBillingAccount() {
-    return billingAccount;
-  }
-
-  public void setBillingAccount(BillingAccountRef billingAccount) {
-    this.billingAccount = billingAccount;
-  }
-
-  public ProductPrice price(Price price) {
-    this.price = price;
-    return this;
-  }
-
-  /**
-   * Get price
-   * @return price
-  **/
-  @Schema(description = "")
-      @NotNull
-
-    @Valid
-    public Price getPrice() {
-    return price;
-  }
-
-  public void setPrice(Price price) {
-    this.price = price;
-  }
-
-  public ProductPrice productOfferingPrice(ProductOfferingPriceRef productOfferingPrice) {
-    this.productOfferingPrice = productOfferingPrice;
-    return this;
-  }
-
-  /**
-   * Get productOfferingPrice
-   * @return productOfferingPrice
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductOfferingPriceRef getProductOfferingPrice() {
-    return productOfferingPrice;
-  }
-
-  public void setProductOfferingPrice(ProductOfferingPriceRef productOfferingPrice) {
-    this.productOfferingPrice = productOfferingPrice;
-  }
-
-  public ProductPrice productPriceAlteration(List<PriceAlteration> productPriceAlteration) {
-    this.productPriceAlteration = productPriceAlteration;
-    return this;
-  }
-
-  public ProductPrice addProductPriceAlterationItem(PriceAlteration productPriceAlterationItem) {
-    if (this.productPriceAlteration == null) {
-      this.productPriceAlteration = new ArrayList<>();
-    }
-    this.productPriceAlteration.add(productPriceAlterationItem);
-    return this;
-  }
-
-  /**
-   * Get productPriceAlteration
-   * @return productPriceAlteration
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<PriceAlteration> getProductPriceAlteration() {
-    return productPriceAlteration;
-  }
-
-  public void setProductPriceAlteration(List<PriceAlteration> productPriceAlteration) {
-    this.productPriceAlteration = productPriceAlteration;
-  }
-
-  public ProductPrice baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductPrice schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductPrice type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductPrice productPrice = (ProductPrice) o;
-    return Objects.equals(this.description, productPrice.description) &&
-        Objects.equals(this.name, productPrice.name) &&
-        Objects.equals(this.priceType, productPrice.priceType) &&
-        Objects.equals(this.recurringChargePeriod, productPrice.recurringChargePeriod) &&
-        Objects.equals(this.unitOfMeasure, productPrice.unitOfMeasure) &&
-        Objects.equals(this.billingAccount, productPrice.billingAccount) &&
-        Objects.equals(this.price, productPrice.price) &&
-        Objects.equals(this.productOfferingPrice, productPrice.productOfferingPrice) &&
-        Objects.equals(this.productPriceAlteration, productPrice.productPriceAlteration) &&
-        Objects.equals(this.baseType, productPrice.baseType) &&
-        Objects.equals(this.schemaLocation, productPrice.schemaLocation) &&
-        Objects.equals(this.type, productPrice.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(description, name, priceType, recurringChargePeriod, unitOfMeasure, billingAccount, price, productOfferingPrice, productPriceAlteration, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductPrice {\n");
-    
-    sb.append("    description: ").append(toIndentedString(description)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    priceType: ").append(toIndentedString(priceType)).append("\n");
-    sb.append("    recurringChargePeriod: ").append(toIndentedString(recurringChargePeriod)).append("\n");
-    sb.append("    unitOfMeasure: ").append(toIndentedString(unitOfMeasure)).append("\n");
-    sb.append("    billingAccount: ").append(toIndentedString(billingAccount)).append("\n");
-    sb.append("    price: ").append(toIndentedString(price)).append("\n");
-    sb.append("    productOfferingPrice: ").append(toIndentedString(productOfferingPrice)).append("\n");
-    sb.append("    productPriceAlteration: ").append(toIndentedString(productPriceAlteration)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductRef.java
deleted file mode 100644
index 92d6d9cd96796c22a37f4fd2ce577fb14806c7ff..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductRef.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * ProductRef
- */
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-  **/
-  @Schema(description = "Reference of the related entity.")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-  **/
-  @Schema(description = "Name of the related entity.")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductRef baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductRef schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductRef type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public ProductRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductRef productRef = (ProductRef) o;
-    return Objects.equals(this.id, productRef.id) &&
-        Objects.equals(this.href, productRef.href) &&
-        Objects.equals(this.name, productRef.name) &&
-        Objects.equals(this.baseType, productRef.baseType) &&
-        Objects.equals(this.schemaLocation, productRef.schemaLocation) &&
-        Objects.equals(this.type, productRef.type) &&
-        Objects.equals(this._atReferredType, productRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductRefOrValue.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductRefOrValue.java
deleted file mode 100644
index d4195004498a27fd5ebb3673ef96159897b0c344..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductRefOrValue.java
+++ /dev/null
@@ -1,881 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.time.OffsetDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.etsi.osl.tmf.common.model.service.Characteristic;
-import org.etsi.osl.tmf.common.model.service.ResourceRef;
-import org.etsi.osl.tmf.common.model.service.ServiceRef;
-import org.etsi.osl.tmf.prm669.model.RelatedParty;
-import org.springframework.validation.annotation.Validated;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-
-/**
- * A product to be created defined by value or existing defined by reference. The polymorphic attributes @type, @schemaLocation &amp; @referredType are related to the product entity and not the RelatedProductRefOrValue class itself
- */
-@Schema(description = "A product to be created defined by value or existing defined by reference. The polymorphic attributes @type, @schemaLocation & @referredType are related to the product entity and not the RelatedProductRefOrValue class itself")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductRefOrValue   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("description")
-  private String description = null;
-
-  @JsonProperty("isBundle")
-  private Boolean isBundle = null;
-
-  @JsonProperty("isCustomerVisible")
-  private Boolean isCustomerVisible = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("orderDate")
-  private OffsetDateTime orderDate = null;
-
-  @JsonProperty("productSerialNumber")
-  private String productSerialNumber = null;
-
-  @JsonProperty("startDate")
-  private OffsetDateTime startDate = null;
-
-  @JsonProperty("terminationDate")
-  private OffsetDateTime terminationDate = null;
-
-  @JsonProperty("agreement")
-  @Valid
-  private List<AgreementItemRef> agreement = null;
-
-  @JsonProperty("billingAccount")
-  private BillingAccountRef billingAccount = null;
-
-  @JsonProperty("place")
-  @Valid
-  private List<RelatedPlaceRefOrValue> place = null;
-
-  @JsonProperty("product")
-  @Valid
-  private List<ProductRefOrValue> product = null;
-
-  @JsonProperty("productCharacteristic")
-  @Valid
-  private List<Characteristic> productCharacteristic = null;
-
-  @JsonProperty("productOffering")
-  private ProductOfferingRef productOffering = null;
-
-  @JsonProperty("productOrderItem")
-  @Valid
-  private List<RelatedProductOrderItem> productOrderItem = null;
-
-  @JsonProperty("productPrice")
-  @Valid
-  private List<ProductPrice> productPrice = null;
-
-  @JsonProperty("productRelationship")
-  @Valid
-  private List<ProductRelationship> productRelationship = null;
-
-  @JsonProperty("productSpecification")
-  private ProductSpecificationRef productSpecification = null;
-
-  @JsonProperty("productTerm")
-  @Valid
-  private List<ProductTerm> productTerm = null;
-
-  @JsonProperty("realizingResource")
-  @Valid
-  private List<ResourceRef> realizingResource = null;
-
-  @JsonProperty("realizingService")
-  @Valid
-  private List<ServiceRef> realizingService = null;
-
-  @JsonProperty("relatedParty")
-  @Valid
-  private List<RelatedParty> relatedParty = null;
-
-  @JsonProperty("status")
-  private ProductStatusType status = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductRefOrValue id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the product
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the product")
-  
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductRefOrValue href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the product
-   * @return href
-  **/
-  @Schema(description = "Reference of the product")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductRefOrValue description(String description) {
-    this.description = description;
-    return this;
-  }
-
-  /**
-   * Is the description of the product. It could be copied from the description of the Product Offering.
-   * @return description
-  **/
-  @Schema(description = "Is the description of the product. It could be copied from the description of the Product Offering.")
-  
-    public String getDescription() {
-    return description;
-  }
-
-  public void setDescription(String description) {
-    this.description = description;
-  }
-
-  public ProductRefOrValue isBundle(Boolean isBundle) {
-    this.isBundle = isBundle;
-    return this;
-  }
-
-  /**
-   * If true, the product is a ProductBundle which is an instantiation of a BundledProductOffering. If false, the product is a ProductComponent which is an instantiation of a SimpleProductOffering.
-   * @return isBundle
-  **/
-  @Schema(description = "If true, the product is a ProductBundle which is an instantiation of a BundledProductOffering. If false, the product is a ProductComponent which is an instantiation of a SimpleProductOffering.")
-  
-    public Boolean isIsBundle() {
-    return isBundle;
-  }
-
-  public void setIsBundle(Boolean isBundle) {
-    this.isBundle = isBundle;
-  }
-
-  public ProductRefOrValue isCustomerVisible(Boolean isCustomerVisible) {
-    this.isCustomerVisible = isCustomerVisible;
-    return this;
-  }
-
-  /**
-   * If true, the product is visible by the customer.
-   * @return isCustomerVisible
-  **/
-  @Schema(description = "If true, the product is visible by the customer.")
-  
-    public Boolean isIsCustomerVisible() {
-    return isCustomerVisible;
-  }
-
-  public void setIsCustomerVisible(Boolean isCustomerVisible) {
-    this.isCustomerVisible = isCustomerVisible;
-  }
-
-  public ProductRefOrValue name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the product. It could be the same as the name of the product offering
-   * @return name
-  **/
-  @Schema(description = "Name of the product. It could be the same as the name of the product offering")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductRefOrValue orderDate(OffsetDateTime orderDate) {
-    this.orderDate = orderDate;
-    return this;
-  }
-
-  /**
-   * Is the date when the product was ordered
-   * @return orderDate
-  **/
-  @Schema(description = "Is the date when the product was ordered")
-  
-    @Valid
-    public OffsetDateTime getOrderDate() {
-    return orderDate;
-  }
-
-  public void setOrderDate(OffsetDateTime orderDate) {
-    this.orderDate = orderDate;
-  }
-
-  public ProductRefOrValue productSerialNumber(String productSerialNumber) {
-    this.productSerialNumber = productSerialNumber;
-    return this;
-  }
-
-  /**
-   * Is the serial number for the product. This is typically applicable to tangible products e.g. Broadband Router.
-   * @return productSerialNumber
-  **/
-  @Schema(description = "Is the serial number for the product. This is typically applicable to tangible products e.g. Broadband Router.")
-  
-    public String getProductSerialNumber() {
-    return productSerialNumber;
-  }
-
-  public void setProductSerialNumber(String productSerialNumber) {
-    this.productSerialNumber = productSerialNumber;
-  }
-
-  public ProductRefOrValue startDate(OffsetDateTime startDate) {
-    this.startDate = startDate;
-    return this;
-  }
-
-  /**
-   * Is the date from which the product starts
-   * @return startDate
-  **/
-  @Schema(description = "Is the date from which the product starts")
-  
-    @Valid
-    public OffsetDateTime getStartDate() {
-    return startDate;
-  }
-
-  public void setStartDate(OffsetDateTime startDate) {
-    this.startDate = startDate;
-  }
-
-  public ProductRefOrValue terminationDate(OffsetDateTime terminationDate) {
-    this.terminationDate = terminationDate;
-    return this;
-  }
-
-  /**
-   * Is the date when the product was terminated
-   * @return terminationDate
-  **/
-  @Schema(description = "Is the date when the product was terminated")
-  
-    @Valid
-    public OffsetDateTime getTerminationDate() {
-    return terminationDate;
-  }
-
-  public void setTerminationDate(OffsetDateTime terminationDate) {
-    this.terminationDate = terminationDate;
-  }
-
-  public ProductRefOrValue agreement(List<AgreementItemRef> agreement) {
-    this.agreement = agreement;
-    return this;
-  }
-
-  public ProductRefOrValue addAgreementItem(AgreementItemRef agreementItem) {
-    if (this.agreement == null) {
-      this.agreement = new ArrayList<>();
-    }
-    this.agreement.add(agreementItem);
-    return this;
-  }
-
-  /**
-   * Get agreement
-   * @return agreement
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<AgreementItemRef> getAgreement() {
-    return agreement;
-  }
-
-  public void setAgreement(List<AgreementItemRef> agreement) {
-    this.agreement = agreement;
-  }
-
-  public ProductRefOrValue billingAccount(BillingAccountRef billingAccount) {
-    this.billingAccount = billingAccount;
-    return this;
-  }
-
-  /**
-   * Get billingAccount
-   * @return billingAccount
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public BillingAccountRef getBillingAccount() {
-    return billingAccount;
-  }
-
-  public void setBillingAccount(BillingAccountRef billingAccount) {
-    this.billingAccount = billingAccount;
-  }
-
-  public ProductRefOrValue place(List<RelatedPlaceRefOrValue> place) {
-    this.place = place;
-    return this;
-  }
-
-  public ProductRefOrValue addPlaceItem(RelatedPlaceRefOrValue placeItem) {
-    if (this.place == null) {
-      this.place = new ArrayList<>();
-    }
-    this.place.add(placeItem);
-    return this;
-  }
-
-  /**
-   * Get place
-   * @return place
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<RelatedPlaceRefOrValue> getPlace() {
-    return place;
-  }
-
-  public void setPlace(List<RelatedPlaceRefOrValue> place) {
-    this.place = place;
-  }
-
-  public ProductRefOrValue product(List<ProductRefOrValue> product) {
-    this.product = product;
-    return this;
-  }
-
-  public ProductRefOrValue addProductItem(ProductRefOrValue productItem) {
-    if (this.product == null) {
-      this.product = new ArrayList<>();
-    }
-    this.product.add(productItem);
-    return this;
-  }
-
-  /**
-   * Get product
-   * @return product
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductRefOrValue> getProduct() {
-    return product;
-  }
-
-  public void setProduct(List<ProductRefOrValue> product) {
-    this.product = product;
-  }
-
-  public ProductRefOrValue productCharacteristic(List<Characteristic> productCharacteristic) {
-    this.productCharacteristic = productCharacteristic;
-    return this;
-  }
-
-  public ProductRefOrValue addProductCharacteristicItem(Characteristic productCharacteristicItem) {
-    if (this.productCharacteristic == null) {
-      this.productCharacteristic = new ArrayList<>();
-    }
-    this.productCharacteristic.add(productCharacteristicItem);
-    return this;
-  }
-
-  /**
-   * Get productCharacteristic
-   * @return productCharacteristic
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<Characteristic> getProductCharacteristic() {
-    return productCharacteristic;
-  }
-
-  public void setProductCharacteristic(List<Characteristic> productCharacteristic) {
-    this.productCharacteristic = productCharacteristic;
-  }
-
-  public ProductRefOrValue productOffering(ProductOfferingRef productOffering) {
-    this.productOffering = productOffering;
-    return this;
-  }
-
-  /**
-   * Get productOffering
-   * @return productOffering
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductOfferingRef getProductOffering() {
-    return productOffering;
-  }
-
-  public void setProductOffering(ProductOfferingRef productOffering) {
-    this.productOffering = productOffering;
-  }
-
-  public ProductRefOrValue productOrderItem(List<RelatedProductOrderItem> productOrderItem) {
-    this.productOrderItem = productOrderItem;
-    return this;
-  }
-
-  public ProductRefOrValue addProductOrderItemItem(RelatedProductOrderItem productOrderItemItem) {
-    if (this.productOrderItem == null) {
-      this.productOrderItem = new ArrayList<>();
-    }
-    this.productOrderItem.add(productOrderItemItem);
-    return this;
-  }
-
-  /**
-   * Get productOrderItem
-   * @return productOrderItem
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<RelatedProductOrderItem> getProductOrderItem() {
-    return productOrderItem;
-  }
-
-  public void setProductOrderItem(List<RelatedProductOrderItem> productOrderItem) {
-    this.productOrderItem = productOrderItem;
-  }
-
-  public ProductRefOrValue productPrice(List<ProductPrice> productPrice) {
-    this.productPrice = productPrice;
-    return this;
-  }
-
-  public ProductRefOrValue addProductPriceItem(ProductPrice productPriceItem) {
-    if (this.productPrice == null) {
-      this.productPrice = new ArrayList<>();
-    }
-    this.productPrice.add(productPriceItem);
-    return this;
-  }
-
-  /**
-   * Get productPrice
-   * @return productPrice
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductPrice> getProductPrice() {
-    return productPrice;
-  }
-
-  public void setProductPrice(List<ProductPrice> productPrice) {
-    this.productPrice = productPrice;
-  }
-
-  public ProductRefOrValue productRelationship(List<ProductRelationship> productRelationship) {
-    this.productRelationship = productRelationship;
-    return this;
-  }
-
-  public ProductRefOrValue addProductRelationshipItem(ProductRelationship productRelationshipItem) {
-    if (this.productRelationship == null) {
-      this.productRelationship = new ArrayList<>();
-    }
-    this.productRelationship.add(productRelationshipItem);
-    return this;
-  }
-
-  /**
-   * Get productRelationship
-   * @return productRelationship
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductRelationship> getProductRelationship() {
-    return productRelationship;
-  }
-
-  public void setProductRelationship(List<ProductRelationship> productRelationship) {
-    this.productRelationship = productRelationship;
-  }
-
-  public ProductRefOrValue productSpecification(ProductSpecificationRef productSpecification) {
-    this.productSpecification = productSpecification;
-    return this;
-  }
-
-  /**
-   * Get productSpecification
-   * @return productSpecification
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductSpecificationRef getProductSpecification() {
-    return productSpecification;
-  }
-
-  public void setProductSpecification(ProductSpecificationRef productSpecification) {
-    this.productSpecification = productSpecification;
-  }
-
-  public ProductRefOrValue productTerm(List<ProductTerm> productTerm) {
-    this.productTerm = productTerm;
-    return this;
-  }
-
-  public ProductRefOrValue addProductTermItem(ProductTerm productTermItem) {
-    if (this.productTerm == null) {
-      this.productTerm = new ArrayList<>();
-    }
-    this.productTerm.add(productTermItem);
-    return this;
-  }
-
-  /**
-   * Get productTerm
-   * @return productTerm
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ProductTerm> getProductTerm() {
-    return productTerm;
-  }
-
-  public void setProductTerm(List<ProductTerm> productTerm) {
-    this.productTerm = productTerm;
-  }
-
-  public ProductRefOrValue realizingResource(List<ResourceRef> realizingResource) {
-    this.realizingResource = realizingResource;
-    return this;
-  }
-
-  public ProductRefOrValue addRealizingResourceItem(ResourceRef realizingResourceItem) {
-    if (this.realizingResource == null) {
-      this.realizingResource = new ArrayList<>();
-    }
-    this.realizingResource.add(realizingResourceItem);
-    return this;
-  }
-
-  /**
-   * Get realizingResource
-   * @return realizingResource
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ResourceRef> getRealizingResource() {
-    return realizingResource;
-  }
-
-  public void setRealizingResource(List<ResourceRef> realizingResource) {
-    this.realizingResource = realizingResource;
-  }
-
-  public ProductRefOrValue realizingService(List<ServiceRef> realizingService) {
-    this.realizingService = realizingService;
-    return this;
-  }
-
-  public ProductRefOrValue addRealizingServiceItem(ServiceRef realizingServiceItem) {
-    if (this.realizingService == null) {
-      this.realizingService = new ArrayList<>();
-    }
-    this.realizingService.add(realizingServiceItem);
-    return this;
-  }
-
-  /**
-   * Get realizingService
-   * @return realizingService
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<ServiceRef> getRealizingService() {
-    return realizingService;
-  }
-
-  public void setRealizingService(List<ServiceRef> realizingService) {
-    this.realizingService = realizingService;
-  }
-
-  public ProductRefOrValue relatedParty(List<RelatedParty> relatedParty) {
-    this.relatedParty = relatedParty;
-    return this;
-  }
-
-  public ProductRefOrValue addRelatedPartyItem(RelatedParty relatedPartyItem) {
-    if (this.relatedParty == null) {
-      this.relatedParty = new ArrayList<>();
-    }
-    this.relatedParty.add(relatedPartyItem);
-    return this;
-  }
-
-  /**
-   * Get relatedParty
-   * @return relatedParty
-  **/
-  @Schema(description = "")
-      @Valid
-    public List<RelatedParty> getRelatedParty() {
-    return relatedParty;
-  }
-
-  public void setRelatedParty(List<RelatedParty> relatedParty) {
-    this.relatedParty = relatedParty;
-  }
-
-  public ProductRefOrValue status(ProductStatusType status) {
-    this.status = status;
-    return this;
-  }
-
-  /**
-   * Get status
-   * @return status
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public ProductStatusType getStatus() {
-    return status;
-  }
-
-  public void setStatus(ProductStatusType status) {
-    this.status = status;
-  }
-
-  public ProductRefOrValue baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductRefOrValue schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductRefOrValue type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public ProductRefOrValue _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductRefOrValue productRefOrValue = (ProductRefOrValue) o;
-    return Objects.equals(this.id, productRefOrValue.id) &&
-        Objects.equals(this.href, productRefOrValue.href) &&
-        Objects.equals(this.description, productRefOrValue.description) &&
-        Objects.equals(this.isBundle, productRefOrValue.isBundle) &&
-        Objects.equals(this.isCustomerVisible, productRefOrValue.isCustomerVisible) &&
-        Objects.equals(this.name, productRefOrValue.name) &&
-        Objects.equals(this.orderDate, productRefOrValue.orderDate) &&
-        Objects.equals(this.productSerialNumber, productRefOrValue.productSerialNumber) &&
-        Objects.equals(this.startDate, productRefOrValue.startDate) &&
-        Objects.equals(this.terminationDate, productRefOrValue.terminationDate) &&
-        Objects.equals(this.agreement, productRefOrValue.agreement) &&
-        Objects.equals(this.billingAccount, productRefOrValue.billingAccount) &&
-        Objects.equals(this.place, productRefOrValue.place) &&
-        Objects.equals(this.product, productRefOrValue.product) &&
-        Objects.equals(this.productCharacteristic, productRefOrValue.productCharacteristic) &&
-        Objects.equals(this.productOffering, productRefOrValue.productOffering) &&
-        Objects.equals(this.productOrderItem, productRefOrValue.productOrderItem) &&
-        Objects.equals(this.productPrice, productRefOrValue.productPrice) &&
-        Objects.equals(this.productRelationship, productRefOrValue.productRelationship) &&
-        Objects.equals(this.productSpecification, productRefOrValue.productSpecification) &&
-        Objects.equals(this.productTerm, productRefOrValue.productTerm) &&
-        Objects.equals(this.realizingResource, productRefOrValue.realizingResource) &&
-        Objects.equals(this.realizingService, productRefOrValue.realizingService) &&
-        Objects.equals(this.relatedParty, productRefOrValue.relatedParty) &&
-        Objects.equals(this.status, productRefOrValue.status) &&
-        Objects.equals(this.baseType, productRefOrValue.baseType) &&
-        Objects.equals(this.schemaLocation, productRefOrValue.schemaLocation) &&
-        Objects.equals(this.type, productRefOrValue.type) &&
-        Objects.equals(this._atReferredType, productRefOrValue._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, description, isBundle, isCustomerVisible, name, orderDate, productSerialNumber, startDate, terminationDate, agreement, billingAccount, place, product, productCharacteristic, productOffering, productOrderItem, productPrice, productRelationship, productSpecification, productTerm, realizingResource, realizingService, relatedParty, status, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductRefOrValue {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    description: ").append(toIndentedString(description)).append("\n");
-    sb.append("    isBundle: ").append(toIndentedString(isBundle)).append("\n");
-    sb.append("    isCustomerVisible: ").append(toIndentedString(isCustomerVisible)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    orderDate: ").append(toIndentedString(orderDate)).append("\n");
-    sb.append("    productSerialNumber: ").append(toIndentedString(productSerialNumber)).append("\n");
-    sb.append("    startDate: ").append(toIndentedString(startDate)).append("\n");
-    sb.append("    terminationDate: ").append(toIndentedString(terminationDate)).append("\n");
-    sb.append("    agreement: ").append(toIndentedString(agreement)).append("\n");
-    sb.append("    billingAccount: ").append(toIndentedString(billingAccount)).append("\n");
-    sb.append("    place: ").append(toIndentedString(place)).append("\n");
-    sb.append("    product: ").append(toIndentedString(product)).append("\n");
-    sb.append("    productCharacteristic: ").append(toIndentedString(productCharacteristic)).append("\n");
-    sb.append("    productOffering: ").append(toIndentedString(productOffering)).append("\n");
-    sb.append("    productOrderItem: ").append(toIndentedString(productOrderItem)).append("\n");
-    sb.append("    productPrice: ").append(toIndentedString(productPrice)).append("\n");
-    sb.append("    productRelationship: ").append(toIndentedString(productRelationship)).append("\n");
-    sb.append("    productSpecification: ").append(toIndentedString(productSpecification)).append("\n");
-    sb.append("    productTerm: ").append(toIndentedString(productTerm)).append("\n");
-    sb.append("    realizingResource: ").append(toIndentedString(realizingResource)).append("\n");
-    sb.append("    realizingService: ").append(toIndentedString(realizingService)).append("\n");
-    sb.append("    relatedParty: ").append(toIndentedString(relatedParty)).append("\n");
-    sb.append("    status: ").append(toIndentedString(status)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductRelationship.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductRelationship.java
deleted file mode 100644
index 309c363c0e25411a3456f91e810dce8a6c05eead..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductRelationship.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * Linked products to the one instantiate, such as [bundled] if the product is a bundle and you want to describe the bundled products inside this bundle; [reliesOn] if the product needs another already owned product to rely on (e.g. an option on an already owned mobile access product) [targets] or [isTargeted] (depending on the way of expressing the link) for any other kind of links that may be useful
- */
-@Schema(description = "Linked products to the one instantiate, such as [bundled] if the product is a bundle and you want to describe the bundled products inside this bundle; [reliesOn] if the product needs another already owned product to rely on (e.g. an option on an already owned mobile access product) [targets] or [isTargeted] (depending on the way of expressing the link) for any other kind of links that may be useful")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductRelationship   {
-  @JsonProperty("relationshipType")
-  private String relationshipType = null;
-
-  @JsonProperty("product")
-  private ProductRefOrValue product = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public ProductRelationship relationshipType(String relationshipType) {
-    this.relationshipType = relationshipType;
-    return this;
-  }
-
-  /**
-   * Type of the product relationship, such as [bundled] if the product is a bundle and you want to describe the bundled products inside this bundle; [reliesOn] if the product needs another already owned product to rely on (e.g. an option on an already owned mobile access product) [targets] or [isTargeted] (depending on the way of expressing the link) for any other kind of links that may be useful
-   * @return relationshipType
-  **/
-  @Schema(description = "Type of the product relationship, such as [bundled] if the product is a bundle and you want to describe the bundled products inside this bundle; [reliesOn] if the product needs another already owned product to rely on (e.g. an option on an already owned mobile access product) [targets] or [isTargeted] (depending on the way of expressing the link) for any other kind of links that may be useful")
-      @NotNull
-
-    public String getRelationshipType() {
-    return relationshipType;
-  }
-
-  public void setRelationshipType(String relationshipType) {
-    this.relationshipType = relationshipType;
-  }
-
-  public ProductRelationship product(ProductRefOrValue product) {
-    this.product = product;
-    return this;
-  }
-
-  /**
-   * Get product
-   * @return product
-  **/
-  @Schema(description = "")
-      @NotNull
-
-    @Valid
-    public ProductRefOrValue getProduct() {
-    return product;
-  }
-
-  public void setProduct(ProductRefOrValue product) {
-    this.product = product;
-  }
-
-  public ProductRelationship baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductRelationship schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductRelationship type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductRelationship productRelationship = (ProductRelationship) o;
-    return Objects.equals(this.relationshipType, productRelationship.relationshipType) &&
-        Objects.equals(this.product, productRelationship.product) &&
-        Objects.equals(this.baseType, productRelationship.baseType) &&
-        Objects.equals(this.schemaLocation, productRelationship.schemaLocation) &&
-        Objects.equals(this.type, productRelationship.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(relationshipType, product, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductRelationship {\n");
-    
-    sb.append("    relationshipType: ").append(toIndentedString(relationshipType)).append("\n");
-    sb.append("    product: ").append(toIndentedString(product)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductSpecificationRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductSpecificationRef.java
deleted file mode 100644
index 02b30f6eabf04b7f5d1bc2ca9f68285d6f25a260..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductSpecificationRef.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * Product specification reference: A ProductSpecification is a detailed description of a tangible or intangible object made available externally in the form of a ProductOffering to customers or other parties playing a party role.
- */
-@Schema(description = "Product specification reference: A ProductSpecification is a detailed description of a tangible or intangible object made available externally in the form of a ProductOffering to customers or other parties playing a party role.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductSpecificationRef   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("version")
-  private String version = null;
-
-  @JsonProperty("targetProductSchema")
-  private TargetProductSchema targetProductSchema = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductSpecificationRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of a related entity.
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of a related entity.")
-      @NotNull
-
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductSpecificationRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the related entity.
-   * @return href
-  **/
-  @Schema(description = "Reference of the related entity.")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductSpecificationRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the related entity.
-   * @return name
-  **/
-  @Schema(description = "Name of the related entity.")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductSpecificationRef version(String version) {
-    this.version = version;
-    return this;
-  }
-
-  /**
-   * Version of the product specification
-   * @return version
-  **/
-  @Schema(description = "Version of the product specification")
-  
-    public String getVersion() {
-    return version;
-  }
-
-  public void setVersion(String version) {
-    this.version = version;
-  }
-
-  public ProductSpecificationRef targetProductSchema(TargetProductSchema targetProductSchema) {
-    this.targetProductSchema = targetProductSchema;
-    return this;
-  }
-
-  /**
-   * Get targetProductSchema
-   * @return targetProductSchema
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public TargetProductSchema getTargetProductSchema() {
-    return targetProductSchema;
-  }
-
-  public void setTargetProductSchema(TargetProductSchema targetProductSchema) {
-    this.targetProductSchema = targetProductSchema;
-  }
-
-  public ProductSpecificationRef baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductSpecificationRef schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductSpecificationRef type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public ProductSpecificationRef _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductSpecificationRef productSpecificationRef = (ProductSpecificationRef) o;
-    return Objects.equals(this.id, productSpecificationRef.id) &&
-        Objects.equals(this.href, productSpecificationRef.href) &&
-        Objects.equals(this.name, productSpecificationRef.name) &&
-        Objects.equals(this.version, productSpecificationRef.version) &&
-        Objects.equals(this.targetProductSchema, productSpecificationRef.targetProductSchema) &&
-        Objects.equals(this.baseType, productSpecificationRef.baseType) &&
-        Objects.equals(this.schemaLocation, productSpecificationRef.schemaLocation) &&
-        Objects.equals(this.type, productSpecificationRef.type) &&
-        Objects.equals(this._atReferredType, productSpecificationRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, version, targetProductSchema, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductSpecificationRef {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    version: ").append(toIndentedString(version)).append("\n");
-    sb.append("    targetProductSchema: ").append(toIndentedString(targetProductSchema)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductStatusType.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductStatusType.java
deleted file mode 100644
index a5717e066d0c3717710f46a6e3990c226d98c1c4..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductStatusType.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonValue;
-
-/**
- * Possible values for the status of the product
- */
-public enum ProductStatusType {
-  CREATED("created"),
-    PENDINGACTIVE("pendingActive"),
-    CANCELLED("cancelled"),
-    ACTIVE("active"),
-    PENDINGTERMINATE("pendingTerminate"),
-    TERMINATED("terminated"),
-    SUSPENDED("suspended"),
-    ABORTED_("aborted ");
-
-  private String value;
-
-  ProductStatusType(String value) {
-    this.value = value;
-  }
-
-  @Override
-  @JsonValue
-  public String toString() {
-    return String.valueOf(value);
-  }
-
-  @JsonCreator
-  public static ProductStatusType fromValue(String text) {
-    for (ProductStatusType b : ProductStatusType.values()) {
-      if (String.valueOf(b.value).equals(text)) {
-        return b;
-      }
-    }
-    return null;
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/ProductTerm.java b/src/main/java/org/etsi/osl/tmf/po622/model/ProductTerm.java
deleted file mode 100644
index b43c08941c5fb2b816d01bad7edbc5b845e2edd5..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/ProductTerm.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.etsi.osl.tmf.common.model.Quantity;
-import org.etsi.osl.tmf.common.model.TimePeriod;
-import org.springframework.validation.annotation.Validated;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.Valid;
-
-/**
- * Description of a productTerm linked to this product. This represent a commitment with a duration
- */
-@Schema(description = "Description of a productTerm linked to this product. This represent a commitment with a duration")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class ProductTerm   {
-  @JsonProperty("description")
-  private String description = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("duration")
-  private Quantity duration = null;
-
-  @JsonProperty("validFor")
-  private TimePeriod validFor = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public ProductTerm description(String description) {
-    this.description = description;
-    return this;
-  }
-
-  /**
-   * Description of the productTerm
-   * @return description
-  **/
-  @Schema(description = "Description of the productTerm")
-  
-    public String getDescription() {
-    return description;
-  }
-
-  public void setDescription(String description) {
-    this.description = description;
-  }
-
-  public ProductTerm name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the productTerm
-   * @return name
-  **/
-  @Schema(description = "Name of the productTerm")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public ProductTerm duration(Quantity duration) {
-    this.duration = duration;
-    return this;
-  }
-
-  /**
-   * Get duration
-   * @return duration
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public Quantity getDuration() {
-    return duration;
-  }
-
-  public void setDuration(Quantity duration) {
-    this.duration = duration;
-  }
-
-  public ProductTerm validFor(TimePeriod validFor) {
-    this.validFor = validFor;
-    return this;
-  }
-
-  /**
-   * Get validFor
-   * @return validFor
-  **/
-  @Schema(description = "")
-  
-    @Valid
-    public TimePeriod getValidFor() {
-    return validFor;
-  }
-
-  public void setValidFor(TimePeriod validFor) {
-    this.validFor = validFor;
-  }
-
-  public ProductTerm baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public ProductTerm schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public ProductTerm type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductTerm productTerm = (ProductTerm) o;
-    return Objects.equals(this.description, productTerm.description) &&
-        Objects.equals(this.name, productTerm.name) &&
-        Objects.equals(this.duration, productTerm.duration) &&
-        Objects.equals(this.validFor, productTerm.validFor) &&
-        Objects.equals(this.baseType, productTerm.baseType) &&
-        Objects.equals(this.schemaLocation, productTerm.schemaLocation) &&
-        Objects.equals(this.type, productTerm.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(description, name, duration, validFor, baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductTerm {\n");
-    
-    sb.append("    description: ").append(toIndentedString(description)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    duration: ").append(toIndentedString(duration)).append("\n");
-    sb.append("    validFor: ").append(toIndentedString(validFor)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/QuoteItemRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/QuoteItemRef.java
index 9ce513c9081d879f26f86c1967208918a531ed3b..7b9a91ff67cee82931009a20d4c0048b5b0a095a 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/QuoteItemRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/QuoteItemRef.java
@@ -20,12 +20,11 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,16 +33,11 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "It's a Quote item that has been executed previously.")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class QuoteItemRef   {
+@Entity(name = "QuoteItRef622")
+public class QuoteItemRef  extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
   @JsonProperty("quoteHref")
   private String quoteHref = null;
 
@@ -53,14 +47,6 @@ public class QuoteItemRef   {
   @JsonProperty("quoteName")
   private String quoteName = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/QuoteRef.java b/src/main/java/org/etsi/osl/tmf/po622/model/QuoteRef.java
index 39278ba46f5f8c0cb72b4a6e597ced2a8c61dd7d..563306e92fcb94eb12e35b2d9a76f243e24077eb 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/QuoteRef.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/QuoteRef.java
@@ -20,12 +20,11 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,24 +33,11 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "It's a Quote that has been executed previously")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class QuoteRef   {
+@Entity(name = "QuoteRef622")
+public class QuoteRef    extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/RelatedChannel.java b/src/main/java/org/etsi/osl/tmf/po622/model/RelatedChannel.java
index 6b824312249222904d660bb018a256b11e020f9d..e56f90707d0699cf525fffbc0db2cd5332ad4d5c 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/RelatedChannel.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/RelatedChannel.java
@@ -20,12 +20,12 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
+import org.etsi.osl.tmf.common.model.BaseRootEntity;
+import org.etsi.osl.tmf.common.model.BaseRootNamedEntity;
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Entity;
 import jakarta.validation.constraints.NotNull;
 
 /**
@@ -34,27 +34,15 @@ import jakarta.validation.constraints.NotNull;
 @Schema(description = "Related channel to another entity. May be online web, mobile app, social ,etc.")
 @Validated
 @jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class RelatedChannel   {
+@Entity(name = "RelatedChan622")
+public class RelatedChannel extends BaseRootNamedEntity {
   @JsonProperty("id")
   private String id = null;
 
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
 
   @JsonProperty("role")
   private String role = null;
 
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
 
   @JsonProperty("@referredType")
   private String _atReferredType = null;
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/RelatedPlaceRefOrValue.java b/src/main/java/org/etsi/osl/tmf/po622/model/RelatedPlaceRefOrValue.java
deleted file mode 100644
index 36ef6140ce63b69f063dac3326baf0fc4e330319..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/RelatedPlaceRefOrValue.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * Related Entity reference. A related place defines a place described by reference or by value linked to a specific entity. The polymorphic attributes @type, @schemaLocation &amp; @referredType are related to the place entity and not the RelatedPlaceRefOrValue class itself
- */
-@Schema(description = "Related Entity reference. A related place defines a place described by reference or by value linked to a specific entity. The polymorphic attributes @type, @schemaLocation & @referredType are related to the place entity and not the RelatedPlaceRefOrValue class itself")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class RelatedPlaceRefOrValue   {
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-  @JsonProperty("role")
-  private String role = null;
-
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public RelatedPlaceRefOrValue id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the place
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the place")
-  
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public RelatedPlaceRefOrValue href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Unique reference of the place
-   * @return href
-  **/
-  @Schema(description = "Unique reference of the place")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public RelatedPlaceRefOrValue name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * A user-friendly name for the place, such as [Paris Store], [London Store], [Main Home]
-   * @return name
-  **/
-  @Schema(description = "A user-friendly name for the place, such as [Paris Store], [London Store], [Main Home]")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public RelatedPlaceRefOrValue role(String role) {
-    this.role = role;
-    return this;
-  }
-
-  /**
-   * Get role
-   * @return role
-  **/
-  @Schema(description = "")
-      @NotNull
-
-    public String getRole() {
-    return role;
-  }
-
-  public void setRole(String role) {
-    this.role = role;
-  }
-
-  public RelatedPlaceRefOrValue baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public RelatedPlaceRefOrValue schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * A URI to a JSON-Schema file that defines additional attributes and relationships
-   * @return schemaLocation
-  **/
-  @Schema(description = "A URI to a JSON-Schema file that defines additional attributes and relationships")
-  
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public RelatedPlaceRefOrValue type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the sub-class entity name
-   * @return type
-  **/
-  @Schema(description = "When sub-classing, this defines the sub-class entity name")
-  
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-  public RelatedPlaceRefOrValue _atReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-    return this;
-  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    RelatedPlaceRefOrValue relatedPlaceRefOrValue = (RelatedPlaceRefOrValue) o;
-    return Objects.equals(this.id, relatedPlaceRefOrValue.id) &&
-        Objects.equals(this.href, relatedPlaceRefOrValue.href) &&
-        Objects.equals(this.name, relatedPlaceRefOrValue.name) &&
-        Objects.equals(this.role, relatedPlaceRefOrValue.role) &&
-        Objects.equals(this.baseType, relatedPlaceRefOrValue.baseType) &&
-        Objects.equals(this.schemaLocation, relatedPlaceRefOrValue.schemaLocation) &&
-        Objects.equals(this.type, relatedPlaceRefOrValue.type) &&
-        Objects.equals(this._atReferredType, relatedPlaceRefOrValue._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(id, href, name, role, baseType, schemaLocation, type, _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class RelatedPlaceRefOrValue {\n");
-    
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    role: ").append(toIndentedString(role)).append("\n");
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/RelatedProductOrderItem.java b/src/main/java/org/etsi/osl/tmf/po622/model/RelatedProductOrderItem.java
index f9e567e8288d6ab697c2380384911d1a282ed784..a265d9c72c2f03c54b8c8c4a3ac62833504f03a4 100644
--- a/src/main/java/org/etsi/osl/tmf/po622/model/RelatedProductOrderItem.java
+++ b/src/main/java/org/etsi/osl/tmf/po622/model/RelatedProductOrderItem.java
@@ -20,11 +20,8 @@
 package org.etsi.osl.tmf.po622.model;
 
 import java.util.Objects;
-
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.springframework.validation.annotation.Validated;
-
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 
diff --git a/src/main/java/org/etsi/osl/tmf/po622/model/TargetProductSchema.java b/src/main/java/org/etsi/osl/tmf/po622/model/TargetProductSchema.java
deleted file mode 100644
index 34205af02aa50605d33c1a173787219687bb3af8..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/po622/model/TargetProductSchema.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*-
- * ========================LICENSE_START=================================
- * org.etsi.osl.tmf.api
- * %%
- * Copyright (C) 2019 - 2021 openslice.io
- * %%
- * Licensed 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.
- * =========================LICENSE_END==================================
- */
-package org.etsi.osl.tmf.po622.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-
-/**
- * The reference object to the schema and type of target product which is described by product specification
- */
-@Schema(description = "The reference object to the schema and type of target product which is described by product specification")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-10-30T10:29:21.184964400+02:00[Europe/Athens]")
-public class TargetProductSchema   {
-  @JsonProperty("@baseType")
-  private String baseType = null;
-
-  @JsonProperty("@schemaLocation")
-  private String schemaLocation = null;
-
-  @JsonProperty("@type")
-  private String type = null;
-
-  public TargetProductSchema baseType(String baseType) {
-    this.baseType = baseType;
-    return this;
-  }
-
-  /**
-   * When sub-classing, this defines the super-class
-   * @return baseType
-  **/
-  @Schema(description = "When sub-classing, this defines the super-class")
-  
-    public String getAtBaseType() {
-    return baseType;
-  }
-
-  public void setAtBaseType(String baseType) {
-    this.baseType = baseType;
-  }
-
-  public TargetProductSchema schemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-    return this;
-  }
-
-  /**
-   * This field provides a link to the schema describing the target product
-   * @return schemaLocation
-  **/
-  @Schema(description = "This field provides a link to the schema describing the target product")
-      @NotNull
-
-    public String getAtSchemaLocation() {
-    return schemaLocation;
-  }
-
-  public void setAtSchemaLocation(String schemaLocation) {
-    this.schemaLocation = schemaLocation;
-  }
-
-  public TargetProductSchema type(String type) {
-    this.type = type;
-    return this;
-  }
-
-  /**
-   * Class type of the target product
-   * @return type
-  **/
-  @Schema(description = "Class type of the target product")
-      @NotNull
-
-    public String getAtType() {
-    return type;
-  }
-
-  public void setAtType(String type) {
-    this.type = type;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    TargetProductSchema targetProductSchema = (TargetProductSchema) o;
-    return Objects.equals(this.baseType, targetProductSchema.baseType) &&
-        Objects.equals(this.schemaLocation, targetProductSchema.schemaLocation) &&
-        Objects.equals(this.type, targetProductSchema.type);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(baseType, schemaLocation, type);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class TargetProductSchema {\n");
-    
-    sb.append("    baseType: ").append(toIndentedString(baseType)).append("\n");
-    sb.append("    schemaLocation: ").append(toIndentedString(schemaLocation)).append("\n");
-    sb.append("    type: ").append(toIndentedString(type)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}
diff --git a/src/main/java/org/etsi/osl/tmf/rpm685/model/ProductOfferingRef.java b/src/main/java/org/etsi/osl/tmf/rpm685/model/ProductOfferingRef.java
deleted file mode 100644
index a0a6750d9454dfb1fbdf418bd1f1a672d14955e7..0000000000000000000000000000000000000000
--- a/src/main/java/org/etsi/osl/tmf/rpm685/model/ProductOfferingRef.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package org.etsi.osl.tmf.rpm685.model;
-
-import java.util.Objects;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.validation.annotation.Validated;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-
-/**
- * ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.
- */
-@Schema(description = "ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.")
-@Validated
-@jakarta.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2022-10-05T08:56:49.602231700+03:00[Europe/Athens]")
-public class ProductOfferingRef   {
-  @JsonProperty("href")
-  private String href = null;
-
-  @JsonProperty("id")
-  private String id = null;
-
-  @JsonProperty("name")
-  private String name = null;
-
-//  @JsonProperty("bundledProductOffering")
-//  @Valid
-//  private List<BundledProductOfferingRef> bundledProductOffering = null;
-
-  @JsonProperty("@referredType")
-  private String _atReferredType = null;
-
-  public ProductOfferingRef href(String href) {
-    this.href = href;
-    return this;
-  }
-
-  /**
-   * Reference of the product offering
-   * @return href
-  **/
-  @Schema(description = "Reference of the product offering")
-  
-    public String getHref() {
-    return href;
-  }
-
-  public void setHref(String href) {
-    this.href = href;
-  }
-
-  public ProductOfferingRef id(String id) {
-    this.id = id;
-    return this;
-  }
-
-  /**
-   * Unique identifier of the product offering
-   * @return id
-  **/
-  @Schema(description = "Unique identifier of the product offering")
-  
-    public String getId() {
-    return id;
-  }
-
-  public void setId(String id) {
-    this.id = id;
-  }
-
-  public ProductOfferingRef name(String name) {
-    this.name = name;
-    return this;
-  }
-
-  /**
-   * Name of the product offering
-   * @return name
-  **/
-  @Schema(description = "Name of the product offering")
-  
-    public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-//  public ProductOfferingRef bundledProductOffering(List<BundledProductOfferingRef> bundledProductOffering) {
-//    this.bundledProductOffering = bundledProductOffering;
-//    return this;
-//  }
-//
-//  public ProductOfferingRef addBundledProductOfferingItem(BundledProductOfferingRef bundledProductOfferingItem) {
-//    if (this.bundledProductOffering == null) {
-//      this.bundledProductOffering = new ArrayList<>();
-//    }
-//    this.bundledProductOffering.add(bundledProductOfferingItem);
-//    return this;
-//  }
-//
-//  /**
-//   * Get bundledProductOffering
-//   * @return bundledProductOffering
-//  **/
-//  @Schema(description = "")
-//      @Valid
-//    public List<BundledProductOfferingRef> getBundledProductOffering() {
-//    return bundledProductOffering;
-//  }
-//
-//  public void setBundledProductOffering(List<BundledProductOfferingRef> bundledProductOffering) {
-//    this.bundledProductOffering = bundledProductOffering;
-//  }
-//
-//  public ProductOfferingRef _atReferredType(String _atReferredType) {
-//    this._atReferredType = _atReferredType;
-//    return this;
-//  }
-
-  /**
-   * The actual type of the target instance when needed for disambiguation.
-   * @return _atReferredType
-  **/
-  @Schema(description = "The actual type of the target instance when needed for disambiguation.")
-  
-    public String getAtReferredType() {
-    return _atReferredType;
-  }
-
-  public void setAtReferredType(String _atReferredType) {
-    this._atReferredType = _atReferredType;
-  }
-
-
-  @Override
-  public boolean equals(java.lang.Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-    ProductOfferingRef productOfferingRef = (ProductOfferingRef) o;
-    return Objects.equals(this.href, productOfferingRef.href) &&
-        Objects.equals(this.id, productOfferingRef.id) &&
-        Objects.equals(this.name, productOfferingRef.name) &&
-//        Objects.equals(this.bundledProductOffering, productOfferingRef.bundledProductOffering) &&
-        Objects.equals(this._atReferredType, productOfferingRef._atReferredType);
-  }
-
-  @Override
-  public int hashCode() {
-    return Objects.hash(href, id, name,  _atReferredType);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("class ProductOfferingRef {\n");
-    
-    sb.append("    href: ").append(toIndentedString(href)).append("\n");
-    sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    name: ").append(toIndentedString(name)).append("\n");
-//    sb.append("    bundledProductOffering: ").append(toIndentedString(bundledProductOffering)).append("\n");
-    sb.append("    _atReferredType: ").append(toIndentedString(_atReferredType)).append("\n");
-    sb.append("}");
-    return sb.toString();
-  }
-
-  /**
-   * Convert the given object to string with each line indented by 4 spaces
-   * (except the first line).
-   */
-  private String toIndentedString(java.lang.Object o) {
-    if (o == null) {
-      return "null";
-    }
-    return o.toString().replace("\n", "\n    ");
-  }
-}