-
Notifications
You must be signed in to change notification settings - Fork 1
/
mbs2homebank.py
130 lines (117 loc) · 2.77 KB
/
mbs2homebank.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/python
#
# ml 2016
#
# convert mbs csv to homebank csv
#
# python mbs2homebank.py CSV
#
### mbs csv header
# 0 Auftragskonto
# 1 Buchungstag
# 2 Valutadatum
# 3 Buchungstext
# 4 Verwendungszweck
# 5 Beguenstigter/Zahlungspflichtiger
# 6 Kontonummer
# 7 BLZ
# 8 Betrag
# 9 Waehrung
# 10 Info
#
#
### homebank header
# date format must be DD-MM-YY
# paymode from 0=none to 10=FI fee
# info a string
# payee a payee name
# memo a string
# amount a number with a '.' or ',' as decimal separator, ex: -24.12 or 36,75
# category a full category name (category, or category:subcategory)
# tags tags separated by space, tag is mandatory since v4.5
#
#
### classification
# date = Valutadatum
# paymode = Buchungstext (as int)
# info = Buchungstext (as string)
# payee = Beguenstigter/Zahlungspflichtiger
# memo = Verwendungszweck
# amount = Betrag
# category = empty
# tags = empty
#
### paymode
# 0 = none ABSCHLUSS
# 1 = kreditkarte na
# 2 = schecks na
# 3 = bargeld GELDAUTOMAT
# 4 = ueberweisung ONLINE-UEBERWEISUNG
# 5 = zwischen konten "SEPA UEBERTRAG SOLL"
# 6 = einzugsermaechtigung na
# 7 = dauerauftrag DAUERAUFTRAG
# 8 = kartenzahlung KARTENZAHLUNG, "SONSTIGER EINZUG"
# 9 = einzahlung GUTSCHRIFT,EINZAHLUNG,LOHN GEHALT, "SEPA UEBERTRAG HABEN"
# 10= FI Abgabe na
# 11= lastschrift FOLGELASTSCHRIFT/LASTSCHRIFT/SEPA-ELV-LASTSCHRIFT/ERSTLASTSCHRIFT
paymode = {
"ABSCHLUSS": 0,
"GELDAUTOMAT": 3,
"ONLINE-UEBERWEISUNG": 4,
"SEPA UEBERTRAG SOLL": 4,
"DAUERAUFTRAG": 7,
"KARTENZAHLUNG": 8,
"SONSTIGER EINZUG": 8,
"GUTSCHRIFT": 9,
"EINZAHLUNG": 9,
"LOHN GEHALT": 9,
"SEPA UEBERTRAG HABEN": 9,
"BAR": 9,
"FOLGELASTSCHRIFT":11,
"LASTSCHRIFT":11,
"SEPA-ELV-LASTSCHRIFT":11,
"ERSTLASTSCHRIFT":11,
}
### imports
import csv
import argparse
import os
import sys
import datetime
### parse
parser = argparse.ArgumentParser()
parser.add_argument("csv", help="csv from mbs")
args = parser.parse_args()
incsv = args.csv
### functions
def remove_quotes(string):
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
return string
def convert_date(date):
return datetime.datetime.strptime(date, '%d.%m.%y').strftime('%d/%m/%Y')
### read csv
try:
with open(incsv) as csvfile:
reader = csv.reader(csvfile,delimiter=';', quoting=csv.QUOTE_NONE)
firstline = True
for row in reader:
# remove first line
if firstline:
firstline = False
continue
#date;paymode;info;payee;memo;balance;--cat;--tag
print "%s;%s;%s;%s;%s;%s;;" % (
convert_date(remove_quotes(row[2])),
paymode[remove_quotes(row[3])],
remove_quotes(row[3]),
remove_quotes(row[5]),
remove_quotes(row[4]),
remove_quotes(row[8]),
)
except IOError:
print incsv + " not found"
except:
print "Unexpected error:", sys.exc_info()[0]
else:
csvfile.close()