github.com/danil/iso8583@v0.21.0/codec8583/tsys_format.go (about)

     1  package codec8583
     2  
     3  import (
     4  	"github.com/danil/iso8583/tsysbitmap64r"
     5  )
     6  
     7  var (
     8  	TSYSMarshaler   = NewMarshaler(TSYS)
     9  	TSYSUnmarshaler = NewUnmarshaler(TSYS)
    10  )
    11  
    12  // TSYS is a format of the ISO 8583 message which maps the codecs to MIT/bitmaps/each individual field.
    13  var TSYS = Format{
    14  	-1:  MTIAsciiCodec,                                        // Message type indicator (MTI)
    15  	0:   BitmapCodec,                                          // Primary Bitmap
    16  	1:   BitmapCodec,                                          // Second Bitmap
    17  	2:   LLVAR{19, ASCII, EncN, DecN},                         // Primary account number (PAN)
    18  	3:   FIX{6, ASCII, EncN, DecN},                            // Processing code
    19  	4:   FIX{12, ASCII, EncN, DecN},                           // Amount, transaction
    20  	5:   FIX{12, ASCII, EncN, DecN},                           // Amount, settlement
    21  	6:   FIX{12, ASCII, EncN, DecN},                           // Amount, cardholder billing
    22  	7:   FIX{10, ASCII, EncN, DecN},                           // Transmission date & time
    23  	8:   FIX{8, ASCII, EncN, DecN},                            // Amount, cardholder billing fee
    24  	9:   FIX{8, ASCII, EncN, DecN},                            // Conversion rate, settlement
    25  	10:  FIX{8, ASCII, EncN, DecN},                            // Conversion rate, cardholder billing
    26  	11:  FIX{6, ASCII, EncN, DecN},                            // System trace audit number (STAN)
    27  	12:  FIX{6, ASCII, EncN, DecN},                            // Local transaction time (hhmmss)
    28  	13:  FIX{4, ASCII, EncN, DecN},                            // Local transaction date (MMDD)
    29  	14:  FIX{4, ASCII, EncN, DecN},                            // Expiration date
    30  	15:  FIX{4, ASCII, EncN, DecN},                            // Settlement date
    31  	16:  FIX{4, ASCII, EncN, DecN},                            // Currency conversion date
    32  	17:  FIX{4, ASCII, EncN, DecN},                            // Capture date
    33  	18:  FIX{4, ASCII, EncN, DecN},                            // Merchant type, or merchant category code
    34  	19:  FIX{3, ASCII, EncN, DecN},                            // Acquiring institution (country code)
    35  	20:  FIX{3, ASCII, EncN, DecN},                            // PAN extended (country code)
    36  	21:  FIX{3, ASCII, EncN, DecN},                            // Forwarding institution (country code)
    37  	22:  FIX{4, ASCII, EncN, DecN},                            // Point of service entry mode
    38  	23:  FIX{3, ASCII, EncN, DecN},                            // Application PAN sequence number
    39  	24:  FIX{3, ASCII, EncN, DecN},                            // Function code (ISO 8583:1993), or network international identifier (NII)
    40  	25:  FIX{2, ASCII, EncN, DecN},                            // Point of service condition code
    41  	26:  FIX{2, ASCII, EncN, DecN},                            // Point of service capture code
    42  	27:  FIX{1, ASCII, EncN, DecN},                            // Authorizing identification response length
    43  	28:  FIX{9, ASCII, EncN, DecN},                            // Amount, transaction fee
    44  	29:  FIX{8, ASCII, EncN, DecN},                            // Amount, settlement fee
    45  	30:  FIX{8, ASCII, EncN, DecN},                            // Amount, transaction processing fee
    46  	31:  FIX{15, ASCII, EncN, DecN},                           // Amount, settlement processing fee
    47  	32:  LLVAR{11, ASCII, EncN, DecN},                         // Acquiring institution identification code
    48  	33:  LLVAR{11, ASCII, EncN, DecN},                         // Forwarding institution identification code
    49  	34:  LLVAR{28, ASCII, EncN, DecN},                         // Primary account number, extended
    50  	35:  LLVAR{37, ASCII, EncANS, DecANS},                     // Track 2 data (PAN with expiry date)
    51  	36:  LLLVAR{104, ASCII, EncN, DecN},                       // Track 3 data
    52  	37:  FIX{12, ASCII, EncAN, DecAN},                         // Retrieval reference number
    53  	38:  FIX{6, ASCII, EncAN, DecAN},                          // Authorization identification response
    54  	39:  FIX{2, ASCII, EncAN, DecAN},                          // Response code
    55  	40:  FIX{3, ASCII, EncAN, DecAN},                          // Service restriction code
    56  	41:  FIX{8, ASCII, EncANS, DecANS},                        // Card acceptor terminal identification
    57  	42:  FIX{15, ASCII, EncANS, DecANS},                       // Card acceptor identification code
    58  	43:  FIX{40, ASCII, EncANS, DecANS},                       // Card acceptor name/location (1–23 street address, –36 city, –38 state, 39–40 country)
    59  	44:  LLVAR{25, ASCII, EncAN, DecAN},                       // Additional response data
    60  	45:  LLVAR{76, ASCII, EncAN, DecAN},                       // Track 1 data
    61  	46:  LLLVAR{999, ASCII, EncAN, DecAN},                     // Additional data (ISO)
    62  	47:  LLLVAR{999, ASCII, EncAN, DecAN},                     // Additional data (national)
    63  	48:  LLLVAR{999, ASCII, EncAN, DecAN},                     // Additional data (private) (DE 48: Subelement 10 — Encrypted PIN Block Key, Subelement 80 — PIN Service Code)
    64  	49:  FIX{3, ASCII, EncA, DecA},                            // Currency code, transaction
    65  	50:  FIX{3, ASCII, EncAN, DecAN},                          // Currency code, settlement
    66  	51:  FIX{3, ASCII, EncA, DecA},                            // Currency code, cardholder billing
    67  	52:  FIX{8, ASCII, EncB, DecB},                            // Personal identification number data (DE 52: Personal ID Number (PIN) Data)
    68  	53:  FIX{18, ASCII, EncN, DecN},                           // Security related control information (DE 53: Security-Related Control Information, Subfield 1 — PIN Security Type Code, Subfield 2 — PIN Encryption Type Code, Subfield 3 — PIN Block Format Code, Subfield 4—PIN Key Index Number
    69  	54:  LLLVAR{120, ASCII, EncAN, DecAN},                     // Additional amounts
    70  	55:  LLLVAR{255, ASCII, EncB, DecB},                       // ICC data – EMV having multiple tags
    71  	56:  LLVAR{35, ASCII, EncANS, DecANS},                     // Reserved (ISO)
    72  	57:  LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved (national)
    73  	58:  LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved (national)
    74  	59:  LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved (national)
    75  	60:  LLVAR{8, ASCII, EncAN, DecAN},                        // Reserved (national) (e.g. settlement request: batch number, advice transactions: original transaction amount, batch upload: original MTI plus original RRN plus original STAN, etc.)
    76  	61:  LLVAR{36, ASCII, EncANS, DecANS},                     // Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.)
    77  	62:  LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.)
    78  	63:  LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved (private)
    79  	64:  FIX{16, ASCII, EncB, DecB},                           // Message authentication code (MAC)
    80  	65:  FIX{16, ASCII, EncB, DecB},                           // Extended bitmap indicator
    81  	66:  FIX{1, ASCII, EncN, DecN},                            // Settlement code
    82  	67:  FIX{2, ASCII, EncN, DecN},                            // Extended payment code
    83  	68:  FIX{3, ASCII, EncN, DecN},                            // Receiving institution country code
    84  	69:  FIX{3, ASCII, EncN, DecN},                            // Settlement institution country code
    85  	70:  FIX{3, ASCII, EncN, DecN},                            // Network management information code
    86  	71:  FIX{4, ASCII, EncN, DecN},                            // Message number
    87  	72:  LLLVAR{999, ASCII, EncANS, DecANS},                   // Last message's number
    88  	73:  FIX{6, ASCII, EncN, DecN},                            // Action date (YYMMDD)
    89  	74:  FIX{10, ASCII, EncN, DecN},                           // Number of credits
    90  	75:  FIX{10, ASCII, EncN, DecN},                           // Credits, reversal number
    91  	76:  FIX{10, ASCII, EncN, DecN},                           // Number of debits
    92  	77:  FIX{10, ASCII, EncN, DecN},                           // Debits, reversal number
    93  	78:  FIX{10, ASCII, EncN, DecN},                           // Transfer number
    94  	79:  FIX{10, ASCII, EncN, DecN},                           // Transfer, reversal number
    95  	80:  FIX{10, ASCII, EncN, DecN},                           // Number of inquiries
    96  	81:  FIX{10, ASCII, EncN, DecN},                           // Number of authorizations
    97  	82:  FIX{12, ASCII, EncN, DecN},                           // Credits, processing fee amount
    98  	83:  FIX{12, ASCII, EncN, DecN},                           // Credits, transaction fee amount
    99  	84:  FIX{12, ASCII, EncN, DecN},                           // Debits, processing fee amount
   100  	85:  FIX{12, ASCII, EncN, DecN},                           // Debits, transaction fee amount
   101  	86:  FIX{15, ASCII, EncN, DecN},                           // Total amount of credits
   102  	87:  FIX{15, ASCII, EncN, DecN},                           // Credits, reversal amount
   103  	88:  FIX{15, ASCII, EncN, DecN},                           // Total amount of debits
   104  	89:  FIX{15, ASCII, EncN, DecN},                           // Debits, reversal amount
   105  	90:  FIX{42, ASCII, EncN, DecN},                           // Original data elements
   106  	91:  FIX{1, ASCII, EncAN, DecAN},                          // File update code
   107  	92:  FIX{2, ASCII, EncN, DecN},                            // File security code
   108  	93:  FIX{4, ASCII, EncN, DecN},                            // Response indicator
   109  	94:  FIX{2, ASCII, EncAN, DecAN},                          // Service indicator
   110  	95:  FIX{42, ASCII, EncAN, DecAN},                         // Replacement amounts
   111  	96:  FIX{8, ASCII, EncAN, DecAN},                          // Message security code
   112  	97:  FIX{16, ASCII, EncN, DecN},                           // Net settlement amount
   113  	98:  FIX{25, ASCII, EncANS, DecANS},                       // Payee
   114  	99:  FIX{1, ASCII, EncN, DecN},                            // Settlement institution identification code
   115  	100: LLVAR{11, ASCII, EncAN, DecAN},                       // Receiving institution identification code
   116  	101: FIX{17, ASCII, EncANS, DecANS},                       // File name
   117  	102: LLVAR{28, ASCII, EncANS, DecANS},                     // Account identification 1
   118  	103: LLVAR{28, ASCII, EncANS, DecANS},                     // Account identification 2
   119  	104: LLVAR{28, ASCII, EncANS, DecANS},                     // Transaction description
   120  	105: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   121  	106: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   122  	107: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   123  	108: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   124  	109: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   125  	110: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   126  	111: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for ISO use
   127  	112: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for national use
   128  	113: LLVAR{11, ASCII, EncN, DecN},                         // Reserved for national use
   129  	114: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for national use
   130  	115: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for national use
   131  	116: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for national use
   132  	117: LLLVAR{120, ASCII, EncANS, DecANS},                   // Reserved for national use
   133  	118: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for national use
   134  	119: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for national use
   135  	120: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for private use
   136  	121: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for private use
   137  	122: LLVAR{78, ASCII, EncANS, DecANS},                     // Reserved for private use
   138  	123: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for private use
   139  	124: LLLVAR{255, ASCII, EncANS, DecANS},                   // Reserved for private use
   140  	125: LLVAR{28, ASCII, EncANS, DecANS},                     // Reserved for private use
   141  	126: LLVAR{99, ASCII, EncTSYSBitmap64R, DecTSYSBitmap64R}, // Reserved for private use
   142  	127: LLLVAR{999, ASCII, EncANS, DecANS},                   // Reserved for private use
   143  	128: FIX{16, ASCII, EncB, DecB},                           // Message authentication code
   144  }
   145  
   146  // EncTSYSBitmap64R intends to encode TSYS specific bitmap
   147  // the size of which is 8 bytes (64 bit)
   148  // plus one additional optional byte for the "R" flag.
   149  func EncTSYSBitmap64R(_ Hasher, _ Codec, data []byte) ([]byte, error) {
   150  	b, err := tsysbitmap64r.NewString(string(data))
   151  	if err != nil {
   152  		return nil, err
   153  	}
   154  	return b.MarshalISO8583()
   155  }
   156  
   157  // DecTSYSBitmap64R intends to decode TSYS specific bitmap
   158  // the size of which is 8 bytes (64 bit)
   159  // plus one additional optional byte for the "R" flag.
   160  func DecTSYSBitmap64R(_ Hasher, _ Codec, data []byte) ([]byte, error) {
   161  	return []byte(tsysbitmap64r.New(data).String()), nil
   162  }