E2E RAN Schema Model - yang model vs data test

Issue-ID: CPS-196
Change-Id: I0171dfc2f82505c8ae8497ff49fe3eb28e1972a6
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy
index ac4ef27..75c98a8 100755
--- a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy
@@ -26,7 +26,7 @@
 import org.onap.cps.spi.CpsDataPersistenceService

 import org.onap.cps.spi.CpsModulePersistenceService

 import org.onap.cps.spi.model.Anchor

-import org.onap.cps.spi.model.DataNode

+import org.onap.cps.utils.YangUtils

 import org.onap.cps.yang.YangTextSchemaSourceSetBuilder

 import spock.lang.Specification

 

@@ -121,7 +121,7 @@
             1 * mockDataStoreService.storeDataNode('someDataspace', 'someAnchor', _) >>

                     { args -> dataNodeStored = args[2]}

         and: 'the size of the tree is correct'

-            def cpsRanInventory = treeToFlatMapByXpath(new HashMap<>(), dataNodeStored)

+            def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored)

             assert  cpsRanInventory.size() == 3

         and: 'ran-inventory contains the correct child node'

             def ranInventory = cpsRanInventory.get('/ran-inventory')

@@ -136,10 +136,18 @@
             pLMNIdList.getChildDataNodes().size() == 0

     }

 

-    def static treeToFlatMapByXpath(Map<String, DataNode> flatMap, DataNode dataNodeTree) {

-        flatMap.put(dataNodeTree.getXpath(), dataNodeTree)

-        dataNodeTree.getChildDataNodes()

-                .forEach(childDataNode -> treeToFlatMapByXpath(flatMap, childDataNode))

-        return flatMap

+    def 'E2E RAN Schema Model.'(){

+        given: 'yang resources'

+            def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(

+                    'e2e/basic/ietf-inet-types.yang',

+                    'e2e/basic/ietf-yang-types.yang',

+                    'e2e/basic/cps-ran-schema-model@2021-01-28.yang'

+            )

+        and : 'json data'

+            def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json')

+        expect: 'schema context is built with no exception indicating the schema set being valid '

+            def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()

+        and: 'data is parsed with no exception indicating the model match'

+            YangUtils.parseJsonData(jsonData, schemaContext) != null

     }

 }

diff --git a/cps-service/src/test/resources/e2e/basic/cps-ran-schema-model-data-v4.json b/cps-service/src/test/resources/e2e/basic/cps-ran-schema-model-data-v4.json
new file mode 100644
index 0000000..0925eef
--- /dev/null
+++ b/cps-service/src/test/resources/e2e/basic/cps-ran-schema-model-data-v4.json
@@ -0,0 +1,541 @@
+{
+  "cps-ran-schema-model:cps-ran-schema": {
+    "NearRTRIC": [
+      {
+        "idNearRTRIC": "11",
+        "attributes":{
+        "ranNFNSSIIdList":[
+        "ac8ca1a9-e1ec-4480-8720-c74e92566885"
+        ]
+        },
+        "GNBCUUPFunction": [
+          {
+            "idGNBCUUPFunction": "1111",
+            "attributes": {
+              "gNBId": 98763
+            }
+          }
+        ],
+        "GNBCUCPFunction": [
+          {
+            "idGNBCUCPFunction": "cucpserver1",
+            "attributes": {
+              "gNBCUName": "cucpserver1",
+              "gNBIdLength": 32,
+              "gNBId": 98763
+            },
+            "NRCellCU": [
+              {
+                "idNRCellCU": "15826",
+                "attributes": {
+                  "cellLocalId": 15826
+                }
+              },
+              {
+                "idNRCellCU": "15825",
+                "attributes": {
+                  "cellLocalId": 15825
+                }
+              },
+              {
+                "idNRCellCU": "13999",
+                "attributes": {
+                  "cellLocalId": 13999
+                }
+              },
+              {
+                "idNRCellCU": "15426",
+                "attributes": {
+                  "cellLocalId": 15426
+                }
+              },
+              {
+                "idNRCellCU": "15425",
+                "attributes": {
+                  "cellLocalId": 15425
+                }
+              },
+              {
+                "idNRCellCU": "15689",
+                "attributes": {
+                  "cellLocalId": 15689
+                }
+              },
+              {
+                "idNRCellCU": "15687",
+                "attributes": {
+                  "cellLocalId": 15687
+                }
+              },
+              {
+                "idNRCellCU": "15289",
+                "attributes": {
+                  "cellLocalId": 15289
+                }
+              },
+              {
+                "idNRCellCU": "15176",
+                "attributes": {
+                  "cellLocalId": 15176
+                }
+              },
+              {
+                "idNRCellCU": "14000",
+                "attributes": {
+                  "cellLocalId": 14000
+                }
+              },
+              {
+                "idNRCellCU": "15155",
+                "attributes": {
+                  "cellLocalId": 15155
+                }
+              },
+              {
+                "idNRCellCU": "15174",
+                "attributes": {
+                  "cellLocalId": 15174
+                }
+              },
+              {
+                "idNRCellCU": "15175",
+                "attributes": {
+                  "cellLocalId": 15175
+                }
+              },
+              {
+                "idNRCellCU": "15296",
+                "attributes": {
+                  "cellLocalId": 15296
+                }
+              },
+              {
+                "idNRCellCU": "15290",
+                "attributes": {
+                  "cellLocalId": 15290
+                }
+              }
+            ]
+          }
+        ],
+        "GNBDUFunction": [
+          {
+            "idGNBDUFunction": "1",
+            "attributes": {
+              "gNBDUId": 1,
+              "gNBDUName": "gnduserver1",
+              "gNBIdLength": 32
+            },
+            "NRCellDU": [
+              {
+                "idNRCellDU": "15296",
+                "attributes": {
+                  "cellLocalId": 15296,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15689",
+                "attributes": {
+                  "cellLocalId": 15689,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15687",
+                "attributes": {
+                  "cellLocalId": 15687,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15289",
+                "attributes": {
+                  "cellLocalId": 15289,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15290",
+                "attributes": {
+                  "cellLocalId": 15290,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              }
+            ]
+          },
+          {
+            "idGNBDUFunction": "3",
+            "attributes": {
+              "gNBDUId": 3,
+              "gNBDUName": "gnduserver3",
+              "gNBIdLength": 32
+            },
+            "NRCellDU": [
+              {
+                "idNRCellDU": "15425",
+                "attributes": {
+                  "cellLocalId": 15425,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15826",
+                "attributes": {
+                  "cellLocalId": 15826,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "13999",
+                "attributes": {
+                  "cellLocalId": 13999,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15426",
+                "attributes": {
+                  "cellLocalId": 15426,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "14000",
+                "attributes": {
+                  "cellLocalId": 14000,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              }
+            ]
+          },
+          {
+            "idGNBDUFunction": "2",
+            "attributes": {
+              "gNBDUId": 2,
+              "gNBDUName": "gnduserver2",
+              "gNBIdLength": 32
+            },
+            "NRCellDU": [
+              {
+                "idNRCellDU": "15174",
+                "attributes": {
+                  "cellLocalId": 15174,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15175",
+                "attributes": {
+                  "cellLocalId": 15175,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15825",
+                "attributes": {
+                  "cellLocalId": 15825,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15176",
+                "attributes": {
+                  "cellLocalId": 15176,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15155",
+                "attributes": {
+                  "cellLocalId": 15155,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "idNearRTRIC": "22",
+        "GNBCUUPFunction": [
+          {
+            "idGNBCUUPFunction": "2222",
+            "attributes": {
+              "gNBId": 98763
+            }
+          }
+        ],
+        "GNBCUCPFunction": [
+          {
+            "idGNBCUCPFunction": "cucpserver2",
+            "attributes": {
+              "gNBCUName": "cucpserver2",
+              "gNBIdLength": 32,
+              "gNBId": 98763
+            },
+            "NRCellCU": [
+              {
+                "idNRCellCU": "13905",
+                "attributes": {
+                  "cellLocalId": 13905
+                }
+              },
+              {
+                "idNRCellCU": "11569",
+                "attributes": {
+                  "cellLocalId": 11569
+                }
+              },
+              {
+                "idNRCellCU": "14427",
+                "attributes": {
+                  "cellLocalId": 14427
+                }
+              },
+              {
+                "idNRCellCU": "15549",
+                "attributes": {
+                  "cellLocalId": 15549
+                }
+              },
+              {
+                "idNRCellCU": "10896",
+                "attributes": {
+                  "cellLocalId": 10896
+                }
+              },
+              {
+                "idNRCellCU": "14656",
+                "attributes": {
+                  "cellLocalId": 14656
+                }
+              },
+              {
+                "idNRCellCU": "10897",
+                "attributes": {
+                  "cellLocalId": 10897
+                }
+              },
+              {
+                "idNRCellCU": "11568",
+                "attributes": {
+                  "cellLocalId": 11568
+                }
+              },
+              {
+                "idNRCellCU": "13910",
+                "attributes": {
+                  "cellLocalId": 13910
+                }
+              },
+              {
+                "idNRCellCU": "15548",
+                "attributes": {
+                  "cellLocalId": 15548
+                }
+              },
+              {
+                "idNRCellCU": "11561",
+                "attributes": {
+                  "cellLocalId": 11561
+                }
+              },
+              {
+                "idNRCellCU": "11562",
+                "attributes": {
+                  "cellLocalId": 11562
+                }
+              },
+              {
+                "idNRCellCU": "14655",
+                "attributes": {
+                  "cellLocalId": 14655
+                }
+              },
+              {
+                "idNRCellCU": "15361",
+                "attributes": {
+                  "cellLocalId": 15361
+                }
+              },
+              {
+                "idNRCellCU": "15360",
+                "attributes": {
+                  "cellLocalId": 15360
+                }
+              }
+            ]
+          }
+        ],
+        "GNBDUFunction": [
+          {
+            "idGNBDUFunction": "6",
+            "attributes": {
+              "gNBDUId": 6,
+              "gNBDUName": "gnduserver6",
+              "gNBIdLength": 32
+            },
+            "NRCellDU": [
+              {
+                "idNRCellDU": "15361",
+                "attributes": {
+                  "cellLocalId": 15361,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15360",
+                "attributes": {
+                  "cellLocalId": 15360,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "14427",
+                "attributes": {
+                  "cellLocalId": 14427,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15549",
+                "attributes": {
+                  "cellLocalId": 15549,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "15548",
+                "attributes": {
+                  "cellLocalId": 15548,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              }
+            ]
+          },
+          {
+            "idGNBDUFunction": "5",
+            "attributes": {
+              "gNBDUId": 5,
+              "gNBDUName": "gnduserver5",
+              "gNBIdLength": 32
+            },
+            "NRCellDU": [
+              {
+                "idNRCellDU": "14655",
+                "attributes": {
+                  "cellLocalId": 14655,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "13905",
+                "attributes": {
+                  "cellLocalId": 13905,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "14656",
+                "attributes": {
+                  "cellLocalId": 14656,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "10897",
+                "attributes": {
+                  "cellLocalId": 10897,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "13910",
+                "attributes": {
+                  "cellLocalId": 13910,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              }
+            ]
+          },
+          {
+            "idGNBDUFunction": "4",
+            "attributes": {
+              "gNBDUId": 4,
+              "gNBDUName": "gnduserver4",
+              "gNBIdLength": 32
+            },
+            "NRCellDU": [
+              {
+                "idNRCellDU": "11561",
+                "attributes": {
+                  "cellLocalId": 11561,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "11569",
+                "attributes": {
+                  "cellLocalId": 11569,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "11562",
+                "attributes": {
+                  "cellLocalId": 11562,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "10896",
+                "attributes": {
+                  "cellLocalId": 10896,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              },
+              {
+                "idNRCellDU": "11568",
+                "attributes": {
+                  "cellLocalId": 11568,
+                  "nRPCI": 12,
+                  "nRTAC": 310
+                }
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/cps-service/src/test/resources/e2e/basic/cps-ran-schema-model@2021-01-28.yang b/cps-service/src/test/resources/e2e/basic/cps-ran-schema-model@2021-01-28.yang
new file mode 100644
index 0000000..224e884
--- /dev/null
+++ b/cps-service/src/test/resources/e2e/basic/cps-ran-schema-model@2021-01-28.yang
@@ -0,0 +1,1452 @@
+module cps-ran-schema-model {
+  yang-version 1.1;
+  namespace "org:onap:ccsdk:features:sdnr:northbound:cps-ran-schema-model";
+  prefix rn;
+
+   import ietf-inet-types {
+    prefix inet;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+        organization
+    "Open Network Automation Platform - ONAP
+     <https://www.onap.org>";
+  contact
+    "Editors:
+       Sandeep Shah
+       <mailto:sandeep.shah@ibm.com>
+
+       Swaminathan Seetharaman
+       <mailto:swaminathan.seetharaman@wipro.com>";
+  description
+    "This module contains a collection of YANG definitions for capturing
+     relationships among managed elements of the radio access Network
+     to be stored in ONAP CPS platform.
+
+     Copyright 2020-2021 IBM.
+
+     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.";
+
+  revision 2021-01-28 {
+    description
+      "CPS RAN Network YANG Model for ONAP/O-RAN POC";
+    reference
+      "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin";
+  }
+
+  typedef usageState {
+    type enumeration {
+      enum IDLE {
+        description
+          "TODO";
+      }
+      enum ACTIVE {
+        description
+          "TODO";
+      }
+      enum BUSY {
+        description
+          "TODO";
+      }
+    }
+    description
+      "It describes whether or not the resource is actively in
+       use at a specific instant, and if so, whether or not it has spare
+       capacity for additional users at that instant. The value is READ-ONLY.";
+    reference
+      "ITU T Recommendation X.731";
+  }
+
+  typedef Mcc {
+    type string;
+    description
+      "The mobile country code consists of three decimal digits,
+       The first digit of the mobile country code identifies the geographic
+       region (the digits 1 and 8 are not used):";
+    reference
+      "3GPP TS 23.003 subclause 2.2 and 12.1";
+  }
+
+  typedef Mnc {
+    type string;
+    description
+      "The mobile network code consists of two or three
+       decimal digits (for example: MNC of 001 is not the same as MNC of 01)";
+    reference
+      "3GPP TS 23.003 subclause 2.2 and 12.1";
+  }
+
+  typedef Nci {
+    type string;
+    description
+      "NR Cell Identity. The NCI shall be of fixed length of 36 bits
+       and shall be coded using full hexadecimal representation.
+       The exact coding of the NCI is the responsibility of each PLMN operator";
+    reference
+      "TS 23.003";
+  }
+
+  typedef OperationalState {
+    type enumeration {
+      enum DISABLED {
+        value 0;
+        description
+          "The resource is totally inoperable.";
+      }
+      enum ENABLED {
+        value 1;
+        description
+          "The resource is partially or fully operable.";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "3GPP TS 28.625 and ITU-T X.731";
+  }
+
+  typedef AvailabilityStatus {
+    type enumeration {
+      enum IN_TEST {
+        description
+          "TODO";
+      }
+      enum FAILED {
+        description
+          "TODO";
+      }
+      enum POWER_OFF {
+        description
+          "TODO";
+      }
+      enum OFF_LINE {
+        description
+          "TODO";
+      }
+      enum OFF_DUTY {
+        description
+          "TODO";
+      }
+      enum DEPENDENCY {
+        description
+          "TODO";
+      }
+      enum DEGRADED {
+        description
+          "TODO";
+      }
+      enum NOT_INSTALLED {
+        description
+          "TODO";
+      }
+      enum LOG_FULL {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef CellState {
+    type enumeration {
+      enum IDLE {
+        description
+          "TODO";
+      }
+      enum INACTIVE {
+        description
+          "TODO";
+      }
+      enum ACTIVE {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef SNssai {
+    type string;
+    description
+      "Single Network Slice Selection Assistance Information.";
+    reference
+      "TS 23.501 clause 5.15.2";
+  }
+
+  typedef Sst {
+    type uint8;
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef Nrpci {
+    type uint32;
+    description
+      "Physical Cell Identity (PCI) of the NR cell.";
+    reference
+      "TS 36.211 subclause 6.11";
+  }
+
+  typedef Tac {
+    type int32 {
+      range "0..16777215";
+    }
+    description
+      "Tracking Area Code";
+    reference
+      "TS 23.003 clause 19.4.2.3";
+  }
+
+  typedef AmfRegionId {
+    type string;
+    description
+      "";
+    reference
+      "clause 2.10.1 of 3GPP TS 23.003";
+  }
+
+  typedef AmfSetId {
+    type string;
+    description
+      "";
+    reference
+      "clause 2.10.1 of 3GPP TS 23.003";
+  }
+
+  typedef AmfPointer {
+    type string;
+    description
+      "";
+    reference
+      "clause 2.10.1 of 3GPP TS 23.003";
+  }
+
+  // type definitions especially for core NFs
+
+  typedef NfType {
+    type enumeration {
+      enum NRF {
+        description
+          "TODO";
+      }
+      enum UDM {
+        description
+          "TODO";
+      }
+      enum AMF {
+        description
+          "TODO";
+      }
+      enum SMF {
+        description
+          "TODO";
+      }
+      enum AUSF {
+        description
+          "TODO";
+      }
+      enum NEF {
+        description
+          "TODO";
+      }
+      enum PCF {
+        description
+          "TODO";
+      }
+      enum SMSF {
+        description
+          "TODO";
+      }
+      enum NSSF {
+        description
+          "TODO";
+      }
+      enum UDR {
+        description
+          "TODO";
+      }
+      enum LMF {
+        description
+          "TODO";
+      }
+      enum GMLC {
+        description
+          "TODO";
+      }
+      enum 5G_EIR {
+        description
+          "TODO";
+      }
+      enum SEPP {
+        description
+          "TODO";
+      }
+      enum UPF {
+        description
+          "TODO";
+      }
+      enum N3IWF {
+        description
+          "TODO";
+      }
+      enum AF {
+        description
+          "TODO";
+      }
+      enum UDSF {
+        description
+          "TODO";
+      }
+      enum BSF {
+        description
+          "TODO";
+      }
+      enum CHF {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef NotificationType {
+    type enumeration {
+      enum N1_MESSAGES {
+        description
+          "TODO";
+      }
+      enum N2_INFORMATION {
+        description
+          "TODO";
+      }
+      enum LOCATION_NOTIFICATION {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef Load {
+    type uint8 {
+      range "0..100";
+    }
+    description
+      "Latest known load information of the NF, percentage ";
+  }
+
+  typedef N1MessageClass {
+    type enumeration {
+      enum 5GMM {
+        description
+          "TODO";
+      }
+      enum SM {
+        description
+          "TODO";
+      }
+      enum LPP {
+        description
+          "TODO";
+      }
+      enum SMS {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef N2InformationClass {
+    type enumeration {
+      enum SM {
+        description
+          "TODO";
+      }
+      enum NRPPA {
+        description
+          "TODO";
+      }
+      enum PWS {
+        description
+          "TODO";
+      }
+      enum PWS_BCAL {
+        description
+          "TODO";
+      }
+      enum PWS_RF {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef NsiId {
+    type string;
+    description
+      "TODO";
+  }
+
+  typedef UeMobilityLevel {
+    type enumeration {
+      enum STATIONARY {
+        description
+          "TODO";
+      }
+      enum NOMADIC {
+        description
+          "TODO";
+      }
+      enum RESTRICTED_MOBILITY {
+        description
+          "TODO";
+      }
+      enum FULLY_MOBILITY {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef ResourceSharingLevel {
+    type enumeration {
+      enum SHARED {
+        description
+          "TODO";
+      }
+      enum NOT_SHARED {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef TxDirection {
+    type enumeration {
+      enum DL {
+        description
+          "TODO";
+      }
+      enum UL {
+        description
+          "TODO";
+      }
+      enum DL_AND_UL {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef DistinguishedName { // TODO is this equivalent to TS 32.300 ?
+    type string;
+    description
+      "Represents the international standard for the representation
+       of Distinguished Name (RFC 4512).
+       The format of the DistinguishedName REGEX is:
+       {AttributeType = AttributeValue}
+
+       AttributeType consists of alphanumeric and hyphen (OIDs not allowed).
+       All other characters are restricted.
+       The Attribute value cannot contain control characters or the
+       following characters : \\ > < ; \" + , (Comma) and White space
+       The Attribute value can contain the following characters if they
+       are excaped : \\ > < ; \" + , (Comma) and White space
+       The Attribute value can contain control characters if its an escaped
+       double digit hex number.
+       Examples could be
+       UID=nobody@example.com,DC=example,DC=com
+       CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US";
+    reference
+      "RFC 4512 Lightweight Directory Access Protocol (LDAP):
+             Directory Information Models";
+  } // recheck regexp it doesn't handle posix [:cntrl:]
+
+  typedef QOffsetRange {
+    type int8;
+    units "dB";
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef QuotaType {
+    type enumeration {
+      enum STRICT {
+        description
+          "TODO";
+      }
+      enum FLOAT {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef CyclicPrefix {
+    type enumeration {
+      enum NORMAL {
+        description
+          "TODO";
+      }
+      enum EXTENDED {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  grouping PLMNInfo {
+    description
+      "The PLMNInfo data type define a S-NSSAI member in a specific PLMNId, and it have
+       two attributes PLMNId and S-NSSAI (PLMNId, S-NSSAI). The PLMNId represents a data type that
+       is comprised of mcc (mobile country code) and mnc (mobile network code), (See TS 23.003
+       subclause 2.2 and 12.1) and S-NSSAI represents an data type, that is comprised of an SST
+       (Slice/Service type) and an optional SD (Slice Differentiator) field, (See TS 23.003 [13]).";
+    uses PLMNId;
+    list sNSSAIList {
+      key "sNssai";
+      uses sNSSAIConfig;
+      description "List of sNSSAIs";
+    }
+  }
+
+  grouping ManagedNFProfile {
+    description
+      "Defines profile for managed NF";
+    reference
+      "3GPP TS 23.501";
+    leaf idx {
+      type uint32;
+      description
+        "TODO";
+      reference
+        "3GPP TS 23.501";
+    }
+    leaf nfInstanceID {
+      type yang:uuid;
+      config false;
+      mandatory false;
+      description
+        "This parameter defines profile for managed NF.
+         The format of the NF Instance ID shall be a
+         Universally Unique Identifier (UUID) version 4,
+         as described in IETF RFC 4122 ";
+    }
+    leaf-list nfType {
+      type NfType;
+      config false;
+      min-elements 1;
+      description
+        "Type of the Network Function";
+    }
+    leaf hostAddr {
+      type inet:host;
+      mandatory false;
+      description
+        "Host address of a NF";
+    }
+    leaf authzInfo {
+      type string;
+      description
+        "This parameter defines NF Specific Service authorization
+         information. It shall include the NF type (s) and NF realms/origins
+         allowed to consume NF Service(s) of NF Service Producer.";
+      reference
+        "See TS 23.501";
+    }
+    leaf location {
+      type string;
+      description
+        "Information about the location of the NF instance
+         (e.g. geographic location, data center) defined by operator";
+      reference
+        "TS 29.510";
+    }
+    leaf capacity {
+      type uint16;
+      mandatory false;
+      description
+        "This parameter defines static capacity information
+         in the range of 0-65535, expressed as a weight relative to other
+         NF instances of the same type; if capacity is also present in the
+         nfServiceList parameters, those will have precedence over this value.";
+      reference
+        "TS 29.510";
+    }
+    leaf nFSrvGroupId {
+      type string;
+      description
+        "This parameter defines identity of the group that is
+         served by the NF instance.
+         May be config false or true depending on the ManagedFunction.
+         Config=true for Udrinfo. Config=false for UdmInfo and AusfInfo.
+         Shall be present if ../nfType = UDM or AUSF or UDR. ";
+      reference
+        "TS 29.510";
+    }
+    leaf-list supportedDataSetIds {
+      type enumeration {
+        enum SUBSCRIPTION {
+          description
+            "TODO";
+        }
+        enum POLICY {
+          description
+            "TODO";
+        }
+        enum EXPOSURE {
+          description
+            "TODO";
+        }
+        enum APPLICATION {
+          description
+            "TODO";
+        }
+      }
+      description
+        "List of supported data sets in the UDR instance.
+         May be present if ../nfType = UDR";
+      reference
+        "TS 29.510";
+    }
+    leaf-list smfServingAreas {
+      type string;
+      description
+        "Defines the SMF service area(s) the UPF can serve.
+         Shall be present if ../nfType = UPF";
+      reference
+        "TS 29.510";
+    }
+    leaf priority {
+      type uint16;
+      description
+        "This parameter defines Priority (relative to other NFs
+         of the same type) in the range of 0-65535, to be used for NF selection;
+         lower values indicate a higher priority. If priority is also present
+         in the nfServiceList parameters, those will have precedence over
+         this value. Shall be present if ../nfType = AMF ";
+      reference
+        "TS 29.510";
+    }
+  }
+
+
+  grouping PLMNId {
+    description
+      "TODO";
+    reference
+      "TS 23.658";
+    leaf mcc {
+      type Mcc;
+      mandatory true;
+      description
+        "TODO";
+    }
+    leaf mnc {
+      type Mnc;
+      mandatory true;
+      description
+        "TODO";
+    }
+  }
+
+  grouping AmfIdentifier {
+    description
+      "The AMFI is constructed from an AMF Region ID,
+       an AMF Set ID and an AMF Pointer.
+       The AMF Region ID identifies the region,
+       the AMF Set ID uniquely identifies the AMF Set within the AMF Region, and
+       the AMF Pointer uniquely identifies the AMF within the AMF Set. ";
+    leaf amfRegionId {
+      type AmfRegionId;
+      description
+        "TODO";
+    }
+    leaf amfSetId {
+      type AmfSetId;
+      description
+        "TODO";
+    }
+    leaf amfPointer {
+      type AmfPointer;
+      description
+        "TODO";
+    }
+  }
+
+  grouping DefaultNotificationSubscription {
+    description
+      "TODO";
+    leaf notificationType {
+      type NotificationType;
+      description
+        "TODO";
+    }
+    leaf callbackUri {
+      type inet:uri;
+      description
+        "TODO";
+    }
+    leaf n1MessageClass {
+      type N1MessageClass;
+      description
+        "TODO";
+    }
+    leaf n2InformationClass {
+      type N2InformationClass;
+      description
+        "TODO";
+    }
+  }
+
+  grouping Ipv4AddressRange {
+    description
+      "TODO";
+    leaf start {
+      type inet:ipv4-address;
+      description
+        "TODO";
+    }
+    leaf end {
+      type inet:ipv4-address;
+      description
+        "TODO";
+    }
+  }
+
+  grouping Ipv6PrefixRange {
+    description
+      "TODO";
+    leaf start {
+      type inet:ipv6-prefix;
+      description
+        "TODO";
+    }
+    leaf end {
+      type inet:ipv6-prefix;
+      description
+        "TODO";
+    }
+  }
+
+  grouping AddressWithVlan {
+    description
+      "TODO";
+    leaf ipAddress {
+      type inet:ip-address;
+      description
+        "TODO";
+    }
+    leaf vlanId {
+      type uint16;
+      description
+        "TODO";
+    }
+  }
+
+  grouping ManagedElementGroup {
+    description
+      "Abstract class representing telecommunications resources.";
+    leaf dnPrefix {
+      type DistinguishedName;
+      description
+        "Provides naming context and splits the DN into a DN Prefix and Local DN";
+    }
+    leaf userLabel {
+      type string;
+      description
+        "A user-friendly name of this object.";
+    }
+    leaf locationName {
+      type string;
+      config false;
+      description
+        "The physical location (e.g. an address) of an entity";
+    }
+    leaf-list managedBy {
+      type DistinguishedName;
+      config false;
+      description
+        "Relates to the role played by ManagementSystem";
+    }
+    leaf-list managedElementTypeList {
+      type string;
+      config false;
+      min-elements 1;
+      description
+        "The type of functionality provided by the ManagedElement.
+         It may represent one ME functionality or a combination of
+         Two examples of allowed values are:
+         -  NodeB;
+         -  HLR, VLR.";
+    }
+  } // Managed Element grouping
+
+  grouping NearRTRICGroup {
+    description
+      "Abstract class representing Near RT RIC.";
+    leaf dnPrefix {
+      type DistinguishedName;
+      description
+        "Provides naming context and splits the DN into a DN Prefix and Local DN";
+    }
+    leaf userLabel {
+      type string;
+      description
+        "A user-friendly name of this object.";
+    }
+    leaf locationName {
+      type string;
+      config false;
+      description
+        "The physical location (e.g. an address) of an entity";
+    }
+    leaf gNBId {
+          type int64 { range "0..4294967295"; }
+          config false;
+          description "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+            is part of the NR Cell Identifier (NCI) of the gNB cells.";
+          reference "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+        }
+
+        list pLMNInfoList {
+          uses PLMNInfo;
+          key "mcc mnc";
+          description "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that can be served by the nearRTRIC.";
+        }
+    list RRMPolicyRatio {
+      key id;
+      leaf id {
+        type string;
+        description
+          "Key leaf";
+      }
+      container attributes {
+        uses RRMPolicyRatioGroup;
+      }
+      description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+        inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both
+        standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+        abstract RRMPolicy_ IOC. For details see subclause 4.3.36.";
+    }
+    leaf-list ranNFNSSIIdList{
+                type string;
+                config true;
+                description "Contains the list of RANNFNSSIs configured in a NearRTRIC";
+        }
+
+
+  } // Near RT RIC grouping
+
+
+
+        grouping Configuration{
+                leaf configParameter{
+                        type string;
+                        description "Type of the configuration parameter";
+        }
+                leaf configValue{
+                        type int64;
+                        description "Identifies the configuration to be done for the network elements under the NearRTRIC";
+
+                }
+        }
+
+
+  grouping GNBDUFunctionGroup {
+    description
+      "Represents the GNBDUFunction IOC.";
+    reference
+      "3GPP TS 28.541";
+
+    leaf gNBId {
+      type int64 {
+        range "0..4294967295";
+      }
+      config false;
+      mandatory false;
+      description
+        "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+         is part of the NR Cell Identifier (NCI) of the gNB cells.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBIdLength {
+      type int32 {
+        range "22..32";
+      }
+      mandatory false;
+      description
+        "Indicates the number of bits for encoding the gNB ID.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBDUId {
+      type int64 {
+        range "0..68719476735";
+      }
+      mandatory false;
+      description
+        "Uniquely identifies the DU at least within a gNB.";
+      reference
+        "3GPP TS 38.473";
+    }
+    leaf gNBDUName {
+      type string {
+        length "1..150";
+      }
+      description
+        "Identifies the Distributed Unit of an NR node";
+      reference
+        "3GPP TS 38.473";
+    }
+    list RRMPolicyRatio {
+      key id;
+      leaf id {
+        type string;
+        description
+          "Key leaf";
+      }
+      container attributes {
+        uses RRMPolicyRatioGroup;
+      }
+      description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+        inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both
+        standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+        abstract RRMPolicy_ IOC. For details see subclause 4.3.36.";
+    }
+  }
+
+  grouping NRCellDUGroup {
+    description
+      "Represents the NRCellDU IOC.";
+    reference
+      "3GPP TS 28.541";
+    list RRMPolicyRatio {
+      key id;
+      leaf id {
+        type string;
+        description
+          "Key leaf";
+      }
+      container attributes {
+        uses RRMPolicyRatioGroup;
+      }
+      description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+        inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both
+        standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+        abstract RRMPolicy_ IOC. For details see subclause 4.3.36.";
+    }
+    leaf cellLocalId {
+      type int32 {
+        range "0..16383";
+      }
+      mandatory false;
+      description
+        "Identifies an NR cell of a gNB. Together with the
+         corresponding gNB identifier in forms the NR Cell Identity (NCI).";
+      reference
+        "NCI in 3GPP TS 38.300";
+    }
+    list pLMNInfoList {
+      key "mcc mnc";
+      min-elements 1;
+      description
+        "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that
+         can be served by the NR cell, and which S-NSSAIs that can be supported by the NR cell for
+         corresponding PLMN in case of network slicing feature is supported. The plMNId of the first
+         entry of the list is the PLMNId used to construct the nCGI for the NR cell.";
+      uses PLMNInfo;
+    }
+    leaf nRPCI {
+      type int32 {
+        range "0..1007";
+      }
+      mandatory false;
+      description
+        "The Physical Cell Identity (PCI) of the NR cell.";
+      reference
+        "3GPP TS 36.211";
+    }
+    leaf nRTAC {
+      type Tac;
+      description
+        "The common 5GS Tracking Area Code for the PLMNs.";
+      reference
+        "3GPP TS 23.003, 3GPP TS 38.473";
+    }
+  } // grouping
+
+  grouping rRMPolicyMemberGroup {
+    description
+      "TODO";
+    uses PLMNId;
+    leaf sNSSAI {
+      type SNssai;
+      description
+        "This data type represents an RRM Policy member that will be part of a
+         rRMPolicyMemberList. A RRMPolicyMember is defined by its pLMNId and sNSSAI (S-NSSAI).
+         The members in a rRMPolicyMemberList are assigned a specific amount of RRM resources
+         based on settings in RRMPolicy.";
+    }
+  }
+
+  grouping RRMPolicyRatioGroup {
+
+    uses RRMPolicy_Group;    // Inherits RRMPolicy_
+
+    leaf quotaType {
+      type QuotaType;
+      mandatory false;
+      description "The type of the quota which allows to allocate resources as
+        strictly usable for defined slice(s) (strict quota) or allows that
+        resources to be used by other slice(s) when defined slice(s) do not
+        need them (float quota).";
+    }
+
+    leaf rRMPolicyMaxRatio {
+      type uint8;
+      mandatory false;
+      units percent;
+      description "The RRM policy setting the maximum percentage of radio
+        resources to be allocated to the corresponding S-NSSAI list. This
+        quota can be strict or float quota. Strict quota means resources are
+        not allowed for other sNSSAIs even when they are not used by the
+        defined sNSSAIList. Float quota resources can be used by other sNSSAIs
+        when the defined sNSSAIList do not need them. Value 0 indicates that
+        there is no maximum limit.";
+    }
+
+    leaf rRMPolicyMinRatio {
+      type uint8;
+      mandatory false;
+      units percent;
+      description "The RRM policy setting the minimum percentage of radio
+        resources to be allocated to the corresponding S-NSSAI list. This
+        quota can be strict or float quota. Strict quota means resources are
+        not allowed for other sNSSAIs even when they are not used by the
+        defined sNSSAIList. Float quota resources can be used by other sNSSAIs
+        when the defined sNSSAIList do not need them. Value 0 indicates that
+        there is no minimum limit.";
+    }
+    leaf rRMPolicyDedicatedRatio {
+      type uint8;
+      units percent;
+      description "Dedicated Ration.";
+      }
+    description "Represents the RRMPolicyRatio concrete IOC.";
+    }
+
+
+  grouping sNSSAIConfig{
+        leaf sNssai {
+        type string;
+        description "s-NSSAI of a network slice.";
+           reference "3GPP TS 23.003";
+      }
+         leaf status {
+        type string;
+        description "status of s-NSSAI";
+      }
+        list configData{
+                uses Configuration;
+                key "configParameter";
+                description "List of configurations to be done at the network elements";
+        }
+        }
+
+  grouping RRMPolicy_Group {
+    description
+      "This IOC represents the properties of an abstract RRMPolicy. The RRMPolicy_ IOC
+       needs to be subclassed to be instantiated. It defines two attributes apart from those
+       inherited from Top IOC, the resourceType attribute defines type of resource (PRB, RRC
+       connected users, DRB usage etc.) and the rRMPolicyMemberList attribute defines the
+       RRMPolicyMember(s)that are subject to this policy. An RRM resource (defined in resourceType
+       attribute) is located in NRCellDU, NRCellCU, GNBDUFunction, GNBCUCPFunction or in
+       GNBCUUPFunction. The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+       inheritance in TS 28.541 Figure 4.2.1.2-1. This RRM framework allows adding new policies,
+       both standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+       abstract RRMPolicy_ IOC.";
+    leaf resourceType {
+      type string;
+      mandatory false;
+      description
+        "The resourceType attribute defines type of resource (PRB, RRC connected users,
+         DRB usage etc.) that is subject to policy. Valid values are 'PRB', 'RRC' or 'DRB'";
+    }
+    list rRMPolicyMemberList {
+      key "idx";
+      leaf idx {
+        type uint32;
+        description
+          "TODO";
+      }
+      description
+        "It represents the list of RRMPolicyMember (s) that the managed object
+         is supporting. A RRMPolicyMember <<dataType>> include the PLMNId <<dataType>>
+         and S-NSSAI <<dataType>>.";
+      uses rRMPolicyMemberGroup;
+    }
+  } // grouping
+
+  grouping GNBCUUPFunctionGroup {
+    description
+      "Represents the GNBCUUPFunction IOC.";
+    reference
+      "3GPP TS 28.541";
+
+    list RRMPolicyRatio {
+      key id;
+      leaf id {
+        type string;
+        description
+          "Key leaf";
+      }
+      container attributes {
+        uses RRMPolicyRatioGroup;
+      }
+      description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+        inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both
+        standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+        abstract RRMPolicy_ IOC. For details see subclause 4.3.36.";
+    }
+    leaf gNBCUUPId {
+      type uint64 {
+        range "0..68719476735";
+      }
+      config false;
+      mandatory false;
+      description
+        "Identifies the gNB-CU-UP at least within a gNB-CU-CP";
+      reference
+        "'gNB-CU-UP ID' in subclause 9.3.1.15 of 3GPP TS 38.463";
+    }
+    leaf gNBId {
+      type int64 {
+      range "0..4294967295";
+    }
+      mandatory false;
+      description
+        "Indicates the number of bits for encoding the gNB Id.";
+      reference
+        "gNB Id in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    list pLMNInfoList {
+      key "mcc mnc";
+      description
+        "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that
+         can be served by the GNBCUUPFunction and which S-NSSAIs can be supported by the
+         GNBCUUPFunction for corresponding PLMN in case of network slicing feature is supported";
+      uses PLMNInfo;
+    }
+  } // grouping
+
+  grouping GNBCUCPFunctionGroup {
+    description
+      "Represents the GNBCUCPFunction IOC.";
+    reference
+      "3GPP TS 28.541";
+    list RRMPolicyRatio {
+      key id;
+      leaf id {
+        type string;
+        description
+          "Key leaf";
+      }
+      container attributes {
+        uses RRMPolicyRatioGroup;
+      }
+      description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+        inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both
+        standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+        abstract RRMPolicy_ IOC. For details see subclause 4.3.36.";
+    }
+    leaf gNBId {
+      type int64 {
+        range "0..4294967295";
+      }
+      mandatory false;
+      description
+        "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+         is part of the NR Cell Identifier (NCI) of the gNB cells.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBIdLength {
+      type int32 {
+        range "22..32";
+      }
+      mandatory false;
+      description
+        "Indicates the number of bits for encoding the gNB ID.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBCUName {
+      type string {
+        length "1..150";
+      }
+      mandatory false;
+      description
+        "Identifies the Central Unit of an gNB.";
+      reference
+        "3GPP TS 38.473";
+    }
+    list pLMNId {
+      key "mcc mnc";
+      min-elements 1;
+      max-elements 1;
+      description
+        "The PLMN identifier to be used as part of the global RAN
+         node identity.";
+      uses PLMNId;
+    }
+  } // grouping
+
+  grouping NRCellCUGroup {
+    description
+      "Represents the NRCellCU IOC.";
+    reference
+      "3GPP TS 28.541";
+    leaf cellLocalId {
+      type int32 {
+        range "0..16383";
+      }
+      mandatory false;
+      description
+        "Identifies an NR cell of a gNB. Together with corresponding
+         gNB ID it forms the NR Cell Identifier (NCI).";
+    }
+    list pLMNInfoList {
+      key "mcc mnc";
+      min-elements 1;
+      description
+        "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs
+         that can be served by the NR cell, and which S-NSSAIs that can be supported by the
+         NR cell for corresponding PLMN in case of network slicing feature is supported.";
+      uses PLMNInfo;
+      // Note: Whether the attribute pLMNId in the pLMNInfo can be writable depends on the implementation.
+    }
+    list RRMPolicyRatio {
+      key id;
+      leaf id {
+        type string;
+        description
+          "Key leaf";
+      }
+      container attributes {
+        uses RRMPolicyRatioGroup;
+      }
+      description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+        inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both
+        standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+        abstract RRMPolicy_ IOC. For details see subclause 4.3.36.";
+    }
+  } // grouping NRCellCUGroup
+
+  grouping NRCellRelationGroup {
+    description
+      "Represents the NRCellRelation IOC.";
+    reference
+      "3GPP TS 28.541";
+    leaf nRTCI {
+      type uint64;
+      description
+        "Target NR Cell Identifier. It consists of NR Cell
+         Identifier (NCI) and Physical Cell Identifier of the target NR cell
+         (nRPCI).";
+    }
+  } // grouping
+
+  // container for RAN Network
+
+  container cps-ran-schema {
+    description
+      "High-level hierarchical data structure to establish
+      relationships among O-RAN managed elements for the
+      purposes of storing in Configuration and Persistence
+      ONAP system ";
+    list NearRTRIC {
+      key "idNearRTRIC"; // list GNBCUCPFunction
+      description
+        "A list of expected near-real-time RIC O-RAN managed functions.";
+      leaf idNearRTRIC {
+        type string;
+        description
+          "Key leaf (namingAttribute) for a class/list.
+           Should be used as a key leaf for lists representing
+           stage 2 classes.";
+        reference
+          "3GPP TS 32.300 Name convention for managed objects";
+      }
+      container attributes {
+        description
+          "TODO";
+        uses NearRTRICGroup;
+      }
+      list GNBDUFunction {
+        key "idGNBDUFunction";
+        description
+          "Represents the logical function DU of gNB or en-gNB.";
+        reference
+          "3GPP TS 28.541";
+        leaf idGNBDUFunction {
+          type string;
+          description
+            "TODO";
+        }
+        container attributes {
+          description
+            "TODO";
+          uses GNBDUFunctionGroup;
+        }
+        list NRCellDU {
+          key "idNRCellDU";
+          description
+            "Represents the information of a cell known by DU.";
+          reference
+            "3GPP TS 28.541";
+          leaf idNRCellDU {
+            type string;
+            description
+              "TODO";
+          }
+          container attributes {
+            description
+              "TODO";
+            uses NRCellDUGroup;
+          }
+        } // list NRCellDU
+      } // list GNBDUFunction
+      list GNBCUUPFunction {
+        key "idGNBCUUPFunction";
+        description
+          "TODO";
+        leaf idGNBCUUPFunction {
+          type string;
+          description
+            "TODO";
+        }
+        container attributes {
+          description
+            "TODO";
+          uses GNBCUUPFunctionGroup;
+        }
+      } // list GNBCUUPFunction
+      list GNBCUCPFunction {
+        key "idGNBCUCPFunction"; // list NRCellCU
+        description
+          "Represents the logical function CU-CP of gNB and en-gNB.";
+        reference
+          "3GPP TS 28.541";
+        leaf idGNBCUCPFunction {
+          type string;
+          description
+            "TODO";
+        }
+        container attributes {
+          description
+            "TODO";
+          uses GNBCUCPFunctionGroup;
+        }
+        list NRCellCU {
+          key "idNRCellCU";
+          description
+            "Represents the information required by CU that is
+             responsible for the management of inter-cell mobility and neighbour
+             relations via ANR.";
+          reference
+            "3GPP TS 28.541";
+          leaf idNRCellCU {
+            type string;
+            description
+              "TODO";
+          }
+          container attributes {
+            description
+              "TODO";
+            uses NRCellCUGroup;
+          }
+          list NRCellRelation {
+            key "idNRCellRelation";
+            description
+              "Represents a neighbour cell relation from a source cell
+               to a target cell, where the target cell is an NRCellCU or
+               ExternalNRCellCU instance.";
+            reference
+              "3GPP TS 28.541";
+            leaf idNRCellRelation {
+              type string;
+              description
+                "TODO";
+            }
+            container attributes {
+              description
+                "TODO";
+              uses NRCellRelationGroup;
+            }
+          } // list NRCellRelation
+          list NRFreqRelation {
+            key "idNRFreqRelation";
+            description
+              "Together with the target NRFrequency, it represents the
+               frequency properties applicable to the referencing NRFreqRelation.";
+            reference
+              "3GPP TS 28.541";
+            leaf idNRFreqRelation {
+              type string;
+              description
+                "TODO";
+            }
+          } // list NRFreqRelation
+        }
+      }
+    } // list ManagedElement
+  }
+}