Zwei Features an derselben Stelle, die im Arbeitsverzeichnis nebeneinander lagen und sich dieselben Dateien teilen (Routen, BankingController, Bankzugang, Zugangsformular, Dokumentation) – getrennte Commits ließen sich daraus nur mit einem kaputten Zwischenstand schneiden. PayPal als zweite Art von Bankverbindung ---------------------------------------- „Bankverbindung anlegen“ führt zur Wahl der Art: HBCI/FinTS oder PayPal (bank_zugaenge.typ, Migration 014). Die Abfrage läuft über die Classic-NVP-API (Services\PaypalNvp, TransactionSearch und GetBalance). Kein Dreischritt, da PayPal genau ein Guthabenkonto führt – Zugangsdaten und Kontenzuordnung stehen in einem Formular. Konten, Umsätze, Protokoll, Regeln und Abgleich bleiben dieselben. Bankleitzahlen-Verzeichnis -------------------------- Verwaltung → Bankleitzahlen (/verwaltung/bankinstitute, Migration 015) nimmt die CSV-Institutsliste der Deutschen Kreditwirtschaft auf und beantwortet damit die eine Angabe, die beim Anlegen einer FinTS-Verbindung regelmäßig fehlt: den PIN/TAN-Zugangspunkt. Reine Nachschlagedaten ohne benutzer_id; ein Import ersetzt den gesamten Bestand, statt ihn zu ergänzen. „Nur prüfen“ und „Übernehmen“ sind zwei Knöpfe an derselben Datei – abgelegt wird sie nicht, ihr Inhalt steht ja in der Tabelle. Services\FintsInstituteImport nimmt der Datei ihre Eigenheiten ab: ISO-8859-1 statt UTF-8, ein Institutsname über zwei Zeilen in Anführungszeichen, dieselbe Bankleitzahl vielfach (eine Zeile je Filiale), Hunderte leerer Zeilen am Ende, Text statt Adresse, wo es keinen PIN/TAN-Zugang gibt. Spalten werden über ihre Überschrift angesprochen; fehlen BLZ und Institut, bricht der Import ab. Gesucht wird über Bankleitzahl, BIC, Name und Ort in einem Zug: „1822“ steht bei der 1822direkt im Namen und bei der Frankfurter Sparkasse im BIC, in keiner der beiden Bankleitzahlen. Aus der Trefferliste führt „Verbindung anlegen“ ins gefüllte FinTS-Formular. Die FinTS-Adresse ist damit kein Pflichtfeld mehr – bleibt sie leer, wird sie zur Bankleitzahl nachgeschlagen. Findet auch das nichts, weist Bankzugang den Zugang ab, statt ihn ohne Gegenstelle zu speichern. Tests: 31_PaypalZugangTest, 32_BankinstituteTest, e2e/specs/banking.spec.js, e2e/specs/bankinstitute.spec.js. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
48 lines
2.6 KiB
SQL
48 lines
2.6 KiB
SQL
-- Das Bankleitzahlen-Verzeichnis der FinTS-Institute.
|
||
--
|
||
-- Die Liste kommt als CSV von der Deutschen Kreditwirtschaft
|
||
-- (https://www.hbci-zka.de/) und nennt zu jeder Bankleitzahl unter anderem den
|
||
-- PIN/TAN-Zugangspunkt. Genau der fehlt beim Anlegen einer Bankverbindung am
|
||
-- häufigsten – die Banken verstecken ihn tief in ihrer Hilfe.
|
||
--
|
||
-- Reine Nachschlagedaten: keine benutzer_id, kein Fremdschlüssel, keine
|
||
-- Verweise aus anderen Tabellen. Ein Import ersetzt den gesamten Bestand, statt
|
||
-- ihn zu ergänzen – sonst blieben Institute stehen, die es nicht mehr gibt.
|
||
--
|
||
-- Die Spalten für die Chipkartenverfahren (DDV, RDH-1…10, RAH-7/9/10) der Datei
|
||
-- werden nicht übernommen: Der Finanzmanager spricht ausschließlich PIN/TAN.
|
||
|
||
CREATE TABLE IF NOT EXISTS bankinstitute (
|
||
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
-- Die laufende Nummer der Datei. Sie ist nicht stabil zwischen zwei
|
||
-- Ausgaben, taugt aber als Reihenfolge innerhalb einer.
|
||
nr INT UNSIGNED NOT NULL DEFAULT 0,
|
||
blz VARCHAR(16) NOT NULL,
|
||
bic VARCHAR(16) NOT NULL DEFAULT '',
|
||
institut VARCHAR(191) NOT NULL DEFAULT '',
|
||
ort VARCHAR(128) NOT NULL DEFAULT '',
|
||
rechenzentrum VARCHAR(128) NOT NULL DEFAULT '',
|
||
organisation VARCHAR(64) NOT NULL DEFAULT '',
|
||
-- Der HBCI-Zugang über DNS-Namen; für PIN/TAN belanglos, aber er verrät bei
|
||
-- einer Fehlersuche, welches Rechenzentrum tatsächlich antwortet.
|
||
hbci_adresse VARCHAR(191) NOT NULL DEFAULT '',
|
||
hbci_version VARCHAR(16) NOT NULL DEFAULT '',
|
||
pintan_url VARCHAR(255) NOT NULL DEFAULT '',
|
||
pintan_version VARCHAR(32) NOT NULL DEFAULT '',
|
||
-- „Datum letzte Änderung“ der Zeile, nicht der Datei: Manche Einträge sind
|
||
-- über zehn Jahre alt und entsprechend mit Vorsicht zu genießen.
|
||
stand DATE NULL,
|
||
PRIMARY KEY (id),
|
||
-- Eine Bankleitzahl steht oft mehrfach in der Datei, einmal je Filiale, mit
|
||
-- identischem Zugangspunkt. Deshalb ein gewöhnlicher Index, kein UNIQUE.
|
||
KEY idx_bankinstitut_blz (blz),
|
||
KEY idx_bankinstitut_bic (bic),
|
||
KEY idx_bankinstitut_institut (institut)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- Wann welche Datei eingelesen wurde. Steht bewusst nicht im Einstellungsdialog:
|
||
-- Beides schreibt der Import, von Hand gibt es daran nichts einzustellen.
|
||
INSERT INTO einstellungen (schluessel, wert, bereich) VALUES
|
||
('bankinstitute_datei', '', 'banking'),
|
||
('bankinstitute_import_am', '', 'banking')
|
||
ON DUPLICATE KEY UPDATE schluessel = schluessel;
|