@tasenor/common-plugins 1.9.32 → 1.9.34
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 +4 -0
- package/.turbo/turbo-ci.log +3 -7
- package/data/PluginIndex.mjs +27 -0
- package/dist/CoinAPI/backend/index.d.ts +22 -0
- package/dist/CoinAPI/backend/index.js +91 -0
- package/dist/CoinAPI/backend/index.js.map +1 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.d.ts +12 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.js +33 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.js.map +1 -0
- package/dist/CoinbaseImport/backend/index.d.ts +5 -0
- package/dist/CoinbaseImport/backend/index.js +18 -0
- package/dist/CoinbaseImport/backend/index.js.map +1 -0
- package/dist/DocumentCleaner/ui/index.d.ts +43 -0
- package/dist/DocumentCleaner/ui/index.js +139 -0
- package/dist/DocumentCleaner/ui/index.js.map +1 -0
- package/dist/Euro/ui/index.d.ts +15 -0
- package/dist/Euro/ui/index.js +22 -0
- package/dist/Euro/ui/index.js.map +1 -0
- package/dist/Finnish/ui/finnish.json +341 -0
- package/dist/Finnish/ui/index.d.ts +17 -0
- package/dist/Finnish/ui/index.js +47 -0
- package/dist/Finnish/ui/index.js.map +1 -0
- package/dist/FinnishBalanceSheetReport/backend/index.d.ts +18 -0
- package/dist/FinnishBalanceSheetReport/backend/index.js +96 -0
- package/dist/FinnishBalanceSheetReport/backend/index.js.map +1 -0
- package/dist/FinnishBalanceSheetReportInvestment/backend/index.d.ts +18 -0
- package/dist/FinnishBalanceSheetReportInvestment/backend/index.js +96 -0
- package/dist/FinnishBalanceSheetReportInvestment/backend/index.js.map +1 -0
- package/dist/FinnishBalanceSheetReportLite/backend/index.d.ts +19 -0
- package/dist/FinnishBalanceSheetReportLite/backend/index.js +109 -0
- package/dist/FinnishBalanceSheetReportLite/backend/index.js.map +1 -0
- package/dist/FinnishIncomeStatementReport/backend/index.d.ts +26 -0
- package/dist/FinnishIncomeStatementReport/backend/index.js +190 -0
- package/dist/FinnishIncomeStatementReport/backend/index.js.map +1 -0
- package/dist/FinnishIncomeStatementReportInvestment/backend/index.d.ts +26 -0
- package/dist/FinnishIncomeStatementReportInvestment/backend/index.js +190 -0
- package/dist/FinnishIncomeStatementReportInvestment/backend/index.js.map +1 -0
- package/dist/FinnishIncomeStatementReportLite/backend/index.d.ts +26 -0
- package/dist/FinnishIncomeStatementReportLite/backend/index.js +188 -0
- package/dist/FinnishIncomeStatementReportLite/backend/index.js.map +1 -0
- package/dist/FinnishInvestmentCompany/backend/index.d.ts +10 -0
- package/dist/FinnishInvestmentCompany/backend/index.js +36 -0
- package/dist/FinnishInvestmentCompany/backend/index.js.map +1 -0
- package/dist/FinnishInvestmentCompany/ui/index.d.ts +16 -0
- package/dist/FinnishInvestmentCompany/ui/index.js +22 -0
- package/dist/FinnishInvestmentCompany/ui/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyComplete/backend/index.d.ts +10 -0
- package/dist/FinnishLimitedCompanyComplete/backend/index.js +36 -0
- package/dist/FinnishLimitedCompanyComplete/backend/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyComplete/ui/index.d.ts +16 -0
- package/dist/FinnishLimitedCompanyComplete/ui/index.js +22 -0
- package/dist/FinnishLimitedCompanyComplete/ui/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyLite/backend/index.d.ts +10 -0
- package/dist/FinnishLimitedCompanyLite/backend/index.js +43 -0
- package/dist/FinnishLimitedCompanyLite/backend/index.js.map +1 -0
- package/dist/FinnishLimitedCompanyLite/ui/index.d.ts +16 -0
- package/dist/FinnishLimitedCompanyLite/ui/index.js +24 -0
- package/dist/FinnishLimitedCompanyLite/ui/index.js.map +1 -0
- package/dist/GitBackup/backend/index.d.ts +26 -0
- package/dist/GitBackup/backend/index.js +91 -0
- package/dist/GitBackup/backend/index.js.map +1 -0
- package/dist/GitBackup/ui/index.d.ts +44 -0
- package/dist/GitBackup/ui/index.js +114 -0
- package/dist/GitBackup/ui/index.js.map +1 -0
- package/dist/IncomeAndExpenses/backend/index.d.ts +5 -0
- package/dist/IncomeAndExpenses/backend/index.js +350 -0
- package/dist/IncomeAndExpenses/backend/index.js.map +1 -0
- package/dist/JournalReport/backend/index.d.ts +15 -0
- package/dist/JournalReport/backend/index.js +143 -0
- package/dist/JournalReport/backend/index.js.map +1 -0
- package/dist/KrakenImport/backend/KrakenHandler.d.ts +24 -0
- package/dist/KrakenImport/backend/KrakenHandler.js +86 -0
- package/dist/KrakenImport/backend/KrakenHandler.js.map +1 -0
- package/dist/KrakenImport/backend/index.d.ts +5 -0
- package/dist/KrakenImport/backend/index.js +18 -0
- package/dist/KrakenImport/backend/index.js.map +1 -0
- package/dist/LedgerReport/backend/index.d.ts +15 -0
- package/dist/LedgerReport/backend/index.js +150 -0
- package/dist/LedgerReport/backend/index.js.map +1 -0
- package/dist/LynxImport/backend/LynxHandler.d.ts +29 -0
- package/dist/LynxImport/backend/LynxHandler.js +343 -0
- package/dist/LynxImport/backend/LynxHandler.js.map +1 -0
- package/dist/LynxImport/backend/index.d.ts +5 -0
- package/dist/LynxImport/backend/index.js +18 -0
- package/dist/LynxImport/backend/index.js.map +1 -0
- package/dist/NordeaImport/backend/NordeaHandler.d.ts +12 -0
- package/dist/NordeaImport/backend/NordeaHandler.js +42 -0
- package/dist/NordeaImport/backend/NordeaHandler.js.map +1 -0
- package/dist/NordeaImport/backend/index.d.ts +5 -0
- package/dist/NordeaImport/backend/index.js +18 -0
- package/dist/NordeaImport/backend/index.js.map +1 -0
- package/dist/NordnetImport/backend/NordnetHandler.d.ts +18 -0
- package/dist/NordnetImport/backend/NordnetHandler.js +69 -0
- package/dist/NordnetImport/backend/NordnetHandler.js.map +1 -0
- package/dist/NordnetImport/backend/index.d.ts +5 -0
- package/dist/NordnetImport/backend/index.js +18 -0
- package/dist/NordnetImport/backend/index.js.map +1 -0
- package/dist/Rand/ui/index.d.ts +15 -0
- package/dist/Rand/ui/index.js +22 -0
- package/dist/Rand/ui/index.js.map +1 -0
- package/dist/RapidAPI/backend/index.d.ts +22 -0
- package/dist/RapidAPI/backend/index.js +119 -0
- package/dist/RapidAPI/backend/index.js.map +1 -0
- package/dist/TITOImport/backend/TITOHandler.d.ts +14 -0
- package/dist/TITOImport/backend/TITOHandler.js +244 -0
- package/dist/TITOImport/backend/TITOHandler.js.map +1 -0
- package/dist/TITOImport/backend/index.d.ts +5 -0
- package/dist/TITOImport/backend/index.js +18 -0
- package/dist/TITOImport/backend/index.js.map +1 -0
- package/dist/TagEditor/ui/index.d.ts +31 -0
- package/dist/TagEditor/ui/index.js +349 -0
- package/dist/TagEditor/ui/index.js.map +1 -0
- package/dist/USDollar/ui/index.d.ts +15 -0
- package/dist/USDollar/ui/index.js +22 -0
- package/dist/USDollar/ui/index.js.map +1 -0
- package/dist/VAT/ui/index.d.ts +69 -0
- package/dist/VAT/ui/index.js +509 -0
- package/dist/VAT/ui/index.js.map +1 -0
- package/dist/VATFinland/backend/index.d.ts +5 -0
- package/dist/VATFinland/backend/index.js +17 -0
- package/dist/VATFinland/backend/index.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/package.json +8 -5
- package/src/CoinbaseImport/backend/CoinbaseHandler.ts +5 -1
- package/src/KrakenImport/backend/KrakenHandler.ts +5 -1
- package/src/LynxImport/backend/LynxHandler.ts +5 -1
- package/src/NordeaImport/backend/NordeaHandler.ts +5 -1
- package/src/NordnetImport/backend/NordnetHandler.ts +5 -1
- package/src/TITOImport/backend/TITOHandler.ts +5 -1
- package/src/index.ts +28 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { NO_SEGMENT } from '@tasenor/common';
|
|
2
|
+
import { NotImplemented, TransactionImportHandler } from '@tasenor/common-node';
|
|
3
|
+
/**
|
|
4
|
+
* Import implementation for Coinbase CSV format.
|
|
5
|
+
*/
|
|
6
|
+
export class KrakenHandler extends TransactionImportHandler {
|
|
7
|
+
constructor() {
|
|
8
|
+
super('KrakenImport');
|
|
9
|
+
this.importOptions = {
|
|
10
|
+
parser: 'csv',
|
|
11
|
+
numericFields: ['amount', 'balance', 'fee'],
|
|
12
|
+
requiredFields: [],
|
|
13
|
+
textField: 'type',
|
|
14
|
+
totalAmountField: 'amount',
|
|
15
|
+
csv: { useFirstLineHeadings: true, columnSeparator: ',' }
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
get path() {
|
|
19
|
+
return __dirname;
|
|
20
|
+
}
|
|
21
|
+
canHandle(file) {
|
|
22
|
+
return file.firstLineMatch(/^"txid","refid","time","type","subtype","aclass","asset","amount","fee","balance"/) || file.firstLineMatch(/^"txid","refid","time","type","aclass","asset","amount","fee","balance"/);
|
|
23
|
+
}
|
|
24
|
+
time(line) {
|
|
25
|
+
return new Date(line.columns.time.replace(' ', 'T') + 'Z');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Convert Kraken specific assets to commonly used tickers.
|
|
29
|
+
* @param aclass
|
|
30
|
+
* @param asset
|
|
31
|
+
*/
|
|
32
|
+
ticker(aclass, asset) {
|
|
33
|
+
if (aclass === undefined || asset === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
if (aclass !== 'currency') {
|
|
36
|
+
throw new NotImplemented(`Kraken handler does not recognize asset class '${aclass}'.`);
|
|
37
|
+
}
|
|
38
|
+
if (asset.startsWith('Z')) {
|
|
39
|
+
return asset.substring(1);
|
|
40
|
+
}
|
|
41
|
+
const map = {
|
|
42
|
+
BCH: 'BCH',
|
|
43
|
+
EOS: 'EOS',
|
|
44
|
+
SOL: 'SOL',
|
|
45
|
+
XETH: 'ETH',
|
|
46
|
+
XLTC: 'LTC',
|
|
47
|
+
XMLN: 'MLN',
|
|
48
|
+
XTZ: 'XTZ',
|
|
49
|
+
XXBT: 'BTC',
|
|
50
|
+
XXLM: 'XLM',
|
|
51
|
+
XXRP: 'XRP',
|
|
52
|
+
XZEC: 'ZEC',
|
|
53
|
+
};
|
|
54
|
+
if (map[asset]) {
|
|
55
|
+
return map[asset];
|
|
56
|
+
}
|
|
57
|
+
throw new NotImplemented(`Kraken handler does not recognize asset '${asset}'.`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Use transaction IDs for segment ID.
|
|
61
|
+
* @param line
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
segmentId(line) {
|
|
65
|
+
if (line.columns && line.columns.txid) {
|
|
66
|
+
return line.columns.refid || NO_SEGMENT;
|
|
67
|
+
}
|
|
68
|
+
return NO_SEGMENT;
|
|
69
|
+
}
|
|
70
|
+
async segmentation(process, state) {
|
|
71
|
+
const segmented = await super.segmentation(process, state, process.files);
|
|
72
|
+
for (const fileName of Object.keys(segmented.files)) {
|
|
73
|
+
const file = segmented.files[fileName];
|
|
74
|
+
for (let n = 0; n < file.lines.length; n++) {
|
|
75
|
+
const { aclass, asset } = file.lines[n].columns;
|
|
76
|
+
// Get the standard ticker.
|
|
77
|
+
const ticker = this.ticker(aclass, asset);
|
|
78
|
+
if (ticker) {
|
|
79
|
+
file.lines[n].columns.ticker = ticker;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return segmented;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=KrakenHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KrakenHandler.js","sourceRoot":"","sources":["../../../src/KrakenImport/backend/KrakenHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,UAAU,EAA2B,MAAM,iBAAiB,CAAA;AACrG,OAAO,EAAE,cAAc,EAAwB,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAErG;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,wBAAwB;IAEzD;QACE,KAAK,CAAC,cAAc,CAAC,CAAA;QACrB,IAAI,CAAC,aAAa,GAAG;YACnB,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;YAC3C,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,MAAM;YACjB,gBAAgB,EAAE,QAAQ;YAC1B,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE;SAC1D,CAAA;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,SAA0B,CAAA;IACnC,CAAC;IAED,SAAS,CAAC,IAAiB;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,mFAAmF,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,yEAAyE,CAAC,CAAA;IACnN,CAAC;IAED,IAAI,CAAC,IAAkB;QACrB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;IAC5D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAc,EAAE,KAAa;QAClC,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QACjE,IAAI,MAAM,KAAK,UAAU,EAAE;YACzB,MAAM,IAAI,cAAc,CAAC,kDAAkD,MAAM,IAAI,CAAC,CAAA;SACvF;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzB,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;SAC1B;QACD,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;SACZ,CAAA;QACD,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE;YACd,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;SAClB;QACD,MAAM,IAAI,cAAc,CAAC,4CAA4C,KAAK,IAAI,CAAC,CAAA;IACjF,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAkB;QAC1B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAA;SACxC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAgB,EAAE,KAAiC;QACpE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACzE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACnD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;gBAC/C,2BAA2B;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;gBACzC,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;iBACtC;aACF;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ImportPlugin } from '@tasenor/common-node';
|
|
2
|
+
import { KrakenHandler } from './KrakenHandler';
|
|
3
|
+
class KrakenImportPlugin extends ImportPlugin {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(new KrakenHandler());
|
|
6
|
+
this.code = 'KrakenImport';
|
|
7
|
+
this.title = 'Import for Kraken';
|
|
8
|
+
this.version = '1.0.38';
|
|
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 = '2022-11-06';
|
|
11
|
+
this.use = 'backend';
|
|
12
|
+
this.type = 'import';
|
|
13
|
+
this.description = 'Import plugin for importing transaction data in CSV format provided by Kraken.';
|
|
14
|
+
this.languages = this.getLanguages();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export default KrakenImportPlugin;
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/KrakenImport/backend/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,MAAM,kBAAmB,SAAQ,YAAY;IAE3C;QACE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC,CAAA;QAE1B,IAAI,CAAC,IAAI,GAAG,cAA4B,CAAA;QACxC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,QAAmB,CAAA;QAClC,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,gFAAgF,CAAA;QAEnG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IACtC,CAAC;CAEF;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReportPlugin } from '@tasenor/common-node';
|
|
2
|
+
import { Language, ReportColumnDefinition, ReportFormat, ReportID, ReportItem, ReportOptions } from '@tasenor/common';
|
|
3
|
+
declare class LedgerReport extends ReportPlugin {
|
|
4
|
+
constructor();
|
|
5
|
+
forceOptions(): {
|
|
6
|
+
negateAssetAndProfit: boolean;
|
|
7
|
+
addPreviousPeriod: boolean;
|
|
8
|
+
};
|
|
9
|
+
getLanguages(): Language[];
|
|
10
|
+
getReportStructure(id: ReportID, lang: Language): ReportFormat | undefined;
|
|
11
|
+
getReportOptions(): ReportOptions;
|
|
12
|
+
getColumns(): Promise<ReportColumnDefinition[]>;
|
|
13
|
+
preProcess(id: any, entries: any, options: any): ReportItem[];
|
|
14
|
+
}
|
|
15
|
+
export default LedgerReport;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { ReportPlugin } from '@tasenor/common-node';
|
|
2
|
+
class LedgerReport extends ReportPlugin {
|
|
3
|
+
constructor() {
|
|
4
|
+
super('general-ledger');
|
|
5
|
+
this.code = 'LedgerReport';
|
|
6
|
+
this.title = 'Ledger Report';
|
|
7
|
+
this.version = '1.0.13';
|
|
8
|
+
this.icon = '<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><path d="M0,0h24v24H0V0z" fill="none"/></g><g><g><path d="M14,5H5v14h14v-9h-5V5z M8,17c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,17,8,17z M8,13 c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,13,8,13z M8,9C7.45,9,7,8.55,7,8s0.45-1,1-1s1,0.45,1,1S8.55,9,8,9z" opacity=".3"/><circle cx="8" cy="8" r="1"/><path d="M15,3H5C3.9,3,3.01,3.9,3.01,5L3,19c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V9L15,3z M19,19H5V5h9v5h5V19z"/><circle cx="8" cy="12" r="1"/><circle cx="8" cy="16" r="1"/></g></g></svg>';
|
|
9
|
+
this.releaseDate = '2022-03-05';
|
|
10
|
+
this.use = 'backend';
|
|
11
|
+
this.type = 'report';
|
|
12
|
+
this.description = 'General purpose ledger report listing all entries in each account. Each account has also running total for balance.';
|
|
13
|
+
this.languages = {
|
|
14
|
+
en: {
|
|
15
|
+
'report-general-ledger': 'General Ledger'
|
|
16
|
+
},
|
|
17
|
+
fi: {
|
|
18
|
+
'report-general-ledger': 'Pääkirja'
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
forceOptions() {
|
|
23
|
+
return {
|
|
24
|
+
negateAssetAndProfit: false,
|
|
25
|
+
addPreviousPeriod: false
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
getLanguages() {
|
|
29
|
+
return ['fi', 'en'];
|
|
30
|
+
}
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
|
+
getReportStructure(id, lang) {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
getReportOptions() {
|
|
36
|
+
return {
|
|
37
|
+
compact: 'boolean:true'
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async getColumns() {
|
|
41
|
+
return [{
|
|
42
|
+
type: 'id',
|
|
43
|
+
name: 'account',
|
|
44
|
+
title: '{column-account-number}'
|
|
45
|
+
}, {
|
|
46
|
+
type: 'name',
|
|
47
|
+
name: 'name',
|
|
48
|
+
title: '{column-name-or-date}'
|
|
49
|
+
}, {
|
|
50
|
+
type: 'numeric',
|
|
51
|
+
name: 'debit',
|
|
52
|
+
title: '{column-debit}'
|
|
53
|
+
}, {
|
|
54
|
+
type: 'numeric',
|
|
55
|
+
name: 'credit',
|
|
56
|
+
title: '{column-credit}'
|
|
57
|
+
}, {
|
|
58
|
+
type: 'numeric',
|
|
59
|
+
name: 'balance',
|
|
60
|
+
title: '{column-balance}'
|
|
61
|
+
}];
|
|
62
|
+
}
|
|
63
|
+
preProcess(id, entries, options) {
|
|
64
|
+
// Pre-process entries by their account number.
|
|
65
|
+
const accounts = {};
|
|
66
|
+
const accountNames = {};
|
|
67
|
+
entries.forEach((entry) => {
|
|
68
|
+
let data;
|
|
69
|
+
if (entry.number in accounts) {
|
|
70
|
+
data = accounts[entry.number];
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
data = [];
|
|
74
|
+
}
|
|
75
|
+
data.push({
|
|
76
|
+
name: entry.name,
|
|
77
|
+
number: entry.number,
|
|
78
|
+
documentId: entry.documentId,
|
|
79
|
+
description: entry.description,
|
|
80
|
+
date: entry.date,
|
|
81
|
+
amounts: {
|
|
82
|
+
debit: entry.amount >= 0 ? entry.amount : null,
|
|
83
|
+
credit: entry.amount < 0 ? -entry.amount : null,
|
|
84
|
+
balance: null
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
accounts[entry.number] = data;
|
|
88
|
+
accountNames[entry.number] = entry.name;
|
|
89
|
+
});
|
|
90
|
+
const accountNumbers = Object.keys(accounts).sort();
|
|
91
|
+
const data = [];
|
|
92
|
+
accountNumbers.forEach((number) => {
|
|
93
|
+
const lines = accounts[number];
|
|
94
|
+
data.push({
|
|
95
|
+
tab: 0,
|
|
96
|
+
bold: true,
|
|
97
|
+
id: number,
|
|
98
|
+
name: accountNames[number]
|
|
99
|
+
});
|
|
100
|
+
let total = 0;
|
|
101
|
+
lines.forEach((line) => {
|
|
102
|
+
total += line.amounts.debit;
|
|
103
|
+
total -= line.amounts.credit;
|
|
104
|
+
line.amounts.balance = total;
|
|
105
|
+
if (options.compact) {
|
|
106
|
+
data.push({
|
|
107
|
+
tab: 0,
|
|
108
|
+
needLocalization: true,
|
|
109
|
+
id: `#${line.documentId}`,
|
|
110
|
+
name: `{${this.time2str(line.date)}} ${line.description.replace(/^(\[.+?\])+\s*/g, '')}`,
|
|
111
|
+
amounts: line.amounts
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
data.push({
|
|
116
|
+
tab: 0,
|
|
117
|
+
needLocalization: true,
|
|
118
|
+
id: `#${line.documentId}`,
|
|
119
|
+
name: `{${this.time2str(line.date)}}`
|
|
120
|
+
});
|
|
121
|
+
data.push({
|
|
122
|
+
tab: 0,
|
|
123
|
+
useRemainingColumns: true,
|
|
124
|
+
italic: true,
|
|
125
|
+
name: `${line.description.replace(/^(\[.+?\])+\s*/g, '')}`
|
|
126
|
+
});
|
|
127
|
+
data.push({
|
|
128
|
+
tab: 0,
|
|
129
|
+
name: '',
|
|
130
|
+
amounts: line.amounts
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
data.push({
|
|
135
|
+
tab: 0,
|
|
136
|
+
name: '',
|
|
137
|
+
bold: true,
|
|
138
|
+
bigger: true,
|
|
139
|
+
amounts: {
|
|
140
|
+
debit: '',
|
|
141
|
+
credit: '',
|
|
142
|
+
balance: total
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
return data;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export default LedgerReport;
|
|
150
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/LedgerReport/backend/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ImportStateText, ProcessConfig, DirectoryPath } from '@tasenor/common';
|
|
2
|
+
import { Process, ProcessFile, TransactionImportHandler } from '@tasenor/common-node';
|
|
3
|
+
/**
|
|
4
|
+
* Import implementation for Lynx CSV format.
|
|
5
|
+
*/
|
|
6
|
+
export declare class LynxHandler extends TransactionImportHandler {
|
|
7
|
+
constructor();
|
|
8
|
+
get path(): DirectoryPath;
|
|
9
|
+
canHandle(file: ProcessFile): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Special pre-processing for Lynx semi CSV-format. Collect headers and map content of interest to columns.
|
|
12
|
+
* @param state
|
|
13
|
+
* @returns
|
|
14
|
+
*/
|
|
15
|
+
parse(state: ImportStateText<'initial'>, config: ProcessConfig): Promise<ImportStateText<'segmented'>>;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve date string for column data extracted.
|
|
18
|
+
* @param columns
|
|
19
|
+
*/
|
|
20
|
+
date(columns: Record<string, string>): string;
|
|
21
|
+
/**
|
|
22
|
+
* Pair dividends and witholding taxes. Other lines are kept as they are.
|
|
23
|
+
* @param process
|
|
24
|
+
* @param state
|
|
25
|
+
* @param files
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
segmentation(process: Process, state: ImportStateText<'initial'>): Promise<ImportStateText<'segmented'>>;
|
|
29
|
+
}
|