GSM TAP3.12 import format, RT#20767
authorIvan Kohler <ivan@freeside.biz>
Thu, 10 Jan 2013 00:22:28 +0000 (16:22 -0800)
committerIvan Kohler <ivan@freeside.biz>
Thu, 10 Jan 2013 00:22:28 +0000 (16:22 -0800)
FS/FS/Record.pm
FS/FS/Schema.pm
FS/FS/cdr.pm
FS/FS/cdr/gsm_tap3_12.pm [new file with mode: 0644]

index ca68c35..252b760 100644 (file)
@@ -1451,6 +1451,7 @@ sub process_batch_import {
     format_sep_chars           => $opt->{format_sep_chars},
     format_fixedlength_formats => $opt->{format_fixedlength_formats},
     format_xml_formats         => $opt->{format_xml_formats},
+    format_asn_formats         => $opt->{format_asn_formats},
     format_row_callbacks       => $opt->{format_row_callbacks},
     #per-import
     job                        => $job,
@@ -1533,8 +1534,9 @@ sub batch_import {
   my $file    = $param->{file};
   my $params  = $param->{params} || {};
 
-  my( $type, $header, $sep_char, $fixedlength_format, 
-      $xml_format, $row_callback, @fields );
+  my( $type, $header, $sep_char,
+      $fixedlength_format, $xml_format, $asn_format,
+      $row_callback, @fields );
 
   my $postinsert_callback = '';
   $postinsert_callback = $param->{'postinsert_callback'}
@@ -1572,6 +1574,11 @@ sub batch_import {
         ? $param->{'format_xml_formats'}{ $param->{'format'} }
         : '';
 
+    $asn_format =
+      $param->{'format_asn_formats'}
+        ? $param->{'format_asn_formats'}{ $param->{'format'} }
+        : '';
+
     $row_callback =
       $param->{'format_row_callbacks'}
         ? $param->{'format_row_callbacks'}{ $param->{'format'} }
@@ -1652,7 +1659,9 @@ sub batch_import {
     $count++;
 
     $row = $header || 0;
+
   } elsif ( $type eq 'xml' ) {
+
     # FS::pay_batch
     eval "use XML::Simple;";
     die $@ if $@;
@@ -1668,6 +1677,24 @@ sub batch_import {
     $rows = $rows->{$_} foreach @$xmlrow;
     $rows = [ $rows ] if ref($rows) ne 'ARRAY';
     $count = @buffer = @$rows;
+
+  } elsif ( $type eq 'asn.1' ) {
+
+    eval "use Convert::ASN1";
+    die $@ if $@;
+
+    my $asn = Convert::ASN1->new;
+    $asn->prepare( $asn_format->{'spec'} ) or die $asn->error;
+
+    $parser = $asn->find( $asn_format->{'macro'} ) or die $asn->error;
+
+    my $data = slurp($file);
+    my $asn_output = $parser->decode( $data )
+      or die "No ". $asn_format->{'macro'}. " found\n";
+
+    my $rows = &{ $asn_format->{'arrayref'} }( $asn_output );
+    $count = @buffer = @$rows;
+
   } else {
     die "Unknown file type $type\n";
   }
@@ -1711,6 +1738,7 @@ sub batch_import {
   while (1) {
 
     my @columns = ();
+    my %hash = %$params;
     if ( $type eq 'csv' ) {
 
       last unless scalar(@buffer);
@@ -1747,16 +1775,25 @@ sub batch_import {
       #warn $z++. ": $_\n" for @columns;
 
     } elsif ( $type eq 'xml' ) {
+
       # $parser = [ 'Column0Key', 'Column1Key' ... ]
       last unless scalar(@buffer);
       my $row = shift @buffer;
       @columns = @{ $row }{ @$parser };
+
+    } elsif ( $type eq 'asn.1' ) {
+
+      last unless scalar(@buffer);
+      my $row = shift @buffer;
+      foreach my $key ( keys %{ $asn_format->{map} } ) {
+        $hash{$key} = &{ $asn_format->{map}{$key} }( $row );
+      }
+
     } else {
       die "Unknown file type $type\n";
     }
 
     my @later = ();
-    my %hash = %$params;
 
     foreach my $field ( @fields ) {
 
index cbcd27b..69e21da 100644 (file)
@@ -3333,6 +3333,12 @@ sub tables_hashref {
         'quantity',                'int', 'NULL',      '', '', '', 
 
         'upstream_rateid',         'int', 'NULL',      '', '', '',
+
+        ###
+        # more fields, for GSM imports
+        ###
+        'servicecode',             'int', 'NULL',      '', '', '',
+        'quantity_able',           'int', 'NULL',      '', '', '', 
         
         ###
         #and now for our own fields
@@ -3341,8 +3347,9 @@ sub tables_hashref {
         'cdrtypenum',              'int', 'NULL',      '', '', '',
 
         'charged_party',       'varchar', 'NULL', $char_d, '', '',
+        'charged_party_imsi',  'varchar', 'NULL', $char_d, '', '',
 
-        'upstream_price',      'decimal', 'NULL',  '10,4', '', '', 
+        'upstream_price',      'decimal', 'NULL',  '10,5', '', '', 
         'upstream_src_regionname', 'varchar', 'NULL', $char_d, '', '',
         'upstream_dst_regionname', 'varchar', 'NULL', $char_d, '', '',
 
index fdec921..fedf28a 100644 (file)
@@ -11,6 +11,7 @@ use Date::Parse;
 use Date::Format;
 use Time::Local;
 use List::Util qw( first min );
+use Text::CSV_XS;
 use FS::UID qw( dbh );
 use FS::Conf;
 use FS::Record qw( qsearch qsearchs );
@@ -325,6 +326,10 @@ sub check {
     $self->billsec(  $self->enddate - $self->answerdate );
   } 
 
+  if ( ! $self->enddate && $self->startdate && $self->duration ) {
+    $self->enddate( $self->startdate + $self->duration );
+  }
+
   $self->set_charged_party;
 
   #check the foreign keys even?
@@ -1286,8 +1291,6 @@ sub downstream_csv {
   #$opt{'money_char'} ||= $conf->config('money_char') || '$';
   $opt{'money_char'} ||= FS::Conf->new->config('money_char') || '$';
 
-  eval "use Text::CSV_XS;";
-  die $@ if $@;
   my $csv = new Text::CSV_XS;
 
   my @columns =
@@ -1578,6 +1581,11 @@ my %import_options = (
           keys %cdr_info
     },
 
+  'format_asn_formats' =>
+    { map { $_ => $cdr_info{$_}->{'asn_format'}; }
+          keys %cdr_info
+    },
+
   'format_row_callbacks' => { map { $_ => $cdr_info{$_}->{'row_callback'}; }
                                   keys %cdr_info
                             },
diff --git a/FS/FS/cdr/gsm_tap3_12.pm b/FS/FS/cdr/gsm_tap3_12.pm
new file mode 100644 (file)
index 0000000..d1536c0
--- /dev/null
@@ -0,0 +1,1563 @@
+package FS::cdr::gsm_tap3_12;
+use base qw( FS::cdr );
+
+use strict;
+use vars qw( %info );
+use Time::Local;
+#use Data::Dumper;
+
+%info = (
+  'name'          => 'GSM TAP3 release 12',
+  'weight'        => 50,
+  'type'          => 'asn.1',
+  'import_fields' => [],
+  'asn_format'    => {
+    'spec'     => _asn_spec(),
+    'macro'    => 'TransferBatch', #XXX & skip the Notification ones?
+    'arrayref' => sub { shift->{'callEventDetails'}; },
+    'map'      => {
+                    'startdate'          => sub { my $callinfo = shift->{mobileOriginatedCall}{basicCallInformation};
+                                                  my $timestamp = $callinfo->{callEventStartTimeStamp};
+                                                  my $localTimeStamp = $timestamp->{localTimeStamp};
+                                                  my $utcTimeOffsetCode = $timestamp->{utcTimeOffsetCode}; #XXX not handled, utcTimeOffsetInfo in header
+                                                  $localTimeStamp =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ or die "unparsable timestamp: $localTimeStamp\n"; #. Dumper($callinfo);
+                                                  my($year, $mon, $day, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6);
+                                                  timelocal($sec, $min, $hour, $day, $mon-1, $year);
+                                                },
+                    'duration'           => sub { shift->{mobileOriginatedCall}{basicCallInformation}{totalCallEventDuration} },
+                    'billsec'            => sub { shift->{mobileOriginatedCall}{basicCallInformation}{totalCallEventDuration} }, #same..
+                    'src'                => sub { shift->{mobileOriginatedCall}{basicCallInformation}{chargeableSubscriber}{simChargeableSubscriber}{msisdn} },
+                    'charged_party_imsi' => sub { shift->{mobileOriginatedCall}{basicCallInformation}{chargeableSubscriber}{simChargeableSubscriber}{imsi} },
+                    'dst'                => sub { shift->{mobileOriginatedCall}{basicCallInformation}{destination}{calledNumber} }, #dialledDigits?
+                    'carrierid'          => sub { shift->{mobileOriginatedCall}{locationInformation}{networkLocation}{recEntityCode} },
+                    'userfield'          => sub { shift->{mobileOriginatedCall}{operatorSpecInformation}[0] },
+                    'servicecode'        => sub { shift->{mobileOriginatedCall}{basicServiceUsedList}[0]{basicService}{serviceCode}{teleServiceCode} },
+                    'upstream_price'     => sub { sprintf('%.5f', shift->{mobileOriginatedCall}{basicServiceUsedList}[0]{chargeInformationList}[0]{chargeDetailList}[0]{charge} / 100000 ) }, #XXX numberOfDecimalPlaces in header
+                    'calltypenum'        => sub { shift->{mobileOriginatedCall}{basicServiceUsedList}[0]{chargeInformationList}[0]{callTypeGroup}{callTypelevel1} },
+                    'quantity'           => sub { shift->{mobileOriginatedCall}{basicServiceUsedList}[0]{chargeInformationList}[0]{chargedUnits} },
+                    'quantity_able'      => sub { shift->{mobileOriginatedCall}{basicServiceUsedList}[0]{chargeInformationList}[0]{chargeableUnits} },
+                  },
+  },
+);
+
+sub _asn_spec {
+  <<'END';
+--
+--
+-- The following ASN.1 specification defines the abstract syntax for 
+--
+--        Data Record Format Version 03 
+--                           Release 12
+--
+-- The specification is structured as follows:
+--   (1) structure of the Tap batch
+--   (2) definition of the individual Tap ‘records’ 
+--   (3) Tap data items and groups of data items used within (2)
+--   (4) Common, non-Tap data types
+--   (5) Tap data items for content charging
+--
+-- It is mainly a translation from the logical structure
+-- diagrams. Where appropriate, names used within the 
+-- logical structure diagrams have been shortened.
+-- For repeating data items the name as used within the logical
+-- structure have been extended by adding ‘list’ or ‘table’
+-- (in some instances).
+--
+
+
+-- TAP-0312  DEFINITIONS IMPLICIT TAGS  ::= 
+
+-- BEGIN 
+
+--
+-- Structure of a Tap batch 
+--
+
+DataInterChange ::= CHOICE 
+{
+    transferBatch TransferBatch, 
+    notification  Notification,
+...
+}
+
+-- Batch Control Information must always, both logically and physically,
+-- be the first group/item within Transfer Batch – this ensures that the
+-- TAP release version can be readily identified.  Any new groups/items
+-- required may be inserted at any point after Batch Control Information
+
+TransferBatch ::= [APPLICATION 1] SEQUENCE
+{
+    batchControlInfo       BatchControlInfo            OPTIONAL, -- *m.m.
+    accountingInfo         AccountingInfo              OPTIONAL,
+    networkInfo            NetworkInfo                 OPTIONAL, -- *m.m.
+    messageDescriptionInfo MessageDescriptionInfoList  OPTIONAL,
+    callEventDetails       CallEventDetailList         OPTIONAL, -- *m.m.
+    auditControlInfo       AuditControlInfo            OPTIONAL, -- *m.m.
+...
+}
+
+Notification ::= [APPLICATION 2] SEQUENCE
+{
+    sender                     Sender                     OPTIONAL, -- *m.m.
+    recipient                   Recipient                  OPTIONAL, -- *m.m.
+    fileSequenceNumber          FileSequenceNumber         OPTIONAL, -- *m.m.
+    rapFileSequenceNumber       RapFileSequenceNumber      OPTIONAL,
+    fileCreationTimeStamp       FileCreationTimeStamp      OPTIONAL,
+    fileAvailableTimeStamp      FileAvailableTimeStamp     OPTIONAL, -- *m.m.
+    transferCutOffTimeStamp     TransferCutOffTimeStamp    OPTIONAL, -- *m.m.
+    specificationVersionNumber SpecificationVersionNumber OPTIONAL, -- *m.m.
+    releaseVersionNumber        ReleaseVersionNumber       OPTIONAL, -- *m.m.
+    fileTypeIndicator           FileTypeIndicator          OPTIONAL,
+    operatorSpecInformation     OperatorSpecInfoList       OPTIONAL,
+...
+}
+
+CallEventDetailList ::=  [APPLICATION 3] SEQUENCE OF CallEventDetail
+
+CallEventDetail ::= CHOICE
+{
+    mobileOriginatedCall   MobileOriginatedCall,
+    mobileTerminatedCall   MobileTerminatedCall,
+    supplServiceEvent      SupplServiceEvent,
+    serviceCentreUsage     ServiceCentreUsage,
+    gprsCall               GprsCall,
+    contentTransaction     ContentTransaction,
+    locationService        LocationService,
+    messagingEvent         MessagingEvent,
+    mobileSession          MobileSession,
+...
+}
+
+--
+-- Structure of the individual Tap records
+--
+
+BatchControlInfo ::= [APPLICATION 4] SEQUENCE
+{
+    sender                      Sender                         OPTIONAL, -- *m.m.
+    recipient                   Recipient                              OPTIONAL, -- *m.m.
+    fileSequenceNumber          FileSequenceNumber             OPTIONAL, -- *m.m.
+    fileCreationTimeStamp       FileCreationTimeStamp          OPTIONAL,
+    transferCutOffTimeStamp     TransferCutOffTimeStamp        OPTIONAL, -- *m.m.
+    fileAvailableTimeStamp      FileAvailableTimeStamp         OPTIONAL, -- *m.m.
+    specificationVersionNumber SpecificationVersionNumber      OPTIONAL, -- *m.m.
+    releaseVersionNumber        ReleaseVersionNumber           OPTIONAL, -- *m.m.
+    fileTypeIndicator           FileTypeIndicator              OPTIONAL,
+    rapFileSequenceNumber       RapFileSequenceNumber          OPTIONAL,
+    operatorSpecInformation     OperatorSpecInfoList           OPTIONAL,
+...
+}
+
+AccountingInfo ::= [APPLICATION 5] SEQUENCE
+{
+    taxation                  TaxationList           OPTIONAL,
+    discounting               DiscountingList        OPTIONAL,
+    localCurrency             LocalCurrency          OPTIONAL, -- *m.m.
+    tapCurrency               TapCurrency            OPTIONAL,
+    currencyConversionInfo    CurrencyConversionList OPTIONAL,
+    tapDecimalPlaces          TapDecimalPlaces       OPTIONAL, -- *m.m.
+...
+}
+
+NetworkInfo ::= [APPLICATION 6] SEQUENCE
+{
+    utcTimeOffsetInfo         UtcTimeOffsetInfoList OPTIONAL, -- *m.m.
+    recEntityInfo             RecEntityInfoList     OPTIONAL,
+...
+}
+
+MessageDescriptionInfoList ::= [APPLICATION 8] SEQUENCE OF MessageDescriptionInformation
+
+MobileOriginatedCall ::= [APPLICATION 9] SEQUENCE
+{
+    basicCallInformation    MoBasicCallInformation    OPTIONAL, -- *m.m.
+    locationInformation     LocationInformation       OPTIONAL, -- *m.m.
+    equipmentIdentifier     ImeiOrEsn                 OPTIONAL,
+    basicServiceUsedList    BasicServiceUsedList      OPTIONAL, -- *m.m.
+    supplServiceCode        SupplServiceCode          OPTIONAL,
+    thirdPartyInformation   ThirdPartyInformation     OPTIONAL,
+    camelServiceUsed        CamelServiceUsed          OPTIONAL,
+    operatorSpecInformation OperatorSpecInfoList      OPTIONAL,
+...
+}    
+
+MobileTerminatedCall ::= [APPLICATION 10] SEQUENCE
+{
+    basicCallInformation    MtBasicCallInformation    OPTIONAL, -- *m.m.
+    locationInformation     LocationInformation       OPTIONAL, -- *m.m.
+    equipmentIdentifier     ImeiOrEsn                 OPTIONAL,
+    basicServiceUsedList    BasicServiceUsedList      OPTIONAL, -- *m.m.
+    camelServiceUsed        CamelServiceUsed          OPTIONAL,
+    operatorSpecInformation OperatorSpecInfoList      OPTIONAL,
+...
+}    
+
+
+SupplServiceEvent ::= [APPLICATION 11] SEQUENCE
+{
+    chargeableSubscriber      ChargeableSubscriber    OPTIONAL, -- *m.m.
+    rapFileSequenceNumber     RapFileSequenceNumber   OPTIONAL,
+    locationInformation       LocationInformation     OPTIONAL, -- *m.m.
+    equipmentIdentifier       ImeiOrEsn               OPTIONAL,
+    supplServiceUsed          SupplServiceUsed        OPTIONAL, -- *m.m.
+    operatorSpecInformation   OperatorSpecInfoList    OPTIONAL,
+...
+}
+
+
+ServiceCentreUsage ::= [APPLICATION 12] SEQUENCE
+{
+    basicInformation          ScuBasicInformation     OPTIONAL, -- *m.m.
+    rapFileSequenceNumber     RapFileSequenceNumber   OPTIONAL,
+    servingNetwork            ServingNetwork          OPTIONAL,
+    recEntityCode             RecEntityCode           OPTIONAL, -- *m.m.
+    chargeInformation         ChargeInformation       OPTIONAL, -- *m.m.
+    scuChargeType             ScuChargeType           OPTIONAL, -- *m.m.
+    scuTimeStamps             ScuTimeStamps           OPTIONAL, -- *m.m.
+    operatorSpecInformation   OperatorSpecInfoList    OPTIONAL,
+...
+}
+
+GprsCall ::= [APPLICATION 14] SEQUENCE
+{
+    gprsBasicCallInformation  GprsBasicCallInformation  OPTIONAL, -- *m.m.
+    gprsLocationInformation   GprsLocationInformation   OPTIONAL, -- *m.m.
+    equipmentIdentifier       ImeiOrEsn                 OPTIONAL,
+    gprsServiceUsed           GprsServiceUsed           OPTIONAL, -- *m.m.
+    camelServiceUsed          CamelServiceUsed          OPTIONAL,
+    operatorSpecInformation   OperatorSpecInfoList      OPTIONAL,
+...
+}
+
+ContentTransaction ::= [APPLICATION 17] SEQUENCE
+{
+ contentTransactionBasicInfo ContentTransactionBasicInfo OPTIONAL, -- *m.m.
+ chargedPartyInformation     ChargedPartyInformation     OPTIONAL, -- *m.m.
+ servingPartiesInformation   ServingPartiesInformation   OPTIONAL, -- *m.m.
+ contentServiceUsed          ContentServiceUsedList      OPTIONAL, -- *m.m.
+ operatorSpecInformation     OperatorSpecInfoList        OPTIONAL,
+...
+}
+
+LocationService ::= [APPLICATION 297] SEQUENCE
+{
+    rapFileSequenceNumber        RapFileSequenceNumber       OPTIONAL,
+    recEntityCode                        RecEntityCode               OPTIONAL, -- *m.m.
+    callReference                        CallReference               OPTIONAL,
+    trackingCustomerInformation TrackingCustomerInformation OPTIONAL,
+    lCSSPInformation             LCSSPInformation            OPTIONAL,
+    trackedCustomerInformation  TrackedCustomerInformation  OPTIONAL,
+    locationServiceUsage         LocationServiceUsage        OPTIONAL, -- *m.m.
+    operatorSpecInformation      OperatorSpecInfoList        OPTIONAL,
+...
+}
+
+MessagingEvent ::= [APPLICATION 433] SEQUENCE
+{
+    messagingEventService      MessagingEventService     OPTIONAL, -- *m.m.
+    chargedParty              ChargedParty              OPTIONAL, -- *m.m.
+    rapFileSequenceNumber      RapFileSequenceNumber     OPTIONAL,
+    simToolkitIndicator                SimToolkitIndicator       OPTIONAL,
+    geographicalLocation       GeographicalLocation      OPTIONAL,
+    eventReference            EventReference             OPTIONAL, -- *m.m.
+
+    recEntityCodeList                  RecEntityCodeList         OPTIONAL, -- *m.m.  
+    networkElementList         NetworkElementList        OPTIONAL,
+    locationArea              LocationArea               OPTIONAL,
+    cellId                     CellId                            OPTIONAL,    
+    serviceStartTimestamp      ServiceStartTimestamp     OPTIONAL, -- *m.m.
+    nonChargedParty            NonChargedParty           OPTIONAL,
+    exchangeRateCode           ExchangeRateCode                  OPTIONAL,
+    callTypeGroup                      CallTypeGroup             OPTIONAL, -- *m.m.
+    charge                             Charge                    OPTIONAL, -- *m.m.
+    taxInformationList         TaxInformationList        OPTIONAL,
+    operatorSpecInformation   OperatorSpecInfoList      OPTIONAL,
+...
+}
+
+MobileSession ::= [APPLICATION 434] SEQUENCE
+{
+    mobileSessionService       MobileSessionService      OPTIONAL, -- *m.m.
+    chargedParty              ChargedParty              OPTIONAL, -- *m.m.
+    rapFileSequenceNumber      RapFileSequenceNumber     OPTIONAL,
+    simToolkitIndicator                SimToolkitIndicator       OPTIONAL,
+    geographicalLocation       GeographicalLocation      OPTIONAL,
+    locationArea              LocationArea               OPTIONAL,
+    cellId                     CellId                            OPTIONAL,
+    eventReference            EventReference             OPTIONAL, -- *m.m.
+
+    recEntityCodeList                  RecEntityCodeList         OPTIONAL, -- *m.m.
+    serviceStartTimestamp      ServiceStartTimestamp     OPTIONAL, -- *m.m.
+    causeForTerm              CauseForTerm             OPTIONAL,
+    totalCallEventDuration     TotalCallEventDuration    OPTIONAL, -- *m.m.
+    nonChargedParty            NonChargedParty           OPTIONAL,
+    sessionChargeInfoList     SessionChargeInfoList     OPTIONAL, -- *m.m.
+    operatorSpecInformation   OperatorSpecInfoList      OPTIONAL,
+...
+}
+
+AuditControlInfo ::= [APPLICATION 15] SEQUENCE
+{
+    earliestCallTimeStamp        EarliestCallTimeStamp       OPTIONAL,
+    latestCallTimeStamp          LatestCallTimeStamp         OPTIONAL,
+    totalCharge                  TotalCharge                 OPTIONAL, -- *m.m.
+    totalChargeRefund            TotalChargeRefund           OPTIONAL,
+    totalTaxRefund               TotalTaxRefund              OPTIONAL,
+    totalTaxValue                TotalTaxValue               OPTIONAL, -- *m.m.
+    totalDiscountValue           TotalDiscountValue          OPTIONAL, -- *m.m.
+    totalDiscountRefund                  TotalDiscountRefund         OPTIONAL,
+    totalAdvisedChargeValueList TotalAdvisedChargeValueList OPTIONAL,
+    callEventDetailsCount        CallEventDetailsCount       OPTIONAL, -- *m.m.
+    operatorSpecInformation      OperatorSpecInfoList        OPTIONAL,
+...
+}
+
+
+-- 
+-- Tap data items and groups of data items
+--
+
+AccessPointNameNI ::= [APPLICATION 261] AsciiString --(SIZE(1..63))
+
+AccessPointNameOI ::= [APPLICATION 262] AsciiString --(SIZE(1..37))
+
+ActualDeliveryTimeStamp ::= [APPLICATION 302] DateTime
+
+AddressStringDigits ::= BCDString
+
+AdvisedCharge ::= [APPLICATION 349] Charge
+AdvisedChargeCurrency ::= [APPLICATION 348] Currency
+AdvisedChargeInformation ::= [APPLICATION 351] SEQUENCE
+{
+    paidIndicator         PaidIndicator         OPTIONAL,
+    paymentMethod         PaymentMethod         OPTIONAL,
+    advisedChargeCurrency AdvisedChargeCurrency OPTIONAL,
+    advisedCharge         AdvisedCharge         OPTIONAL, -- *m.m.
+    commission            Commission            OPTIONAL,
+...
+}
+AgeOfLocation ::= [APPLICATION 396] INTEGER
+
+BasicService ::= [APPLICATION 36] SEQUENCE
+{
+    serviceCode                 BasicServiceCode       OPTIONAL, -- *m.m.
+    transparencyIndicator       TransparencyIndicator  OPTIONAL,
+    fnur                        Fnur                   OPTIONAL,
+    userProtocolIndicator       UserProtocolIndicator  OPTIONAL,
+    guaranteedBitRate           GuaranteedBitRate      OPTIONAL,
+    maximumBitRate              MaximumBitRate         OPTIONAL,
+...
+}
+
+BasicServiceCode ::= [APPLICATION 426] CHOICE 
+{
+    teleServiceCode      TeleServiceCode,
+    bearerServiceCode    BearerServiceCode,
+...
+}
+
+BasicServiceCodeList ::= [APPLICATION 37] SEQUENCE OF BasicServiceCode
+
+BasicServiceUsed ::= [APPLICATION 39] SEQUENCE
+{
+    basicService                BasicService          OPTIONAL, -- *m.m.
+    chargingTimeStamp           ChargingTimeStamp     OPTIONAL,
+    chargeInformationList       ChargeInformationList OPTIONAL, -- *m.m.
+    hSCSDIndicator              HSCSDIndicator        OPTIONAL,
+...
+}
+
+BasicServiceUsedList ::= [APPLICATION 38] SEQUENCE OF BasicServiceUsed
+
+BearerServiceCode ::= [APPLICATION 40] HexString --(SIZE(2))
+
+EventReference ::= [APPLICATION 435]  AsciiString
+
+
+CalledNumber ::= [APPLICATION 407] AddressStringDigits
+
+CalledPlace ::= [APPLICATION 42] AsciiString
+
+CalledRegion ::= [APPLICATION 46] AsciiString
+
+CallEventDetailsCount ::= [APPLICATION 43] INTEGER 
+
+CallEventStartTimeStamp ::= [APPLICATION 44] DateTime
+
+CallingNumber ::= [APPLICATION 405] AddressStringDigits
+
+CallOriginator ::= [APPLICATION 41]  SEQUENCE
+{
+    callingNumber               CallingNumber          OPTIONAL,
+    clirIndicator               ClirIndicator         OPTIONAL,
+    sMSOriginator               SMSOriginator         OPTIONAL,
+...
+}
+
+CallReference ::= [APPLICATION 45] OCTET STRING --(SIZE(1..8))
+
+CallTypeGroup ::= [APPLICATION 258] SEQUENCE
+{
+    callTypeLevel1      CallTypeLevel1           OPTIONAL, -- *m.m.
+    callTypeLevel2      CallTypeLevel2           OPTIONAL, -- *m.m.
+    callTypeLevel3      CallTypeLevel3           OPTIONAL, -- *m.m.
+...
+}
+
+CallTypeLevel1 ::= [APPLICATION 259] INTEGER
+
+CallTypeLevel2 ::= [APPLICATION 255] INTEGER
+
+CallTypeLevel3 ::= [APPLICATION 256] INTEGER
+
+CamelDestinationNumber ::= [APPLICATION 404] AddressStringDigits
+
+CamelInvocationFee ::= [APPLICATION 422] AbsoluteAmount
+
+CamelServiceKey ::= [APPLICATION 55] INTEGER
+
+CamelServiceLevel ::= [APPLICATION 56] INTEGER
+
+CamelServiceUsed ::= [APPLICATION 57] SEQUENCE
+{
+    camelServiceLevel         CamelServiceLevel                OPTIONAL,
+    camelServiceKey           CamelServiceKey                  OPTIONAL, -- *m.m.
+    defaultCallHandling       DefaultCallHandlingIndicator     OPTIONAL,
+    exchangeRateCode          ExchangeRateCode                         OPTIONAL,
+    taxInformation            TaxInformationList               OPTIONAL,
+    discountInformation       DiscountInformation              OPTIONAL,
+    camelInvocationFee        CamelInvocationFee               OPTIONAL,
+    threeGcamelDestination    ThreeGcamelDestination           OPTIONAL,
+    cseInformation            CseInformation                   OPTIONAL,
+...
+}
+
+CauseForTerm ::= [APPLICATION 58] INTEGER
+
+CellId ::= [APPLICATION 59] INTEGER 
+
+Charge ::= [APPLICATION 62] AbsoluteAmount
+
+ChargeableSubscriber ::= [APPLICATION 427] CHOICE 
+{
+    simChargeableSubscriber SimChargeableSubscriber,
+    minChargeableSubscriber MinChargeableSubscriber,
+...
+}
+
+ChargeableUnits ::= [APPLICATION 65]  INTEGER
+
+ChargeDetail ::= [APPLICATION 63] SEQUENCE
+{
+    chargeType              ChargeType                         OPTIONAL, -- *m.m.
+    charge                  Charge                             OPTIONAL, -- *m.m.
+    chargeableUnits         ChargeableUnits                    OPTIONAL,
+    chargedUnits            ChargedUnits                       OPTIONAL,
+    chargeDetailTimeStamp   ChargeDetailTimeStamp      OPTIONAL,
+...
+}
+
+ChargeDetailList ::= [APPLICATION 64] SEQUENCE OF ChargeDetail
+
+ChargeDetailTimeStamp ::= [APPLICATION 410] ChargingTimeStamp
+
+ChargedItem ::= [APPLICATION 66]  AsciiString --(SIZE(1))
+
+ChargedParty ::= [APPLICATION 436] SEQUENCE
+{
+    imsi                       Imsi                            OPTIONAL, -- *m.m.
+    msisdn                             Msisdn                  OPTIONAL,         
+    publicUserId                       PublicUserId            OPTIONAL,
+    homeBid                            HomeBid                 OPTIONAL,
+    homeLocationDescription    HomeLocationDescription OPTIONAL,
+    imei                               Imei                            OPTIONAL,
+...
+}
+
+ChargedPartyEquipment ::= [APPLICATION 323] SEQUENCE
+{
+    equipmentIdType EquipmentIdType OPTIONAL, -- *m.m.
+    equipmentId     EquipmentId     OPTIONAL, -- *m.m.
+...
+}
+ChargedPartyHomeIdentification ::= [APPLICATION 313] SEQUENCE
+{
+    homeIdType     HomeIdType     OPTIONAL, -- *m.m.
+    homeIdentifier HomeIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+ChargedPartyHomeIdList ::= [APPLICATION 314] SEQUENCE OF
+                                             ChargedPartyHomeIdentification
+
+ChargedPartyIdentification ::= [APPLICATION 309] SEQUENCE
+{
+    chargedPartyIdType         ChargedPartyIdType         OPTIONAL, -- *m.m.
+    chargedPartyIdentifier     ChargedPartyIdentifier     OPTIONAL, -- *m.m.
+...
+}
+
+ChargedPartyIdentifier ::= [APPLICATION 287] AsciiString
+
+ChargedPartyIdList ::= [APPLICATION 310] SEQUENCE OF ChargedPartyIdentification
+
+ChargedPartyIdType ::= [APPLICATION 305] INTEGER
+
+ChargedPartyInformation ::= [APPLICATION 324] SEQUENCE
+{
+    chargedPartyIdList       ChargedPartyIdList        OPTIONAL, -- *m.m.
+    chargedPartyHomeIdList   ChargedPartyHomeIdList    OPTIONAL,
+    chargedPartyLocationList ChargedPartyLocationList  OPTIONAL,
+    chargedPartyEquipment    ChargedPartyEquipment     OPTIONAL,
+...
+}
+ChargedPartyLocation ::= [APPLICATION 320] SEQUENCE
+{
+    locationIdType     LocationIdType     OPTIONAL, -- *m.m.
+    locationIdentifier LocationIdentifier OPTIONAL, -- *m.m.
+...
+}
+ChargedPartyLocationList ::= [APPLICATION 321] SEQUENCE OF ChargedPartyLocation
+ChargedPartyStatus ::= [APPLICATION 67] INTEGER 
+
+ChargedUnits ::= [APPLICATION 68]  INTEGER 
+
+ChargeInformation ::= [APPLICATION 69] SEQUENCE
+{
+    chargedItem         ChargedItem         OPTIONAL, -- *m.m.
+    exchangeRateCode    ExchangeRateCode    OPTIONAL,
+    callTypeGroup       CallTypeGroup       OPTIONAL,
+    chargeDetailList    ChargeDetailList    OPTIONAL, -- *m.m.
+    taxInformation      TaxInformationList  OPTIONAL,
+    discountInformation DiscountInformation OPTIONAL,
+...
+}
+
+ChargeInformationList ::= [APPLICATION 70] SEQUENCE OF ChargeInformation
+
+ChargeRefundIndicator ::= [APPLICATION 344] INTEGER
+ChargeType ::= [APPLICATION 71] NumberString --(SIZE(2..3))
+
+ChargingId ::= [APPLICATION 72] INTEGER
+
+ChargingPoint ::= [APPLICATION 73]  AsciiString --(SIZE(1))
+
+ChargingTimeStamp ::= [APPLICATION 74]  DateTime
+
+ClirIndicator ::= [APPLICATION 75] INTEGER
+
+Commission ::= [APPLICATION 350] Charge
+CompletionTimeStamp ::= [APPLICATION 76] DateTime
+
+ContentChargingPoint ::= [APPLICATION 345] INTEGER
+ContentProvider ::= [APPLICATION 327] SEQUENCE
+{
+    contentProviderIdType     ContentProviderIdType     OPTIONAL, -- *m.m.
+    contentProviderIdentifier ContentProviderIdentifier OPTIONAL, -- *m.m.
+...
+}
+ContentProviderIdentifier ::= [APPLICATION 292] AsciiString
+
+ContentProviderIdList ::= [APPLICATION 328] SEQUENCE OF ContentProvider
+
+ContentProviderIdType ::= [APPLICATION 291] INTEGER
+
+ContentProviderName ::= [APPLICATION 334] AsciiString
+ContentServiceUsed ::= [APPLICATION 352] SEQUENCE
+{
+    contentTransactionCode       ContentTransactionCode       OPTIONAL, -- *m.m.
+    contentTransactionType       ContentTransactionType       OPTIONAL, -- *m.m.
+    objectType                   ObjectType                   OPTIONAL,
+    transactionDescriptionSupp   TransactionDescriptionSupp   OPTIONAL,
+    transactionShortDescription  TransactionShortDescription  OPTIONAL, -- *m.m.
+    transactionDetailDescription TransactionDetailDescription OPTIONAL,
+    transactionIdentifier         TransactionIdentifier        OPTIONAL, -- *m.m.
+    transactionAuthCode          TransactionAuthCode          OPTIONAL,
+    dataVolumeIncoming           DataVolumeIncoming           OPTIONAL,
+    dataVolumeOutgoing           DataVolumeOutgoing           OPTIONAL,
+    totalDataVolume              TotalDataVolume              OPTIONAL,
+    chargeRefundIndicator        ChargeRefundIndicator        OPTIONAL,
+    contentChargingPoint         ContentChargingPoint         OPTIONAL,
+    chargeInformationList        ChargeInformationList        OPTIONAL,
+    advisedChargeInformation     AdvisedChargeInformation     OPTIONAL,
+...
+}
+
+ContentServiceUsedList ::= [APPLICATION 285] SEQUENCE OF ContentServiceUsed
+ContentTransactionBasicInfo ::= [APPLICATION 304] SEQUENCE
+{
+    rapFileSequenceNumber      RapFileSequenceNumber      OPTIONAL,
+    orderPlacedTimeStamp       OrderPlacedTimeStamp       OPTIONAL,
+    requestedDeliveryTimeStamp RequestedDeliveryTimeStamp OPTIONAL,
+    actualDeliveryTimeStamp    ActualDeliveryTimeStamp    OPTIONAL,
+    totalTransactionDuration   TotalTransactionDuration   OPTIONAL,
+    transactionStatus          TransactionStatus          OPTIONAL,
+...
+}
+
+ContentTransactionCode ::= [APPLICATION 336] INTEGER
+ContentTransactionType ::= [APPLICATION 337] INTEGER
+CseInformation ::= [APPLICATION 79] OCTET STRING --(SIZE(1..40))
+
+CurrencyConversion ::= [APPLICATION 106] SEQUENCE
+{
+    exchangeRateCode      ExchangeRateCode      OPTIONAL, -- *m.m.
+    numberOfDecimalPlaces NumberOfDecimalPlaces OPTIONAL, -- *m.m.
+    exchangeRate          ExchangeRate          OPTIONAL, -- *m.m.
+...
+}
+
+CurrencyConversionList ::= [APPLICATION 80] SEQUENCE OF CurrencyConversion
+
+CustomerIdentifier ::= [APPLICATION 364] AsciiString
+
+CustomerIdType ::= [APPLICATION 363] INTEGER
+
+DataVolume ::= INTEGER 
+
+DataVolumeIncoming ::= [APPLICATION 250] DataVolume
+
+DataVolumeOutgoing ::= [APPLICATION 251] DataVolume
+
+--
+--  The following datatypes are used to denote timestamps.
+--  Each timestamp consists of a local timestamp and a
+--  corresponding UTC time offset. 
+--  Except for the timestamps used within the Batch Control 
+--  Information and the Audit Control Information 
+--  the UTC time offset is identified by a code referencing
+--  the UtcTimeOffsetInfo.
+--  
+--
+-- We start with the “short” datatype referencing the 
+-- UtcTimeOffsetInfo.
+-- 
+
+DateTime ::= SEQUENCE 
+{
+     -- 
+     -- Local timestamps are noted in the format
+     --
+     --     CCYYMMDDhhmmss
+     --
+     -- where CC  =  century  (‘19’, ‘20’,...)
+     --       YY  =  year     (‘00’ – ‘99’)
+     --       MM  =  month    (‘01’, ‘02’, ... , ‘12’)
+     --       DD  =  day      (‘01’, ‘02’, ... , ‘31’)
+     --       hh  =  hour     (‘00’, ‘01’, ... , ‘23’)
+     --       mm  =  minutes  (‘00’, ‘01’, ... , ‘59’)
+     --       ss  =  seconds  (‘00’, ‘01’, ... , ‘59’)
+     -- 
+    localTimeStamp     LocalTimeStamp    OPTIONAL, -- *m.m.
+    utcTimeOffsetCode  UtcTimeOffsetCode OPTIONAL, -- *m.m.
+...
+}
+
+--
+-- The following version is the “long” datatype
+-- containing the UTC time offset directly. 
+--
+
+DateTimeLong ::= SEQUENCE 
+{
+    localTimeStamp     LocalTimeStamp OPTIONAL, -- *m.m.
+    utcTimeOffset      UtcTimeOffset  OPTIONAL, -- *m.m.
+...
+}
+
+DefaultCallHandlingIndicator ::= [APPLICATION 87] INTEGER
+
+DepositTimeStamp ::= [APPLICATION 88] DateTime
+
+Destination ::= [APPLICATION 89] SEQUENCE
+{
+    calledNumber                CalledNumber           OPTIONAL,
+    dialledDigits               DialledDigits         OPTIONAL,
+    calledPlace                 CalledPlace           OPTIONAL,
+    calledRegion                CalledRegion          OPTIONAL,
+    sMSDestinationNumber        SMSDestinationNumber  OPTIONAL,
+...
+}
+
+DestinationNetwork ::= [APPLICATION 90] NetworkId 
+
+DialledDigits ::= [APPLICATION 279] AsciiString
+
+Discount ::= [APPLICATION 412] DiscountValue
+
+DiscountableAmount ::= [APPLICATION 423] AbsoluteAmount
+
+DiscountApplied ::= [APPLICATION 428] CHOICE 
+{
+    fixedDiscountValue    FixedDiscountValue, 
+    discountRate          DiscountRate,
+...
+}
+
+DiscountCode ::= [APPLICATION 91] INTEGER
+
+DiscountInformation ::= [APPLICATION 96] SEQUENCE
+{
+    discountCode        DiscountCode           OPTIONAL, -- *m.m.
+    discount            Discount               OPTIONAL,
+    discountableAmount  DiscountableAmount     OPTIONAL,
+...
+}
+
+Discounting ::= [APPLICATION 94] SEQUENCE
+{
+    discountCode    DiscountCode    OPTIONAL, -- *m.m.
+    discountApplied DiscountApplied OPTIONAL, -- *m.m.
+...
+}
+
+DiscountingList ::= [APPLICATION 95]  SEQUENCE OF Discounting
+
+DiscountRate ::= [APPLICATION 92] PercentageRate
+
+DiscountValue ::= AbsoluteAmount
+
+DistanceChargeBandCode ::= [APPLICATION 98] AsciiString --(SIZE(1))
+
+EarliestCallTimeStamp ::= [APPLICATION 101] DateTimeLong
+
+ElementId ::= [APPLICATION 437] AsciiString
+
+ElementType ::= [APPLICATION 438] INTEGER
+
+EquipmentId ::= [APPLICATION 290] AsciiString
+
+EquipmentIdType ::= [APPLICATION 322] INTEGER
+
+Esn ::= [APPLICATION 103] NumberString
+
+ExchangeRate ::= [APPLICATION 104] INTEGER
+
+ExchangeRateCode ::= [APPLICATION 105] Code
+
+FileAvailableTimeStamp ::= [APPLICATION 107] DateTimeLong
+
+FileCreationTimeStamp ::= [APPLICATION 108] DateTimeLong
+
+FileSequenceNumber ::= [APPLICATION 109] NumberString --(SIZE(5))
+
+FileTypeIndicator ::= [APPLICATION 110] AsciiString --(SIZE(1))
+
+FixedDiscountValue ::= [APPLICATION 411] DiscountValue
+
+Fnur ::= [APPLICATION 111] INTEGER
+
+GeographicalLocation ::= [APPLICATION 113]  SEQUENCE
+{
+    servingNetwork              ServingNetwork                 OPTIONAL,
+    servingBid                  ServingBid                     OPTIONAL,
+    servingLocationDescription  ServingLocationDescription  OPTIONAL,
+...
+}
+
+GprsBasicCallInformation ::= [APPLICATION 114] SEQUENCE
+{
+    gprsChargeableSubscriber    GprsChargeableSubscriber OPTIONAL, -- *m.m.
+    rapFileSequenceNumber       RapFileSequenceNumber    OPTIONAL,
+    gprsDestination             GprsDestination          OPTIONAL, -- *m.m.
+    callEventStartTimeStamp     CallEventStartTimeStamp  OPTIONAL, -- *m.m.
+    totalCallEventDuration      TotalCallEventDuration   OPTIONAL, -- *m.m.
+    causeForTerm                CauseForTerm             OPTIONAL,
+    partialTypeIndicator        PartialTypeIndicator     OPTIONAL,
+    pDPContextStartTimestamp    PDPContextStartTimestamp OPTIONAL,
+    networkInitPDPContext       NetworkInitPDPContext    OPTIONAL,
+    chargingId                  ChargingId               OPTIONAL, -- *m.m.
+...
+}
+
+GprsChargeableSubscriber ::= [APPLICATION 115] SEQUENCE
+{
+    chargeableSubscriber        ChargeableSubscriber    OPTIONAL,
+    pdpAddress                  PdpAddress              OPTIONAL,
+    networkAccessIdentifier     NetworkAccessIdentifier OPTIONAL,
+...
+}
+
+GprsDestination ::= [APPLICATION 116] SEQUENCE
+{
+    accessPointNameNI           AccessPointNameNI      OPTIONAL, -- *m.m.
+    accessPointNameOI           AccessPointNameOI      OPTIONAL,
+...
+}
+
+GprsLocationInformation ::= [APPLICATION 117] SEQUENCE
+{
+    gprsNetworkLocation         GprsNetworkLocation     OPTIONAL, -- *m.m.
+    homeLocationInformation     HomeLocationInformation OPTIONAL,
+    geographicalLocation        GeographicalLocation    OPTIONAL, 
+...
+} 
+
+GprsNetworkLocation ::= [APPLICATION 118] SEQUENCE
+{
+    recEntity                   RecEntityCodeList OPTIONAL, -- *m.m.
+    locationArea                LocationArea      OPTIONAL,
+    cellId                      CellId            OPTIONAL,
+...
+}
+
+GprsServiceUsed ::= [APPLICATION 121]  SEQUENCE
+{
+    iMSSignallingContext        IMSSignallingContext  OPTIONAL,
+    dataVolumeIncoming          DataVolumeIncoming    OPTIONAL, -- *m.m.
+    dataVolumeOutgoing          DataVolumeOutgoing    OPTIONAL, -- *m.m.
+    chargeInformationList       ChargeInformationList OPTIONAL, -- *m.m.
+...
+}
+
+GsmChargeableSubscriber ::= [APPLICATION 286] SEQUENCE
+{
+    imsi     Imsi   OPTIONAL,
+    msisdn   Msisdn OPTIONAL,
+...
+}
+
+GuaranteedBitRate ::= [APPLICATION 420] OCTET STRING --(SIZE (1))
+
+HomeBid ::= [APPLICATION 122]  Bid
+
+HomeIdentifier ::= [APPLICATION 288] AsciiString
+
+HomeIdType ::= [APPLICATION 311] INTEGER
+
+HomeLocationDescription ::= [APPLICATION 413] LocationDescription
+
+HomeLocationInformation ::= [APPLICATION 123] SEQUENCE
+{
+    homeBid                     HomeBid                        OPTIONAL, -- *m.m.
+    homeLocationDescription     HomeLocationDescription        OPTIONAL, -- *m.m.
+...
+}
+
+HorizontalAccuracyDelivered ::= [APPLICATION 392] INTEGER
+
+HorizontalAccuracyRequested ::= [APPLICATION 385] INTEGER
+
+HSCSDIndicator ::= [APPLICATION 424] AsciiString --(SIZE(1))
+
+Imei ::= [APPLICATION 128] BCDString --(SIZE(7..8))
+
+ImeiOrEsn ::= [APPLICATION 429] CHOICE 
+{
+    imei  Imei,
+    esn   Esn,
+...
+} 
+
+Imsi ::= [APPLICATION 129] BCDString --(SIZE(3..8))
+
+IMSSignallingContext ::= [APPLICATION 418] INTEGER
+
+InternetServiceProvider ::= [APPLICATION 329] SEQUENCE
+{
+    ispIdType        IspIdType        OPTIONAL, -- *m.m.
+    ispIdentifier    IspIdentifier    OPTIONAL, -- *m.m.
+...
+}
+InternetServiceProviderIdList ::= [APPLICATION 330] SEQUENCE OF InternetServiceProvider
+
+IspIdentifier ::= [APPLICATION 294] AsciiString
+IspIdType ::= [APPLICATION 293] INTEGER
+
+ISPList ::= [APPLICATION 378] SEQUENCE OF InternetServiceProvider
+
+NetworkIdType ::= [APPLICATION 331] INTEGER
+
+NetworkIdentifier ::= [APPLICATION 295] AsciiString
+
+Network ::= [APPLICATION 332] SEQUENCE
+{
+    networkIdType     NetworkIdType     OPTIONAL, -- *m.m.
+    networkIdentifier NetworkIdentifier OPTIONAL, -- *m.m.
+...
+}
+NetworkList ::= [APPLICATION 333] SEQUENCE OF Network
+LatestCallTimeStamp ::= [APPLICATION 133] DateTimeLong
+
+LCSQosDelivered ::= [APPLICATION 390] SEQUENCE
+{
+    lCSTransactionStatus          LCSTransactionStatus        OPTIONAL,
+    horizontalAccuracyDelivered   HorizontalAccuracyDelivered OPTIONAL,
+    verticalAccuracyDelivered     VerticalAccuracyDelivered   OPTIONAL,
+    responseTime                  ResponseTime                OPTIONAL,
+    positioningMethod             PositioningMethod           OPTIONAL,
+    trackingPeriod                TrackingPeriod              OPTIONAL,
+    trackingFrequency             TrackingFrequency           OPTIONAL,
+    ageOfLocation                 AgeOfLocation               OPTIONAL,
+...
+}
+
+LCSQosRequested ::= [APPLICATION 383] SEQUENCE
+{
+    lCSRequestTimestamp           LCSRequestTimestamp         OPTIONAL, -- *m.m.
+    horizontalAccuracyRequested   HorizontalAccuracyRequested OPTIONAL,
+    verticalAccuracyRequested     VerticalAccuracyRequested   OPTIONAL,
+    responseTimeCategory          ResponseTimeCategory        OPTIONAL,
+    trackingPeriod                TrackingPeriod              OPTIONAL,
+    trackingFrequency             TrackingFrequency           OPTIONAL,
+...
+}
+
+LCSRequestTimestamp ::= [APPLICATION 384] DateTime
+
+LCSSPIdentification ::= [APPLICATION 375] SEQUENCE
+{
+ contentProviderIdType         ContentProviderIdType     OPTIONAL, -- *m.m.
+ contentProviderIdentifier     ContentProviderIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+LCSSPIdentificationList ::= [APPLICATION 374] SEQUENCE OF LCSSPIdentification
+
+LCSSPInformation ::= [APPLICATION 373] SEQUENCE
+{
+    lCSSPIdentificationList       LCSSPIdentificationList OPTIONAL, -- *m.m.
+    iSPList                       ISPList                 OPTIONAL,
+    networkList                   NetworkList             OPTIONAL,
+...
+}
+
+LCSTransactionStatus ::= [APPLICATION 391] INTEGER
+
+LocalCurrency ::= [APPLICATION 135] Currency
+
+LocalTimeStamp ::= [APPLICATION 16] NumberString --(SIZE(14))
+
+LocationArea ::= [APPLICATION 136] INTEGER 
+
+LocationDescription ::= AsciiString
+
+LocationIdentifier ::= [APPLICATION 289] AsciiString
+
+LocationIdType ::= [APPLICATION 315] INTEGER
+
+LocationInformation ::= [APPLICATION 138]  SEQUENCE
+{
+    networkLocation             NetworkLocation         OPTIONAL, -- *m.m.
+    homeLocationInformation     HomeLocationInformation OPTIONAL,
+    geographicalLocation        GeographicalLocation    OPTIONAL,
+...
+} 
+
+LocationServiceUsage ::= [APPLICATION 382] SEQUENCE
+{
+    lCSQosRequested               LCSQosRequested       OPTIONAL, -- *m.m.
+    lCSQosDelivered               LCSQosDelivered       OPTIONAL,
+    chargingTimeStamp             ChargingTimeStamp     OPTIONAL,
+    chargeInformationList         ChargeInformationList OPTIONAL, -- *m.m.
+...
+}
+
+MaximumBitRate ::= [APPLICATION 421] OCTET STRING --(SIZE (1))
+
+Mdn ::= [APPLICATION 253] NumberString
+
+MessageDescription ::= [APPLICATION 142] AsciiString
+
+MessageDescriptionCode ::= [APPLICATION 141] Code
+
+MessageDescriptionInformation ::= [APPLICATION 143] SEQUENCE
+{
+    messageDescriptionCode MessageDescriptionCode OPTIONAL, -- *m.m.
+    messageDescription     MessageDescription     OPTIONAL, -- *m.m.
+...
+}
+
+MessageStatus ::= [APPLICATION 144] INTEGER
+
+MessageType ::= [APPLICATION 145] INTEGER
+
+MessagingEventService ::= [APPLICATION 439] INTEGER
+
+Min ::= [APPLICATION 146] NumberString --(SIZE(2..15)) 
+
+MinChargeableSubscriber ::= [APPLICATION 254] SEQUENCE
+{
+    min     Min    OPTIONAL, -- *m.m.
+    mdn     Mdn    OPTIONAL,
+...
+}
+
+MoBasicCallInformation ::= [APPLICATION 147] SEQUENCE
+{
+    chargeableSubscriber        ChargeableSubscriber    OPTIONAL, -- *m.m.
+    rapFileSequenceNumber       RapFileSequenceNumber   OPTIONAL,
+    destination                 Destination             OPTIONAL,
+    destinationNetwork          DestinationNetwork      OPTIONAL,
+    callEventStartTimeStamp     CallEventStartTimeStamp OPTIONAL, -- *m.m.
+    totalCallEventDuration      TotalCallEventDuration  OPTIONAL, -- *m.m.
+    simToolkitIndicator         SimToolkitIndicator     OPTIONAL,
+    causeForTerm                CauseForTerm            OPTIONAL,
+...
+}
+
+MobileSessionService ::= [APPLICATION 440] INTEGER      
+
+Msisdn ::= [APPLICATION 152] BCDString --(SIZE(1..9))
+
+MtBasicCallInformation ::= [APPLICATION 153] SEQUENCE
+{
+    chargeableSubscriber        ChargeableSubscriber    OPTIONAL, -- *m.m.
+    rapFileSequenceNumber       RapFileSequenceNumber   OPTIONAL,
+    callOriginator              CallOriginator          OPTIONAL,
+    originatingNetwork          OriginatingNetwork      OPTIONAL,
+    callEventStartTimeStamp     CallEventStartTimeStamp OPTIONAL, -- *m.m.
+    totalCallEventDuration      TotalCallEventDuration  OPTIONAL, -- *m.m.
+    simToolkitIndicator         SimToolkitIndicator     OPTIONAL,
+    causeForTerm                CauseForTerm            OPTIONAL,
+...
+}
+
+NetworkAccessIdentifier ::= [APPLICATION 417] AsciiString
+
+NetworkElement ::= [APPLICATION 441]  SEQUENCE
+{
+elementType             ElementType  OPTIONAL, -- *m.m.
+elementId               ElementId    OPTIONAL, -- *m.m.
+...
+}
+
+NetworkElementList ::= [APPLICATION 442] SEQUENCE OF NetworkElement
+
+NetworkId ::= AsciiString --(SIZE(1..6))
+
+NetworkInitPDPContext ::= [APPLICATION 245] INTEGER
+
+NetworkLocation ::= [APPLICATION 156]  SEQUENCE
+{
+    recEntityCode               RecEntityCode OPTIONAL, -- *m.m.
+    callReference               CallReference OPTIONAL,
+    locationArea                LocationArea  OPTIONAL,
+    cellId                      CellId        OPTIONAL,
+...
+}
+
+NonChargedNumber ::= [APPLICATION 402] AsciiString
+
+NonChargedParty ::= [APPLICATION 443]  SEQUENCE
+{
+    nonChargedPartyNumber       NonChargedPartyNumber   OPTIONAL,
+    nonChargedPublicUserId      NonChargedPublicUserId OPTIONAL,
+...
+}
+
+NonChargedPartyNumber ::= [APPLICATION 444] AddressStringDigits
+
+NonChargedPublicUserId ::= [APPLICATION 445] AsciiString 
+
+NumberOfDecimalPlaces ::= [APPLICATION 159] INTEGER
+
+ObjectType ::= [APPLICATION 281] INTEGER
+
+OperatorSpecInfoList ::= [APPLICATION 162] SEQUENCE OF OperatorSpecInformation
+
+OperatorSpecInformation ::= [APPLICATION 163] AsciiString
+
+OrderPlacedTimeStamp ::= [APPLICATION 300] DateTime
+
+OriginatingNetwork ::= [APPLICATION 164] NetworkId 
+
+PacketDataProtocolAddress ::= [APPLICATION 165] AsciiString 
+
+PaidIndicator ::= [APPLICATION 346] INTEGER
+PartialTypeIndicator ::=  [APPLICATION 166] AsciiString --(SIZE(1))
+
+PaymentMethod ::= [APPLICATION 347] INTEGER
+
+PdpAddress ::= [APPLICATION 167] PacketDataProtocolAddress
+
+PDPContextStartTimestamp ::= [APPLICATION 260] DateTime
+
+PlmnId ::= [APPLICATION 169] AsciiString --(SIZE(5))
+
+PositioningMethod ::= [APPLICATION 395] INTEGER
+
+PriorityCode ::= [APPLICATION 170] INTEGER
+
+PublicUserId ::= [APPLICATION 446] AsciiString 
+
+RapFileSequenceNumber ::= [APPLICATION 181]  FileSequenceNumber
+
+RecEntityCode ::= [APPLICATION 184] Code
+
+RecEntityCodeList ::= [APPLICATION 185] SEQUENCE OF RecEntityCode
+
+RecEntityId ::= [APPLICATION 400] AsciiString
+
+RecEntityInfoList ::= [APPLICATION 188] SEQUENCE OF RecEntityInformation
+
+RecEntityInformation ::= [APPLICATION 183] SEQUENCE
+{
+    recEntityCode  RecEntityCode OPTIONAL, -- *m.m.
+    recEntityType  RecEntityType OPTIONAL, -- *m.m.
+    recEntityId    RecEntityId   OPTIONAL, -- *m.m.
+...
+}
+RecEntityType ::= [APPLICATION 186] INTEGER
+
+Recipient ::= [APPLICATION 182]  PlmnId
+
+ReleaseVersionNumber ::= [APPLICATION 189] INTEGER
+
+RequestedDeliveryTimeStamp ::= [APPLICATION 301] DateTime
+
+ResponseTime ::= [APPLICATION 394] INTEGER
+
+ResponseTimeCategory ::= [APPLICATION 387] INTEGER
+
+ScuBasicInformation ::= [APPLICATION 191] SEQUENCE
+{
+    chargeableSubscriber      ScuChargeableSubscriber    OPTIONAL, -- *m.m.
+    chargedPartyStatus        ChargedPartyStatus         OPTIONAL, -- *m.m.
+    nonChargedNumber          NonChargedNumber           OPTIONAL, -- *m.m.
+    clirIndicator             ClirIndicator              OPTIONAL,
+    originatingNetwork        OriginatingNetwork         OPTIONAL,
+    destinationNetwork        DestinationNetwork         OPTIONAL,
+...
+}
+
+ScuChargeType ::= [APPLICATION 192]  SEQUENCE
+{
+    messageStatus               MessageStatus          OPTIONAL, -- *m.m.
+    priorityCode                PriorityCode           OPTIONAL, -- *m.m.
+    distanceChargeBandCode      DistanceChargeBandCode OPTIONAL,
+    messageType                 MessageType            OPTIONAL, -- *m.m.
+    messageDescriptionCode      MessageDescriptionCode OPTIONAL, -- *m.m.
+...
+}
+
+ScuTimeStamps ::= [APPLICATION 193]  SEQUENCE
+{
+    depositTimeStamp            DepositTimeStamp    OPTIONAL, -- *m.m.
+    completionTimeStamp         CompletionTimeStamp OPTIONAL, -- *m.m.
+    chargingPoint               ChargingPoint       OPTIONAL, -- *m.m.
+...
+}
+
+ScuChargeableSubscriber ::= [APPLICATION 430] CHOICE 
+{
+    gsmChargeableSubscriber    GsmChargeableSubscriber,
+    minChargeableSubscriber    MinChargeableSubscriber,
+...
+}
+
+Sender ::= [APPLICATION 196]  PlmnId
+
+ServiceStartTimestamp ::= [APPLICATION 447] DateTime
+
+ServingBid ::= [APPLICATION 198]  Bid
+
+ServingLocationDescription ::= [APPLICATION 414] LocationDescription
+
+ServingNetwork ::= [APPLICATION 195]  AsciiString
+
+ServingPartiesInformation ::= [APPLICATION 335] SEQUENCE
+{
+  contentProviderName           ContentProviderName           OPTIONAL, -- *m.m.
+  contentProviderIdList         ContentProviderIdList         OPTIONAL,
+  internetServiceProviderIdList InternetServiceProviderIdList OPTIONAL,
+  networkList                   NetworkList                   OPTIONAL,
+...
+}
+
+SessionChargeInfoList ::= [APPLICATION 448] SEQUENCE OF SessionChargeInformation
+
+SessionChargeInformation ::= [APPLICATION 449] SEQUENCE
+{
+chargedItem                    ChargedItem              OPTIONAL, -- *m.m.    
+exchangeRateCode               ExchangeRateCode         OPTIONAL,
+       callTypeGroup           CallTypeGroup            OPTIONAL, -- *m.m.
+       chargeDetailList        ChargeDetailList         OPTIONAL, -- *m.m.
+       taxInformationList      TaxInformationList       OPTIONAL,
+...
+}         
+SimChargeableSubscriber ::= [APPLICATION 199] SEQUENCE
+{
+    imsi     Imsi   OPTIONAL, -- *m.m.
+    msisdn   Msisdn OPTIONAL,
+...
+}
+
+SimToolkitIndicator ::= [APPLICATION 200] AsciiString --(SIZE(1)) 
+
+SMSDestinationNumber ::= [APPLICATION 419] AsciiString
+
+SMSOriginator ::= [APPLICATION 425] AsciiString
+
+SpecificationVersionNumber  ::= [APPLICATION 201] INTEGER
+
+SsParameters ::= [APPLICATION 204] AsciiString --(SIZE(1..40))
+
+SupplServiceActionCode ::= [APPLICATION 208] INTEGER
+
+SupplServiceCode ::= [APPLICATION 209] HexString --(SIZE(2))
+
+SupplServiceUsed ::= [APPLICATION 206] SEQUENCE
+{
+    supplServiceCode       SupplServiceCode       OPTIONAL, -- *m.m.
+    supplServiceActionCode SupplServiceActionCode OPTIONAL, -- *m.m.
+    ssParameters           SsParameters           OPTIONAL,
+    chargingTimeStamp      ChargingTimeStamp      OPTIONAL,
+    chargeInformation      ChargeInformation      OPTIONAL,
+    basicServiceCodeList   BasicServiceCodeList   OPTIONAL,
+...
+}
+
+TapCurrency ::= [APPLICATION 210] Currency
+
+TapDecimalPlaces ::= [APPLICATION 244] INTEGER
+
+TaxableAmount ::= [APPLICATION 398] AbsoluteAmount
+
+Taxation ::= [APPLICATION 216] SEQUENCE
+{
+    taxCode      TaxCode      OPTIONAL, -- *m.m.
+    taxType      TaxType      OPTIONAL, -- *m.m.
+    taxRate      TaxRate      OPTIONAL,
+    chargeType   ChargeType   OPTIONAL,
+    taxIndicator TaxIndicator OPTIONAL,
+...
+}
+
+TaxationList ::= [APPLICATION 211]  SEQUENCE OF Taxation
+
+TaxCode ::= [APPLICATION 212] INTEGER
+
+TaxIndicator ::= [APPLICATION 432] AsciiString --(SIZE(1))
+
+TaxInformation ::= [APPLICATION 213] SEQUENCE
+{
+    taxCode          TaxCode       OPTIONAL, -- *m.m.
+    taxValue         TaxValue      OPTIONAL, -- *m.m.
+    taxableAmount    TaxableAmount OPTIONAL,
+...
+}
+
+TaxInformationList ::= [APPLICATION 214]  SEQUENCE OF TaxInformation
+
+-- The TaxRate item is of a fixed length to ensure that the full 5 
+-- decimal places is provided.
+
+TaxRate ::= [APPLICATION 215] NumberString --(SIZE(7))
+
+TaxType ::= [APPLICATION 217] AsciiString --(SIZE(2))
+
+TaxValue ::= [APPLICATION 397] AbsoluteAmount
+
+TeleServiceCode ::= [APPLICATION 218] HexString --(SIZE(2))
+
+ThirdPartyInformation ::= [APPLICATION 219]  SEQUENCE
+{
+    thirdPartyNumber            ThirdPartyNumber       OPTIONAL,
+    clirIndicator               ClirIndicator         OPTIONAL,
+...
+}
+
+ThirdPartyNumber ::= [APPLICATION 403] AddressStringDigits
+
+ThreeGcamelDestination ::= [APPLICATION 431] CHOICE
+{
+    camelDestinationNumber    CamelDestinationNumber,
+    gprsDestination           GprsDestination,
+...
+}
+
+TotalAdvisedCharge ::= [APPLICATION 356] AbsoluteAmount
+TotalAdvisedChargeRefund ::= [APPLICATION 357] AbsoluteAmount
+TotalAdvisedChargeValue ::= [APPLICATION 360] SEQUENCE
+{
+    advisedChargeCurrency    AdvisedChargeCurrency    OPTIONAL,
+    totalAdvisedCharge       TotalAdvisedCharge       OPTIONAL, -- *m.m.
+    totalAdvisedChargeRefund TotalAdvisedChargeRefund OPTIONAL,
+    totalCommission          TotalCommission          OPTIONAL,
+    totalCommissionRefund    TotalCommissionRefund    OPTIONAL,
+...
+}
+TotalAdvisedChargeValueList ::= [APPLICATION 361] SEQUENCE OF TotalAdvisedChargeValue
+
+TotalCallEventDuration ::= [APPLICATION 223] INTEGER 
+
+TotalCharge ::= [APPLICATION 415] AbsoluteAmount
+
+TotalChargeRefund ::= [APPLICATION 355] AbsoluteAmount
+TotalCommission ::= [APPLICATION 358] AbsoluteAmount
+TotalCommissionRefund ::= [APPLICATION 359] AbsoluteAmount
+TotalDataVolume ::= [APPLICATION 343] DataVolume
+TotalDiscountRefund ::= [APPLICATION 354] AbsoluteAmount
+TotalDiscountValue ::= [APPLICATION 225] AbsoluteAmount
+
+TotalTaxRefund ::= [APPLICATION 353] AbsoluteAmount
+TotalTaxValue ::= [APPLICATION 226] AbsoluteAmount
+
+TotalTransactionDuration ::= [APPLICATION 416] TotalCallEventDuration
+
+TrackedCustomerEquipment ::= [APPLICATION 381] SEQUENCE
+{
+    equipmentIdType               EquipmentIdType OPTIONAL, -- *m.m.
+    equipmentId                   EquipmentId     OPTIONAL, -- *m.m.
+...
+}
+
+TrackedCustomerHomeId ::= [APPLICATION 377] SEQUENCE
+{
+    homeIdType                    HomeIdType     OPTIONAL, -- *m.m.
+    homeIdentifier                HomeIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+TrackedCustomerHomeIdList ::= [APPLICATION 376] SEQUENCE OF TrackedCustomerHomeId
+
+TrackedCustomerIdentification ::= [APPLICATION 372] SEQUENCE
+{
+    customerIdType                CustomerIdType     OPTIONAL, -- *m.m.
+    customerIdentifier            CustomerIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+TrackedCustomerIdList ::= [APPLICATION 370] SEQUENCE OF TrackedCustomerIdentification
+
+TrackedCustomerInformation ::= [APPLICATION 367] SEQUENCE
+{
+    trackedCustomerIdList         TrackedCustomerIdList     OPTIONAL, -- *m.m.
+    trackedCustomerHomeIdList     TrackedCustomerHomeIdList OPTIONAL,
+    trackedCustomerLocList        TrackedCustomerLocList    OPTIONAL,
+    trackedCustomerEquipment      TrackedCustomerEquipment  OPTIONAL,
+...
+}
+
+TrackedCustomerLocation ::= [APPLICATION 380] SEQUENCE
+{
+    locationIdType                LocationIdType     OPTIONAL, -- *m.m.
+    locationIdentifier            LocationIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+TrackedCustomerLocList ::= [APPLICATION 379] SEQUENCE OF TrackedCustomerLocation
+
+TrackingCustomerEquipment ::= [APPLICATION 371] SEQUENCE
+{
+    equipmentIdType               EquipmentIdType OPTIONAL, -- *m.m.
+    equipmentId                   EquipmentId     OPTIONAL, -- *m.m.
+...
+}
+
+TrackingCustomerHomeId ::= [APPLICATION 366] SEQUENCE
+{
+    homeIdType                    HomeIdType     OPTIONAL, -- *m.m.
+    homeIdentifier                HomeIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+TrackingCustomerHomeIdList ::= [APPLICATION 365] SEQUENCE OF TrackingCustomerHomeId
+
+TrackingCustomerIdentification ::= [APPLICATION 362] SEQUENCE
+{
+    customerIdType                CustomerIdType     OPTIONAL, -- *m.m.
+    customerIdentifier            CustomerIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+TrackingCustomerIdList ::= [APPLICATION 299] SEQUENCE OF TrackingCustomerIdentification
+
+TrackingCustomerInformation ::= [APPLICATION 298] SEQUENCE
+{
+    trackingCustomerIdList        TrackingCustomerIdList     OPTIONAL, -- *m.m.
+    trackingCustomerHomeIdList    TrackingCustomerHomeIdList OPTIONAL,
+    trackingCustomerLocList       TrackingCustomerLocList    OPTIONAL,
+    trackingCustomerEquipment     TrackingCustomerEquipment  OPTIONAL,
+...
+}
+
+TrackingCustomerLocation ::= [APPLICATION 369] SEQUENCE
+{
+    locationIdType                LocationIdType     OPTIONAL, -- *m.m.
+    locationIdentifier            LocationIdentifier OPTIONAL, -- *m.m.
+...
+}
+
+TrackingCustomerLocList ::= [APPLICATION 368] SEQUENCE OF TrackingCustomerLocation
+
+TrackingFrequency ::= [APPLICATION 389] INTEGER
+
+TrackingPeriod ::= [APPLICATION 388] INTEGER
+
+TransactionAuthCode ::= [APPLICATION 342] AsciiString
+TransactionDescriptionSupp ::= [APPLICATION 338] INTEGER
+TransactionDetailDescription ::= [APPLICATION 339] AsciiString
+
+TransactionIdentifier ::= [APPLICATION 341] AsciiString
+TransactionShortDescription ::= [APPLICATION 340] AsciiString
+TransactionStatus ::= [APPLICATION 303] INTEGER
+
+TransferCutOffTimeStamp ::= [APPLICATION 227] DateTimeLong
+
+TransparencyIndicator ::= [APPLICATION 228] INTEGER
+
+UserProtocolIndicator ::= [APPLICATION 280] INTEGER
+
+UtcTimeOffset ::= [APPLICATION 231] AsciiString --(SIZE(5))
+
+UtcTimeOffsetCode ::= [APPLICATION 232] Code
+
+UtcTimeOffsetInfo ::= [APPLICATION 233] SEQUENCE
+{
+    utcTimeOffsetCode   UtcTimeOffsetCode OPTIONAL, -- *m.m.
+    utcTimeOffset       UtcTimeOffset     OPTIONAL, -- *m.m.
+...
+}
+
+UtcTimeOffsetInfoList ::= [APPLICATION 234]  SEQUENCE OF UtcTimeOffsetInfo
+
+VerticalAccuracyDelivered ::= [APPLICATION 393] INTEGER
+
+VerticalAccuracyRequested ::= [APPLICATION 386] INTEGER
+
+
+--
+-- Tagged common data types
+--
+
+--
+-- The AbsoluteAmount data type is used to 
+-- encode absolute revenue amounts.
+-- The accuracy of all absolute amount values is defined
+-- by the value of TapDecimalPlaces within the group
+-- AccountingInfo for the entire TAP batch.
+-- Note, that only amounts greater than or equal to zero are allowed.
+-- The decimal number representing the amount is 
+-- derived from the encoded integer 
+-- value by division by 10^TapDecimalPlaces.
+-- for example for TapDecimalPlaces = 3 the following values
+-- will be derived:
+--       0   represents    0.000
+--      12   represents    0.012
+--    1234   represents    1.234
+-- for TapDecimalPlaces = 5 the following values will be
+-- derived:
+--       0   represents    0.00000
+--    1234   represents    0.01234
+--  123456   represents    1.23456
+-- This data type is used to encode (total) 
+-- charges, (total) discount values and 
+-- (total) tax values. 
+-- 
+AbsoluteAmount ::= INTEGER 
+
+Bid ::=  AsciiString --(SIZE(5))
+
+Code ::= INTEGER
+
+--
+-- Non-tagged common data types
+--
+--
+-- Recommended common data types to be used for file encoding:
+--
+-- The following definitions should be used for TAP file creation instead of
+-- the default specifications (OCTET STRING)
+--
+--    AsciiString ::= VisibleString
+--
+--    Currency ::= VisibleString
+--
+--    HexString ::= VisibleString
+--
+--    NumberString ::= NumericString
+--
+--    AsciiString contains visible ISO 646 characters.
+--    Leading and trailing spaces must be discarded during processing.
+--    An AsciiString cannot contain only spaces.
+
+AsciiString ::= OCTET STRING
+
+--
+-- The BCDString data type (Binary Coded Decimal String) is used to represent
+-- several digits from 0 through 9, a, b, c, d, e.
+-- Two digits are encoded per octet.  The four leftmost bits of the octet represent
+-- the first digit while the four remaining bits represent the following digit.  
+-- A single f must be used as a filler when the total number of digits to be 
+-- encoded is odd.
+-- No other filler is allowed.
+
+BCDString ::= OCTET STRING
+
+
+--
+-- The currency codes from ISO 4217
+-- are used to identify a currency 
+--
+Currency ::= OCTET STRING
+
+--
+-- HexString contains ISO 646 characters from 0 through 9, A, B, C, D, E, F.
+--
+
+HexString ::= OCTET STRING
+
+--
+-- NumberString contains ISO 646 characters from 0 through 9.
+--
+
+NumberString ::= OCTET STRING
+
+
+--
+-- The PercentageRate data type is used to
+-- encode percentage rates with an accuracy of 2 decimal places. 
+-- This data type is used to encode discount rates.
+-- The decimal number representing the percentage
+-- rate is obtained by dividing the integer value by 100
+-- Examples:
+--
+--     1500  represents  15.00 percent
+--     1     represents   0.01 percent
+--
+PercentageRate ::= INTEGER 
+
+
+-- END
+END
+}
+
+1;