001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.iso.packager; 020 021import org.jpos.iso.*; 022import org.jpos.util.Logger; 023 024/** 025 * EuroPay packager 026 * @author Eoin Flood 027 * @version $Revision$ $Date$ 028 * @see ISOPackager 029 * @see ISOBasePackager 030 * @see ISOComponent 031 */ 032public class EuroPackager extends ISOBasePackager { 033 /** Packager for the private data sub-elements in field 48. */ 034 protected ISOPackager f48Packager = new Euro48Packager(); 035 /** Field packager definitions for all EuroPay ISO-8583 fields. */ 036 protected ISOFieldPackager fld[] = { 037 /*000*/ new IFA_NUMERIC ( 4, "MESSAGE TYPE INDICATOR"), 038 /*001*/ new IFB_BITMAP ( 16, "BIT MAP"), 039 /*002*/ new IFA_LLNUM ( 19, "PAN - PRIMARY ACCOUNT NUMBER"), 040 /*003*/ new IFA_NUMERIC ( 6, "PROCESSING CODE"), 041 /*004*/ new IFA_NUMERIC ( 12, "AMOUNT, TRANSACTION"), 042 /*005*/ new IFA_NUMERIC ( 12, "AMOUNT, SETTLEMENT"), 043 /*006*/ new IFA_NUMERIC ( 12, "AMOUNT, CARDHOLDER BILLING"), 044 /*007*/ new IFA_NUMERIC ( 10, "TRANSMISSION DATE AND TIME"), 045 /*008*/ new IFA_NUMERIC ( 8, "AMOUNT, CARDHOLDER BILLING FEE"), 046 /*009*/ new IFA_NUMERIC ( 8, "CONVERSION RATE, SETTLEMENT"), 047 /*010*/ new IFA_NUMERIC ( 8, "CONVERSION RATE, CARDHOLDER BILLING"), 048 /*011*/ new IFA_NUMERIC ( 6, "SYSTEM TRACE AUDIT NUMBER"), 049 /*012*/ new IFA_NUMERIC ( 6, "TIME, LOCAL TRANSACTION"), 050 /*013*/ new IFA_NUMERIC ( 4, "DATE, LOCAL TRANSACTION"), 051 /*014*/ new IFA_NUMERIC ( 4, "DATE, EXPIRATION"), 052 /*015*/ new IFA_NUMERIC ( 4, "DATE, SETTLEMENT"), 053 /*016*/ new IFA_NUMERIC ( 4, "DATE, CONVERSION"), 054 /*017*/ new IFA_NUMERIC ( 4, "DATE, CAPTURE"), 055 /*018*/ new IFA_NUMERIC ( 4, "MERCHANTS TYPE"), 056 /*019*/ new IFA_NUMERIC ( 3, "ACQUIRING INSTITUTION COUNTRY CODE"), 057 /*020*/ new IFA_NUMERIC ( 3, "PAN EXTENDED COUNTRY CODE"), 058 /*021*/ new IFA_NUMERIC ( 3, "FORWARDING INSTITUTION COUNTRY CODE"), 059 /*022*/ new IFA_NUMERIC ( 3, "POINT OF SERVICE ENTRY MODE"), 060 /*023*/ new IFA_NUMERIC ( 3, "CARD SEQUENCE NUMBER"), 061 /*024*/ new IFA_NUMERIC ( 3, "NETWORK INTERNATIONAL IDENTIFIEER"), 062 /*025*/ new IFA_NUMERIC ( 2, "POINT OF SERVICE CONDITION CODE"), 063 /*026*/ new IFA_NUMERIC ( 2, "POINT OF SERVICE PIN CAPTURE CODE"), 064 /*027*/ new IFA_NUMERIC ( 1, "AUTHORIZATION IDENTIFICATION RESP LEN"), 065 /*028*/ new IFA_AMOUNT ( 9, "AMOUNT, TRANSACTION FEE"), 066 /*029*/ new IFA_AMOUNT ( 9, "AMOUNT, SETTLEMENT FEE"), 067 /*030*/ new IFA_AMOUNT ( 9, "AMOUNT, TRANSACTION PROCESSING FEE"), 068 /*031*/ new IFA_AMOUNT ( 9, "AMOUNT, SETTLEMENT PROCESSING FEE"), 069 /*032*/ new IFA_LLNUM ( 11, "ACQUIRING INSTITUTION IDENT CODE"), 070 /*033*/ new IFA_LLNUM ( 11, "FORWARDING INSTITUTION IDENT CODE"), 071 /*034*/ new IFA_LLCHAR ( 28, "PAN EXTENDED"), 072 /*035*/ new IFA_LLNUM ( 37, "TRACK 2 DATA"), 073 /*036*/ new IFA_LLLCHAR (104, "TRACK 3 DATA"), 074 /*037*/ new IF_CHAR ( 12, "RETRIEVAL REFERENCE NUMBER"), 075 /*038*/ new IF_CHAR ( 6, "AUTHORIZATION IDENTIFICATION RESPONSE"), 076 /*039*/ new IF_CHAR ( 2, "RESPONSE CODE"), 077 /*040*/ new IF_CHAR ( 3, "SERVICE RESTRICTION CODE"), 078 /*041*/ new IF_CHAR ( 8, "CARD ACCEPTOR TERMINAL IDENTIFICACION"), 079 /*042*/ new IF_CHAR ( 15, "CARD ACCEPTOR IDENTIFICATION CODE" ), 080 /*043*/ new IF_CHAR ( 40, "CARD ACCEPTOR NAME/LOCATION"), 081 /*044*/ new IFA_LLCHAR ( 25, "ADITIONAL RESPONSE DATA"), 082 /*045*/ new IFA_LLCHAR ( 76, "TRACK 1 DATA"), 083 /*046*/ new IFA_LLLCHAR (999, "ADITIONAL DATA - ISO"), 084 /*047*/ new IFA_LLLCHAR (999, "ADITIONAL DATA - NATIONAL"), 085 /*048*/ new ISOMsgFieldPackager( 086 new IFA_LLLBINARY (999, "EUROPAY FIELD 48"), 087 f48Packager 088 ), 089 /*049*/ new IF_CHAR ( 3, "CURRENCY CODE, TRANSACTION"), 090 /*050*/ new IF_CHAR ( 3, "CURRENCY CODE, SETTLEMENT"), 091 /*051*/ new IF_CHAR ( 3, "CURRENCY CODE, CARDHOLDER BILLING" ), 092 /*052*/ new IFA_BINARY ( 8, "PIN DATA" ), 093 /*053*/ new IFA_NUMERIC ( 16, "SECURITY RELATED CONTROL INFORMATION"), 094 /*054*/ new IFA_LLLCHAR (120, "ADDITIONAL AMOUNTS"), 095 /*055*/ new IFA_LLLCHAR (999, "RESERVED ISO"), 096 /*056*/ new IFA_LLLCHAR (999, "RESERVED ISO"), 097 /*057*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL"), 098 /*058*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL"), 099 /*059*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL"), 100 /*060*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 101 /*061*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 102 /*062*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 103 /*063*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE"), 104 /*064*/ new IFA_BINARY ( 8, "MESSAGE AUTHENTICATION CODE FIELD"), 105 /*065*/ new IFA_BINARY ( 8, "BITMAP, EXTENDED"), 106 /*066*/ new IFA_NUMERIC ( 1, "SETTLEMENT CODE"), 107 /*067*/ new IFA_NUMERIC ( 2, "EXTENDED PAYMENT CODE"), 108 /*068*/ new IFA_NUMERIC ( 3, "RECEIVING INSTITUTION COUNTRY CODE"), 109 /*069*/ new IFA_NUMERIC ( 3, "SETTLEMENT INSTITUTION COUNTRY CODE"), 110 /*070*/ new IFA_NUMERIC ( 3, "NETWORK MANAGEMENT INFORMATION CODE"), 111 /*071*/ new IFA_NUMERIC ( 4, "MESSAGE NUMBER"), 112 /*072*/ new IFA_NUMERIC ( 4, "MESSAGE NUMBER LAST"), 113 /*073*/ new IFA_NUMERIC ( 6, "DATE ACTION"), 114 /*074*/ new IFA_NUMERIC ( 10, "CREDITS NUMBER"), 115 /*075*/ new IFA_NUMERIC ( 10, "CREDITS REVERSAL NUMBER"), 116 /*076*/ new IFA_NUMERIC ( 10, "DEBITS NUMBER"), 117 /*077*/ new IFA_NUMERIC ( 10, "DEBITS REVERSAL NUMBER"), 118 /*078*/ new IFA_NUMERIC ( 10, "TRANSFER NUMBER"), 119 /*079*/ new IFA_NUMERIC ( 10, "TRANSFER REVERSAL NUMBER"), 120 /*080*/ new IFA_NUMERIC ( 10, "INQUIRIES NUMBER"), 121 /*081*/ new IFA_NUMERIC ( 10, "AUTHORIZATION NUMBER"), 122 /*082*/ new IFA_NUMERIC ( 12, "CREDITS, PROCESSING FEE AMOUNT"), 123 /*083*/ new IFA_NUMERIC ( 12, "CREDITS, TRANSACTION FEE AMOUNT"), 124 /*084*/ new IFA_NUMERIC ( 12, "DEBITS, PROCESSING FEE AMOUNT"), 125 /*085*/ new IFA_NUMERIC ( 12, "DEBITS, TRANSACTION FEE AMOUNT"), 126 /*086*/ new IFA_NUMERIC ( 16, "CREDITS, AMOUNT"), 127 /*087*/ new IFA_NUMERIC ( 16, "CREDITS, REVERSAL AMOUNT"), 128 /*088*/ new IFA_NUMERIC ( 16, "DEBITS, AMOUNT"), 129 /*089*/ new IFA_NUMERIC ( 16, "DEBITS, REVERSAL AMOUNT"), 130 /*090*/ new IFA_NUMERIC ( 42, "ORIGINAL DATA ELEMENTS"), 131 /*091*/ new IF_CHAR ( 1, "FILE UPDATE CODE"), 132 /*092*/ new IF_CHAR ( 2, "FILE SECURITY CODE"), 133 /*093*/ new IF_CHAR ( 5, "RESPONSE INDICATOR"), 134 /*094*/ new IF_CHAR ( 7, "SERVICE INDICATOR"), 135 /*095*/ new IF_CHAR ( 42, "REPLACEMENT AMOUNTS"), 136 /*096*/ new IFA_BINARY ( 8, "MESSAGE SECURITY CODE"), 137 /*097*/ new IFA_AMOUNT ( 17, "AMOUNT, NET SETTLEMENT"), 138 /*098*/ new IF_CHAR ( 25, "PAYEE"), 139 /*099*/ new IFA_LLNUM ( 11, "SETTLEMENT INSTITUTION IDENT CODE"), 140 /*100*/ new IFA_LLNUM ( 11, "RECEIVING INSTITUTION IDENT CODE"), 141 /*101*/ new IFA_LLCHAR ( 17, "FILE NAME"), 142 /*102*/ new IFA_LLCHAR ( 28, "ACCOUNT IDENTIFICATION 1"), 143 /*103*/ new IFA_LLCHAR ( 28, "ACCOUNT IDENTIFICATION 2"), 144 /*104*/ new IFA_LLLCHAR (100, "TRANSACTION DESCRIPTION"), 145 /*105*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 146 /*106*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 147 /*107*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 148 /*108*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 149 /*109*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 150 /*110*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 151 /*111*/ new IFA_LLLCHAR (999, "RESERVED ISO USE"), 152 /*112*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 153 /*113*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 154 /*114*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE" ), 155 /*115*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 156 /*116*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE" ), 157 /*117*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 158 /*118*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 159 /*119*/ new IFA_LLLCHAR (999, "RESERVED NATIONAL USE"), 160 /*120*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 161 /*121*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 162 /*122*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 163 /*123*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 164 /*124*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 165 /*125*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 166 /*126*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 167 /*127*/ new IFA_LLLCHAR (999, "RESERVED PRIVATE USE"), 168 /*128*/ new IFA_LLLCHAR (999, "MAC 2") 169 }; 170 171 /** Creates an EuroPackager with the standard EuroPay field definitions. */ 172 public EuroPackager () { 173 super(); 174 setFieldPackager(this.fld); 175 } 176 177 public void setLogger (Logger logger, String realm) { 178 this.logger = logger; 179 this.realm = realm; 180 // f48Packager.setLogger (logger, realm + ".field-48"); 181 } 182 183 /** Packager for EuroPay ISO-8583 field 48 Private Data Sub-elements (PDS). */ 184 protected static class Euro48Packager extends EuroSubFieldPackager 185 { 186 // EuroPay refers to the message subfields as 187 // Private Data Subelements (PDS) 188 private ISOFieldPackager fld48[] = 189 { 190 new IF_CHAR (4, "PLACEHOLDER"), 191 new IFEP_LLCHAR (18, "Field 48 - PDS01"), 192 new IFEP_LLCHAR (4, "Field 48 - PDS02"), 193 new IFEP_LLCHAR (4, "Field 48 - PDS03"), 194 new IFEP_LLCHAR (4, "Field 48 - PDS04"), 195 new IFEP_LLCHAR (98, "Field 48 - PDS05"), 196 new IFEP_LLCHAR (4, "Field 48 - PDS06"), 197 new IFEP_LLCHAR (4, "Field 48 - PDS07"), 198 new IFEP_LLCHAR (4, "Field 48 - PDS08"), 199 new IFEP_LLCHAR (0, ""), 200 new IFEP_LLCHAR (0, ""), 201 new IFEP_LLCHAR (0, ""), 202 new IFEP_LLCHAR (0, ""), 203 new IFEP_LLCHAR (0, ""), 204 new IFEP_LLCHAR (0, ""), 205 new IFEP_LLCHAR (0, ""), 206 new IFEP_LLCHAR (0, ""), 207 new IFEP_LLCHAR (0, ""), 208 new IFEP_LLCHAR (0, ""), 209 new IFEP_LLCHAR (0, ""), 210 new IFEP_LLCHAR (3, "Field 48 - PDS20"), 211 new IFEP_LLCHAR (0, ""), 212 new IFEP_LLCHAR (0, ""), 213 new IFEP_LLCHAR (0, ""), 214 new IFEP_LLCHAR (0, ""), 215 new IFEP_LLCHAR (0, ""), 216 new IFEP_LLCHAR (0, ""), 217 new IFEP_LLCHAR (0, ""), 218 new IFEP_LLCHAR (0, ""), 219 new IFEP_LLCHAR (0, ""), 220 new IFEP_LLCHAR (0, ""), 221 new IFEP_LLCHAR (0, ""), 222 new IFEP_LLCHAR (0, ""), 223 new IFEP_LLCHAR (0, ""), 224 new IFEP_LLCHAR (0, ""), 225 new IFEP_LLCHAR (0, ""), 226 new IFEP_LLCHAR (0, ""), 227 new IFEP_LLCHAR (0, ""), 228 new IFEP_LLCHAR (0, ""), 229 new IFEP_LLCHAR (0, ""), 230 new IFEP_LLCHAR (42, "Field 48 - PDS40"), 231 new IFEP_LLCHAR (0, ""), 232 new IFEP_LLCHAR (4, "Field 48 - PDS42"), 233 new IFEP_LLCHAR (0, ""), 234 new IFEP_LLCHAR (0, ""), 235 new IFEP_LLCHAR (0, ""), 236 new IFEP_LLCHAR (0, ""), 237 new IFEP_LLCHAR (0, ""), 238 new IFEP_LLCHAR (0, ""), 239 new IFEP_LLCHAR (0, ""), 240 new IFEP_LLCHAR (0, ""), 241 new IFEP_LLCHAR (0, ""), 242 new IFEP_LLCHAR (0, ""), 243 new IFEP_LLCHAR (0, ""), 244 new IFEP_LLCHAR (0, ""), 245 new IFEP_LLCHAR (0, ""), 246 new IFEP_LLCHAR (0, ""), 247 new IFEP_LLCHAR (0, ""), 248 new IFEP_LLCHAR (0, ""), 249 new IFEP_LLCHAR (0, ""), 250 new IFEP_LLCHAR (0, ""), 251 new IFEP_LLCHAR (0, ""), 252 new IFEP_LLCHAR (0, ""), 253 new IFEP_LLCHAR (0, ""), 254 new IFEP_LLCHAR (0, ""), 255 new IFEP_LLCHAR (0, ""), 256 new IFEP_LLCHAR (0, ""), 257 new IFEP_LLCHAR (0, ""), 258 new IFEP_LLCHAR (0, ""), 259 new IFEP_LLCHAR (0, ""), 260 new IFEP_LLCHAR (0, ""), 261 new IFEP_LLCHAR (0, ""), 262 new IFEP_LLCHAR (0, ""), 263 new IFEP_LLCHAR (0, ""), 264 new IFEP_LLCHAR (0, ""), 265 new IFEP_LLCHAR (0, ""), 266 new IFEP_LLCHAR (0, ""), 267 new IFEP_LLCHAR (0, ""), 268 new IFEP_LLCHAR (0, ""), 269 new IFEP_LLCHAR (0, ""), 270 new IFEP_LLCHAR (0, ""), 271 new IFEP_LLCHAR (0, ""), 272 new IFEP_LLCHAR (0, ""), 273 new IFEP_LLCHAR (0, ""), 274 new IFEP_LLCHAR (0, ""), 275 new IFEP_LLCHAR (0, ""), 276 new IFEP_LLCHAR (0, ""), 277 new IFEP_LLCHAR (3, "Field 48 - PDS87"), 278 new IFEP_LLCHAR (3, "Field 48 - PDS88"), 279 new IFEP_LLCHAR (3, "Field 48 - PDS89"), 280 new IFEP_LLCHAR (0, ""), 281 new IFEP_LLCHAR (0, ""), 282 new IFEP_LLCHAR (5, "Field 48 - PDS92"), 283 }; 284 285 /** Creates an Euro48Packager with the EuroPay PDS sub-element definitions. */ 286 protected Euro48Packager () 287 { 288 super(); 289 setFieldPackager(fld48); 290 } 291 } 292}