feat: Kategorien aus Auswertungen ausnehmen (z. B. „Kontoübertrag")

Umbuchungen zwischen eigenen Konten sind keine Ausgabe – das Geld ist nicht weg,
es liegt woanders. Bisher blieb nur die Wahl zwischen einer echten Transfer-
Buchung (bildet die Wirklichkeit ab, braucht aber auf beiden Seiten passende
Regeln und schätzt bei Fremdwährung den Gegenwert) oder einer gewöhnlichen
Ausgabe, die Budget und Statistik verfälscht.

Kategorien haben jetzt den Schalter „Nicht in Auswertungen einrechnen": Die
Buchung wirkt weiter auf den Kontostand, bleibt aber aus Budget, Dashboard und
Auswertungen heraus. Gefiltert wird zentral in actual_expense_by_category und
income_by_category – damit greift es zugleich für Budget-Donut, Budget-
Fortschritt, Einnahmen/Ausgaben, Ausgaben-Anteile und die Budget-Seite.

Das ersetzt die Transfer-Paarung nicht, es ist der einfachere Weg: kein
Gegenkonto, keine Kursschätzung, dafür ohne Verbindung zwischen den beiden Seiten.

Migration 0013, Schalter im Kategorie-Dialog, Kennzeichnung in der Liste, Test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-21 10:17:20 +02:00
co-authored by Claude Opus 4.8
parent ec0aa62017
commit 5c8b53a995
9 changed files with 142 additions and 7 deletions
+4 -1
View File
@@ -154,6 +154,7 @@ def create_category(
type=group.kind, # erbt die Art der Gruppe
icon=payload.icon,
color=payload.color,
excluded_from_stats=payload.excluded_from_stats,
position=_next_position(db, Category, owner_id=user.id, group_id=group.id),
)
db.add(cat)
@@ -177,7 +178,9 @@ def update_category(
cat.group_id = group.id
cat.type = group.kind # Art an die neue Gruppe angleichen
for key, value in data.items():
if value is not None or key == "is_archived":
# Bei den Schaltern zählt auch False als gesetzter Wert – sonst ließe sich
# ein einmal gesetztes Häkchen nie wieder entfernen.
if value is not None or key in ("is_archived", "excluded_from_stats"):
setattr(cat, key, value)
db.commit()
db.refresh(cat)