← Dokumentenablage mit Belegpflicht
Technische Umsetzung

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.

Eingang
Foto oder PDF im ChatAnhang aus dem Postfach · über den Postfach-AssistentenDatei direkt im Speicher · wird beim Abgleich erkannt

Angenommen werden nur Bilder und PDF. Jede Datei bekommt eine sha256-Prüfsumme. Kommt derselbe Inhalt ein zweites Mal an, egal auf welchem Weg, entsteht kein zweiter Eintrag und kein zweites Lesen. Weil das Dateisystem jede neue Datei doppelt meldet, wird ein zweites Ereignis für dieselbe Datei innerhalb von drei Sekunden verworfen; das erste läuft sofort. Dateien über 15 MB werden registriert, aber nicht gelesen.
sha256n8n

Hat ein PDF eine Textebene, wird sie lokal und kostenlos ausgelesen. Nur ohne Textebene läuft eine Texterkennung (OCR). Fotos liest zuerst ein Sehmodell, mit Temperatur 0 und der Anweisung, nichts zu erfinden. Es entscheidet auch, ob das Bild so viel Text enthält, dass sich zusätzlich eine OCR lohnt. Der gelesene Text wird mit seiner Quelle in der Datenbank gespeichert, damit später prüfbar ist, woher ein Wert stammt.
Mistral OCRSehmodell

Der gelesene Text wird in Abschnitte zerlegt. Jeder Abschnitt bekommt einen Vektor (Embedding), der direkt in der PostgreSQL-Datenbank liegt (Erweiterung pgvector). So findet die Suche ein Dokument auch dann, wenn man nur ungefähr weiß, worum es ging. Nur die Suchanfrage bekommt dabei eine Anweisung vorangestellt, der Dokumenttext nicht. Treffer zählen erst ab einer gemessenen Ähnlichkeitsgrenze, damit die Suche nicht irgendetwas liefert.
pgvector

Laut seinen Arbeitsregeln geht der Assistent jedes Mal gleich vor: Dokument lesen, vorhandene Ordner und Schlagworte ansehen, nach verwandten Vorgängen suchen, dann einsortieren. Er wählt einen von zehn festen Typen (zum Beispiel Rechnung, Vertrag, Behörde, unlesbar) und vergibt einen Namen nach dem Muster JJJJ-MM-TT_Absender_Typ, bei Bedarf mit Nummer; Fotos heißen JJJJ-MM-TT_Foto_Stichwort. Die Datenbank lässt höchstens vier Ordnerebenen zu.
Hermes AgentMCP

Bevor etwas verschoben wird, prüft die Datenbank jeden Datums-, Betrags- und Nummernwert gegen ein wörtliches Zitat aus der gespeicherten Lesung. Außerdem muss das Datum im Dateinamen zum erkannten Datum passen. Die Prüfungen laufen in fester Reihenfolge und nennen ihren Ablehnungsgrund, etwa „zitat_nicht_gefunden“, „zitat_passt_nicht“, „name_datum_passt_nicht“ oder „offen_nur_im_eingang“. Vor dem Kopieren läuft ein Probelauf.
PostgreSQL
Ergebnis
Archiv und Rückmeldung im Chat

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

  1. 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.

  2. 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.

  3. 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

AufgabeAnbieterStandort
Server (Datenbank, Workflows, Assistent)netcupdeutscher Anbieter
DateispeicherHetzner Object StorageNürnberg, Deutschland
Zugang zu den KI-Modellen (Einordnen, Texterkennung, Bildlesen, Vektoren)CortecsEU-Verarbeitung vorgegeben (außer Einordnen)
Firmen-ChatInfomaniak (kChat)Schweiz
Postfach (Quelle für Mailanhänge)InfomaniakSchweiz
  • 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.

n8nPostgreSQLpgvectorHermes AgentMCPMistral OCRS3-ObjektspeicherDocker Compose

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.

← Zurück zur Übersicht: Dokumentenablage mit Belegpflicht