Lines n/a 0 / 0
Functions and Methods n/a 0 / 0
Classes and Traits n/a 0 / 0
Name Lines Functions and Methods CRAP Classes and Traits
Iso4217 n/a 0 / 0 n/a 0 / 0 0 n/a 0 / 0
1<?php
2
3declare(strict_types=1);
4
5namespace Tomaj\BankMailsParser\ValueObject;
6
7/**
8 * ISO 4217 codes from list one published 2026-09-17, plus two withdrawn codes.
9 *
10 * Codes whose minor-unit scale is "N.A." use 2. BGN (975, withdrawn 2026-01-01)
11 * and HRK (191, withdrawn 2023-01-01) stay so historical mail can be parsed.
12 *
13 * @internal
14 */
15final class Iso4217
16{
17    /**
18     * @var array<string, int>
19     */
20    public const array SCALE = [
21        'AED' => 2,
22        'AFN' => 2,
23        'ALL' => 2,
24        'AMD' => 2,
25        'AOA' => 2,
26        'ARS' => 2,
27        'AUD' => 2,
28        'AWG' => 2,
29        'AZN' => 2,
30        'BAM' => 2,
31        'BBD' => 2,
32        'BDT' => 2,
33        'BGN' => 2,
34        'BHD' => 3,
35        'BIF' => 0,
36        'BMD' => 2,
37        'BND' => 2,
38        'BOB' => 2,
39        'BOV' => 2,
40        'BRL' => 2,
41        'BSD' => 2,
42        'BTN' => 2,
43        'BWP' => 2,
44        'BYN' => 2,
45        'BZD' => 2,
46        'CAD' => 2,
47        'CDF' => 2,
48        'CHE' => 2,
49        'CHF' => 2,
50        'CHW' => 2,
51        'CLF' => 4,
52        'CLP' => 0,
53        'CNY' => 2,
54        'COP' => 2,
55        'COU' => 2,
56        'CRC' => 2,
57        'CUP' => 2,
58        'CVE' => 2,
59        'CZK' => 2,
60        'DJF' => 0,
61        'DKK' => 2,
62        'DOP' => 2,
63        'DZD' => 2,
64        'EGP' => 2,
65        'ERN' => 2,
66        'ETB' => 2,
67        'EUR' => 2,
68        'FJD' => 2,
69        'FKP' => 2,
70        'GBP' => 2,
71        'GEL' => 2,
72        'GHS' => 2,
73        'GIP' => 2,
74        'GMD' => 2,
75        'GNF' => 0,
76        'GTQ' => 2,
77        'GYD' => 2,
78        'HKD' => 2,
79        'HNL' => 2,
80        'HRK' => 2,
81        'HTG' => 2,
82        'HUF' => 2,
83        'IDR' => 2,
84        'ILS' => 2,
85        'INR' => 2,
86        'IQD' => 3,
87        'IRR' => 2,
88        'ISK' => 0,
89        'JMD' => 2,
90        'JOD' => 3,
91        'JPY' => 0,
92        'KES' => 2,
93        'KGS' => 2,
94        'KHR' => 2,
95        'KMF' => 0,
96        'KPW' => 2,
97        'KRW' => 0,
98        'KWD' => 3,
99        'KYD' => 2,
100        'KZT' => 2,
101        'LAK' => 2,
102        'LBP' => 2,
103        'LKR' => 2,
104        'LRD' => 2,
105        'LSL' => 2,
106        'LYD' => 3,
107        'MAD' => 2,
108        'MDL' => 2,
109        'MGA' => 2,
110        'MKD' => 2,
111        'MMK' => 2,
112        'MNT' => 2,
113        'MOP' => 2,
114        'MRU' => 2,
115        'MUR' => 2,
116        'MVR' => 2,
117        'MWK' => 2,
118        'MXN' => 2,
119        'MXV' => 2,
120        'MYR' => 2,
121        'MZN' => 2,
122        'NAD' => 2,
123        'NGN' => 2,
124        'NIO' => 2,
125        'NOK' => 2,
126        'NPR' => 2,
127        'NZD' => 2,
128        'OMR' => 3,
129        'PAB' => 2,
130        'PEN' => 2,
131        'PGK' => 2,
132        'PHP' => 2,
133        'PKR' => 2,
134        'PLN' => 2,
135        'PYG' => 0,
136        'QAR' => 2,
137        'RON' => 2,
138        'RSD' => 2,
139        'RUB' => 2,
140        'RWF' => 0,
141        'SAR' => 2,
142        'SBD' => 2,
143        'SCR' => 2,
144        'SDG' => 2,
145        'SEK' => 2,
146        'SGD' => 2,
147        'SHP' => 2,
148        'SLE' => 2,
149        'SOS' => 2,
150        'SRD' => 2,
151        'SSP' => 2,
152        'STN' => 2,
153        'SVC' => 2,
154        'SYP' => 2,
155        'SZL' => 2,
156        'THB' => 2,
157        'TJS' => 2,
158        'TMT' => 2,
159        'TND' => 3,
160        'TOP' => 2,
161        'TRY' => 2,
162        'TTD' => 2,
163        'TWD' => 2,
164        'TZS' => 2,
165        'UAH' => 2,
166        'UGX' => 0,
167        'USD' => 2,
168        'USN' => 2,
169        'UYI' => 0,
170        'UYU' => 2,
171        'UYW' => 4,
172        'UZS' => 2,
173        'VED' => 2,
174        'VES' => 2,
175        'VND' => 0,
176        'VUV' => 0,
177        'WST' => 2,
178        'XAD' => 2,
179        'XAF' => 0,
180        'XAG' => 2,
181        'XAU' => 2,
182        'XBA' => 2,
183        'XBB' => 2,
184        'XBC' => 2,
185        'XBD' => 2,
186        'XCD' => 2,
187        'XCG' => 2,
188        'XDR' => 2,
189        'XOF' => 0,
190        'XPD' => 2,
191        'XPF' => 0,
192        'XPT' => 2,
193        'XSU' => 2,
194        'XTS' => 2,
195        'XUA' => 2,
196        'XXX' => 2,
197        'YER' => 2,
198        'ZAR' => 2,
199        'ZMW' => 2,
200        'ZWG' => 2,
201    ];
202
203    /**
204     * @var array<string, string>
205     */
206    public const array NUMERIC = [
207        'AED' => '784',
208        'AFN' => '971',
209        'ALL' => '008',
210        'AMD' => '051',
211        'AOA' => '973',
212        'ARS' => '032',
213        'AUD' => '036',
214        'AWG' => '533',
215        'AZN' => '944',
216        'BAM' => '977',
217        'BBD' => '052',
218        'BDT' => '050',
219        'BGN' => '975',
220        'BHD' => '048',
221        'BIF' => '108',
222        'BMD' => '060',
223        'BND' => '096',
224        'BOB' => '068',
225        'BOV' => '984',
226        'BRL' => '986',
227        'BSD' => '044',
228        'BTN' => '064',
229        'BWP' => '072',
230        'BYN' => '933',
231        'BZD' => '084',
232        'CAD' => '124',
233        'CDF' => '976',
234        'CHE' => '947',
235        'CHF' => '756',
236        'CHW' => '948',
237        'CLF' => '990',
238        'CLP' => '152',
239        'CNY' => '156',
240        'COP' => '170',
241        'COU' => '970',
242        'CRC' => '188',
243        'CUP' => '192',
244        'CVE' => '132',
245        'CZK' => '203',
246        'DJF' => '262',
247        'DKK' => '208',
248        'DOP' => '214',
249        'DZD' => '012',
250        'EGP' => '818',
251        'ERN' => '232',
252        'ETB' => '230',
253        'EUR' => '978',
254        'FJD' => '242',
255        'FKP' => '238',
256        'GBP' => '826',
257        'GEL' => '981',
258        'GHS' => '936',
259        'GIP' => '292',
260        'GMD' => '270',
261        'GNF' => '324',
262        'GTQ' => '320',
263        'GYD' => '328',
264        'HKD' => '344',
265        'HNL' => '340',
266        'HRK' => '191',
267        'HTG' => '332',
268        'HUF' => '348',
269        'IDR' => '360',
270        'ILS' => '376',
271        'INR' => '356',
272        'IQD' => '368',
273        'IRR' => '364',
274        'ISK' => '352',
275        'JMD' => '388',
276        'JOD' => '400',
277        'JPY' => '392',
278        'KES' => '404',
279        'KGS' => '417',
280        'KHR' => '116',
281        'KMF' => '174',
282        'KPW' => '408',
283        'KRW' => '410',
284        'KWD' => '414',
285        'KYD' => '136',
286        'KZT' => '398',
287        'LAK' => '418',
288        'LBP' => '422',
289        'LKR' => '144',
290        'LRD' => '430',
291        'LSL' => '426',
292        'LYD' => '434',
293        'MAD' => '504',
294        'MDL' => '498',
295        'MGA' => '969',
296        'MKD' => '807',
297        'MMK' => '104',
298        'MNT' => '496',
299        'MOP' => '446',
300        'MRU' => '929',
301        'MUR' => '480',
302        'MVR' => '462',
303        'MWK' => '454',
304        'MXN' => '484',
305        'MXV' => '979',
306        'MYR' => '458',
307        'MZN' => '943',
308        'NAD' => '516',
309        'NGN' => '566',
310        'NIO' => '558',
311        'NOK' => '578',
312        'NPR' => '524',
313        'NZD' => '554',
314        'OMR' => '512',
315        'PAB' => '590',
316        'PEN' => '604',
317        'PGK' => '598',
318        'PHP' => '608',
319        'PKR' => '586',
320        'PLN' => '985',
321        'PYG' => '600',
322        'QAR' => '634',
323        'RON' => '946',
324        'RSD' => '941',
325        'RUB' => '643',
326        'RWF' => '646',
327        'SAR' => '682',
328        'SBD' => '090',
329        'SCR' => '690',
330        'SDG' => '938',
331        'SEK' => '752',
332        'SGD' => '702',
333        'SHP' => '654',
334        'SLE' => '925',
335        'SOS' => '706',
336        'SRD' => '968',
337        'SSP' => '728',
338        'STN' => '930',
339        'SVC' => '222',
340        'SYP' => '760',
341        'SZL' => '748',
342        'THB' => '764',
343        'TJS' => '972',
344        'TMT' => '934',
345        'TND' => '788',
346        'TOP' => '776',
347        'TRY' => '949',
348        'TTD' => '780',
349        'TWD' => '901',
350        'TZS' => '834',
351        'UAH' => '980',
352        'UGX' => '800',
353        'USD' => '840',
354        'USN' => '997',
355        'UYI' => '940',
356        'UYU' => '858',
357        'UYW' => '927',
358        'UZS' => '860',
359        'VED' => '926',
360        'VES' => '928',
361        'VND' => '704',
362        'VUV' => '548',
363        'WST' => '882',
364        'XAD' => '396',
365        'XAF' => '950',
366        'XAG' => '961',
367        'XAU' => '959',
368        'XBA' => '955',
369        'XBB' => '956',
370        'XBC' => '957',
371        'XBD' => '958',
372        'XCD' => '951',
373        'XCG' => '532',
374        'XDR' => '960',
375        'XOF' => '952',
376        'XPD' => '964',
377        'XPF' => '953',
378        'XPT' => '962',
379        'XSU' => '994',
380        'XTS' => '963',
381        'XUA' => '965',
382        'XXX' => '999',
383        'YER' => '886',
384        'ZAR' => '710',
385        'ZMW' => '967',
386        'ZWG' => '924',
387    ];
388}