Was die Bankverbindung sieht: Auszüge, Fenster und was beim Trennen verschwindet
Zwischen der Anmeldung im Online-Banking und dem Lesen eines Kontoauszugs durch ein CRM liegt ein Unterschied, und er ist nicht kosmetisch. Wenn ein Firmspace-Konto mit einer Bank verbunden wird, erzeugt die Firma im API-Kabinett der Bank ein Token und fügt es im CRM ein. Dieses Token ist nicht das Passwort der Banking-App und öffnet nicht das persönliche Kabinett. Es ist ein Leseschlüssel für Auszüge, und er kann jederzeit auf der Seite der Bank entzogen werden.
Firmspace beschreibt jede Bankintegration mit einem kleinen Fähigkeitsprofil, und das Profil der Bankverbindung ist ehrlich: Auszüge ja, Saldo nein, Webhooks nein, Zahlungsauslösung nein. In klarer Sprache: Das CRM kann die Bewegungen des Kontos herunterladen, es kann kein Geld bewegen, es kann keinen Live-Saldo anzeigen, und die Bank schiebt von sich aus nichts ins CRM. Der Auszug kommt, wenn jemand ihn anfordert.
Diese Anforderung ist eine ausdrückliche Handlung: Das Aktualisieren aller verbundenen Konten läuft über eine Route, die die Konten der Firma einzeln durchgeht und für jedes meldet, ob Zeilen importiert wurden oder ob es mit einer Meldung fehlgeschlagen ist; eine kaputte Verbindung hält die anderen nicht auf. Der tägliche Hintergrundlauf ist eine andere Liste — er erledigt verzögerte Automatisierung, überfällige Rechnungen, wiederkehrende Rechnungen, Zahlungserinnerungen und Postfächer — und Kontoauszüge stehen bewusst nicht darin, weil ein überraschender Import in der Nacht schwerer zu erklären ist als ein Klick. Die Synchronisierung respektiert außerdem eine geschlossene Buchhaltungsperiode: Zeilen, die in einen gesperrten Monat fallen, werden abgelehnt, und die Antwort sagt das auch.
Bevor ein Token gespeichert wird, wird es einmal benutzt, um den Kunden und die Kontenliste zu lesen. Ein falsches Token kommt als schlichte Meldung zurück, es erneut aus dem API-Kabinett zu kopieren; ein Token aus der mobilen App wird mit eigener Begründung abgelehnt; eine Ratenbegrenzung antwortet, dass die Bank um eine Stunde Geduld bittet. Erst dann wird das Token verschlüsselt und in die Datenbank geschrieben, und es wird nie an den Browser zurückgegeben: Die Kontenliste zeigt den Namen, die Währung, den Saldo, wo die Bank ihn liefert, die letzten vier Stellen der IBAN und den Zeitpunkt der letzten Synchronisierung.
Das Verknüpfen ist idempotent im gewöhnlichen Sinn: Dasselbe Bankkonto erneut zu verbinden aktualisiert den bestehenden Datensatz, statt einen zweiten anzulegen, und der Kontoname ist innerhalb der Firma eindeutig, sodass ein doppelter Name den Rest der Nummer erhält. Name und Währung stammen aus der Antwort der Bank und nicht aus dem Formular, was bedeutet: Das CRM erfindet nicht still ein Euro-Konto. Ein Konto, das in diesem Bankkabinett nicht existiert, wird abgelehnt.
Eine Auszugszeile ist klein und konkret. Die Bank sendet den Betrag in Minor-Einheiten und die Zeit in Unix-Sekunden; Firmspace rechnet den Betrag in Haupteinheiten um, mit Rundung auf die kleinste Münze, behält das Vorzeichen, damit eine eingehende Zahlung positiv und eine ausgehende negativ bleibt, und datiert die Zeile nach dem Zeitpunkt der Operation. Die Gegenpartei wird so gespeichert, wie die Bank sie schreibt, zusammen mit dem Verwendungszweck, und die Zeilenkennung der Bank wird als externe Kennung abgelegt. Währungen kommen als numerische ISO-Codes und werden auf ihre dreibuchstabige Form abgebildet.
Die Bank liefert nicht ein Jahr Historie in einer Antwort. Eine Auszugsanfrage umfasst höchstens einunddreißig Tage und eine begrenzte Zeilenzahl, und Firmspace schneidet einen längeren Zeitraum in Fenster, klebt die Antworten zusammen und entfernt wiederholte Kennungen. Eine Synchronisierung ist auf zehn Fenster begrenzt — grob zehn Monate —, damit eine versehentliche Anfrage aus ferner Vergangenheit nicht das Ratenlimit der Bank verbrennt. Das Fenster selbst beginnt bei der vorherigen Synchronisierung mit einem Tag Überlappung und reicht bei der ersten Verbindung nicht tiefer als einen Monat: Ein CRM braucht nicht die ganze Biografie des Kontos, um dieses Quartal abzustimmen.
Eine Synchronisierung zu wiederholen verdoppelt das Journal nicht. Jede Zeile wird mit einer externen Kennung geschrieben, die das Präfix der Bank trägt, die bekannten Kennungen des Kontos werden vor dem Einfügen geladen, und bereits vorhandene Zeilen werden als übersprungen gezählt. Deshalb verdoppelt zweimaliges Drücken von Aktualisieren — oder einmal nach einem Timeout, der wie ein Fehler aussah — den Umsatz nicht. Daraus ergibt sich auch die Grenze des Versprechens: zwei verschiedene Kennungen gelten als zwei verschiedene Bewegungen, selbst wenn eine Person vermutet, dass es dieselbe Überweisung ist, und nur ein Mensch kann anders entscheiden.
Neue Zeilen bleiben nicht als rohes Rauschen liegen. Der Importeur sucht eine offene Rechnung oder eine passende Ausgabe und setzt eine Verknüpfung nur, wenn die Belege stark sind — die Belegnummer erscheint im Verwendungszweck, oder Betrag und Datum passen zusammen. Ein schwacher Zufall, etwa derselbe Betrag ohne weitere Stütze, bleibt ein Vorschlag, den eine Person bestätigt. Firmenregeln der Art Gegenpartei enthält dies werden sofort auf neue Zeilen angewendet und zählen ihre Treffer. Was der Importeur nicht tut: eine Rechnung oder einen Kunden erfinden, damit die Zeile ordentlich aussieht.
Einwilligung ist kein Absatz in einer Richtlinie, sondern ein Datensatz. Das Verknüpfen eines Kontos schreibt einen Einwilligungseintrag der Art Bankverbindung, gebunden an das konkrete Konto, mit dem Zweck und der Person, die es verbunden hat. Das Trennen ist ebenso konkret: Die Einwilligung wird mit Datum und Urheber als widerrufen markiert, das gespeicherte Geheimnis gelöscht, der Zeitpunkt der letzten Synchronisierung geleert, und die Synchronisierung endet sofort. Bereits importierte Zeilen bleiben, wo sie sind, denn sie sind Teil der Buchhaltungshistorie der Firma; für dieses Konto kommt nichts Neues mehr.
Die ehrlichen Grenzen gehören neben die Funktion. Die Verbindung kann nicht wissen, was ein Kunde beabsichtigt hat, sie kann nicht beweisen, dass zwei Bankzeilen eine Überweisung sind, sie kann keinen Saldo zeigen, den die Bank nicht herausgibt, und sie kann nicht in einen geschlossenen Monat schreiben. Ist das gespeicherte Geheimnis leer oder nicht entschlüsselbar — ein rotierter Schlüssel, eine wiederhergestellte Datenbank —, wird es behandelt, als wäre es nie gespeichert worden, und das Konto bittet um erneutes Verknüpfen, statt still zu scheitern.
Die praktische Schlussfolgerung ist klein. Vor dem Schließen eines Monats synchronisieren, nicht danach; vorgeschlagene Übereinstimmungen als Vorschläge behandeln, bis eine Person oder eine Regel sie bestätigt; das Einwilligungsregister neben der Kontenliste halten, denn danach wird ein Prüfer oder ein Kunde fragen; und im Kopf behalten, was die Verbindung wirklich ist — ein Leseschlüssel für Auszüge, keine Fernbedienung für das Bankkonto.