- $hash{callEventDetails} = [
- map {
- { #either tele or bearer service usage originated by the mobile subscription (others?)
- 'mobileOriginatedCall' => {
-
- #identifies the Network Location, which includes the MSC responsible for handling the call and, where appropriate, the Geographical Location of the mobile
- 'locationInformation' => {
- 'networkLocation' => {
- 'recEntityCode' => $_->carrierid, #XXX Recording Entity (per 2.5, from "Reference Tables")
- }
- },
-
- #Operator Specific Information: beyond the scope of TAP and has been bilaterally agreed
- 'operatorSpecInformation' => [
- $_->userfield, ##'|Seq: 178 Loc: 1|'
- ],
-
- #The type of service used together with all related charging information
- 'basicServiceUsedList' => [
- {
- #identifies the actual Basic Service used
- 'basicService' => {
- #one of Teleservice Code or Bearer Service Code as determined by the service type used
- 'serviceCode' => {
- #XXX
- #00 All teleservices
- #10 All Speech transmission services
- #11 Telephony
- #12 Emergency calls
- #20 All SMS Services
- #21 Short Message MT/PP
- #22 Short Message MO/PP
- #60 All Fax Services
- #61 Facsimile Group 3 & alternative speech
- #62 Automatic Facsimile Group 3
- #63 Automatic Facsimile Group 4
- #70 All data teleservices (compound)
- #80 All teleservices except SMS (compound)
- #90 All voice group call services
- #91 Voice group call
- #92 Voice broadcast call
- 'teleServiceCode' => $_->servicecode, #'11'
-
- #Bearer Service Code
- # Must be present within group Service Code where the type of service used
- # was a bearer service. Must not be present when the type of service used
- # was a tele service and, therefore, Teleservice Code is present.
- # Group Bearer Codes, identifiable by the description ‘All’, should only
- # be used where details of the specific services affected are not
- # available from the network.
- #00 All Bearer Services
- #20 All Data Circuit Asynchronous Services
- #21 Duplex Asynch. 300bps data circuit
- #22 Duplex Asynch. 1200bps data circuit
- #23 Duplex Asynch. 1200/75bps data circuit
- #24 Duplex Asynch. 2400bps data circuit
- #25 Duplex Asynch. 4800bps data circuit
- #26 Duplex Asynch. 9600bps data circuit
- #27 General Data Circuit Asynchronous Service
- #30 All Data Circuit Synchronous Services
- #32 Duplex Synch. 1200bps data circuit
- #34 Duplex Synch. 2400bps data circuit
- #35 Duplex Synch. 4800bps data circuit
- #36 Duplex Synch. 9600bps data circuit
- #37 General Data Circuit Synchronous Service
- #40 All Dedicated PAD Access Services
- #41 Duplex Asynch. 300bps PAD access
- #42 Duplex Asynch. 1200bps PAD access
- #43 Duplex Asynch. 1200/75bps PAD access
- #44 Duplex Asynch. 2400bps PAD access
- #45 Duplex Asynch. 4800bps PAD access
- #46 Duplex Asynch. 9600bps PAD access
- #47 General PAD Access Service
- #50 All Dedicated Packet Access Services
- #54 Duplex Synch. 2400bps PAD access
- #55 Duplex Synch. 4800bps PAD access
- #56 Duplex Synch. 9600bps PAD access
- #57 General Packet Access Service
- #60 All Alternat Speech/Asynchronous Services
- #70 All Alternate Speech/Synchronous Services
- #80 All Speech followed by Data Asynchronous Services
- #90 All Speech followed by Data Synchronous Services
- #A0 All Data Circuit Asynchronous Services (compound)
- #B0 All Data Circuit Synchronous Services (compound)
- #C0 All Asynchronous Services (compound)
- }
- #conditionally also contain the following for UMTS: Transparency Indicator, Fixed Network User
- # Rate, User Protocol Indicator, Guaranteed Bit Rate and Maximum Bit Rate
- },
-
- #Charge information is provided for all chargeable elements except within Messaging Event and Mobile Session call events
- # must contain Charged Item and at least one occurrence of Charge Detail
- 'chargeInformationList' => [
- {
- #XXX
- #mandatory
- # the charging principle applied and the unitisation of Chargeable Units. It
- # is not intended to identify the service used.
- #A: Call set up attempt
- #C: Content
- #D: Duration based charge
- #E: Event based charge
- #F: Fixed (one-off) charge
- #L: Calendar (for example daily usage charge)
- #V: Volume (outgoing) based charge
- #W: Volume (incoming) based charge
- #X: Volume (total volume) based charge
- #(?? fields to be used as a basis for the calculation of the correct Charge
- # A: Chargeable Units (if present)
- # D,V,W,X: Chargeable Units
- # C: Depends on the content
- # E: Not Applicable
- # F: Not Applicable
- # L: Call Event Start Timestamp)
- 'chargedItem' => 'D',
-
- # the IOT used by the VPMN to price the call
- 'callTypeGroup' => {
-
- #The highest category call type in respect of the destination of the call
- #0: Unknown/Not Applicable
- #1: National
- #2: International
- #10: HGGSN/HP-GW
- #11: VGGSN/VP-GW
- #12: Other GGSN/Other P-GW
- #100: WLAN
- 'callTypeLevel1' => $_->calltypenum,
-
- #the sub category of Call Type Level 1
- #0: Unknown/Not Applicable
- #1: Mobile
- #2: PSTN
- #3: Non Geographic
- #4: Premium Rate
- #5: Satellite destination
- #6: Forwarded call
- #7: Non forwarded call
- #10: Broadband
- #11: Narrowband
- #12: Conversational
- #13: Streaming
- #14: Interactive
- #15: Background
- 'callTypeLevel2' => 0,
-
- #the sub category of Call Type Level 2
- 'callTypeLevel3' => 0,
- },
-
- #mandatory, at least one occurence must be present
- #A repeating group detailing the Charge and/or charge element
- # Note that, where a Charge has been levied, even where that Charge is zero,
- # there must be one occurance, and only one, with a Charge Type of '00'
- 'chargeDetailList' => [
- {
- #mandatory
- # after discounts have been deducted but before any tax is added
- 'charge' => $_->rated_price * 100000, #XXX numberOfDecimalPlaces
-
- #mandatory
- # the type of charge represented
- #00: Total charge for Charge Information (the invoiceable value)
- #01: Airtime charge
- #02: reserved
- #03: Toll charge
- #04: Directory assistance
- #05–20: reserved
- #21: VPMN surcharge
- #50: Total charge for Charge Information according to the published IOT
- # Note that the use of value 50 is only for use by bilateral agreement, use without
- # bilateral agreement can be treated as per reserved values, that is ‘out of range’
- #69–99: reserved
- 'chargeType' => '00',
-
- #conditional
- # the number of units which are chargeable within the Charge Detail, this may not
- # correspond to the number of rounded units charged.
- # The item Charged Item defines what the units represent.
- 'chargeableUnits' => $_->quantity_able,
-
- #optional
- # the rounded number of units which are actually charged for
- 'chargedUnits' => $_->quantity,
- }
- ],
- 'exchangeRateCode' => 1, #from header
- }
- ]
- }
- ],
-
- #MO Basic Call Information provides the basic detail of who made the call and where to in respect of mobile originated traffic.
- 'basicCallInformation' => {
- #mandatory
- # the identification of the chargeable subscriber.
- # The group must contain either the IMSI or the MIN of the Chargeable Subscriber, but not both.
- 'chargeableSubscriber' => {
- 'simChargeableSubscriber' => {
- 'msisdn' => $_->charged_party, #src
- 'imsi' => $_->charged_party_imsi,
- }
- },
- # the start of the call event
- 'callEventStartTimeStamp' => {
- 'localTimeStamp' => time2str('%Y%m%d%H%M%S', $_->startdate),
- 'utcTimeOffsetCode' => 1
- },
-
- # the actual total duration of a call event as a number of seconds
- 'totalCallEventDuration' => $_->duration,
-
- #conditional
- # the number dialled by the subscriber (Called Number)
- # or the SMSC Address in case of SMS usage or in cases involving supplementary services
- # such as call forwarding or transfer etc., the number to which the call is routed
- 'destination' => {
- #the international representation of the destination
- 'calledNumber' => $_->dst,
-
- #the actual digits as dialled by the subscriber, i.e. unmodified, in establishing a call
- # This will contain ‘+’ and ‘#’ where appropriate.
- #'dialledDigits' => '322221350'
- },
- }
- }
- };
- }
- @cdrs
- ];