Skip to content

Commit fa8e9f1

Browse files
authored
Merge pull request #28 from Pitastic/tags_vs_category
Tagging und Kategorisieren auftrennen
2 parents 2c3341f + 8e2d517 commit fa8e9f1

13 files changed

Lines changed: 1225 additions & 462 deletions

File tree

Models.md

Lines changed: 125 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,37 @@
1-
## Models
1+
# Models
22

3-
### Datenbankeintrag für eine Transaktion
3+
## Dictionary einer Config
4+
5+
```
6+
{
7+
'uuid': str # (generated)
8+
'metatype': str # (config)
9+
'name': str, # Typ des Configeintrags (user, group, ui...)
10+
11+
-------- Zusatz je Config Typ -------
12+
13+
**kwargs
14+
15+
. . . . . . . z.B. User . . . . . . .
16+
17+
'username': str,
18+
'password': str # hashed
19+
'ibans': list # Eigentümer
20+
'rules': dict # private Regeln
21+
'parser': dict # private Parser
22+
23+
. . . . . . . z.B. Gruppe . . . . . .
24+
25+
'groupname': str
26+
"ibans": list, # IBANs, die zur Gruppe gheören
27+
"members": [
28+
{ "user": "anna", "role": "owner" },
29+
{ "user": "bob", "role": "viewer" }
30+
]
31+
}
32+
```
33+
34+
## Datenbankeintrag für eine Transaktion
435

536
```
637
{
@@ -17,78 +48,127 @@
1748
'currency': str,
1849
'parsed': dict( str: str )
1950
'category': str,
20-
'subcategory': str,
2151
'tags': list[str],
2252
'priority': int,
2353
}
2454
```
2555

26-
### Metadaten
56+
## Parsing Objects
2757

28-
#### Dictionary eines Rulesets (Tag/Parse)
58+
Beim Import eines Kontoauszugs werden die Transaktionen in ihre Grunddaten zerlegt und in einer Datenbankgespeichert. Das Parsing erkennt nach bestimmten Regeln Informationen, die sich aus den Rohdaten ergeben und reichert damit den Informationsgehalt der einzelnen Transaktion an.
2959

30-
Regeln können Attribute einer Transaktion untersuchen und anhand dessen klassifizieren oder taggen. Zu den Werten kann nicht die primäre Kategorie zählen, wohl aber andere Tags, parsing Informationen oder Regexes auf den Buchungstext (und mehr).
60+
Bei jeder Regex-Regel gilt, dass der Ausdruck genau eine Matching-Group ergeben muss, deren Informationen als Wert des Parsings übernommen wird.
3161

3262
```
3363
{
34-
'uuid': str # (generated)
35-
'metatype': str # (config|rule|parser)
64+
'metatype': str,
3665
'name': str,
37-
'regex': r-str( RegEx ),
66+
'regex': r-str(RegEx)
67+
}
68+
```
3869

39-
-------- Zusatz bei Rules -------
70+
#### .metatype, str (`parser`)
4071

41-
'category': str | None,
42-
'tags': list[str] | None,
72+
Klassifiziert das Objekt als Regel für das Parsing.
73+
74+
#### .name, str
75+
76+
Frei wählbarer Name der Regel.
77+
78+
#### .regex, r-str (optional)
4379

44-
. . . . . . . optional . . . . . .
80+
Regex String, der auf den Buchungstext angewendet werden soll. Er muss genau eine Matching-Group enthalten. Der Wert dieses Treffers (der Gruppe) wird als Wert mit dem Namen der Regel in der Transaktion als Ergebnis gespeichert.
4581

46-
'prioriry': int,
82+
## Rule Objects
83+
84+
```
85+
{
86+
'metatype': str
87+
'name': str,
88+
'multi': str,
4789
'parsed': dict(
48-
'multi': str, # (AND|OR)
49-
'query': dict # (key=Name, val=Value)
90+
key, str | int : value str | int | bool | list
5091
)
92+
'filter': list( dict(
93+
'key': str,
94+
'value': int, str, bool, list,
95+
'compare': str
96+
) )
97+
'category': str | None,
98+
'tags': list,
99+
'prioriry': int | None
51100
}
52101
```
53102

54-
#### Dictionary einer Config
103+
Regeln können Attribute einer Transaktion untersuchen und anhand dessen klassifizieren oder taggen. Bei den Regeln zum Tagging können auch zuvor geparste Informationen zählen; bei den Regeln zum Kategorisieren zusätzlich auch bereits gesetzte Tags einer Transaktion. Beide Typen unterscheiden sich in der Angabe beim Schlüssel `metatype`, sind aber sonst sehr ähnlich. Persistente Regeln werden als `json` im Ordner `settings/rule` abgelegt. Die Nummerierung im Dateinamen gibt die Lade-Reihenfolge an. Später geladene Regeln mit gleichem Namen können frühere überschreiben.
55104

56-
```
57-
{
58-
'uuid': str # (generated)
59-
'metatype': str # (config)
60-
'name': str, # Typ des Configeintrags (user, group, ui...)
105+
### Schlüssel dieses Objektes
61106

62-
-------- Zusatz je Config Typ -------
107+
#### .metatype, str (`rule` | `category`)
63108

64-
**kwargs
65-
66-
. . . . . . . z.B. User . . . . . . .
109+
Klassifiziert das Objekt als Regel für das Tagging oder zur Kategorisierung. Einige Schlüssel werden abhängig von dieser Angabe anders genutzt (siehe unten).
67110

68-
'username': str,
69-
'password': str # hashed
70-
'ibans': list # Eigentümer
71-
'rules': dict # private Regeln
72-
'parser': dict # private Parser
111+
#### .name, str
73112

74-
. . . . . . . z.B. Gruppe . . . . . .
113+
Frei wählbarer Name der Regel.
114+
115+
##### .multi, str (`AND` | `OR`)
116+
117+
Art der Verkettung der Filter. Ohne diese Angabe wird der Default `AND` gewählt. Wird hier `OR` angegeben, werden alle Filter (`regex`, `filter`, `parsed`-keys) mit `OR` verknüpft.
118+
119+
#### .parsed, dict (optional)
120+
121+
Ein Dictionary, bei dem der `key` der Bezeichner für den geparsten Wert einer Transaktion unter `.parsed.$WERT` ist, der mit dem `value` abgeglichen wird.
122+
123+
##### .parsed[].key, str, int
124+
125+
Die Bezeichnung (Schlüssel) des Werts, der geprüft werden soll.
126+
127+
#### filter, list (optional)
128+
129+
Liste mit Dictionaryies, die Argumenten zum durchsuchen von allgemeinen Werten einer Transaktion enthalten.
130+
131+
##### filter[].key, str | int
132+
133+
Die Bezeichnung (Schlüssel) des Werts, der geprüft werden soll. `key` kann hier jeder Bezeichner sein, der in der ersten Ebene des Transaktionsobjektes vorkommen könnte. Ausgenommen sind hier die `parsed` Werte, für die es ja aber dafür eine eigene Filterangabe gibt.
134+
135+
#### filter[].value, str | int | bool | list
136+
137+
Der Wert, mit dem der Wert aus der Datenbank abgeglichen werden soll.
138+
139+
#### filter[].compare, str (`==` | `!=` | `<` | `>` | `<=` | `>=` | `in` | `notin` | `all` | `regex`)
140+
141+
Art des Vergleichs:
75142

76-
'groupname': str
77-
"ibans": list, # IBANs, die zur Gruppe gheören
78-
"members": [
79-
{ "user": "anna", "role": "owner" },
80-
{ "user": "bob", "role": "viewer" }
81-
]
82-
}
83143
```
144+
Wert-aus-DB von rule.key
145+
$compare
146+
rule.value
147+
```
148+
149+
Dabei haben die Operatoren folgende Bedeutung:
150+
151+
- `==` : Die Werte müssen exakt gleich sein (default).
152+
- `!=` : Die Werte müssen ungleich sein.
153+
- `<` : Der Wert in der Datenbank muss kleiner sein als der Vergleichswert.
154+
- `>` : Der Wert in der Datenbank muss größer sein als der Vergleichswert.
155+
- `<=` : Der Wert in der Datenbank muss kleiner oder gleich sein wie der Vergleichswert.
156+
- `>=` : Der Wert in der Datenbank muss größer oder gleich sein wie der Vergleichswert.
157+
- `in`: Mindestens ein Wert der Vergleichsliste muss in dem Listenwert aus der Datenbank vorkommen.
158+
- `all`: Alle Werte der Vergleichsliste müssen in dem Listenwert aus der Datenbank vorkommen.
159+
- `notin`: Kein Wert der Vergleichsliste darf in dem Listenwert aus der Datenbank vorkommen.
160+
- `regex`: Regex String, der auf den Buchungstext angewendet werden soll. Ein Teil-Treffer des RegExes wird als Treffer gewertet.
161+
162+
#### .tags, list (nur bei metatype: `rule`)
163+
164+
Liste mit Tags, die bei getroffene Einträge hinzugefügt werden.
84165

85-
## Handling von Prioritäten
166+
#### .category, str (nur bei metatype: `category`)
86167

87-
Die Priorität wird zwischen 0 und 100 automatisch gesetzt, kann aber auch abgegen werden. 0 ist unwichtig, 100 ist wichtig.
168+
Name der Hauptkategorie, die bei einem Treffer für den Eintrag gesetzt werden soll. Es muss entweder eine Haupt- oder eine Sekundärkategorie angegeben werden.
88169

89-
Beim Tagging werden nur Einträge selektiert, die eine niedrigere Priorität haben als die akutelle Regel.
170+
#### .priority, int (nur bei metatype: `category`)
90171

91-
Es wird beim Taggen entweder die Priorität 1 (automatisches Taggen), die der Regel gesetzt (wenn diese höher ist) oder die explizit übermittelte. Ausnahmen sind:
172+
Priorität der Regel. Eine höhere Priorität (größere Zahl) überschreibt zuvor gesetzt Kategorien mit einer niedrigeren Priorität.
92173

93-
- Das manuelle Taggen: Hier wird immer eine Priorität von 99 gesetzt.
94-
- Das automatische Tagging mit einer explizit angegebenen Regel: Hier werden Einträge < 99 selektiert und überschrieben, dann aber wieder die Priorät der Regel (oder 1) gesetzt.
174+
Ein manuelles Kategorisieren hat immer die höchste Priorität.

app/static/js/index.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ function removeTags() {
141141
*/
142142
function manualTagEntries() {
143143
const category = document.getElementById('input_manual_category').value;
144-
const subcategory = document.getElementById('input_manual_subcategory').value;
145144
let tags = document.getElementById('input_manual_tags').value;
146145
const iban = document.getElementById('input_iban').value;
147146

@@ -164,7 +163,6 @@ function manualTagEntries() {
164163

165164
let tagging = {
166165
'category': category,
167-
'subcategory': subcategory,
168166
'tags': tags
169167
}
170168

app/templates/index.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ <h3>Tagging</h3>
8383
</select>
8484
<button onclick="tagEntries()">Auto Tag</button>
8585
<input type="text" value="" id="input_manual_category" placeholder="Manual Category">
86-
<input type="text" value="" id="input_manual_subcategory" placeholder="Manual Sub-Category">
8786
<input type="text" value="" id="input_manual_tags" placeholder="Manual Tag">
8887
<button onclick="manualTagEntries()">Manuelles Taggen</button>
8988
<button onclick="removeTags()">Tags entfernen</button>

0 commit comments

Comments
 (0)