DMS-System KI-Tool // Hilfe
nicht verbunden
Projektdokumente:
Inhaltsverzeichnis
↑ Nach oben
📥
Posteingang & KI-Workflow
Von der Eingabe bis zur Ablage
Eingangskanäle

Dokumente landen im Posteingang über drei Wege: per Upload (Drag & Drop oder Dateiauswahl), per Scan am Smartphone oder automatisch per E-Mail (alle 15 Minuten geprüft).

Schnellbezeichnung

Beim Upload oder Scan kann sofort eine Kurzbezeichnung vergeben werden — diese wird Teil des späteren Dateinamens und hilft bei der Orientierung im Posteingang.

KI-Analyse

Auf Klick analysiert die KI jedes Dokument: Typ wird erkannt (Rechnung, Vertrag, Brief, …), Inhalt zusammengefasst, Absender/Betrag/Datum extrahiert und der passende Ablageordner vorgeschlagen.

DokNr

Jedes Dokument bekommt bei der Ablage eine eindeutige, fortlaufende Dokumentennummer (Dok.Nr.000123) — so bleibt es referenzierbar, auch wenn der Ablageort später einmal wechselt.

Ablegen oder verwerfen

Nach der KI-Analyse kann das Dokument mit den Vorschlägen abgelegt, der Vorschlag korrigiert oder das Dokument komplett verworfen werden.

Direkt in Ordner scannen

Alternativ zum Posteingang-Workflow kann auf dem mobilen Client direkt in einen Zielordner gescannt werden — ohne Umweg über den Posteingang.

Workflow-Empfehlung: Für wiederkehrende Dokumente mit klarer Struktur → KI-Analyse nutzen. Für spontane Ablage bekannter Dokumente → direkt in Ordner scannen.
↑ Nach oben
✂️
PDF-Editor
Dokumente vor der Ablage bearbeiten
Seitenvorschau

Alle Seiten eines PDFs werden als Thumbnails angezeigt. Klick auf ein Thumbnail öffnet die große Vorschau mit Bearbeitungswerkzeugen.

🗑 Seite löschen

Nicht benötigte Seiten (z.B. leere Rückseiten, Werbung) können einzeln gelöscht werden. Die verbleibenden Seiten werden neu nummeriert.

↻ Drehen

Seiten können in 90°-Schritten gedreht werden — nützlich für Scans, die versehentlich auf dem Kopf stehen oder quer eingescannt wurden.

⇄ Umsortieren

Per Drag & Drop lassen sich Seiten in der Vorschau neu anordnen. Die alte Reihenfolge wird beim Speichern ersetzt.

⛶ Zuschneiden

Einen Ausschnitt auf der Seite markieren und den Rest der Seite entfernen — praktisch bei schiefen Scans oder unnötigen Rändern.

📝 Notizen

Mit dem Werkzeug Notiz hinzufügen in der Sidebar lassen sich gelbe Etiketten direkt auf eine Seite klicken. Klick öffnet ein Popup zum Bearbeiten des Texts, Drag verschiebt das Etikett, Doppelklick löscht es. Beim Speichern werden die Notizen als Pixel ins PDF eingebrannt — sie sind danach Teil des Dokuments und nicht mehr editierbar.

🎚 Qualität

Die Bildqualität der Seiten kann reduziert werden, um die Dateigröße zu verringern — sinnvoll bei großen Scan-Stapeln.

Reihenfolge im Workflow: Erst PDF bearbeiten (Seiten weg, drehen, zuschneiden, Notizen setzen), dann KI-Analyse starten — so wird nur der saubere Inhalt analysiert und klassifiziert.
↑ Nach oben
🗂
Verzeichnisbaum & Navigation
Ordnerstruktur links
Ordner aufklappen

Klick auf den ▶ Pfeil oder direkt auf den Ordnernamen klappt den Ordner auf und zeigt die Dateien rechts an.

Ordner umbenennen

Doppelklick auf einen Ordnernamen startet die Inline-Umbenennung direkt im Baum.

Ordner löschen 🗑

Das 🗑 Symbol erscheint beim Hover über einen Ordner. Klick verschiebt alle Dateien in den Papierkorb und löscht den leeren Ordner.

Dateianzahl-Badge

Die graue Zahl rechts zeigt die Gesamtanzahl aller Dateien im Ordner inklusive aller Unterordner.

Leere Ordner

Leere Ordner werden kursiv und ausgegraut dargestellt. Mit dem ⊘ Button oben können sie komplett ausgeblendet werden.

Zuletzt geändert

Ein grüner Punkt neben dem Ordnernamen zeigt an, dass in den letzten 24 Stunden Dateien hinzugefügt oder geändert wurden.

Ordner filtern

Das Suchfeld "Ordner filtern…" oben in der Sidebar filtert den Baum live nach dem eingegebenen Begriff.

Ordner-Tooltip

2 Sekunden Hover über einen Ordner zeigt ein Tooltip mit Dateianzahl, Gesamtgröße und letztem Änderungsdatum.

Tipp: Mit ↑ ↓ Pfeiltasten kann man durch den Baum navigieren, Enter öffnet den gewählten Ordner.
↑ Nach oben
📄
Datei-Aktionen
Was man mit Dateien machen kann
👁 Vorschau

Öffnet eine geteilte Vorschau rechts neben der Dateiliste. PDFs, Bilder und Textdateien werden direkt angezeigt.

🔍 Öffnen

Öffnet die Datei in einem großen Modal-Fenster. PDFs und Bilder werden inline gezeigt, Office-Dokumente werden heruntergeladen.

⬇ Download

Lädt die Datei direkt herunter ohne sie anzuzeigen.

✏ Bearbeiten

Öffnet das PDF im Editor — dort können Seiten gelöscht, gedreht, neu sortiert, zugeschnitten und mit Notizen versehen werden. Details siehe Sektion PDF-Editor.

✉ E-Mail

Sendet die Datei als Anhang per E-Mail — mit Betreff, CC, BCC und formatiertem Text. Siehe eigene Sektion weiter unten.

✎ Umbenennen

Öffnet ein Modal zum Umbenennen der Datei. Der neue Name wird direkt auf dem NAS gespeichert.

⇄ Verschieben

Öffnet den Ordner-Picker zum Auswählen des Zielordners. Suche im Ordner-Picker verfügbar.

🗑 Löschen

Verschiebt die Datei in den Papierkorb. Dort kann sie später wiederhergestellt oder endgültig gelöscht werden — Details siehe Sektion Papierkorb.

Drag & Drop verschieben

Dateien können direkt per Drag & Drop in einen Ordner im Verzeichnisbaum gezogen werden. Der Zielordner leuchtet grün auf.

Mehrfachauswahl: Checkboxen links anklicken aktiviert die Mehrfach-Toolbar. Dann können mehrere Dateien gleichzeitig verschoben, als ZIP heruntergeladen oder in den Papierkorb verschoben werden.
↑ Nach oben
E-Mail-Versand
Dokumente direkt aus der Dateiliste versenden
Empfänger & Kopie

Der Empfänger kann über „An" festgelegt werden, CC und BCC sind als getrennte Felder verfügbar. Mehrere Adressen werden mit Komma getrennt.

Betreff vorbelegt

Der Betreff wird automatisch mit dem Dateinamen (ohne Endung) vorbelegt — lässt sich natürlich frei anpassen.

Formatierter Text

Die Nachricht kann mit fett, kursiv, unterstrichen, Aufzählungslisten, Nummerierungen und Links formatiert werden. Beim Einfügen aus der Zwischenablage wird nur Plain-Text übernommen.

Standard-Vorlage

Wird kein Text eingegeben, sendet das System automatisch eine neutrale Begleitnachricht („Anbei erhalten Sie das Dokument…") mit Signatur.

Versand über T-Online

Der Versand erfolgt direkt vom NAS aus über den t-online SMTP-Server — kein Umweg über einen externen Mail-Client.

Mobile verfügbar

Der gleiche E-Mail-Dialog steht auch im mobilen Client zur Verfügung — Touch-optimiert mit großer Tastatur und scrollbarem Inhalt.

Tipp: Das dunkle BCC-Feld ist ideal, um sich selbst eine Kopie zu schicken — so hat man den Versand im eigenen Postfach dokumentiert, ohne dass der Empfänger es sieht.
↑ Nach oben
🔎
Suche & Filter
Dateien finden
In Ordner suchen

Das Suchfeld oben in der Dateiliste filtert die aktuell angezeigten Dateien live. Treffer werden im Dateinamen gelb hervorgehoben.

🔎 Volltextsuche F

Durchsucht den OCR-Text aller PDFs. Scope "Ordner" sucht nur im aktuellen Ordner, "Alle" durchsucht das gesamte Archiv.

Sortierung

Die Spaltenköpfe "Dateiname", "Geändert" und "Größe" sind klickbar und sortieren die Liste. Zweiter Klick kehrt die Reihenfolge um.

Breadcrumb-Navigation

Der Pfad oben ist klickbar — jeder Teil des Pfades ist ein Link und navigiert direkt zum übergeordneten Ordner.

↑ Nach oben
🪟
Panels & Werkzeuge
Buttons in der Toolbar
+ Ordner

Erstellt einen neuen Unterordner im aktuell gewählten Ordner. Name im Modal eingeben und bestätigen.

🕐 Zuletzt

Zeigt zuletzt geänderte Dokumente. Scope "Ordner" zeigt nur Dateien im aktuellen Ordner, "Alle" zeigt alles. Anzahl wählbar (10/25/50).

🗑 Papierkorb

Eigener Bereich mit Übersicht aller gelöschten Dateien und Ordner, Wiederherstellung mit Original-Pfad oder freier Wahl, Bulk-Operationen und endgültiges Löschen. Erreichbar über den Topbar-Link „Papierkorb". Details siehe Sektion Papierkorb.

⊜ Duplikate

Findet Dateien mit identischem Namen. Scope "Ordner" oder "Alle". Zeigt Gruppen von Duplikaten mit ihren Pfaden an.

📊 Statistik

Zeigt eine Übersicht mit Gesamtanzahl Dokumente, Ordner, Gesamtgröße, Dateitypen-Verteilung, größten Ordnern und zuletzt hinzugefügten Dateien. Größte Ordner sind klickbar.

↺ Refresh

Lädt den Verzeichnisbaum neu und leert die Dateiliste. Nützlich nach Änderungen von außen oder nach dem Hochladen neuer Dokumente.

🔄 Ordner

Aktualisiert den Ordner-Cache des NAS — die zentrale Liste aller Ordner unter /Dokumente, die viele Tools (KI-Tool, Mobile-Apps, Volltext-Suche) als schnellen Index nutzen. Der Klick startet den Rebuild im Hintergrund (~60 s), ein Toast informiert über Fortschritt und Abschluss. Details siehe Sektion Konfiguration.

↑ Nach oben
Favoriten
Häufig genutzte Ordner anpinnen — Sidebar & Topbar-Leiste
Favorit hinzufügen

Beim Hover über einen Ordner im Baum erscheint ein ★ Symbol. Klick darauf pinnt den Ordner als Favorit oben in der Sidebar an.

Favorit entfernen

In der Favoritenliste erscheint beim Hover ein ✕ Button rechts neben dem Namen. Klick entfernt den Favoriten.

Farbe ändern

Klick auf den farbigen Punkt links neben dem Favoritennamen öffnet einen Farbpicker mit 6 Farben zur Unterscheidung (rot, orange, gelb, grün, blau, lila).

Dauerhaft gespeichert

Favoriten werden auf dem NAS gespeichert (/volume1/web/posteingang/favorites.json) und bleiben auch nach Browser-Cache-Löschung erhalten — gerätübergreifend identisch.

Favoritenleiste in der Topbar

Auf allen DMS-Seiten erscheint unter der Navbar eine 28px schmale Leiste mit allen Favoriten als Pillen — Farbpunkt + Name. Versteckt sich automatisch wenn keine Favoriten gesetzt sind. Aus der Datei-Aktionen-Seite oder dem Status-Bericht heraus mit einem Klick zum Steuern-Ordner springen — ohne den Umweg über DMS-System + Sidebar.

Klick-Verhalten der Topbar-Pillen

Klick auf eine Pille führt zur DMS-System-Seite und öffnet automatisch den Favoriten-Ordner (per Hash-Navigation: DMS-System.php#path=...). Wenn man bereits auf der DMS-System-Seite ist, wechselt der Ordner sofort dank hashchange-Listener — kein Reload nötig. Bei vielen Favoriten ist die Leiste horizontal scrollbar.

Architektur: Sidebar (in DMS-System) und Topbar-Favoritenleiste (auf allen Seiten) lesen aus derselben Quelle: favorites.json auf dem NAS, gespiegelt im localStorage-Key dms_favorites. Setzt man in der Sidebar einen neuen Favoriten, erscheint er nach Reload auf allen Seiten — ohne Server-Round-Trip beim ersten Render.
↑ Nach oben
📤
Upload & Drag & Drop
Dateien hinzufügen
Dateien hochladen

Dateien einfach in den Inhaltsbereich rechts ziehen — ein grüner Rahmen zeigt den Zielordner an. Mehrere Dateien gleichzeitig möglich.

Zielordner

Hochgeladene Dateien landen immer im aktuell gewählten Ordner. Zuerst den Zielordner im Baum auswählen, dann Dateien hineinziehen.

Hinweis: Der Volltext-Index wird alle 60 Minuten automatisch aktualisiert. Neu hochgeladene PDFs erscheinen in der Volltextsuche erst nach der nächsten Aktualisierung.
↑ Nach oben
📦
Archiv
Ablageprotokoll aller verarbeiteten Dokumente
Vollständige Historie

Das Archiv listet jedes abgelegte Dokument auf: ursprünglicher Dateiname, DokNr, Typ, Ablageordner, Datum der Ablage — chronologisch sortiert.

Filter & Suche

Nach Dokumententyp, Zeitraum oder Ordner filtern. Suchfeld für freie Suche über alle Metadaten.

Direkt zum Dokument

Klick auf einen Archiveintrag öffnet das Dokument direkt aus dem Ablageordner — ohne den Umweg über den Dateimanager.

Rückverfolgbarkeit

Auch wenn ein Dokument später verschoben oder umbenannt wird — das Archiv zeigt den ursprünglichen Verarbeitungsweg.

↑ Nach oben
📊
Statistik
Übersicht & Kennzahlen
KPI-Kacheln

Zeigt Gesamtanzahl Dokumente, Ordner, Gesamtgröße des Dokumentenarchivs und durchschnittliche Dateien pro Ordner.

Dateitypen

Balkendiagramm der häufigsten Dateitypen (PDF, DOCX, XLSX etc.) mit absoluter Anzahl.

Größte Ordner

Top 8 Ordner nach Dateianzahl als Balkendiagramm. Klick auf einen Ordner navigiert direkt dorthin.

Zuletzt hinzugefügt

Die letzten 8 im Volltext-Index erfassten Dokumente mit Ordnerpfad.

💰 Token-Verbrauch (Gesamt)

Vier Kacheln zeigen Gesamtanzahl Anfragen an die KI, kumulierte Input- und Output-Tokens sowie die geschätzten Gesamtkosten in Euro.

📅 Token pro Monat

Balkendiagramm der Token-Verbräuche pro Monat — hilft, das eigene Nutzungsmuster und die Kostenentwicklung im Blick zu behalten.

📋 Letzte 10 Token-Verbräuche

Tabelle der zehn letzten KI-Analysen pro Datei — mit Datum, DokNr, Dateiname, Token-Anzahl und Kosten. Per 🔍 öffnet sich eine PDF-Vorschau in der Statistik, per wird die abgelegte Datei direkt heruntergeladen.

Speicherplatz: In der Statusbar unten wird der belegte und gesamte Speicherplatz des NAS-Volumes angezeigt.
Token-Pricing: Die Kostenberechnung basiert auf den aktuellen Anthropic-Preisen (Input × 3,00 $ / 1M, Output × 15,00 $ / 1M) umgerechnet mit Kurs 0,92 €/$. Die Werte sind Schätzungen — die exakten Kosten zeigt die Anthropic Console unter Usage.
↑ Nach oben
📱
Mobile Client
Das DMS unterwegs auf dem Smartphone
Login & Session

Der mobile Client hat eine eigene Startseite mit Login und Session-Prüfung. Nach dem ersten Login bleibt die Sitzung erhalten — direkter Einstieg ins Explorer.

📂 Explorer

Verzeichnisbaum und Dateiliste wie auf dem Desktop — mit Vorschau, Download und E-Mail-Versand direkt aus der Liste.

📷 Scan

Mit der Handy-Kamera direkt scannen. Vor dem Scan kann der Zielordner per Verzeichnisbaum ausgewählt werden — entweder Posteingang oder direkt ein Ablageordner.

📥 Posteingang mobil

Alle Dokumente im Posteingang durchblättern und mit einem Tipp in die KI-Analyse senden — ohne den Desktop einzuschalten.

🔎 Volltextsuche

Komplette OCR-Suche auch mobil — findet Dokumente anhand ihres Inhalts, unabhängig vom Dateinamen.

✉ E-Mail-Versand

Derselbe erweiterte E-Mail-Dialog wie auf dem Desktop: CC, BCC, Betreff, formatierter Text — für unterwegs angepasst.

↺ Cache leeren

In der Topbar jeder Mobile-Seite steht oben rechts der ↺-Button. Ein Tipp leert den Browser-Cache und lädt die Seite neu — nützlich, wenn sich nach einem Update das Verhalten der App nicht ändert oder Inhalte veraltet wirken.

Zugriff: beeringdokuki.duckdns.org/posteingang/DMS-Client-Start.html — auf dem iPhone als Homescreen-Icon hinzufügen für App-ähnliches Verhalten. Schritt-für-Schritt-Anleitung dazu in Abschnitt 31 (PWA-Installation).
↑ Nach oben
⌨️
Tastaturkürzel
Schneller arbeiten
FVolltextsuche öffnenSucht in allen PDFs
NNeuen Ordner erstellenNur wenn Ordner gewählt
RVerzeichnisbaum neu ladenLeert auch die Dateiliste
Vorheriger Ordner im BaumNur sichtbare Ordner
Nächster Ordner im BaumNur sichtbare Ordner
EnterGewählten Ordner öffnenNach ↑↓ Navigation
EscPanel / Modal schließenSchließt offene Fenster
?Shortcut-Übersicht anzeigenSchnelle Referenz
Hinweis: Tastaturkürzel funktionieren nicht wenn der Cursor in einem Eingabefeld steht.
↑ Nach oben
Batch-Umbenennen
Mehrere Dateien auf einmal umbenennen
Aktivieren

Mehrere Dateien per Checkbox auswählen, dann in der Mehrfach-Toolbar auf ✎ Umbenennen klicken.

Muster eingeben

Ein Muster mit Platzhaltern eingeben. Die Vorschau zeigt sofort wie die Dateien nach dem Umbenennen heißen werden.

{name} Originalname

Der Originalname der Datei ohne Dateiendung. Beispiel: Rechnung aus Rechnung.pdf.

{ext} Dateiendung

Die Dateiendung ohne Punkt. Beispiel: pdf aus Rechnung.pdf.

### Nummer

Fortlaufende 3-stellige Nummer — 001, 002, 003 usw. Nützlich für Serien von Dokumenten.

{datum} Datum

Das heutige Datum im Format JJJJ-MM-TT. Beispiel: 2026-04-19.

Beispiele:
{datum}_{name}2026-04-19_Rechnung.pdf
Scan_###Scan_001.pdf, Scan_002.pdf…
{name}_ArchivRechnung_Archiv.pdf
↑ Nach oben
🔑
Konfiguration & API-Key
Wartung der Claude-Anbindung
Wann brauche ich einen neuen Key?

Wenn die KI-Analyse plötzlich nicht mehr funktioniert und im Browser-Log Meldungen wie 401 Unauthorized oder invalid x-api-key erscheinen. Auch nach einem Anthropic-Account-Wechsel, Plan-Upgrade oder wenn der alte Key kompromittiert wurde.

1. Neuen Key erstellen

Im Browser auf console.anthropic.com/settings/keys einloggen → Create Key → Name vergeben (z.B. DS225-Posteingang) → Key wird genau einmal angezeigt → sofort kopieren.

2. Key auf der NAS eintragen

Per SSH oder DSM File Station die Datei /volume1/web/posteingang/posteingang_config.json öffnen und im Feld anthropic_api_key den neuen Wert eintragen. Anschließend speichern.

3. Alten Key sperren

Zurück in der Anthropic Console → alter Key → Disable. Damit ist sichergestellt, dass kein altes Skript oder Backup ihn weiter verwendet.

4. Funktion prüfen

Im Posteingang ein beliebiges Dokument analysieren. Erscheint die KI-Auswertung wie gewohnt, ist der Key aktiv. Bei Fehler erneut Browser-Console (F12) prüfen.

Kosten & Nutzung im Blick

In der Anthropic Console unter Usage sieht man tagesgenau Tokens und Kosten. Im Posteingang selbst zeigt die Statistik-Seite aggregierte Werte und die letzten 10 Token-Verbräuche pro Datei.

Sicherheits-Hinweis: Der Key gehört nur in posteingang_config.json auf der NAS — nie in Git, nie ins HTML, nie an Dritte. Bei Verdacht auf Leak: sofort in der Console Disable drücken und neuen Key erstellen.

Ordner-Cache

Architektur & Aktualisierung
Was ist der Ordner-Cache?

Eine JSON-Datei folder_cache.json auf der NAS, die alle Ordner unter /Dokumente rekursiv auflistet — inklusive Datei-Anzahl pro Ordner und Größe/Änderungsdatum pro Datei. Bei aktuell ~1655 Ordnern und ~9000 Dateien wäre eine Live-Abfrage über die Synology FileStation API zu langsam für ein flüssiges UI. Daher wird der Index zentral vorgehalten und von vielen Tools gleichzeitig genutzt: KI-Tool, DMS-System, Mobile-Apps, Volltext-Suche.

Automatische Aktualisierung (Cron)

Eine geplante Aufgabe auf der NAS führt das Skript build_folder_cache.py alle 15 Minuten aus. Damit ist der Cache auch dann irgendwann aktuell, wenn Änderungen außerhalb der DMS-Tools passieren — z.B. über Synology File Station App, Synology Drive, oder ein direkter SSH-Zugriff.

Auto-Trigger nach Ordner-Operationen

Wenn ein Ordner über das DMS-Web-Interface angelegt, umbenannt oder gelöscht wird (Desktop oder Mobile), startet automatisch ein Hintergrund-Rebuild des Caches. Das Frontend wartet dabei nicht — es läuft still parallel. Nach ~60 s ist der Cache aktuell, ohne dass der User etwas merkt.

🔄 Manueller Trigger

In der Topbar von DMS-System, Posteingang-KI-Tool und beiden Mobile-Apps gibt es den 🔄-Button. Klick startet den Rebuild im Hintergrund, ein Toast unten zeigt "🔄 Ordner-Cache wird aktualisiert…". Nach Abschluss erscheint "✅ Ordner-Cache aktualisiert (XXs)". Der Aufruf ist asynchron — die UI bleibt während des Rebuilds bedienbar.

Wann manuell triggern?

Nach Änderungen, die nicht über das DMS gemacht wurden — z.B. wenn der Synology Drive Client einen Ordner synchronisiert, ein Skript auf der NAS Dateien ablegt, oder ein anderer User über DSM File Station Ordner anlegt. Auch wenn die KI im Posteingang-Tool einen kürzlich angelegten Ordner partout nicht vorschlägt, ist ein manueller Klick ein guter erster Test.

Dauer & Performance

Der Rebuild dauert in der Regel 30–70 Sekunden. Hauptzeitfaktor ist nicht CPU, sondern I/O — das Skript fragt für jeden der ~1655 Ordner einmal die FileStation API ab. Bei wachsendem Datenbestand steigt die Dauer linear mit der Ordner-Anzahl.

Technische Details: Aufruf läuft über PHP-Endpoint rebuild_folder_cache.php → Wrapper-Skript /usr/local/bin/dms-rebuild-cache.shpython3 build_folder_cache.py. Der Wrapper läuft via sudo ohne Passwort (Eintrag in /etc/sudoers.d/dms-pdf-save) und triggert den Build atomar (write-to-tmp + rename), sodass nie ein halber Cache auf der Platte liegt.
↑ Nach oben
📋
Primärordner-Tabelle
Routing-Regeln für die KI-Ablage

Die Primärordner-Tabelle ist das Herzstück der KI-Ablage: Sie bestimmt, in welchen Ordner die KI ein Dokument welchen Doktyps automatisch routet — ohne dass der Wert hartkodiert sein muss. Statt "Rechnungen landen immer in /Dokumente/_Rechnungen" als Code-Regel pflegt der User diese Zuordnung selbst über eine UI-Tabelle. Neue Doktypen (Inkasso, Garantie, Kontoauszug, …) lassen sich dort jederzeit hinzufügen, ohne den Prompt umzuschreiben.

Was ist ein Eintrag?

Jede Zeile der Tabelle besteht aus vier Feldern: Doktyp (z.B. "Rechnung"), Primärordner (z.B. /Dokumente/_Rechnungen), Erkennungsworte (eine komma-getrennte Liste typischer Stichwörter, an denen die KI den Doktyp erkennen kann) und ein Dateiname-Muster (Vorlage mit Platzhaltern). Diese vier Felder reichen, um ein Routing zu definieren.

Reihenfolge zählt

Die Tabelle wird von oben nach unten durchgegangen, der erste passende Eintrag gewinnt. Spezifischere Doktypen müssen daher nach oben — z.B. "Bestellbestätigung" steht vor "Rechnung", weil eine Bestellbestätigung oft auch eine Rechnung enthält und sonst fälschlich als Rechnung einsortiert würde. Im Modal werden Einträge per ▲▼-Pfeil verschoben.

Editor öffnen

In der Topbar des Posteingang-Tools auf ⚙️ Tabelle klicken. Es öffnet sich ein Modal mit der aktuellen Tabelle, das vom NAS via screensaver_cfg.php-Pendant primaerordner.php geladen wird — also gerätübergreifend gleich auf MacBook, Windows-PC und Tablet.

Primärordner-Picker (📁)

Pfade nicht eintippen, sondern auswählen: Klick auf 📁 neben einem Primärordner-Feld öffnet einen Verzeichnisbaum-Picker. Klick auf einen Ordner = Aufklappen; Doppelklick = Übernehmen. Ein Suchfeld oben filtert dynamisch und klappt passende Knoten automatisch auf. Der aktuell zugewiesene Ordner ist grün hervorgehoben.

Bausteine fürs Dateiname-Muster

Statt Platzhalter wie <Absender> abzutippen, gibt es klickbare Buttons in drei Kategorien: 👤 Personen (Absender, Versicherer, Behörde, …), 📅 Datum (YYYY-MM-DD, YYYY-MM, YYYY) und 📄 Inhalt (Doktyp, Thema, Sparte, Produkt, Betrag) plus drei statische Trenner (EUR, --, _). Klick auf einen Baustein fügt ihn an die Cursor-Position ein.

Live-Vorschau

Direkt unter dem Muster-Feld zeigt eine grüne Zeile mit ""-Symbol, wie der Dateiname mit konkreten Beispielwerten aussehen würde. Beispiel: <Absender>--Rechnung_<YYYY-MM-DD>_EUR <Betrag>.pdf wird zu ↳ Telekom--Rechnung_2026-05-01_EUR 42,90.pdf. Die Vorschau aktualisiert sich bei jedem Tastenanschlag und beim Klick auf einen Baustein.

Default-Tabelle

Beim ersten Aufruf liefert die primaerordner.php eine sinnvolle Startbelegung mit zwölf Doktypen: Inkassobrief, Mahnung, Bestellbestätigung, Rechnung, Versicherungspolice, Vertrag, Bescheid, Kontoauszug, Gehaltsabrechnung, Lieferschein, Quittung, Garantie. Diese Defaults sind absteigend nach Spezifität sortiert und können nach Belieben verändert werden.

Wie nutzt die KI die Tabelle?

Beim KI-Aufruf wird die gesamte Tabelle (formatiert) Teil des System-Prompts. Die KI bekommt die Anweisung, von oben nach unten den ersten passenden Doktyp auszuwählen, den Primärordner zu übernehmen und den Dateinamen nach dem Muster zu bauen — Platzhalter durch konkrete Werte aus dem Dokument ersetzt.

"Unbekannt"-Block

Wenn die KI keinen passenden Tabellen-Eintrag findet (z.B. ein neuer Doktyp wie "Reisekostenbeleg" ohne Tabellen-Eintrag), markiert sie das Dokument als unbekannt. Der Eintrag im Posteingang bekommt dann einen roten Rahmen, einen Warn-Banner und einen gesperrten Ablege-Button: "⛔ Erst Ordner wählen". Erst wenn der User aktiv einen Ordner aus dem Tree auswählt, wird der Button grün und das Ablegen freigegeben — kein versehentliches Ablegen ohne Zuordnung möglich.

Speicherung & Konsistenz

Die Tabelle liegt als /volume1/web/posteingang/primaerordner.json auf der NAS. Speichern erfolgt atomar (tmp + rename), kein halber Stand auf der Platte. Beim Speichern werden leere Einträge ausgesortiert, ungültige Werte (Slider-Bereiche, etc.) gefiltert. Mehrere Browser-Tabs / Geräte zeigen nach dem Speichern automatisch beim nächsten Tool-Start die aktualisierte Version.

Praxis-Tipp: Die Tabelle wächst mit deinem Dokumenten-Strom. Wenn ein neuer Doktyp wiederholt als "Unbekannt" markiert wird, lohnt sich ein Tabellen-Eintrag. Setze ihn an die richtige Stelle (spezifisch oben, allgemein unten) und definiere ein präzises Dateiname-Muster — bei der nächsten Datei dieser Art passt's dann automatisch.
Edge Case — Mehrfach-Ablage bei Rechnungen: Bei Rechnungen kann die KI zusätzlich einen thematischen Zweit-Ordner vorschlagen (ordnerZusatz). Beispiel: Eine Versicherungsrechnung landet primär in /Dokumente/_Rechnungen und zusätzlich themenbezogen in /Dokumente/Versicherungen/KFZ. Beide Ordner werden im Tree mit Häkchen vorgesetzt — der User entscheidet final.
Technische Details: Backend ist primaerordner.php (GET/POST mit Validation). Im Helper-JS hält cachedTable den letzten Stand im RAM, getPrimaerordnerPromptText() formatiert die Tabelle für den System-Prompt, der KI-Aufruf nutzt diesen Text-Block. Standardmäßig wird die Tabelle beim Tool-Start einmal geladen und ist sofort verfügbar.
↑ Nach oben
🔒
Bildschirmschoner & Sicherheit
Inaktivitäts-Logout mit Wetter, Uhr und sanftem Geist-Schriftzug

Der DMS-Bildschirmschoner schützt deine Sitzung, wenn du den Rechner unbeaufsichtigt lässt — und sieht dabei richtig schön aus. Statt eines nüchternen Sperrbildschirms zeigt er Live-Uhr, aktuelles Wetter, Datum, Branding und eine konfigurierbare Laufschrift unten. Im Hintergrund wird die Synology-Session zerstört, sodass nach Reaktivierung ein echter Login nötig ist.

Wann greift er?

Der Schoner aktiviert sich nach einer konfigurierbaren Inaktivitätszeit (Standard: 10 Min). 30 Sekunden vorher erscheint ein dezenter Toast unten mittig: "⏰ Sitzung läuft ab in 30s — Maus bewegen oder Taste drücken zum Verlängern". Jede Maus-, Tastatur-, Touch- oder Scroll-Aktivität setzt den Timer auf voll zurück.

Manueller Lock (🔒)

In der Topbar des DMS-System gibt es einen 🔒-Button. Klick darauf startet den Schoner sofort, ohne 30s-Wartezeit — gedacht für den Fall "ich gehe jetzt weg, mach zu". Die Session wird wie beim Inaktivitäts-Logout vollständig zerstört.

Was zeigt der Schoner?

Oben drei Wetter-Kacheln (Heute, Morgen, Übermorgen, mit Icon, Beschreibung, Min-/Max-Temp, Niederschlag, Wind), in der Mitte der Schriftzug "DMS-System KI-Tool" mit Untertitel, eine Live-Uhr (HH:MM:SS, sekündlich aktualisiert) und das Datum. Darunter ein "Erneut anmelden"-Button mit grünem Glow. Oben rechts der letzte Login-Zeitpunkt, falls vorhanden.

Geist-Schriftzug im Hintergrund

Sehr dezent (~6% Deckkraft) zieht ein großer Schriftzug "DMS-System KI-Tool" im Hintergrund von links nach rechts durchs Bild — alle 28 Sekunden eine Runde. Bewegt das Auge, ohne abzulenken, gibt dem Schoner Leben.

Laufschrift unten

Eine durchgehende News-Ticker-Leiste am unteren Bildschirmrand (Mono-Font, hellgrau, grüne Punkt-Trenner zwischen den Texten). Inhalte und Geschwindigkeit sind im Settings-Modal frei konfigurierbar.

Wetter-Quelle

Die Wetter-Daten kommen von Open-Meteo (kostenlos, kein API-Key, kein Account) für die Koordinaten Bremen 53.0793 N / 8.8017 E. Drei-Tages-Vorschau mit allen Detail-Feldern (Niederschlag in mm und %, Wind-km/h und Richtung als Pfeil). Die WMO-Codes werden in deutsche Beschreibungen ("Heiter", "Bewölkt", "Schauer", …) und passende Emoji-Icons übersetzt.

Settings-Modal (⚙️)

In der Topbar des DMS-System öffnet ⚙️ ein Modal mit allen Einstellungen: Inaktivitätszeit (Slider 1–60 Min), Rotations-Intervall (2–15 s), Laufschrift-Dauer (10–60 s pro Runde), Rotations-Texte (Liste, Einträge per +/− verwaltet) und Laufschrift-Texte (gleiche Mechanik). Vorschau-Button zeigt 15 s den Schoner mit den aktuellen — auch ungespeicherten — Werten, ohne echten Logout.

Speicherung — gerätübergreifend

Die Settings liegen zentral als /volume1/web/posteingang/screensaver_cfg.json auf der NAS. Beim Tool-Start werden sie asynchron geladen und im RAM gecacht; bei Konfiguration via Modal POSTet der Save-Button an screensaver_cfg.php. Heißt: einmal eingestellt, gleich auf MacBook, Windows-PC und Tablet.

Sicherheits-Logout über alle Tools

Wenn der Schoner triggert, wird nicht nur das aktive Tool gesperrt: Die Synology-Session wird vollständig zerstört (FileStation Auth-Logout-API), und alle Storage-Schemas werden gelöscht — sowohl dms_session (DMS-System) als auch nas_sid/nas_user/nas_pass (KI-Tool und Schwestertools). Sonst würden die anderen Tools sich beim Aufruf automatisch wieder einloggen, weil sie das Passwort im Klartext gespeichert hatten.

Cross-Tab-Synchronisation

Wenn DMS-System und Posteingang in verschiedenen Tabs offen sind und einer triggert: beide sperren parallel. Realisiert über localStorage-Events — eine Tab-Aktion broadcastet die Sperre, alle anderen Tabs reagieren sofort.

Wake-Lock — Bildschirm wachhalten

Solange der Schoner sichtbar ist und der Tab im Vordergrund liegt, wird die Browser-Wake-Lock-API genutzt, um zu verhindern, dass Mac/Windows den Bildschirm ausschaltet — sonst wäre der schöne Schoner unsichtbar unter einem zusätzlichen OS-Sperrbildschirm. Funktioniert nur über HTTPS (gegeben durch DuckDNS-Cert) und fällt bei Tab-Wechsel automatisch zurück.

Toast-Position bei Sidebar

Im DMS-System mit Sidebar (Verzeichnisbaum links) erscheint die 30s-Warnung nicht mittig im Browserfenster, sondern mittig in der sichtbaren Arbeitsfläche rechts vom Sidebar — über CSS-Variable --sidebar-w. In Tools ohne Sidebar bleibt der Toast wie üblich zentriert.

Geltungsbereich

Der Helper ist auf allen sechs Desktop-Tools eingebunden: DMS-System, Posteingang-KI-Tool, Statistik, Archiv, Suche, Volltextsuche. Heißt: egal in welchem Tool du gerade arbeitest, nach 10 Min Inaktivität greift der Schoner. Die Hilfe-Seite (diese hier) und die Mobile-Apps sind ausgenommen.

Praxis-Tipp: Stelle die Inaktivitätszeit auf einen Wert, der zu deinem Arbeitsrhythmus passt. 10 Min ist ein guter Default für Tagesarbeit. Wenn du oft längere Pausen machst (Telefonate, Mittagessen), kann ein niedrigerer Wert (5 Min) sinnvoll sein, um die Sicherheit zu erhöhen.
Edge Case — falsche Sperre vermeiden: Lange laufende Aktionen ohne Maus-Bewegung (z.B. Hochladen einer riesigen PDF, Warten auf KI-Analyse) können theoretisch in den Schoner laufen. In der Praxis aber nicht — die KI-Analyse dauert ~5 Sekunden, ein Upload selten mehr als 1–2 Minuten. Wenn du eine Aktion mit langer reiner Wartezeit hast (z.B. Cache-Rebuild), bewege die Maus alle paar Minuten oder wechsle einmal kurz zum Tab.
Technische Details: Helper-Datei ist /volume1/web/posteingang/dms-session-timeout.js — wird in jedem Desktop-Tool über <script src="dms-session-timeout.js"></script> vor dem schließenden </body> eingebunden. Globale Funktionen: window.dmsLockNow() für manuellen Lock, window.dmsScreensaverSettings() öffnet das Modal. Die Inaktivitäts-Timer werden bei jedem User-Input via resetTimers() auf voll zurückgesetzt.
↑ Nach oben
Bearbeitungsstatus & Wiedervorlage
Pro Dokument festhalten was zu tun ist und wann

Jedes Dokument mit einer Dok.Nr. kann einen Bearbeitungsstatus erhalten — z.B. „In Arbeit", „Erledigt", oder Flags wie „Steuerrelevant 2024" oder „Wichtig". Dazu kommen Felder für Wiedervorlage-Datum, Notizen, Verantwortliche und mehr. Status werden zentral in dokumentstatus.json gespeichert und sind tool-übergreifend sichtbar.

Status-Modal aufrufen

Über den ⚙-Button (rot) bei jeder PDF mit Dok.Nr. — verfügbar im DMS-System (Tabelle), in der DMS-Status-Übersicht und direkt nach Ablage im Posteingang.

Hauptstatus & Flags

Hauptstatus: einer pro Dokument (Neu / Gesichtet / In Arbeit / Erledigt). Flags: beliebig viele (Bezahlt, Wichtig, Wiedervorlage, Steuerrelevant…). Konfigurierbar über die Konfig-UI auf der Status-Seite.

Wiedervorlage

Datum + optionaler Grund. Zusätzlich kann ein Eintrag „geschlummert" werden — er bleibt da, taucht aber erst wieder zum Schlummern-Datum auf. Effektives Datum = Schlummern-Datum, sonst Wiedervorlage-Datum.

Pills in der Datei-Zeile

Im DMS-System und in der Status-Übersicht erscheinen rechts neben dem Dateinamen kleine farbige Pills — kompakter Status-Überblick auf einen Blick. Die Pills zeigen Hauptstatus, Flags und Wiedervorlage-Datum (rot wenn überfällig, orange heute fällig).

Notiz, Verantwortlich, Sonstiges

Neben Status und Flags kann jeder Eintrag eine Notiz, einen Verantwortlichen, ein Erledigt-Datum, einen offenen Betrag, ein Weiterleitungsziel und eine Schlummern-Frist haben. Alles optional.

Historie

Jede Status-Änderung wird mit Zeitstempel und Benutzer in einer Historie-Liste festgehalten. Im Modal sichtbar als untere Übersicht („zuletzt geändert von… am…").

Posteingang-Integration

Direkt nach erfolgreicher Ablage im Posteingang erscheint neben dem ↩ Rückgängig-Button ein ⚙ Status & Wiedervorlage-Knopf — du kannst sofort einen Wiedervorlage-Termin oder eine Notiz setzen, ohne ins DMS zu wechseln.

Speicherung

Status-Daten liegen in /volume1/web/posteingang/dokumentstatus.json + Begleit-Index dokumentstatus_index.json. Backend ist dokumentstatus.php, Konfiguration statuskonfiguration.json + statuskonfiguration.php.

Tipp: Die DMS-Status-Übersicht (siehe Section 19) ist der zentrale Anlaufpunkt — dort sieht man alle Wiedervorlagen auf einen Blick, gefiltert nach Überfällig / Heute / diese Woche.
↑ Nach oben
📋
DMS-Status-Übersicht
Eigene Seite für alle Wiedervorlagen, Konfiguration und Bereinigung

Die Seite DMS-Status.html ist die zentrale Anlaufstelle für alles rund um Status und Wiedervorlagen. Erreichbar über den Status ↗-Link in der Navbar jedes Tools. Zeigt eine gefilterte und gruppierte Liste aller Status-Einträge mit Split-View für PDF-Vorschau.

Dashboard-Kacheln

Oben fünf große Kacheln: Überfällig (rot), Heute fällig (orange), Diese Woche (gelb), In Arbeit (blau), Wichtig (gelb-stern). Klick darauf filtert die Liste sofort.

Filter-Leiste

Filter nach Hauptstatus, Flags (mehrere kombinierbar — AND), Wiedervorlage-bis (Pills für Heute/Woche/Monat/30/60 Tage oder freier Date-Picker), und Volltextsuche über Notiz, Verantwortlich, Pfad und Dateiname.

Gruppierte Liste

Die Einträge sind nach Wiedervorlage-Kategorie gruppiert: Überfällig (rot) → Heute → Diese Woche → Geschlummert → Später → Ohne Wiedervorlage. Innerhalb jeder Gruppe nach Datum sortiert.

Split-View mit PDF-Vorschau

Links die Liste, rechts die PDF-Vorschau. Beim Anklicken eines Eintrags wird das Dokument direkt eingeblendet. Navigation per ↑↓-Tasten möglich. Aktuelle Auswahl ist hellgrün hervorgehoben.

Aktionen pro Eintrag

Pro Datei verfügbar: Status bearbeiten, 👁 Vorschau, PDF bearbeiten (im DMS-System öffnen), E-Mail, 📂 Im DMS öffnen.

Drucken

Über den 🖨 Drucken-Button wird ein druckoptimierter Bericht erzeugt — mit Logo oben rechts auf jeder Seite, Footer mit Seitennummerierung („Seite N von M"), kompakter Übersicht und ausführlicher Tabelle. Filter werden im Bericht festgehalten.

Bericht per E-Mail

Über 📧 Per E-Mail öffnet sich der E-Mail-Dialog mit dem fertigen HTML-Bericht im Body — Filter-bezogen. Du musst nur noch den Empfänger eingeben. Nutzt das gleiche T-Online-SMTP wie der reguläre Versand.

Tägliche E-Mail (automatisch)

Synology-Aufgabenplaner führt täglich um 07:00 das Script daily_status_email.py aus. Versendet einen kompakten Bericht (Überfällig + Heute + diese Woche), aber nur wenn relevante Einträge vorhanden sind. Konfigurierbar über daily_status_email_config.json.

⚙ Konfiguration

Modal zum Bearbeiten der Hauptstatus und Flags: hinzufügen, bearbeiten, löschen. Mit Drag & Drop zum Sortieren. Icon-Picker mit ~50 Vorschlägen + Freitext-Feld. Color-Picker mit Quick-Palette. Vor dem Löschen Verwendungs-Check (Anzahl betroffener Dokumente).

🧹 Bereinigen

Modal zum Aufspüren verwaister Status-Einträge — also solcher, deren PDF-Datei nicht mehr existiert. Filesystem-Scan über /volume1/Dokumente und /volume1/Posteingang. Granulare Auswahl, Backup vor Aktion, archiviert in dokumentstatus_orphaned.json. Sicherheits-Stop wenn >50% verwaist erscheinen.

Tipp: Die Status-Konfiguration solltest du neue Steuerjahre regelmäßig anlegen — z.B. „EST 2026" als Flag. So kannst du gefilterte Bericht über alle steuerrelevanten Dokumente eines Jahres erstellen, drucken oder per E-Mail an den Steuerberater senden.
↑ Nach oben
📂
Slot-Architektur (Sekundärordner)
Wie die KI bei der Ablage zwischen Primär- und Sekundärordner unterscheidet

Bei vielen Doktypen wird ein Dokument in mehrere Ordner gleichzeitig abgelegt — z.B. eine Rechnung in _Rechnungen/2024 UND in Hausverwaltung/Wohnung-Bremen. Der erste Pfad ist der Primärordner (zeitliche Sortierung), der zweite der Sekundärordner (thematische Sortierung). Beides wird in der Primärordner-Tabelle pro Doktyp konfiguriert.

Was sind Slots?

Ein „Slot" ist ein vorkonfigurierter Sekundärordner-Vorschlag mit einem Präfix. Beispiel: Slot „Hausverwaltung" mit Präfix /Hausverwaltung/. Pro Doktyp können mehrere Slots definiert sein — die KI wählt den passenden anhand der Dokumentinhalte.

Wo konfiguriert?

In der Primärordner-Tabelle (/volume1/web/posteingang/primaerordner.json) gibt's pro Eintrag ein Feld sekundaer_slots als Array von Objekten {label, praefix, beispiele}. Der Eintrag „KEINER" bedeutet: kein Sekundärordner für diesen Doktyp.

KI-Korrektur Primär/Sekundär

Manchmal verwechselt die KI Primär- und Sekundärordner — sie schlägt z.B. /Hausverwaltung/... als Hauptordner vor, obwohl das ein Sekundär-Slot ist. Defensive Korrektur prüft das, tauscht den Wert in extraFolder und setzt den korrekten Primärordner ein.

Anzeige im Posteingang

In der Datei-Karte siehst du den Primärordner als großen Eintrag und darunter ggf. den Sekundärordner-Slot — beide separat ergänzbar oder änderbar bevor du auf „Ablage starten" klickst.

↑ Nach oben
OCR-Beschleunigung
Von 30-60 Sekunden auf 1-2 Sekunden bei Text-PDFs

Der OCR-Service (ocr_api.py) wandelt PDFs per Tesseract in Text um, damit die KI sie analysieren kann. Mit mehreren Optimierungen wurde die Verarbeitungsdauer drastisch reduziert.

Schnellpfad: bereits Text

Wenn das PDF schon Text enthält (typisch für digital erzeugte Dokumente), wird dieser direkt extrahiert — komplett ohne OCR. Ergebnis: ~1 Sekunde statt 30-60 Sekunden. Etwa 95% der Eingangsdokumente fallen in diese Kategorie.

DPI-Reduktion (200 → 150)

Bei echtem OCR (gescannte Dokumente) wurde die Auflösung von 200 DPI auf 150 DPI reduziert. Das reicht für gute Texterkennung, halbiert aber die Verarbeitungszeit.

JPEG statt PNG

Zwischenbilder werden als JPEG (verlustbehaftet) statt PNG (verlustfrei) generiert. Schnelleres Encoding, kleinere Dateien — kein spürbarer Qualitätsverlust für Texterkennung.

Nur erste Seite

Für die KI-Analyse reicht meist die erste Seite. MAX_PAGES = 1 spart enorm Zeit bei mehrseitigen Dokumenten — etwaige Folgeseiten werden ignoriert.

Realistische Werte

Text-PDF: ~1-2 Sekunden (war: 30-60s) — Schnellpfad. Reines Scan-PDF: ~5-10 Sekunden (war: 30-60s) — echtes OCR mit allen Optimierungen.

Wo läuft das?

Der OCR-Service läuft als Container auf der DS223 (Port 5050). Das Posteingang-Tool ruft ihn beim Verarbeiten neuer PDFs auf. Tesseract liefert deutschen Text mit hoher Qualität.

↑ Nach oben
Backend-Skripte & Module
Was läuft im Hintergrund — und wie ruft man es an

Übersicht aller Skripte und wiederverwendbaren Module, die das DMS-System antreiben. Pro Komponente: Aufgabe, Pfad, Aufruf, Konfiguration und typische Probleme. Geordnet nach Backend (Python/PHP), Frontend-Module (JS/CSS) und Helper-Tools.

Backend (Python & PHP)

build_fulltext_index.py

Aufgabe: Baut den Volltext-Index (fulltext_index.json) für die DMS-Suche. Liest alle PDFs in /volume1/Dokumente rekursiv, extrahiert Text aller Seiten via pypdf (max. 50.000 Zeichen pro Datei), nimmt mtime+size+Metadaten mit. Bei Scan-PDFs ohne Text-Layer: OCR-Container-Aufruf mit persistentem Cache (ocr_cache.json).

Pfad: /volume1/web/posteingang/build_fulltext_index.py
Aufruf: manuell sudo python3 build_fulltext_index.py oder via DSM-Aufgabenplaner (nachts).
Konfig: Konstanten oben — MAX_CHARS_PER_DOC, OCR_TRIGGER_CHARS, OCR_URL.
Logfile: fulltext_index.log (Statistik am Ende: TextLayer / OCR neu / Cache / leer).

ocr_api.py

Aufgabe: Tesseract-OCR-Service als Flask-Container. Liest PDFs per multipart/form-data, prüft erst pdftotext (Schnellpfad), fällt sonst auf Tesseract zurück. RAM-Cache mit SHA-256-Hash, max. 200 Einträge LRU.

Pfad: /volume1/docker/tesseract-ocr/ocr_api.py (im Container gemountet als /app/ocr_api.py)
Aufruf: Container läuft auf DS223 (192.168.178.95:5050). Endpunkte: POST /ocr, GET /health, POST /cache/clear.
Konfig: MAX_PAGES=1 (nur Seite 1), DPI=150, LANG='deu'.
Achtung: nur Seite 1 wird OCRt — bewusste Performance-Entscheidung für Posteingang-KI.

build_folder_cache.py

Aufgabe: Cached die FileStation-Folder-Struktur, damit der Verzeichnisbaum links im DMS-System schnell rendert. Schreibt Datei-Counts pro Ordner.

Pfad: /volume1/web/posteingang/build_folder_cache.py
Aufruf: via DSM-Aufgabenplaner.
⚠ Sicherheit: NAS-Passwort steht im Klartext (Z. 21) — gehört in eine .env oder DSM-Keystore. Liegt aktuell im Backlog.

daily_status_email.py

Aufgabe: Tägliche Status-Übersichts-Mail. Liest dokumentstatus.json, fasst „Heute fällig", „Diese Woche", „Überfällig" zusammen und sendet als HTML-Mail.

Pfad: /volume1/web/posteingang/daily_status_email.py
Aufruf: DSM-Aufgabenplaner täglich 07:00 als root.
Konfig: daily_status_email_config.json (Empfänger, Schwellen).
Logfile: daily_status_email.log.

send_email.py / send_email.php

Aufgabe: Mail-Versand-Backend. Die .php ist der Wrapper, ruft das Python-Skript mit --jsonfile-Parameter auf. Versendet HTML-Mails inkl. Anhängen via T-Online-SMTP.

Pfad: /volume1/web/posteingang/send_email.py + send_email.php
Aufruf: POST an /posteingang/send_email.php mit JSON-Body (siehe E-Mail-Modul).
SMTP: securesmtp.t-online.de:465 (SSL), Sender beering.postausgang@t-online.de.
⚠ Sicherheit: T-Online-Passwort Klartext — gehört rotiert & ausgelagert.

statuskonfiguration.php

Aufgabe: Backend für Hauptstatus + Flags. Liest/schreibt statuskonfiguration.json, validiert Hex-Farben, erzwingt Mindest-Einträge, atomares Schreiben. Seit Etappe 15 mit optionaler schriftfarbe.

Pfad: /volume1/web/posteingang/statuskonfiguration.php
Endpoints: GET (Konfig laden), POST (speichern).
Wichtig: IDs (id) sind stabile Referenzen aus dokumentstatus.json — nicht änderbar, nur Label/Icon/Farbe.

dokumentstatus.php

Aufgabe: CRUD-Backend für Dokument-Status (Hauptstatus, Flags, WV-Datum, Notizen). Schreibt in dokumentstatus.json + Index-Datei.

Pfad: /volume1/web/posteingang/dokumentstatus.php
Endpoints: GET ?dok=Dok.Nr.000123, POST, DELETE, GET ?index=1.
Speicher: pro Dok-Nr. ein Eintrag, indexiert über dokumentstatus_index.json.

dokumentstatus_cleanup.php

Aufgabe: Findet verwaiste Status-Einträge — also solche, deren PDF-Datei nicht mehr existiert. Verschiebt Einträge in dokumentstatus_orphaned.json.

Pfad: /volume1/web/posteingang/dokumentstatus_cleanup.php
Aufruf: Manuell aus DMS-Status (Cleanup-Modal).
Sicherheits-Stops: wenn mehr als X% verwaist sind, bricht ab — schützt vor versehentlicher Massenmigration.

Frontend-Module (JavaScript & CSS)

pdf-editor.js / pdf-editor.css

Aufgabe: Vollständiges PDF-Bearbeitungsmodul — Seiten neu anordnen, drehen, zuschneiden, Notizen, Stempel (Etappe 13).

Pfad: /volume1/web/posteingang/pdf-editor.js + .css
Eingebunden in: DMS-System.html, DMS-Status.html, Posteingang-KI-Tool.html.
Public API: PdfEditor.open(path,name), .close(), plus Stempel-Funktionen (openStampPicker, openStampEditor, …).
Modal-HTML liegt aktuell noch dupliziert in jeder Host-Seite (siehe Etappe 17 für Konsolidierung).

email-modal-snippet.html (Etappe 14)

Aufgabe: Wiederverwendbares E-Mail-Modal mit Rich-Text-Editor. HTML, CSS, JS in einer Datei.

Pfad: /volume1/web/posteingang/email-modal-snippet.html
Einbindung: via snippet-loader.js in <div id="email-modal-mount"></div>.
Public API: window.emailFile(f), window.openEmailModal({...}), window.closeEmailModal().
Used by: DMS-System, DMS-Status, Posteingang.

snippet-loader.js

Aufgabe: Lädt HTML-Snippets per fetch nach und führt enthaltene <script>-Tags korrekt aus (Browser tut das bei innerHTML nicht von alleine).

Pfad: /volume1/web/posteingang/snippet-loader.js
API: loadSnippet('mount-id', 'snippet.html?v=...') — gibt Promise zurück.
Wichtig: Mount-Container muss vor dem Aufruf im DOM existieren.

dms-status-modal.js

Aufgabe: Status-Editier-Modal als wiederverwendbares Snippet (Etappe 14 teilweise). Wird von DMS-System und Posteingang genutzt.

Pfad: /volume1/web/posteingang/dms-status-modal.js
Einbindung: <script src="dms-status-modal.js?v=1"></script>.
API: Status öffnen + speichern für ein Dokument (Hauptstatus, Flags, WV, Notiz).

Helper-Tools

pywatch.sh

Aufgabe: Live-Anzeige laufender Python-Jobs auf der NAS — Ersatz für das auf DSM fehlende watch-Kommando. Aktualisiert alle 2 Sekunden, mit PID/Laufzeit/User/Befehl.

Pfad: ~/scripts/pywatch.sh (persönliches Home-Verzeichnis)
Aufruf: ~/scripts/pywatch.sh oder mit Filter ~/scripts/pywatch.sh fulltext_index.
Beenden: STRG+C.
Tipp: Alias alias pyw='~/scripts/pywatch.sh' in ~/.bashrc.

Wichtige Datendateien

fulltext_index.json

Volltext-Index. Pro PDF: Pfad, Dateiname, Ordner, Text, mtime, size, Seiten, Metadaten, text_quelle (textlayer/ocr_fresh/ocr_cached/none). Wird vom Such-Modul im DMS-System geladen.

ocr_cache.json

Persistenter OCR-Cache neben dem Index. Schlüssel: pfad|mtime, Wert: OCR-Text. Beim Index-Build werden unveränderte PDFs aus dem Cache bedient — spart OCR-Zeit massiv.

dokumentstatus.json + _index.json

Status-Speicher pro Dokument. dokumentstatus.json enthält Einträge, dokumentstatus_index.json ist der schnelle Lookup-Index. Atomares Schreiben.

statuskonfiguration.json

Definition der Hauptstatus + Flags (Label, Icon, Farbe, optionale Schriftfarbe, Reihenfolge). Wenn nicht vorhanden: Default-Fallback im PHP-Code.

primaerordner.json

Primär-/Sekundärordner-Mapping pro Doktyp. Wird von der KI-Klassifikation genutzt um Ablagepfade vorzuschlagen.

posteingang_docnr.json

Zentraler Zähler für die nächste Dok.Nr. Aktueller Wert: {"next": 4883}. Wird beim Ablage-Vorgang inkrementiert.

💡 Diese Übersicht wird mit dem System mitgepflegt. Bei größeren Änderungen oder neuen Modulen — bitte hier ergänzen, damit man später nicht raten muss, was wo liegt und wie es aufgerufen wird.

↑ Nach oben
🗑
Papierkorb
Index-basiertes Lösch- & Wiederherstellungs-System mit Folder-Containern

Statt eines flachen Ordners „Papierkorb" pflegt das DMS einen Index aller gelöschten Einträge — mit Original-Pfad, Lösch-Zeitpunkt, Lösch-Quelle, Größe und Folder-Verschachtelung. So kann ein gelöschtes File oder ein ganzer Ordner mit allen Kindern atomar wiederhergestellt werden — selbst wenn der ursprüngliche Pfad inzwischen anders aussieht. Eigene Seite Papierkorb in der Topbar (löst die alte Archivnavigation ab).

Eigene Seite mit Split-View

Erreichbar über den Topbar-Link „Papierkorb". Zweispaltige Ansicht: links die Liste aller gelöschten Einträge, rechts eine Vorschau des aktuell ausgewählten Eintrags. Sortierbar nach Lösch-Zeitpunkt, Name, Größe, Typ.

Index-Struktur

Zentrale Datei papierkorb_index.json auf der NAS. Pro Eintrag: trash_id, type (file/folder), original_path, original_filename, deleted_at, deleted_by, size_bytes, parent_folder_trash_id (für Folder-Container), child_count. Schreiboperationen sind atomar (flock + tmp + rename) — kein halb-fertiger Index bei Crash.

Folder-Container ▶/▼

Wenn ein Ordner gelöscht wird, landet er als Folder-Container im Index — mit allen Kind-Files als verknüpfte Einträge. In der Tabelle sichtbar als ▶/▼-Toggle: aufklappen zeigt alle Kind-Files eingerückt. Auch tief verschachtelte Strukturen werden rekursiv gespeichert und sind mit einem Klick wiederherstellbar.

Wiederherstellen ↩

Drei Optionen pro Eintrag: (1) Original-Ort — exakt dorthin zurück, wo's gelöscht wurde, (2) Posteingang — neu sortieren / neu ablegen, (3) Anderen Ordner — ein Tree-Picker zeigt den Verzeichnisbaum, beliebigen Ziel-Ordner auswählen. Bei Folder-Restore werden alle Kinder automatisch mitgenommen.

Bulk-Operationen

Mehrere Einträge per Checkbox auswählen, dann Bulk-Aktion: Wiederherstellen (alle gehen zum Original-Ort) oder Endgültig löschen (mit Bestätigungs-Modal). Auch Files und Folders gemischt — funktioniert.

Endgültig löschen ✕

Pro Eintrag kann via ✕-Button endgültig gelöscht werden — entfernt sowohl das Trash-File als auch den Index-Eintrag. Bei Folder-Containern werden rekursiv alle Kind-Einträge mitgelöscht. Bestätigungs-Modal verhindert versehentliches Klicken.

Konsolidiertes Lösch-API

Alle DMS-Seiten (DMS-System, Posteingang, etc.) nutzen einheitlich window.dmsDelete(...) für Datei-Löschungen. Im Hintergrund werden Datei + Index-Eintrag konsistent geschrieben. Backend: papierkorb_api.php mit Endpoints list / prepare / commit / commit_folder / restore_check / restore_commit / restore_folder_check / restore_folder_commit / purge.

Drucken & Export 📤

Wie auf den anderen DMS-Seiten lässt sich der Papierkorb-Inhalt drucken oder als CSV/Excel exportieren — über den 📤 Export-Button rechts in der Navbar. Spalten: Dok.Nr., Dateiname, Original-Pfad, Gelöscht am, Größe (optional Typ, Anzahl Kinder, Gelöscht von, Trash-Filename). Details siehe Sektion Drucken & Export.

Cache-leeren-Button ↺

Zusätzlich zum Export-Button gibt's oben rechts einen ↺ Cache-Button. Nützlich wenn nach Updates etwas veraltet wirkt oder ein Index-Stand nicht mehr zur tatsächlichen Lage passt — leert den Browser-Cache und lädt die Seite neu.

Hinweis: Der Inbox-Archivordner (Backup nach KI-Ablage, falls jemand „Undo" klickt) ist nicht identisch mit dem Papierkorb. Er bleibt aktuell als zusätzlicher Sicherheitsbuffer bestehen — die Frage, ob er durch den neuen Papierkorb ersetzt werden soll, ist offen und wird nach mehr Praxis-Erfahrung mit dem Restore-Workflow entschieden.
↑ Nach oben
📤
Drucken & Export
Wiederverwendbare Library für Druck-Berichte, CSV- und Excel-Export

Sechs DMS-Seiten teilen sich eine zentrale Library dms-print-export.js, die Tabellen-Inhalte einheitlich exportieren oder drucken kann — mit Spalten-Auswahl, Datenumfang-Wahl und konsistentem Layout. Erreichbar über den 📤 Export-Button rechts in der Navbar (auf manchen Seiten zusätzlich oder ersetzend zum 🖨 Drucken-Button). Pro Seite passen Spalten-Set und Bericht-Titel — die Library erledigt den Rest.

Verbreitung

Aktuell auf 6 Seiten ausgerollt: DMS-System, Papierkorb (Posteingang-KI-Tool-Papierkorb), DMS-Status, Protokoll-Suche (Posteingang-KI-Tool-Suche), Volltextsuche (Posteingang-KI-Tool-Volltextsuche) und Posteingang-KI-Tool. Jede Seite definiert ihre eigenen Spalten und ruft window.dmsExport.show(...) auf.

Datenumfang-Wahl

Beim Klick auf 📤 Export öffnet sich ein zentriertes Modal. Oben kann gewählt werden zwischen Sichtbare Zeilen (das, was aktuell nach Filter/Suche zu sehen ist) und Alle Zeilen (gesamter Datenbestand). So lässt sich z.B. ein gefilterter Steuerbericht oder der komplette Volltext-Index exportieren.

Spalten-Auswahl

Darunter eine Liste mit Checkboxen — pro verfügbare Spalte eine. Standardmäßig sind die wichtigsten Spalten vorausgewählt, optionale Spalten (Trash-Filename, Sek.-Slot, etc.) sind ausschaltbar. So passt der Bericht für unterschiedliche Empfänger: kompakt für den Steuerberater, ausführlich für die eigene Ablage.

Drei Formate

🖨 Drucken: öffnet ein neues Fenster mit druckoptimiertem Layout, ruft sofort den Druck-Dialog auf. 📊 CSV: UTF-8 mit BOM (für Excel-Import ohne Umlaut-Probleme), Semikolon als Trenner — passt zur deutschen Excel-Locale. 📑 Excel: nativ als .xlsx, formatiert (Header fett, Spaltenbreiten optimiert), via SheetJS aus dem CDN.

Druck-Layout

A4 mit @page margin: 24mm 14mm 18mm 14mm. Bericht-Kopf mit großem Titel + Untertitel + Generierungsdatum. Pro Seite oben rechts ein dezentes Logo-Suffix (z.B. „DMS / KI-Tool"), unten rechts „Seite X von Y" via CSS-Counter. Hintergrundfarben werden beim Druck respektiert (print-color-adjust: exact) — Status-Badges und Highlights bleiben farbig.

Konsistenter Dateiname

Exportierte Dateien tragen einen Zeitstempel im Format YYYY-MM-DD_HH-MM — z.B. DMS-Status_2026-05-08_07-15.xlsx. So sind Berichte chronologisch sortierbar und überschreiben sich nicht versehentlich.

Pro-Seite-Anpassungen

Jede Seite ruft window.dmsExport.show({rows, rowsAll, columns, title, subtitle, filename, headerSuffix}) mit ihren eigenen Daten auf. columns ist ein Array von {key, label, default, formatter, align}. Die Library kümmert sich um Modal, Formate, Druck-Window — die Seite muss nur Daten und Spalten beisteuern.

Hinweis: DMS-System & ES-Modul

Auf der DMS-System-Seite läuft das Hauptscript als <script type="module"> — globale Funktionen sind dort nicht direkt verfügbar. Der Export-Code nutzt deshalb window.state für den Datenzugriff und lokale Kopien einiger Helfer (fmtSizeLocal, formatMtimeFix, exportToast). Die Library wurde dafür um den headerSuffix-Parameter erweitert.

Tipp: Wenn du regelmäßig denselben Bericht erstellst (z.B. „alle Steuerdokumente 2025"), erst auf der jeweiligen Seite filtern, dann Sichtbare Zeilen exportieren — das spart Nachsortierung im Excel.
↑ Nach oben
📊
Index-Dashboard
Live-Cockpit mit 6 Kacheln, Wetter-Laufleiste und sanftem Drift

Die Index-Seite (https://beeringdokuki.duckdns.org/) ist nicht mehr nur eine Werbe-Karte mit Feature-Liste, sondern ein Live-Cockpit. Sechs Kacheln zeigen den aktuellen Stand des DMS, eine Wetter-Laufleiste oben gibt Wetterdaten für Bremen, der Schriftzug „DMS-System KI-Tool" pendelt sehr dezent — alles fühlt sich lebendig an. Auto-Login mit gespeicherten Credentials, automatischer Refresh der wichtigsten Werte alle 60 Sekunden.

6 Live-Kacheln

📥 Posteingang (wartende Dokumente, mit oranger Hervorhebung wenn nicht leer), 📄 Abgelegt (Gesamtzahl aus dem Volltext-Index), 🕐 Letztes Dokument (relativ — „vor 2 Std" — plus Dateiname), ⚙ KI-Status („⏸ Bereit"), 📊 Diese Woche (abgelegte Dokumente seit Montag), 💾 Speicher (Volume-Auslastung, falls API-Berechtigung passt).

Klickbare Kacheln

Vier Kacheln führen direkt zum passenden Tool: Posteingang → Posteingang-KI-Tool, Abgelegt → Volltextsuche, Letztes Dokument → DMS-System (Recent-Modus), Diese Woche → Protokoll-Suche. KI-Status und Speicher sind statisch.

Auto-Login

Die Index-Seite versucht beim Laden ein Auto-Login mit den im localStorage gespeicherten Credentials (nas_sid, nas_user, nas_pass) — gleiche Mechanik wie auf den anderen DMS-Seiten. Bei abgelaufener Session wird automatisch neu eingeloggt. Wenn nichts gespeichert ist, zeigen die Kacheln „—" mit Hinweis „bitte einmal im Tool einloggen".

Auto-Refresh + manueller Refresh

Posteingang-Zähler und „Letztes Dokument" werden alle 60 Sekunden frisch geladen. Total-Zähler aus dem Volltext-Index nur einmal beim Laden (der Index ist groß). Oben rechts ein ↺ aktualisieren-Button für manuelles Auffrischen — rotiert beim Klick.

Status-Banner

Über den Kacheln ein dezentes Mono-Statusband: links ● verbunden · martin@DS225 (mintgrün glühender Punkt) oder ○ nicht angemeldet, rechts der Refresh-Button. Auf einen Blick sichtbar, ob das Dashboard live ist.

Wetter-Laufleiste

Oben unter dem Statusband ein schwarzer Streifen mit Marquee-Animation (40 Sek pro Durchlauf): aktuelles Wetter Bremen — Temperatur, Beschreibung, gefühlte Temperatur, Min-/Max heute, Wind, Luftfeuchtigkeit, Sonnenauf- und -untergang. Datenquelle: Open-Meteo (kostenlos, kein API-Key, kein Tracking, keine Anmeldung). 22 WMO-Wettercodes mit deutschen Texten und passenden Emojis. Hover pausiert die Animation. Cache 15 Min.

Driftender Schriftzug

Der H1 „DMS-System KI-Tool" pendelt sehr sanft horizontal hin und her (±6px im 14-Sekunden-Zyklus). Kaum wahrnehmbar, gibt der Seite aber Leben — wirkt wie ein leises Atmen.

Cache-leeren-Link

Im CTA-Bereich unter „Zum DMS-Tool" ein dezenter ↺ cache leeren-Link (Mono-Schrift). Ein Klick leert den Browser-Cache und lädt die Seite mit Timestamp-Parameter neu — nützlich nach Updates oder wenn das Dashboard veraltet wirkt.

Mobile-Responsive

3-Kacheln-Grid auf Desktop (≥ 720px), 2-Kacheln-Grid auf Tablet (480-719px), 1-Kacheln-Spalte auf Smartphone (< 480px). Wetter-Laufleiste, Drift und Auto-Refresh funktionieren auch mobil.

Hinweis zur Speicher-Kachel: Die Synology-API für Volume-Stats (SYNO.Core.System mit type=storage) ist nicht für jeden Benutzer freigegeben — bei Standard-Berechtigungen kann die Kachel auf „—" stehen bleiben. Lösbar entweder durch erweiterte API-Rechte oder ein eigenes PHP-Script, das df -h ausliest. Aktuell auf Wartepause.
↑ Nach oben
🎨
Logo & Branding
Mix-C-Logo: Brieffach + Stack + KI-Sparkle

Das Logo „Mix C" ist die visuelle Identität des DMS-Systems: ein Brieffach als Außenform (Posteingang-Bezug), darin zwei Stack-Linien (gestapelte Dokumente — Aufgeräumtheit), und ein mintgrüner Funke oben rechts (KI-Akzent). Die Story des Tools in einem einzigen Bild: Posteingang + Dokumente + KI.

SVG-Geometrie

ViewBox 0 0 34 34. Drei Layer: Brieffach-Pfad (1.8px stroke, geöffnete Schale unten), zwei <rect> für die Stack-Linien (2px hoch, 14px breit, links bei x=9), KI-Sparkle als Stern-Pfad oben rechts bei (29, 4) bis (32, 7). Skaliert sauber von 24×24 (Topbar/Favicon) bis 96×96 (Hero).

Farbgebung

Auf dunklem Grund: Brieffach + Stack in #F5F4F0 (helles Off-White), Sparkle in #5DC8A0 (Topbar-Mintgrün). Auf hellem Grund: Brieffach + Stack in #1A1A18, Sparkle in #1D7A5A (Standard-Grün). Das hellere Mintgrün kommt nur dort zum Einsatz, wo der dunkle Mintton auf schwarzem Untergrund verschwinden würde (z.B. in der Topbar).

Wo das Logo erscheint

Insgesamt sechs Stellen: Topbar (alle 7 Tool-Seiten, 30px, mit Hover-Effekt), DMS-System Wasserzeichen (72×72, wenn kein Ordner gewählt), Index-Hero (56×56 schwarz, Mix C in Off-White), Bildschirmschoner (64×64 mit pulsierendem Sparkle), DMS-Client-Start (mobile Variante, 46px), Favicon (Browser-Tab + PWA-Icon).

Topbar-Hover

Bei Hover über die Logo-Region in der Topbar: Logo-Icon vergrößert sich sanft auf scale(1.05), „KI-Tool"-Schriftzug wird in einer helleren Mintvariante (#7FE5BD) — beides mit 0.25s ease-Transition. Sehr dezent, gibt der Topbar Lebendigkeit ohne abzulenken.

Bildschirmschoner-Sparkle-Pulse

Im Bildschirmschoner pulsiert der Sparkle dezent im 3-Sekunden-Takt: opacity 1.0 → 0.6 → 1.0, gleichzeitig scale 1.0 → 1.15 → 1.0. Animation-Name: dmsSparklePulse. Wirkt wie ein leise atmender Stern.

Favicon-Format

Eigene Datei /posteingang/favicon.svg — schwarzer Hintergrund mit abgerundeten Ecken (App-Icon-Style), Logo zentriert darin. SVG-Format, weil moderne Browser SVG-Favicons unterstützen und das Logo bei jeder Tab-Größe scharf bleibt. Wird per Inline-JS in topbar.php dynamisch in den <head> aller Tool-Seiten injiziert.

Schriftzug

„DMS-System KI-Tool" in IBM Plex Sans, 700 Weight, 18px in der Topbar. „DMS-System" in Off-White, „KI-Tool" in Mintgrün abgesetzt. Auf der Index-Seite größer (1.7rem) und in „DMS-System" anthrazit, „KI-Tool" Standard-Grün. Plus Mono-Subtitle mit Seitenkennung (z.B. // Hilfe, // DMS) rechts vom Schriftzug.

Migration vom alten Logo

Vorher gab es ein animiertes 3-Blätter-Sheet-Logo mit Scanline-Effekt — in Hero-Bereichen wirkungsvoll, aber komplex und nicht skalierbar auf Favicon-Größe. Mix C ersetzt das überall: einheitliche Identität von 24×24 bis 96×96, ein Stil über Web, Mobile und Browser-Tab.

Wenn du das Logo modifizieren willst: Die SVG-Pfade liegen in topbar.php (Topbar-Variante), DMS-System.php (Wasserzeichen), index.html (Hero), favicon.svg (Browser-Tab), dms-session-timeout.js (Bildschirmschoner) und DMS-Client-Start.html (mobile). Bei Änderungen alle 6 Stellen synchron halten — sonst entsteht Branding-Drift.
↑ Nach oben
🌐
DuckDNS-Automatisierung
Vier Subdomains, gepflegt vom DSM-DDNS auf DS225+

DuckDNS ist ein kostenloser Dynamic-DNS-Dienst — er löst das Problem, dass Heimnetz-IPs sich periodisch ändern, indem er die aktuelle öffentliche IP immer hinter einem festen Domain-Namen versteckt. Vier Subdomains laufen aktuell, alle zentral gepflegt vom DSM auf der DS225+ — keine Cron-Skripte, keine FritzBox-DynDNS, keine manuelle Pflege mehr nötig.

Vier aktive Subdomains

beeringdokuki.duckdns.org → DMS-Tool (Reverse Proxy zu DS225+ Webspace), beeringdrive.duckdns.org → Synology Drive, beeringgrafana.duckdns.org → Grafana-Dashboard, beeringds225.duckdns.org → DSM-Login der DS225+. Alle Subdomains zeigen automatisch auf die aktuelle Heimnetz-IP.

Pflege per DSM-DDNS

Eingerichtet auf DS225+ unter Systemsteuerung → Externer Zugriff → DDNS. Zuerst „Anbieter anpassen" → DuckDNS als neuer Anbieter mit Query-URL https://www.duckdns.org/update?domains=__HOSTNAME__&token=__PASSWORD__&ip=__MYIP__, dann pro Subdomain ein DDNS-Eintrag mit Hostname und Token (das gemeinsame DuckDNS-Token aller Subdomains).

DSM-Limitation: ein Hostname pro Anbieter

DSM erlaubt pro DDNS-Anbieter nur einen Hostnamen. Workaround: Anbieter mehrfach anlegen — DuckDNS, DuckDNS-2, DuckDNS-3, DuckDNS-4, alle mit derselben Query-URL. So lassen sich vier Subdomains parallel pflegen. Die Bezeichnung ist nur intern.

Update-Frequenz

DSM pollt automatisch alle paar Minuten und aktualisiert bei Bedarf. Bei einer IP-Änderung sind die Tools maximal 5 Minuten nicht erreichbar. DuckDNS-DNS-Einträge haben eine TTL von 60 Sekunden — Änderungen propagieren schnell.

Token sicher halten

Das DuckDNS-Token (36 Zeichen, Format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) ist der Schlüssel zu deinen Subdomains. Wer das Token hat, kann die DNS-Einträge umbiegen. Im DSM-DDNS-Dialog wird es als Kennwort eingetragen — nicht in Repos veröffentlichen, nicht in Screenshots zeigen.

Status-Check

In DSM Systemsteuerung → Externer Zugriff → DDNS: Status-Spalte aller Einträge muss Normal zeigen, „Externe Adresse" muss zur aktuellen Heimnetz-IP passen, „Letzte Aktualisierung" sollte aktuell sein. Bei Fehler: Token oder Hostname falsch.

Frühere Methoden (veraltet)

Vor der Umstellung lief DDNS via Cron-Skript bzw. via FritzBox-DynDNS — beide hatten Schwächen. Cron lief lokal auf einer NAS, war aber nirgends sichtbar dokumentiert. FritzBox kann nur einen DynDNS-Anbieter — der Slot war mit dynup.de für eine andere Domain belegt. DSM-DDNS löst beides elegant in einer zentralen Stelle.

Account & Anmeldung

DuckDNS unterstützt Login via Google, GitHub, Reddit oder Twitter — kein eigenes Passwort. Pro Account sind bis zu 5 Subdomains kostenlos, die hier genutzten 4 sind also gut innerhalb des Limits. Bei längerer Inaktivität (> 30 Tage ohne Login auf duckdns.org) können Domains gelöscht werden — alle paar Monate kurz vorbeischauen.

Migration-Hinweis Mai 2026: Beim Wechsel auf Telekom-Glasfaser hatte sich die öffentliche IP geändert, die alten Update-Mechanismen (Cron + FritzBox) hatten die DuckDNS-Subdomains nicht mehr aktualisiert — Tools waren von außen nicht mehr erreichbar. Die Umstellung auf DSM-DDNS löste das Problem in einem Zug für alle 4 Subdomains.
↑ Nach oben
🔄
Reverse Proxy
DSM-Reverse-Proxy auf DS223 als zentrales Eingangstor

Alle externen HTTPS-Anfragen kommen über DuckDNS und FritzBox-Portweiterleitung an einer Stelle an: dem DSM-Reverse-Proxy auf DS223. Er entschlüsselt die HTTPS-Verbindung, prüft die Subdomain und leitet die Anfrage zur passenden internen IP+Port weiter. So entstehen aus einer einzigen externen IP mehrere voneinander getrennte Dienste.

Wo konfiguriert?

DSM auf DS223Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy. Pro Subdomain eine Regel: Quelle HTTPS, beeringXY.duckdns.org, Port 443, Ziel je nach Dienst. WebSocket-Tab aktivieren, wenn der Zieldienst Live-Updates braucht (z.B. DSM, Synology Drive).

Aktive Regeln (Stand Mai 2026)

beeringdokuki:443 → 127.0.0.1:8080 (Nginx-Docker auf DS223 → DS225+ Webspace + OCR + FileStation-API). beeringdrive:443 → Synology-Drive-Server. beeringgrafana:443 → Grafana-Container. beeringds225:443 → 192.168.178.116:5001 (DSM-Login der DS225+). Alle vier mit eigenem Let's-Encrypt-Zertifikat.

Warum DS223 als Frontend?

DS223 ist das „Backup-NAS" und übernimmt die Frontend-Rolle: nur sie ist von außen erreichbar (Port 443/80 in der FritzBox auf DS223 weitergeleitet), die DS225+ ist vom Internet aus nicht direkt sichtbar. Vorteil: einmalige Angriffsfläche, klarer Eingangspunkt — und die DS223 läuft sowieso 24/7 als Hyper-Backup-Ziel.

FritzBox-Portweiterleitung

FritzBox → Internet → Freigaben → Portfreigaben: Port 443 (HTTPS) und Port 80 (HTTP für Let's-Encrypt-Renewal) extern → beide auf DS223 (192.168.178.95). Port 443 wird intern auf 8080 umgemappt (für die Dokuki-Subdomain mit Nginx-Docker), die anderen drei Subdomains gehen direkt auf den DSM-Reverse-Proxy.

Doppelte Hülle: Proxy + Nginx

Bei beeringdokuki kommt nach dem DSM-Reverse-Proxy noch Nginx in Docker: er routet weiter /webapi/ → DS225+:5000 (FileStation-API), /ocr/ → DS223:5050 (Tesseract-Container), Rest → DS225+:80 (Webspace mit den HTML/PHP-Dateien). Die anderen drei Subdomains kommen ohne Nginx-Zwischenschritt aus.

WebSocket für DSM

Speziell für beeringds225 (DSM-Login) muss im Reverse-Proxy-Dialog der WebSocket-Tab aktiviert sein — DSM nutzt WebSockets für Live-Updates. Ohne dieses Häkchen wirkt das DSM-UI träge oder reagiert gar nicht. Auch Synology Drive (beeringdrive) braucht WebSocket.

Datenfluss-Übersicht: Browser → HTTPS:443 → FritzBox → DS223 (DSM Reverse Proxy entschlüsselt SSL) → je nach Subdomain: lokal Nginx-Docker (für Dokuki) oder direkt zum Ziel-Dienst. Detail-Ablauf siehe Port-Dokumentation-PDF.
↑ Nach oben
🔒
Let's Encrypt-Zertifikat
Kostenloses SSL für alle Subdomains, automatisch erneuert

Damit der Browser bei Tool-Aufrufen kein „Nicht sicher" anzeigt und alle Daten verschlüsselt fließen, hat jede Subdomain ein eigenes Let's-Encrypt-Zertifikat. Let's Encrypt ist eine kostenlose Zertifizierungsstelle — DSM kümmert sich um Beantragung, Zuweisung und automatische Erneuerung alle 90 Tage.

Zertifikat anfordern

DSM auf DS223 → Systemsteuerung → Sicherheit → Zertifikat → Hinzufügen → „Neues Zertifikat hinzufügen" → „Zertifikat von Let's Encrypt anfordern". Domain-Name (z.B. beeringds225.duckdns.org), E-Mail (für Renewal-Benachrichtigungen), keine SAN nötig. Beantragung dauert ca. 30-60 Sekunden.

Domain-Verifikation (HTTP-01-Challenge)

Let's Encrypt prüft, ob du wirklich Eigentümer der Domain bist: ruft http://<domain>/.well-known/acme-challenge/<token> auf. Kommt die richtige Antwort → Zertifikat wird ausgestellt. Voraussetzung: Port 80 muss von außen auf DS223 erreichbar sein. Deshalb leitet die FritzBox sowohl Port 443 als auch Port 80 weiter.

Zertifikat dem Reverse-Proxy zuweisen

Nach Ausstellung muss das Zertifikat dem passenden Reverse-Proxy-Eintrag explizit zugeordnet werden. Sicherheit → Zertifikat → Einstellungen: Liste mit allen Diensten, daneben Dropdown mit verfügbaren Zertifikaten — pro Subdomain das passende Zertifikat auswählen. Sonst nutzt der Reverse-Proxy ein anderes (z.B. das Standard-DSM-Zertifikat) und der Browser zeigt „Nicht sicher".

Automatische Erneuerung

Let's-Encrypt-Zertifikate sind nur 90 Tage gültig. DSM erneuert sie automatisch ca. 30 Tage vor Ablauf — solange Port 80 dauerhaft erreichbar ist. Bei Fehlern beim Renewal kommt eine Mail an die hinterlegte E-Mail-Adresse. Manuell prüfen unter Sicherheit → Zertifikat: „Verbleibende Tage"-Spalte.

Pro Subdomain ein Zertifikat

Aktuell hat jede der vier Subdomains (Dokuki, Drive, Grafana, DS225) ihr eigenes Let's-Encrypt-Zertifikat. Alternative wäre ein Wildcard-Zertifikat (*.duckdns.org) — das geht aber bei DuckDNS nicht so einfach (DNS-01-Challenge nötig statt HTTP-01). Vier Einzelzertifikate sind unkompliziert und werden parallel erneuert.

Häufige Fehler

„Failed to verify domain": Port 80 nicht durchgeleitet, oder DuckDNS zeigt nicht auf die aktuelle IP. Erst Port-Forwarding und DDNS-Status prüfen, dann Zertifikat erneut anfordern. Browser zeigt „Nicht sicher": Zertifikat ist erstellt, aber dem Reverse-Proxy nicht zugewiesen — siehe Punkt „Zuweisen".

Sicherheitshinweis: Externe Verschlüsselung (HTTPS auf Port 443) ist mit Let's Encrypt durchweg gesichert. Interne Kommunikation zwischen DSM-Reverse-Proxy und Nginx bzw. zwischen Nginx und DS225+ läuft unverschlüsselt (HTTP) — das ist im Heimnetz akzeptabel, weil es das LAN nicht verlässt. Verschlüsselung „zur Welt" ist das, was zählt.
↑ Nach oben
💾
Backup & Restore
Hyper Backup auf DS925+ — vierteljährliche Restore-Übung

Täglich um 03:00 Uhr sichert Hyper Backup die Volumes Dokumente, Fotos, Posteingang, homes, web und web_packages auf die DS925+ in den freigegebenen Ordner DS225-Backup/DS225_1. Verschlüsselt, mit 20 Versionen Smart Recycle. Damit das Backup im Ernstfall auch wirklich trägt, gibt es vierteljährlich eine kurze Restore-Übung.

1 · Hyper Backup öffnen

DSM auf DS225+Hauptmenü → Hyper Backup. In der Sicherungsaufgabe „Synology NAS 1" sollte grün „Erfolgreich" stehen mit dem letzten Lauf von heute Nacht. Falls rot: erst das Backup-Problem lösen, dann erst die Übung machen.

2 · Backup-Daten-Explorer starten

In der Toolbar oben links auf den dritten Button (Datei-Symbol — Backup-Daten durchsuchen). Nicht den zweiten Button („Wiederherstellungs-Assistent") — das ist der destruktive Vollwiederherstellungs-Modus. Verschlüsselungs-Passwort eingeben, fertig.

3 · Stichproben-Ordner wählen

Es öffnet sich ein Datei-Browser. Versions-Slider unten auf den aktuellsten Tag ziehen. Im Baum: Dokumente → einen kleinen Ordner mit PDFs auswählen, z.B. _Rechnungen (typisch ein paar MB, überschaubar). Den Ordner einmal anklicken (nicht doppelklicken — das öffnet ihn).

4 · „Kopieren nach …", nicht „Wiederherstellen"

Oben werden drei Buttons aktiv: Kopieren nach, Wiederherstellen, Download. „Kopieren nach …" klicken — das fragt nach einem Ziel-Pfad. Niemals „Wiederherstellen" wählen, weil das an die Original-Position zurückspielt und produktive Daten überschreiben kann.

5 · Test-Ziel angeben

Im Pfadwähler navigieren zu homes → beering und ein neues Test-Verzeichnis anlegen, z.B. restore-test-YYYY-MM-DD. Bestätigen — der Restore läuft. Bei einem 7 MB-Ordner ist das in ~30 Sekunden durch.

6 · Verifizieren per SSH

In SSH auf DS225+: Dateianzahl, Größe und Hash mit dem Original vergleichen.

find /volume1/Dokumente/_Rechnungen -type f | wc -l
find /volume1/homes/beering/restore-test-XX/_Rechnungen -type f | wc -l
cd /volume1/Dokumente/_Rechnungen && md5sum * > /tmp/m1.txt
cd /volume1/homes/beering/restore-test-XX/_Rechnungen && md5sum * > /tmp/m2.txt
diff /tmp/m1.txt /tmp/m2.txt && echo OK
Anzahl muss gleich sein, diff muss ohne Ausgabe über OK durchlaufen.

7 · Aufräumen

sudo rm -rf /volume1/homes/beering/restore-test-XX. Damit ist die Übung beendet. Insgesamt-Zeitaufwand: ca. 10 Minuten.

Bei Defekt: voller Restore

Wenn die DS225+ wirklich mal weg ist und du alles zurückspielen musst, ist es derselbe Hyper-Backup-Wizard — nur statt „Backup-Daten durchsuchen" der zweite Button (Wiederherstellungs-Assistent). Dann „Daten" wählen, Version, freigegebene Ordner auswählen, und an die Original-Position zurückspielen lassen. Gehört nicht in die vierteljährliche Routine — nur im Ernstfall.

Quartals-Reminder: Die DMS-Status-Tagesmail enthält am 1. Februar, 1. Mai, 1. August und 1. November jeweils einen Hinweis-Block oben in der Mail. Bei Sicht: 10 Minuten in den Kalender packen und diese Sektion abarbeiten. Letzte erfolgreich durchgeführte Übung: 14.05.2026 mit _Rechnungen (17 PDFs, alle byte-identisch wiederhergestellt).
↑ Nach oben
📝
Notizen & Kommentare
Mehrteilige Notiz-Historie pro Doknr — durchsuchbar, editierbar, mit Audit

Jedes Dokument mit einer Dok.Nr. kann eine chronologische Notiz-Historie bekommen — unabhängig von der einzeiligen Status-Notiz aus dem DMS-Status-Modul. Notizen erscheinen als 📝-Action-Button mit grüner Counter-Pille in DMS-System und DMS-Status, sind im aufgeklappten Detail-Bereich sichtbar, in der Print-Spalte verfügbar und werden in der Volltextsuche mitberücksichtigt. Soft-Delete mit Audit-Sicht macht Versehen ungefährlich.

Konzept & Abgrenzung

Notizen sind an die Dok.Nr. gebunden, nicht an den Pfad — d.h. Verschieben oder Umbenennen lässt die Notiz unangetastet. Während die Status-Notiz aus DMS-Status (einzeilig im Status-Editor) auf Workflow-Bemerkungen abzielt („Erledigt am…", „Weitergeleitet an…"), sind Doknr-Notizen für freien Text mit Historie gedacht: mehrere Einträge, jederzeit nachträglich erweiter- und editierbar, mit Zeitstempel pro Eintrag.

Datenstruktur

Zentrale Datei dokumentnotizen.json auf der NAS, Key = Doknr (z.B. Dok.Nr.004926). Pro Eintrag: id (n_<ts>_<hex>), ts (YYYY-MM-DD HH:MM), text, deleted (bool), edited (bool), edit_ts, bei Löschung zusätzlich deleted_ts. Schreiboperationen sind atomar (flock + truncate + rewrite). Max 2000 Zeichen pro Notiz.

Backend notizen_api.php

Fünf Aktionen: list (mit optional include_deleted=1 für Audit), add, edit, delete, counts (Bulk für mehrere Doknrs in einem Request, optional with_last=1 für letzte Notiz mit). Validierung: Doknr-Pattern [A-Za-z0-9_.-]+ (Path-Traversal blockiert), Text 1-2000 Zeichen. Eigenes Logfile notizen_api.log mit allen ADD/EDIT/DELETE-Aktionen für Audit-Zwecke.

📝-Action-Button im DMS-System

In der Datei-Tabelle erscheint zwischen ⚙ Status und 👁 Vorschau ein 📝-Button — aber nur bei Dateien mit extrahierbarer Dok.Nr. Wenn Notizen vorhanden sind, klebt rechts am Button eine kleine mintgrüne Pille mit der Anzahl. Hover zeigt Anzahl und Datum der letzten Notiz, Klick öffnet das Notiz-Modal. Funktioniert sowohl in der normalen Datei-Liste als auch in der Volltextsuche-Ergebnisliste.

Notiz-Modal

Mittiges Modal im DMS-Stil. Header: 📝-Icon + Doknr (mintgrün) + Dateiname als Subtitel. Eingabe unten mit Live-Counter (gelb ab 85%, rot bei Überlauf). Historie oben, neueste zuerst. Strg+Enter speichert direkt. Nach Erfolg: Eingabefeld leer, Cursor bleibt drin — sofort die nächste Notiz tippen. ESC oder Klick außerhalb schließt.

Bearbeiten, Löschen, Audit

Pro Notiz zwei Icons: ✎ Bearbeiten (inline-Edit mit Cancel/Save, setzt edited=true und Edit-Zeitstempel), 🗑 Löschen (Soft-Delete mit eigenem Confirm-Modal, kein Browser-confirm). Gelöschte Notizen sind per Default ausgeblendet. Toggle „Gelöschte zeigen" oben rechts blendet sie als ausgegrauten Eintrag mit roter gelöscht-Badge wieder ein — Audit-Sicht ohne Datenverlust.

Integration in DMS-Status

Beim Laden der Status-Liste werden Notiz-Counts im Bulk für alle bekannten Doknrs geholt (Chunks à 500). In der Live-Liste erscheint die 📝-Pille direkt nach dem ⚙-Status-Stift. Hover-Tooltip zeigt Datum + 80-Zeichen-Vorschau der letzten Notiz. Im aufgeklappten Detail-Bereich des Items steht zusätzlich eine Zeile „📝 Letzte Notiz: <ts> — <text>". Im Print-Report neue Spalte „📝 Notizen" zwischen Verantwortlich und Notiz/Sonstiges.

Volltextsuche mit Notiz-Treffer

Side-Car-Ansatz: Beim Page-Load wird zusätzlich zu fulltext_index.json auch dokumentnotizen.json geladen und ein clientseitiger Notiz-Index gebaut. Suchanfragen prüfen Doc-Text und Notiz-Text getrennt. Drei Badge-Varianten am Ergebnis: 📝 Treffer in Notiz (grün, wenn Suchbegriff nur in einer Notiz vorkommt) plus eingerückter Notiz-Snippet mit Highlight; 📝 N Notizen (grünes Outline) wenn Doc-Match und Doknr Notizen hat; 📝 N (grau) als kleiner Hinweis. Notizen sind so immer aktuell auffindbar — der nächtliche Volltext-Builder muss nicht warten.

Counter-Cache & Performance

Im DMS-System hält notizen-modal.js einen notizenCount-Cache mit 30 Sekunden TTL — Pillen rendern sofort ohne Roundtrip pro Datei. Nach Add/Edit/Delete wird der Cache automatisch invalidiert. notizenInvalidateCache() ohne Argument leert den Cache komplett (z.B. nach externem Schreibvorgang). DMS-Status nutzt einen eigenen Bulk-Cache und re-fresht automatisch nach Modal-Schließen via Polling alle 500ms (max. 10 Min).

Restore aus Papierkorb

Wird eine Datei in den Papierkorb verschoben und später wiederhergestellt, bleiben die Notizen erhalten — sie hängen an der Dok.Nr., nicht am Pfad. Auch nach Endgültig-Löschen einer Datei bleiben die Notizen technisch in dokumentnotizen.json stehen (ohne sie passt eine spätere Wiederherstellung mit gleicher Dok.Nr. weiterhin). Cleanup verwaister Notiz-Einträge ist nicht automatisch — bewusst, weil Datei-Löschung und Doknr-Recycling getrennte Themen sind.

Hinweis: Aktuell läuft der Volltext-Treffer in Notizen über einen Side-Car-Index im Browser — der nächtliche Volltext-Builder bleibt unangetastet. Geplant ist optional eine Builder-Erweiterung, sodass Notiz-Texte direkt in fulltext_index.json mit aufgenommen werden (Performance-Optimierung bei sehr vielen Notizen). Live-Update zwischen mehreren offenen Tabs ist nicht implementiert — Notizen erscheinen erst nach Reload oder nach Modal-Schließen (Counter-Cache leert sich automatisch).
↑ Nach oben
📲
PWA-Installation (Mobile als App)
DMS Mobile als „echte" App auf dem Smartphone

Die mobile DMS-Seite ist als Progressive Web App (PWA) ausgelegt — das heißt, sie kann auf iPhone und Android wie eine native App auf den Homescreen gelegt werden. Eigenes Icon, Vollbild-Modus ohne Browser-Leiste, Push-Benachrichtigungen für fällige Wiedervorlagen.

📥 Eigenes Icon

Das DMS-Logo (Posteingang-Symbol mit grünem KI-Stern) erscheint auf dem Homescreen wie jede andere App. Kein Safari-Symbol, keine URL sichtbar.

🖥️ Vollbild-Modus

Beim Tap aufs Icon startet die App im Vollbild — keine Adressleiste, keine Browser-Tabs. Wirkt und fühlt sich wie eine native App an.

🔔 Push-Benachrichtigungen

Aktiv bei fälligen Wiedervorlagen. Der Server schickt morgens (8:00) und nachmittags (14:00) eine Mitteilung — auch wenn die App geschlossen ist. Tap öffnet direkt das richtige Dokument.

📱 Eigene Sandbox

Die installierte PWA hat eigenen Storage, eigene Cookies, eigenen Service Worker — getrennt vom normalen Safari. Push funktioniert auf iOS nur in der installierten PWA, nicht im Safari.

Installation auf dem iPhone:
  1. Safari öffnen und beeringdokuki.duckdns.org/posteingang/DMS-Client-Start.html aufrufen
  2. Unten auf das Teilen-Icon tippen (Quadrat mit Pfeil nach oben)
  3. Im Sheet runterscrollen → „Zum Home-Bildschirm"
  4. Vorschau prüfen: App-Name „DMS Mobile", grünes Postfach-Icon
  5. Oben rechts „Hinzufügen" tippen
  6. App vom Homescreen starten (nicht aus Safari heraus, sonst keine Push-Funktion)
Push-Benachrichtigungen aktivieren: In der installierten PWA in der Topbar (Status-Page oder Explorer) auf das 🔔-Symbol tippen → iOS fragt einmalig nach Erlaubnis → Bestätigen. Ab dann kommen die täglichen Wiedervorlage-Pushes automatisch.
Tipp bei Updates: Wenn das Icon, der App-Name oder das Verhalten sich nach einer Server-Änderung nicht aktualisieren, hilft auf iOS oft nur: PWA vom Homescreen löschen (lange drücken → „App entfernen") und neu installieren. iOS cached Manifest und Icons aggressiv.

Für eine ausführliche technische Erklärung des PWA-Konzepts (Manifest, Service Worker, Push-Mechanik, Plattform-Kompatibilität) gibt's das PDF 📱 PWA-Anleitung oben in der Projektdokumente-Leiste.

↑ Nach oben