fix: "Keine Konten" nennt jetzt die Ursache

Drei verschiedene Faelle sahen alle gleich aus: Die Bank schickte nichts, sie
schickte Eintraege ohne Kennung (die still verworfen wurden), oder alle Konten
waren schon bekannt – Letzteres meldete faelschlich "0 Konten", obwohl alles
in Ordnung war.

Die Antwort unterscheidet jetzt uebermittelt / neu / bekannt / ohne_kennung.
Die Rueckkehr-Seite zeigt bei null nutzbaren Konten den passenden Hinweis: Im
eingeschraenkten Betrieb gibt eine Bank nur heraus, was zuvor im Control Panel
unter "Activate by linking accounts" verknuepft wurde.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-26 22:32:23 +02:00
co-authored by Claude Opus 5
parent 8fa4ac5ef4
commit 277fe8b0e2
5 changed files with 81 additions and 10 deletions
+18 -4
View File
@@ -188,10 +188,15 @@ def schliesse_verbindung(db: Session, user: User, state: str, code: str) -> dict
except ValueError:
verbindung.valid_until = None
neu = 0
for konto in daten.get("accounts", []):
uebermittelt = daten.get("accounts") or []
neu = bekannt = ohne_kennung = 0
for konto in uebermittelt:
uid = konto.get("uid")
if not uid:
# Nicht stillschweigend verwerfen: Sonst sieht „0 Konten" genauso
# aus, als hätte die Bank gar nichts geschickt – und man sucht den
# Fehler bei der Bank statt hier.
ohne_kennung += 1
continue
vorhanden = (
db.query(BankAccountLink)
@@ -199,7 +204,9 @@ def schliesse_verbindung(db: Session, user: User, state: str, code: str) -> dict
.first()
)
if vorhanden is not None:
# Schon bekannt – die Zuordnung bleibt bewusst erhalten.
vorhanden.connection_id = verbindung.id
bekannt += 1
continue
db.add(BankAccountLink(
owner_id=user.id,
@@ -212,8 +219,15 @@ def schliesse_verbindung(db: Session, user: User, state: str, code: str) -> dict
neu += 1
db.commit()
return {"connection_id": verbindung.id, "konten": neu,
"valid_until": verbindung.valid_until.isoformat() if verbindung.valid_until else None}
return {
"connection_id": verbindung.id,
"konten": neu + bekannt, # nutzbar, egal ob neu oder schon bekannt
"neu": neu,
"bekannt": bekannt,
"uebermittelt": len(uebermittelt),
"ohne_kennung": ohne_kennung,
"valid_until": verbindung.valid_until.isoformat() if verbindung.valid_until else None,
}
def _betrag_cents(umsatz: dict) -> int | None: