fix: Bei keinem Treffer zeigen, was ueberhaupt geladen wurde
N26 und Revolut sind bei Enable Banking abgedeckt – in 31 Laendern, unter genau diesen Namen. Wer sie trotzdem nicht findet, bekommt die falsche Liste, und der haeufigste Grund ist eine als Sandbox statt Production angelegte Anwendung: Dann kommen Test-Institute, man sieht also Banken, nur nicht die echten. Bleibt die Suche ohne Treffer, stehen jetzt acht Beispiele aus der geladenen Liste da. Sind das lauter Mock-Institute, ist die Ursache auf einen Blick zu sehen statt nach Namensvarianten zu raten. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -89,11 +89,13 @@ def banken(db: Session, user: User, land: str | None = None,
|
||||
"logo": b.get("logo"), "psu_types": b.get("psu_types", []),
|
||||
"beta": bool(b.get("beta"))})
|
||||
treffer.sort(key=lambda b: (b["name"].lower(), b.get("country") or ""))
|
||||
# „gesamt" mitliefern: Sonst sieht „keine Treffer" gleich aus, egal ob die
|
||||
# Liste leer kam oder der Suchbegriff nicht passte – und man sucht den
|
||||
# Fehler an der falschen Stelle.
|
||||
# „gesamt" und eine Kostprobe mitliefern: Sonst sieht „keine Treffer"
|
||||
# gleich aus, egal ob die Liste leer kam, der Suchbegriff nicht passte –
|
||||
# oder die Anwendung als Sandbox angelegt wurde und lauter Test-Institute
|
||||
# liefert. An der Kostprobe sieht man Letzteres sofort.
|
||||
beispiele = sorted({str(b.get("name")) for b in roh if b.get("name")})[:8]
|
||||
return {"gesamt": len(roh), "treffer": treffer[:MAX_TREFFER],
|
||||
"gekuerzt": len(treffer) > MAX_TREFFER}
|
||||
"gekuerzt": len(treffer) > MAX_TREFFER, "beispiele": beispiele}
|
||||
|
||||
|
||||
def starte_verbindung(db: Session, user: User, aspsp_name: str, land: str,
|
||||
|
||||
@@ -603,7 +603,9 @@
|
||||
"searchHint": "Ohne Land wird überall gesucht. Das ist meist richtig: Das Sitzland einer Bank steht nicht in der IBAN – Revolut vergibt deutsche IBANs, sitzt aber in Litauen.",
|
||||
"allCountries": "alle Länder",
|
||||
"noMatch": "{{gesamt}} Banken geladen, aber keine passt zum Suchbegriff. Versuch etwas Kürzeres – manche heissen in der Liste anders als im Alltag.",
|
||||
"noneLoaded": "Die Schnittstelle hat gar keine Banken geliefert. Das liegt nicht am Suchbegriff: Prüf, ob deine Anwendung bei Enable Banking schon aktiv ist – sie wird es erst, wenn du dort deine eigenen Konten verknüpft hast."
|
||||
"noneLoaded": "Die Schnittstelle hat gar keine Banken geliefert. Das liegt nicht am Suchbegriff: Prüf, ob deine Anwendung bei Enable Banking schon aktiv ist – sie wird es erst, wenn du dort deine eigenen Konten verknüpft hast.",
|
||||
"sampleTitle": "Beispiele aus der geladenen Liste:",
|
||||
"sandboxHint": "Stehen dort lauter Test- oder Mock-Institute statt echter Banken, ist deine Anwendung im Control Panel als „Sandbox“ angelegt. N26 und Revolut gibt es nur in „Production“ – dort heissen sie genau so, in DE wie in LT."
|
||||
},
|
||||
"bankReturn": {
|
||||
"title": "Rückkehr von der Bank",
|
||||
|
||||
@@ -603,7 +603,9 @@
|
||||
"searchHint": "Without a country it searches everywhere, which is usually right: a bank's home country is not in the IBAN – Revolut issues German IBANs but is based in Lithuania.",
|
||||
"allCountries": "all countries",
|
||||
"noMatch": "{{gesamt}} banks loaded, but none matches. Try something shorter – some are listed under a different name than the one you know.",
|
||||
"noneLoaded": "The interface returned no banks at all. That is not the search term: check whether your Enable Banking application is active yet – it only becomes active once you have linked your own accounts there."
|
||||
"noneLoaded": "The interface returned no banks at all. That is not the search term: check whether your Enable Banking application is active yet – it only becomes active once you have linked your own accounts there.",
|
||||
"sampleTitle": "Examples from the loaded list:",
|
||||
"sandboxHint": "If those are test or mock institutions instead of real banks, your application is registered as “Sandbox” in the Control Panel. N26 and Revolut exist only in “Production”, where they are listed under exactly those names."
|
||||
},
|
||||
"bankReturn": {
|
||||
"title": "Back from your bank",
|
||||
|
||||
@@ -265,10 +265,27 @@ export default function Bankanbindung() {
|
||||
{banken.treffer.length === 0 ? (
|
||||
// Der Unterschied zwischen „Liste kam leer" und „nichts passte"
|
||||
// entscheidet, wo man den Fehler sucht.
|
||||
<p className="muted small">
|
||||
<div className="alert" style={{ display: "block" }}>
|
||||
<p className="muted small" style={{ marginTop: 0 }}>
|
||||
{banken.gesamt === 0 ? t("bank.noneLoaded")
|
||||
: t("bank.noMatch", { gesamt: banken.gesamt })}
|
||||
</p>
|
||||
{banken.gesamt > 0 && (
|
||||
<>
|
||||
{/* Eine Kostprobe der geladenen Liste. Stehen dort lauter
|
||||
Test-Institute, ist die Anwendung als Sandbox angelegt –
|
||||
das sieht man hier auf einen Blick. */}
|
||||
<p className="muted small" style={{ marginBottom: 2 }}>
|
||||
{t("bank.sampleTitle")}
|
||||
</p>
|
||||
<ul className="muted small selectable"
|
||||
style={{ paddingLeft: "1.2em", margin: 0 }}>
|
||||
{(banken.beispiele || []).map((n) => <li key={n}>{n}</li>)}
|
||||
</ul>
|
||||
<p className="muted small">{t("bank.sandboxHint")}</p>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
<>
|
||||
<p className="muted small">
|
||||
|
||||
Reference in New Issue
Block a user