Bankkarte: IBAN pruefen + BIC/Bank offline aus Bundesbank-BLZ ausfuellen

Neuer Button "BIC & Bank aus IBAN abrufen" im Bankkarten-Modal fuellt BIC +
Banknamen automatisch und validiert dabei die IBAN-Pruefziffer (mod-97).
Leeres IBAN-Feld -> OK-Messagebox statt Anfrage.

Datenschutzfreundlich/offline: kein Dritt-Dienst. Nachschlag im eigenen
Backend ueber die Bundesbank-Bankleitzahlendatei (bankdata-germany) +
ibantools fuer die Pruefziffer. Die IBAN verlaesst nie den Server; zurueck
kommen nur oeffentliche Bankverzeichnis-Daten.

Endpoint: POST /api/bank-cards/iban-lookup (nur eingeloggt).
Wartung: bankdata-germany/ibantools ~quartalsweise per npm update ziehen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 12:32:53 +02:00
co-authored by Claude Opus 4.8
parent aff3f7e84a
commit 73bd72bd9f
7 changed files with 196 additions and 6 deletions
+22
View File
@@ -97,6 +97,28 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🏦 Bankkarte-Modal: IBAN-Prüfung + BIC/Bank-Auto-Ausfüllen** (2026-08-12)
- Button „BIC & Bank aus IBAN abrufen" unter dem IBAN-Feld (Bankkarte
hinzufügen/bearbeiten). Füllt BIC + Banknamen automatisch aus und prüft
dabei die **IBAN-Prüfziffer (mod-97)** → erkennt Tippfehler.
- **Offline / datenschutzfreundlich:** kein Dritt-Dienst. Nachschlag im
eigenen Backend über die **Bundesbank-Bankleitzahlendatei**
(`bankdata-germany`) + `ibantools` für die Prüfziffer. Die IBAN verlässt
nie den Server; zurück kommen nur öffentliche Bankverzeichnis-Daten.
- Endpoint `POST /api/bank-cards/iban-lookup` (nur eingeloggt). Antwort:
`{valid:false}` (Prüfziffer falsch) · `{valid:true, bic, bankName, blz}`
(DE-Bank gefunden) · `{valid:true, bic:null,…}` (gültig, aber Nicht-DE/
unbekannte BLZ → Info-Toast).
- Leeres IBAN-Feld → **OK-Messagebox** „IBAN erforderlich" statt Anfrage.
- **Wartung:** `bankdata-germany` + `ibantools` müssen ~quartalsweise per
`npm update` aktualisiert werden (Bundesbank-BLZ ändert sich mehrmals/Jahr).
- [x] **📌 Update-Banner klebt oben fest (sticky)** (2026-08-12)
- „Neue Version verfügbar"-Banner scrollte weg; jetzt `sticky` an der
Viewport-Oberkante. Banner meldet seine Höhe als CSS-Var `--app-banner-h`,
an der die Sticky-Header von ContractDetail/ContractForm einrasten
(`top-[var(--app-banner-h,0px)]`) → keine Überdeckung.
- [x] **📋 Hauptmenü: Gutschriften/Lieferscheine-Gesamtübersicht** (2026-08-12)
- Neuer Menüpunkt „Gutschriften" (Sidebar, `show: contracts:read`) → Seite
`/credit-notes` mit Tabelle aller Belege (Beleg-Nr., Art, Kunde, Vertrag,