additional QIS/Taqua-specific CDR handling details, RT#3838
[freeside.git] / FS / FS / cdr / taqua.pm
1 package FS::cdr::taqua;
2
3 use strict;
4 use vars qw(@ISA %info);
5 use FS::cdr qw(_cdr_date_parser_maker);
6
7 @ISA = qw(FS::cdr);
8
9 %info = (
10   'name'          => 'Taqua',
11   'weight'        => 130,
12   'header'        => 1,
13   'import_fields' => [  #some of these are kind arbitrary...
14
15     #0
16     'cdrtypenum',                         #RecordType
17     sub { my($cdr, $field) = @_; },             #all10#RecordVersion
18     sub { my($cdr, $field) = @_; },       #OrigShelfNumber
19     sub { my($cdr, $field) = @_; },       #OrigCardNumber
20     sub { my($cdr, $field) = @_; },       #OrigCircuit
21     sub { my($cdr, $field) = @_; },       #OrigCircuitType
22     'uniqueid',                           #SequenceNumber
23     'accountcode',                        #SessionNumber
24     'src',                                #CallingPartyNumber
25     'dst',                                #CalledPartyNumber
26
27     #10
28     _cdr_date_parser_maker('startdate'),  #CallArrivalTime
29     _cdr_date_parser_maker('enddate'),    #CallCompletionTime
30
31     #Disposition
32     #sub { my($cdr, $d ) = @_; $cdr->disposition( $disposition{$d}): },
33     'disposition',
34                                           #  -1 => '',
35                                           #   0 => '',
36                                           # 100 => '',
37                                           # 101 => '',
38                                           # 102 => '',
39                                           # 103 => '',
40                                           # 104 => '',
41                                           # 105 => '',
42                                           # 201 => '',
43                                           # 203 => '',
44
45     _cdr_date_parser_maker('answerdate'), #DispositionTime
46     sub { my($cdr, $field) = @_; },       #TCAP
47     sub { my($cdr, $field) = @_; },       #OutboundCarrierConnectTime
48     sub { my($cdr, $field) = @_; },       #OutboundCarrierDisconnectTime
49
50     #TermTrunkGroup
51     #it appears channels are actually part of trunk groups, but this data
52     #is interesting and we need a source and destination place to put it
53     'dstchannel',                         #TermTrunkGroup
54
55
56     sub { my($cdr, $field) = @_; },       #TermShelfNumber
57     sub { my($cdr, $field) = @_; },       #TermCardNumber
58
59     #20
60     sub { my($cdr, $field) = @_; },       #TermCircuit
61     sub { my($cdr, $field) = @_; },       #TermCircuitType
62     'carrierid',                          #OutboundCarrierId
63     'charged_party',                      #BillingNumber
64     sub { my($cdr, $field) = @_; },       #SubscriberNumber
65     'lastapp',                            #ServiceName
66     sub { my($cdr, $field) = @_; },       #some weirdness #ChargeTime
67     'lastdata',                           #ServiceInformation
68     sub { my($cdr, $field) = @_; },       #FacilityInfo
69     sub { my($cdr, $field) = @_; },             #all 1900-01-01 0#CallTraceTime
70
71     #30
72     sub { my($cdr, $field) = @_; },             #all-1#UniqueIndicator
73     sub { my($cdr, $field) = @_; },             #all-1#PresentationIndicator
74     sub { my($cdr, $field) = @_; },             #empty#Pin
75     'calltypenum',                        #CallType
76
77     #nothing below is used by QIS...
78
79     sub { my($cdr, $field) = @_; },           #Balt/empty #OrigRateCenter
80     sub { my($cdr, $field) = @_; },           #Balt/empty #TermRateCenter
81
82     #OrigTrunkGroup
83     #it appears channels are actually part of trunk groups, but this data
84     #is interesting and we need a source and destination place to put it
85     'channel',                            #OrigTrunkGroup
86
87     'userfield',                                #empty#UserDefined
88     sub { my($cdr, $field) = @_; },             #empty#PseudoDestinationNumber
89     sub { my($cdr, $field) = @_; },             #all-1#PseudoCarrierCode
90
91     #40
92     sub { my($cdr, $field) = @_; },             #empty#PseudoANI
93     sub { my($cdr, $field) = @_; },             #all-1#PseudoFacilityInfo
94     sub { my($cdr, $field) = @_; },       #OrigDialedDigits
95     sub { my($cdr, $field) = @_; },             #all-1#OrigOutboundCarrier
96     sub { my($cdr, $field) = @_; },       #IncomingCarrierID
97     'dcontext',                           #JurisdictionInfo
98     sub { my($cdr, $field) = @_; },       #OrigDestDigits
99     sub { my($cdr, $field) = @_; },       #huh?#InsertTime
100     sub { my($cdr, $field) = @_; },       #key
101     sub { my($cdr, $field) = @_; },             #empty#AMALineNumber
102
103     #50
104     sub { my($cdr, $field) = @_; },             #empty#AMAslpID
105     sub { my($cdr, $field) = @_; },             #empty#AMADigitsDialedWC
106     sub { my($cdr, $field) = @_; },       #OpxOffHook
107     sub { my($cdr, $field) = @_; },       #OpxOnHook
108
109         #acctid - primary key
110   #AUTO #calldate - Call timestamp (SQL timestamp)
111 #clid - Caller*ID with text
112         #XXX src - Caller*ID number / Source number
113         #XXX dst - Destination extension
114         #dcontext - Destination context
115         #channel - Channel used
116         #dstchannel - Destination channel if appropriate
117         #lastapp - Last application if appropriate
118         #lastdata - Last application data
119         #startdate - Start of call (UNIX-style integer timestamp)
120         #answerdate - Answer time of call (UNIX-style integer timestamp)
121         #enddate - End time of call (UNIX-style integer timestamp)
122   #HACK#duration - Total time in system, in seconds
123   #HACK#XXX billsec - Total time call is up, in seconds
124         #disposition - What happened to the call: ANSWERED, NO ANSWER, BUSY
125 #INT amaflags - What flags to use: BILL, IGNORE etc, specified on a per channel basis like accountcode.
126         #accountcode - CDR account number to use: account
127
128         #uniqueid - Unique channel identifier (Unitel/RSLCOM Event ID)
129         #userfield - CDR user-defined field
130
131         #X cdrtypenum - CDR type - see FS::cdr_type (Usage = 1, S&E = 7, OC&C = 8)
132         #XXX charged_party - Service number to be billed
133 #upstream_currency - Wholesale currency from upstream
134 #X upstream_price - Wholesale price from upstream
135 #upstream_rateplanid - Upstream rate plan ID
136 #rated_price - Rated (or re-rated) price
137 #distance - km (need units field?)
138 #islocal - Local - 1, Non Local = 0
139 #calltypenum - Type of call - see FS::cdr_calltype
140 #X description - Description (cdr_type 7&8 only) (used for cust_bill_pkg.itemdesc)
141 #quantity - Number of items (cdr_type 7&8 only)
142 #carrierid - Upstream Carrier ID (see FS::cdr_carrier)
143 #upstream_rateid - Upstream Rate ID
144
145         #svcnum - Link to customer service (see FS::cust_svc)
146         #freesidestatus - NULL, done (or something)
147   ],
148 );
149
150 1;