Initial commit

Signed-off-by: Gabor Szalai <gabor.szalai@ericsson.com>
diff --git a/5G_system_TS29512_Npcf_CNL113888.tpd b/5G_system_TS29512_Npcf_CNL113888.tpd
new file mode 100644
index 0000000..aecd4b3
--- /dev/null
+++ b/5G_system_TS29512_Npcf_CNL113888.tpd
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>5G_system_TS29512_Npcf_CNL113888</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="5G_system_TS29514_Npcf_CNL113889" projectLocationURI="../5G_system_TS29514_Npcf_CNL113889/5G_system_TS29514_Npcf_CNL113889.tpd"/>
+    <ReferencedProject name="5G_system_TS29519_Nudr_CNL113900" projectLocationURI="../5G_system_TS29519_Nudr_CNL113900/5G_system_TS29519_Nudr_CNL113900.tpd"/>
+    <ReferencedProject name="5G_system_TS29571_CommonData_CNL113880" projectLocationURI="../5G_system_TS29571_CommonData_CNL113880/5G_system_TS29571_CommonData_CNL113880.tpd"/>
+    <ReferencedProject name="5G_system_TS32291_Nchf_CNL113894" projectLocationURI="../5G_system_TS32291_Nchf_CNL113894/5G_system_TS32291_Nchf_CNL113894.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/TS29512_CommonData.ttcn" relativeURI="src/TS29512_CommonData.ttcn"/>
+    <FileResource projectRelativePath="src/TS29512_Npcf_SMPolicyControl.ttcn" relativeURI="src/TS29512_Npcf_SMPolicyControl.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/5G_system_TS29512_Npcf_CNL113888</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
\ No newline at end of file
diff --git a/doc/5G_system_TS29512_Npcf_Description.adoc b/doc/5G_system_TS29512_Npcf_Description.adoc
new file mode 100644
index 0000000..f414301
--- /dev/null
+++ b/doc/5G_system_TS29512_Npcf_Description.adoc
@@ -0,0 +1,86 @@
+= 5G system TS29512 Npcf Protocol Modules for TTCN-3 Toolset with TITAN, Description
+:author: Gábor Szalai
+:toc: left
+
+== About This Document
+
+This is the description for the 5G system TS29512 Npcf protocol module. The 5G system TS29512 Npcf protocol modules are developed for the TTCN-3 Toolset with Titan. 
+
+== Functionality
+
+The 5G system TS29512 Npcf protocol module implements the object structures of the 3GPP TS 29512 v15.1.0<<_5, [5]>> in a formalized way, using the standard specification language TTCN-3. This allows defining of test data (templates) in the TTCN-3 language and correctly encoding/decoding messages when executing test suites using the Titan TTCN-3 test environment.
+The 5G system TS29512 Npcf protocol module uses Titan’s JSON encoding <<_3, [3]>> and hence is usable with the Titan test toolset only.
+
+=== System Requirements
+Protocol modules are a set of TTCN-3 source code files that can be used as part of TTCN-3 test suites only. Hence, protocol modules alone do not put specific requirements on the system used. However, in order to compile and execute a TTCN-3 test suite using the set of protocol modules the following system requirements must be satisfied:
+
+* Titan TTCN-3 Test Executor version CRL 113 200/6 R5A (6.5.pl0) or higher installed. For Installation Guide see <<_2, [2]>>. Please note: This version of the test port is not compatible with Titan releases earlier than CRL 113 200/6 R5A.
+
+===	Installation
+The set of protocol modules can be used in developing TTCN-3 test suites using any text editor. Since the 5G system TS29512 Npcf protocol is used as a part of a TTCN-3 test suite, this requires TTCN-3 Test Executor be installed before the module can be compiled and executed together with other parts of the test suite. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_2, [2]>>.
+
+== Interface description
+
+=== Encoding/decoding and other related functions
+This product also contains encoding/decoding functions, which assure correct encoding of messages when sent from Titan and correct decoding of messages when received by Titan. 
+
+==== Implemented encoding and decoding functions
+
+[source]
+----
+Name	Type of formal parameters	Type of return value
+f_enc_SmPolicyContextData(in SmPolicyContextData pdu) return octetstring 
+f_dec_SmPolicyContextData(in octetstring stream, out SmPolicyContextData pdu) return integer 
+f_enc_SmPolicyDecision(in SmPolicyDecision pdu) return octetstring 
+f_dec_SmPolicyDecision(in octetstring stream, out SmPolicyDecision pdu) return integer 
+f_enc_SmPolicyNotification(in SmPolicyNotification pdu) return octetstring 
+f_dec_SmPolicyNotification(in octetstring stream, out SmPolicyNotification pdu) return integer 
+f_enc_UeCampingRep(in UeCampingRep pdu) return octetstring 
+f_dec_UeCampingRep(in octetstring stream, out UeCampingRep pdu) return integer 
+f_enc_RuleReport(in RuleReport pdu) return octetstring 
+f_dec_RuleReport(in octetstring stream, out RuleReport pdu) return integer 
+f_enc_TerminationNotification(in TerminationNotification pdu) return octetstring 
+f_dec_TerminationNotification(in octetstring stream, out TerminationNotification pdu) return integer 
+f_enc_SmPolicyControl(in SmPolicyControl pdu) return octetstring 
+f_dec_SmPolicyControl(in octetstring stream, out SmPolicyControl pdu) return integer 
+f_enc_SmPolicyUpdateContextData(in SmPolicyUpdateContextData pdu) return octetstring 
+f_dec_SmPolicyUpdateContextData(in octetstring stream, out SmPolicyUpdateContextData pdu) return integer 
+f_enc_SmPolicyDeleteData(in SmPolicyDeleteData pdu) return octetstring 
+f_dec_SmPolicyDeleteData(in octetstring stream, out SmPolicyDeleteData pdu) return integer 
+----
+
+== Usage
+
+The protocol module provides abstract data types for JSON objects used by the services defined in the standard <<_5, [5]>>. The protocol module provides encoder and decoder functions for the JSON objects. The decoder function validates the received JSON object based on the JSON schema as well. Only the validated JSON value is decoded.
+
+== Terminology	
+
+=== Abbreviations
+
+JSON:: JavaScript Object Notation
+
+PDU:: Protocol Data Unit
+
+TTCN-3:: Testing and Test Control Notation version 3
+
+== References
+
+[[_1]]
+[1]	ETSI ES 201 873-1 v4.4.1 (2012-04) +
+The Testing and Test Control Notation version 3. Part 1: Core Language
+
+[[_2]]
+[2]	1/ 198 17-CRL 113 200/6 Uen +
+Installation Guide for the TITAN TTCN-3 Test Executor
+
+[[_3]]
+[3]	2/198 17-CRL 113 200/6 Uen +
+Programmer's Technical Reference for Titan TTCN-3 Test Executor
+
+[[_4]]
+[4]	https://www.json.org
+
+[[_5]]
+[5] 3GPP TS 29512 v15.1.0+
+5G System; Session Management Policy Control Service; Stage 3
+
diff --git a/doc/change.log b/doc/change.log
new file mode 100644
index 0000000..2f80747
--- /dev/null
+++ b/doc/change.log
@@ -0,0 +1,9 @@
+= 5G system TS29512 Npcf Protocol Modules for TTCN-3 Toolset with TITAN, Change log

+:author: Gábor Szalai

+:toc: left

+

+== Changes

+

+=== R1A

+

+Initial revision
\ No newline at end of file
diff --git a/src/TS29512_CommonData.ttcn b/src/TS29512_CommonData.ttcn
new file mode 100644
index 0000000..4b2eb23
--- /dev/null
+++ b/src/TS29512_CommonData.ttcn
@@ -0,0 +1,34 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29512_CommonData.ttcn
+//  Description:	      Type definitions for 3GPP TS29512
+/////////////////////////////////////////////// 
+module TS29512_CommonData{
+  import from TS29571_CommonData all;
+
+  type set ChargingInformation {
+    TS29571_CommonData.Uri    primaryChfAddress,
+    TS29571_CommonData.Uri    secondaryChfAddress
+  }
+  type enumerated FlowDirection_enum { DOWNLINK, UPLINK, BIDIRECTIONAL, UNSPECIFIED}
+ 
+  type union FlowDirection {
+    FlowDirection_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+ 
+} with {
+  encode "JSON"
+}
+
diff --git a/src/TS29512_Npcf_SMPolicyControl.ttcn b/src/TS29512_Npcf_SMPolicyControl.ttcn
new file mode 100644
index 0000000..2a3d3f1
--- /dev/null
+++ b/src/TS29512_Npcf_SMPolicyControl.ttcn
@@ -0,0 +1,543 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29512_Npcf_SMPolicyControl.ttcn
+//  Description:	      Type definitions for 3GPP TS29512
+/////////////////////////////////////////////// 
+module TS29512_Npcf_SMPolicyControl {
+
+  import from TS29571_CommonData all
+  import from TS29512_CommonData all
+  import from TS29519_Policy_Data all
+  import from TS29514_Npcf_PolicyAuthorization all
+  import from TS32291_Nchf_ConvergedCharging all
+
+external function f_enc_SmPolicyContextData(in SmPolicyContextData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SmPolicyContextData(in octetstring stream, out SmPolicyContextData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_SmPolicyDecision(in SmPolicyDecision pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SmPolicyDecision(in octetstring stream, out SmPolicyDecision pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_SmPolicyNotification(in SmPolicyNotification pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SmPolicyNotification(in octetstring stream, out SmPolicyNotification pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_UeCampingRep(in UeCampingRep pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_UeCampingRep(in octetstring stream, out UeCampingRep pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_RuleReport(in RuleReport pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_RuleReport(in octetstring stream, out RuleReport pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_TerminationNotification(in TerminationNotification pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_TerminationNotification(in octetstring stream, out TerminationNotification pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_SmPolicyControl(in SmPolicyControl pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SmPolicyControl(in octetstring stream, out SmPolicyControl pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_SmPolicyUpdateContextData(in SmPolicyUpdateContextData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SmPolicyUpdateContextData(in octetstring stream, out SmPolicyUpdateContextData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+external function f_enc_SmPolicyDeleteData(in SmPolicyDeleteData pdu) return octetstring 
+with { extension "prototype(convert) encode(JSON)" }
+
+external function f_dec_SmPolicyDeleteData(in octetstring stream, out SmPolicyDeleteData pdu) return integer 
+with { extension "prototype(backtrack) decode(JSON)" }
+
+
+  type set SmPolicyControl {
+    SmPolicyContextData    context,
+    SmPolicyDecision    policy
+  }
+
+  type set SmPolicyContextData {
+    AccNetChId    accNetChId optional,
+    TS29571_CommonData.Gpsi    gpsi optional,
+    TS29571_CommonData.Supi    supi,
+    TS29571_CommonData.PduSessionId    pduSessionId,
+    TS29571_CommonData.PduSessionId    pduSessionType optional,
+    charstring chargingcharacteristics optional,
+    TS29571_CommonData.Dnn    dnn,
+    TS29571_CommonData.Uri    notificationUri,
+    TS29571_CommonData.AccessType    accessType optional,
+    TS29571_CommonData.RatType    ratType optional,
+    TS29571_CommonData.NetworkId    servingNetwork optional,
+    TS29571_CommonData.UserLocation    userLocationInfo optional,
+    TS29571_CommonData.TimeZone    ueTimeZone optional,
+    TS29571_CommonData.Pei    pei optional,
+    TS29571_CommonData.Ipv4Addr    ipv4Address optional,
+    TS29571_CommonData.Ipv6Prefix    ipv6AddressPrefix optional,
+    charstring ipDomain optional,
+    TS29571_CommonData.Ambr    subSessAmbr optional,
+    TS29571_CommonData.DefaultQosInformation    subsDefQos optional,
+    boolean online optional,
+    boolean offline optional,
+    boolean threegppPsDataOffStatus optional,
+    boolean refQosIndication optional,
+    TS29571_CommonData.TraceData    traceReq optional,
+    TS29571_CommonData.Snssai    sliceInfo,
+    TS29571_CommonData.SupportedFeatures    suppFeat optional
+  } with {
+    variant (threegppPsDataOffStatus) "name as '3gppPsDataOffStatus'"
+  }
+
+  type set SmPolicyDecision {
+    set of record {
+      universal charstring key,
+      SessionRule    additionalProperties
+    } sessRules optional,
+    set of record {
+      universal charstring key,
+      PccRule    additionalProperties
+    } pccRules optional,
+    boolean pcscfRestIndication optional,
+    set of record {
+      universal charstring key,
+      QoSData    additionalProperties
+    } qosDecs optional,
+    set of record {
+      universal charstring key,
+      ChargingData    additionalProperties
+    } ChgDecs optional,
+    ChargingInformation    chargingInfo optional,
+    set of record {
+      universal charstring key,
+      TrafficControlData    additionalProperties
+    } traffContDecs optional,
+    set of record {
+      universal charstring key,
+      UsageMonitoringData    additionalProperties
+    } umDecs optional,
+    set of record {
+      universal charstring key,
+      QosCharacteristics    additionalProperties
+    } qosChars optional,
+    TS29571_CommonData.DurationSec    reflectiveQoSTimer optional,
+    set of record {
+      universal charstring key,
+      ConditionData    additionalProperties
+    } conds optional,
+    TS29571_CommonData.DateTime    revalidationTime optional,
+    boolean offline optional,
+    boolean online optional,
+    set of       PolicyControlRequestTrigger    policyCtrlReqTriggers optional,
+    set of       RequestedRuleData    lastReqRuleData optional,
+    RequestedUsageData    lastReqUsageData optional,
+    set of record {
+      universal charstring key,
+      TS29571_CommonData.PresenceInfo    additionalProperties
+    } praInfos optional,
+    TS29519_Policy_Data.IpIndex    ipv4Index optional,
+    TS29519_Policy_Data.IpIndex    ipv6Index optional,
+    TS29571_CommonData.SupportedFeatures    suppFeat optional
+  } with {
+    variant (sessRules) "as map"
+    variant (pccRules) "as map"
+    variant (ChgDecs) "as map"
+    variant (traffContDecs) "as map"
+    variant (umDecs) "as map"
+    variant (qosChars) "as map"
+    variant (conds) "as map"
+    variant (praInfos) "as map"
+  }
+
+  type set SmPolicyNotification {
+    TS29571_CommonData.Uri    resourceUri optional,
+    SmPolicyDecision    smPolicyDecision optional
+  }
+
+  type set PccRule {
+    set of       FlowInformation    flowInfos optional,
+    charstring appId optional,
+    TS29514_Npcf_PolicyAuthorization.ContentVersion    contVer optional,
+    charstring pccRuleId,
+    integer precedence optional,
+    AfSigProtocol    afSigProtocol optional,
+    boolean appReloc optional,
+    set of       charstring refQosData optional,
+    set of       charstring refTcData optional,
+    set of       charstring refChgData optional,
+    set of       charstring refUmData optional,
+    charstring refCondData optional
+  }
+
+  type set SessionRule {
+    TS29571_CommonData.Ambr    authSessAmbr optional,
+    TS29571_CommonData.DefaultQosInformation    authDefaultQos optional,
+    charstring sessRuleId,
+    charstring refUmData optional,
+    charstring refCondData optional
+  }
+
+  type set QoSData {
+    charstring qosId,
+    integer fiveqi,
+    TS29571_CommonData.BitRate    maxbrUl optional,
+    TS29571_CommonData.BitRate    maxbrDl optional,
+    TS29571_CommonData.BitRate    gbrUl optional,
+    TS29571_CommonData.BitRate    gbrDL optional,
+    TS29571_CommonData.Arp    arp,
+    boolean qnc optional,
+    TS29571_CommonData.FiveQiPriorityLevel    priorityLevel optional,
+    TS29571_CommonData.AverWindow    averWindow optional,
+    TS29571_CommonData.MaxDataBurstVol    maxDataBurstVol optional,
+    boolean reflectiveQos optional,
+    TS29571_CommonData.PacketLossRate    maxPacketLossRate optional,
+    TS29571_CommonData.PacketLossRate    maxPacketLossRateUl optional,
+    boolean defQosFlowIndication optional
+  }
+
+  type set ConditionData {
+    charstring condId,
+    TS29571_CommonData.DateTime    activationTime optional,
+    TS29571_CommonData.DateTime    deactivationTime optional
+  }
+
+  type set TrafficControlData {
+    charstring tcId,
+    TS29514_Npcf_PolicyAuthorization.FlowStatus    flowStatus optional,
+    RedirectInformation    redirectInfo optional,
+    boolean muteNotif optional,
+    charstring trafficSteeringPolIdDl optional,
+    charstring trafficSteeringPolIdUl optional,
+    set of       TS29571_CommonData.RouteToLocation    routeToLocs optional,
+    DnaiReport    dnaiReport optional
+  }
+
+  type set ChargingData {
+    charstring chgId,
+    MeteringMethod    meteringMethod optional,
+    boolean offline optional,
+    boolean online optional,
+    charstring ratingGroup optional,
+    ReportingLevel    reportingLevel optional,
+    charstring serviceId optional,
+    charstring sponsorId optional,
+    charstring appSvcProvId optional,
+    charstring afChargingIdentifier optional
+  }
+
+  type set UsageMonitoringData {
+    charstring umId,
+    Volume    volumeThreshold optional,
+    Volume    volumeThresholdUplink optional,
+    Volume    volumeThresholdDownlink optional,
+    TS29571_CommonData.DurationSec    timeThreshold optional,
+    TS29571_CommonData.DateTime    monitoringTime optional,
+    Volume    nextVolThreshold optional,
+    Volume    nextVolThresholdUplink optional,
+    Volume    nextVolThresholdDownlink optional,
+    TS29571_CommonData.DurationSec    nextTimeThreshold optional,
+    TS29571_CommonData.DurationSec    inactivityTime optional,
+    set of       charstring exUsagePccRuleIds optional
+  }
+
+  type set RedirectInformation {
+    boolean redirectSupport,
+    FlowDirection    redirectAddressType optional,
+    charstring redirectServerAddress optional
+  }
+
+  type set FlowInformation {
+    FlowDescription    flowDescription optional,
+    TS29514_Npcf_PolicyAuthorization.EthFlowDescription    ethFlowDescription optional,
+    boolean packetFilterUsage optional,
+    charstring tosTrafficClass optional,
+    charstring spi optional,
+    charstring flowLabel optional,
+    FlowDirection    flowDirection optional
+  }
+
+  type set SmPolicyDeleteData {
+    TS29571_CommonData.UserLocation    userLocationInfo optional,
+    TS29571_CommonData.TimeZone    ueTimeZone optional,
+    TS29571_CommonData.NetworkId    servingNetwork optional,
+    TS29571_CommonData.DateTime    userLocationInfoTime optional,
+    set of       RanNasRelCause    ranNasRelCauses optional,
+    set of       AccuUsageReport    accuUsageReports optional
+  }
+
+  type set QosCharacteristics {
+    integer fiveqI,
+    TS29571_CommonData.QosResourceType    resourceType,
+    TS29571_CommonData.FiveQiPriorityLevel    priorityLevel,
+    TS29571_CommonData.PacketDelBudget    packetDelayBudget,
+    TS29571_CommonData.PacketErrRate    packetErrorRate,
+    TS29571_CommonData.AverWindow    averagingWindow optional,
+    TS29571_CommonData.MaxDataBurstVol    maximumDataBurstVolume optional
+  } with {
+    variant (fiveqI) "name as '5qI'"
+  }
+
+  // The TS29519_Policy_Data use this type
+  // moved to TS29512_CommonData to prevent  circular import
+  type TS29512_CommonData.ChargingInformation  ChargingInformation
+ 
+  type set AccuUsageReport {
+    charstring refUmIds,
+    Volume    volUsage optional,
+    Volume    volUsageUplink optional,
+    Volume    volUsageDownlink optional,
+    TS29571_CommonData.DurationSec    timeUsage optional,
+    Volume    nextVolUsage optional,
+    Volume    nextVolUsageUplink optional,
+    Volume    nextVolUsageDownlink optional,
+    TS29571_CommonData.DurationSec    nextTimeUsage optional
+  }
+
+  type set SmPolicyUpdateContextData {
+    set of       PolicyControlRequestTrigger    repPolicyCtrlReqTriggers,
+    set of       AccNetChId    accNetChIds optional,
+    TS29571_CommonData.AccessType    accessType optional,
+    TS29571_CommonData.RatType    ratType optional,
+    TS29571_CommonData.NetworkId    servingNetwork optional,
+    TS29571_CommonData.UserLocation    userLocationInformation optional,
+    TS29571_CommonData.TimeZone    ueTimeZone optional,
+    TS29571_CommonData.Ipv4Addr    relIpv4Address optional,
+    TS29571_CommonData.Ipv4Addr    ipv4Address optional,
+    TS29571_CommonData.Ipv6Prefix    ipv6AddressPrefix optional,
+    TS29571_CommonData.Ipv6Prefix    relIpv6AddressPrefix optional,
+    TS29571_CommonData.MacAddr48    relUeMac optional,
+    TS29571_CommonData.MacAddr48    ueMac optional,
+    TS29571_CommonData.Ambr    subsSessAmbr optional,
+    TS29571_CommonData.DefaultQosInformation    subsDefQos optional,
+    AccuUsageReport    accuUsageReport optional,
+    boolean threegppPsDataOffStatus optional,
+    set of       AppDetectionInfo    appDetectionInfos optional,
+    set of       RuleReport    ruleReports optional,
+    TS29571_CommonData.DateTime    userLocationInfoTime optional,
+    set of record {
+      universal charstring key,
+      TS29571_CommonData.PresenceInfo    additionalProperties
+    } repPraInfos optional,
+    UeInitiatedResourceRequest    ueInitResReq optional,
+    boolean refQosIndication optional,
+    TS29571_CommonData.TraceData    traceReq optional
+  } with {
+    variant (repPraInfos) "as map"
+    variant (threegppPsDataOffStatus) "name as '3gppPsDataOffStatus'"
+  }
+
+  type set DnaiReport {
+    TS29571_CommonData.Uri    notificationUri,
+    TS29571_CommonData.DnaiChangeType    dnaiChgType optional
+  }
+
+  type set TerminationNotification {
+    TS29571_CommonData.Uri    resourceUri
+  }
+
+  type set AppDetectionInfo {
+    charstring appId,
+    charstring instanceId optional,
+    set of       FlowInformation    sdfDescriptions optional
+  }
+
+  type set AccNetChId {
+    charstring accNetChaIdValue,
+    set of       charstring refPccRuleIds optional,
+    boolean sessionChScope optional
+  }
+
+  type set RequestedRuleData {
+    set of       charstring refPccRuleIds,
+    set of       RequestedRuleDataType    reqData
+  }
+
+  type set RequestedUsageData {
+    set of       charstring refUmIds optional,
+    boolean allUmIds optional
+  }
+
+  type set UeCampingRep {
+    TS29571_CommonData.AccessType    accessType optional,
+    TS29571_CommonData.AccessType    ratType optional,
+    TS29571_CommonData.NetworkId    servingNetwork optional,
+    TS29571_CommonData.UserLocation    userLocationInfo optional,
+    TS29571_CommonData.TimeZone    ueTimeZone optional
+  }
+
+  type set RuleReport {
+    set of       charstring pccRuleIds optional,
+    RuleStatus    ruleStatus optional,
+    set of       TS29514_Npcf_PolicyAuthorization.ContentVersion    contVers optional,
+    FailureCode    failureCode optional,
+    TS32291_Nchf_ConvergedCharging.FinalUnitAction    finUnitAct optional
+  }
+
+  type set of     RanNasRelCause    ranNasRelCauses
+
+  type set RanNasRelCause {
+    TS29571_CommonData.NgApCause    ngApCause optional,
+    TS29571_CommonData.FiveGMmCause    fiveGMmCause optional,
+    FiveGSmCause    fiveGSmCause optional
+  } with {
+    variant (fiveGMmCause) "name as '5GMmCause'"
+    variant (fiveGSmCause) "name as '5GSmCause'"
+  }
+
+  type set UeInitiatedResourceRequest {
+    PacketFilterOperation    packFiltOp,
+    set of       PacketFilterInfo    packFiltInfo,
+    RequestedQos    reqQos optional
+  }
+
+  type set PacketFilterInfo {
+    charstring packFiltId optional,
+    integer precedence optional,
+    PacketFilterContent    packFiltCont optional,
+    charstring tosTrafficClass optional,
+    charstring spi optional,
+    charstring flowLabel optional,
+    FlowDirection    flowDirection optional
+  }
+
+  type set RequestedQos {
+    TS29571_CommonData.FiveQi    fiveqi optional,
+    TS29571_CommonData.BitRate    gbrUl optional,
+    TS29571_CommonData.BitRate    gbrDl optional
+  } with {
+    variant (fiveqi) "name as '5qi'"
+  }
+
+
+  type TS29571_CommonData.Uinteger    FiveGSmCause
+
+  type charstring PacketFilterContent
+
+  type charstring FlowDescription
+
+  type integer Volume
+
+  type TS29512_CommonData.FlowDirection_enum FlowDirection_enum
+
+  type TS29512_CommonData.FlowDirection FlowDirection
+
+
+  type enumerated ReportingLevel_enum { SER_ID_LEVEL, RAT_GR_LEVEL, SPON_CON_LEVEL}
+
+  type union ReportingLevel {
+    ReportingLevel_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated MeteringMethod_enum { DURATION, VOLUME, DURATION_VOLUME, EVENT}
+
+  type union MeteringMethod {
+    MeteringMethod_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated PolicyControlRequestTrigger_enum { PLMN_CH, RES_MO_RE, AC_TY_CH, UE_IP_CH, UE_MAC_CH, AN_CH_COR, US_RE, APP_STA, APP_STO, AN_INFO, CM_SES_FAIL, PS_DA_OFF, DEF_QOS_CH, SE_AMBR_CH, PCC_RMV, QOS_STO, QOS_STA, NO_CREDIT, PRA_CH, SAREA_CH, SCNN_CH, ENF_PCC_RUL, RE_TIMEOUT, RES_RELEASE, SUCC_RES_ALLO}
+
+  type union PolicyControlRequestTrigger {
+    PolicyControlRequestTrigger_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated RequestedRuleDataType_enum { CH_ID, MS_TIME_ZONE, USER_LOC_INFO, RES_RELEASE, SUCC_RES_ALLO}
+
+  type union RequestedRuleDataType {
+    RequestedRuleDataType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated RuleStatus_enum { ACTIVE, INACTIVE}
+
+  type union RuleStatus {
+    RuleStatus_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated FailureCode_enum { UNK_RULE_ID, RA_GR_ERR, SER_ID_ERR, NF_MAL, RES_LIM, MAX_NR_QoS_FLOW, MISS_FLOW_INFO, RES_ALLO_FAIL, UNSUCC_QOS_VAL, INCOR_FLOW_INFO, PS_TO_CS_HAN, APP_ID_ERR, NO_QOS_FLOW_BOUND, FILTER_RES, MISS_REDI_SER_ADDR, CM_END_USER_SER_DENIED, CM_CREDIT_CON_NOT_APP, CM_AUTH_REJ, CM_USER_UNK, CM_RAT_FAILED, SESS_AMBR_FAILURE, DEF_QOS_FAILURL}
+
+  type union FailureCode {
+    FailureCode_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated AfSigProtocol_enum { NO_INFORMATION, SIP}
+
+  type union AfSigProtocol {
+    AfSigProtocol_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated PacketFilterOperation_enum { DELETION, ADDITION, MODIFICATION}
+
+  type union PacketFilterOperation {
+    PacketFilterOperation_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated RedirectAddressType_enum { IPV4_ADDR, IPV6_ADDR, URL, SIP_URI}
+
+  type union RedirectAddressType {
+    RedirectAddressType_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+
+
+
+
+} with {
+  encode "JSON"
+}