Regeln, die halten: Bankumsätze automatisch kategorisieren
Du öffnest deinen Bankexport. Derselbe Supermarkt taucht dreimal auf, mit drei verschiedenen Namen: REWE SAGT DANKE, REWE 123 KOELN, REWE//KOELN 4471. Du sortierst sie von Hand. Nächsten Monat kommt der nächste Export, und du sortierst wieder. 😐
Genau dieses Problem lösen Regeln. Du sagst Pinke einmal, was etwas ist. Danach bleibt es so — diesen Monat, nächsten Monat, nächstes Jahr.
Warum Konsistenz wichtiger ist als Cleverness
Eine Kategorie nützt nur etwas, wenn sie über die Zeit dasselbe bedeutet. Wenn „Lebensmittel“ im März etwas anderes heißt als im Oktober, kannst du die beiden Monate nicht vergleichen. Du erkennst keinen Trend. Jedes Diagramm lügt ein bisschen.
Deshalb ist Pinke bewusst regelbasiert. Regeln sind langweilig, und das ist der Punkt. Du kannst eine Regel lesen, verstehen und vorhersagen, was sie tun wird.
Zwei Werkzeuge: Händler und Regeln
Klingt ähnlich. Macht aber Verschiedenes.
Händler räumen Namen auf. Aus REWE SAGT DANKE und REWE 123 KOELN wird ein einziger Händler: rewe. Das nennt sich Alias — ein Zweitname für denselben Laden.
Regeln entscheiden über Kategorien. Sie schauen auf den Text, den Händler oder den Betrag und setzen Gruppe, Kategorie und Unterkategorie.
Händler füttern Regeln. Sobald der Name stabil ist, ist auch eine Regel stabil, die sagt „wenn der Händler rewe ist“.
Beides verwaltest du unter /rules und /merchants.
Was passiert, wenn du auf Analysieren klickst
Wenn du eine Datei analysierst, läuft Pinke vier Schritte durch, in dieser Reihenfolge:
- Normalisieren — Rohzeilen aufräumen, einen durchsuchbaren Textblob bauen und Händler‑Aliase abgleichen.
- Regeln — erst deine Regeln, dann die eingebauten Systemregeln.
- ML‑Fallback — nur, wenn keine Regel gepasst hat.
- Review — alles noch Unklare bleibt sichtbar, damit du dich darum kümmern kannst.
Das Wichtigste: Deine Regeln gewinnen. Wenn du eine Regel geschrieben hast, kann dich nichts darunter überstimmen.
Der ML‑Schritt („Machine Learning“ — eine Vermutung anhand von Mustern, keine Regel, die du geschrieben hast) ist ein Sicherheitsnetz, nicht das Hauptsystem. Er übernimmt seine eigene Vermutung nur, wenn er sicher genug ist. Sonst bleibt die Zeile absichtlich unkategorisiert, denn eine falsche Kategorie ist schlimmer als gar keine.
Ein echtes Beispiel
Eingabetext: GRUNDSTEUER B STADT KOELN
Passende Regel: housing.tax.grundsteuer_b
Ergebnis: Gruppe fixed_costs, Kategorie housing, Unterkategorie tax
Und eines, bei dem ML einspringt, weil keine Regel diesen Laden kennt:
Eingabetext: WOLT 8812 HELSINKI
ML‑Vermutung: Gruppe daily_life, Kategorie food, Unterkategorie delivery
Schritt für Schritt: deine erste Regel in 6 Schritten
Sagen wir, dein Fitnessstudio Nordlicht Fitness taucht als NORDLICHT FIT GMBH LASTSCHRIFT auf und landet nirgendwo Sinnvollem. Jeden Monat 34,90 €. Bringen wir das ein für alle Mal in Ordnung.
- Geh auf /rules. Unter Deine Regeln klickst du auf Neue Regel.
- Du siehst eine Zeile mit Modi: Exakte Übereinstimmung, Enthält, Erweitert. Nimm Enthält.
- Ins Textfeld tippst du
nordlicht. Kleinschreibung ist okay — Groß- und Kleinschreibung sind beim Abgleich egal. - Darunter steht ein Satz, der mit Set beginnt. Füll die Lücken: group
fun_lifestyle, categoryleisure, subcategorysubscriptions. Tags wiegymkannst du ergänzen. - Schalte Recurring? ein und wähle Monthly. Jetzt zählt es als Abo und nicht als Überraschung.
- Hake Diese Regel auf alle vorhandenen Transaktionen in meiner Historie anwenden an und klick auf Erstellen.
Dieses letzte Häkchen ist das, was die meisten übersehen. Ohne es gilt die Regel nur für künftige Importe. Mit ihm geht Pinke zurück und korrigiert auch die 34,90‑€‑Buchungen, die du schon hast.
Unsicher, ob eine Regel wirklich tut, was du denkst? Nutz vorher Regel an der Historie testen. Das zeigt dir, was getroffen würde, bevor du dich festlegst.
Enthält oder Regex?
Regeln gleichen Text auf zwei Arten ab.
Enthält ist eine simple Suche. aws findet AWS Emea Luxembourg. Nimm das fast immer. Es ist leicht zu lesen und schwer kaputtzukriegen.
Regex (kurz für „regulärer Ausdruck“ — eine kleine Mustersprache für Text) ist für die sperrigen Fälle. Es steckt im Modus Erweitert.
| Muster | Passt auf | Wann du es brauchst |
|---|---|---|
amzn.*mktp |
AMZN MKTP DE S1234 |
Zwischen zwei Wörtern steht etwas Unbekanntes |
paypal.*\d{4} |
PAYPAL REF 8812 |
Du brauchst Ziffern (\d heißt „eine Ziffer“) |
(rewe\|aldi\|lidl) |
REWE SAGT DANKE |
Irgendeines von mehreren Wörtern |
Faustregel: Fang mit Enthält an. Greif nur dann zu Regex, wenn du einen Grund hast, den du laut aussprechen könntest.
Wenn etwas unklar bleibt: Muster
Manche Zeilen passen auf gar nichts. Das ist in Ordnung, und Pinke versteckt sie nicht.
Auf /ingest klickst du nach dem Analysieren auf Muster. Pinke gruppiert ähnliche Zeilen — nach Zahlungsempfänger, Händler oder Beschreibung — und stellt die unkategorisierten Cluster nach vorn. Du bekommst Vorschläge wie „diese 7 Zeilen sehen nach demselben aus“.
Von da aus kannst du direkt eine Regel anlegen und Auf ähnliche Transaktionen anwenden anhaken, sodass das ganze Cluster in einem Rutsch erledigt ist.
Und falls du dich mal fragst „warum ist das hier gelandet?“, öffne die Zeile. Pinke merkt sich, was gegriffen hat: deine Regel, eine Systemregel oder eine ML‑Vermutung.
Die eingebauten Regeln
Pinke bringt einen Satz schreibgeschützter Systemregeln mit, gruppiert nach Kategorie. Sie geben dir einen brauchbaren Startpunkt, damit du nicht auf eine leere Seite starrst. Anschauen kannst du sie unter /rules.
Die Struktur ist drei Ebenen tief:
group
category
subcategory
Die Gruppen sind fixed_costs, daily_life, family, fun_lifestyle und finance_misc. Miete landet also in fixed_costs > housing > rent und ein Bahnticket in daily_life > transport > public. Arbeitskosten sind auch abgedeckt, etwa finance_misc > work > cloud für eine Serverrechnung.
Dazu gibt es einen eigenen Satz Wertpapierregeln für Broker‑Transaktionen. Die landen unter finance_misc > investments, aufgeteilt in securities_buy, securities_sell und dividends. Sie laufen absichtlich vor allem anderen. Ein Aktienkauf namens „Kauf US0231351067 Amazon.com Inc“ würde sonst die normale Amazon‑Shopping‑Regel treffen, und ein Verkauf sähe aus wie eine Rückerstattung. Außerdem hängen sie am Handelssignal, nie am Wertpapiernamen — wer also mit der Bankkarte bei Amazon einkauft, hat weiterhin Shopping. Und ein Aktienkauf zählt nicht als Ausgabe: Das Geld ist zu Vermögen geworden, es hat dein Leben nicht verlassen.
Eine ehrliche Warnung
Änderungen an Händlern wirken nicht rückwirkend. Wenn du unter /merchants einen Alias ergänzt, ändern sich deine schon analysierten Zeilen nicht von allein. Deine Diagramme, Berichte und Exporte zeigen weiter das alte Ergebnis, bis du erneut analysierst.
Bei Regeln ist das anders — genau dafür ist das Häkchen „auf meine Historie anwenden“ da. Bei Händlern plan aber eine Neu‑Analyse ein.
Was du davon hast
Wenn erst ein paar Regeln stehen, verschwindet das langweilige monatliche Sortieren größtenteils. Deine Diagramme vergleichen wieder Gleiches mit Gleichem. Ein Sprung in einer Kategorie bedeutet dann, dass wirklich etwas passiert ist — und nicht, dass sich ein Laden umbenannt hat.
Fang klein an. Nimm die eine Buchung, die dich jeden Monat am meisten nervt — Miete, Strom, dieses Fitnessstudio — und schreib eine Regel dafür. Nutz Enthält. Setz das Häkchen für die Historie.
Das Ziel sind nicht hundert Regeln. Das Ziel sind Kategorien, denen du in einem Jahr noch trauen kannst. 🎯
Häufig gestellte Fragen
Du legst eine Regel an, die auf einen Text im Umsatz passt, und sagst ihr, welche Gruppe, Kategorie und Unterkategorie sie setzen soll. Pinke wendet die Regel auf jeden künftigen Import an — und wenn du „auf alle vorhandenen Transaktionen anwenden“ anhakst, auch auf deine bisherigen Buchungen.
Die Bank reicht durch, was das Zahlungsterminal gesendet hat. So wird aus einem Supermarkt schnell REWE SAGT DANKE, REWE 123 KOELN und REWE//KOELN 4471. In Pinke legst du diese Namen als Aliase eines Händlers an — dann ist der Name stabil und Regeln greifen zuverlässig.
Zuerst regelbasiert. Deine eigenen Regeln laufen vor den eingebauten Systemregeln, und eine Machine-Learning-Vermutung kommt nur zum Zug, wenn gar keine Regel gepasst hat. Ist die Vermutung nicht sicher genug, bleibt die Zeile absichtlich unkategorisiert — eine falsche Kategorie ist schlimmer als gar keine.
Nur wenn du es willst. Beim Anlegen einer Regel hakst du „Diese Regel auf alle vorhandenen Transaktionen in meiner Historie anwenden“ an, dann geht Pinke rückwirkend durch deine Daten. Bei Händler-Aliassen ist das anders: Die wirken nicht rückwirkend, dafür musst du erneut analysieren.
Fast immer Enthält. Das ist eine simple Textsuche, leicht zu lesen und schwer kaputtzukriegen. Regex steckt im Modus Erweitert und ist für sperrige Fälle gedacht, etwa wenn zwischen zwei Wörtern etwas Unbekanntes steht (amzn.*mktp) oder du Ziffern treffen musst.