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