feat: Rueckkehr von der Bank sagt, was ankam und was liegen blieb

"3 Konten gefunden" beantwortet die entscheidende Frage nicht: Hat die Bank nur
drei geschickt, oder hat Certain die uebrigen verworfen? Der Server rechnet
beides laengst aus, die Seite zeigte es nur, wenn ueberhaupt kein Konto ankam.

Jetzt steht immer dabei, wie viele die Bank geschickt hat. Und Konten, die
Certain nicht uebernehmen konnte, werden nicht mehr bloss gezaehlt, sondern
mitsamt dem gezeigt, was von ihnen ankam – uebersprungen werden sie, weil die
Kennung fehlt, mit der sich Salden und Umsaetze holen lassen.

Anlass: Fuenf Revolut-Pockets sind im Control Panel freigeschaltet und wurden
bei der Autorisierung ausdruecklich mitgewaehlt, kommen in Certain aber nicht
an. Ohne diese Zahlen laesst sich nicht sagen, wo sie verloren gehen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-27 21:12:45 +02:00
co-authored by Claude Opus 5
parent 4c2e72cb20
commit a159546218
5 changed files with 68 additions and 7 deletions
+28
View File
@@ -1129,3 +1129,31 @@ def test_abruf_ueber_schon_eingelesene_monate_bucht_nicht_doppelt(admin, fake_ba
assert r["neu"] == 1, "der echte Umsatz muss ankommen"
# 35.00 einmal (aus der CSV) plus 7.77 neu – nicht 35.00 zweimal.
assert admin.get(f"/api/accounts/{konto['id']}").json()["balance_cents"] == -4277
def test_uebergangene_konten_werden_gezeigt_nicht_nur_gezaehlt(admin, fake_bank):
"""Ohne die Zahl der uebermittelten Konten laesst sich nicht sagen, ob ein
fehlendes Konto gar nicht kam oder hier haengen blieb – und man sucht an
der falschen Stelle."""
_app(admin)
gut = f"acc-{secrets.token_hex(4)}"
fake_bank(konten=[
{"uid": gut, "name": "Girokonto", "currency": "CHF"},
# So sieht ein Pocket aus, wenn die Kennung fehlt.
{"name": "Sparen", "currency": "CHF",
"account_id": {"other": {"identification": "OTHI 6bdb2e3e", "scheme_name": "OTHI"}}},
{"name": "Steuern", "currency": "CHF"},
])
state = admin.post("/api/bank/connect",
json={"aspsp_name": f"Pockets-{secrets.token_hex(3)}",
"country": "LT"}).json()["state"]
r = admin.post(f"/api/bank/callback?state={state}&code=guter-code")
assert r.status_code == 200, r.text
daten = r.json()
assert daten["konten"] == 1
assert daten["uebermittelt"] == 3, "die Bank hat drei geschickt"
assert daten["ohne_kennung"] == 2
# Und zwar mitsamt dem, was ankam – sonst raet man, was ihnen fehlt.
namen = {k.get("name") for k in daten["uebergangen"]}
assert namen == {"Sparen", "Steuern"}