@ashray.mehta/statement-converter 1.7.0 → 1.7.2

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.
@@ -3,7 +3,9 @@ import { Transaction } from '../models/Transaction';
3
3
  import { TransactionAdapter } from './TransactionAdapter';
4
4
  export declare class ICICICreditCardAdapter extends TransactionAdapter {
5
5
  convert(xlsxData: ArrayBuffer): Promise<Transaction[]>;
6
- private findStartingRow;
6
+ private parseMoment;
7
+ private findFirstRow;
8
+ private findLastRow;
7
9
  private determineDebitOrCredit;
8
10
  supports(bank: Bank): boolean;
9
11
  }
@@ -64,21 +64,15 @@ class ICICICreditCardAdapter extends TransactionAdapter_1.TransactionAdapter {
64
64
  const addressForReferenceNumber = (_e = XLSXUtil_1.XLSXUtil.findTextIgnoringWhitespace(sheet, "Reference Number")) !== null && _e !== void 0 ? _e : XLSXUtil_1.XLSXUtil.findTextIgnoringWhitespace(sheet, 'Sr.No.');
65
65
  const addressForCreditOrDebit = XLSXUtil_1.XLSXUtil.findTextIgnoringWhitespace(sheet, "BillingAmountSign");
66
66
  const range = XLSX.utils.decode_range(sheet['!ref']);
67
- const rangeEnd = range.e;
68
- const lastRow = rangeEnd.r;
69
- const startingRow = this.findStartingRow(sheet, range, addressForTransactionDate);
67
+ const lastRow = this.findLastRow(sheet, range, addressForTransactionDate);
68
+ const startingRow = this.findFirstRow(sheet, range, addressForTransactionDate);
70
69
  const rows = [...Array(1 + lastRow - startingRow).keys()].map(v => startingRow + v);
71
70
  return rows
72
71
  .filter(row => {
73
72
  // ICICI sometimes has account numbers in the Date field which serve as a separator between inflows and outflows.
74
73
  // This filters those rows out.
75
- const dateText = XLSXUtil_1.XLSXUtil.getCellValue(sheet, row, addressForTransactionDate.c);
76
- if ((0, lodash_es_1.size)(dateText) === 16) {
77
- return false;
78
- }
79
- else {
80
- return true;
81
- }
74
+ const parsedDate = this.parseMoment(XLSXUtil_1.XLSXUtil.getCellValue(sheet, row, addressForTransactionDate.c));
75
+ return parsedDate.isValid();
82
76
  })
83
77
  .map(row => {
84
78
  let isOutflow, amount;
@@ -93,7 +87,7 @@ class ICICICreditCardAdapter extends TransactionAdapter_1.TransactionAdapter {
93
87
  isOutflow = result.isOutflow;
94
88
  amount = result.amount;
95
89
  }
96
- const date = (0, moment_1.default)(XLSXUtil_1.XLSXUtil.getCellValue(sheet, row, addressForTransactionDate.c), 'DD/MM/YYYY').toDate();
90
+ const date = this.parseMoment(XLSXUtil_1.XLSXUtil.getCellValue(sheet, row, addressForTransactionDate.c)).toDate();
97
91
  return {
98
92
  Payee: XLSXUtil_1.XLSXUtil.getCellValue(sheet, row, addressForDetails.c),
99
93
  Outflow: isOutflow ? amount : 0,
@@ -105,7 +99,10 @@ class ICICICreditCardAdapter extends TransactionAdapter_1.TransactionAdapter {
105
99
  });
106
100
  });
107
101
  }
108
- findStartingRow(sheet, range, addressForTransactionDate) {
102
+ parseMoment(text) {
103
+ return (0, moment_1.default)(text, ['DD/MM/YYYY', 'DD-MMM-YY']);
104
+ }
105
+ findFirstRow(sheet, range, addressForTransactionDate) {
109
106
  var current = addressForTransactionDate.r; // Right after this is where the data should start, but sometimes there are blank rows after the header.
110
107
  for (var current = addressForTransactionDate.r + 1; current <= range.e.r; current++) {
111
108
  if (!(0, lodash_es_1.isEmpty)(XLSXUtil_1.XLSXUtil.getCellValue(sheet, current, addressForTransactionDate.c))) {
@@ -114,6 +111,15 @@ class ICICICreditCardAdapter extends TransactionAdapter_1.TransactionAdapter {
114
111
  }
115
112
  return addressForTransactionDate.r;
116
113
  }
114
+ findLastRow(sheet, range, addressForTransactionDate) {
115
+ for (var current = 0; current <= range.e.r; current++) {
116
+ const cellValue = XLSXUtil_1.XLSXUtil.getCellValue(sheet, current, addressForTransactionDate.c);
117
+ if (!!cellValue && cellValue.toString().includes("MESSAGE Details")) {
118
+ return current - 1;
119
+ }
120
+ }
121
+ return range.e.r;
122
+ }
117
123
  determineDebitOrCredit(sheet, row, column) {
118
124
  const cellValue = XLSXUtil_1.XLSXUtil.getCellValue(sheet, row, column);
119
125
  // TODO - Replace parsing with Globalize
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ashray.mehta/statement-converter",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "Library to convert statements from frequently used banks to QIF.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -34,12 +34,12 @@
34
34
  "@types/lodash-es": "4.17.12",
35
35
  "@types/mocha": "10.0.10",
36
36
  "@types/moment": "2.13.0",
37
- "@types/node": "25.5.2",
37
+ "@types/node": "25.6.0",
38
38
  "@types/yargs": "17.0.35",
39
39
  "chai": "6.2.2",
40
40
  "mocha": "11.7.5",
41
41
  "ts-node": "10.9.2",
42
42
  "tsx": "4.21.0",
43
- "typescript": "6.0.2"
43
+ "typescript": "6.0.3"
44
44
  }
45
45
  }