Dokumentenablage mit Belegpflicht: technische Umsetzung
Wie die Ablage Dokumente annimmt, liest, einordnet und prüft, was die KI allein darf und wie Fehler und Sonderfälle abgefangen werden.
- Eingangswege
- 3
- feste Dokumenttypen
- 10
- Felder mit Belegpflicht
- 13
- Abgleich von Datenbank und Speicher
- 10 min
- gelesen, auch wenn eine Datei mehrfach ankommt
- 1×
So kommt ein Dokument in die Ablage
Jeder Schritt lässt sich aufklappen.
Berechtigungen des Modells
Kein Zugriff
- Einen Wert eintragen, der nicht im Dokument steht
- Unklare Dokumente ins Archiv verschieben
- Dateien endgültig löschen
- Pflichtangaben erfragen, die das Dokument gar nicht haben kann
Erlaubt ohne Freigabe
- Dokumente lesen und durchsuchen
- Typ, Name und Ordner bestimmen
- Schlagworte und Bezüge zu anderen Vorgängen setzen
- Ein Dokument auf Anfrage wieder in den Chat schicken
- Dokumente mit Begründung in den Papierkorb legen
Kontrollen
Belegpflicht in der Datenbank
Für 13 Datums-, Betrags- und Nummernfelder braucht jeder Wert ein wörtliches Zitat. Eine Datenbankfunktion sucht dieses Zitat in der Lesung desselben Dokuments und prüft, ob der Wert dazu passt. Die Regel steht nicht nur im Prompt, sondern wird technisch erzwungen.
Herkunft je Feld
Jeder Wert trägt seine Herkunft: aus dem Dokument, abgeleitet aus einem zugehörigen Dokument (ebenfalls geprüft), von einem Menschen vermerkt, oder fehlt. Bei einem Vermerk prüft die Datenbank das Zitat im Vermerk. Von Menschen eingetragene Werte stellt sie für eine tägliche Gegenprobe bereit.
Wenige Pflichtfelder
Pflicht sind nur Datum und Betrag, und nur bei Rechnungen und Belegen. Alles andere ist optional und wird weggelassen, wenn es nicht auf dem Papier steht. Ein Pflichtfeld, das ein Dokument nicht haben kann, verleitet eine KI zum Erfinden.
Bewusste Grenzen
Geprüft werden Datum, Betrag und Nummern, nicht aber Absender, Kurzfassung oder das Vorzeichen eines Betrags. Geprüft wird außerdem, dass ein Wert im Dokument steht, nicht, ob es der gemeinte ist.
Eingang statt Archiv
Unklare Dokumente und Dokumente mit offenen Pflichtwerten dürfen nur im Eingang oder im Papierkorb liegen. Das erzwingt die Datenbank. Ein ausdrücklich bestätigtes „fehlt“ darf ins Archiv.
Sonderfälle
- Wenn auf einer Rechnung kein Betrag zu finden ist, erfindet der Assistent keinen. Das Feld wird als „fehlt“ markiert, das Dokument bleibt im Eingang, und der Assistent fragt nach.
- Wenn ein Betrag nicht wörtlich in der gelesenen Fassung steht, lehnt die Datenbank das Einsortieren mit dem Grund „zitat_nicht_gefunden“ ab.
- Wenn dieselbe Datei zweimal ankommt, egal auf welchem Weg, wird sie nur einmal registriert und nicht erneut gelesen.
- Wenn ein PDF bereits eine Textebene hat, wird keine Texterkennung bezahlt.
- Wenn ein Scan nicht lesbar ist, wird er nicht still einsortiert, sondern als „unlesbar“ mit Grund geführt.
- Wenn eine Datei größer als 15 MB ist, wird sie registriert und als unlesbar geführt, aber nicht gelesen.
- Wenn jemand im Speicher selbst Dateien verschiebt, erkennt der Abgleich sie am Fingerabdruck wieder und trägt den neuen Ort ein, ohne sie neu zu lesen.
- Wenn der Abgleich plötzlich ungewöhnlich viele Dateien als verschwunden melden würde, ändert er nichts und meldet einen Fehler. Dasselbe gilt für eine leere oder unvollständige Liste. Ein Ausfall des Speichers soll nicht wie ein leeres Archiv aussehen.
Technische Hürden
- 01
Problem
Das Sprachmodell hat Datum und Betrag erfunden, obwohl der Prompt das ausdrücklich verbot.
Lösung
Die Belegpflicht wurde in die Datenbank verlegt: Ein Wert wird nur gespeichert, wenn sein Zitat in der Lesung steht und zum Wert passt. Zusätzlich wurden die Pflichtfelder verschlankt. Eine bewusste Grenze bleibt: Geprüft wird, dass der Wert im Dokument steht, nicht, ob es der gemeinte ist.
- 02
Problem
Der Speicher liefert höchstens 1000 Dateien pro Abfrage. Ein abgeschnittenes oder leeres Ergebnis hätte beim Abgleich wie gelöschte Dateien ausgesehen.
Lösung
Der Abgleich hat drei Sicherungen: Eine leere Liste wird nicht übernommen, alle Seiten werden durchgeblättert und die Anzahl verglichen, und eine Plausibilitätsgrenze stoppt bei zu vielen fehlenden Dateien. Fehlende Dateien werden nur als „nicht mehr vorhanden“ markiert, gelöscht wird nichts.
- 03
Problem
Jede neue Datei löst zwei Dateisystem-Ereignisse aus, und der Assistent legt beim Start eigene Zwischendateien ab. Beides führte zu doppelter oder unnötiger, bezahlter Texterkennung.
Lösung
Ein zweites Ereignis für dieselbe Datei innerhalb von drei Sekunden wird verworfen, die Prüfsumme dient als Anker, und beobachtet werden nur die Ordner für Dokumente und Bilder.
Dienste und Datenschutz
| Aufgabe | Anbieter | Standort |
|---|---|---|
| Server (Datenbank, Workflows, Assistent) | netcup | deutscher Anbieter |
| Dateispeicher | Hetzner Object Storage | Nürnberg, Deutschland |
| Zugang zu den KI-Modellen (Einordnen, Texterkennung, Bildlesen, Vektoren) | Cortecs | EU-Verarbeitung vorgegeben (außer Einordnen) |
| Firmen-Chat | Infomaniak (kChat) | Schweiz |
| Postfach (Quelle für Mailanhänge) | Infomaniak | Schweiz |
- Die Dateien selbst liegen dauerhaft im S3-Objektspeicher bei Hetzner, in der dort angelegten Ordnerstruktur.
- In der PostgreSQL-Datenbank auf dem eigenen Server stehen das Register mit Prüfsummen, der gelesene Text mit Quelle, Typ, Felder mit Zitat und Herkunft, Ablageort und Schlagworte.
- Auch die Vektoren für die Suche liegen in dieser Datenbank (Erweiterung pgvector), nicht bei einem zusätzlichen Dienst.
- Arbeitskopien entstehen außerdem im Chat, im Gesprächsverlauf des Assistenten, in Auslieferungskopien (7 Tage) und in den Ausführungsdaten der Workflows (14 Tage).
- Ein Sicherungsskript schreibt Datenbanken und Assistenten-Daten in einen getrennten Objektspeicher bei Hetzner in Helsinki (Finnland). Tägliche Stände werden nach 8 Tagen gelöscht, wöchentliche nach 29 Tagen.
Cortecs ist kein eigenes Sprachmodell, sondern ein Anbieter, über den die Modelle aufgerufen werden, zum Beispiel Mistral OCR für die Texterkennung. Texterkennung, Bildlesen und Suchvektoren werden mit der Vorgabe EU-Verarbeitung aufgerufen, Texterkennung und Bildlesen zusätzlich ohne Datenspeicherung beim Anbieter. Zugangsdaten liegen nur auf dem Server und nicht im Code.
Betrieb und Tests
Die Ablage läuft mit Docker Compose auf einem gemieteten Server. Ein Fehler-Workflow meldet Störungen in einen eigenen Betriebs-Chat, und Datenbank und Speicher werden alle zehn Minuten abgeglichen.
Vor jeder Änderung läuft eine lokale Prüfung mit einer frischen Test-Datenbank, simuliertem Mailserver und Strukturtests der Workflows. Ein Sicherungsskript sichert Datenbanken und Assistenten-Daten in einen getrennten Objektspeicher.
Die Chat-Anbindung ist austauschbar: Die Fachlogik kennt keine Chat-Plattform beim Namen, ein Test stellt das sicher. Mitgeliefert sind Anbindungen für kChat und Telegram.