@tasenor/common-plugins 1.14.1 → 1.14.3
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.
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-ci.log +2 -2
- package/.turbo/turbo-nightly.log +3 -3
- package/dist/AlisaImport/backend/AlisaHandler.d.ts +12 -0
- package/dist/AlisaImport/backend/AlisaHandler.js +58 -0
- package/dist/AlisaImport/backend/AlisaHandler.js.map +1 -0
- package/dist/AlisaImport/backend/index.d.ts +5 -0
- package/dist/AlisaImport/backend/index.js +18 -0
- package/dist/AlisaImport/backend/index.js.map +1 -0
- package/dist/DocumentCleaner/ui/index.d.ts +1 -0
- package/dist/GitBackup/ui/index.d.ts +1 -0
- package/dist/TagEditor/ui/index.d.ts +1 -0
- package/dist/VAT/ui/index.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/AlisaImport/backend/AlisaHandler.ts +67 -0
- package/src/AlisaImport/backend/index.ts +24 -0
- package/src/AlisaImport/backend/rules.json +4 -0
- package/src/index.ts +1 -0
package/.turbo/turbo-build.log
CHANGED
package/.turbo/turbo-ci.log
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @tasenor/common-plugins@1.14.
|
|
2
|
+
> @tasenor/common-plugins@1.14.2 ci /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
3
3
|
> pnpm run lint
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @tasenor/common-plugins@1.14.
|
|
6
|
+
> @tasenor/common-plugins@1.14.2 lint /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
7
7
|
> eslint 'src/**/*.{ts,tsx}' 'data/**/*.mjs'
|
|
8
8
|
|
package/.turbo/turbo-nightly.log
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
|
|
2
|
-
> @tasenor/common-plugins@1.
|
|
2
|
+
> @tasenor/common-plugins@1.14.2 nightly /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
3
3
|
> pnpm run ci
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @tasenor/common-plugins@1.
|
|
6
|
+
> @tasenor/common-plugins@1.14.2 ci /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
7
7
|
> pnpm run lint
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
> @tasenor/common-plugins@1.
|
|
10
|
+
> @tasenor/common-plugins@1.14.2 lint /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
11
11
|
> eslint 'src/**/*.{ts,tsx}' 'data/**/*.mjs'
|
|
12
12
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DirectoryPath, NO_SEGMENT, SegmentId, TextFileLine } from '@tasenor/common';
|
|
2
|
+
import { ProcessFile, TransactionImportHandler } from '@tasenor/common-node';
|
|
3
|
+
/**
|
|
4
|
+
* Import implementation for Alisa CSV format.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AlisaHandler extends TransactionImportHandler {
|
|
7
|
+
constructor();
|
|
8
|
+
get path(): DirectoryPath;
|
|
9
|
+
canHandle(file: ProcessFile): boolean;
|
|
10
|
+
segmentId(line: TextFileLine): SegmentId | typeof NO_SEGMENT;
|
|
11
|
+
time(line: TextFileLine): Date | undefined;
|
|
12
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { NO_SEGMENT } from '@tasenor/common';
|
|
2
|
+
import { TransactionImportHandler } from '@tasenor/common-node';
|
|
3
|
+
import dayjs from 'dayjs';
|
|
4
|
+
import { sprintf } from 'sprintf-js';
|
|
5
|
+
/**
|
|
6
|
+
* Import implementation for Alisa CSV format.
|
|
7
|
+
*/
|
|
8
|
+
export class AlisaHandler extends TransactionImportHandler {
|
|
9
|
+
constructor() {
|
|
10
|
+
super('AlisaImport');
|
|
11
|
+
this.importOptions = {
|
|
12
|
+
parser: 'csv',
|
|
13
|
+
numericFields: ['Amount', 'AmountPaid'],
|
|
14
|
+
requiredFields: ['Type', 'Account'],
|
|
15
|
+
textField: 'Message',
|
|
16
|
+
totalAmountField: 'Amount',
|
|
17
|
+
fieldRemapping: {
|
|
18
|
+
CounterpartyAccountNumber: 'Account',
|
|
19
|
+
CounterpartyName: 'Name',
|
|
20
|
+
CounterpartySpecification: 'Specification',
|
|
21
|
+
},
|
|
22
|
+
csv: {
|
|
23
|
+
cutFromBeginning: 8,
|
|
24
|
+
useFirstLineHeadings: true,
|
|
25
|
+
columnSeparator: ';',
|
|
26
|
+
trimLines: true,
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
get path() {
|
|
31
|
+
return __dirname;
|
|
32
|
+
}
|
|
33
|
+
canHandle(file) {
|
|
34
|
+
const data = file.decode();
|
|
35
|
+
const lines = data.substring(0, 150).split('\n');
|
|
36
|
+
const lookup = ['sep=', 'AccountNumber', 'AccountName', 'AccountType', 'CurrencyCode', 'StartDate', 'EndDate', ''];
|
|
37
|
+
for (let i = 0; i < 8; i++) {
|
|
38
|
+
if (lines[i].split(';')[0].trim() !== lookup[i]) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this.importOptions.csv = this.importOptions.csv || {};
|
|
43
|
+
this.importOptions.csv.columnSeparator = lines[0].trim().split('=')[1];
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
segmentId(line) {
|
|
47
|
+
return line && line.columns ? line.columns.TransactionNumber : NO_SEGMENT;
|
|
48
|
+
}
|
|
49
|
+
time(line) {
|
|
50
|
+
const time = line.columns.BookingDate;
|
|
51
|
+
const re = time && /^(\d\d)\.(\d\d)\.(\d\d\d\d)$/.exec(time);
|
|
52
|
+
if (re && re !== null) {
|
|
53
|
+
return dayjs(sprintf('%04d-%02d-%02d 12:00:00Z', re[3], re[2], re[1])).toDate();
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Alisa import cannot figure out date from ${JSON.stringify(time)}.`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=AlisaHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlisaHandler.js","sourceRoot":"","sources":["../../../src/AlisaImport/backend/AlisaHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAA2B,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAe,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,wBAAwB;IAExD;QACE,KAAK,CAAC,aAAa,CAAC,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG;YACnB,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;YACvC,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;YACnC,SAAS,EAAE,SAAS;YACpB,gBAAgB,EAAE,QAAQ;YAC1B,cAAc,EAAE;gBACd,yBAAyB,EAAE,SAAS;gBACpC,gBAAgB,EAAE,MAAM;gBACxB,yBAAyB,EAAE,eAAe;aAC3C;YACD,GAAG,EAAE;gBACH,gBAAgB,EAAE,CAAC;gBACnB,oBAAoB,EAAE,IAAI;gBAC1B,eAAe,EAAE,GAAG;gBACpB,SAAS,EAAE,IAAI;aAChB;SACF,CAAA;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,SAA0B,CAAA;IACnC,CAAC;IAED,SAAS,CAAC,IAAiB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAA;QAElH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC/C,OAAO,KAAK,CAAA;aACb;SACF;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,EAAE,CAAA;QACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,CAAC,IAAkB;QAC1B,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAA;IAC3E,CAAC;IAED,IAAI,CAAC,IAAkB;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;QACrC,MAAM,EAAE,GAAG,IAAI,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5D,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;YACrB,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;SAChF;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtF,CAAC;CAEF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ImportPlugin } from '@tasenor/common-node';
|
|
2
|
+
import { AlisaHandler } from './AlisaHandler';
|
|
3
|
+
class AlisaImportPlugin extends ImportPlugin {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(new AlisaHandler());
|
|
6
|
+
this.code = 'AlisaImport';
|
|
7
|
+
this.title = 'Import for Alisa';
|
|
8
|
+
this.version = '1.0.0';
|
|
9
|
+
this.icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M5 6.99h3V14h2V6.99h3L9 3zM14 10v7.01h-3L15 21l4-3.99h-3V10z"/></svg>';
|
|
10
|
+
this.releaseDate = '2025-02-09';
|
|
11
|
+
this.use = 'backend';
|
|
12
|
+
this.type = 'import';
|
|
13
|
+
this.description = 'Import plugin for importing transaction data in CSV format provided by Alisa Bank.';
|
|
14
|
+
this.languages = this.getLanguages();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export default AlisaImportPlugin;
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/AlisaImport/backend/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,iBAAkB,SAAQ,YAAY;IAE1C;QACE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC,CAAA;QAEzB,IAAI,CAAC,IAAI,GAAG,aAA2B,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAkB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,6NAA6N,CAAA;QACzO,IAAI,CAAC,WAAW,GAAG,YAAY,CAAA;QAC/B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,oFAAoF,CAAA;QAEvG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IACtC,CAAC;CAEF;AAED,eAAe,iBAAiB,CAAA"}
|
package/dist/VAT/ui/index.d.ts
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { AlisaHandler } from './AlisaImport/backend/AlisaHandler';
|
|
1
2
|
export { default as AssetReportBackend } from './AssetReport/backend';
|
|
2
3
|
export { default as CoinAPIBackend } from './CoinAPI/backend';
|
|
3
4
|
export { default as CoinbaseImportBackend } from './CoinbaseImport/backend';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { AlisaHandler } from './AlisaImport/backend/AlisaHandler';
|
|
1
2
|
export { default as AssetReportBackend } from './AssetReport/backend';
|
|
2
3
|
export { default as CoinAPIBackend } from './CoinAPI/backend';
|
|
3
4
|
export { default as CoinbaseImportBackend } from './CoinbaseImport/backend';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,gCAAgC,EAAE,MAAM,qCAAqC,CAAA;AACjG,OAAO,EAAE,OAAO,IAAI,oCAAoC,EAAE,MAAM,yCAAyC,CAAA;AACzG,OAAO,EAAE,OAAO,IAAI,mCAAmC,EAAE,MAAM,wCAAwC,CAAA;AACvG,OAAO,EAAE,OAAO,IAAI,uCAAuC,EAAE,MAAM,4CAA4C,CAAA;AAC/G,OAAO,EAAE,OAAO,IAAI,oCAAoC,EAAE,MAAM,yCAAyC,CAAA;AACzG,OAAO,EAAE,OAAO,IAAI,gCAAgC,EAAE,MAAM,qCAAqC,CAAA;AACjG,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,gCAAgC,EAAE,MAAM,qCAAqC,CAAA;AACjG,OAAO,EAAE,OAAO,IAAI,oCAAoC,EAAE,MAAM,yCAAyC,CAAA;AACzG,OAAO,EAAE,OAAO,IAAI,mCAAmC,EAAE,MAAM,wCAAwC,CAAA;AACvG,OAAO,EAAE,OAAO,IAAI,uCAAuC,EAAE,MAAM,4CAA4C,CAAA;AAC/G,OAAO,EAAE,OAAO,IAAI,oCAAoC,EAAE,MAAM,yCAAyC,CAAA;AACzG,OAAO,EAAE,OAAO,IAAI,gCAAgC,EAAE,MAAM,qCAAqC,CAAA;AACjG,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tasenor/common-plugins",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.3",
|
|
4
4
|
"description": "Shared common plugins of Tasenor project",
|
|
5
5
|
"repository": "git@github.com:dataplugoy/tasenor-bookkeeper.git",
|
|
6
6
|
"author": "Tommi Ronkainen <tommi.ronkainen@gmail.com>",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"dayjs": "1.10.8",
|
|
14
14
|
"sprintf-js": "^1.1.2",
|
|
15
15
|
"tsx": "^4.7.0",
|
|
16
|
-
"@tasenor/common": "1.14.
|
|
17
|
-
"@tasenor/common-
|
|
18
|
-
"@tasenor/common-
|
|
16
|
+
"@tasenor/common": "1.14.3",
|
|
17
|
+
"@tasenor/common-node": "1.14.3",
|
|
18
|
+
"@tasenor/common-ui": "1.14.3"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@mui/icons-material": "^5.14.1",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"react-i18next": "^14.0.5",
|
|
32
32
|
"react-router-dom": "^6.14.1",
|
|
33
33
|
"typescript": "^5.1.6",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
34
|
+
"@tasenor/config": "1.14.3",
|
|
35
|
+
"eslint-config-tasenor": "0.0.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@mui/icons-material": "^5.14.1",
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { DirectoryPath, NO_SEGMENT, SegmentId, TextFileLine } from '@tasenor/common'
|
|
2
|
+
import { ProcessFile, TransactionImportHandler } from '@tasenor/common-node'
|
|
3
|
+
import dayjs from 'dayjs'
|
|
4
|
+
import { sprintf } from 'sprintf-js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Import implementation for Alisa CSV format.
|
|
8
|
+
*/
|
|
9
|
+
export class AlisaHandler extends TransactionImportHandler {
|
|
10
|
+
|
|
11
|
+
constructor() {
|
|
12
|
+
super('AlisaImport')
|
|
13
|
+
this.importOptions = {
|
|
14
|
+
parser: 'csv',
|
|
15
|
+
numericFields: ['Amount', 'AmountPaid'],
|
|
16
|
+
requiredFields: ['Type', 'Account'],
|
|
17
|
+
textField: 'Message',
|
|
18
|
+
totalAmountField: 'Amount',
|
|
19
|
+
fieldRemapping: {
|
|
20
|
+
CounterpartyAccountNumber: 'Account',
|
|
21
|
+
CounterpartyName: 'Name',
|
|
22
|
+
CounterpartySpecification: 'Specification',
|
|
23
|
+
},
|
|
24
|
+
csv: {
|
|
25
|
+
cutFromBeginning: 8,
|
|
26
|
+
useFirstLineHeadings: true,
|
|
27
|
+
columnSeparator: ';',
|
|
28
|
+
trimLines: true,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get path(): DirectoryPath {
|
|
34
|
+
return __dirname as DirectoryPath
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
canHandle(file: ProcessFile): boolean {
|
|
38
|
+
const data = file.decode()
|
|
39
|
+
const lines = data.substring(0, 150).split('\n')
|
|
40
|
+
const lookup = ['sep=', 'AccountNumber', 'AccountName', 'AccountType', 'CurrencyCode', 'StartDate', 'EndDate', '']
|
|
41
|
+
|
|
42
|
+
for (let i = 0; i < 8; i++) {
|
|
43
|
+
if (lines[i].split(';')[0].trim() !== lookup[i]) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
this.importOptions.csv = this.importOptions.csv || {}
|
|
49
|
+
this.importOptions.csv.columnSeparator = lines[0].trim().split('=')[1]
|
|
50
|
+
|
|
51
|
+
return true
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
segmentId(line: TextFileLine): SegmentId | typeof NO_SEGMENT {
|
|
55
|
+
return line && line.columns ? line.columns.TransactionNumber : NO_SEGMENT
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
time(line: TextFileLine): Date | undefined {
|
|
59
|
+
const time = line.columns.BookingDate
|
|
60
|
+
const re = time && /^(\d\d)\.(\d\d)\.(\d\d\d\d)$/.exec(time)
|
|
61
|
+
if (re && re !== null) {
|
|
62
|
+
return dayjs(sprintf('%04d-%02d-%02d 12:00:00Z', re[3], re[2], re[1])).toDate()
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`Alisa import cannot figure out date from ${JSON.stringify(time)}.`)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ImportPlugin } from '@tasenor/common-node'
|
|
2
|
+
import { PluginCode, Version } from '@tasenor/common'
|
|
3
|
+
import { AlisaHandler } from './AlisaHandler'
|
|
4
|
+
|
|
5
|
+
class AlisaImportPlugin extends ImportPlugin {
|
|
6
|
+
|
|
7
|
+
constructor() {
|
|
8
|
+
super(new AlisaHandler())
|
|
9
|
+
|
|
10
|
+
this.code = 'AlisaImport' as PluginCode
|
|
11
|
+
this.title = 'Import for Alisa'
|
|
12
|
+
this.version = '1.0.0' as Version
|
|
13
|
+
this.icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M5 6.99h3V14h2V6.99h3L9 3zM14 10v7.01h-3L15 21l4-3.99h-3V10z"/></svg>'
|
|
14
|
+
this.releaseDate = '2025-02-09'
|
|
15
|
+
this.use = 'backend'
|
|
16
|
+
this.type = 'import'
|
|
17
|
+
this.description = 'Import plugin for importing transaction data in CSV format provided by Alisa Bank.'
|
|
18
|
+
|
|
19
|
+
this.languages = this.getLanguages()
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default AlisaImportPlugin
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { AlisaHandler } from './AlisaImport/backend/AlisaHandler'
|
|
1
2
|
export { default as AssetReportBackend } from './AssetReport/backend'
|
|
2
3
|
export { default as CoinAPIBackend } from './CoinAPI/backend'
|
|
3
4
|
export { default as CoinbaseImportBackend } from './CoinbaseImport/backend'
|