feat: Pockets sind erkennbar und zuordenbar

Ein Revolut-Pocket bringt weder eigene IBAN noch eigenen Namen mit. Certain
hielt bisher nur uid, IBAN, Name und Waehrung fest – mehrere Konten derselben
Bank sahen damit gleich aus, und in der Zeile stand die rohe Kennung.

Jetzt werden Produktbezeichnung und die Kennung fuer Konten ohne IBAN
mitgefuehrt, der angezeigte Name faellt der Reihe nach auf Name, Details,
Produkt, Kennung, IBAN zurueck statt auf die uid, und der uebermittelte
Datensatz laesst sich aufklappen – nachsehen statt raten, wenn zwei Konten
gleich aussehen. Beim Neuverbinden werden die Merkmale aufgefrischt, ohne die
Zuordnung anzutasten.

Fehlt ein Konto in der Waehrung des Bankkontos, steht das jetzt dabei; vorher
war die Auswahl einfach leer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-26 23:02:25 +02:00
co-authored by Claude Opus 5
parent d8995116cb
commit f684c752d8
8 changed files with 199 additions and 11 deletions
+25 -2
View File
@@ -208,7 +208,12 @@ export default function Bankanbindung() {
<div className="sender-row" key={l.id}>
<div className="muted small selectable">
<strong>{l.remote_name || l.iban || l.remote_uid}</strong>
{l.iban ? ` · ${l.iban}` : ""} · {l.currency}
{/* Produktbezeichnung und Ersatzkennung sind bei Pockets das
Einzige, was sie unterscheidet – ohne IBAN, oft ohne
eigenen Namen sähen mehrere Konten sonst gleich aus. */}
{l.product ? ` · ${l.product}` : ""}
{l.iban ? ` · ${l.iban}` : l.other_id ? ` · ${l.other_id}` : ""}
{` · ${l.currency}`}
</div>
<select value={l.account_id || ""}
onChange={(e) => zuordnen(l, e.target.value)}>
@@ -219,9 +224,27 @@ export default function Bankanbindung() {
</select>
{l.account_id ? null : (
<p className="muted small" style={{ margin: "4px 0 0" }}>
{t("bank.mapHint")}
{/* Ohne Konto in dieser Währung ist die Auswahl leer, und
man sucht den Fehler bei der Bank statt bei sich. */}
{konten.some((k) => k.currency === l.currency)
? t("bank.mapHint")
: t("bank.noAccountForCurrency", { currency: l.currency })}
</p>
)}
{Object.keys(l.bank_felder || {}).length > 0 && (
<details className="muted small" style={{ marginTop: 4 }}>
<summary>{t("bank.rawFields")}</summary>
<div className="selectable" style={{ marginTop: 4 }}>
{Object.entries(l.bank_felder).map(([feld, wert]) => (
<div key={feld}>
{feld}: {typeof wert === "object" && wert !== null
? JSON.stringify(wert)
: String(wert)}
</div>
))}
</div>
</details>
)}
</div>
))
)}