[freeside-commits] branch master updated. 7607fb401f8b1ea93b7542da24c9dfce52c97466

Ivan ivan at 420.am
Sun Feb 9 18:10:53 PST 2014


The branch, master has been updated
       via  7607fb401f8b1ea93b7542da24c9dfce52c97466 (commit)
      from  ac2ec4c0ce8ea098009340dd7e9756dad7219a5b (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 7607fb401f8b1ea93b7542da24c9dfce52c97466
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sun Feb 9 18:10:52 2014 -0800

    EMI CDR format, RT#26726

diff --git a/FS/FS/cdr/emi.pm b/FS/FS/cdr/emi.pm
new file mode 100644
index 0000000..7cf7aae
--- /dev/null
+++ b/FS/FS/cdr/emi.pm
@@ -0,0 +1,362 @@
+package FS::cdr::emi;
+use base qw( FS::cdr );
+
+use strict;
+use vars qw( %info );
+use Time::Local;
+#use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker );
+
+%info = (
+  'name'               => 'EMI (Exchange Message Interface)',
+  'weight'             => 60,
+  'type'               => 'fixedlength',
+  'fixedlength_format' => [qw(
+    record_identification:6:1:6
+    record_date:6:7:12
+    calling_number_length:2:13:14
+    calling_number:10:15:24
+    overflow_digits:3:25:27
+    called_number_length:2:28:29
+    called_number:10:30:39
+    amount_collected:7:40:46
+
+    UNKNOWN_1:8:47:54
+
+    connect_time:6:55:60
+    conversation_time:7:61:67
+    method_of_recording:2:68:69
+
+    UNKNOWN_1A:9:70:78
+
+    rate_class:1:79:79
+    message_type:1:80:80
+
+    UNKNOWN_2:1:81:81
+
+    indicator_1:1:82:82
+    indicator_2:1:83:83
+    indicator_3:1:84:84
+    indicator_4:1:85:85
+    indicator_5:1:86:86
+    indicator_6:1:87:87
+    indicator_7:1:88:88
+    indicator_8:1:89:89
+    indicator_9:1:90:90
+    indicator_10:1:91:91
+    indicator_11:1:92:92
+    indicator_12:1:93:93
+    indicator_13:1:94:94
+    indicator_14:1:95:95
+    indicator_15:1:96:96
+    indicator_16:1:97:97
+    indicator_17:1:98:98
+    indicator_18:1:99:99
+    indicator_19:1:100:100
+
+    UNKNOWN_3:12:101:112
+
+    billing_number:10:113:122
+    calling_city:10:123:132
+    calling_state:2:133:134
+    called_city:10:135:144
+    called_state:2:145:146
+
+    UNKNOWN_4:2:147:148
+
+    settlement_code:1:149:149
+
+    UNKNOWN_5:11:150:160
+
+    ind24:1:161:161
+
+    UNKNOWN_6:49:162:210
+
+    calling_module:4:211:214
+    module_value_length:3:215:217
+    cai:1:218:218
+    account_code:10:219:228
+
+    UNKNOWN_7:30:229:258
+
+    tmod:4:259:262
+
+  )],
+  'import_fields'      => [
+
+    sub { # record_identification
+      my($cdr, $data, $conf, $param) = @_;
+      $cdr->{_record_identification} = $data;
+      if ( $data eq '202401' || $data eq '202402' ) { #header/footer
+        $param->{skiprow} = 1;
+      }
+    },
+
+   # _cdr_date_parser_maker('startdate'),  # record_date
+   sub { #record_date
+     my($cdr, $data, $conf, $param) = @_;
+     $data =~ /^(\d\d)(\d\d)(\d\d)$/ or die "unparsable record_date: $data";
+     $cdr->{_tmp_year} = "20$1";
+     $cdr->{_tmp_mon} = $2;
+     $cdr->{_tmp_mday} = $3;
+   },
+
+    '', #calling_number_length
+
+    'src', #calling_number
+
+    '', #XXX
+    #sub { #overflow_digits... add to dst???
+    #  my($cdr, $data, $conf, $param) = @_;
+    #  if ( $cdr->{_record_identification} eq '010201' ) {
+    #    $cdr->dst( $cdr->dst . $data
+    #  }
+    #}
+
+    '', #called_number_length
+
+    'dst', #called_number
+
+    sub { #amount_collected
+      my($cdr, $data, $conf, $param) = @_;
+
+      $cdr->upstream_price( $data / 1000 );
+    },
+
+    '', #UNKNOWN_1
+
+    sub { #connect_time
+      my($cdr, $data, $conf, $param) = @_;
+
+     $data =~ /^(\d\d)(\d\d)(\d\d)$/ or die "unparsable connect_time: $data";
+     $cdr->startdate( timelocal(
+                        $3, $2, $1,
+                        $cdr->{_tmp_mday}, $cdr->{_tmp_mon}-1, $cdr->{_tmp_year}
+                      )
+                    );
+    },
+
+    sub { #conversation_time
+      my($cdr, $data, $conf, $param) = @_;
+
+       $data =~ /^(\d{6})(\d)$/ or die "unparsable connect_time: $data";
+
+       my $time = $1;
+       $time++ if $2 >= 5; #round up if tenths > .5
+
+       $cdr->duration($time);
+       $cdr->billsec($time);
+    
+    },
+
+    '', #method_of_recording
+
+    '', #UNKNOWN_1A
+
+    'upstream_rateplanid', #rate_class
+
+    '', #message_type
+#A one-position numeric field that identifies the billing arrangement applicable to the transaction, e.g., sent-paid or collect. Values are as follows: 
+#1 = Sent Paid 
+#2 = Third Number 
+#3 = Calling Card 
+#4 = Collect 
+#5 = Special Collect/Reverse Billing 
+#6 = Coin Paid 
+#7 = Unassigned 
+#8 = Unassigned 
+#9 = Unassigned
+
+    '', #UNKNOWN_2
+
+    '', #indicator_1
+#Indicator 1 - Coin/Hotel - Motel - Hospital - University Dorm Room - OUTWATS Out Of Band 
+#Value
+#Indicates
+#Definition 
+#1 
+#Telephone Company Owned Public Telephone Originated 
+#Message originated at a telephone company-owned public telephone station. Included are PUBLIC, SEMIPUBLIC, CHARGE-A-CALL, and INMATE CALLS. 
+#2 
+#Coin Over Collection 
+#Indicates that the AMOUNT COLLECTED exceeds the COIN TARIFF AMOUNT, plus the COIN FEDERAL TAX, plus the STATE TAX (if applicable) plus LOCAL TAX (if applicable) on a COIN PAID MESSAGE. On a OSS COIN MEMO, the value in the AMOUNT COLLECTED field represents the excess collected over the amount due 
+#3 
+#Coin Undercollection 
+#Indicates that the AMOUNT COLLECTED is less than the COIN TARIFF AMOUNT, plus COIN FEDERAL TAX, plus STATE TAX (if applicable), plus LOCAL TAX (if applicable) on a COIN PAID MESSAGE. On a OSS Coin Memo, the value and the AMOUNT COLLECTED field represents the difference between the amount collected and the amount due. 
+#4 
+#Hotel-Motel-Hospital- University Dorm Room Originated 
+#The Message originated at an extension in a hotel, motel, hospital, or university dorm room 
+#5 
+#OUTWATS Out of Band 
+#Message originated at an OUTWATS line and terminated at an out-of-band point. 
+#6 
+#Non-Hotel-Auto/Voice Quote 
+#OSS message originated at a non-hotel business subscribing to automated Voice Charge Quotation Service 
+#7 
+#IC Carrier Owned Public Telephone Originated 
+#Message originated at an IC Carrier owned public telephone station 
+#8* 
+#Customer Owned Public Telephone Originated 
+#Message originated at a customer owned public telephone station. 
+
+    '', #indicator_2
+    '', #indicator_3
+    '', #indicator_4
+    '', #indicator_5
+    '', #indicator_6
+    '', #indicator_7
+    '', #indicator_8
+    '', #indicator_9
+
+    '', #indicator_10
+#Indicator 10 – Radio Services or IP Services Terminated
+#Value
+#Indicates
+#Definition
+#1
+#Mobile Non-Roamer Terminated
+#Indicates that the transaction terminated at a Mobile Non-Roamer.
+#2
+#Mobile Roamer Terminated
+#Indicates that the transaction terminated at a Mobile Roamer.
+#3
+#Aircraft Terminated
+#Indicates that the transaction terminated through Air/Ground facilities.
+#4
+#High Speed Train Terminated
+#Indicates that the transaction terminated aboard a High Speed Train.
+#5
+#Marine Terminated
+#Indicates that the transaction terminated through Coastal Harbor, VHF, marine facilities.
+#6
+#MARISAT Terminated
+#Indicates that the transaction terminated using Marine Satellite facilities.
+#7
+#High Seas Terminated Indicates that the transaction Terminated through
+#High Seas Marine facilities.
+#8
+#Cellular Terminated
+#Indicates that the transaction is cellular terminated.
+#9
+#IP Terminated
+
+    '', #indicator_11
+    '', #indicator_12
+    '', #indicator_13
+    '', #indicator_14
+    '', #indicator_15
+    '', #indicator_16
+    '', #indicator_17
+    '', #indicator_18
+
+    '', #indicator_19
+#Indicator 19 - LATA Identifier 
+#Value
+#Indicates
+#Definition 
+#0 
+#Not Applicable 
+#Valid for Unrated Message (Category 10), Telegram Charge (01-01-14), summary Non-Detail Credit (41-50-01), summary Non-Detail Charge (42-50-01), summary Post-Billing Adjustment Non-Detail (45-50-01) records and 800 Records Recorded at the SSP (01-01-25) records. Also valid for IP records. 
+#1 
+#IntraLATA - LEC Message 
+#Indicates that the message originated and terminated within the same LATA and was for telecommunications services provided by a LEC or traffic transported by facilities belonging to or leased by a LEC. Revenue belongs to the LEC. For Category 11 records, this value indicates IntraLATA only, and not whether IC or LEC carried. This is the preferred value for Category 11 IntraLATA. 
+#2 
+#InterLATA - IC Message 
+#Indicates that the message originated in one LATA and terminated in another LATA and was transported by an IC. Revenue belongs to the IC. For Category 11 records, this value indicates InterLATA only, and not whether IC or LEC carried. This is the preferred value for Category 11 InterLATA. 
+#3 
+#InterLATA - LEC Message 
+#Indicates that the message originated in one LATA and terminated in another LATA and was for telecommunications services provided by a LEC or traffic transported by facilities belonging to or leased by a LEC (e.g., Corridor Traffic or interLATA local traffic, as defined in the local tariff). Revenue belongs to the LEC. For Category 11 records, this value indicates InterLATA only, and not whether IC or LEC carried.
+#
+#Indicator 24 - Specialized Services 
+#Value 
+#Indicates 
+#Definition 
+#1 
+#Telecommunications Relay Service 
+#Indicates a call was placed using a Telecommunications Relay Service. 
+#2 
+#Three Way Calling 
+#Indicates the message originated as part of the Three Way Calling feature. 
+#3 
+#Directory Assistance Call Completion 
+#Indicates the call was completed as a result of a call to a Directory Assistance Call Completion (DACC). 
+
+    '', #UNKNOWN_3
+
+    'charged_party', #billing_number
+
+    'upstream_src_regionname', #calling_city
+
+    sub { #calling_state
+      my($cdr, $data, $conf, $param) = @_;
+      $cdr->upstream_src_regionname( $cdr->upstream_src_regionname.', '. $data);
+    },
+
+    'upstream_dst_regionname', #called_city
+
+    sub { #called_state
+      my($cdr, $data, $conf, $param) = @_;
+      $cdr->upstream_dst_regionname( $cdr->upstream_dst_regionname.', '. $data);
+    },
+
+    '', #UNKNOWN_4
+
+    '', #settlement_code
+#Settlement Code A one-position alphanumeric field used for the classification of messages and revenues. Two levels of detail are defined below: 1. The first set of codes is considered to be the minimum requirement. 2. The second set of codes provide a higher level of detail regarding the origin and termination of the message. This additional level of detail can be used where required and where negotiated between the Sending and Receiving companies.
+#
+# Minimum Requirements: 6 2. A message between points within the same company’s territory in Canada. Example: Points within the Province of Quebec. J 
+#Settlement Code 
+#Description 
+#5 
+#INTER-CANADA 
+#A message between points within Canada. (Also see Settlement Codes ‘5’ and ‘8’in the optional, more detailed section below.) 
+#LOCAL 
+#Identifies a service filed under a Local Exchange Tariff. This value is not valid for Category 11 records when traffic utilizes the IC network. (1+ presubscribed, 101XXXX dialed, etc.) 
+#7 
+#EAS/EMS (Extended Area Service/Extended Metro Service) This value is to be used for Access Record exchange. 
+#8 
+#INTRASTATE - U.S./U.S. 
+#INTERSTATE - U.S./U.S. 
+#A message between points in different states within the United States or its territories (i.e., Puerto Rico, the U. S. Virgin Islands, Guam, American Samoa and the Commonwealth of the Northern Mariana Islands). Examples: New Jersey/Maryland, New York/Puerto Rico, California/Alaska. (Also see Settlement Codes ‘G’ and ‘Q’ in the optional, more detailed descriptions below.) 
+#NOTE: This Settlement Code is used for all interstate Radio Link Charges. 
+#K 
+#INTERNATIONAL - U.S./CANADA 
+#A message between a point within the United States and its territories (i.e., Puerto Rico, the U. S. Virgin Islands, Guam, American Samoa and the Commonwealth of the Northern Mariana Islands) and a point in Canada. Example: New York/Quebec. 
+
+    '', #UNKNOWN_5
+
+    '', #ind24
+#Indicator 24 - Specialized Services 
+#Value 
+#Indicates 
+#Definition 
+#1 
+#Telecommunications Relay Service 
+#Indicates a call was placed using a Telecommunications Relay Service. 
+#2 
+#Three Way Calling 
+#Indicates the message originated as part of the Three Way Calling feature. 
+#3 
+#Directory Assistance Call Completion 
+#Indicates the call was completed as a result of a call to a Directory Assistance Call Completion (DACC). 
+
+    '', #UNKNOWN_6
+
+    '', #calling_module
+#Calling Module contains a 3 digit value that identifies the module plus a one position alpha filed that contains the module version. 
+
+    '', #module_value_length
+
+    '', #cai
+
+    'accountcode', #account_code
+
+    '', #UNKNOWN_7
+
+    '', #tmod
+
+  ],
+
+);
+
+1;
+

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

Summary of changes:
 FS/FS/cdr/emi.pm |  362 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 362 insertions(+), 0 deletions(-)
 create mode 100644 FS/FS/cdr/emi.pm




More information about the freeside-commits mailing list