[freeside-commits] branch master updated. 85ce878a87e2da7ed3e2f927cae7745ef3b59cc0

Ivan ivan at 420.am
Wed Jan 9 16:22:49 PST 2013


The branch, master has been updated
       via  85ce878a87e2da7ed3e2f927cae7745ef3b59cc0 (commit)
       via  27ed323fad9fca12f507a524e1788fb37e36501e (commit)
      from  baa48df835b04f1aee3f9cd2c03f00e780585f13 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 85ce878a87e2da7ed3e2f927cae7745ef3b59cc0
Merge: 27ed323 baa48df
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Jan 9 16:22:41 2013 -0800

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit 27ed323fad9fca12f507a524e1788fb37e36501e
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Jan 9 16:22:28 2013 -0800

    GSM TAP3.12 import format, RT#20767

diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index ca68c35..252b760 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -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 ) {
 
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index cbcd27b..69e21da 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -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, '', '',
 
diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm
index fdec921..fedf28a 100644
--- a/FS/FS/cdr.pm
+++ b/FS/FS/cdr.pm
@@ -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
index 0000000..d1536c0
--- /dev/null
+++ b/FS/FS/cdr/gsm_tap3_12.pm
@@ -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;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Record.pm          |   43 ++-
 FS/FS/Schema.pm          |    9 +-
 FS/FS/cdr.pm             |   12 +-
 FS/FS/cdr/gsm_tap3_12.pm | 1563 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 1621 insertions(+), 6 deletions(-)
 create mode 100644 FS/FS/cdr/gsm_tap3_12.pm




More information about the freeside-commits mailing list