diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..c9a3d7bf4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +packages/ynap-parsers/src/bank2ynab/banks.json +packages/ynap-parsers/src/**/test-data/** diff --git a/package-lock.json b/package-lock.json index 8c540126d..7aba72156 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18077,7 +18077,7 @@ }, "packages/ynap-parsers": { "name": "@envelope-zero/ynap-parsers", - "version": "1.15.49", + "version": "1.16.0", "license": "MIT", "dependencies": { "@envelope-zero/ynap-bank2ynab-converter": "1.14.39", diff --git a/packages/ynap-parsers/package.json b/packages/ynap-parsers/package.json index 406c7bd83..6f7b42fef 100644 --- a/packages/ynap-parsers/package.json +++ b/packages/ynap-parsers/package.json @@ -1,6 +1,6 @@ { "name": "@envelope-zero/ynap-parsers", - "version": "1.15.49", + "version": "1.16.0", "description": "Parsers from various formats to YNAB CSV", "main": "index.js", "author": "Envelope Zero Team (https://envelope-zero.org)", @@ -37,6 +37,6 @@ "test": "jest", "test:watch": "jest --watch", "build": "npx jest && tsc && cp -r ./lib/* . && rm -rf ./lib", - "fetch-bank2ynab": "ynap-bank2ynab-converter -b cf153c196acd809a2e67638df9c8bc157345f567 -o src/bank2ynab/banks.json" + "fetch-bank2ynab": "ynap-bank2ynab-converter --branch develop --output src/bank2ynab/banks.json" } } diff --git a/packages/ynap-parsers/src/bank2ynab/bank2ynab.ts b/packages/ynap-parsers/src/bank2ynab/bank2ynab.ts index df09b2a94..cb921b711 100644 --- a/packages/ynap-parsers/src/bank2ynab/bank2ynab.ts +++ b/packages/ynap-parsers/src/bank2ynab/bank2ynab.ts @@ -1,9 +1,9 @@ +import { ParserConfig } from '@envelope-zero/ynap-bank2ynab-converter/parserconfig' import 'mdn-polyfills/String.prototype.startsWith' -import { ParserFunction, MatcherFunction, ParserModule, YnabRow } from '..' +import { MatcherFunction, ParserFunction, ParserModule, YnabRow } from '..' import { parse as parseCsv } from '../util/papaparse' import { readEncodedFile } from '../util/read-encoded-file' import { parseDate, ynabDate } from './parse-date' -import { ParserConfig } from '@envelope-zero/ynap-bank2ynab-converter/parserconfig' import banks from './banks.json' @@ -133,7 +133,10 @@ export const generateParser = (config: ParserConfig) => { } // Get all rows after the header row, filter empty lines, filter lines without a date (pending transactions), then use the first row of that - const row = data.slice(config.headerRows).filter(d => d.length > 1).filter(d => d[columns.Date] != "")[0] + const row = data + .slice(config.headerRows) + .filter(d => d.length > 1) + .filter(d => d[columns.Date] != '')[0] // Check that the date column is set correctly try { @@ -171,7 +174,7 @@ export const generateParser = (config: ParserConfig) => { const ynabData = data .slice(config.headerRows, data.length - config.footerRows) // Filter header and footer rows .filter(d => d.length > 1) // Filter empty lines - .filter(d => d[columns.Date] != "") // Filter lines without date (pending transactions) + .filter(d => d[columns.Date] != '') // Filter lines without date (pending transactions) .map( d => ({ @@ -230,7 +233,12 @@ export const generateParser = (config: ParserConfig) => { } as ParserModule } -const ignorelist = ['de N26', 'de ING-DiBa', 'ie N26'] +const ignorelist = [ + 'de N26', + 'de ING-DiBa', + 'ie N26', + 'de Deutsche Kreditbank checking new', +] export const bank2ynab = banks .filter(b => !ignorelist.includes(`${b.country} ${b.name}`)) .map(bank => generateParser(bank as ParserConfig)) diff --git a/packages/ynap-parsers/src/bank2ynab/banks.json b/packages/ynap-parsers/src/bank2ynab/banks.json index 67ae3c26a..4f48877b5 100644 --- a/packages/ynap-parsers/src/bank2ynab/banks.json +++ b/packages/ynap-parsers/src/bank2ynab/banks.json @@ -4,8 +4,15 @@ "country": "at", "filenamePattern": "EASYBANK_Umsatzliste_20[0-9]{6}_[0-9]{4}\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Memo", "skip", "Date", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L58", + "inputColumns": [ + "skip", + "Memo", + "skip", + "Date", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L58", "dateFormat": "%d.%m.%Y", "headerRows": 0, "footerRows": 0 @@ -15,8 +22,16 @@ "country": "at", "filenamePattern": "elbi_umsaetze_20[0-9]{12}\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Memo", "Date", "Inflow", "skip", "skip", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L67", + "inputColumns": [ + "skip", + "Memo", + "Date", + "Inflow", + "skip", + "skip", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L67", "dateFormat": "%d.%m.%Y", "headerRows": 0, "footerRows": 0 @@ -26,8 +41,15 @@ "country": "at", "filenamePattern": "kta_ei\\.dat", "filenameExtension": "dat", - "inputColumns": ["skip", "Memo", "Date", "Payee", "Inflow", "Memo"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L76", + "inputColumns": [ + "skip", + "Memo", + "Date", + "Payee", + "Inflow", + "Memo" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L76", "dateFormat": "%Y%m%d", "headerRows": 1, "footerRows": 0 @@ -37,8 +59,16 @@ "country": "at", "filenamePattern": "meinElba_umsaetze_AT[0-9]{18}_suche\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Payee", "Date", "Inflow", "skip", "skip", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L84", + "inputColumns": [ + "skip", + "Payee", + "Date", + "Inflow", + "skip", + "skip", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L84", "dateFormat": "%d.%m.%Y", "headerRows": 0, "footerRows": 0 @@ -48,8 +78,15 @@ "country": "at", "filenamePattern": "meinElba_umsaetze_AT[0-9]{18}_suche\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Payee", "Date", "Inflow", "skip", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L93", + "inputColumns": [ + "skip", + "Payee", + "Date", + "Inflow", + "skip", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L93", "dateFormat": "%d.%m.%Y", "headerRows": 0, "footerRows": 0 @@ -59,8 +96,16 @@ "country": "at", "filenamePattern": "finstatus_20[0-9]{12}\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Payee", "Memo", "skip", "skip", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L102", + "inputColumns": [ + "skip", + "Payee", + "Memo", + "skip", + "skip", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L102", "dateFormat": "%d.%m.%Y", "headerRows": 0, "footerRows": 0 @@ -70,8 +115,12 @@ "country": "au", "filenamePattern": "ANZ\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Inflow", "Payee"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L111", + "inputColumns": [ + "Date", + "Inflow", + "Payee" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L111", "dateFormat": "%d/%m/%y", "headerRows": 0, "footerRows": 0 @@ -81,8 +130,14 @@ "country": "au", "filenamePattern": "Transactions\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Memo", "Inflow", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L118", + "inputColumns": [ + "Date", + "Memo", + "Inflow", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L118", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -101,7 +156,7 @@ "Payee", "Running Balance" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L129", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L129", "dateFormat": "%d %b %y", "headerRows": 0, "footerRows": 0 @@ -121,7 +176,7 @@ "Memo", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L136", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L136", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -146,7 +201,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L146", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L146", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -174,7 +229,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L171", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L171", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -184,8 +239,16 @@ "country": "be", "filenamePattern": "export\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Date", "skip", "Payee", "Memo", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L180", + "inputColumns": [ + "skip", + "Date", + "skip", + "Payee", + "Memo", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L180", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -195,8 +258,15 @@ "country": "br", "filenamePattern": "extrato\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "skip", "Payee", "skip", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L200", + "inputColumns": [ + "Date", + "skip", + "Payee", + "skip", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L200", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -206,8 +276,13 @@ "country": "br", "filenamePattern": "Extrato\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L206", + "inputColumns": [ + "Date", + "Payee", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L206", "headerRows": 1, "footerRows": 0 }, @@ -216,8 +291,14 @@ "country": "ca", "filenamePattern": "accountactivity\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Outflow", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L213", + "inputColumns": [ + "Date", + "Payee", + "Outflow", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L213", "dateFormat": "%m/%d/%Y", "headerRows": 0, "footerRows": 0 @@ -250,7 +331,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L220", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L220", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 3 @@ -277,7 +358,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L229", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L229", "dateFormat": "%Y-%m-%d", "headerRows": 10, "footerRows": 0 @@ -302,7 +383,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L240", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L240", "dateFormat": "%d.%m.%Y", "headerRows": 2, "footerRows": 0 @@ -322,7 +403,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L250", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L250", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -341,7 +422,7 @@ "Outflow", "Inflow" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L260", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L260", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -360,7 +441,7 @@ "Payee", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L269", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L269", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -370,8 +451,15 @@ "country": "co", "filenamePattern": "[0-9]{3}-[0-9]{6}-[0-9]{2}_[0-9]{3}\\.txt", "filenameExtension": "txt", - "inputColumns": ["Date", "skip", "skip", "Memo", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L278", + "inputColumns": [ + "Date", + "skip", + "skip", + "Memo", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L278", "dateFormat": "%Y/%m/%d", "headerRows": 1, "footerRows": 0 @@ -393,7 +481,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L287", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L287", "dateFormat": "%Y-%m-%d %H:%M:%S", "headerRows": 1, "footerRows": 0 @@ -447,7 +535,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L296", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L296", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -470,7 +558,7 @@ "skip", "Memo" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L304", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L304", "dateFormat": "%Y/%m/%d", "headerRows": 1, "footerRows": 0 @@ -496,7 +584,7 @@ "skip", "Inflow" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L315", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L315", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -519,7 +607,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L325", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L325", "dateFormat": "%d.%m.%Y", "headerRows": 2, "footerRows": 0 @@ -540,7 +628,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L336", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L336", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -560,7 +648,7 @@ "Memo", "Inflow" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L345", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L345", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -590,7 +678,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L353", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L353", "dateFormat": "%m/%d/%Y", "headerRows": 4, "footerRows": 1 @@ -610,7 +698,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L362", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L362", "dateFormat": "%m/%d/%Y", "headerRows": 4, "footerRows": 1 @@ -633,7 +721,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L373", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L373", "dateFormat": "%d.%m.%Y", "headerRows": 7, "footerRows": 0 @@ -657,7 +745,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L383", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L383", "dateFormat": "%d.%m.%y", "headerRows": 5, "footerRows": 0 @@ -667,8 +755,15 @@ "country": "de", "filenamePattern": "\\d{4}_{8}\\d{4}\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "skip", "Date", "Memo", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L391", + "inputColumns": [ + "skip", + "skip", + "Date", + "Memo", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L391", "dateFormat": "%d.%m.%Y", "headerRows": 7, "footerRows": 0 @@ -693,9 +788,13 @@ "Inflow", "CDFlag" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L401", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L401", "dateFormat": "%d.%m.%Y", - "inflowOutflowFlag": ["12", "H", "S"], + "inflowOutflowFlag": [ + "12", + "H", + "S" + ], "headerRows": 13, "footerRows": 3 }, @@ -715,7 +814,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L412", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L412", "dateFormat": "%d.%m.%Y", "headerRows": 13, "footerRows": 0 @@ -737,7 +836,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L430", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L430", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -760,7 +859,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L438", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L438", "dateFormat": "%d.%m.%y", "headerRows": 1, "footerRows": 0 @@ -788,7 +887,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L446", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L446", "dateFormat": "%d.%m.%y", "headerRows": 1, "footerRows": 0 @@ -817,7 +916,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L454", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L454", "dateFormat": "%d.%m.%y", "headerRows": 1, "footerRows": 0 @@ -846,7 +945,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L462", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L462", "dateFormat": "%d.%m.%y", "headerRows": 1, "footerRows": 0 @@ -856,8 +955,13 @@ "country": "dk", "filenamePattern": "Posteringer\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Inflow", "Running Balance"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L470", + "inputColumns": [ + "Date", + "Payee", + "Inflow", + "Running Balance" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L470", "dateFormat": "%d-%m-%Y", "headerRows": 0, "footerRows": 0 @@ -877,7 +981,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L480", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L480", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -899,7 +1003,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L489", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L489", "headerRows": 1, "footerRows": 0 }, @@ -908,8 +1012,14 @@ "country": "dk", "filenamePattern": "poster\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "skip", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L495", + "inputColumns": [ + "Date", + "Payee", + "skip", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L495", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -919,8 +1029,14 @@ "country": "dk", "filenamePattern": "export\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Date", "Payee", "Inflow", "Running Balance"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L502", + "inputColumns": [ + "skip", + "Date", + "Payee", + "Inflow", + "Running Balance" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L502", "dateFormat": "%d-%m-%Y", "headerRows": 0, "footerRows": 0 @@ -953,7 +1069,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L511", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L511", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -981,7 +1097,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L520", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L520", "dateFormat": "%Y.%m.%d.", "headerRows": 1, "footerRows": 0 @@ -1014,7 +1130,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L530", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L530", "dateFormat": "%Y.%m.%d", "headerRows": 1, "footerRows": 0 @@ -1041,7 +1157,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L538", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L538", "dateFormat": "%Y%m%d", "headerRows": 0, "footerRows": 0 @@ -1064,7 +1180,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L545", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L545", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -1074,8 +1190,14 @@ "country": "ie", "filenamePattern": "[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Outflow", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L553", + "inputColumns": [ + "Date", + "Payee", + "Outflow", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L553", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -1096,7 +1218,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L568", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L568", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1106,8 +1228,16 @@ "country": "ie", "filenamePattern": "ACCOUNTNAME[0-9]{8}-20[0-9]{6}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "skip", "Payee", "Inflow", "skip", "skip", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L575", + "inputColumns": [ + "Date", + "skip", + "Payee", + "Inflow", + "skip", + "skip", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L575", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -1126,7 +1256,7 @@ "Memo", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L587", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L587", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -1150,9 +1280,13 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L595", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L595", "dateFormat": "%d.%m.%Y", - "inflowOutflowFlag": ["7", "K", "D"], + "inflowOutflowFlag": [ + "7", + "K", + "D" + ], "headerRows": 2, "footerRows": 4 }, @@ -1161,8 +1295,15 @@ "country": "mint", "filenamePattern": "transactions\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "skip", "Memo", "Inflow", "Category"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L605", + "inputColumns": [ + "Date", + "Payee", + "skip", + "Memo", + "Inflow", + "Category" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L605", "headerRows": 1, "footerRows": 0 }, @@ -1184,7 +1325,7 @@ "Outflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L614", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L614", "headerRows": 1, "footerRows": 0 }, @@ -1213,7 +1354,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L622", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L622", "dateFormat": "%d-%m-%Y / %H:%M", "headerRows": 1, "footerRows": 0 @@ -1223,8 +1364,15 @@ "country": "nl", "filenamePattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}_bunq-(transactieoverzicht|statement)\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Inflow", "skip", "skip", "Payee", "Memo"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L627", + "inputColumns": [ + "Date", + "Inflow", + "skip", + "skip", + "Payee", + "Memo" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L627", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1234,8 +1382,15 @@ "country": "nl", "filenamePattern": "bunq-export\\.[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{6}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Inflow", "skip", "Payee", "skip", "Memo"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L637", + "inputColumns": [ + "Date", + "Inflow", + "skip", + "Payee", + "skip", + "Memo" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L637", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1261,7 +1416,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L650", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L650", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1282,9 +1437,13 @@ "skip", "Memo" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L658", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L658", "dateFormat": "%Y%m%d", - "inflowOutflowFlag": ["5", "Af", "Bij"], + "inflowOutflowFlag": [ + "5", + "Af", + "Bij" + ], "headerRows": 1, "footerRows": 0 }, @@ -1304,9 +1463,13 @@ "skip", "Memo" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L668", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L668", "dateFormat": "%Y%m%d", - "inflowOutflowFlag": ["5", "Bij", "Af"], + "inflowOutflowFlag": [ + "5", + "Bij", + "Af" + ], "headerRows": 1, "footerRows": 0 }, @@ -1333,9 +1496,13 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L682", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L682", "dateFormat": "%d-%m-%Y", - "inflowOutflowFlag": ["3", "C", "D"], + "inflowOutflowFlag": [ + "3", + "C", + "D" + ], "headerRows": 2, "footerRows": 0 }, @@ -1358,9 +1525,13 @@ "Memo", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L694", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L694", "dateFormat": "%Y%m%d", - "inflowOutflowFlag": ["3", "C", "D"], + "inflowOutflowFlag": [ + "3", + "C", + "D" + ], "headerRows": 0, "footerRows": 0 }, @@ -1397,7 +1568,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L704", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L704", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1422,7 +1593,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L712", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L712", "dateFormat": "%Y%m%d", "headerRows": 1, "footerRows": 0 @@ -1432,8 +1603,14 @@ "country": "no", "filenamePattern": "maanedtransaksjonliste-[a-z]{3}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "skip", "Outflow", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L721", + "inputColumns": [ + "Date", + "Payee", + "skip", + "Outflow", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L721", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -1452,7 +1629,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L730", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L730", "dateFormat": "%d.%m.%Y", "headerRows": 1, "footerRows": 0 @@ -1462,8 +1639,15 @@ "country": "personal", "filenamePattern": "[A-Z][a-z]{2} [0-9]{2}-[0-9]{4} thru [A-Z][a-z]{2} [0-9]{2}-[0-9]{4} transactions\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Memo", "skip", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L738", + "inputColumns": [ + "Date", + "Payee", + "Memo", + "skip", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L738", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1487,7 +1671,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L747", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L747", "dateFormat": "%d-%m-%Y", "headerRows": 2, "footerRows": 0 @@ -1507,7 +1691,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L759", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L759", "headerRows": 1, "footerRows": 0 }, @@ -1528,7 +1712,7 @@ "Memo", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L769", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L769", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1550,7 +1734,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L781", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L781", "dateFormat": "%Y-%m-%d %H:%M:%S", "headerRows": 1, "footerRows": 0 @@ -1560,8 +1744,14 @@ "country": "se", "filenamePattern": ".*konto senaste transaktioner [0-9]{4}-[0-9]{2}-[0-9]{2}\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Date", "Memo", "Payee", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L799", + "inputColumns": [ + "skip", + "Date", + "Memo", + "Payee", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L799", "dateFormat": "%Y-%m-%d", "headerRows": 4, "footerRows": 0 @@ -1571,8 +1761,14 @@ "country": "se", "filenamePattern": "(nordea-)?export\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "skip", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L811", + "inputColumns": [ + "Date", + "Payee", + "skip", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L811", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 2 @@ -1592,7 +1788,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L823", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L823", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1602,8 +1798,15 @@ "country": "se", "filenamePattern": "Export\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "skip", "skip", "Memo", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L834", + "inputColumns": [ + "Date", + "skip", + "skip", + "Memo", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L834", "dateFormat": "%Y-%m-%d", "headerRows": 5, "footerRows": 0 @@ -1613,8 +1816,14 @@ "country": "se", "filenamePattern": "export-\\d*\\.csv", "filenameExtension": "csv", - "inputColumns": ["Payee", "Date", "skip", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L841", + "inputColumns": [ + "Payee", + "Date", + "skip", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L841", "dateFormat": "%Y-%m-%d", "headerRows": 0, "footerRows": 0 @@ -1641,9 +1850,13 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L851", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L851", "dateFormat": "%Y/%m/%d", - "inflowOutflowFlag": ["7", "K", "D"], + "inflowOutflowFlag": [ + "7", + "K", + "D" + ], "headerRows": 2, "footerRows": 3 }, @@ -1652,8 +1865,14 @@ "country": "se", "filenamePattern": "export\\.csv", "filenameExtension": "csv", - "inputColumns": ["Payee", "Date", "skip", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L861", + "inputColumns": [ + "Payee", + "Date", + "skip", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L861", "dateFormat": "%Y-%m-%d", "headerRows": 1, "footerRows": 0 @@ -1677,7 +1896,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L868", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L868", "dateFormat": "%Y-%m-%d", "headerRows": 2, "footerRows": 0 @@ -1696,7 +1915,7 @@ "Memo", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L895", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L895", "dateFormat": "%d %b %Y", "headerRows": 0, "footerRows": 0 @@ -1723,9 +1942,13 @@ "skip", "Memo" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L903", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L903", "dateFormat": "%d.%m.%Y", - "inflowOutflowFlag": ["4", "Kredit", "Debet"], + "inflowOutflowFlag": [ + "4", + "Kredit", + "Debet" + ], "headerRows": 1, "footerRows": 0 }, @@ -1751,7 +1974,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L913", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L913", "dateFormat": "%Y%m%d", "headerRows": 1, "footerRows": 0 @@ -1761,8 +1984,15 @@ "country": "uk", "filenamePattern": "[0-9]{6}_[0-9]{8}_[0-9]{4}-[0-9]{2}-[0-9]{2}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Memo", "Inflow", "Outflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L922", + "inputColumns": [ + "Date", + "Payee", + "Memo", + "Inflow", + "Outflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L922", "headerRows": 1, "footerRows": 0 }, @@ -1785,7 +2015,7 @@ "Memo", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L929", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L929", "dateFormat": "%Y-%m-%d %H:%M:%S +0000", "headerRows": 1, "footerRows": 0 @@ -1805,7 +2035,7 @@ "Inflow", "Outflow" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L936", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L936", "dateFormat": "%d %b %y", "headerRows": 0, "footerRows": 0 @@ -1838,7 +2068,7 @@ "skip", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L944", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L944", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -1848,8 +2078,13 @@ "country": "uk", "filenamePattern": "20[0-9]{6}_[0-9]{8}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L956", + "inputColumns": [ + "Date", + "Payee", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L956", "headerRows": 1, "footerRows": 0 }, @@ -1858,8 +2093,13 @@ "country": "uk", "filenamePattern": "[A-Z_]*_[0-9]{2}-[0-9]{2}-[0-9]{4}_[0-9]{2}-[0-9]{2}-[0-9]{4}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Outflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L963", + "inputColumns": [ + "Date", + "Payee", + "Outflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L963", "dateFormat": "%d-%b-%Y", "headerRows": 1, "footerRows": 0 @@ -1869,8 +2109,12 @@ "country": "uk", "filenamePattern": "transactions\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Outflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L971", + "inputColumns": [ + "Date", + "Payee", + "Outflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L971", "dateFormat": "%d/%m/%Y", "headerRows": 1, "footerRows": 0 @@ -1880,8 +2124,13 @@ "country": "us", "filenamePattern": "stmt(-\\d+)?\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "Payee", "Outflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L980", + "inputColumns": [ + "Date", + "Payee", + "Outflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L980", "dateFormat": "%m/%d/%Y", "headerRows": 7, "footerRows": 0 @@ -1891,8 +2140,14 @@ "country": "us", "filenamePattern": "((Jan|Febr)uary|March|April|May|(Ju(ne|ly))|August|((Sept|Nov|Dec)ember)|October)[0-9]{4}_[0-9]{4}\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "skip", "Memo", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L988", + "inputColumns": [ + "Date", + "skip", + "Memo", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L988", "dateFormat": "%m/%d/%Y", "headerRows": 1, "footerRows": 0 @@ -1902,8 +2157,15 @@ "country": "us", "filenamePattern": "EXPORT\\.csv", "filenameExtension": "csv", - "inputColumns": ["Date", "skip", "skip", "Payee", "Inflow", "skip"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L997", + "inputColumns": [ + "Date", + "skip", + "skip", + "Payee", + "Inflow", + "skip" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L997", "headerRows": 1, "footerRows": 0 }, @@ -1912,8 +2174,14 @@ "country": "us", "filenamePattern": "Chase[0-9]{4}_(Activity_Stmt|RecentActivity)_[0-9]{8}\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Date", "skip", "Memo", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L1006", + "inputColumns": [ + "skip", + "Date", + "skip", + "Memo", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L1006", "dateFormat": "%m/%d/%Y", "headerRows": 1, "footerRows": 0 @@ -1923,8 +2191,16 @@ "country": "us", "filenamePattern": "Chase[0-9]{4}_Activity[0-9]{8}(_[0-9]{8})*\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "Date", "skip", "Memo", "skip", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L1014", + "inputColumns": [ + "skip", + "Date", + "skip", + "Memo", + "skip", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L1014", "dateFormat": "%m/%d/%Y", "headerRows": 1, "footerRows": 0 @@ -1943,7 +2219,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L1021", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L1021", "dateFormat": "%m/%d/%Y", "headerRows": 3, "footerRows": 0 @@ -1962,7 +2238,7 @@ "Inflow", "skip" ], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L1029", + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L1029", "dateFormat": "%m/%d/%Y", "headerRows": 3, "footerRows": 0 @@ -1972,10 +2248,18 @@ "country": "us", "filenamePattern": "bk_download\\.csv", "filenameExtension": "csv", - "inputColumns": ["skip", "skip", "Date", "Memo", "Payee", "skip", "Inflow"], - "link": "https://github.com/bank2ynab/bank2ynab/blob/cf153c196acd809a2e67638df9c8bc157345f567/bank2ynab.conf#L1047", + "inputColumns": [ + "skip", + "skip", + "Date", + "Memo", + "Payee", + "skip", + "Inflow" + ], + "link": "https://github.com/bank2ynab/bank2ynab/blob/develop/bank2ynab.conf#L1047", "dateFormat": "%m/%d/%Y", "headerRows": 0, "footerRows": 0 } -] +] \ No newline at end of file diff --git a/packages/ynap-parsers/src/de/dkb/dkb.spec.ts b/packages/ynap-parsers/src/de/dkb/dkb.spec.ts new file mode 100644 index 000000000..f9d23282e --- /dev/null +++ b/packages/ynap-parsers/src/de/dkb/dkb.spec.ts @@ -0,0 +1,400 @@ +import fs from 'fs' +import { glob } from 'glob' +import { Dictionary } from 'lodash' +import path from 'path' +import { YnabFile } from '../..' +import { readEncodedFile } from '../../util/read-encoded-file' +import { dkb, generateYnabDate } from './dkb' + +interface testData { + file: File + content: string + result: YnabFile[] +} + +const getTestData = async () => { + let testData: Array = [] + + const files = await glob('test-data/*', { + absolute: true, + cwd: __dirname, + }) + + for (const fileName of files) { + const file = new File([fs.readFileSync(fileName)], path.basename(fileName)) + const data = { + file: file, + content: await readEncodedFile(file), + result: null, + } + + if (file.name in ynabResults) { + data.result = ynabResults[file.name] + } else { + throw new Error( + `No YnabFile test result found for ${file.name}. There has to be an entry for each test-data file in ynabResults.` + ) + } + + testData.push(data) + } + + return testData +} + +const ynabResults: Dictionary = { + '07-11-2023_Umsatzliste_Girokonto-Abc_DE12345678901234567891.csv': [ + { + data: [ + { + Date: '11/06/2023', + Payee: 'exampleIssuer', + Memo: '2023-11-03 Debitk.95 VISA Debit', + Outflow: '82.80', + Inflow: undefined, + }, + { + Date: '09/28/2023', + Payee: 'Someone Else', + Memo: 'exampleNote', + Outflow: undefined, + Inflow: '2017.32', + }, + ], + }, + ], + '28-12-2023_Umsatzliste_Gemeinschaftskonto_DE12345678901234567891.csv': [ + { + data: [ + { + Date: '12/28/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '11.79', + Payee: 'Beispielempfaenger 13', + }, + { + Date: '12/27/2023', + Inflow: '400.00', + Memo: 'Beispiel Verwendungszweck', + Outflow: undefined, + Payee: 'Erika Mustermann und Max Mustermann', + }, + { + Date: '12/27/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '51.18', + Payee: 'Beispielempfaenger 2', + }, + { + Date: '12/27/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '12.99', + Payee: 'Beispielempfaenger 3', + }, + { + Date: '12/27/2023', + Inflow: '1230.00', + Memo: 'Gemeinschaftskonto', + Outflow: undefined, + Payee: 'MAX MUSTERMANN UND ERIKA MUSTERMANN', + }, + { + Date: '12/22/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '20.00', + Payee: 'Beispielempfaenger 4', + }, + { + Date: '12/21/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '85.90', + Payee: 'Beispielempfaenger 5', + }, + { + Date: '12/21/2023', + Inflow: '200.00', + Memo: '', + Outflow: undefined, + Payee: 'Max Mustermann', + }, + { + Date: '12/20/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '24.90', + Payee: 'Beispielempfaenger 6', + }, + { + Date: '12/19/2023', + Inflow: '150.00', + Memo: '', + Outflow: undefined, + Payee: 'Max Mustermann und Erika Mustermann', + }, + { + Date: '12/19/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '110.13', + Payee: 'Beispielempfaenger 7', + }, + { + Date: '12/18/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '54.99', + Payee: 'Beispielempfaenger 6', + }, + { + Date: '12/18/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '97.99', + Payee: 'Beispielempfaenger 5', + }, + { + Date: '12/18/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '34.20', + Payee: 'Beispielempfaenger 13', + }, + { + Date: '12/15/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '9.30', + Payee: 'Beispielempfaenger 7', + }, + { + Date: '12/14/2023', + Inflow: '75.97', + Memo: 'Beispiel Verwendungszweck', + Outflow: undefined, + Payee: 'Max Mustermann', + }, + { + Date: '12/14/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '35.00', + Payee: 'Beispielempfaenger 7', + }, + { + Date: '12/13/2023', + Inflow: '12.00', + Memo: 'Beispiel Verwendungszweck', + Outflow: undefined, + Payee: 'Max Mustermann und Erika Mustermann', + }, + { + Date: '12/13/2023', + Inflow: '12.00', + Memo: 'Beispiel Verwendungszweck', + Outflow: undefined, + Payee: 'Max Mustermann und Erika Mustermann', + }, + { + Date: '12/13/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '6.99', + Payee: 'BEISPIEL EMPF/AENGER//8', + }, + { + Date: '12/13/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '22.99', + Payee: 'Beispielempfaenger 9', + }, + { + Date: '12/12/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '10.00', + Payee: 'Beispielempfaenger 10', + }, + { + Date: '12/12/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '22.74', + Payee: 'Beispielempfaenger 11', + }, + { + Date: '12/12/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '4.50', + Payee: 'Beispielempfaenger 13', + }, + { + Date: '12/11/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '122.08', + Payee: 'Beispielempfaenger 12', + }, + { + Date: '12/11/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '8.25', + Payee: 'BEISPIELEMPFAENGER 13', + }, + { + Date: '12/07/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '6.75', + Payee: 'Beispielempfaenger 14', + }, + { + Date: '12/07/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '95.77', + Payee: 'Beispielempfaenger 15', + }, + { + Date: '12/06/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '18.37', + Payee: 'Beispielempfaenger 16', + }, + { + Date: '12/05/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '55.98', + Payee: 'Beispielempfaenger 17', + }, + { + Date: '12/05/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '55.00', + Payee: 'Beispielempfaenger 18', + }, + { + Date: '12/05/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '12.99', + Payee: 'Beispielempfaenger 19', + }, + { + Date: '12/04/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '24.00', + Payee: 'Beispielempfaenger 20', + }, + { + Date: '12/04/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '23.89', + Payee: 'Beispielempfaenger 21', + }, + { + Date: '12/04/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '49.00', + Payee: 'Beispiel GmbH Beispielstr. 1', + }, + { + Date: '12/01/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '1020.00', + Payee: 'Beispielempfaenger 22', + }, + { + Date: '12/01/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '49.00', + Payee: + 'Beispielempfaenger Beispielempfaenger Beispielempfaenger Beispielempfaenger Beispielempfaenger 23', + }, + { + Date: '12/01/2023', + Inflow: undefined, + Memo: 'Beispiel Verwendungszweck', + Outflow: '21.00', + Payee: 'Beispielempfaenger 1', + }, + ], + }, + ], +} + +describe('DKB', () => { + let testData: Array + beforeAll(async () => { + testData = await getTestData() + }) + + describe('Matcher', () => { + it('should match DKB files by file name', async () => { + for (const test of testData) { + const result2 = !!test.file.name.match(dkb.filenamePattern) + expect(result2).toBe(true) + } + }) + + it('should not match other files by file name', async () => { + const invalidFile = new File([], 'test.csv') + const result = await dkb.match(invalidFile) + expect(result).toBe(false) + }) + + it('should match DKB files by fields', async () => { + for (const test of testData) { + const result = await dkb.match(test.file) + expect(result).toBe(true) + } + }) + + it('should not match empty files', async () => { + const file = new File([], 'test.csv') + const result = await dkb.match(file) + expect(result).toBe(false) + }) + }) + + describe('Parser', () => { + it('should parse data correctly', async () => { + for (const test of testData) { + const result = await dkb.parse(test.file) + expect(result).toEqual(test.result) + } + }) + }) + + describe('Date Converter', () => { + it('should format an input date correctly', () => { + expect(generateYnabDate('03.05.2018')).toEqual('05/03/2018') + expect(generateYnabDate('3.05.2018')).toEqual('05/03/2018') + expect(generateYnabDate('03.5.2018')).toEqual('05/03/2018') + expect(generateYnabDate('3.5.2018')).toEqual('05/03/2018') + expect(generateYnabDate('03.05.18')).toEqual('05/03/2018') + expect(generateYnabDate('3.05.18')).toEqual('05/03/2018') + expect(generateYnabDate('03.5.18')).toEqual('05/03/2018') + expect(generateYnabDate('3.5.18')).toEqual('05/03/2018') + }) + + it('should throw an error when the input date is incorrect', () => { + expect(() => generateYnabDate('1.1.1')).toThrow('not a valid date') + }) + }) +}) diff --git a/packages/ynap-parsers/src/de/dkb/dkb.ts b/packages/ynap-parsers/src/de/dkb/dkb.ts new file mode 100644 index 000000000..08ab98ca1 --- /dev/null +++ b/packages/ynap-parsers/src/de/dkb/dkb.ts @@ -0,0 +1,129 @@ +import { MatcherFunction, ParserFunction, ParserModule, YnabFile } from '../..' +import { parse } from '../../util/papaparse' +import { readEncodedFile } from '../../util/read-encoded-file' + +export interface DKBRow { + Buchungsdatum: string + Wertstellung: string + Status: string + 'Zahlungspflichtige*r': string + 'Zahlungsempfänger*in': string + Verwendungszweck: string + Umsatztyp: string + IBAN: string + 'Betrag (€)': string + 'Gläubiger-ID': string + Mandatsreferenz: string + Kundenreferenz: string +} + +export const generateYnabDate = (input: string): string => { + const match = input.match(/(\d{1,2})\.(\d{1,2})\.(\d{2,4})/) + + if (!match) { + throw new Error( + 'The input is not a valid date. Expected format: DD.MM.YYYY' + ) + } + + const [, day, month, year] = match + return [ + month.padStart(2, '0'), + day.padStart(2, '0'), + year.padStart(4, '20'), + ].join('/') +} + +const parseNumber = (input: string): number => { + const number = Number(input.replace(/[^\d,-]/g, '').replace(',', '.')) + return number +} + +const trimMetaData = (input: string): string => { + return input.substring(input.indexOf('"Buchungsdatum";')) +} + +export const DKBParser: ParserFunction = async ( + file: File +): Promise => { + const fileString = trimMetaData(await readEncodedFile(file)) + const { data } = await parse(fileString, { header: true, delimiter: ';' }) + return [ + { + data: (data as DKBRow[]) + .filter( + r => + r.Status === 'Gebucht' && + r.Wertstellung && + r['Betrag (€)'] && + r['Betrag (€)'] != '0' + ) + .map(r => ({ + Date: generateYnabDate(r.Wertstellung), + Payee: r['Zahlungsempfänger*in'].replace(/\s+/g, ' ').trim(), + Memo: r.Verwendungszweck.replace(/\s+/g, ' ').trim(), + Outflow: + parseNumber(r['Betrag (€)']) < 0 + ? (-parseNumber(r['Betrag (€)'])).toFixed(2) + : undefined, + Inflow: + parseNumber(r['Betrag (€)']) > 0 + ? parseNumber(r['Betrag (€)']).toFixed(2) + : undefined, + })), + }, + ] +} + +export const DKBMatcher: MatcherFunction = async ( + file: File +): Promise => { + const requiredKeys: (keyof DKBRow)[] = [ + 'Buchungsdatum', + 'Wertstellung', + 'Status', + 'Zahlungspflichtige*r', + 'Zahlungsempfänger*in', + 'Verwendungszweck', + 'Umsatztyp', + 'IBAN', + 'Betrag (€)', + 'Gläubiger-ID', + 'Mandatsreferenz', + 'Kundenreferenz', + ] + const rawFileString = await readEncodedFile(file) + + try { + const { data } = await parse(trimMetaData(rawFileString), { + header: true, + delimiter: ';', + }) + + if (data.length === 0) { + return false + } + + const keys = Object.keys(data[0]) + const missingKeys = requiredKeys.filter(k => !keys.includes(k)) + + if (missingKeys.length === 0) { + return true + } + } catch (e) { + return false + } + + return false +} + +export const dkb: ParserModule = { + name: 'Deutsche Kreditbank', + country: 'de', + link: 'https://www.dkb.de/fragen-antworten', + fileExtension: 'csv', + filenamePattern: + /^[0-9]{2}-[0-9]{2}-[0-9]{4}_Umsatzliste_[\S]*_DE[0-9]{20}\.csv$/, + match: DKBMatcher, + parse: DKBParser, +} diff --git a/packages/ynap-parsers/src/bank2ynab/test-data/07-11-2023_Umsatzliste_Girokonto-Abc_DE12345678901234567891.csv b/packages/ynap-parsers/src/de/dkb/test-data/07-11-2023_Umsatzliste_Girokonto-Abc_DE12345678901234567891.csv similarity index 100% rename from packages/ynap-parsers/src/bank2ynab/test-data/07-11-2023_Umsatzliste_Girokonto-Abc_DE12345678901234567891.csv rename to packages/ynap-parsers/src/de/dkb/test-data/07-11-2023_Umsatzliste_Girokonto-Abc_DE12345678901234567891.csv diff --git a/packages/ynap-parsers/src/de/dkb/test-data/28-12-2023_Umsatzliste_Gemeinschaftskonto_DE12345678901234567891.csv b/packages/ynap-parsers/src/de/dkb/test-data/28-12-2023_Umsatzliste_Gemeinschaftskonto_DE12345678901234567891.csv new file mode 100644 index 000000000..d4dd07ca1 --- /dev/null +++ b/packages/ynap-parsers/src/de/dkb/test-data/28-12-2023_Umsatzliste_Gemeinschaftskonto_DE12345678901234567891.csv @@ -0,0 +1,45 @@ + +"" +"Kontostand vom 28.12.2023:";"722,71 EUR" +"" +"Buchungsdatum";"Wertstellung";"Status";"Zahlungspflichtige*r";"Zahlungsempfänger*in";"Verwendungszweck";"Umsatztyp";"IBAN";"Betrag (€)";"Gläubiger-ID";"Mandatsreferenz";"Kundenreferenz" +"28.12.23";"28.12.23";"Gebucht";"Max Mustermann Heidestrasse 17";"Beispielempfaenger 13";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-11,79";"LUBeispiel";"Beispiel";"Beispiel" +"27.12.23";"02.01.24";"Vorgemerkt";"Max Mustermann und Erika Mustermann";"Beispielempfaenger 1";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-21";"Beispiel";"Beispiel-Beispiel-Beispiel";"Beispiel" +"27.12.23";"27.12.23";"Gebucht";"Erika Mustermann";"Erika Mustermann und Max Mustermann";"Beispiel Verwendungszweck";"Eingang";"DE12345678901234567891";"400";"";"";"" +"27.12.23";"27.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 2";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-51,18";"";"";"Beispiel" +"27.12.23";"27.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 3";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-12,99";"";"";"Beispiel" +"27.12.23";"27.12.23";"Gebucht";"Max Mustermann";"MAX MUSTERMANN UND ERIKA MUSTERMANN";"Gemeinschaftskonto";"Eingang";"DE12345678901234567891";"1.230";"";"";"" +"22.12.23";"22.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 4";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-20";"";"";"Beispiel" +"21.12.23";"21.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 5";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-85,9";"";"";"Beispiel" +"21.12.23";"21.12.23";"Gebucht";"Max Mustermann";"Max Mustermann";"";"Eingang";"DE12345678901234567891";"200";"";"";"" +"20.12.23";"20.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 6";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-24,9";"";"";"Beispiel" +"19.12.23";"19.12.23";"Gebucht";"Max Mustermann";"Max Mustermann und Erika Mustermann";"";"Eingang";"DE12345678901234567891";"150";"";"";"" +"19.12.23";"19.12.23";"Gebucht";"Max Mustermann";"Beispielempfaenger 7";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-110,13";"Beispiel";"Beispiel";"Beispiel" +"18.12.23";"18.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 6";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-54,99";"";"";"Beispiel" +"18.12.23";"18.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 5";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-97,99";"";"";"Beispiel" +"18.12.23";"18.12.23";"Gebucht";"Max Mustermann Heidestrasse 17";"Beispielempfaenger 13";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-34,2";"LUBeispiel";"Beispiel";"Beispiel" +"15.12.23";"15.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 7";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-9,3";"";"";"Beispiel" +"14.12.23";"14.12.23";"Gebucht";"Beispielsender";"Max Mustermann";"Beispiel Verwendungszweck";"Eingang";"DE12345678901234567891";"75,97";"";"";"Beispiel" +"14.12.23";"14.12.23";"Gebucht";"MUSTERMANN MAX";"Beispielempfaenger 7";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-35";"Beispiel";"Beispiel";"Beispiel" +"13.12.23";"13.12.23";"Gebucht";"Leon Mustermann";"Max Mustermann und Erika Mustermann";"Beispiel Verwendungszweck";"Eingang";"DE12345678901234567891";"12";"";"";"" +"13.12.23";"13.12.23";"Gebucht";"Leon Mustermann";"Max Mustermann und Erika Mustermann";"Beispiel Verwendungszweck";"Eingang";"DE12345678901234567891";"12";"";"";"" +"13.12.23";"13.12.23";"Gebucht";"ISSUER";"BEISPIEL EMPF/AENGER//8";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-6,99";"";"";"Beispiel" +"13.12.23";"13.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 9";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-22,99";"";"";"Beispiel" +"12.12.23";"12.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 10";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-10";"";"";"Beispiel" +"12.12.23";"12.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 11";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-22,74";"";"";"Beispiel" +"12.12.23";"12.12.23";"Gebucht";"Max Mustermann Heidestrasse 17";"Beispielempfaenger 13";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-4,5";"LUBeispiel";"Beispiel";"Beispiel" +"11.12.23";"11.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 12";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-122,08";"";"";"Beispiel" +"11.12.23";"11.12.23";"Gebucht";"Erika Mustermann";"BEISPIELEMPFAENGER 13";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-8,25";"Beispiel";"Beispiel-01";"Beispiel" +"07.12.23";"07.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 14";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-6,75";"";"";"Beispiel" +"07.12.23";"07.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 15";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-95,77";"";"";"Beispiel" +"06.12.23";"06.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 16";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-18,37";"";"";"Beispiel" +"05.12.23";"05.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 17";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-55,98";"";"";"Beispiel" +"05.12.23";"05.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 18";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-55";"";"";"Beispiel" +"05.12.23";"05.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 19";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-12,99";"";"";"Beispiel" +"04.12.23";"04.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 20";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-24";"";"";"Beispiel" +"04.12.23";"04.12.23";"Gebucht";"ISSUER";"Beispielempfaenger 21";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-23,89";"";"";"Beispiel" +"04.12.23";"04.12.23";"Gebucht";"Mustermann Erika Heidestr., 17 51147 Köln";"Beispiel GmbH Beispielstr. 1";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-49";"Beispiel";"Beispiel";"Beispiel Beispiel" +"01.12.23";"01.12.23";"Gebucht";"Max Mustermann und Erika Mustermann";"Beispielempfaenger 22";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-1.020";"";"";"" +"01.12.23";"01.12.23";"Gebucht";"Mustermann Heidestrasse 17";"Beispielempfaenger Beispielempfaenger Beispielempfaenger Beispielempfaenger Beispielempfaenger 23";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-49";"Beispiel";"0001-Beispiel";"Beispiel" +"01.12.23";"01.12.23";"Gebucht";"Max Mustermann und Erika Mustermann";"Beispielempfaenger 1";"Beispiel Verwendungszweck";"Ausgang";"DE12345678901234567891";"-21";"DE60ZZZ00000259140";"Beispiel-Beispiel-001";"Beispiel" +"02.10.23";"01.10.23";"Gebucht";"";"DKB AG";"Abrechnung 29.09.2023 siehe Anlage Abrechnung 29.09.2023 Information zur Abrechnung Kontostand am 29.09.2023";"Eingang";"DE12345678901234567891";"0";"";"";"" diff --git a/packages/ynap-parsers/src/de/ing-diba/ing-diba.spec.ts b/packages/ynap-parsers/src/de/ing-diba/ing-diba.spec.ts index 2246313d3..7de7d8a51 100644 --- a/packages/ynap-parsers/src/de/ing-diba/ing-diba.spec.ts +++ b/packages/ynap-parsers/src/de/ing-diba/ing-diba.spec.ts @@ -1,6 +1,6 @@ -import { generateYnabDate, ingDiBa } from './ing-diba' -import { YnabRow, YnabFile } from '../..' import { encode } from 'iconv-lite' +import { YnabFile } from '../..' +import { generateYnabDate, ingDiBa } from './ing-diba' const content = encode( `Umsatzanzeige;Datei erstellt am: 03.04.2019 22:16 diff --git a/packages/ynap-parsers/src/index.ts b/packages/ynap-parsers/src/index.ts index 61b71a686..fa1b4d808 100644 --- a/packages/ynap-parsers/src/index.ts +++ b/packages/ynap-parsers/src/index.ts @@ -1,31 +1,32 @@ -import { unparse } from 'papaparse' import 'mdn-polyfills/String.prototype.padStart' +import { unparse } from 'papaparse' -import uniq from 'lodash/uniq' import last from 'lodash/last' +import uniq from 'lodash/uniq' -import { outbank } from './de/outbank/outbank' import { _1822direkt } from './de/1822direkt/1822direkt' -import { n26 } from './de/n26/n26' -import { revolut } from './international/revolut/revolut' -import { ingDiBa } from './de/ing-diba/ing-diba' import { comdirect } from './de/comdirect/comdirect' +import { ingDiBa } from './de/ing-diba/ing-diba' import { kontist } from './de/kontist/kontist' +import { n26 } from './de/n26/n26' +import { outbank } from './de/outbank/outbank' import { volksbankEG } from './de/volksbank-eg/volksbank-eg' +import { revolut } from './international/revolut/revolut' import { ingAustria } from './at/ing/ing-austria' -import { bancomer } from './mx/bbva-bancomer/bbva-bancomer' import { piraeus } from './gr/piraeus/piraeus' -import { marcus } from './uk/marcus/marcus' +import { bancomer } from './mx/bbva-bancomer/bbva-bancomer' import { aqua } from './uk/aqua/aqua' +import { marcus } from './uk/marcus/marcus' import { bank2ynab } from './bank2ynab/bank2ynab' +import { mt940 } from './international/mt940/mt940' import { sparbankenTanum as sparbankenTanum2018 } from './se/sparbanken-tanum/2018/sparbanken-tanum' import { sparbankenTanum as sparbankenTanum2019 } from './se/sparbanken-tanum/2019/sparbanken-tanum' -import { mt940 } from './international/mt940/mt940' -import { mbank } from './pl/mbank/mbank' +import { dkb } from './de/dkb/dkb' import { bankPocztowy } from './pl/bank-pocztowy/bank-pocztowy' +import { mbank } from './pl/mbank/mbank' import { seb } from './se/seb-privat/seb' export interface YnabRow { @@ -67,6 +68,7 @@ export const parsers: ParserModule[] = [ kontist, volksbankEG, _1822direkt, + dkb, // GR piraeus,