feat: Aufschluesselung zeigt, was der Stichtag ausschliesst

Buchungen bis einschliesslich des Stichtags zaehlen nicht in den Kontostand –
sie stecken schon im Anfangsbestand. In der Liste stehen sie aber, und in den
Auswertungen zaehlen sie mit. Das ist richtig so, war in der Oberflaeche aber
nirgends zu sehen: Der Unterschied zwischen dem, was man sieht, und dem, was
gerechnet wird, liess sich nicht erklaeren.

Ein Konto, dessen Stichtag nach dem Beginn des eingelesenen Auszugs liegt,
zeigt deshalb einen Kontostand, der zu den sichtbaren Buchungen nicht passt –
und niemand kaeme darauf, warum.

Die Rechnung nennt jetzt Stichtag, Anzahl und Summe der ausgeschlossenen
Buchungen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-30 13:41:22 +02:00
co-authored by Claude Opus 5
parent 7c0d13cc8a
commit 67a32bdda9
5 changed files with 80 additions and 2 deletions
+31
View File
@@ -71,6 +71,37 @@ def aufschluesselung(db: Session, account: Account) -> dict:
- teile["uebertraege_raus"]["cents"] + teile["uebertraege_rein"]["cents"]),
"anzahl": 0,
}
# Was der Stichtag ausschliesst. Diese Buchungen stehen in der Liste und in
# den Auswertungen, zaehlen aber nicht in den Kontostand – sie stecken schon
# im Anfangsbestand. Ohne diese Angabe ist der Unterschied zwischen dem, was
# man sieht, und dem, was gerechnet wird, nicht zu erklaeren.
if account.opening_date is not None:
bis = Transaction.date <= account.opening_date
def vorher(spalte, *bedingungen) -> tuple[int, int]:
summe, anzahl = (db.query(func.sum(spalte), func.count())
.filter(*bedingungen).filter(bis).one())
return int(summe or 0), int(anzahl or 0)
ein, n1 = vorher(Transaction.amount_cents,
Transaction.account_id == account.id,
Transaction.type == TxnType.income)
aus, n2 = vorher(Transaction.amount_cents,
Transaction.account_id == account.id,
Transaction.type == TxnType.expense)
raus, n3 = vorher(Transaction.amount_cents,
Transaction.account_id == account.id,
Transaction.type == TxnType.transfer)
rein, n4 = vorher(func.coalesce(Transaction.to_amount_cents,
Transaction.amount_cents),
Transaction.to_account_id == account.id,
Transaction.type == TxnType.transfer)
teile["vor_stichtag"] = {"cents": ein - aus - raus + rein,
"anzahl": n1 + n2 + n3 + n4}
else:
teile["vor_stichtag"] = {"cents": 0, "anzahl": 0}
teile["stichtag"] = account.opening_date.isoformat() if account.opening_date else None
return teile