fix: Saldo-Abgleich meldet Zeilen, die auf ein Gegenkonto warten

Eine Zeile mit „Gegenkonto wählen" wird nicht gebucht, der Abgleich zählte ihren
Betrag aber trotzdem mit und meldete „stimmt überein" – das Geld fehlte im Konto,
ohne dass es auffiel.

Duplikate und Gegenbuchungen zählen weiterhin mit (ihr Betrag steckt bereits in
einer früher gebuchten Buchung); wartende Zeilen zählen jetzt als 0 und tauchen
als erste Abweichung mit Datum und Empfänger auf.

Nachgestellt am echten Raiffeisen-Auszug: Zeigt die Transfer-Regel „Übertrag" auf
das importierte Konto selbst, bleibt die Gutschrift über 92.00 ungebucht; der
Abgleich nennt jetzt genau diese Zeile.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-21 09:17:22 +02:00
co-authored by Claude Opus 4.8
parent c438d1ec50
commit ab5410ca6f
2 changed files with 43 additions and 4 deletions
+9 -4
View File
@@ -551,10 +551,15 @@ def reconcile(rows: list[dict]) -> dict:
return {"available": False}
def gebucht(r: dict) -> int:
"""Betrag, der tatsächlich ins Konto fließt – 0 für nicht gebuchte Zeilen
(storniert, ungültig). Nur so fällt auf, wenn die Bank etwas verbucht hat,
wir aber nichts (z. B. nicht zugeordnete Gebührenspalte)."""
return (r.get("amount_cents") or 0) if r.get("valid") else 0
"""Betrag, der im Konto ankommt – 0, wenn die Zeile nirgends landet.
Duplikate und Gegenbuchungen zählen mit: deren Betrag steckt bereits in
einer früher gebuchten Buchung. Eine Zeile, die auf ein Gegenkonto wartet,
zählt dagegen NICHT – sie ist unterwegs verloren, und genau das soll der
Abgleich melden."""
if not r.get("valid") or r.get("needs_target"):
return 0
return r.get("amount_cents") or 0
# Manche Banken exportieren neueste Buchung zuerst – für den Abgleich drehen.
dated = [r["date"] for r in seq if r.get("date")]