fix: Startdatum lag in der Zukunft – Saldi kamen, Umsaetze nicht

Beim ersten Abruf beginnt Certain am Tag NACH der neuesten vorhandenen Buchung
des Kontos, damit es nicht in schon eingelesene Monate zurueckgreift. Liegt
diese Buchung auf heute, ist der Tag danach morgen – und die Schnittstelle
lehnt das rundweg ab: "date_from can not be in the future".

Der Fehler faellt erst beim Umsatz-Abruf an. Die Saldi sind da schon gelesen
und geschrieben, der Abruf bricht danach ab. Von aussen sieht es genau so aus,
wie der Nutzer es beschrieben hat: Der Kontostand aktualisiert sich, die
Buchungen kommen nie – und die Abweichung bleibt bestehen, obwohl man den
Saldo gerade erst von der Bank uebernommen hat. Genau dieses Uebernehmen legt
naemlich keine Buchung an, aber es gibt fast immer eine von heute.

Das Startdatum wird jetzt auf heute begrenzt. Gegenprobe: Ohne die Begrenzung
verlangt der Abruf den 28.08. an einem 27.08.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-27 20:48:03 +02:00
co-authored by Claude Opus 5
parent b4c90f5221
commit 12ea391e9f
2 changed files with 42 additions and 4 deletions
+10 -4
View File
@@ -501,13 +501,14 @@ def _startdatum(db: Session, user: User, konto: Account,
ein Einzelabruf das Startdatum der uebrigen Konten mit vor, und deren
Umsaetze aus dem uebersprungenen Zeitraum kaemen nie an.
"""
heute = date.today()
if tage is not None:
# Uebergeht den letzten Abruf. Noetig, wenn etwas nicht angekommen ist:
# Sonst laege es fuer immer vor dem Fenster, obwohl die Bank es haette.
return date.today() - timedelta(days=tage)
return heute - timedelta(days=tage)
if verknuepfung.last_sync_at:
return verknuepfung.last_sync_at.date() - timedelta(days=3)
frueheste = date.today() - timedelta(days=ERSTER_ABRUF_TAGE)
return min(heute, verknuepfung.last_sync_at.date() - timedelta(days=3))
frueheste = heute - timedelta(days=ERSTER_ABRUF_TAGE)
letzte = (
db.query(func.max(Transaction.date))
.filter(Transaction.owner_id == user.id, Transaction.account_id == konto.id)
@@ -515,7 +516,12 @@ def _startdatum(db: Session, user: User, konto: Account,
)
if letzte is None:
return frueheste
return max(frueheste, letzte + timedelta(days=1))
# NIE in die Zukunft: Die Schnittstelle lehnt das rundweg ab
# ("date_from can not be in the future") – und zwar erst beim Umsatz-Abruf,
# nachdem die Saldi schon gelesen sind. Dann sieht es aus, als kaemen nur
# Saldi und keine Umsaetze. Liegt die neueste Buchung auf heute, waere der
# Tag danach morgen.
return min(heute, max(frueheste, letzte + timedelta(days=1)))
def hole_umsaetze(db: Session, user: User, verbindung: BankConnection,