@eleva-io/erp-sdk 0.1.52 → 0.1.53

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 (153) hide show
  1. package/dist/cjs/modules/contacts/persons/api/index.d.ts +1 -0
  2. package/dist/cjs/modules/contacts/persons/api/index.d.ts.map +1 -1
  3. package/dist/cjs/modules/contacts/persons/api/index.js +1 -0
  4. package/dist/cjs/modules/contacts/persons/api/index.js.map +1 -1
  5. package/dist/cjs/modules/contacts/persons/api/payment-methods.d.ts +11 -0
  6. package/dist/cjs/modules/contacts/persons/api/payment-methods.d.ts.map +1 -0
  7. package/dist/cjs/modules/contacts/persons/api/payment-methods.js +27 -0
  8. package/dist/cjs/modules/contacts/persons/api/payment-methods.js.map +1 -0
  9. package/dist/cjs/modules/contacts/persons/api/persons.d.ts +2 -0
  10. package/dist/cjs/modules/contacts/persons/api/persons.d.ts.map +1 -1
  11. package/dist/cjs/modules/contacts/persons/api/persons.js +7 -0
  12. package/dist/cjs/modules/contacts/persons/api/persons.js.map +1 -1
  13. package/dist/cjs/modules/contacts/persons/types/index.d.ts +1 -0
  14. package/dist/cjs/modules/contacts/persons/types/index.d.ts.map +1 -1
  15. package/dist/cjs/modules/contacts/persons/types/index.js +1 -0
  16. package/dist/cjs/modules/contacts/persons/types/index.js.map +1 -1
  17. package/dist/cjs/modules/contacts/persons/types/payment-method.d.ts +13 -0
  18. package/dist/cjs/modules/contacts/persons/types/payment-method.d.ts.map +1 -0
  19. package/dist/cjs/modules/contacts/persons/types/payment-method.js +3 -0
  20. package/dist/cjs/modules/contacts/persons/types/payment-method.js.map +1 -0
  21. package/dist/cjs/modules/global/api.d.ts +2 -0
  22. package/dist/cjs/modules/global/api.d.ts.map +1 -1
  23. package/dist/cjs/modules/global/api.js +4 -0
  24. package/dist/cjs/modules/global/api.js.map +1 -1
  25. package/dist/cjs/modules/global/bank-account/api.d.ts +9 -0
  26. package/dist/cjs/modules/global/bank-account/api.d.ts.map +1 -0
  27. package/dist/cjs/modules/global/bank-account/api.js +16 -0
  28. package/dist/cjs/modules/global/bank-account/api.js.map +1 -0
  29. package/dist/cjs/modules/global/bank-account/index.d.ts +3 -0
  30. package/dist/cjs/modules/global/bank-account/index.d.ts.map +1 -0
  31. package/dist/cjs/modules/global/bank-account/index.js +19 -0
  32. package/dist/cjs/modules/global/bank-account/index.js.map +1 -0
  33. package/dist/cjs/modules/global/bank-account/types.d.ts +14 -0
  34. package/dist/cjs/modules/global/bank-account/types.d.ts.map +1 -0
  35. package/dist/cjs/modules/global/bank-account/types.js +10 -0
  36. package/dist/cjs/modules/global/bank-account/types.js.map +1 -0
  37. package/dist/cjs/modules/global/bank-account/validations/bank_account/aba.d.ts +22 -0
  38. package/dist/cjs/modules/global/bank-account/validations/bank_account/aba.d.ts.map +1 -0
  39. package/dist/cjs/modules/global/bank-account/validations/bank_account/aba.js +214 -0
  40. package/dist/cjs/modules/global/bank-account/validations/bank_account/aba.js.map +1 -0
  41. package/dist/cjs/modules/global/bank-account/validations/bank_account/clabe.d.ts +15 -0
  42. package/dist/cjs/modules/global/bank-account/validations/bank_account/clabe.d.ts.map +1 -0
  43. package/dist/cjs/modules/global/bank-account/validations/bank_account/clabe.js +66 -0
  44. package/dist/cjs/modules/global/bank-account/validations/bank_account/clabe.js.map +1 -0
  45. package/dist/cjs/modules/global/bank-account/validations/bank_account/iban.d.ts +5 -0
  46. package/dist/cjs/modules/global/bank-account/validations/bank_account/iban.d.ts.map +1 -0
  47. package/dist/cjs/modules/global/bank-account/validations/bank_account/iban.js +206 -0
  48. package/dist/cjs/modules/global/bank-account/validations/bank_account/iban.js.map +1 -0
  49. package/dist/cjs/modules/global/bank-account/validations/bank_account/swift.d.ts +16 -0
  50. package/dist/cjs/modules/global/bank-account/validations/bank_account/swift.d.ts.map +1 -0
  51. package/dist/cjs/modules/global/bank-account/validations/bank_account/swift.js +401 -0
  52. package/dist/cjs/modules/global/bank-account/validations/bank_account/swift.js.map +1 -0
  53. package/dist/cjs/modules/global/index.d.ts +1 -0
  54. package/dist/cjs/modules/global/index.d.ts.map +1 -1
  55. package/dist/cjs/modules/global/index.js +1 -0
  56. package/dist/cjs/modules/global/index.js.map +1 -1
  57. package/dist/cjs/modules/global/types.d.ts +11 -0
  58. package/dist/cjs/modules/global/types.d.ts.map +1 -1
  59. package/dist/cjs/modules/global/types.js +5 -1
  60. package/dist/cjs/modules/global/types.js.map +1 -1
  61. package/dist/cjs/modules/global/validations/payment_method.d.ts +3 -0
  62. package/dist/cjs/modules/global/validations/payment_method.d.ts.map +1 -0
  63. package/dist/cjs/modules/global/validations/payment_method.js +74 -0
  64. package/dist/cjs/modules/global/validations/payment_method.js.map +1 -0
  65. package/dist/cjs/modules/global/validations/payment_method.spec.d.ts +2 -0
  66. package/dist/cjs/modules/global/validations/payment_method.spec.d.ts.map +1 -0
  67. package/dist/cjs/modules/global/validations/payment_method.spec.js +127 -0
  68. package/dist/cjs/modules/global/validations/payment_method.spec.js.map +1 -0
  69. package/dist/cjs/utils/errors.d.ts +15 -0
  70. package/dist/cjs/utils/errors.d.ts.map +1 -0
  71. package/dist/cjs/utils/errors.js +21 -0
  72. package/dist/cjs/utils/errors.js.map +1 -0
  73. package/dist/cjs/utils/index.d.ts +1 -0
  74. package/dist/cjs/utils/index.d.ts.map +1 -1
  75. package/dist/cjs/utils/index.js +1 -0
  76. package/dist/cjs/utils/index.js.map +1 -1
  77. package/dist/esm/modules/contacts/persons/api/index.d.ts +1 -0
  78. package/dist/esm/modules/contacts/persons/api/index.d.ts.map +1 -1
  79. package/dist/esm/modules/contacts/persons/api/index.js +1 -0
  80. package/dist/esm/modules/contacts/persons/api/index.js.map +1 -1
  81. package/dist/esm/modules/contacts/persons/api/payment-methods.d.ts +11 -0
  82. package/dist/esm/modules/contacts/persons/api/payment-methods.d.ts.map +1 -0
  83. package/dist/esm/modules/contacts/persons/api/payment-methods.js +23 -0
  84. package/dist/esm/modules/contacts/persons/api/payment-methods.js.map +1 -0
  85. package/dist/esm/modules/contacts/persons/api/persons.d.ts +2 -0
  86. package/dist/esm/modules/contacts/persons/api/persons.d.ts.map +1 -1
  87. package/dist/esm/modules/contacts/persons/api/persons.js +7 -0
  88. package/dist/esm/modules/contacts/persons/api/persons.js.map +1 -1
  89. package/dist/esm/modules/contacts/persons/types/index.d.ts +1 -0
  90. package/dist/esm/modules/contacts/persons/types/index.d.ts.map +1 -1
  91. package/dist/esm/modules/contacts/persons/types/index.js +1 -0
  92. package/dist/esm/modules/contacts/persons/types/index.js.map +1 -1
  93. package/dist/esm/modules/contacts/persons/types/payment-method.d.ts +13 -0
  94. package/dist/esm/modules/contacts/persons/types/payment-method.d.ts.map +1 -0
  95. package/dist/esm/modules/contacts/persons/types/payment-method.js +2 -0
  96. package/dist/esm/modules/contacts/persons/types/payment-method.js.map +1 -0
  97. package/dist/esm/modules/global/api.d.ts +2 -0
  98. package/dist/esm/modules/global/api.d.ts.map +1 -1
  99. package/dist/esm/modules/global/api.js +4 -0
  100. package/dist/esm/modules/global/api.js.map +1 -1
  101. package/dist/esm/modules/global/bank-account/api.d.ts +9 -0
  102. package/dist/esm/modules/global/bank-account/api.d.ts.map +1 -0
  103. package/dist/esm/modules/global/bank-account/api.js +12 -0
  104. package/dist/esm/modules/global/bank-account/api.js.map +1 -0
  105. package/dist/esm/modules/global/bank-account/index.d.ts +3 -0
  106. package/dist/esm/modules/global/bank-account/index.d.ts.map +1 -0
  107. package/dist/esm/modules/global/bank-account/index.js +3 -0
  108. package/dist/esm/modules/global/bank-account/index.js.map +1 -0
  109. package/dist/esm/modules/global/bank-account/types.d.ts +14 -0
  110. package/dist/esm/modules/global/bank-account/types.d.ts.map +1 -0
  111. package/dist/esm/modules/global/bank-account/types.js +7 -0
  112. package/dist/esm/modules/global/bank-account/types.js.map +1 -0
  113. package/dist/esm/modules/global/bank-account/validations/bank_account/aba.d.ts +22 -0
  114. package/dist/esm/modules/global/bank-account/validations/bank_account/aba.d.ts.map +1 -0
  115. package/dist/esm/modules/global/bank-account/validations/bank_account/aba.js +204 -0
  116. package/dist/esm/modules/global/bank-account/validations/bank_account/aba.js.map +1 -0
  117. package/dist/esm/modules/global/bank-account/validations/bank_account/clabe.d.ts +15 -0
  118. package/dist/esm/modules/global/bank-account/validations/bank_account/clabe.d.ts.map +1 -0
  119. package/dist/esm/modules/global/bank-account/validations/bank_account/clabe.js +62 -0
  120. package/dist/esm/modules/global/bank-account/validations/bank_account/clabe.js.map +1 -0
  121. package/dist/esm/modules/global/bank-account/validations/bank_account/iban.d.ts +5 -0
  122. package/dist/esm/modules/global/bank-account/validations/bank_account/iban.d.ts.map +1 -0
  123. package/dist/esm/modules/global/bank-account/validations/bank_account/iban.js +201 -0
  124. package/dist/esm/modules/global/bank-account/validations/bank_account/iban.js.map +1 -0
  125. package/dist/esm/modules/global/bank-account/validations/bank_account/swift.d.ts +16 -0
  126. package/dist/esm/modules/global/bank-account/validations/bank_account/swift.d.ts.map +1 -0
  127. package/dist/esm/modules/global/bank-account/validations/bank_account/swift.js +393 -0
  128. package/dist/esm/modules/global/bank-account/validations/bank_account/swift.js.map +1 -0
  129. package/dist/esm/modules/global/index.d.ts +1 -0
  130. package/dist/esm/modules/global/index.d.ts.map +1 -1
  131. package/dist/esm/modules/global/index.js +1 -0
  132. package/dist/esm/modules/global/index.js.map +1 -1
  133. package/dist/esm/modules/global/types.d.ts +11 -0
  134. package/dist/esm/modules/global/types.d.ts.map +1 -1
  135. package/dist/esm/modules/global/types.js +4 -0
  136. package/dist/esm/modules/global/types.js.map +1 -1
  137. package/dist/esm/modules/global/validations/payment_method.d.ts +3 -0
  138. package/dist/esm/modules/global/validations/payment_method.d.ts.map +1 -0
  139. package/dist/esm/modules/global/validations/payment_method.js +71 -0
  140. package/dist/esm/modules/global/validations/payment_method.js.map +1 -0
  141. package/dist/esm/modules/global/validations/payment_method.spec.d.ts +2 -0
  142. package/dist/esm/modules/global/validations/payment_method.spec.d.ts.map +1 -0
  143. package/dist/esm/modules/global/validations/payment_method.spec.js +125 -0
  144. package/dist/esm/modules/global/validations/payment_method.spec.js.map +1 -0
  145. package/dist/esm/utils/errors.d.ts +15 -0
  146. package/dist/esm/utils/errors.d.ts.map +1 -0
  147. package/dist/esm/utils/errors.js +16 -0
  148. package/dist/esm/utils/errors.js.map +1 -0
  149. package/dist/esm/utils/index.d.ts +1 -0
  150. package/dist/esm/utils/index.d.ts.map +1 -1
  151. package/dist/esm/utils/index.js +1 -0
  152. package/dist/esm/utils/index.js.map +1 -1
  153. package/package.json +1 -1
@@ -0,0 +1,204 @@
1
+ import { ValidationError } from 'utils/errors';
2
+ // ABA Routing Number validation patterns and functions
3
+ export const ABA_PATTERNS = {
4
+ // Standard ABA routing number format (9 digits)
5
+ STANDARD: /^\d{9}$/,
6
+ // Valid Federal Reserve routing symbol ranges (first 2 digits)
7
+ FEDERAL_RESERVE_RANGES: [
8
+ { min: '01', max: '12', region: 'Primary' },
9
+ { min: '21', max: '32', region: 'Primary' },
10
+ { min: '61', max: '72', region: 'Primary' },
11
+ { min: '80', max: '80', region: 'Special' },
12
+ ],
13
+ };
14
+ // Federal Reserve Districts mapping
15
+ export const FEDERAL_RESERVE_DISTRICTS = {
16
+ '01': 'Boston',
17
+ '02': 'New York',
18
+ '03': 'Philadelphia',
19
+ '04': 'Cleveland',
20
+ '05': 'Richmond',
21
+ '06': 'Atlanta',
22
+ '07': 'Chicago',
23
+ '08': 'St. Louis',
24
+ '09': 'Minneapolis',
25
+ '10': 'Kansas City',
26
+ '11': 'Dallas',
27
+ '12': 'San Francisco',
28
+ '21': 'Boston (Thrift)',
29
+ '22': 'New York (Thrift)',
30
+ '23': 'Philadelphia (Thrift)',
31
+ '24': 'Cleveland (Thrift)',
32
+ '25': 'Richmond (Thrift)',
33
+ '26': 'Atlanta (Thrift)',
34
+ '27': 'Chicago (Thrift)',
35
+ '28': 'St. Louis (Thrift)',
36
+ '29': 'Minneapolis (Thrift)',
37
+ '30': 'Kansas City (Thrift)',
38
+ '31': 'Dallas (Thrift)',
39
+ '32': 'San Francisco (Thrift)',
40
+ '61': 'Electronic Transactions',
41
+ '62': 'Electronic Transactions',
42
+ '63': 'Electronic Transactions',
43
+ '64': 'Electronic Transactions',
44
+ '65': 'Electronic Transactions',
45
+ '66': 'Electronic Transactions',
46
+ '67': 'Electronic Transactions',
47
+ '68': 'Electronic Transactions',
48
+ '69': 'Electronic Transactions',
49
+ '70': 'Electronic Transactions',
50
+ '71': 'Electronic Transactions',
51
+ '72': 'Electronic Transactions',
52
+ '80': "Traveler's Checks",
53
+ };
54
+ // Well-known ABA routing numbers for major banks
55
+ export const MAJOR_BANK_ROUTING_NUMBERS = {
56
+ // Chase Bank
57
+ '021000021': { name: 'JPMorgan Chase Bank', city: 'Tampa', state: 'FL' },
58
+ '044000037': { name: 'JPMorgan Chase Bank', city: 'Columbus', state: 'OH' },
59
+ '267084131': { name: 'JPMorgan Chase Bank', city: 'San Antonio', state: 'TX' },
60
+ // Bank of America
61
+ '011401533': { name: 'Bank of America', city: 'Charlotte', state: 'NC' },
62
+ '053000196': { name: 'Bank of America', city: 'Charlotte', state: 'NC' },
63
+ '026009593': { name: 'Bank of America', city: 'Des Moines', state: 'IA' },
64
+ // Wells Fargo
65
+ '121000248': { name: 'Wells Fargo Bank', city: 'Minneapolis', state: 'MN' },
66
+ '091000019': { name: 'Wells Fargo Bank', city: 'San Francisco', state: 'CA' },
67
+ '107002192': { name: 'Wells Fargo Bank', city: 'Charlotte', state: 'NC' },
68
+ // Citibank
69
+ '021000089': { name: 'Citibank', city: 'New York', state: 'NY' },
70
+ '113193532': { name: 'Citibank', city: 'Las Vegas', state: 'NV' },
71
+ '271972572': { name: 'Citibank', city: 'San Antonio', state: 'TX' },
72
+ // US Bank
73
+ '091000022': { name: 'US Bank', city: 'Minneapolis', state: 'MN' },
74
+ '123103716': { name: 'US Bank', city: 'Cincinnati', state: 'OH' },
75
+ '125000024': { name: 'US Bank', city: 'St. Louis', state: 'MO' },
76
+ // PNC Bank
77
+ '043000096': { name: 'PNC Bank', city: 'Pittsburgh', state: 'PA' },
78
+ '054001725': { name: 'PNC Bank', city: 'Wilmington', state: 'DE' },
79
+ '267084199': { name: 'PNC Bank', city: 'Pittsburgh', state: 'PA' },
80
+ };
81
+ // ABA checksum validation (weighted checksum algorithm)
82
+ function validateAbaChecksum(routingNumber) {
83
+ // ABA uses a weighted checksum algorithm
84
+ // Weights: 3, 7, 1, 3, 7, 1, 3, 7, 1
85
+ const weights = [3, 7, 1, 3, 7, 1, 3, 7, 1];
86
+ let sum = 0;
87
+ for (let i = 0; i < 9; i++) {
88
+ sum += parseInt(routingNumber[i]) * weights[i];
89
+ }
90
+ return sum % 10 === 0;
91
+ }
92
+ // Check if routing number is in valid Federal Reserve range
93
+ function isValidFederalReserveRange(routingNumber) {
94
+ const firstTwoDigits = routingNumber.substring(0, 2);
95
+ return ABA_PATTERNS.FEDERAL_RESERVE_RANGES.some((range) => {
96
+ return firstTwoDigits >= range.min && firstTwoDigits <= range.max;
97
+ });
98
+ }
99
+ export function formatAbaRoutingNumber(routingNumber, withDashes = false) {
100
+ const cleanRouting = String(routingNumber).replace(/[\s-]/g, '');
101
+ if (!withDashes)
102
+ return cleanRouting;
103
+ if (cleanRouting.length === 9) {
104
+ return `${cleanRouting.substring(0, 3)}-${cleanRouting.substring(3, 6)}-${cleanRouting.substring(6, 9)}`;
105
+ }
106
+ return cleanRouting;
107
+ }
108
+ export function getFederalReserveDistrict(routingNumber) {
109
+ const cleanRouting = String(routingNumber).replace(/[\s-]/g, '');
110
+ if (cleanRouting.length !== 9)
111
+ return null;
112
+ const federalReserveSymbol = cleanRouting.substring(0, 2);
113
+ return FEDERAL_RESERVE_DISTRICTS[federalReserveSymbol] || null;
114
+ }
115
+ export function getBankInfo(routingNumber) {
116
+ const cleanRouting = String(routingNumber).replace(/[\s-]/g, '');
117
+ return MAJOR_BANK_ROUTING_NUMBERS[cleanRouting] || null;
118
+ }
119
+ export function isElectronicTransactionRouting(routingNumber) {
120
+ const cleanRouting = String(routingNumber).replace(/[\s-]/g, '');
121
+ if (cleanRouting.length !== 9)
122
+ return false;
123
+ const firstTwo = cleanRouting.substring(0, 2);
124
+ return firstTwo >= '61' && firstTwo <= '72';
125
+ }
126
+ export function isThriftInstitution(routingNumber) {
127
+ const cleanRouting = String(routingNumber).replace(/[\s-]/g, '');
128
+ if (cleanRouting.length !== 9)
129
+ return false;
130
+ const firstTwo = cleanRouting.substring(0, 2);
131
+ return firstTwo >= '21' && firstTwo <= '32';
132
+ }
133
+ export function validateAccountNumberABA(accountNumber, path) {
134
+ const cleanAccount = String(accountNumber).replace(/[\s-]/g, '');
135
+ if (!cleanAccount) {
136
+ throw new ValidationError([
137
+ {
138
+ validation: path,
139
+ code: 'invalid_string',
140
+ message: 'Account number is required',
141
+ path: [path],
142
+ },
143
+ ]);
144
+ }
145
+ // Basic validation - account numbers are typically 6-17 digits
146
+ if (!/^\d{6,17}$/.test(cleanAccount)) {
147
+ throw new ValidationError([
148
+ {
149
+ validation: path,
150
+ code: 'invalid_string',
151
+ message: 'Invalid account number format. Must be 6-17 digits',
152
+ path: [path],
153
+ },
154
+ ]);
155
+ }
156
+ }
157
+ export function validateRoutingNumberABA(routingNumber, path) {
158
+ // Convert to string and clean
159
+ const cleanRouting = String(routingNumber).replace(/[\s-]/g, '');
160
+ if (!cleanRouting) {
161
+ throw new ValidationError([
162
+ {
163
+ validation: path,
164
+ code: 'invalid_string',
165
+ message: 'ABA routing number is required',
166
+ path: [path],
167
+ },
168
+ ]);
169
+ }
170
+ // Check basic format (9 digits)
171
+ if (!ABA_PATTERNS.STANDARD.test(cleanRouting)) {
172
+ throw new ValidationError([
173
+ {
174
+ validation: path,
175
+ code: 'invalid_string',
176
+ message: 'Invalid ABA routing number format. Must be exactly 9 digits',
177
+ path: [path],
178
+ },
179
+ ]);
180
+ }
181
+ // Check Federal Reserve range
182
+ if (!isValidFederalReserveRange(cleanRouting)) {
183
+ throw new ValidationError([
184
+ {
185
+ validation: path,
186
+ code: 'invalid_string',
187
+ message: 'Invalid Federal Reserve routing symbol range',
188
+ path: [path],
189
+ },
190
+ ]);
191
+ }
192
+ // Validate checksum
193
+ if (!validateAbaChecksum(cleanRouting)) {
194
+ throw new ValidationError([
195
+ {
196
+ validation: path,
197
+ code: 'invalid_string',
198
+ message: 'Invalid ABA routing number checksum',
199
+ path: [path],
200
+ },
201
+ ]);
202
+ }
203
+ }
204
+ //# sourceMappingURL=aba.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aba.js","sourceRoot":"","sources":["../../../../../../../src/modules/global/bank-account/validations/bank_account/aba.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Calculates the check digit of a CLABE based on the first 17 digits.
3
+ * @param clabe17 string with exactly 17 digits (only numbers)
4
+ * @returns check digit number (0..9)
5
+ * @throws Error if input does not have 17 numeric digits
6
+ */
7
+ export declare function computeClabeCheckDigit(clabe17: string): number;
8
+ /**
9
+ * Validates a Mexican CLABE.
10
+ * Accepts string (can contain spaces or dashes, it is normalized).
11
+ * @param clabe string with the CLABE to validate
12
+ * @returns true if valid, false otherwise
13
+ */
14
+ export declare function validateAccountNumberCLABE(clabe: string, path: string): void | never;
15
+ //# sourceMappingURL=clabe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clabe.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/global/bank-account/validations/bank_account/clabe.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB9D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAkCpF"}
@@ -0,0 +1,62 @@
1
+ import { ValidationError } from 'utils/errors';
2
+ /**
3
+ * Calculates the check digit of a CLABE based on the first 17 digits.
4
+ * @param clabe17 string with exactly 17 digits (only numbers)
5
+ * @returns check digit number (0..9)
6
+ * @throws Error if input does not have 17 numeric digits
7
+ */
8
+ export function computeClabeCheckDigit(clabe17) {
9
+ if (!/^\d{17}$/.test(clabe17)) {
10
+ throw new Error('the value must be a string with exactly 17 digits');
11
+ }
12
+ const weights = [3, 7, 1]; // weights cycle
13
+ let sum = 0;
14
+ for (let i = 0; i < 17; i++) {
15
+ const digit = Number(clabe17[i]);
16
+ const weight = weights[i % 3];
17
+ const product = digit * weight;
18
+ sum += product % 10; // add the remainder of the product by 10
19
+ }
20
+ const mod = sum % 10;
21
+ const checkDigit = (10 - mod) % 10; // if mod == 0 => 0
22
+ return checkDigit;
23
+ }
24
+ /**
25
+ * Validates a Mexican CLABE.
26
+ * Accepts string (can contain spaces or dashes, it is normalized).
27
+ * @param clabe string with the CLABE to validate
28
+ * @returns true if valid, false otherwise
29
+ */
30
+ export function validateAccountNumberCLABE(clabe, path) {
31
+ const normalized = clabe.replace(/[\s-]/g, '');
32
+ if (!/^\d{18}$/.test(normalized)) {
33
+ throw new ValidationError([
34
+ {
35
+ validation: path,
36
+ code: 'invalid_string',
37
+ message: 'CLABE must be a string with exactly 18 digits',
38
+ path: [path],
39
+ },
40
+ ]);
41
+ }
42
+ const body = normalized.slice(0, 17);
43
+ const givenCheckDigit = Number(normalized[17]);
44
+ let computed;
45
+ try {
46
+ computed = computeClabeCheckDigit(body);
47
+ }
48
+ catch {
49
+ computed = -1;
50
+ }
51
+ if (computed !== givenCheckDigit) {
52
+ throw new ValidationError([
53
+ {
54
+ validation: path,
55
+ code: 'invalid_string',
56
+ message: 'Invalid CLABE check digit',
57
+ path: [path],
58
+ },
59
+ ]);
60
+ }
61
+ }
62
+ //# sourceMappingURL=clabe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clabe.js","sourceRoot":"","sources":["../../../../../../../src/modules/global/bank-account/validations/bank_account/clabe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,gBAAgB;IAC1C,IAAI,GAAG,GAAG,CAAC,CAAA;IAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7B,MAAM,OAAO,GAAG,KAAK,GAAG,MAAO,CAAA;QAC/B,GAAG,IAAI,OAAO,GAAG,EAAE,CAAA,CAAC,yCAAyC;IAC/D,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,CAAA;IACpB,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAA,CAAC,mBAAmB;IAEtD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,IAAY;IACpE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAE9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,eAAe,CAAC;YACxB;gBACE,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,+CAA+C;gBACxD,IAAI,EAAE,CAAC,IAAI,CAAC;aACb;SACF,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAE9C,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,CAAC,CAAC,CAAA;IACf,CAAC;IAED,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,eAAe,CAAC;YACxB;gBACE,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE,CAAC,IAAI,CAAC;aACb;SACF,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const IBAN_REGEX_PATTERNS: Record<string, RegExp>;
2
+ export declare const IBAN_COUNTRY_CODES: string[];
3
+ export declare function getIBANCountryCode(iban: string): string | null;
4
+ export declare function validateAccountNumberIBAN(iban: string, path: string): void | never;
5
+ //# sourceMappingURL=iban.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iban.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/global/bank-account/validations/bank_account/iban.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiOtD,CAAA;AAED,eAAO,MAAM,kBAAkB,UAAmC,CAAA;AAElE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAGD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CA4ClF"}
@@ -0,0 +1,201 @@
1
+ import { ValidationError } from 'utils/errors';
2
+ // IBAN validation regex patterns by country
3
+ export const IBAN_REGEX_PATTERNS = {
4
+ // Albania - 28 characters
5
+ AL: /^AL\d{2}\d{8}\d{16}$/,
6
+ // Andorra - 24 characters
7
+ AD: /^AD\d{2}\d{4}\d{4}\d{12}$/,
8
+ // Azerbaijan - 28 characters
9
+ AZ: /^AZ\d{2}[A-Z]{4}\d{20}$/,
10
+ // Bahrain - 22 characters
11
+ BH: /^BH\d{2}[A-Z]{4}\d{14}$/,
12
+ // Belgium - 16 characters
13
+ BE: /^BE\d{2}\d{3}\d{7}\d{2}$/,
14
+ // Bosnia and Herzegovina - 20 characters
15
+ BA: /^BA\d{2}\d{3}\d{3}\d{8}\d{2}$/,
16
+ // Brazil - 29 characters
17
+ BR: /^BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[A-Z0-9]{1}$/,
18
+ // British Virgin Islands - 24 characters
19
+ VG: /^VG\d{2}[A-Z]{4}\d{16}$/,
20
+ // Bulgaria - 22 characters
21
+ BG: /^BG\d{2}[A-Z]{4}\d{4}\d{2}\d{8}$/,
22
+ // Costa Rica - 22 characters
23
+ CR: /^CR\d{2}\d{4}\d{14}$/,
24
+ // Denmark - 18 characters
25
+ DK: /^DK\d{2}\d{4}\d{9}\d{1}$/,
26
+ // Germany - 22 characters
27
+ DE: /^DE\d{2}\d{8}\d{10}$/,
28
+ // Dominican Republic - 28 characters
29
+ DO: /^DO\d{2}[A-Z]{4}\d{20}$/,
30
+ // El Salvador - 28 characters
31
+ SV: /^SV\d{2}[A-Z]{4}\d{20}$/,
32
+ // Estonia - 20 characters
33
+ EE: /^EE\d{2}\d{2}\d{2}\d{11}\d{1}$/,
34
+ // Faroe Islands - 18 characters
35
+ FO: /^FO\d{2}\d{4}\d{9}\d{1}$/,
36
+ // Finland - 18 characters
37
+ FI: /^FI\d{2}\d{6}\d{7}\d{1}$/,
38
+ // France - 27 characters
39
+ FR: /^FR\d{2}\d{5}\d{5}\d{11}\d{2}$/,
40
+ // Georgia - 22 characters
41
+ GE: /^GE\d{2}[A-Z]{2}\d{16}$/,
42
+ // Gibraltar - 23 characters
43
+ GI: /^GI\d{2}[A-Z]{4}\d{15}$/,
44
+ // Greece - 27 characters
45
+ GR: /^GR\d{2}\d{3}\d{4}\d{16}$/,
46
+ // Greenland - 18 characters
47
+ GL: /^GL\d{2}\d{4}\d{9}\d{1}$/,
48
+ // Great Britain (UK) - 22 characters
49
+ GB: /^GB\d{2}[A-Z]{4}\d{6}\d{8}$/,
50
+ // Guatemala - 28 characters
51
+ GT: /^GT\d{2}[A-Z]{4}\d{20}$/,
52
+ // Iraq - 23 characters
53
+ IQ: /^IQ\d{2}[A-Z]{4}\d{3}\d{12}$/,
54
+ // Ireland - 22 characters
55
+ IE: /^IE\d{2}[A-Z]{4}\d{6}\d{8}$/,
56
+ // Iceland - 26 characters
57
+ IS: /^IS\d{2}\d{4}\d{2}\d{6}\d{10}$/,
58
+ // Israel - 23 characters
59
+ IL: /^IL\d{2}\d{3}\d{3}\d{13}$/,
60
+ // Italy - 27 characters
61
+ IT: /^IT\d{2}[A-Z]{1}\d{5}\d{5}\d{12}$/,
62
+ // Jordan - 30 characters
63
+ JO: /^JO\d{2}[A-Z]{4}\d{4}\d{18}$/,
64
+ // Kazakhstan - 20 characters
65
+ KZ: /^KZ\d{2}\d{3}[A-Z]{13}$/,
66
+ // Qatar - 29 characters
67
+ QA: /^QA\d{2}[A-Z]{4}\d{21}$/,
68
+ // Kosovo - 20 characters
69
+ XK: /^XK\d{2}\d{4}\d{10}\d{2}$/,
70
+ // Croatia - 21 characters
71
+ HR: /^HR\d{2}\d{7}\d{10}$/,
72
+ // Kuwait - 30 characters
73
+ KW: /^KW\d{2}[A-Z]{4}\d{22}$/,
74
+ // Latvia - 21 characters
75
+ LV: /^LV\d{2}[A-Z]{4}\d{13}$/,
76
+ // Lebanon - 28 characters
77
+ LB: /^LB\d{2}\d{4}\d{20}$/,
78
+ // Liechtenstein - 21 characters
79
+ LI: /^LI\d{2}\d{5}\d{12}$/,
80
+ // Lithuania - 20 characters
81
+ LT: /^LT\d{2}\d{5}\d{11}$/,
82
+ // Luxembourg - 20 characters
83
+ LU: /^LU\d{2}\d{3}\d{13}$/,
84
+ // Malta - 31 characters
85
+ MT: /^MT\d{2}[A-Z]{4}\d{5}\d{18}$/,
86
+ // Mauritania - 27 characters
87
+ MR: /^MR\d{2}\d{5}\d{5}\d{11}\d{2}$/,
88
+ // Mauritius - 30 characters
89
+ MU: /^MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}$/,
90
+ // North Macedonia - 19 characters
91
+ MK: /^MK\d{2}\d{3}\d{10}\d{2}$/,
92
+ // Moldova - 24 characters
93
+ MD: /^MD\d{2}[A-Z]{2}\d{18}$/,
94
+ // Monaco - 27 characters
95
+ MC: /^MC\d{2}\d{5}\d{5}\d{11}\d{2}$/,
96
+ // Montenegro - 22 characters
97
+ ME: /^ME\d{2}\d{3}\d{13}\d{2}$/,
98
+ // Netherlands - 18 characters
99
+ NL: /^NL\d{2}[A-Z]{4}\d{10}$/,
100
+ // Norway - 15 characters
101
+ NO: /^NO\d{2}\d{4}\d{6}\d{1}$/,
102
+ // Austria - 20 characters
103
+ AT: /^AT\d{2}\d{5}\d{11}$/,
104
+ // Pakistan - 24 characters
105
+ PK: /^PK\d{2}[A-Z]{4}\d{16}$/,
106
+ // Palestine - 29 characters
107
+ PS: /^PS\d{2}[A-Z]{4}\d{21}$/,
108
+ // Poland - 28 characters
109
+ PL: /^PL\d{2}\d{8}\d{16}$/,
110
+ // Portugal - 25 characters
111
+ PT: /^PT\d{2}\d{4}\d{4}\d{11}\d{2}$/,
112
+ // Romania - 24 characters
113
+ RO: /^RO\d{2}[A-Z]{4}\d{16}$/,
114
+ // Saint Lucia - 32 characters
115
+ LC: /^LC\d{2}[A-Z]{4}\d{24}$/,
116
+ // San Marino - 27 characters
117
+ SM: /^SM\d{2}[A-Z]{1}\d{5}\d{5}\d{12}$/,
118
+ // Sao Tome and Principe - 25 characters
119
+ ST: /^ST\d{2}\d{4}\d{4}\d{11}\d{2}$/,
120
+ // Saudi Arabia - 24 characters
121
+ SA: /^SA\d{2}\d{2}\d{18}$/,
122
+ // Sweden - 24 characters
123
+ SE: /^SE\d{2}\d{3}\d{16}\d{1}$/,
124
+ // Switzerland - 21 characters
125
+ CH: /^CH\d{2}\d{5}\d{12}$/,
126
+ // Serbia - 22 characters
127
+ RS: /^RS\d{2}\d{3}\d{13}\d{2}$/,
128
+ // Seychelles - 31 characters
129
+ SC: /^SC\d{2}[A-Z]{4}\d{2}\d{2}\d{16}[A-Z]{3}$/,
130
+ // Slovak Republic - 24 characters
131
+ SK: /^SK\d{2}\d{4}\d{6}\d{10}$/,
132
+ // Slovenia - 19 characters
133
+ SI: /^SI\d{2}\d{5}\d{8}\d{2}$/,
134
+ // Spain - 24 characters
135
+ ES: /^ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}$/,
136
+ // Timor-Leste - 23 characters
137
+ TL: /^TL\d{2}\d{3}\d{14}\d{2}$/,
138
+ // Turkey - 26 characters
139
+ TR: /^TR\d{2}\d{5}[A-Z0-9]{1}\d{16}$/,
140
+ // Czech Republic - 24 characters
141
+ CZ: /^CZ\d{2}\d{4}\d{6}\d{10}$/,
142
+ // Tunisia - 24 characters
143
+ TN: /^TN\d{2}\d{2}\d{3}\d{13}\d{2}$/,
144
+ // Ukraine - 29 characters
145
+ UA: /^UA\d{2}\d{6}\d{19}$/,
146
+ // Hungary - 28 characters
147
+ HU: /^HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}$/,
148
+ // United Arab Emirates - 23 characters
149
+ AE: /^AE\d{2}\d{3}\d{16}$/,
150
+ // Belarus - 28 characters
151
+ BY: /^BY\d{2}[A-Z0-9]{4}\d{4}\d{16}$/,
152
+ // Cyprus - 28 characters
153
+ CY: /^CY\d{2}\d{3}\d{5}\d{16}$/,
154
+ };
155
+ export const IBAN_COUNTRY_CODES = Object.keys(IBAN_REGEX_PATTERNS);
156
+ export function getIBANCountryCode(iban) {
157
+ const cleanIBAN = iban.replace(/\s/g, '').toUpperCase();
158
+ return cleanIBAN.substring(0, 2);
159
+ }
160
+ // Validation function
161
+ export function validateAccountNumberIBAN(iban, path) {
162
+ if (!iban || typeof iban !== 'string') {
163
+ throw new ValidationError([
164
+ {
165
+ validation: path,
166
+ code: 'invalid_string',
167
+ message: 'IBAN must be a string',
168
+ path: [path],
169
+ },
170
+ ]);
171
+ }
172
+ // Remove spaces and convert to uppercase
173
+ const cleanIBAN = iban.replace(/\s/g, '').toUpperCase();
174
+ // Extract country code
175
+ const countryCode = cleanIBAN.substring(0, 2);
176
+ // Check if country is supported
177
+ if (!IBAN_REGEX_PATTERNS[countryCode]) {
178
+ throw new ValidationError([
179
+ {
180
+ validation: path,
181
+ code: 'invalid_string',
182
+ message: `Unsupported country code: ${countryCode}`,
183
+ path: [path],
184
+ },
185
+ ]);
186
+ }
187
+ // Validate format
188
+ const pattern = IBAN_REGEX_PATTERNS[countryCode];
189
+ const isValid = pattern.test(cleanIBAN);
190
+ if (!isValid) {
191
+ throw new ValidationError([
192
+ {
193
+ validation: path,
194
+ code: 'invalid_string',
195
+ message: `Invalid IBAN format for ${countryCode}`,
196
+ path: [path],
197
+ },
198
+ ]);
199
+ }
200
+ }
201
+ //# sourceMappingURL=iban.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iban.js","sourceRoot":"","sources":["../../../../../../../src/modules/global/bank-account/validations/bank_account/iban.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare const SWIFT_BIC_PATTERNS: {
2
+ STANDARD: RegExp;
3
+ FORMAT_8: RegExp;
4
+ FORMAT_11: RegExp;
5
+ BANK_CODE: RegExp;
6
+ COUNTRY_CODE: RegExp;
7
+ LOCATION_CODE: RegExp;
8
+ BRANCH_CODE: RegExp;
9
+ };
10
+ export declare const VALID_SWIFT_COUNTRIES: Set<string>;
11
+ export declare function isTestBic(swiftBic: string): boolean;
12
+ export declare function formatSwiftBic(swiftBic: string, withSpaces?: boolean): string;
13
+ export declare function getSwiftCountry(swiftBic: string): string | null;
14
+ export declare function getBankCode(swiftBic: string): string | null;
15
+ export declare function validateCodeSwiftBic(swiftBic: string, path: string): void | never;
16
+ //# sourceMappingURL=swift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/global/bank-account/validations/bank_account/swift.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB;;;;;;;;CAe9B,CAAA;AAGD,eAAO,MAAM,qBAAqB,aA2PhC,CAAA;AAEF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,MAAM,CAYpF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,CAqGjF"}