|
6 | 6 | */
|
7 | 7 | function processBankStatement(rawData) {
|
8 | 8 | // Use the new extraction function for array-of-arrays input
|
9 |
| - const bank_details = extractBankDetailsFromRows(rawData); |
| 9 | + const bank_details = extractBankDetailsFromRows(rawData) |
10 | 10 | const transactions = []
|
11 | 11 | let headerRowIndex = -1
|
12 | 12 | const maxBankDetailsRows = Math.min(20, rawData.length)
|
@@ -37,7 +37,7 @@ function processBankStatement(rawData) {
|
37 | 37 | ]
|
38 | 38 |
|
39 | 39 | for (const dateFormat of dateFormats) {
|
40 |
| - const match = dateString.match(dateFormat.format) |
| 40 | + const match = dateString?.match(dateFormat.format) |
41 | 41 | if (match) {
|
42 | 42 | let year = match[dateFormat.order[2]]
|
43 | 43 | if (year.length === 2) {
|
@@ -188,13 +188,14 @@ function processBankStatement(rawData) {
|
188 | 188 | const row = rawData[i]
|
189 | 189 | if (!row) continue
|
190 | 190 |
|
191 |
| - const dateString = row[keyMap.dateKey] |
| 191 | + // Check if date is null, then set row index to 1 for setting date |
| 192 | + const dateString = row[keyMap.dateKey] ? row[keyMap.dateKey] : row['1'] |
192 | 193 | const desc = row[keyMap.narrationKey] ? String(row[keyMap.narrationKey]).trim() : null
|
193 | 194 | const debitString = row[keyMap.debitKey]
|
194 | 195 | const creditString = row[keyMap.creditKey]
|
195 | 196 | const balanceString = row[keyMap.balanceKey]
|
196 | 197 |
|
197 |
| - const date = parseDate(dateString) |
| 198 | + const date = dateString |
198 | 199 | const debit = cleanAmount(debitString)
|
199 | 200 | const credit = cleanAmount(creditString)
|
200 | 201 | const balance = cleanAmount(balanceString)
|
@@ -249,68 +250,68 @@ function extractBankDetailsFromRows(rows) {
|
249 | 250 | account_holder_name: null,
|
250 | 251 | branch_name: null,
|
251 | 252 | branch_code: null,
|
252 |
| - }; |
| 253 | + } |
253 | 254 |
|
254 | 255 | for (let i = 0; i < rows.length; i++) {
|
255 |
| - const row = rows[i]; |
| 256 | + const row = rows[i] |
256 | 257 | for (let j = 0; j < row.length; j++) {
|
257 |
| - const cell = row[j]; |
258 |
| - if (!cell) continue; |
259 |
| - const value = String(cell).trim(); |
| 258 | + const cell = row[j] |
| 259 | + if (!cell) continue |
| 260 | + const value = String(cell).trim() |
260 | 261 |
|
261 | 262 | if (value.toLowerCase().includes('account holder name')) {
|
262 |
| - const afterColon = value.split(':')[1]; |
| 263 | + const afterColon = value.split(':')[1] |
263 | 264 | if (afterColon && afterColon.trim()) {
|
264 |
| - bank_details.account_holder_name = afterColon.trim(); |
| 265 | + bank_details.account_holder_name = afterColon.trim() |
265 | 266 | } else {
|
266 | 267 | for (let k = j + 1; k < row.length; k++) {
|
267 | 268 | if (row[k]) {
|
268 |
| - bank_details.account_holder_name = String(row[k]).trim(); |
269 |
| - break; |
| 269 | + bank_details.account_holder_name = String(row[k]).trim() |
| 270 | + break |
270 | 271 | }
|
271 | 272 | }
|
272 | 273 | }
|
273 | 274 | } else if (value.toLowerCase().includes('branch name')) {
|
274 |
| - const afterColon = value.split(':')[1]; |
| 275 | + const afterColon = value.split(':')[1] |
275 | 276 | if (afterColon && afterColon.trim()) {
|
276 |
| - bank_details.branch_name = afterColon.trim(); |
| 277 | + bank_details.branch_name = afterColon.trim() |
277 | 278 | } else {
|
278 | 279 | for (let k = j + 1; k < row.length; k++) {
|
279 | 280 | if (row[k]) {
|
280 |
| - bank_details.branch_name = String(row[k]).trim(); |
281 |
| - break; |
| 281 | + bank_details.branch_name = String(row[k]).trim() |
| 282 | + break |
282 | 283 | }
|
283 | 284 | }
|
284 | 285 | }
|
285 | 286 | } else if (value.toLowerCase().includes('ifsc')) {
|
286 |
| - const afterColon = value.split(':')[1]; |
| 287 | + const afterColon = value.split(':')[1] |
287 | 288 | if (afterColon && afterColon.trim()) {
|
288 |
| - bank_details.ifsc = afterColon.trim(); |
| 289 | + bank_details.ifsc = afterColon.trim() |
289 | 290 | } else {
|
290 | 291 | for (let k = j + 1; k < row.length; k++) {
|
291 | 292 | if (row[k]) {
|
292 |
| - bank_details.ifsc = String(row[k]).trim(); |
293 |
| - break; |
| 293 | + bank_details.ifsc = String(row[k]).trim() |
| 294 | + break |
294 | 295 | }
|
295 | 296 | }
|
296 | 297 | }
|
297 | 298 | } else if (value.toLowerCase().includes('address')) {
|
298 |
| - const afterColon = value.split(':')[1]; |
| 299 | + const afterColon = value.split(':')[1] |
299 | 300 | if (afterColon && afterColon.trim()) {
|
300 |
| - bank_details.address = afterColon.trim(); |
| 301 | + bank_details.address = afterColon.trim() |
301 | 302 | } else {
|
302 | 303 | for (let k = j + 1; k < row.length; k++) {
|
303 | 304 | if (row[k]) {
|
304 |
| - bank_details.address = String(row[k]).trim(); |
305 |
| - break; |
| 305 | + bank_details.address = String(row[k]).trim() |
| 306 | + break |
306 | 307 | }
|
307 | 308 | }
|
308 | 309 | }
|
309 | 310 | }
|
310 | 311 | // Add more fields as needed...
|
311 | 312 | }
|
312 | 313 | }
|
313 |
| - return bank_details; |
| 314 | + return bank_details |
314 | 315 | }
|
315 | 316 |
|
316 | 317 | module.exports = processBankStatement
|
0 commit comments