BLZ-Bankdaten: Laufzeit-Auto-Update ins Volume + Einstellungen-Seite

Statt npm-Rebuild-Wartung aktualisiert sich der Bankleitzahlen-Datensatz
jetzt zur Laufzeit. Ein Scheduler (taeglich 03:30 + Catch-up 90s) prueft
gemaess konfigurierbarem Intervall und laedt current.json/next.json von
npm/jsDelivr (Paket bankdata-germany) in das neue Bind-Mount-Volume
BANKDATA_DIR (./data/bankdata -> /app/bankdata).

Lookup bevorzugt den Volume-Datensatz vor den ins Image gebackenen Daten
(Fallback). Es wird kein Fremdcode ausgefuehrt - nur JSON gelesen und die
current+next-Delta-Logik nachgebaut. Validierung (>=1000 Eintraege, Format)
+ atomarer Write (tmp+rename) schuetzen den guten Stand vor Muell.

Datenschutz: Der Updater sendet keine Kundendaten, laedt nur eine
oeffentliche Datendatei; abschaltbar; bei Fehler/ohne Egress greift Builtin.

Neue Einstellungen-Seite /settings/bank-data zeigt Datenstand, Update-
Verfuegbarkeit und bietet "Jetzt aktualisieren" + Auto-Update-Schalter +
Intervall. Endpoints GET /api/settings/blz, POST /api/settings/blz/update-now.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 13:15:07 +02:00
co-authored by Claude Opus 4.8
parent 73bd72bd9f
commit 91fbe12299
16 changed files with 788 additions and 7 deletions
+25
View File
@@ -97,6 +97,31 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🔄 BLZ-/Bankdaten: Auto-Update via Volume + Einstellungen** (2026-08-12)
- Neue Einstellungen-Seite **Einstellungen → Bankdaten (BLZ)** (`/settings/bank-data`):
zeigt Datenstand (aktive Quelle Volume/Image, Version, Anzahl Banken,
zuletzt geprüft/aktualisiert, neueste verfügbare Version + „Update
verfügbar"-Badge, letzter Fehler). Button **„Jetzt prüfen & aktualisieren"**
(+ „Neu laden erzwingen"). Auto-Update-Schalter + **Intervall in Tagen** (1365).
- **Echtes Laufzeit-Update** statt Rebuild: Ein Scheduler (täglich 03:30 +
Catch-up 90s nach Start) prüft, ob laut Intervall fällig, und lädt dann den
aktuellen Datensatz. Quelle = npm/jsDelivr (`bankdata-germany` current.json +
next.json), gespeichert im **Bind-Mount-Volume** `BANKDATA_DIR`
(`./data/bankdata``/app/bankdata`, neu in docker-compose + Dockerfile mkdir
+ .env.example).
- **Lookup-Vorrang:** Volume-Datensatz (aktuell) vor ins Image gebackenen Daten
(`bankdata-germany`, Fallback). Kombiniert current+next-Delta wie das Paket.
Kein Fremdcode nur JSON wird gelesen. Validierung (≥1000 Einträge, Format)
verhindert, dass Müll/HTML den guten Datenstand überschreibt (atomarer
Write via tmp+rename).
- **Datenschutz:** Der Updater sendet KEINE Kundendaten lädt nur eine
öffentliche Datendatei. Beim IBAN-Lookup verlässt weiterhin nichts den Server.
Auto-Update ist abschaltbar; ohne Egress/bei Fehler greift der Builtin-Stand.
- Endpoints: `GET /api/settings/blz` (settings:read), `POST /api/settings/blz/update-now`
(settings:update, `?force=1`). Settings-Keys `blzAutoUpdateEnabled` (default true),
`blzUpdateIntervalDays` (default 30) in Whitelist + validiert.
- **Damit entfällt die manuelle `npm update`-Wartung** aus dem vorherigen Punkt.
- [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