@ducatjs/money 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +51 -0
  3. package/README.md +617 -2
  4. package/assets/CREDITS.md +12 -0
  5. package/data/adyen-fx.json +19 -0
  6. package/data/adyen.json +171 -0
  7. package/data/braintree.json +223 -0
  8. package/data/cash-rounding.json +399 -0
  9. package/data/checkout.json +230 -0
  10. package/data/iso4217-list-one.xml +1956 -0
  11. package/data/klarna.json +95 -0
  12. package/data/paypal.json +65 -0
  13. package/data/stripe-fx.json +17 -0
  14. package/data/stripe.json +285 -0
  15. package/dist/adyen-fx.d.ts +25 -0
  16. package/dist/adyen-fx.d.ts.map +1 -0
  17. package/dist/adyen-fx.js +122 -0
  18. package/dist/adyen-fx.js.map +1 -0
  19. package/dist/adyen.d.ts +25 -0
  20. package/dist/adyen.d.ts.map +1 -0
  21. package/dist/adyen.js +34 -0
  22. package/dist/adyen.js.map +1 -0
  23. package/dist/allocate.d.ts +72 -0
  24. package/dist/allocate.d.ts.map +1 -0
  25. package/dist/allocate.js +314 -0
  26. package/dist/allocate.js.map +1 -0
  27. package/dist/bag.d.ts +58 -0
  28. package/dist/bag.d.ts.map +1 -0
  29. package/dist/bag.js +122 -0
  30. package/dist/bag.js.map +1 -0
  31. package/dist/braintree.d.ts +34 -0
  32. package/dist/braintree.d.ts.map +1 -0
  33. package/dist/braintree.js +45 -0
  34. package/dist/braintree.js.map +1 -0
  35. package/dist/cash.d.ts +35 -0
  36. package/dist/cash.d.ts.map +1 -0
  37. package/dist/cash.js +86 -0
  38. package/dist/cash.js.map +1 -0
  39. package/dist/checkout.d.ts +42 -0
  40. package/dist/checkout.d.ts.map +1 -0
  41. package/dist/checkout.js +52 -0
  42. package/dist/checkout.js.map +1 -0
  43. package/dist/convert.d.ts +51 -0
  44. package/dist/convert.d.ts.map +1 -0
  45. package/dist/convert.js +55 -0
  46. package/dist/convert.js.map +1 -0
  47. package/dist/currency.d.ts +22 -0
  48. package/dist/currency.d.ts.map +1 -0
  49. package/dist/currency.js +38 -0
  50. package/dist/currency.js.map +1 -0
  51. package/dist/decimal.d.ts +52 -0
  52. package/dist/decimal.d.ts.map +1 -0
  53. package/dist/decimal.js +251 -0
  54. package/dist/decimal.js.map +1 -0
  55. package/dist/ecb.d.ts +17 -0
  56. package/dist/ecb.d.ts.map +1 -0
  57. package/dist/ecb.js +147 -0
  58. package/dist/ecb.js.map +1 -0
  59. package/dist/exact.d.ts +62 -0
  60. package/dist/exact.d.ts.map +1 -0
  61. package/dist/exact.js +147 -0
  62. package/dist/exact.js.map +1 -0
  63. package/dist/fetch.d.ts +58 -0
  64. package/dist/fetch.d.ts.map +1 -0
  65. package/dist/fetch.js +79 -0
  66. package/dist/fetch.js.map +1 -0
  67. package/dist/fixed.d.ts +121 -0
  68. package/dist/fixed.d.ts.map +1 -0
  69. package/dist/fixed.js +420 -0
  70. package/dist/fixed.js.map +1 -0
  71. package/dist/fn.d.ts +27 -0
  72. package/dist/fn.d.ts.map +1 -0
  73. package/dist/fn.js +30 -0
  74. package/dist/fn.js.map +1 -0
  75. package/dist/format.d.ts +13 -0
  76. package/dist/format.d.ts.map +1 -0
  77. package/dist/format.js +90 -0
  78. package/dist/format.js.map +1 -0
  79. package/dist/generated/adyen.d.ts +3 -0
  80. package/dist/generated/adyen.d.ts.map +1 -0
  81. package/dist/generated/adyen.js +144 -0
  82. package/dist/generated/adyen.js.map +1 -0
  83. package/dist/generated/braintree.d.ts +3 -0
  84. package/dist/generated/braintree.d.ts.map +1 -0
  85. package/dist/generated/braintree.js +140 -0
  86. package/dist/generated/braintree.js.map +1 -0
  87. package/dist/generated/cash.d.ts +12 -0
  88. package/dist/generated/cash.d.ts.map +1 -0
  89. package/dist/generated/cash.js +364 -0
  90. package/dist/generated/cash.js.map +1 -0
  91. package/dist/generated/checkout.d.ts +3 -0
  92. package/dist/generated/checkout.d.ts.map +1 -0
  93. package/dist/generated/checkout.js +151 -0
  94. package/dist/generated/checkout.js.map +1 -0
  95. package/dist/generated/iso4217.d.ts +174 -0
  96. package/dist/generated/iso4217.d.ts.map +1 -0
  97. package/dist/generated/iso4217.js +175 -0
  98. package/dist/generated/iso4217.js.map +1 -0
  99. package/dist/generated/kernel.d.ts +17 -0
  100. package/dist/generated/kernel.d.ts.map +1 -0
  101. package/dist/generated/kernel.js +208 -0
  102. package/dist/generated/kernel.js.map +1 -0
  103. package/dist/generated/klarna.d.ts +3 -0
  104. package/dist/generated/klarna.d.ts.map +1 -0
  105. package/dist/generated/klarna.js +21 -0
  106. package/dist/generated/klarna.js.map +1 -0
  107. package/dist/generated/paypal.d.ts +3 -0
  108. package/dist/generated/paypal.d.ts.map +1 -0
  109. package/dist/generated/paypal.js +31 -0
  110. package/dist/generated/paypal.js.map +1 -0
  111. package/dist/generated/stripe.d.ts +8 -0
  112. package/dist/generated/stripe.d.ts.map +1 -0
  113. package/dist/generated/stripe.js +150 -0
  114. package/dist/generated/stripe.js.map +1 -0
  115. package/dist/index.d.ts +11 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +11 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/klarna.d.ts +31 -0
  120. package/dist/klarna.d.ts.map +1 -0
  121. package/dist/klarna.js +38 -0
  122. package/dist/klarna.js.map +1 -0
  123. package/dist/money.d.ts +218 -0
  124. package/dist/money.d.ts.map +1 -0
  125. package/dist/money.js +577 -0
  126. package/dist/money.js.map +1 -0
  127. package/dist/parse.d.ts +11 -0
  128. package/dist/parse.d.ts.map +1 -0
  129. package/dist/parse.js +132 -0
  130. package/dist/parse.js.map +1 -0
  131. package/dist/paypal.d.ts +41 -0
  132. package/dist/paypal.d.ts.map +1 -0
  133. package/dist/paypal.js +58 -0
  134. package/dist/paypal.js.map +1 -0
  135. package/dist/plugins/adyen.d.ts +15 -0
  136. package/dist/plugins/adyen.d.ts.map +1 -0
  137. package/dist/plugins/adyen.js +10 -0
  138. package/dist/plugins/adyen.js.map +1 -0
  139. package/dist/plugins/all.d.ts +22 -0
  140. package/dist/plugins/all.d.ts.map +1 -0
  141. package/dist/plugins/all.js +23 -0
  142. package/dist/plugins/all.js.map +1 -0
  143. package/dist/plugins/allocate.d.ts +20 -0
  144. package/dist/plugins/allocate.d.ts.map +1 -0
  145. package/dist/plugins/allocate.js +26 -0
  146. package/dist/plugins/allocate.js.map +1 -0
  147. package/dist/plugins/braintree.d.ts +12 -0
  148. package/dist/plugins/braintree.d.ts.map +1 -0
  149. package/dist/plugins/braintree.js +12 -0
  150. package/dist/plugins/braintree.js.map +1 -0
  151. package/dist/plugins/cash.d.ts +19 -0
  152. package/dist/plugins/cash.d.ts.map +1 -0
  153. package/dist/plugins/cash.js +16 -0
  154. package/dist/plugins/cash.js.map +1 -0
  155. package/dist/plugins/checkout.d.ts +21 -0
  156. package/dist/plugins/checkout.d.ts.map +1 -0
  157. package/dist/plugins/checkout.js +16 -0
  158. package/dist/plugins/checkout.js.map +1 -0
  159. package/dist/plugins/convert.d.ts +20 -0
  160. package/dist/plugins/convert.d.ts.map +1 -0
  161. package/dist/plugins/convert.js +13 -0
  162. package/dist/plugins/convert.js.map +1 -0
  163. package/dist/plugins/exact.d.ts +15 -0
  164. package/dist/plugins/exact.d.ts.map +1 -0
  165. package/dist/plugins/exact.js +13 -0
  166. package/dist/plugins/exact.js.map +1 -0
  167. package/dist/plugins/fixed.d.ts +17 -0
  168. package/dist/plugins/fixed.d.ts.map +1 -0
  169. package/dist/plugins/fixed.js +13 -0
  170. package/dist/plugins/fixed.js.map +1 -0
  171. package/dist/plugins/format.d.ts +9 -0
  172. package/dist/plugins/format.d.ts.map +1 -0
  173. package/dist/plugins/format.js +16 -0
  174. package/dist/plugins/format.js.map +1 -0
  175. package/dist/plugins/klarna.d.ts +10 -0
  176. package/dist/plugins/klarna.d.ts.map +1 -0
  177. package/dist/plugins/klarna.js +10 -0
  178. package/dist/plugins/klarna.js.map +1 -0
  179. package/dist/plugins/paypal.d.ts +14 -0
  180. package/dist/plugins/paypal.d.ts.map +1 -0
  181. package/dist/plugins/paypal.js +16 -0
  182. package/dist/plugins/paypal.js.map +1 -0
  183. package/dist/plugins/prisma.d.ts +8 -0
  184. package/dist/plugins/prisma.d.ts.map +1 -0
  185. package/dist/plugins/prisma.js +13 -0
  186. package/dist/plugins/prisma.js.map +1 -0
  187. package/dist/plugins/stripe.d.ts +14 -0
  188. package/dist/plugins/stripe.d.ts.map +1 -0
  189. package/dist/plugins/stripe.js +16 -0
  190. package/dist/plugins/stripe.js.map +1 -0
  191. package/dist/plugins/tax.d.ts +21 -0
  192. package/dist/plugins/tax.d.ts.map +1 -0
  193. package/dist/plugins/tax.js +18 -0
  194. package/dist/plugins/tax.js.map +1 -0
  195. package/dist/prisma.d.ts +66 -0
  196. package/dist/prisma.d.ts.map +1 -0
  197. package/dist/prisma.js +66 -0
  198. package/dist/prisma.js.map +1 -0
  199. package/dist/processor.d.ts +28 -0
  200. package/dist/processor.d.ts.map +1 -0
  201. package/dist/processor.js +118 -0
  202. package/dist/processor.js.map +1 -0
  203. package/dist/provider.d.ts +89 -0
  204. package/dist/provider.d.ts.map +1 -0
  205. package/dist/provider.js +240 -0
  206. package/dist/provider.js.map +1 -0
  207. package/dist/rate.d.ts +119 -0
  208. package/dist/rate.d.ts.map +1 -0
  209. package/dist/rate.js +271 -0
  210. package/dist/rate.js.map +1 -0
  211. package/dist/rounding-error.d.ts +9 -0
  212. package/dist/rounding-error.d.ts.map +1 -0
  213. package/dist/rounding-error.js +9 -0
  214. package/dist/rounding-error.js.map +1 -0
  215. package/dist/rounding.d.ts +50 -0
  216. package/dist/rounding.d.ts.map +1 -0
  217. package/dist/rounding.js +87 -0
  218. package/dist/rounding.js.map +1 -0
  219. package/dist/stripe-fx.d.ts +22 -0
  220. package/dist/stripe-fx.d.ts.map +1 -0
  221. package/dist/stripe-fx.js +30 -0
  222. package/dist/stripe-fx.js.map +1 -0
  223. package/dist/stripe.d.ts +36 -0
  224. package/dist/stripe.d.ts.map +1 -0
  225. package/dist/stripe.js +39 -0
  226. package/dist/stripe.js.map +1 -0
  227. package/dist/tax.d.ts +29 -0
  228. package/dist/tax.d.ts.map +1 -0
  229. package/dist/tax.js +39 -0
  230. package/dist/tax.js.map +1 -0
  231. package/package.json +171 -4
  232. package/src/adyen-fx.ts +154 -0
  233. package/src/adyen.ts +46 -0
  234. package/src/allocate.ts +393 -0
  235. package/src/bag.ts +170 -0
  236. package/src/braintree.ts +71 -0
  237. package/src/cash.ts +115 -0
  238. package/src/checkout.ts +77 -0
  239. package/src/convert.ts +159 -0
  240. package/src/currency.ts +61 -0
  241. package/src/decimal.ts +283 -0
  242. package/src/ecb.ts +162 -0
  243. package/src/exact.ts +182 -0
  244. package/src/fetch.ts +127 -0
  245. package/src/fixed.ts +558 -0
  246. package/src/fn.ts +80 -0
  247. package/src/format.ts +106 -0
  248. package/src/generated/adyen.ts +144 -0
  249. package/src/generated/braintree.ts +140 -0
  250. package/src/generated/cash.ts +375 -0
  251. package/src/generated/checkout.ts +151 -0
  252. package/src/generated/iso4217.ts +179 -0
  253. package/src/generated/kernel.ts +230 -0
  254. package/src/generated/klarna.ts +21 -0
  255. package/src/generated/paypal.ts +31 -0
  256. package/src/generated/stripe.ts +150 -0
  257. package/src/index.ts +37 -0
  258. package/src/klarna.ts +54 -0
  259. package/src/money.ts +781 -0
  260. package/src/parse.ts +144 -0
  261. package/src/paypal.ts +93 -0
  262. package/src/plugins/adyen.ts +25 -0
  263. package/src/plugins/all.ts +47 -0
  264. package/src/plugins/allocate.ts +53 -0
  265. package/src/plugins/braintree.ts +23 -0
  266. package/src/plugins/cash.ts +33 -0
  267. package/src/plugins/checkout.ts +32 -0
  268. package/src/plugins/convert.ts +50 -0
  269. package/src/plugins/exact.ts +23 -0
  270. package/src/plugins/fixed.ts +28 -0
  271. package/src/plugins/format.ts +28 -0
  272. package/src/plugins/klarna.ts +21 -0
  273. package/src/plugins/paypal.ts +29 -0
  274. package/src/plugins/prisma.ts +24 -0
  275. package/src/plugins/stripe.ts +29 -0
  276. package/src/plugins/tax.ts +41 -0
  277. package/src/prisma.ts +118 -0
  278. package/src/processor.ts +181 -0
  279. package/src/provider.ts +324 -0
  280. package/src/rate.ts +377 -0
  281. package/src/rounding-error.ts +8 -0
  282. package/src/rounding.ts +122 -0
  283. package/src/stripe-fx.ts +49 -0
  284. package/src/stripe.ts +69 -0
  285. package/src/tax.ts +71 -0
@@ -0,0 +1,375 @@
1
+ // GENERATED by scripts/gen-currencies.mjs from data/cash-rounding.json. Do not edit by hand.
2
+ /* eslint-disable */
3
+
4
+ export interface CashRule {
5
+ readonly currency: string;
6
+ /** Smallest cash step, in ISO minor units. */
7
+ readonly increment: number;
8
+ readonly countries: readonly string[];
9
+ readonly scope: string;
10
+ /** false: only secondary sources were found. */
11
+ readonly verified: boolean;
12
+ readonly source: string;
13
+ }
14
+
15
+ export const CASH_RULES: readonly CashRule[] = [
16
+ {
17
+ "currency": "CHF",
18
+ "increment": 5,
19
+ "countries": [
20
+ "CH",
21
+ "LI"
22
+ ],
23
+ "scope": "cash (practice; card/electronic to 0.01)",
24
+ "verified": false,
25
+ "source": "https://www.snb.ch/en/the-snb/mandates-goals/cash/coins"
26
+ },
27
+ {
28
+ "currency": "SEK",
29
+ "increment": 100,
30
+ "countries": [
31
+ "SE"
32
+ ],
33
+ "scope": "cash only",
34
+ "verified": true,
35
+ "source": "https://archive.riksbank.se/en/Web-archive/Published/Notices/2009/50-ore-coin-to-be-abolished-in-2010/index.html"
36
+ },
37
+ {
38
+ "currency": "DKK",
39
+ "increment": 50,
40
+ "countries": [
41
+ "DK",
42
+ "GL",
43
+ "FO"
44
+ ],
45
+ "scope": "cash only",
46
+ "verified": false,
47
+ "source": "https://lex.dk/afrunding"
48
+ },
49
+ {
50
+ "currency": "NOK",
51
+ "increment": 100,
52
+ "countries": [
53
+ "NO",
54
+ "SJ",
55
+ "BV"
56
+ ],
57
+ "scope": "cash only",
58
+ "verified": true,
59
+ "source": "https://www.norges-bank.no/en/news-events/news/Circulars/2011/Regulation-relating-to-withdrawal-of-50-ore-coins-as-legal-tender/"
60
+ },
61
+ {
62
+ "currency": "CAD",
63
+ "increment": 5,
64
+ "countries": [
65
+ "CA"
66
+ ],
67
+ "scope": "cash only",
68
+ "verified": true,
69
+ "source": "https://www.canada.ca/en/revenue-agency/services/forms-publications/publications/gi-131/phasing-penny.html"
70
+ },
71
+ {
72
+ "currency": "AUD",
73
+ "increment": 5,
74
+ "countries": [
75
+ "AU",
76
+ "CX",
77
+ "CC",
78
+ "NF",
79
+ "NR",
80
+ "KI",
81
+ "TV",
82
+ "HM"
83
+ ],
84
+ "scope": "cash only",
85
+ "verified": false,
86
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
87
+ },
88
+ {
89
+ "currency": "NZD",
90
+ "increment": 10,
91
+ "countries": [
92
+ "NZ",
93
+ "CK",
94
+ "NU",
95
+ "PN",
96
+ "TK"
97
+ ],
98
+ "scope": "cash only",
99
+ "verified": false,
100
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
101
+ },
102
+ {
103
+ "currency": "EUR",
104
+ "increment": 5,
105
+ "countries": [
106
+ "BE"
107
+ ],
108
+ "scope": "cash only (mandatory for in-person cash; optional for other methods; not allowed for distance sales)",
109
+ "verified": true,
110
+ "source": "https://economie.fgov.be/en/themes/sales/mandatory-rounding-cash"
111
+ },
112
+ {
113
+ "currency": "EUR",
114
+ "increment": 5,
115
+ "countries": [
116
+ "NL"
117
+ ],
118
+ "scope": "cash only (permitted, must be signposted)",
119
+ "verified": true,
120
+ "source": "https://www.rijksoverheid.nl/documenten/vraag-en-antwoord/betalingsverkeer/mogen-winkeliers-betalingen-afronden-op-0-eurocent-of-5-eurocent"
121
+ },
122
+ {
123
+ "currency": "EUR",
124
+ "increment": 5,
125
+ "countries": [
126
+ "FI"
127
+ ],
128
+ "scope": "cash only (statutory)",
129
+ "verified": false,
130
+ "source": "https://www.finlex.fi/fi/lainsaadanto/2000/890"
131
+ },
132
+ {
133
+ "currency": "EUR",
134
+ "increment": 5,
135
+ "countries": [
136
+ "IE"
137
+ ],
138
+ "scope": "cash only (voluntary)",
139
+ "verified": false,
140
+ "source": "https://www.irishtimes.com/news/ireland/irish-news/coin-rounding-begins-as-use-of-1-cent-2-cent-coins-reduced-1.2408459"
141
+ },
142
+ {
143
+ "currency": "EUR",
144
+ "increment": 5,
145
+ "countries": [
146
+ "IT"
147
+ ],
148
+ "scope": "cash only (voluntary practice)",
149
+ "verified": false,
150
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
151
+ },
152
+ {
153
+ "currency": "EUR",
154
+ "increment": 5,
155
+ "countries": [
156
+ "SK"
157
+ ],
158
+ "scope": "cash only",
159
+ "verified": false,
160
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
161
+ },
162
+ {
163
+ "currency": "EUR",
164
+ "increment": 5,
165
+ "countries": [
166
+ "EE"
167
+ ],
168
+ "scope": "cash only, at physical point of sale",
169
+ "verified": true,
170
+ "source": "https://www.eestipank.ee/en/press/rounding-rule-will-start-apply-payments-cash-new-year-27122024"
171
+ },
172
+ {
173
+ "currency": "EUR",
174
+ "increment": 5,
175
+ "countries": [
176
+ "LT"
177
+ ],
178
+ "scope": "cash only",
179
+ "verified": false,
180
+ "source": "https://www.baltictimes.com/lithuania_starts_rounding_off_cash_payments_to_phase_out_1__2_cent_coins"
181
+ },
182
+ {
183
+ "currency": "HUF",
184
+ "increment": 500,
185
+ "countries": [
186
+ "HU"
187
+ ],
188
+ "scope": "cash only (statutory)",
189
+ "verified": true,
190
+ "source": "https://njt.jog.gov.hu/jogszabaly/2008-3-00-00"
191
+ },
192
+ {
193
+ "currency": "CZK",
194
+ "increment": 100,
195
+ "countries": [
196
+ "CZ"
197
+ ],
198
+ "scope": "cash only",
199
+ "verified": true,
200
+ "source": "https://www.cnb.cz/en/faq/How-to-round-after-the-withdrawal-of-50-heller-coins"
201
+ },
202
+ {
203
+ "currency": "ILS",
204
+ "increment": 10,
205
+ "countries": [
206
+ "IL",
207
+ "PS"
208
+ ],
209
+ "scope": "cash only",
210
+ "verified": false,
211
+ "source": "https://boi.org.il/en/communication-and-publications/press-releases/the-bank-of-israel-asks-the-government-to-approve-abolishing-the-5-agorot-coin-as-legal-tender/"
212
+ },
213
+ {
214
+ "currency": "MYR",
215
+ "increment": 5,
216
+ "countries": [
217
+ "MY"
218
+ ],
219
+ "scope": "over-the-counter payments (originally cash and non-cash per 2007 announcement; current practice cash only)",
220
+ "verified": false,
221
+ "source": "https://www.bnm.gov.my/-/introduction-of-a-rounding-mechanism-for-over-the-counter-payments"
222
+ },
223
+ {
224
+ "currency": "SGD",
225
+ "increment": 5,
226
+ "countries": [
227
+ "SG"
228
+ ],
229
+ "scope": "cash (informal practice; always rounded down per Wikipedia)",
230
+ "verified": false,
231
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
232
+ },
233
+ {
234
+ "currency": "RON",
235
+ "increment": 5,
236
+ "countries": [
237
+ "RO"
238
+ ],
239
+ "scope": "cash (practice)",
240
+ "verified": false,
241
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
242
+ },
243
+ {
244
+ "currency": "XPF",
245
+ "increment": 5,
246
+ "countries": [
247
+ "PF",
248
+ "NC",
249
+ "WF"
250
+ ],
251
+ "scope": "cash only",
252
+ "verified": false,
253
+ "source": "https://www.ieom.fr/nouvelles-pieces/"
254
+ },
255
+ {
256
+ "currency": "BSD",
257
+ "increment": 5,
258
+ "countries": [
259
+ "BS"
260
+ ],
261
+ "scope": "cash",
262
+ "verified": false,
263
+ "source": "https://www.centralbankbahamas.com/download/075913500.pdf"
264
+ },
265
+ {
266
+ "currency": "TTD",
267
+ "increment": 5,
268
+ "countries": [
269
+ "TT"
270
+ ],
271
+ "scope": "cash",
272
+ "verified": false,
273
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
274
+ },
275
+ {
276
+ "currency": "ZAR",
277
+ "increment": 10,
278
+ "countries": [
279
+ "ZA"
280
+ ],
281
+ "scope": "cash (practice)",
282
+ "verified": false,
283
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
284
+ },
285
+ {
286
+ "currency": "HKD",
287
+ "increment": 10,
288
+ "countries": [
289
+ "HK"
290
+ ],
291
+ "scope": "cash (practice)",
292
+ "verified": false,
293
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
294
+ },
295
+ {
296
+ "currency": "UAH",
297
+ "increment": 10,
298
+ "countries": [
299
+ "UA"
300
+ ],
301
+ "scope": "cash",
302
+ "verified": false,
303
+ "source": "https://www.bank.gov.ua/news/all/natsionalniy-bank-uporyadkovuye-nominalniy-ryad-banknot-i-monet-grivni"
304
+ },
305
+ {
306
+ "currency": "CLP",
307
+ "increment": 10,
308
+ "countries": [
309
+ "CL"
310
+ ],
311
+ "scope": "cash only",
312
+ "verified": false,
313
+ "source": "https://www.dgac.gob.cl/monedas-de-1-y-5-pesos-pasaran-a-la-historia-ley-n-20-956-ministerio-de-hacienda/"
314
+ },
315
+ {
316
+ "currency": "PEN",
317
+ "increment": 10,
318
+ "countries": [
319
+ "PE"
320
+ ],
321
+ "scope": "cash (practice)",
322
+ "verified": false,
323
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
324
+ },
325
+ {
326
+ "currency": "THB",
327
+ "increment": 25,
328
+ "countries": [
329
+ "TH"
330
+ ],
331
+ "scope": "cash (practice)",
332
+ "verified": false,
333
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
334
+ },
335
+ {
336
+ "currency": "AED",
337
+ "increment": 25,
338
+ "countries": [
339
+ "AE"
340
+ ],
341
+ "scope": "cash (practice)",
342
+ "verified": false,
343
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
344
+ },
345
+ {
346
+ "currency": "INR",
347
+ "increment": 100,
348
+ "countries": [
349
+ "IN"
350
+ ],
351
+ "scope": "cash (practice)",
352
+ "verified": false,
353
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
354
+ },
355
+ {
356
+ "currency": "JMD",
357
+ "increment": 100,
358
+ "countries": [
359
+ "JM"
360
+ ],
361
+ "scope": "cash",
362
+ "verified": false,
363
+ "source": "https://jis.gov.jm/information/get-the-facts/demonetisation-of-coins/"
364
+ },
365
+ {
366
+ "currency": "USD",
367
+ "increment": 5,
368
+ "countries": [
369
+ "US"
370
+ ],
371
+ "scope": "cash (permitted, not required; varies by state)",
372
+ "verified": false,
373
+ "source": "https://en.wikipedia.org/wiki/Cash_rounding"
374
+ }
375
+ ];
@@ -0,0 +1,151 @@
1
+ // GENERATED by scripts/gen-currencies.mjs from data/checkout.json (https://www.checkout.com/docs/payments/accept-payments/format-the-amount-value, retrieved 2026-11-07). Do not edit by hand.
2
+ /* eslint-disable */
3
+
4
+ /** Checkout.com currencies: [API exponent, payment amount multiple, Standalone API (authentication) multiple]. CLP is two-decimal with a multiple of 100; three-decimal currencies need a multiple of 10. */
5
+ export const CHECKOUT_RULES: Readonly<Record<string, readonly [exponent: number, multiple: number, standaloneMultiple: number]>> = {
6
+ AED: [2,1,1],
7
+ AFN: [2,1,1],
8
+ ALL: [2,1,1],
9
+ AMD: [2,1,1],
10
+ AOA: [2,1,1],
11
+ AUD: [2,1,1],
12
+ AWG: [2,1,1],
13
+ AZN: [2,1,1],
14
+ BAM: [2,1,1],
15
+ BBD: [2,1,1],
16
+ BDT: [2,1,1],
17
+ BHD: [3,10,10],
18
+ BIF: [0,1,1],
19
+ BMD: [2,1,1],
20
+ BND: [2,1,1],
21
+ BOB: [2,1,1],
22
+ BRL: [2,1,1],
23
+ BSD: [2,1,1],
24
+ BTN: [2,1,1],
25
+ BWP: [2,1,1],
26
+ BZD: [2,1,1],
27
+ CAD: [2,1,1],
28
+ CDF: [2,1,1],
29
+ CHF: [2,1,1],
30
+ CLP: [2,100,1],
31
+ CNY: [2,1,1],
32
+ COP: [2,1,1],
33
+ CRC: [2,1,1],
34
+ CUP: [2,1,1],
35
+ CVE: [2,1,1],
36
+ CZK: [2,1,1],
37
+ DJF: [0,1,1],
38
+ DKK: [2,1,1],
39
+ DOP: [2,1,1],
40
+ DZD: [2,1,1],
41
+ EGP: [2,1,1],
42
+ ERN: [2,1,1],
43
+ ETB: [2,1,1],
44
+ EUR: [2,1,1],
45
+ FJD: [2,1,1],
46
+ FKP: [2,1,1],
47
+ GBP: [2,1,1],
48
+ GEL: [2,1,1],
49
+ GIP: [2,1,1],
50
+ GNF: [0,1,1],
51
+ GTQ: [2,1,1],
52
+ GYD: [2,1,1],
53
+ HKD: [2,1,1],
54
+ HNL: [2,1,1],
55
+ HTG: [2,1,1],
56
+ HUF: [2,1,1],
57
+ IDR: [2,1,1],
58
+ ILS: [2,1,1],
59
+ INR: [2,1,1],
60
+ IQD: [3,10,10],
61
+ IRR: [2,1,1],
62
+ ISK: [0,1,1],
63
+ JMD: [2,1,1],
64
+ JOD: [3,10,10],
65
+ JPY: [0,1,1],
66
+ KES: [2,1,1],
67
+ KGS: [2,1,1],
68
+ KHR: [2,1,1],
69
+ KMF: [0,1,1],
70
+ KRW: [0,1,1],
71
+ KWD: [3,10,10],
72
+ KYD: [2,1,1],
73
+ KZT: [2,1,1],
74
+ LAK: [2,1,1],
75
+ LKR: [2,1,1],
76
+ LRD: [2,1,1],
77
+ LSL: [2,1,1],
78
+ LYD: [3,10,10],
79
+ MAD: [2,1,1],
80
+ MDL: [2,1,1],
81
+ MGA: [2,1,1],
82
+ MKD: [2,1,1],
83
+ MMK: [2,1,1],
84
+ MNT: [2,1,1],
85
+ MOP: [2,1,1],
86
+ MRU: [2,1,1],
87
+ MUR: [2,1,1],
88
+ MVR: [2,1,1],
89
+ MWK: [2,1,1],
90
+ MXN: [2,1,1],
91
+ MYR: [2,1,1],
92
+ MZN: [2,1,1],
93
+ NAD: [2,1,1],
94
+ NGN: [2,1,1],
95
+ NIO: [2,1,1],
96
+ NOK: [2,1,1],
97
+ NPR: [2,1,1],
98
+ NZD: [2,1,1],
99
+ OMR: [3,10,10],
100
+ PAB: [2,1,1],
101
+ PEN: [2,1,1],
102
+ PGK: [2,1,1],
103
+ PHP: [2,1,1],
104
+ PKR: [2,1,1],
105
+ PLN: [2,1,1],
106
+ PYG: [0,1,1],
107
+ QAR: [2,1,1],
108
+ RON: [2,1,1],
109
+ RSD: [2,1,1],
110
+ RWF: [0,1,1],
111
+ SAR: [2,1,1],
112
+ SBD: [2,1,1],
113
+ SCR: [2,1,1],
114
+ SEK: [2,1,1],
115
+ SGD: [2,1,1],
116
+ SHP: [2,1,1],
117
+ SLE: [2,1,1],
118
+ SLL: [2,1,1],
119
+ SOS: [2,1,1],
120
+ SRD: [2,1,1],
121
+ STN: [2,1,1],
122
+ SVC: [2,1,1],
123
+ SZL: [2,1,1],
124
+ THB: [2,1,1],
125
+ TJS: [2,1,1],
126
+ TMT: [2,1,1],
127
+ TND: [3,10,10],
128
+ TOP: [2,1,1],
129
+ TRY: [2,1,1],
130
+ TTD: [2,1,1],
131
+ TWD: [2,1,1],
132
+ TZS: [2,1,1],
133
+ UAH: [2,1,1],
134
+ UGX: [0,1,1],
135
+ USD: [2,1,1],
136
+ UYU: [2,1,1],
137
+ UZS: [2,1,1],
138
+ VES: [2,1,1],
139
+ VND: [0,1,1],
140
+ VUV: [0,1,1],
141
+ WST: [2,1,1],
142
+ XAF: [0,1,1],
143
+ XCD: [2,1,1],
144
+ XCG: [2,1,1],
145
+ XDR: [2,1,1],
146
+ XOF: [0,1,1],
147
+ XPF: [0,1,1],
148
+ YER: [2,1,1],
149
+ ZAR: [2,1,1],
150
+ ZMW: [2,1,1],
151
+ };
@@ -0,0 +1,179 @@
1
+ // GENERATED by scripts/gen-currencies.mjs from data/iso4217-list-one.xml. Do not edit by hand.
2
+ /* eslint-disable */
3
+
4
+ /** Publication date of the ISO 4217 List One snapshot the table was generated from. */
5
+ export const ISO_4217_PUBLISHED = "2026-09-17";
6
+
7
+ /** ISO 4217 minor-unit exponent for every active code that has one (165 codes). */
8
+ export const ISO_EXPONENTS = {
9
+ AED: 2,
10
+ AFN: 2,
11
+ ALL: 2,
12
+ AMD: 2,
13
+ AOA: 2,
14
+ ARS: 2,
15
+ AUD: 2,
16
+ AWG: 2,
17
+ AZN: 2,
18
+ BAM: 2,
19
+ BBD: 2,
20
+ BDT: 2,
21
+ BHD: 3,
22
+ BIF: 0,
23
+ BMD: 2,
24
+ BND: 2,
25
+ BOB: 2,
26
+ BOV: 2,
27
+ BRL: 2,
28
+ BSD: 2,
29
+ BTN: 2,
30
+ BWP: 2,
31
+ BYN: 2,
32
+ BZD: 2,
33
+ CAD: 2,
34
+ CDF: 2,
35
+ CHE: 2,
36
+ CHF: 2,
37
+ CHW: 2,
38
+ CLF: 4,
39
+ CLP: 0,
40
+ CNY: 2,
41
+ COP: 2,
42
+ COU: 2,
43
+ CRC: 2,
44
+ CUP: 2,
45
+ CVE: 2,
46
+ CZK: 2,
47
+ DJF: 0,
48
+ DKK: 2,
49
+ DOP: 2,
50
+ DZD: 2,
51
+ EGP: 2,
52
+ ERN: 2,
53
+ ETB: 2,
54
+ EUR: 2,
55
+ FJD: 2,
56
+ FKP: 2,
57
+ GBP: 2,
58
+ GEL: 2,
59
+ GHS: 2,
60
+ GIP: 2,
61
+ GMD: 2,
62
+ GNF: 0,
63
+ GTQ: 2,
64
+ GYD: 2,
65
+ HKD: 2,
66
+ HNL: 2,
67
+ HTG: 2,
68
+ HUF: 2,
69
+ IDR: 2,
70
+ ILS: 2,
71
+ INR: 2,
72
+ IQD: 3,
73
+ IRR: 2,
74
+ ISK: 0,
75
+ JMD: 2,
76
+ JOD: 3,
77
+ JPY: 0,
78
+ KES: 2,
79
+ KGS: 2,
80
+ KHR: 2,
81
+ KMF: 0,
82
+ KPW: 2,
83
+ KRW: 0,
84
+ KWD: 3,
85
+ KYD: 2,
86
+ KZT: 2,
87
+ LAK: 2,
88
+ LBP: 2,
89
+ LKR: 2,
90
+ LRD: 2,
91
+ LSL: 2,
92
+ LYD: 3,
93
+ MAD: 2,
94
+ MDL: 2,
95
+ MGA: 2,
96
+ MKD: 2,
97
+ MMK: 2,
98
+ MNT: 2,
99
+ MOP: 2,
100
+ MRU: 2,
101
+ MUR: 2,
102
+ MVR: 2,
103
+ MWK: 2,
104
+ MXN: 2,
105
+ MXV: 2,
106
+ MYR: 2,
107
+ MZN: 2,
108
+ NAD: 2,
109
+ NGN: 2,
110
+ NIO: 2,
111
+ NOK: 2,
112
+ NPR: 2,
113
+ NZD: 2,
114
+ OMR: 3,
115
+ PAB: 2,
116
+ PEN: 2,
117
+ PGK: 2,
118
+ PHP: 2,
119
+ PKR: 2,
120
+ PLN: 2,
121
+ PYG: 0,
122
+ QAR: 2,
123
+ RON: 2,
124
+ RSD: 2,
125
+ RUB: 2,
126
+ RWF: 0,
127
+ SAR: 2,
128
+ SBD: 2,
129
+ SCR: 2,
130
+ SDG: 2,
131
+ SEK: 2,
132
+ SGD: 2,
133
+ SHP: 2,
134
+ SLE: 2,
135
+ SOS: 2,
136
+ SRD: 2,
137
+ SSP: 2,
138
+ STN: 2,
139
+ SVC: 2,
140
+ SYP: 2,
141
+ SZL: 2,
142
+ THB: 2,
143
+ TJS: 2,
144
+ TMT: 2,
145
+ TND: 3,
146
+ TOP: 2,
147
+ TRY: 2,
148
+ TTD: 2,
149
+ TWD: 2,
150
+ TZS: 2,
151
+ UAH: 2,
152
+ UGX: 0,
153
+ USD: 2,
154
+ USN: 2,
155
+ UYI: 0,
156
+ UYU: 2,
157
+ UYW: 4,
158
+ UZS: 2,
159
+ VED: 2,
160
+ VES: 2,
161
+ VND: 0,
162
+ VUV: 0,
163
+ WST: 2,
164
+ XAD: 2,
165
+ XAF: 0,
166
+ XCD: 2,
167
+ XCG: 2,
168
+ XOF: 0,
169
+ XPF: 0,
170
+ YER: 2,
171
+ ZAR: 2,
172
+ ZMW: 2,
173
+ ZWG: 2,
174
+ } as const;
175
+
176
+ export type IsoCurrencyCode = keyof typeof ISO_EXPONENTS;
177
+
178
+ /** Active codes whose minor unit is "N.A." (precious metals, SDR, testing): not monetary, not in ISO_EXPONENTS. */
179
+ export const ISO_NON_MONETARY = ["XAG","XAU","XBA","XBB","XBC","XBD","XDR","XPD","XPT","XSU","XTS","XUA","XXX"] as const;