File Coverage

File:C4/SIP/Sip/Constants.pm
Coverage:100.0%

linestmtbrancondsubtimecode
1#
2# Sip::Constants.pm
3#
4# Various protocol constant values for 3M's Standard Interchange
5# Protocol for communication between a library's Automated
6# Checkout System (ACS) and stand-alone Self-Check (SC) units
7
8package Sip::Constants;
9
10
1
1
1
10
5
32
use strict;
11
1
1
1
8
5
44
use warnings;
12
1
1
1
9
4
528
use Exporter;
13
14our (@ISA, @EXPORT_OK, %EXPORT_TAGS);
15
16BEGIN {
17
1
13
    @ISA = qw(Exporter);
18
1
58
    %EXPORT_TAGS = (
19
20    SC_msgs => [qw(
21        PATRON_STATUS_REQ
22        CHECKOUT CHECKIN
23        SC_STATUS REQUEST_ACS_RESEND
24        LOGIN PATRON_INFO END_PATRON_SESSION
25        FEE_PAID ITEM_INFORMATION ITEM_STATUS_UPDATE
26        HOLD RENEW RENEW_ALL
27        PATRON_ENABLE
28        BLOCK_PATRON
29    )],
30
31    ACS_msgs => [qw(
32        PATRON_STATUS_RESP
33        CHECKOUT_RESP CHECKIN_RESP
34        ACS_STATUS REQUEST_SC_RESEND
35        LOGIN_RESP PATRON_INFO_RESP END_SESSION_RESP
36        FEE_PAID_RESP ITEM_INFO_RESP ITEM_STATUS_UPDATE_RESP
37        HOLD_RESP RENEW_RESP RENEW_ALL_RESP
38        PATRON_ENABLE_RESP
39    )],
40
41    SC_status => [qw(SC_STATUS_OK SC_STATUS_PAPER SC_STATUS_SHUTDOWN)],
42    formats => [qw(SIP_DATETIME)],
43    constant_msgs => [qw(REQUEST_ACS_RESEND_CKSUM REQUEST_SC_RESEND_CKSUM)],
44
45    field_ids => [qw(
46        FID_PATRON_ID FID_ITEM_ID
47        FID_TERMINAL_PWD FID_PATRON_PWD
48        FID_PERSONAL_NAME FID_DUE_DATE
49        FID_SCREEN_MSG FID_PRINT_LINE
50        FID_TITLE_ID FID_BLOCKED_CARD_MSG
51        FID_TERMINAL_LOCN FID_INST_ID
52        FID_CURRENT_LOCN FID_LIBRARY_NAME
53        FID_PERM_LOCN
54        FID_HOLD_ITEMS FID_HOLD_ITEMS_LMT
55        FID_OVERDUE_ITEMS FID_OVERDUE_ITEMS_LMT
56        FID_CHARGED_ITEMS FID_CHARGED_ITEMS_LMT
57        FID_FINE_ITEMS FID_SEQNO
58        FID_CKSUM FID_HOME_ADDR
59        FID_EMAIL FID_HOME_PHONE
60        FID_OWNER FID_CURRENCY
61        FID_CANCEL
62        FID_TRANSACTION_ID FID_VALID_PATRON
63        FID_RENEWED_ITEMS
64        FID_UNRENEWED_ITEMS
65        FID_FEE_ACK
66        FID_START_ITEM FID_END_ITEM FID_QUEUE_POS
67        FID_PICKUP_LOCN FID_FEE_TYPE
68        FID_RECALL_ITEMS
69        FID_FEE_AMT FID_FEE_LMT
70        FID_EXPIRATION
71        FID_SUPPORTED_MSGS
72        FID_HOLD_TYPE
73        FID_UNAVAILABLE_HOLD_ITEMS
74        FID_HOLD_QUEUE_LEN
75        FID_FEE_ID FID_ITEM_PROPS
76        FID_RECALL_DATE FID_SECURITY_INHIBIT
77        FID_MEDIA_TYPE FID_SORT_BIN
78        FID_HOLD_PICKUP_DATE
79        FID_LOGIN_UID FID_LOGIN_PWD
80        FID_LOCATION_CODE
81        FID_VALID_PATRON_PWD
82        FID_PATRON_BIRTHDATE
83        FID_PATRON_CLASS
84        FID_INET_PROFILE
85
86        FID_COLLECTION_CODE
87        FID_CALL_NUMBER
88        FID_DESTINATION_LOCATION
89        FID_ALERT_TYPE
90        FID_HOLD_PATRON_ID
91        FID_HOLD_PATRON_NAME
92        )],
93    );
94
95    # Add the contents of the other ":class" tags to make an ":all" class (deleting duplicates)
96    # This is the textbook example from http://perldoc.perl.org/Exporter.html
97
1
2
    my %seen;
98
1
1
6
105
6
1
4
10
344
9
    push @{$EXPORT_TAGS{all}}, grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} foreach keys %EXPORT_TAGS;
99
1
450
    Exporter::export_ok_tags('all'); # now add :all to @EXPORT_OK
100}
101
102#
103# Declare message types
104#
105
106# Messages from SC to ACS
107use constant {
108
1
23
    PATRON_STATUS_REQ => '23',
109    CHECKOUT => '11',
110    CHECKIN => '09',
111    BLOCK_PATRON => '01',
112    SC_STATUS => '99',
113    REQUEST_ACS_RESEND => '97',
114    LOGIN => '93',
115    PATRON_INFO => '63',
116    END_PATRON_SESSION => '35',
117    FEE_PAID => '37',
118    ITEM_INFORMATION => '17',
119    ITEM_STATUS_UPDATE => '19',
120    PATRON_ENABLE => '25',
121    HOLD => '15',
122    RENEW => '29',
123    RENEW_ALL => '65',
124
1
1
290
1273
};
125
126# Message responses from ACS to SC
127use constant {
128
1
18
    PATRON_STATUS_RESP => '24',
129    CHECKOUT_RESP => '12',
130    CHECKIN_RESP => '10',
131    ACS_STATUS => '98',
132    REQUEST_SC_RESEND => '96',
133    LOGIN_RESP => '94',
134    PATRON_INFO_RESP => '64',
135    END_SESSION_RESP => '36',
136    FEE_PAID_RESP => '38',
137    ITEM_INFO_RESP => '18',
138    ITEM_STATUS_UPDATE_RESP => '20',
139    PATRON_ENABLE_RESP => '26',
140    HOLD_RESP => '16',
141    RENEW_RESP => '30',
142    RENEW_ALL_RESP => '66',
143
1
1
360
1
};
144
145#
146# Some messages are short and invariant, so they're constant's too
147#
148use constant {
149
1
8
    REQUEST_ACS_RESEND_CKSUM => '97AZFEF5',
150    REQUEST_SC_RESEND_CKSUM => '96AZFEF6',
151
1
1
286
1
};
152
153#
154# Field Identifiers
155#
156use constant {
157
1
418
    FID_PATRON_ID => 'AA',
158    FID_ITEM_ID => 'AB',
159    FID_TERMINAL_PWD => 'AC',
160    FID_PATRON_PWD => 'AD',
161    FID_PERSONAL_NAME => 'AE',
162    FID_SCREEN_MSG => 'AF',
163    FID_PRINT_LINE => 'AG',
164    FID_DUE_DATE => 'AH',
165    # UNUSED AI
166    FID_TITLE_ID => 'AJ',
167    # UNUSED AK
168    FID_BLOCKED_CARD_MSG => 'AL',
169    FID_LIBRARY_NAME => 'AM',
170    FID_TERMINAL_LOCN => 'AN',
171    FID_INST_ID => 'AO',
172    FID_CURRENT_LOCN => 'AP',
173    FID_PERM_LOCN => 'AQ',
174    # UNUSED AR
175    FID_HOLD_ITEMS => 'AS', # SIP 2.0
176    FID_OVERDUE_ITEMS => 'AT', # SIP 2.0
177    FID_CHARGED_ITEMS => 'AU', # SIP 2.0
178    FID_FINE_ITEMS => 'AV', # SIP 2.0
179    # UNUSED AW
180    # UNUSED AX
181    FID_SEQNO => 'AY',
182    FID_CKSUM => 'AZ',
183
184    # SIP 2.0 Fields
185    # UNUSED BA
186    # UNUSED BB
187    # UNUSED BC
188    FID_HOME_ADDR => 'BD',
189    FID_EMAIL => 'BE',
190    FID_HOME_PHONE => 'BF',
191    FID_OWNER => 'BG',
192    FID_CURRENCY => 'BH',
193    FID_CANCEL => 'BI',
194    # UNUSED BJ
195    FID_TRANSACTION_ID => 'BK',
196    FID_VALID_PATRON => 'BL',
197    FID_RENEWED_ITEMS => 'BM',
198    FID_UNRENEWED_ITEMS => 'BN',
199    FID_FEE_ACK => 'BO',
200    FID_START_ITEM => 'BP',
201    FID_END_ITEM => 'BQ',
202    FID_QUEUE_POS => 'BR',
203    FID_PICKUP_LOCN => 'BS',
204    FID_FEE_TYPE => 'BT',
205    FID_RECALL_ITEMS => 'BU',
206    FID_FEE_AMT => 'BV',
207    FID_EXPIRATION => 'BW',
208    FID_SUPPORTED_MSGS => 'BX',
209    FID_HOLD_TYPE => 'BY',
210    FID_HOLD_ITEMS_LMT => 'BZ',
211    FID_OVERDUE_ITEMS_LMT => 'CA',
212    FID_CHARGED_ITEMS_LMT => 'CB',
213    FID_FEE_LMT => 'CC',
214    FID_UNAVAILABLE_HOLD_ITEMS => 'CD',
215    # UNUSED CE
216    FID_HOLD_QUEUE_LEN => 'CF',
217    FID_FEE_ID => 'CG',
218    FID_ITEM_PROPS => 'CH',
219    FID_SECURITY_INHIBIT => 'CI',
220    FID_RECALL_DATE => 'CJ',
221    FID_MEDIA_TYPE => 'CK',
222    FID_SORT_BIN => 'CL',
223    FID_HOLD_PICKUP_DATE => 'CM',
224    FID_LOGIN_UID => 'CN',
225    FID_LOGIN_PWD => 'CO',
226    FID_LOCATION_CODE => 'CP',
227    FID_VALID_PATRON_PWD => 'CQ',
228
229    # SIP Extensions used by Envisionware Terminals
230    FID_PATRON_BIRTHDATE => 'PB',
231    FID_PATRON_CLASS => 'PC',
232
233    # SIP Extension for reporting patron internet privileges... application unknown
234    FID_INET_PROFILE => 'PI',
235
236    # SIP Extensions by 3M spec: Document Revision 1.20, 02/14/2005
237    FID_COLLECTION_CODE => 'CR',
238    FID_CALL_NUMBER => 'CS',
239    FID_DESTINATION_LOCATION => 'CT',
240    FID_ALERT_TYPE => 'CV',
241    FID_HOLD_PATRON_ID => 'CY',
242    FID_HOLD_PATRON_NAME => 'DA',
243
1
1
261
2
};
244
245#
246# SC Status Codes
247#
248use constant {
249
1
76
    SC_STATUS_OK => '0',
250    SC_STATUS_PAPER => '1',
251    SC_STATUS_SHUTDOWN => '2',
252
1
1
1145
74
};
253
254#
255# Various format strings
256#
257use constant {
258
1
57
    SIP_DATETIME => "%Y%m%d %H%M%S",
259
1
1
152
54
};
260
2611;