From 58fa77009720f55c84ccc7ca6d5ae5a2a915a5f3 Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Fri, 21 Jan 2022 16:27:26 +1000 Subject: [PATCH 1/7] Initial commit for moneymanager output --- pytest.ini | 12 +++++ src/__init__.py | 0 converter.py => src/converter.py | 78 ++++++++++++++++++++++++-------- src/tests/__init__.py | 0 src/tests/test_converter.py | 45 ++++++++++++++++++ 5 files changed, 116 insertions(+), 19 deletions(-) create mode 100644 pytest.ini create mode 100644 src/__init__.py rename converter.py => src/converter.py (74%) create mode 100644 src/tests/__init__.py create mode 100644 src/tests/test_converter.py diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..1b8d5f9 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,12 @@ +[pytest] +env = + D:DB_HOST='' + D:DB_PORT=1 + D:DB_NAME='' + +mongodb_fixture_dir = + src/tests/mongo_fixtures + +mongodb_fixtures = + imported_transactions + accounts \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/converter.py b/src/converter.py similarity index 74% rename from converter.py rename to src/converter.py index 332f010..0b33d98 100644 --- a/converter.py +++ b/src/converter.py @@ -16,7 +16,7 @@ import time import watchdog.events import watchdog.observers -DATE_FORMAT = "%d/%m/%Y" +MB_DATE_FORMAT = "%d/%m/%Y" if 'WATCH_DIR' in os.environ: WATCH_DIR = os.environ['WATCH_DIR'] @@ -34,20 +34,41 @@ MONGO_COL = 'imported_transactions' ACCOUNT_COL = 'accounts' MONGO_URL = "mongodb://{}:{}".format(MONGO_URL, MONGO_PORT) -myclient = pymongo.MongoClient(MONGO_URL) -mydb = myclient[MONGO_DB] -mongo_col = mydb[MONGO_COL] -account_col = mydb[ACCOUNT_COL] logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.INFO) logging.basicConfig(format='ERROR: %(asctime)s - %(message)s', level=logging.ERROR) class Handler(watchdog.events.PatternMatchingEventHandler): - def __init__(self): + mydb = None + + def __init__(self, mongo_db=None): # Set the patterns for PatternMatchingEventHandler watchdog.events.PatternMatchingEventHandler.__init__(self, patterns=['*.qfx'], ignore_directories=True, case_sensitive=False) + + if mongo_db is None: + myclient = pymongo.MongoClient(MONGO_URL) + mydb = myclient[MONGO_DB] + else: + self.mydb = mongo_db + + #mongo_col = mydb[MONGO_COL] + #account_col = mydb[ACCOUNT_COL] + @staticmethod + def line_to_moneybrilliant(line): + return { + 'date': line['date'].strftime(MB_DATE_FORMAT), + 'memo' : line['memo'], + 'category': 'Uncategorised', + 'amount': line['amount'], + 'name': line['name'] + } + + @staticmethod + def line_to_mmex(line): + return '' + @staticmethod def write_csv(statement, out_file): logging.info("Writing: " + out_file) @@ -62,11 +83,27 @@ class Handler(watchdog.events.PatternMatchingEventHandler): f.write("\r\n") writer = DictWriter(f, fieldnames=fields) for line in statement: - writer.writerow(line) + writer.writerow(Handler.line_to_moneybrilliant(line)) + @staticmethod - def transaction_exists(line): - existing_trans = mongo_col.find_one(line) + def write_mmex(statement, outfile): + logging.info("Writing: " + out_file) + + if len(statement) == 0: + logging.info("No transactions to write.") + return + + fields = ['date', 'payee', 'amount', 'category', 'subcategory', 'number', 'notes'] + with open(out_file, 'w') as f: + f.write("Date,Payee,Amount,Category,Sub Category,Number,Notes") + f.write("\r\n") + writer = DictWriter(f, fieldnames=fields) + for line in statement: + writer.writerow(line) + + def transaction_exists(self, line): + existing_trans = self.mydb[MONGO_COL].find_one(line) return existing_trans is not None @@ -87,10 +124,9 @@ class Handler(watchdog.events.PatternMatchingEventHandler): return dict_item - @staticmethod - def get_statement_from_qfx(qfx): + def get_statement_from_qfx(self, qfx): - account = account_col.find_one({"number": qfx.account.number}) + account = self.mydb[ACCOUNT_COL].find_one({"number": qfx.account.number}) if account is None: logging.error("No account for account number {} exists. Create one and re-process the file".format(qfx.account.number)) @@ -101,21 +137,25 @@ class Handler(watchdog.events.PatternMatchingEventHandler): continue line = { - 'date': transaction.date.strftime(DATE_FORMAT), + 'id': transaction.id, + 'date': transaction.date,#.strftime(DATE_FORMAT), 'memo' : transaction.memo, - 'category': 'Uncategorised', + #'category': 'Uncategorised', 'amount': transaction.amount, - 'name': account['name'] + 'name': account['name'], + 'payee': transaction.payee, + 'type': transaction.type } - #mongo needs the decimal values in Decimal128, so create a version for it - line_d128 = Handler.convert_decimal(line.copy()) - if Handler.transaction_exists(line_d128): + #mongo needs the decimal values in Decimal128, so create a version for it + line_d128 = self.convert_decimal(line.copy()) + + if self.transaction_exists(line_d128): continue statement.append(line) - result = mongo_col.insert_one(line_d128) + result = self.mydb[MONGO_COL].insert_one(line_d128) logging.info("New db entry stored: {}".format(result.inserted_id)) return statement, account['name'] diff --git a/src/tests/__init__.py b/src/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/tests/test_converter.py b/src/tests/test_converter.py new file mode 100644 index 0000000..7c959ee --- /dev/null +++ b/src/tests/test_converter.py @@ -0,0 +1,45 @@ +from ..converter import Handler + +from pathlib import Path +from ofxparse import OfxParser +from datetime import datetime +from decimal import Decimal, getcontext + +import os + +class TestConverter: + def test_get_statement_from_qfx(self, mongodb): + + test_file = Path(os.getcwd()) / 'src' / 'tests' / 'sampleTrans1.qfx' + + with open(test_file, 'r') as file: + qfx = OfxParser.parse(file, fail_fast=False) + + handler = Handler(mongodb) + + statement, account = handler.get_statement_from_qfx(qfx) + + assert account == 'HSBC Everyday Global' + assert len(statement) == mongodb['imported_transactions'].find({}).count() + + + def test_line_to_moneybrilliant(self): + samples = [ + {'id': '202201900001', 'date': '20220119', 'memo': 'GOLDEN PRAWN 15JAN22... GENERATED', 'amount': 1.04, 'name': 'HSBC Everyday Global', 'payee': '2% CASHBACK - ENJOY', 'type': 'credit'}, + {'id': '202201900003', 'date': '20220119', 'memo': '19JAN22 ATMA896 08:2...843015 ATM', 'amount': -52.20, 'name': 'HSBC Everyday Global', 'payee': 'GOLDEN PRAWN', 'type': 'debit'}, + {'id': '202201400001', 'date': '20220114', 'memo': '14JAN22 127196 18:3...892226 ATM', 'amount': -23.15, 'name': 'HSBC Everyday Global', 'payee': 'ALDI STORES - DARRA', 'type': 'debit'} + ] + + sample = samples[0] + sample['date'] = datetime.strptime(sample['date'], "%Y%m%d") + sample['amount'] = round(Decimal(sample['amount']), 2) + result = Handler.line_to_moneybrilliant(sample) + + assert len(result) == 5 + assert result['date'] == '19/01/2022' + assert result['memo'] == 'GOLDEN PRAWN 15JAN22... GENERATED' + assert result['category'] == 'Uncategorised' + assert result['amount'] == Decimal('1.04') + assert result['name'] == 'HSBC Everyday Global' + + From f24fcef0e71f4f4e7a026cd943dfc95d4463cc05 Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Fri, 21 Jan 2022 16:43:31 +1000 Subject: [PATCH 2/7] Added redacted test files --- src/tests/mongo_fixtures/accounts.yaml | 7 + src/tests/mortgageTrans.qfx | 114 ++++ src/tests/sampleTrans1.qfx | 789 +++++++++++++++++++++++ src/tests/sampleTrans2.qfx | 825 +++++++++++++++++++++++++ 4 files changed, 1735 insertions(+) create mode 100644 src/tests/mongo_fixtures/accounts.yaml create mode 100644 src/tests/mortgageTrans.qfx create mode 100644 src/tests/sampleTrans1.qfx create mode 100644 src/tests/sampleTrans2.qfx diff --git a/src/tests/mongo_fixtures/accounts.yaml b/src/tests/mongo_fixtures/accounts.yaml new file mode 100644 index 0000000..aad545a --- /dev/null +++ b/src/tests/mongo_fixtures/accounts.yaml @@ -0,0 +1,7 @@ +- + number: 123456 123456789 + name: Account 1 + +- + number: 123457 123456780 + name: Account 2 diff --git a/src/tests/mortgageTrans.qfx b/src/tests/mortgageTrans.qfx new file mode 100644 index 0000000..4536b14 --- /dev/null +++ b/src/tests/mortgageTrans.qfx @@ -0,0 +1,114 @@ +OFXHEADER:100 +DATA:OFXSGML +VERSION:102 +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUID:NONE + + + + + + 0 + INFO + + 20220114064514 + + ENG + + A Bank + 12345 + + 12345 + XXXXXXXXXXXXXXXXXXXXXXXXXX + + + + + 0 + + 0 + INFO + + + AUD + + 000000001 + 123457 123456780 + CREDITLINE + + + + + + CREDIT + 20220114 + 20220114 + 2680.93 + 202201400001 + TRANSFER + FROM 000-000000-000 AUD IB1508519 INTERNET BANKING + + + CREDIT + 20220111 + 20220111 + 409.26 + 202201100001 + TRANSFER + Loan Payment From: 000-000000-000 TO: 101-576544-258 ZAL101795 SYSTEM GENERATED + + + CREDIT + 20220111 + 20220111 + 1086.41 + 202201100002 + TRANSFER + FROM 000-000000-000 AUD IB0205258 INTERNET BANKING + + + CREDIT + 20220106 + 20220106 + 1173.71 + 202200600001 + TRANSFER + FROM 000-000000-000 AUD IB1305543 INTERNET BANKING + + + CREDIT + 20220106 + 20220106 + 628.81 + 202200600002 + TRANSFER + FROM 000-000000-000 AUD IB1004824 INTERNET BANKING + + + DEBIT + 20220104 + 20220104 + -399440.42 + 202200400001 + TRANSFER + BANKING TERMINAL (UBT + + + + -393461.30 + 20220114064514 + + + + 5979.12 + 20220114064514 + + + + + + diff --git a/src/tests/sampleTrans1.qfx b/src/tests/sampleTrans1.qfx new file mode 100644 index 0000000..2e4d4af --- /dev/null +++ b/src/tests/sampleTrans1.qfx @@ -0,0 +1,789 @@ +OFXHEADER:100 +DATA:OFXSGML +VERSION:102 +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUID:NONE + + + + + + 0 + INFO + + 20220118225636 + + ENG + + Bank 1 + 000000 + + 000000 + XXXXXXXXXXXXXXXXXXXXXXXXXX + + + + + 0 + + 0 + INFO + + + AUD + + 000000001 + 123456 123456789 + MST + + + 20211221 + 20220119 + + DEBIT + 20220118 + 20220118 + -35.10 + 202201800001 + PENDING: Guzman y Gomez + Augustine Hei A960 ATM + + + CREDIT + 20220118 + 20220118 + 0.70 + 202201800002 + PENDING: 2% Cashback - Enjoy + Guzman y Gomez ATM + + + DEBIT + 20220118 + 20220118 + -127.75 + 202201800003 + PENDING: 1300 SMILES LTD + SPRINGFIELD L A960 ATM + + + DEBIT + 20220117 + 20220117 + -0.01 + 202201700001 + PENDING: PAYPAL + 4029357733 A960 ATM + + + DEBIT + 20220116 + 20220116 + -0.01 + 202201600001 + PENDING: GOOGLE *TEMPORARY HOLD + g.co/helppay# A960 ATM + + + DEBIT + 20220111 + 20220111 + -0.01 + 202201100001 + PENDING: RAINBOW MUSIC + +61417957568 A960 ATM + + + CREDIT + 20220119 + 20220119 + 1.04 + 202201900001 + 2% CASHBACK - ENJOY + GOLDEN PRAWN 15JAN22 619377 18:41:21 2% Cashback - Enjoy 619377 BONGAREE 36 8316 Z@MF16897 SYSTEM GENERATED + + + CREDIT + 20220119 + 20220119 + 0.12 + 202201900002 + 2% CASHBACK - ENJOY + GOLDEN PRAWN 15JAN22 316718 18:47:54 2% Cashback - Enjoy 316718 BONGAREE 36 8316 Z@MF16895 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -52.20 + 202201900003 + GOLDEN PRAWN + 19JAN22 ATMA896 08:27:13 8316 VISA AUD GOLDEN PRAWN 619377 BONGAREE AU A88843015 ATM + + + DEBIT + 20220119 + 20220119 + -6.00 + 202201900004 + GOLDEN PRAWN + 19JAN22 ATMA896 08:27:13 8316 VISA AUD GOLDEN PRAWN 316718 BONGAREE AU A88843014 ATM + + + DEBIT + 20220119 + 20220119 + -38.95 + 202201900005 + PAYPAL *OZSALEPTYLI + 19JAN22 ATMA896 08:01:37 8316 VISA AUD PAYPAL *OZSALEPTYLI 637484 4029357733 AU A88826216 ATM + + + CREDIT + 20220119 + 20220119 + 0.33 + 202201900006 + 2% CASHBACK - ENJOY + PASHELL PTY LTD 15JAN22 612537 12:37:17 2% Cashback - Enjoy 612537 BONGAREE 36 8313 Z@MF07258 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -16.50 + 202201900007 + PASHELL PTY LTD + 19JAN22 ATMA896 07:50:25 8313 VISA AUD PASHELL PTY LTD 612537 BONGAREE AU A88818248 ATM + + + CREDIT + 20220119 + 20220119 + 0.78 + 202201900008 + 2% CASHBACK - ENJOY + MCDONALDS IPSWICH CBD 16JAN22 121470 13:07:09 2% Cashback - Enjoy 121470 IPSWICH 36 8313 Z@MF05798 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -39.25 + 202201900009 + MCDONALDS IPSWICH CBD + 19JAN22 ATMA896 07:47:49 8313 VISA AUD MCDONALDS IPSWICH CBD 121470 IPSWICH AU A88814498 ATM + + + CREDIT + 20220119 + 20220119 + 0.49 + 202201900010 + 2% CASHBACK - ENJOY + SCOOPY'S FAMILY CAFE 15JAN22 113492 17:55:19 2% Cashback - Enjoy 113492 BONGAREE 36 8316 Z@MF01573 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -24.70 + 202201900011 + SCOOPY'S FAMILY CAFE + 19JAN22 ATMA896 07:35:17 8316 VISA AUD SCOOPY'S FAMILY CAFE 113492 BONGAREE AU A88803426 ATM + + + DEBIT + 20220118 + 20220118 + -409.26 + 202201800001 + TRANSFER + Loan Payment From: 000-000000-000 TO: 000-000000-001 ZAL102098 SYSTEM GENERATED + + + DEBIT + 20220118 + 20220118 + -31.80 + 202201800002 + PAYPAL *EBAY AU + 18JAN22 ATMA896 08:41:03 8316 VISA AUD PAYPAL *EBAY AU 630721 4029357733 AU A88825889 ATM + + + DEBIT + 20220118 + 20220118 + -14.99 + 202201800003 + PAYPAL *EBAY AU + 18JAN22 ATMA896 08:40:46 8316 VISA AUD PAYPAL *EBAY AU 125007 4029357733 AU A88825446 ATM + + + DEBIT + 20220118 + 20220118 + -16.89 + 202201800004 + HUNGRY JACKS + 18JAN22 ATMA896 07:33:30 8316 VISA AUD Hungry Jacks 826946 Springfield AU A88803533 ATM + + + CREDIT + 20220117 + 20220117 + 1.71 + 202201700001 + 2% CASHBACK - ENJOY + WOOLWORTHS/SPRINGFIELD P 16JAN22 628920 15:13:10 2% Cashback - Enjoy 628920 SPRINGFI 36 8313 Z@MF96719 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -85.71 + 202201700002 + WOOLWORTHS/SPRINGFIELD P + 17JAN22 ATMA896 09:08:49 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 628920ASPRINGFIELD AU A88849865 ATM + + + DEBIT + 20220117 + 20220117 + -50.00 + 202201700003 + PAYPAL *WCI INT AU + 17JAN22 ATMA896 08:53:08 8316 VISA AUD PAYPAL *WCI INT AU 512078 4029357733 AU A88815885 ATM + + + CREDIT + 20220117 + 20220117 + 0.34 + 202201700004 + 2% CASHBACK - ENJOY + SPRINGFIELD LAKE BAK 14JAN22 696107 09:58:40 2% Cashback - Enjoy 696107 SPRINGFI 36 8313 Z@MF54064 SYSTEM GENERATED + + + CREDIT + 20220117 + 20220117 + 0.90 + 202201700005 + 2% CASHBACK - ENJOY + ALDI STORES - SPRINGFI 13JAN22 274552 09:40:26 2% Cashback - Enjoy 274552 SPRINGFI 36 8313 Z@MF54063 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -17.00 + 202201700006 + SPRINGFIELD LAKE BAK + 16JAN22 ATMA896 08:28:15 8313 VISA AUD SPRINGFIELD LAKE BAK 696107 SPRINGFIELD LAU A88842807 ATM + + + DEBIT + 20220117 + 20220117 + -45.09 + 202201700007 + ALDI STORES - SPRINGFI + 16JAN22 ATMA896 08:28:15 8313 VISA AUD ALDI STORES - SPRINGFI 274552 SPRINGFIELD AU A88842806 ATM + + + CREDIT + 20220117 + 20220117 + 0.57 + 202201700008 + 2% CASHBACK - ENJOY + WOOLWORTHS/GOODWIN DR & 15JAN22 107268 12:33:50 2% Cashback - Enjoy 107268 BRIBIE I 36 8316 Z@MF37374 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -28.69 + 202201700009 + WOOLWORTHS/GOODWIN DR & + 16JAN22 ATMA896 07:26:34 8316 VISA AUD WOOLWORTHS/GOODWIN DR & 107268HBRIBIE ISLANDAU A88897768 ATM + + + CREDIT + 20220117 + 20220117 + 0.98 + 202201700010 + 2% CASHBACK - ENJOY + SPRINGER LOW VOLTAGE 15JAN22 RINGER 11:15:35 2% Cashback - Enjoy 999999 LAWNTON 36 8316 Z@MF31151 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -49.00 + 202201700011 + SPRINGER LOW VOLTAGE + 15JAN22 002422 11:15:35 8316 EFTPOS SPRINGER LOW VOLTAGE LAWNTON AU A88828243 ATM + + + CREDIT + 20220117 + 20220117 + 1.57 + 202201700012 + 2% CASHBACK - ENJOY + COLES 4533 14JAN22 802693 16:25:16 2% Cashback - Enjoy 802693 SPRINGFI 36 8313 Z@MF25759 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -78.70 + 202201700013 + COLES 4533 + 15JAN22 ATMA896 09:09:11 8313 VISA AUD COLES 4533 802693 SPRINGFIELD AU A88871150 ATM + + + DEBIT + 20220117 + 20220117 + -371.06 + 202201700014 + TRANSFER + TO 000-000000-000 Loan INTERNET BANKING + + + DEBIT + 20220117 + 20220117 + -1047.22 + 202201700015 + TRANSFER + TO 00-000000-000 Loan INTERNET BANKING + + + DEBIT + 20220114 + 20220114 + -23.15 + 202201400001 + ALDI STORES - DARRA + 14JAN22 127196 18:39:44 8316 EFTPOS ALDI STORES - DARRA DARRA AU A88892226 ATM + + + DEBIT + 20220114 + 20220114 + -2680.93 + 202201400002 + TRANSFER + TO 000-000000-000 IB1508519 INTERNET BANKING + + + CREDIT + 20220114 + 20220114 + 4519.71 + 202201400003 + TRANSFER + PaySYSTEM GENERATED + + + CREDIT + 20220114 + 20220114 + 0.95 + 202201400004 + 2% CASHBACK - ENJOY + OFP PTY LTD 13JAN22 585252 09:07:49 2% Cashback - Enjoy 585252 SPRINGFI 36 8313 Z@MF23729 SYSTEM GENERATED + + + DEBIT + 20220114 + 20220114 + -47.50 + 202201400005 + OFP PTY LTD + 14JAN22 ATMA896 08:52:21 8313 VISA AUD OFP PTY LTD 585252 SPRINGFIELD CAU A88863534 ATM + + + DEBIT + 20220114 + 20220114 + -111.15 + 202201400006 + 7-ELEVEN 4079 + 14JAN22 ATMA896 08:46:15 8316 VISA AUD 7-ELEVEN 4079 448002 JINDALEE AU A88856728 ATM + + + DEBIT + 20220113 + 20220113 + -675.00 + 202201300001 + RAINBOW MUSIC + 13JAN22 ATMA896 08:49:41 8313 VISA AUD RAINBOW MUSIC 866033 SPRINGFIELD LAU A88871114 ATM + + + CREDIT + 20220113 + 20220113 + 1.09 + 202201300002 + 2% CASHBACK - ENJOY + PETBARN 13JAN22 TBARN 09:49:36 2% Cashback - Enjoy 999999 SPRINGFI 36 8313 Z@MF20235 SYSTEM GENERATED + + + DEBIT + 20220113 + 20220113 + -54.39 + 202201300003 + PETBARN + 13JAN22 013366 09:49:36 8313 EFTPOS PETBARN SPRINGFIELD CAU A88816881 ATM + + + DEBIT + 20220113 + 20220113 + -474.90 + 202201300004 + ADEL TRAILER HIRE + 13JAN22 ATMA896 08:29:33 8316 VISA AUD ADEL TRAILER HIRE 863776 GLENGOWRIE AU A88847532 ATM + + + DEBIT + 20220113 + 20220113 + -16.49 + 202201300005 + PAYPAL *SUPERCHEAP + 13JAN22 ATMA896 07:51:21 8316 VISA AUD PAYPAL *SUPERCHEAP 659085 4029357733 AU A88827581 ATM + + + CREDIT + 20220112 + 20220112 + 0.22 + 202201200001 + 2% CASHBACK - ENJOY + SPINGFIELD D/N PHARMA 12JAN22 INGFIE 21:05:14 2% Cashback - Enjoy 999999 Springfi 36 8316 Z@MF40585 SYSTEM GENERATED + + + DEBIT + 20220112 + 20220112 + -10.99 + 202201200002 + SPINGFIELD D/N PHARMA + 12JAN22 107246 21:05:14 8316 EFTPOS SPINGFIELD D/N PHARMA Springfield AU A88898388 ATM + + + CREDIT + 20220112 + 20220112 + 0.84 + 202201200003 + 2% CASHBACK - ENJOY + COLES 4533 11JAN22 866854 18:40:32 2% Cashback - Enjoy 866854 SPRINGFI 36 8316 Z@MF33176 SYSTEM GENERATED + + + DEBIT + 20220112 + 20220112 + -42.20 + 202201200001 + COLES 4533 + 12JAN22 ATMA896 09:14:05 8316 VISA AUD COLES 4533 866854 SPRINGFIELD AU A88884369 ATM + + + DEBIT + 20220111 + 20220111 + -409.26 + 202201100001 + TRANSFER + Loan Payment From: 000-000000-000 TO: 000-000000-001 ZAL101795 SYSTEM GENERATED + + + DEBIT + 20220111 + 20220111 + -1086.41 + 202201100002 + TRANSFER + TO 000-000000-000 IB0205258 INTERNET BANKING + + + CREDIT + 20220111 + 20220111 + 1724.85 + 202201100003 + TRANSFER + 0000000 Payroll Acco 000000 Z@LC04991 SYSTEM GENERATED + + + DEBIT + 20220111 + 20220111 + -111.35 + 202201100004 + WOOLWORTHS/SPRINGFIELD P + 11JAN22 ATMA896 09:15:14 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 855223ASPRINGFIELD AU A88887965 ATM + + + DEBIT + 20220111 + 20220111 + -26.00 + 202201100005 + AFTERPAY + 11JAN22 ATMA896 08:25:58 8316 VISA AUD Afterpay 410015 afterpay.com AU A88829480 ATM + + + DEBIT + 20220110 + 20220110 + -99.00 + 202201000001 + TRANSFER + AUSSIE BROADBAND + + + CREDIT + 20220110 + 20220110 + 0.68 + 202201000002 + 2% CASHBACK - ENJOY + SPRINGFIELD LAKE BAK 08JAN22 827190 13:50:10 2% Cashback - Enjoy 827190 SPRINGFI 36 8313 Z@MF73432 SYSTEM GENERATED + + + DEBIT + 20220110 + 20220110 + -33.75 + 202201000003 + SPRINGFIELD LAKE BAK + 10JAN22 ATMA896 09:55:44 8313 VISA AUD SPRINGFIELD LAKE BAK 827190 SPRINGFIELD LAU A88892952 ATM + + + DEBIT + 20220110 + 20220110 + -173.68 + 202201000004 + WOOLWORTHS/SPRINGFIELD P + 08JAN22 ATMA896 09:11:44 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 308996ASPRINGFIELD AU A88869052 ATM + + + CREDIT + 20220110 + 20220110 + 0.64 + 202201000005 + 2% CASHBACK - ENJOY + FOREST LKE DRUG STORE 05JAN22 591481 15:37:09 2% Cashback - Enjoy 591481 FOREST L 36 8313 Z@MF15821 SYSTEM GENERATED + + + DEBIT + 20220110 + 20220110 + -31.98 + 202201000006 + FOREST LKE DRUG STORE + 08JAN22 ATMA896 08:53:44 8313 VISA AUD FOREST LKE DRUG STORE 591481 FOREST LAKE AU A88844754 ATM + + + CREDIT + 20220110 + 20220110 + 0.36 + 202201000007 + 2% CASHBACK - ENJOY + KAISERCRAFT PTY LTD 05JAN22 454947 16:26:14 2% Cashback - Enjoy 454947 NORTH IP 36 8313 Z@MF03993 SYSTEM GENERATED + + + DEBIT + 20220110 + 20220110 + -17.99 + 202201000008 + KAISERCRAFT PTY LTD + 08JAN22 ATMA896 07:43:44 8313 VISA AUD KAISERCRAFT PTY LTD 454947 NORTH IPSWICHAU A88815486 ATM + + + DEBIT + 20220110 + 20220110 + -22.65 + 202201000009 + BUDGET DIRECT + 08JAN22 ATMA896 07:39:53 VISA AUD BUDGET DIRECT TOOWONG AU ATM + + + DEBIT + 20220110 + 20220110 + -49.25 + 202201000010 + HUNGRY JACKS + 08JAN22 ATMA896 07:36:03 VISA AUD Hungry Jacks 508403 Springfield AU A88804914 ATM + + + CREDIT + 20220107 + 20220107 + 0.32 + 202200700001 + 2% CASHBACK - ENJOY + SPOTLIGHT \SPRI 07JAN22 OTLIGH 11:34:29 2% Cashback - Enjoy 999999 GFIELD 36 8313 Z@MF33325 SYSTEM GENERATED + + + DEBIT + 20220107 + 20220107 + -16.00 + 202200700002 + SPOTLIGHT \SPRI + 07JAN22 127038 11:34:29 8313 EFTPOS SPOTLIGHT \SPRI NGFIELD AU A88828477 ATM + + + CREDIT + 20220107 + 20220107 + 1.20 + 202200700003 + 2% CASHBACK - ENJOY + MR TOYS 05JAN22 785391 16:21:49 2% Cashback - Enjoy 785391 IPSWICH 36 8313 Z@MF02726 SYSTEM GENERATED + + + DEBIT + 20220107 + 20220107 + -59.99 + 202200700004 + MR TOYS + 07JAN22 ATMA896 07:34:02 8313 VISA AUD MR TOYS 785391 IPSWICH AU A88808421 ATM + + + DEBIT + 20220106 + 20220106 + -1173.71 + 202200600001 + TRANSFER + TO 000-000-000 IB1305543 INTERNET BANKING + + + CREDIT + 20220106 + 20220106 + 1173.40 + 202200600002 + TRANSFER + WAGES SYSTEM GENERATED + + + CREDIT + 20220106 + 20220106 + 0.13 + 202200600003 + TRANSFER + 1017781448571 PAYPAL AUSTRALIA 0756483 Z@LC11302 SYSTEM GENERATED + + + CREDIT + 20220106 + 20220106 + 0.18 + 202200600004 + TRANSFER + 1017781448572 PAYPAL AUSTRALIA 0756482 Z@LC11301 SYSTEM GENERATED + + + DEBIT + 20220106 + 20220106 + -628.81 + 202200600005 + TRANSFER + TO 000-000-000 IB1004824 INTERNET BANKING + + + CREDIT + 20220106 + 20220106 + 0.62 + 202200600006 + 2% CASHBACK - ENJOY + WOOLWORTHS/PINE ST & THE 05JAN22 890305 16:35:10 2% Cashback - Enjoy 890305 IPSWICH 36 8313 Z@MF14627 SYSTEM GENERATED + + + DEBIT + 20220106 + 20220106 + -30.76 + 202200600007 + WOOLWORTHS/PINE ST & THE + 06JAN22 ATMA896 08:04:01 8313 VISA AUD WOOLWORTHS/PINE ST & THE 890305 IPSWICH AU A88838793 ATM + + + CREDIT + 20220105 + 20220105 + 6160.46 + 202200500001 + TRANSFER + Savings Transfer Z@LC04023 SYSTEM GENERATED + + + DEBIT + 20220105 + 20220105 + -1280.00 + 202200500002 + FROSTEEZ + 05JAN22 002584 11:07:56 8316 EFTPOS FROSTEEZ DURACK AU A88824667 ATM + + + CREDIT + 20220104 + 20220104 + 5000.00 + 202200400001 + TRANSFER + Fund Transfer SYSTEM GENERATED + + + CREDIT + 20220104 + 20220104 + 768.49 + 202200400002 + TRANSFER + 1592204 PEXA217198219D04 0667142 Z@LC09127 SYSTEM GENERATED + + + + 7562.67 + 20220118225636 + + + + 7399.79 + 20220118225636 + + + + + + diff --git a/src/tests/sampleTrans2.qfx b/src/tests/sampleTrans2.qfx new file mode 100644 index 0000000..0928130 --- /dev/null +++ b/src/tests/sampleTrans2.qfx @@ -0,0 +1,825 @@ +OFXHEADER:100 +DATA:OFXSGML +VERSION:102 +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUID:NONE + + + + + + 0 + INFO + + 20220120234820 + + ENG + + Bank 1 + 00000 + + 00000 + XXXXXXXXXXXXXXXXXXXXXXXXXX + + + + + 0 + + 0 + INFO + + + AUD + + 000000001 + 123456 123456789 + MST + + + 20211223 + 20220121 + + DEBIT + 20220120 + 20220120 + -60.00 + 202202000001 + PENDING: Brisbane Manly + Newstead A960 ATM + + + DEBIT + 20220117 + 20220117 + -0.01 + 202201700001 + PENDING: PAYPAL + 4029357733 A960 ATM + + + DEBIT + 20220116 + 20220116 + -0.01 + 202201600001 + PENDING: GOOGLE *TEMPORARY HOLD + g.co/helppay# A960 ATM + + + CREDIT + 20220121 + 20220121 + 0.36 + 202202100001 + 2% CASHBACK - ENJOY + ORION FRUIT MARKET 20JAN22 444687 17:49:15 2% Cashback - Enjoy 444687 SPRINGFI 36 8313 Z@MF26916 SYSTEM GENERATED + + + DEBIT + 20220121 + 20220121 + -17.98 + 202202100002 + ORION FRUIT MARKET + 21JAN22 ATMA896 08:51:15 8313 VISA AUD ORION FRUIT MARKET 444687 SPRINGFIELD AU A88872440 ATM + + + DEBIT + 20220121 + 20220121 + -236.83 + 202202100003 + WOOLWORTHS/SPRINGFIELD P + 21JAN22 ATMA896 07:24:10 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 271578ASPRINGFIELD AU A88809128 ATM + + + CREDIT + 20220120 + 20220120 + 1173.41 + 202202000001 + TRANSFER + WAGES SYSTEM GENERATED + + + CREDIT + 20220119 + 20220119 + 0.70 + 202201900001 + 2% CASHBACK - ENJOY + Guzman y Gomez 18JAN22 558820 20:06:25 2% Cashback - Enjoy 558820 Augustin 36 8313 Z@MF40743 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -35.10 + 202201900002 + GUZMAN Y GOMEZ + 19JAN22 ATMA896 09:25:07 8313 VISA AUD Guzman y Gomez 558820 Augustine HeiAU A88803378 ATM + + + DEBIT + 20220119 + 20220119 + -127.75 + 202201900003 + 1300 SMILES LTD + 19JAN22 ATMA896 09:18:34 8316 VISA AUD 1300 SMILES LTD 345787 SPRINGFIELD LAU A88875645 ATM + + + CREDIT + 20220119 + 20220119 + 1.04 + 202201900004 + 2% CASHBACK - ENJOY + GOLDEN PRAWN 15JAN22 619377 18:41:21 2% Cashback - Enjoy 619377 BONGAREE 36 8316 Z@MF16897 SYSTEM GENERATED + + + CREDIT + 20220119 + 20220119 + 0.12 + 202201900005 + 2% CASHBACK - ENJOY + GOLDEN PRAWN 15JAN22 316718 18:47:54 2% Cashback - Enjoy 316718 BONGAREE 36 8316 Z@MF16895 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -52.20 + 202201900006 + GOLDEN PRAWN + 19JAN22 ATMA896 08:27:13 8316 VISA AUD GOLDEN PRAWN 619377 BONGAREE AU A88843015 ATM + + + DEBIT + 20220119 + 20220119 + -6.00 + 202201900007 + GOLDEN PRAWN + 19JAN22 ATMA896 08:27:13 8316 VISA AUD GOLDEN PRAWN 316718 BONGAREE AU A88843014 ATM + + + DEBIT + 20220119 + 20220119 + -38.95 + 202201900008 + PAYPAL *OZSALEPTYLI + 19JAN22 ATMA896 08:01:37 8316 VISA AUD PAYPAL *OZSALEPTYLI 637484 4029357733 AU A88826216 ATM + + + CREDIT + 20220119 + 20220119 + 0.33 + 202201900009 + 2% CASHBACK - ENJOY + PASHELL PTY LTD 15JAN22 612537 12:37:17 2% Cashback - Enjoy 612537 BONGAREE 36 8313 Z@MF07258 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -16.50 + 202201900010 + PASHELL PTY LTD + 19JAN22 ATMA896 07:50:25 8313 VISA AUD PASHELL PTY LTD 612537 BONGAREE AU A88818248 ATM + + + CREDIT + 20220119 + 20220119 + 0.78 + 202201900011 + 2% CASHBACK - ENJOY + MCDONALDS IPSWICH CBD 16JAN22 121470 13:07:09 2% Cashback - Enjoy 121470 IPSWICH 36 8313 Z@MF05798 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -39.25 + 202201900012 + MCDONALDS IPSWICH CBD + 19JAN22 ATMA896 07:47:49 8313 VISA AUD MCDONALDS IPSWICH CBD 121470 IPSWICH AU A88814498 ATM + + + CREDIT + 20220119 + 20220119 + 0.49 + 202201900013 + 2% CASHBACK - ENJOY + SCOOPY'S FAMILY CAFE 15JAN22 113492 17:55:19 2% Cashback - Enjoy 113492 BONGAREE 36 8316 Z@MF01573 SYSTEM GENERATED + + + DEBIT + 20220119 + 20220119 + -24.70 + 202201900014 + SCOOPY'S FAMILY CAFE + 19JAN22 ATMA896 07:35:17 8316 VISA AUD SCOOPY'S FAMILY CAFE 113492 BONGAREE AU A88803426 ATM + + + DEBIT + 20220118 + 20220118 + -409.26 + 202201800001 + TRANSFER + Loan Payment From: 000-000000-000 TO: 000-000000-000 ZAL102098 SYSTEM GENERATED + + + DEBIT + 20220118 + 20220118 + -31.80 + 202201800002 + PAYPAL *EBAY AU + 18JAN22 ATMA896 08:41:03 8316 VISA AUD PAYPAL *EBAY AU 630721 4029357733 AU A88825889 ATM + + + DEBIT + 20220118 + 20220118 + -14.99 + 202201800003 + PAYPAL *EBAY AU + 18JAN22 ATMA896 08:40:46 8316 VISA AUD PAYPAL *EBAY AU 125007 4029357733 AU A88825446 ATM + + + DEBIT + 20220118 + 20220118 + -16.89 + 202201800004 + HUNGRY JACKS + 18JAN22 ATMA896 07:33:30 8316 VISA AUD Hungry Jacks 826946 Springfield AU A88803533 ATM + + + CREDIT + 20220117 + 20220117 + 1.71 + 202201700001 + 2% CASHBACK - ENJOY + WOOLWORTHS/SPRINGFIELD P 16JAN22 628920 15:13:10 2% Cashback - Enjoy 628920 SPRINGFI 36 8313 Z@MF96719 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -85.71 + 202201700002 + WOOLWORTHS/SPRINGFIELD P + 17JAN22 ATMA896 09:08:49 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 628920ASPRINGFIELD AU A88849865 ATM + + + DEBIT + 20220117 + 20220117 + -50.00 + 202201700003 + PAYPAL *WCI INT AU + 17JAN22 ATMA896 08:53:08 8316 VISA AUD PAYPAL *WCI INT AU 512078 4029357733 AU A88815885 ATM + + + CREDIT + 20220117 + 20220117 + 0.34 + 202201700004 + 2% CASHBACK - ENJOY + SPRINGFIELD LAKE BAK 14JAN22 696107 09:58:40 2% Cashback - Enjoy 696107 SPRINGFI 36 8313 Z@MF54064 SYSTEM GENERATED + + + CREDIT + 20220117 + 20220117 + 0.90 + 202201700005 + 2% CASHBACK - ENJOY + ALDI STORES - SPRINGFI 13JAN22 274552 09:40:26 2% Cashback - Enjoy 274552 SPRINGFI 36 8313 Z@MF54063 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -17.00 + 202201700006 + SPRINGFIELD LAKE BAK + 16JAN22 ATMA896 08:28:15 8313 VISA AUD SPRINGFIELD LAKE BAK 696107 SPRINGFIELD LAU A88842807 ATM + + + DEBIT + 20220117 + 20220117 + -45.09 + 202201700007 + ALDI STORES - SPRINGFI + 16JAN22 ATMA896 08:28:15 8313 VISA AUD ALDI STORES - SPRINGFI 274552 SPRINGFIELD AU A88842806 ATM + + + CREDIT + 20220117 + 20220117 + 0.57 + 202201700008 + 2% CASHBACK - ENJOY + WOOLWORTHS/GOODWIN DR & 15JAN22 107268 12:33:50 2% Cashback - Enjoy 107268 BRIBIE I 36 8316 Z@MF37374 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -28.69 + 202201700009 + WOOLWORTHS/GOODWIN DR & + 16JAN22 ATMA896 07:26:34 8316 VISA AUD WOOLWORTHS/GOODWIN DR & 107268HBRIBIE ISLANDAU A88897768 ATM + + + CREDIT + 20220117 + 20220117 + 0.98 + 202201700010 + 2% CASHBACK - ENJOY + SPRINGER LOW VOLTAGE 15JAN22 RINGER 11:15:35 2% Cashback - Enjoy 999999 LAWNTON 36 8316 Z@MF31151 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -49.00 + 202201700011 + SPRINGER LOW VOLTAGE + 15JAN22 002422 11:15:35 8316 EFTPOS SPRINGER LOW VOLTAGE LAWNTON AU A88828243 ATM + + + CREDIT + 20220117 + 20220117 + 1.57 + 202201700012 + 2% CASHBACK - ENJOY + COLES 4533 14JAN22 802693 16:25:16 2% Cashback - Enjoy 802693 SPRINGFI 36 8313 Z@MF25759 SYSTEM GENERATED + + + DEBIT + 20220117 + 20220117 + -78.70 + 202201700013 + COLES 4533 + 15JAN22 ATMA896 09:09:11 8313 VISA AUD COLES 4533 802693 SPRINGFIELD AU A88871150 ATM + + + DEBIT + 20220117 + 20220117 + -371.06 + 202201700014 + TRANSFER + TO 000-000000-000 Loan INTERNET BANKING + + + DEBIT + 20220117 + 20220117 + -1047.22 + 202201700015 + TRANSFER + TO 000-000000-000 Loan INTERNET BANKING + + + DEBIT + 20220114 + 20220114 + -23.15 + 202201400001 + ALDI STORES - DARRA + 14JAN22 127196 18:39:44 8316 EFTPOS ALDI STORES - DARRA DARRA AU A88892226 ATM + + + DEBIT + 20220114 + 20220114 + -2680.93 + 202201400002 + TRANSFER + TO 000-000000-000 INTERNET BANKING + + + CREDIT + 20220114 + 20220114 + 4519.71 + 202201400003 + TRANSFER + Pay SYSTEM GENERATED + + + CREDIT + 20220114 + 20220114 + 0.95 + 202201400004 + 2% CASHBACK - ENJOY + OFP PTY LTD 13JAN22 585252 09:07:49 2% Cashback - Enjoy 585252 SPRINGFI 36 8313 Z@MF23729 SYSTEM GENERATED + + + DEBIT + 20220114 + 20220114 + -47.50 + 202201400005 + OFP PTY LTD + 14JAN22 ATMA896 08:52:21 8313 VISA AUD OFP PTY LTD 585252 SPRINGFIELD CAU A88863534 ATM + + + DEBIT + 20220114 + 20220114 + -111.15 + 202201400006 + 7-ELEVEN 4079 + 14JAN22 ATMA896 08:46:15 8316 VISA AUD 7-ELEVEN 4079 448002 JINDALEE AU A88856728 ATM + + + DEBIT + 20220113 + 20220113 + -675.00 + 202201300001 + RAINBOW MUSIC + 13JAN22 ATMA896 08:49:41 8313 VISA AUD RAINBOW MUSIC 866033 SPRINGFIELD LAU A88871114 ATM + + + CREDIT + 20220113 + 20220113 + 1.09 + 202201300002 + 2% CASHBACK - ENJOY + PETBARN 13JAN22 TBARN 09:49:36 2% Cashback - Enjoy 999999 SPRINGFI 36 8313 Z@MF20235 SYSTEM GENERATED + + + DEBIT + 20220113 + 20220113 + -54.39 + 202201300003 + PETBARN + 13JAN22 013366 09:49:36 8313 EFTPOS PETBARN SPRINGFIELD CAU A88816881 ATM + + + DEBIT + 20220113 + 20220113 + -474.90 + 202201300004 + ADEL TRAILER HIRE + 13JAN22 ATMA896 08:29:33 8316 VISA AUD ADEL TRAILER HIRE 863776 GLENGOWRIE AU A88847532 ATM + + + DEBIT + 20220113 + 20220113 + -16.49 + 202201300001 + PAYPAL *SUPERCHEAP + 13JAN22 ATMA896 07:51:21 8316 VISA AUD PAYPAL *SUPERCHEAP 659085 4029357733 AU A88827581 ATM + + + CREDIT + 20220112 + 20220112 + 0.22 + 202201200001 + 2% CASHBACK - ENJOY + SPINGFIELD D/N PHARMA 12JAN22 INGFIE 21:05:14 2% Cashback - Enjoy 999999 Springfi 36 8316 Z@MF40585 SYSTEM GENERATED + + + DEBIT + 20220112 + 20220112 + -10.99 + 202201200002 + SPINGFIELD D/N PHARMA + 12JAN22 107246 21:05:14 8316 EFTPOS SPINGFIELD D/N PHARMA Springfield AU A88898388 ATM + + + CREDIT + 20220112 + 20220112 + 0.84 + 202201200003 + 2% CASHBACK - ENJOY + COLES 4533 11JAN22 866854 18:40:32 2% Cashback - Enjoy 866854 SPRINGFI 36 8316 Z@MF33176 SYSTEM GENERATED + + + DEBIT + 20220112 + 20220112 + -42.20 + 202201200004 + COLES 4533 + 12JAN22 ATMA896 09:14:05 8316 VISA AUD COLES 4533 866854 SPRINGFIELD AU A88884369 ATM + + + DEBIT + 20220111 + 20220111 + -409.26 + 202201100001 + TRANSFER + Loan Payment From: 000-000000-000 TO: 000-000000-000 SYSTEM GENERATED + + + DEBIT + 20220111 + 20220111 + -1086.41 + 202201100002 + TRANSFER + TO 000-000000-000 INTERNET BANKING + + + CREDIT + 20220111 + 20220111 + 1724.85 + 202201100003 + TRANSFER + PayrollSYSTEM GENERATED + + + DEBIT + 20220111 + 20220111 + -111.35 + 202201100004 + WOOLWORTHS/SPRINGFIELD P + 11JAN22 ATMA896 09:15:14 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 855223ASPRINGFIELD AU A88887965 ATM + + + DEBIT + 20220111 + 20220111 + -26.00 + 202201100005 + AFTERPAY + 11JAN22 ATMA896 08:25:58 8316 VISA AUD Afterpay 410015 afterpay.com AU A88829480 ATM + + + DEBIT + 20220110 + 20220110 + -99.00 + 202201000001 + TRANSFER + AUSSIE BROADBAND SYSTEM GENERATED + + + CREDIT + 20220110 + 20220110 + 0.68 + 202201000002 + 2% CASHBACK - ENJOY + SPRINGFIELD LAKE BAK 08JAN22 827190 13:50:10 2% Cashback - Enjoy 827190 SPRINGFI 36 8313 Z@MF73432 SYSTEM GENERATED + + + DEBIT + 20220110 + 20220110 + -33.75 + 202201000003 + SPRINGFIELD LAKE BAK + 10JAN22 ATMA896 09:55:44 8313 VISA AUD SPRINGFIELD LAKE BAK 827190 SPRINGFIELD LAU A88892952 ATM + + + DEBIT + 20220110 + 20220110 + -173.68 + 202201000004 + WOOLWORTHS/SPRINGFIELD P + 08JAN22 ATMA896 09:11:44 8313 VISA AUD WOOLWORTHS/SPRINGFIELD P 308996ASPRINGFIELD AU A88869052 ATM + + + CREDIT + 20220110 + 20220110 + 0.64 + 202201000005 + 2% CASHBACK - ENJOY + FOREST LKE DRUG STORE 05JAN22 591481 15:37:09 2% Cashback - Enjoy 591481 FOREST L 36 8313 Z@MF15821 SYSTEM GENERATED + + + DEBIT + 20220110 + 20220110 + -31.98 + 202201000006 + FOREST LKE DRUG STORE + 08JAN22 ATMA896 08:53:44 8313 VISA AUD FOREST LKE DRUG STORE 591481 FOREST LAKE AU A88844754 ATM + + + CREDIT + 20220110 + 20220110 + 0.36 + 202201000007 + 2% CASHBACK - ENJOY + KAISERCRAFT PTY LTD 05JAN22 454947 16:26:14 2% Cashback - Enjoy 454947 NORTH IP 36 8313 Z@MF03993 SYSTEM GENERATED + + + DEBIT + 20220110 + 20220110 + -17.99 + 202201000008 + KAISERCRAFT PTY LTD + 08JAN22 ATMA896 07:43:44 8313 VISA AUD KAISERCRAFT PTY LTD 454947 NORTH IPSWICHAU A88815486 ATM + + + DEBIT + 20220110 + 20220110 + -22.65 + 202201000009 + BUDGET DIRECT + AUD BUDGET DIRECT + + + DEBIT + 20220110 + 20220110 + -49.25 + 202201000010 + HUNGRY JACKS + 08JAN22 ATMA896 07:36:03 8316 VISA AUD Hungry Jacks 508403 Springfield AU A88804914 ATM + + + CREDIT + 20220107 + 20220107 + 0.32 + 202200700001 + 2% CASHBACK - ENJOY + SPOTLIGHT \SPRI 07JAN22 OTLIGH 11:34:29 2% Cashback - Enjoy 999999 GFIELD 36 8313 Z@MF33325 SYSTEM GENERATED + + + DEBIT + 20220107 + 20220107 + -16.00 + 202200700002 + SPOTLIGHT \SPRI + 07JAN22 127038 11:34:29 8313 EFTPOS SPOTLIGHT \SPRI NGFIELD AU A88828477 ATM + + + CREDIT + 20220107 + 20220107 + 1.20 + 202200700003 + 2% CASHBACK - ENJOY + MR TOYS 05JAN22 785391 16:21:49 2% Cashback - Enjoy 785391 IPSWICH 36 8313 Z@MF02726 SYSTEM GENERATED + + + DEBIT + 20220107 + 20220107 + -59.99 + 202200700004 + MR TOYS + 07JAN22 ATMA896 07:34:02 8313 VISA AUD MR TOYS 785391 IPSWICH AU A88808421 ATM + + + DEBIT + 20220106 + 20220106 + -1173.71 + 202200600001 + TRANSFER + TO 000-000000-000 INTERNET BANKING + + + CREDIT + 20220106 + 20220106 + 1173.40 + 202200600002 + TRANSFER + WAGES SYSTEM GENERATED + + + CREDIT + 20220106 + 20220106 + 0.13 + 202200600003 + TRANSFER + PAYPAL AUSTRALIA Z@LC11302 SYSTEM GENERATED + + + CREDIT + 20220106 + 20220106 + 0.18 + 202200600004 + TRANSFER + PAYPAL AUSTRALIA SYSTEM GENERATED + + + DEBIT + 20220106 + 20220106 + -628.81 + 202200600005 + TRANSFER + TO 000-000000-000 IB1004824 INTERNET BANKING + + + CREDIT + 20220106 + 20220106 + 0.62 + 202200600006 + 2% CASHBACK - ENJOY + WOOLWORTHS/PINE ST & THE 05JAN22 890305 16:35:10 2% Cashback - Enjoy 890305 IPSWICH 36 8313 Z@MF14627 SYSTEM GENERATED + + + DEBIT + 20220106 + 20220106 + -30.76 + 202200600007 + WOOLWORTHS/PINE ST & THE + 06JAN22 ATMA896 08:04:01 8313 VISA AUD WOOLWORTHS/PINE ST & THE 890305 IPSWICH AU A88838793 ATM + + + CREDIT + 20220105 + 20220105 + 6160.46 + 202200500001 + TRANSFER + Savings Transfer SYSTEM GENERATED + + + DEBIT + 20220105 + 20220105 + -1280.00 + 202200500002 + FROSTEEZ + 05JAN22 002584 11:07:56 8316 EFTPOS FROSTEEZ DURACK AU A88824667 ATM + + + CREDIT + 20220104 + 20220104 + 5000.00 + 202200400001 + TRANSFER + Fund Transfer SYSTEM GENERATED + + + CREDIT + 20220104 + 20220104 + 768.49 + 202200400002 + TRANSFER + SYSTEM GENERATED + + + + 8319.48 + 20220120234820 + + + + 8259.46 + 20220120234820 + + + + + + From f16b3ae07827787c48d1fd5ab4deff7081f14d08 Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Fri, 4 Feb 2022 14:59:33 +1000 Subject: [PATCH 3/7] Updating base image to a more secure one --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9cb2276..67a36ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.8 +FROM python:3.8-slim RUN pip install ofxparse RUN pip install watchdog From 56d4354b53351ec09682fe08180b737ee6efdf55 Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Mon, 7 Feb 2022 12:48:28 +1000 Subject: [PATCH 4/7] Added extra sleep time to wait for download --- converter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/converter.py b/converter.py index d8ed547..72d593e 100644 --- a/converter.py +++ b/converter.py @@ -134,16 +134,17 @@ class Handler(watchdog.events.PatternMatchingEventHandler): fileExists = False timeout = 0 + while not fileExists: fileExists = os.path.isfile(event.src_path) - time.sleep(1) + time.sleep(5) timeout += 1 if timeout > 60: logging.error('Timeout waiting for file {} to exist. Aborting processing.'.format(event.src_path)) return - historicalSize = -1 + while (historicalSize != os.path.getsize(event.src_path)): logging.info('waiting for copy to finish....') historicalSize = os.path.getsize(event.src_path) From 1205dddc9ec5f18d412a86496030716f5c92a6bd Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Fri, 11 Feb 2022 11:14:00 +1000 Subject: [PATCH 5/7] Fixing bug --- converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/converter.py b/converter.py index 72d593e..0dde5c0 100644 --- a/converter.py +++ b/converter.py @@ -144,7 +144,7 @@ class Handler(watchdog.events.PatternMatchingEventHandler): logging.error('Timeout waiting for file {} to exist. Aborting processing.'.format(event.src_path)) return - + historicalSize = -1 while (historicalSize != os.path.getsize(event.src_path)): logging.info('waiting for copy to finish....') historicalSize = os.path.getsize(event.src_path) From ed85763ff5b2d55e15546758cddbb9866b95e967 Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Fri, 23 Sep 2022 11:59:57 +1000 Subject: [PATCH 6/7] Added some debugging --- converter.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/converter.py b/converter.py index 0dde5c0..883141d 100644 --- a/converter.py +++ b/converter.py @@ -178,6 +178,10 @@ class Handler(watchdog.events.PatternMatchingEventHandler): path.replace(destination) logging.info("Processing successfully finished for {}".format(event.src_path)) + + def on_created(self, event): + logging.info('{} on {}'.format(event.event_type, event.src_path)) + if __name__ == "__main__": event_handler = Handler() From 9ce052e04dd2aa21d06a37fd096a52ecea1ab36b Mon Sep 17 00:00:00 2001 From: Shane Frischkorn Date: Fri, 23 Sep 2022 15:06:20 +1000 Subject: [PATCH 7/7] Updating converter to pick up files copied in by nextcloud --- converter.py | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/converter.py b/converter.py index 883141d..378edaa 100644 --- a/converter.py +++ b/converter.py @@ -153,34 +153,39 @@ class Handler(watchdog.events.PatternMatchingEventHandler): logging.info("file copy has now finished") with open(event.src_path, 'r') as file: - qfx = OfxParser.parse(file, fail_fast=False) - statement, acct_name = Handler.get_statement_from_qfx(qfx) + try: + qfx = OfxParser.parse(file, fail_fast=False) + statement, acct_name = Handler.get_statement_from_qfx(qfx) - path = Path(event.src_path) - path.resolve() + path = Path(event.src_path) + path.resolve() - converted_dir = path.parent / CONVERTED_DIR - if not converted_dir.exists(): - converted_dir.mkdir() + converted_dir = path.parent / CONVERTED_DIR + if not converted_dir.exists(): + converted_dir.mkdir() - out_file = str(path.parent / CONVERTED_DIR / (acct_name + '-' + qfx.signon.dtserver + '.csv')) - Handler.write_csv(statement, out_file) + out_file = str(path.parent / CONVERTED_DIR / (acct_name + '-' + qfx.signon.dtserver + '.csv')) + Handler.write_csv(statement, out_file) - #Now move the input file to backup - archive_file_dir = path.parent / BACKUP_DIR - archive_file = (path.stem + '{:04d}' + path.suffix) - destination = Handler.unique_path(archive_file_dir, archive_file) + #Now move the input file to backup + archive_file_dir = path.parent / BACKUP_DIR + archive_file = (path.stem + '{:04d}' + path.suffix) + destination = Handler.unique_path(archive_file_dir, archive_file) - if not archive_file_dir.exists(): - archive_file_dir.mkdir() + if not archive_file_dir.exists(): + archive_file_dir.mkdir() - if not destination.exists(): - path.replace(destination) + if not destination.exists(): + path.replace(destination) + except: + logging.info("Failed to process {}".format(event.src_path)) logging.info("Processing successfully finished for {}".format(event.src_path)) - - def on_created(self, event): - logging.info('{} on {}'.format(event.event_type, event.src_path)) + + def on_modified(self, event): + logging.info('Found modified file: {}'.format(event.src_path)) + self.on_created(event) + if __name__ == "__main__":