Zenaight commited on
Commit
b0cbcf0
·
verified ·
1 Parent(s): fd25f77

Delete app/CurrencyMapping/currency_mapping.py

Browse files
app/CurrencyMapping/currency_mapping.py DELETED
@@ -1,538 +0,0 @@
1
- # Currency Mapping Module
2
- # Contains canonical_currency_map dictionary and convert_currency_symbols_to_iso() function
3
-
4
- # Canonical currency map for symbol resolution (matches TypeScript version)
5
- canonical_currency_map = {
6
- # Standard currency symbols
7
- "$": "USD",
8
- "£": "GBP",
9
- "€": "EUR",
10
- "¥": "JPY",
11
- "₹": "INR",
12
- "₽": "RUB",
13
- "₩": "KRW",
14
- "₪": "ILS",
15
- "₺": "TRY",
16
- "₴": "UAH",
17
- "₼": "AZN",
18
- "₸": "KZT",
19
- "₾": "GEL",
20
- "֏": "AMD",
21
- "₲": "PYG",
22
- "₡": "CRC",
23
- "₣": "XPF",
24
- "₦": "NGN",
25
- "₵": "GHS",
26
- "₨": "PKR",
27
- "₱": "PHP",
28
- "₫": "VND",
29
- "₭": "LAK",
30
- "៛": "KHR",
31
- "৳": "BDT",
32
- "؋": "AFN",
33
- "﷼": "IRR",
34
-
35
- # Custom symbols
36
- "‡": "CUSTOM_DAGGER",
37
- "†": "CUSTOM_DAGGER_SINGLE",
38
-
39
- # Letter-based currencies
40
- "R": "ZAR", # South African Rand
41
- "C$": "CAD", # Canadian Dollar
42
- "A$": "AUD", # Australian Dollar
43
- "R$": "BRL", # Brazilian Real
44
- "S/": "PEN", # Peruvian Sol
45
- "Bs": "BOB", # Bolivian Boliviano
46
- "Q": "GTQ", # Guatemalan Quetzal
47
- "L": "HNL", # Honduran Lempira
48
- "ƒ": "AWG", # Aruban Florin
49
- "Vt": "VUV", # Vanuatu Vatu
50
- "T$": "TOP", # Tongan Pa'anga
51
- "T": "WST", # Samoan Tala
52
- "лв": "BGN", # Bulgarian Lev
53
- "Kč": "CZK", # Czech Koruna
54
- "kr": "DKK", # Danish Krone
55
- "Ft": "HUF", # Hungarian Forint
56
- "zł": "PLN", # Polish Zloty
57
- "lei": "RON", # Romanian Leu
58
- "CHF": "CHF", # Swiss Franc
59
- "KM": "BAM", # Bosnian Marka
60
- "ден": "MKD", # North Macedonian Denar
61
- "дин": "RSD", # Serbian Dinar
62
- "so'm": "UZS", # Uzbekistani Som
63
- "NT$": "TWD", # Taiwan Dollar
64
- "HK$": "HKD", # Hong Kong Dollar
65
- "S$": "SGD", # Singapore Dollar
66
- "RM": "MYR", # Malaysian Ringgit
67
- "฿": "THB", # Thai Baht
68
- "Rp": "IDR", # Indonesian Rupiah
69
- "K": "MMK", # Myanmar Kyat
70
- "Rs": "LKR", # Sri Lankan Rupee
71
- "Nu": "BTN", # Bhutanese Ngultrum
72
- "MVR": "MVR", # Maldivian Rufiyaa
73
-
74
- # Middle Eastern currencies
75
- "ع.د": "IQD", # Iraqi Dinar
76
- "ل.ل": "LBP", # Lebanese Pound
77
- "د.ا": "JOD", # Jordanian Dinar
78
- "ر.س": "SAR", # Saudi Riyal
79
- "د.إ": "AED", # UAE Dirham
80
- "ر.ق": "QAR", # Qatari Riyal
81
- "د.ك": "KWD", # Kuwaiti Dinar
82
- "د.ب": "BHD", # Bahraini Dinar
83
- "ر.ع.": "OMR", # Omani Rial
84
- "ر.ي": "YER", # Yemeni Rial
85
- "ج.م": "EGP", # Egyptian Pound
86
- "ل.د": "LYD", # Libyan Dinar
87
- "د.ت": "TND", # Tunisian Dinar
88
- "د.ج": "DZD", # Algerian Dinar
89
- "د.م.": "MAD", # Moroccan Dirham
90
- "ج.س.": "SDG", # Sudanese Pound
91
- "SSP": "SSP", # South Sudanese Pound
92
-
93
- # African currencies
94
- "KSh": "KES", # Kenyan Shilling
95
- "USh": "UGX", # Ugandan Shilling
96
- "TSh": "TZS", # Tanzanian Shilling
97
- "FRw": "RWF", # Rwandan Franc
98
- "FBu": "BIF", # Burundian Franc
99
- "MT": "MZN", # Mozambican Metical
100
- "P": "BWP", # Botswanan Pula
101
- "N$": "NAD", # Namibian Dollar
102
- "Ar": "MGA", # Malagasy Ariary
103
- "CF": "KMF", # Comorian Franc
104
- "MK": "MWK", # Malawian Kwacha
105
- "ZK": "ZMW", # Zambian Kwacha
106
- "Kz": "AOA", # Angolan Kwanza
107
- "FC": "CDF", # Congolese Franc
108
- "FCFA": "XAF", # Central African Franc
109
- "Db": "STD", # Sao Tomean Dobra
110
- "D": "GMD", # Gambian Dalasi
111
- "FG": "GNF", # Guinean Franc
112
- "CFA": "XOF", # West African Franc
113
- "Le": "SLL", # Sierra Leonean Leone
114
- "L$": "LRD", # Liberian Dollar
115
- "Br": "ETB", # Ethiopian Birr
116
- "Nfk": "ERN", # Eritrean Nakfa
117
- "Fdj": "DJF", # Djiboutian Franc
118
- "S": "SOS", # Somali Shilling
119
-
120
- # Caribbean & Central American currencies
121
- "J$": "JMD", # Jamaican Dollar
122
- "BZ$": "BZD", # Belize Dollar
123
- "TT$": "TTD", # Trinidad and Tobago Dollar
124
- "Bds$": "BBD", # Barbadian Dollar
125
- "EC$": "XCD", # East Caribbean Dollar
126
- "GY$": "GYD", # Guyanese Dollar
127
- "SRD": "SRD", # Surinamese Dollar
128
- "RD$": "DOP", # Dominican Peso
129
-
130
- # Pacific Island currencies
131
- "FJ$": "FJD", # Fijian Dollar
132
- "PGK": "PGK", # Papua New Guinean Kina
133
- "SI$": "SBD", # Solomon Islands Dollar
134
- "WS$": "WST", # Samoan Tala
135
- "VT": "VUV", # Vanuatu Vatu
136
-
137
- # European currencies
138
- "ISK": "ISK", # Icelandic Krona
139
- "Lt": "LTL", # Lithuanian Litas
140
- "Ls": "LVL", # Latvian Lats
141
- "EEK": "EEK", # Estonian Kroon
142
- "NOK": "NOK", # Norwegian Krone
143
- "SEK": "SEK", # Swedish Krona
144
- "ALL": "ALL", # Albanian Lek
145
-
146
- # South American currencies
147
- "Gs": "PYG", # Paraguayan Guarani
148
- "Bs.S": "VES", # Venezuelan Bolívar Soberano
149
- "Bs": "VEF", # Venezuelan Bolívar
150
- "$U": "UYU", # Uruguayan Peso
151
- "$a": "ARS", # Argentine Peso
152
- "$b": "BOB", # Bolivian Boliviano
153
- "CLP": "CLP", # Chilean Peso
154
- "COP": "COP", # Colombian Peso
155
- "MXN": "MXN", # Mexican Peso
156
-
157
- # Small Island Nations
158
- "BMD": "BMD", # Bermudian Dollar
159
- "BSD": "BSD", # Bahamian Dollar
160
- "KYD": "KYD", # Cayman Islands Dollar
161
- "TVD": "TVD", # Tuvaluan Dollar
162
- "ZWL": "ZWL", # Zimbabwean Dollar
163
-
164
- # Additional African currencies
165
- "LSL": "LSL", # Lesotho Loti
166
- "SZL": "SZL", # Swazi Lilangeni
167
- "CVE": "CVE", # Cape Verdean Escudo
168
- "MRO": "MRO", # Mauritanian Ouguiya
169
- "MRU": "MRU", # Mauritanian Ouguiya
170
- "SCR": "SCR", # Seychellois Rupee
171
- "SHP": "SHP", # Saint Helena Pound
172
-
173
- # Additional Asian currencies
174
- "BND": "BND", # Brunei Dollar
175
- "MOP": "MOP", # Macanese Pataca
176
- "NPR": "NPR", # Nepalese Rupee
177
-
178
- # Additional Pacific currencies
179
- "NZD": "NZD", # New Zealand Dollar
180
-
181
- # Alternative $ symbols for countries (context-dependent)
182
- "$BMD": "BMD", # Bermudian Dollar
183
- "$BSD": "BSD", # Bahamian Dollar
184
- "$BZD": "BZD", # Belize Dollar
185
- "$KYD": "KYD", # Cayman Islands Dollar
186
- "$FJD": "FJD", # Fijian Dollar
187
- "$GYD": "GYD", # Guyanese Dollar
188
- "$JMD": "JMD", # Jamaican Dollar
189
- "$LRD": "LRD", # Liberian Dollar
190
- "$NAD": "NAD", # Namibian Dollar
191
- "$SBD": "SBD", # Solomon Islands Dollar
192
- "$SRD": "SRD", # Surinamese Dollar
193
- "$TTD": "TTD", # Trinidad and Tobago Dollar
194
- "$TVD": "TVD", # Tuvaluan Dollar
195
- "$VUV": "VUV", # Vanuatu Vatu
196
- "$WST": "WST", # Samoan Tala
197
- "$XCD": "XCD", # East Caribbean Dollar
198
- "$ZWL": "ZWL", # Zimbabwean Dollar
199
- "$BWP": "BWP", # Botswanan Pula
200
- "$LSL": "LSL", # Lesotho Loti
201
- "$SZL": "SZL", # Swazi Lilangeni
202
- "$ZAR": "ZAR", # South African Rand
203
- "$HKD": "HKD", # Hong Kong Dollar
204
- "$SGD": "SGD", # Singapore Dollar
205
- "$TWD": "TWD", # Taiwan Dollar
206
- "$CHF": "CHF", # Swiss Franc
207
- "$DKK": "DKK", # Danish Krone
208
- "$NOK": "NOK", # Norwegian Krone
209
- "$SEK": "SEK", # Swedish Krona
210
- "$ARS": "ARS", # Argentine Peso
211
- "$BOB": "BOB", # Bolivian Boliviano
212
- "$CLP": "CLP", # Chilean Peso
213
- "$COP": "COP", # Colombian Peso
214
- "$MXN": "MXN", # Mexican Peso
215
- "$PEN": "PEN", # Peruvian Sol
216
- "$UYU": "UYU", # Uruguayan Peso
217
- "$VES": "VES", # Venezuelan Bolívar Soberano
218
-
219
- # Cryptocurrencies (for modern business plans)
220
- "₿": "BTC", # Bitcoin
221
- "Ξ": "ETH", # Ethereum
222
- "Ł": "LTC", # Litecoin
223
-
224
- # Special Drawing Rights
225
- "XDR": "XDR", # Special Drawing Rights
226
-
227
- # Precious Metals
228
- "XAU": "XAU", # Gold (troy ounce)
229
- "XAG": "XAG", # Silver (troy ounce)
230
- "XPT": "XPT", # Platinum (troy ounce)
231
- "XPD": "XPD", # Palladium (troy ounce)
232
-
233
- # Other
234
- "XTS": "XTS", # Testing Currency Code
235
- "XXX": "XXX", # No Currency
236
-
237
- # Missing currencies from canonical_currency_map.py
238
- "ADP": "ADP", # Andorran Peseta
239
- "AFA": "AFA", # Afghan Afghani (1927–2002)
240
- "ALK": "ALK", # Albanian Lek (1946–1965)
241
- "ANG": "ANG", # Netherlands Antillean Guilder
242
- "AOK": "AOK", # Angolan Kwanza (1977–1991)
243
- "AON": "AON", # Angolan New Kwanza (1990–2000)
244
- "AOR": "AOR", # Angolan Readjusted Kwanza (1995–1999)
245
- "ARA": "ARA", # Argentine Austral
246
- "ARL": "ARL", # Argentine Peso Ley (1970–1983)
247
- "ARM": "ARM", # Argentine Peso (1881–1970)
248
- "ARP": "ARP", # Argentine Peso (1983–1985)
249
- "ATS": "ATS", # Austrian Schilling
250
- "AZM": "AZM", # Azerbaijani Manat (1993–2006)
251
- "BAD": "BAD", # Bosnia-Herzegovina Dinar (1992–1994)
252
- "BAN": "BAN", # Bosnia-Herzegovina New Dinar (1994–1997)
253
- "BEC": "BEC", # Belgian Franc (convertible)
254
- "BEF": "BEF", # Belgian Franc
255
- "BEL": "BEL", # Belgian Franc (financial)
256
- "BGL": "BGL", # Bulgarian Hard Lev
257
- "BGM": "BGM", # Bulgarian Socialist Lev
258
- "BGO": "BGO", # Bulgarian Lev (1879–1952)
259
- "BOL": "BOL", # Bolivian Boliviano (1863–1963)
260
- "BOP": "BOP", # Bolivian Peso
261
- "BOV": "BOV", # Bolivian Mvdol
262
- "BRB": "BRB", # Brazilian New Cruzeiro (1967–1986)
263
- "BRC": "BRC", # Brazilian Cruzado (1986–1989)
264
- "BRE": "BRE", # Brazilian Cruzeiro (1990–1993)
265
- "BRN": "BRN", # Brazilian New Cruzado (1989–1990)
266
- "BRR": "BRR", # Brazilian Cruzeiro (1993–1994)
267
- "BRZ": "BRZ", # Brazilian Cruzeiro (1942–1967)
268
- "BUK": "BUK", # Burmese Kyat
269
- "BYB": "BYB", # Belarusian Ruble (1994–1999)
270
- "BYN": "BYN", # Belarusian Ruble
271
- "BYR": "BYR", # Belarusian Ruble (2000–2016)
272
- "CA$": "CAD", # Canadian Dollar
273
- "CHE": "CHE", # WIR Euro
274
- "CHW": "CHW", # WIR Franc
275
- "CLE": "CLE", # Chilean Escudo
276
- "CLF": "CLF", # Chilean Unit of Account (UF)
277
- "CNH": "CNH", # Chinese Yuan (offshore)
278
- "CNX": "CNX", # Chinese People's Bank Dollar
279
- "CN¥": "CNY", # Chinese Yuan
280
- "COU": "COU", # Colombian Real Value Unit
281
- "CSD": "CSD", # Serbian Dinar (2002–2006)
282
- "CSK": "CSK", # Czechoslovak Hard Koruna
283
- "CUC": "CUC", # Cuban Convertible Peso
284
- "CUP": "CUP", # Cuban Peso
285
- "CYP": "CYP", # Cypriot Pound
286
- "DDM": "DDM", # East German Mark
287
- "DEM": "DEM", # German Mark
288
- "ECS": "ECS", # Ecuadorian Sucre
289
- "ECV": "ECV", # Ecuadorian Unit of Constant Value
290
- "ESA": "ESA", # Spanish Peseta (A account)
291
- "ESB": "ESB", # Spanish Peseta (convertible account)
292
- "ESP": "ESP", # Spanish Peseta
293
- "FIM": "FIM", # Finnish Markka
294
- "FKP": "FKP", # Falkland Islands Pound
295
- "FRF": "FRF", # French Franc
296
- "GEK": "GEK", # Georgian Kupon Larit
297
- "GHC": "GHC", # Ghanaian Cedi (1979–2007)
298
- "GIP": "GIP", # Gibraltar Pound
299
- "GNS": "GNS", # Guinean Syli
300
- "GQE": "GQE", # Equatorial Guinean Ekwele
301
- "GRD": "GRD", # Greek Drachma
302
- "GWE": "GWE", # Portuguese Guinea Escudo
303
- "GWP": "GWP", # Guinea-Bissau Peso
304
- "HRD": "HRD", # Croatian Dinar
305
- "HRK": "HRK", # Croatian Kuna
306
- "HTG": "HTG", # Haitian Gourde
307
- "IEP": "IEP", # Irish Pound
308
- "ILP": "ILP", # Israeli Pound
309
- "ILR": "ILR", # Israeli Shekel (1980–1985)
310
- "ISJ": "ISJ", # Icelandic Króna (1918–1981)
311
- "ITL": "ITL", # Italian Lira
312
- "KGS": "KGS", # Kyrgystani Som
313
- "KPW": "KPW", # North Korean Won
314
- "KRH": "KRH", # South Korean Hwan (1953–1962)
315
- "KRO": "KRO", # South Korean Won (1945–1953)
316
- "LTT": "LTT", # Lithuanian Talonas
317
- "LUC": "LUC", # Luxembourgian Convertible Franc
318
- "LUF": "LUF", # Luxembourgian Franc
319
- "LUL": "LUL", # Luxembourg Financial Franc
320
- "LVR": "LVR", # Latvian Ruble
321
- "MAF": "MAF", # Moroccan Franc
322
- "MCF": "MCF", # Monegasque Franc
323
- "MDC": "MDC", # Moldovan Cupon
324
- "MDL": "MDL", # Moldovan Leu
325
- "MGF": "MGF", # Malagasy Franc
326
- "MKN": "MKN", # Macedonian Denar (1992–1993)
327
- "MLF": "MLF", # Malian Franc
328
- "MNT": "MNT", # Mongolian Tugrik
329
- "MTL": "MTL", # Maltese Lira
330
- "MTP": "MTP", # Maltese Pound
331
- "MUR": "MUR", # Mauritian Rupee
332
- "MVP": "MVP", # Maldivian Rupee (1947–1981)
333
- "MX$": "MXN", # Mexican Peso
334
- "MXP": "MXP", # Mexican Silver Peso (1861–1992)
335
- "MXV": "MXV", # Mexican Investment Unit
336
- "MZE": "MZE", # Mozambican Escudo
337
- "MZM": "MZM", # Mozambican Metical (1980–2006)
338
- "NIC": "NIC", # Nicaraguan Córdoba (1988–1991)
339
- "NIO": "NIO", # Nicaraguan Córdoba
340
- "NLG": "NLG", # Dutch Guilder
341
- "NZ$": "NZD", # New Zealand Dollar
342
- "PAB": "PAB", # Panamanian Balboa
343
- "PEI": "PEI", # Peruvian Inti
344
- "PES": "PES", # Peruvian Sol (1863–1965)
345
- "PLZ": "PLZ", # Polish Zloty (1950–1995)
346
- "PTE": "PTE", # Portuguese Escudo
347
- "RHD": "RHD", # Rhodesian Dollar
348
- "ROL": "ROL", # Romanian Leu (1952–2006)
349
- "RUR": "RUR", # Russian Ruble (1991–1998)
350
- "SDD": "SDD", # Sudanese Dinar (1992–2007)
351
- "SDP": "SDP", # Sudanese Pound (1957–1998)
352
- "SIT": "SIT", # Slovenian Tolar
353
- "SKK": "SKK", # Slovak Koruna
354
- "SLE": "SLE", # Sierra Leonean Leone
355
- "SRG": "SRG", # Surinamese Guilder
356
- "STN": "STN", # São Tomé & Príncipe Dobra
357
- "SUR": "SUR", # Soviet Rouble
358
- "SVC": "SVC", # Salvadoran Colón
359
- "SYP": "SYP", # Syrian Pound
360
- "TJR": "TJR", # Tajikistani Ruble
361
- "TJS": "TJS", # Tajikistani Somoni
362
- "TMM": "TMM", # Turkmenistani Manat (1993–2009)
363
- "TMT": "TMT", # Turkmenistani Manat
364
- "TPE": "TPE", # Timorese Escudo
365
- "TRL": "TRL", # Turkish Lira (1922–2005)
366
- "UAK": "UAK", # Ukrainian Karbovanets
367
- "UGS": "UGS", # Ugandan Shilling (1966–1987)
368
- "USN": "USN", # US Dollar (Next day)
369
- "USS": "USS", # US Dollar (Same day)
370
- "UYI": "UYI", # Uruguayan Peso (Indexed Units)
371
- "UYP": "UYP", # Uruguayan Peso (1975–1993)
372
- "UYW": "UYW", # Uruguayan Nominal Wage Index Unit
373
- "VEB": "VEB", # Venezuelan Bolívar (1871–2008)
374
- "VED": "VED", # Bolívar Soberano
375
- "VNN": "VNN", # Vietnamese Dong (1978–1985)
376
- "XBA": "XBA", # European Composite Unit
377
- "XBB": "XBB", # European Monetary Unit
378
- "XBC": "XBC", # European Unit of Account (XBC)
379
- "XBD": "XBD", # European Unit of Account (XBD)
380
- "Cg.": "XCG", # Caribbean guilder
381
- "XEU": "XEU", # European Currency Unit
382
- "XFO": "XFO", # French Gold Franc
383
- "XFU": "XFU", # French UIC-Franc
384
- "F CFA": "XOF", # West African CFA Franc
385
- "XRE": "XRE", # RINET Funds
386
- "XSU": "XSU", # Sucre
387
- "XUA": "XUA", # ADB Unit of Account
388
- "¤": "XXX", # Unknown Currency
389
- "YDD": "YDD", # Yemeni Dinar
390
- "YUD": "YUD", # Yugoslavian Hard Dinar (1966–1990)
391
- "YUM": "YUM", # Yugoslavian New Dinar (1994–2002)
392
- "YUN": "YUN", # Yugoslavian Convertible Dinar (1990–1992)
393
- "YUR": "YUR", # Yugoslavian Reformed Dinar (1992–1993)
394
- "ZAL": "ZAL", # South African Rand (financial)
395
- "ZMK": "ZMK", # Zambian Kwacha (1968–2012)
396
- "ZRN": "ZRN", # Zairean New Zaire (1993–1998)
397
- "ZRZ": "ZRZ", # Zairean Zaire (1971–1993)
398
- "ZWD": "ZWD", # Zimbabwean Dollar (1980–2008)
399
- "ZWG": "ZWG", # Zimbabwean Gold
400
- "ZWR": "ZWR", # Zimbabwean Dollar (2008)
401
- "US$": "USD", # US Dollar
402
- "C$": "NIO", # Nicaraguan Córdoba
403
- "TT$": "TTD", # Trinidad & Tobago Dollar
404
- "BD$": "BBD", # Barbadian Dollar
405
- "B$": "BND", # Brunei Dollar
406
- "SI$": "SBD", # Solomon Islands Dollar
407
- "G$": "GYD", # Guyanaese Dollar
408
- "SR$": "SRD", # Surinamese Dollar
409
- "CLP$": "CLP", # Chilean Peso
410
- "Bs.": "VES", # Venezuelan Bolívar
411
- "Rf": "MVR", # Maldivian Rufiyaa
412
- "SSh": "SOS", # Somali Shilling
413
- "GH₵": "GHS", # Ghanaian Cedi
414
- "Br": "BYN", # Belarusian Ruble
415
- "CFA F": "XOF", # West African CFA Franc
416
- "CFAF": "XAF", # Central African CFA Franc
417
- "JP¥": "JPY", # Japanese Yen
418
- "元": "TWD", # New Taiwan Dollar
419
- "TL": "TRY", # Turkish Lira
420
- "лв.": "BGN", # Bulgarian Lev
421
- "₮": "MNT", # Mongolian Tugrik
422
- "﷼": "SAR", # Saudi Riyal
423
- ".د.ب": "BHD", # Bahraini Dinar
424
- "ل.س": "SYP", # Syrian Pound
425
- "﷼‎": "IRR", # Iranian Rial
426
- "ש״ח": "ILS", # Israeli New Shekel
427
- "Fr": "CHF", # Swiss Franc
428
- "CFP": "XPF", # CFP Franc
429
- "E": "SZL", # Swazi Lilangeni
430
- "Rf.": "MVR", # Maldivian Rufiyaa
431
- "QR": "QAR", # Qatari Riyal
432
- "SR": "SAR", # Saudi Riyal
433
- "BD": "BHD", # Bahraini Dinar
434
- "KD": "KWD", # Kuwaiti Dinar
435
- "₯": "GRD", # Greek Drachma
436
- "ЅМ": "TJS", # Tajikistani Somoni
437
- "Br (BYN)": "BYN", # Belarusian Ruble
438
- "B/.": "PAB", # Panamanian Balboa
439
- "Gs.": "PYG", # Paraguayan Guarani
440
- "Afl.": "AWG", # Aruban Florin
441
- "NAƒ": "ANG", # Netherlands Antillean Guilder
442
- "lei (MDL)": "MDL", # Moldovan Leu
443
- "KM (BAM)": "BAM", # Bosnia-Herzegovina Convertible Mark
444
- "ден (MKD)": "MKD", # Macedonian Denar
445
- "kn": "HRK", # Croatian Kuna
446
- "Z$": "ZWL", # Zimbabwean Dollar (2009–2024)
447
- "RTGS$": "ZWL", # Zimbabwean Dollar (2009–2024)
448
- "Skr": "SEK", # Swedish Krona
449
- "Nkr": "NOK", # Norwegian Krone
450
- "Dkr": "DKK", # Danish Krone
451
- "Íkr": "ISK", # Icelandic Króna
452
- "AU$": "AUD", # Australian Dollar
453
- "SG$": "SGD", # Singapore Dollar
454
- "BB$": "BBD", # Barbadian Dollar
455
- "BS$": "BSD", # Bahamian Dollar
456
- "KY$": "KYD", # Cayman Islands Dollar
457
- "BM$": "BMD", # Bermudan Dollar
458
- "JM$": "JMD", # Jamaican Dollar
459
- }
460
-
461
- def convert_currency_symbols_to_iso(text: str) -> str:
462
- """
463
- Convert currency symbols to ISO codes for PDF compatibility
464
- Matches the TypeScript canonicalCurrencyMap logic
465
- """
466
- import re # Import at function level to avoid scope issues
467
- processed_text = text
468
-
469
- # Track all conversions for detailed logging
470
- conversions_made = []
471
- total_conversions = 0
472
-
473
- # Process each currency symbol in the canonical map
474
- for symbol, iso_code in canonical_currency_map.items():
475
- if symbol in processed_text:
476
- # Check if it's a single character
477
- is_single_character = len(symbol) == 1
478
- is_unicode_currency = is_single_character and ord(symbol) > 127 # Non-ASCII
479
- is_latin_single_letter = is_single_character and symbol.isalpha() and ord(symbol) < 128
480
-
481
- # Handle multi-character symbols (like "Le", "KSh", etc.)
482
- is_multi_char_symbol = len(symbol) > 1
483
-
484
- # Skip plain Latin single letters (to avoid converting words like "A", "R", etc.)
485
- # but DO convert single-character Unicode currency symbols like €, £, ¥, ؋, etc.
486
- if not is_unicode_currency and is_latin_single_letter:
487
- # Only convert if it's followed by a number (currency context)
488
- # Pattern: R500, R 500, R500,000 etc.
489
- pattern = rf'\b{re.escape(symbol)}\s*(\d{{1,3}}(?:,?\d{{3}})*(?:\.\d{{2}})?)\b'
490
- matches = re.findall(pattern, processed_text)
491
-
492
- if matches:
493
- old_text = processed_text
494
- processed_text = re.sub(pattern, rf'{iso_code} \1', processed_text)
495
-
496
- if old_text != processed_text:
497
- conversions_made.append(f"{symbol} → {iso_code} (context: {matches})")
498
- total_conversions += len(matches)
499
- continue
500
-
501
- # For multi-character symbols like "Ar", "Le", etc., be very careful
502
- # Only convert if they appear as standalone words or in currency contexts
503
- if is_multi_char_symbol and len(symbol) == 2 and symbol.isalpha():
504
- # Only convert if it's a standalone word or followed by a number
505
- # Pattern: \bAr\b or \bAr\s*\d or \bLe\b or \bLe\s*\d
506
- standalone_pattern = rf'\b{re.escape(symbol)}\b'
507
- currency_pattern = rf'\b{re.escape(symbol)}\s*(\d{{1,3}}(?:,?\d{{3}})*(?:\.\d{{2}})?)'
508
-
509
- # Check for standalone occurrences first
510
- standalone_matches = re.findall(standalone_pattern, processed_text)
511
- currency_matches = re.findall(currency_pattern, processed_text)
512
-
513
- if standalone_matches or currency_matches:
514
- old_text = processed_text
515
- # Replace standalone occurrences
516
- processed_text = re.sub(standalone_pattern, iso_code, processed_text)
517
- # Replace currency context occurrences
518
- processed_text = re.sub(currency_pattern, rf'{iso_code} \1', processed_text)
519
-
520
- if old_text != processed_text:
521
- conversions_made.append(f"{symbol} → {iso_code} (standalone/currency context)")
522
- total_conversions += len(standalone_matches) + len(currency_matches)
523
- continue
524
-
525
- # For all other symbols (Unicode currency symbols, multi-character symbols)
526
- # Count occurrences before replacement
527
- old_count = processed_text.count(symbol)
528
-
529
- # Replace all occurrences
530
- old_text = processed_text
531
- processed_text = processed_text.replace(symbol, iso_code)
532
-
533
- # Check if replacement actually happened
534
- if old_text != processed_text:
535
- conversions_made.append(f"{symbol} → {iso_code} ({old_count} instances)")
536
- total_conversions += old_count
537
-
538
- return processed_text