You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Importiere Kontoumsätze über CSV Listen oder PDF Kontoauszüge deiner Bank ([unterstützte Banken](#unterstützte-banken))
25
+
- Erstelle eine Gruppe mehrerer Konten, um alle diese Umsätze in einer Übersicht zu sehen
26
+
- Wende vorgefertigte oder eigene Regeln für das automatische Taggen und Kategorisieren deiner Umsätze an
27
+
- Suche und Filtere deine Umsätze nach einer Vielzahl möglicher Kriterien
28
+
- Lerne mehr über deinen Cashflow durch die Übersicht der statistischen Auswertungen. Hier kannst du alle oder nur gefilterte Umsätze berücksichtigen.
29
+
8
30
## Features
9
31
10
-
### Parsing
32
+
Die Funktionen des PynanceParsers setzen stark auf Reproduzierbarkeit. Das bedeutet, dass du beliebig oft gleiche Daten löschen und reimportieren kannst und halbautomatisch wieder die gleichen Ergebnisse (einmalige Transaktionen, Tagging, Kategorien, Statistiken) erhälts. Ein manuelles Editieren ist zwar möglich, aber die Ausnahme.
33
+
34
+
👉 **Modernes und responsives Design**
35
+
36
+
*(Übersichtlich auf vielen Geräten)*
37
+
38
+
👉 **Keine doppelten Imports**
39
+
40
+
*(Datum, Text und Betrag bilden eine einmalige Kombination)*
41
+
42
+
👉 **Automatisches Extrahieren von Zusatzinformationen**
11
43
12
-
Importiere Kontoumsätzen aus Dateien im Format unterstützter Banken (Exports von Umsatzübersichten als CSV, Kontoauszüge als PDF). Für Auswertung der Ausgaben von Zeit zu Zeit.
44
+
*(RegEx parst Kerninformationen)*
13
45
14
-
Modulare Importer können nach und nach für verschiedene Banken oder spezielle Formate entwickelt werden. Füge einen Importer für deine Bank hinzu :wink:
46
+
👉 **Automatisches und/oder manuelles Taggen**
15
47
16
-
### Analyse
48
+
*(Regelbasiert: RegEx + Zusatzinformationen)*
17
49
18
-
- Keine doppelten Imports *(Datum, Text und Betrag bilden eine einmalige Kombination)*
19
-
- Automatisches Extrahieren von Zusatzinformationen einer Transaktion durch Muster *(RegEx parst Kerninformationen)*
Hinterlegte Regeln können die extrahierten Informationen, weitere Umsatzinformationen und weitere RegExes berücksichtigen und ermöglichen so komplexe Bewertungen einfach zu erstellen.
Ist deine Bank noch nicht dabei? Den modularen Import kannst du mit [überschaubaren Aufwand](#entwickeln-von-neuen-readern) für deine Bank erweitern.
82
+
83
+
## Hinweise
49
84
50
85
### Workflow (CSV / PDF Imports)
51
86
@@ -58,28 +93,32 @@ Daher sollte man beachten:
58
93
- Regeln nicht auf zwingend vorhandene Leerzeichen auszulegen
59
94
- Beim Wechsel eines Formats (PDF / CSV) keine Überschneidungen zu haben (PDF zuerst, dann fehlende Transaktionen selektieren und via CSV exportieren - alternativ bei einem Format bleiben)
60
95
61
-
### Tagging- und Kategorisierungsregeln
96
+
### Default Tagging- und Kategorisierungsregeln
62
97
63
98
In diesem Repository werden nur Basis-Regeln mitgeliefert, da speziellere und genauere Regeln sehr individuell auf einzelne Personen zugeschnitten sind. So schreibt zum Beispiel eine Versicherung die Versichertennummer mit in die Abbuchungen, was einen sehr guten Tagging-Indikator darstellt, jedoch nur für einen speziellen Nutzer dieses Programms. Das schreiben eigener Regeln ist daher unumgänglich, um bessere Ergebnisse zu erzielen.
64
99
65
-
Für diesen Zweck gibt es aber die Möglichkeit im Frontend Regeln auszuprobieren, ohne dass Umsätze geändert werden. Neue Regeln können ebenfalls über die Oberfläche temporär hochgeladen werden (bis zum Neustart des Servers) oder dauerhaft im Ordner `settings/rule` abgelegt werden. Die Dateien hier werden in alphabetisch sortierter Reihenfolge geladen (angefangen bei `00-*`), wobei spätere Regeln ggf. bestehende Regeln überschreiben können. Im Rwepository werden nur die Default-Regeln angepasst. Auf diese Weise können eigene Regeln gepflegt werden, ohne dass sie bei Updates verloren gehen.
100
+
## Anpassungen / Contribution
66
101
102
+
**You're Welcome !**:tada:
67
103
68
-
## Contribution
104
+
Erstelle einen Reader für verschiedene Formate deiner Bank oder ergänze die `parser` und `rules`.
69
105
70
-
You're Welcome !
106
+
### Entwickeln neuer `parser` / `rules`
71
107
72
-
Erstelle einen Reader für verschiedene Formate deiner Bank oder ergänze die `parser` und `rules`.
108
+
Für diesen Zweck gibt es die Möglichkeit im Frontend Regeln auszuprobieren, ohne dass Umsätze geändert werden. Neue Regeln können ebenfalls über die Oberfläche temporär hochgeladen werden (bis zum Neustart des Servers) oder dauerhaft im Ordner `settings/rule` abgelegt werden. Die Dateien hier werden in alphabetisch sortierter Reihenfolge geladen (angefangen bei `00-*`), wobei spätere Regeln ggf. bestehende Regeln überschreiben können. Im Repository werden nur die Default-Regeln angepasst. Auf diese Weise können eigene Regeln gepflegt werden, ohne dass sie bei Updates verloren gehen.
73
109
74
-
## Setup
110
+
**Wenn du neue Regeln für dieses Repository beitragen möchtest, gehst du wie folgt vor:**
Neben dem Modul benätigst du noch einen Test. Ziel des Tests ist es, dass lokal eine Beispiel Datei importiert wird, wenn sie vorhanden ist und im Ergebnis geprüft wird, ob die eingelesenen Einträge sinnvoll sind. Eine Prüfung nach Transaktionsinhalten findet nicht statt.
6
+
7
+
**Lade keine privaten Kontoauszüge in das Repository hoch !**
8
+
9
+
Kopiere dazu am besten `tests/test_unit_reader_Comdirect.py` und...
10
+
11
+
- Passe den Dateinamen der Beispieldatei an
12
+
- Entscheide, ggf. eine Testfunktion zu überspringen mit `@pytest.mark.skip(reason="Currently not implemented yet")`
13
+
14
+
Kopiere als nächstes `reader/Generic.py` und
15
+
16
+
- Passe den Dateinamen der Beispieldatei an
17
+
- Entwickle deinen Reader (siehe unten) und teste ihn zwischendurch/am Ende mit `pytest -svx tests/test_unit_reader_*.py`
18
+
19
+
Der Test führt die `from_csv` bzw. `from_pdf` Funktion aus und überprüft, ob das Format richtig ist und die Werte der Transaktionen über entsprechende Keys mit sinnvollen Werten verfügen.
20
+
21
+
### Logik des Readers erstellen
22
+
23
+
Ziel der Funktion `from_csv` bzw. `from_pdf` ist es, eine Liste von Transaktionen in Form eines Dictionaries einzulesen, wobei die Keys der Vorgabe des [allgemeinen Models für Transaktionen](Models.md) folgt.
24
+
25
+
Für das Einlesen einer PDF ist dabei mehr Aufwand notwendig. Hierbei kommt das Modul `camelot` zum Einsatz.
26
+
27
+
Für die Entwicklung der richtigen Einstellungen wird neben dem Python Modul auch das CLI Programm empfohlen. Installation und Konfigurationen findest du in der [Dokumentation](https://camelot-py.readthedocs.io/en/master/).
28
+
29
+
#### Step by Step
30
+
31
+
- Lege eine Beispieldatei nach `/tmp/bank.pdf`
32
+
- Nutze den `grid` Modus im CLI, um angezeigt zu bekommen, was `camelot` mit den jeweiligen Einstellungen für Tabelleninhalte finden würde.
33
+
- Übertrage die erfolgreichen Flags und Einstellungen in den Python Aufruf im Reader-Modul
34
+
- Lasse dir dort erst alle eingelesenen Zeileninhalte ausgeben (während eines `pytests`) und entscheide, wie du die Inhalte ggf. umformen, zusammenfassen oder trennen musst, um das [erwartete Muster](Models.md) zu erhalten.
35
+
36
+
Ein guter Start ist folgender Aufruf:
37
+
38
+
```
39
+
camelot -plot grid /tmp/bank.pdf
40
+
```
41
+
42
+
Nützliche Flags sind `-p` für einzelne Seiten (schneller bzw. können so auch Edgecases geprüft werden), `-C` um die Koordinaten von Spalten festzulegen (meistens erforderlich) und `-T` um den Bereich festzulegen, wo nach einer Tabelle geprüft werden soll (meistens erforderlich). Ein fortgeschrittenerer Aufruf könnte daher so aussehen:
Am Schluss kann noch der Wert eingestellt werden, ab dem Buchstaben vertikal oder horizontal zu einem Wort oder einer Zeile zusammengefasst oder schon getrennt werden. Mit dem Argument `layout_kwargs` in der Python-Methode können Argumente an den darunterliegenden `PDFMiner` durchgereicht werden, was genau diese Einstellungen ermöglicht.
49
+
50
+
Die Dokumentation dieser möglichen Werte findet man in der [Dokumentation des PDFMiner](https://pdfminersix.readthedocs.io/en/latest/reference/composable.html). Der [Commerbank.py Reader](reader/Commerzbank.py) nutzt diese wegen der bestimmten Schriftart und Zeichenabständen im PDF.
51
+
52
+
## Stelle einen Pull Request
53
+
54
+
Beschreibe, welche Features du hinzugefügt oder verbessert hast. Pytest und Pylint werden hier geprüft. Das Testen des neuen Imports kann nur bei dir erfolgen, da die Maintainer in der Regel über keine Testdateien dafür verfügen. Teste daher sorgfältig.
0 commit comments