Bug 9531: Make SIP2 message terminator configurable via SIPconfig.xml
[koha.git] / C4 / SIP / Sip / Constants.pm
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
8 package Sip::Constants;
9
10 use strict;
11 use warnings;
12 use Exporter;
13
14 our (@ISA, @EXPORT_OK, %EXPORT_TAGS);
15
16 BEGIN {
17     @ISA         = qw(Exporter);
18     %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     my %seen;
98     push @{$EXPORT_TAGS{all}}, grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} foreach keys %EXPORT_TAGS;
99     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
107 use constant {
108     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 };
125
126 # Message responses from ACS to SC
127 use constant {
128     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 };
144
145 #
146 # Some messages are short and invariant, so they're constant's too
147 #
148 use constant {
149     REQUEST_ACS_RESEND_CKSUM => '97AZFEF5',
150     REQUEST_SC_RESEND_CKSUM  => '96AZFEF6',
151 };
152
153 #
154 # Field Identifiers
155 #
156 use constant {
157     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 };
244
245 #
246 # SC Status Codes
247 #
248 use constant {
249     SC_STATUS_OK       => '0',
250     SC_STATUS_PAPER    => '1',
251     SC_STATUS_SHUTDOWN => '2',
252 };
253
254 #
255 # Various format strings
256 #
257 use constant {
258     SIP_DATETIME => "%Y%m%d    %H%M%S",
259 };
260
261 1;