-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathhaushaltsdaten.py
83 lines (72 loc) · 4.27 KB
/
haushaltsdaten.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
import csv
import re
"""
# Zielformat "detailliert" (mit Kostenart)
Jahr GsBe Ver Produktbereich Produktgruppe Kostenart Betrag Budget_Richtung Plan_Ist
2017 Innere Verwaltung Verwaltungssteuerung und Service Politische Gremien 83172.00 Aufwand Plan
2017 Innere Verwaltung Verwaltungssteuerung und Service Politische Gremien 1827.00 Aufwand Plan
2017 Innere Verwaltung Verwaltungssteuerung und Service Politische Gremien 9906.00 Aufwand Plan
# Zielformat "einfach"
Produktbereich Produktgruppe Produktbereichsname Produktgruppenbezeichnung Jahr Richtung Betrag Betrag-Typ
01 0101 Innere Verwaltung Bezirksvertretungen (frei verfügbare Mittel) 2007 Aufwendungen 0 Ergebnis
01 0102 Innere Verwaltung Geschäftsführung für politische Gremien, Städtepartnerschaften 2007 Erträge 83396.57 Ergebnis
01 0102 Innere Verwaltung Geschäftsführung für politische Gremien, Städtepartnerschaften 2007 Aufwendungen 3025165.2 Ergebnis
"""
def fixMoney(eur):
res = re.sub(r'[^-0-9,]', '', eur).replace(",", ".")
return float(res if res else "0")
with open('data/2020-haushalt.csv') as csvinput:
# Fields in source file
# 0 1-stelliger Produktbereich - Kennung;
# 1 1-stelliger Produktbereich - Bezeichnung;
# 2 2-stelliger Produktbereich - Kennung;
# 3 2-stelliger Produktbereich - Bezeichnung;
# 4 Produktgruppe - Kennung;
# 5 Produktgruppe Bezeichnung;
# 6 Geschäftsjahr;
# 7 Steuern;
# 8 Gebühren/Entgelte;
# 9 Zuwendungen von Dritten;
# 10 Sonstige Erträge;
# 11 Summe Erträge;
# 12 Personalaufwendungen;
# 13 Sachaufwendungen;
# 14 Zuwendungen an Dritte;
# 15 Summe Aufwendungen;
# 16 Ergebnis lt. Plan
# Create "Simple" offenerhaushalt.de file format
outfile = 'data/2020-muenster-offenerhaushalt-summen.csv'
with open(outfile, mode='w') as csvoutput:
haushaltreader = csv.reader(csvinput, delimiter=';', quotechar='"')
writer = csv.writer(csvoutput, dialect='excel')
writer.writerow(['Produktbereich','Produktgruppe','Produktbereichsname','Produktgruppenbezeichnung','Jahr','Richtung','Betrag','Betrag-Typ'])
for row in haushaltreader:
if row[4]: # Wenn die Produktkennung leer ist, dann ist es eine Summenzeile, die wir ignorieren
part1 = [row[2], row[4], row[3], row[5], row[6] ]
writer.writerow(part1 + ["Aufwendungen", "{:1.2f}".format(fixMoney(row[15])), "Plan"])
writer.writerow(part1 + ["Erträge", "{:1.2f}".format(0-fixMoney(row[11])), "Plan"])
# Create "Detailled" offenerhaushalt.de file format
outfile = 'data/2020-muenster-offenerhaushalt-detail.csv'
with open(outfile, mode='w') as csvoutput:
csvinput.seek(0)
haushaltreader = csv.reader(csvinput, delimiter=';', quotechar='"')
writer = csv.writer(csvoutput, dialect='excel')
writer.writerow(['ID-PB','ID-PG','Produktbereich','Produktgruppe','Jahr','Betrag-Typ','Kostenart','Richtung','Betrag'])
for row in haushaltreader:
if row[4]:
part1 = [row[2], row[4], row[3], row[5], row[6], "Plan"]
if row[7]:
writer.writerow(part1 + ["Steuern", "Erträge", "{:1.2f}".format(0-fixMoney(row[7]))])
if row[8]:
writer.writerow(part1 + ["Gebühren/Entgelte", "Erträge", "{:1.2f}".format(0-fixMoney(row[8]))])
if row[9]:
writer.writerow(part1 + ["Zuwendungen von Dritten", "Erträge", "{:1.2f}".format(0-fixMoney(row[9]))])
if row[10]:
writer.writerow(part1 + ["Sonstige Erträge", "Erträge", "{:1.2f}".format(0-fixMoney(row[10]))])
if row[12]:
writer.writerow(part1 + ["Personalaufwendungen", "Aufwendungen", "{:1.2f}".format(fixMoney(row[12]))])
if row[13]:
writer.writerow(part1 + ["Sachaufwendungen", "Aufwendungen", "{:1.2f}".format(fixMoney(row[13]))])
if row[14]:
writer.writerow(part1 + ["Zuwendungen an Dritte", "Aufwendungen", "{:1.2f}".format(fixMoney(row[14]))])
print("Done")