Files
nexarch/dms-kanban/board.csv
T
patrickandClaude Sonnet 5 d4416bc362 dms-kanban: SEC-09 geprueft - kein CMIS-Bypass, Status Fertig
Ausgangsmessung durchgefuehrt statt nur Code gelesen: bestehender Test
dms/internal/cmis/cmis_test.go::TestPermissionParityWithREST auf Host 204
gegen echte migrierte Testdatenbank ausgefuehrt (TEST_TENANT_DSN), PASS.
Bestaetigt per echtem Testlauf: fremder Nutzer mit gueltigem Token liest
fremdes Dokument ueber CMIS -> 403; gefaelschter caller-Parameter neben
echtem fremden Token -> weiterhin 403 (Token-Identitaet gewinnt). Ursache:
cmisBackend.Set(routes) in cmd/app/main.go:109 verdrahtet CMIS auf die
komplette Middleware-Kette, interner Re-Dispatch prueft CanAccessDocument/
CanAccessFolder erneut. Kein Code-Fix noetig, Ticket dokumentiert die
negative Pruefung.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-19 03:04:37 +02:00

65 KiB

1CodeTitelEpicRolleKomplexitaetAufwand_PTWelleStatusTechnikBeschreibungHaengt_ab_vonSchaltet_freiAkzeptanzkriterienPruefungen
2FDN-01Repository & Projektgerüst⚙️ FundamentDevOpsEinfach21FertigMonorepo, Go, Next.js/TypeScript, golangci-lint, PrettierRepository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.FDN-02 FDN-03 FDN-07 FDN-08 FDN-09 SRC-01Repo lässt sich mit einem Befehl installieren und starten Lint- und Format-Checks laufen lokal durch Branch- und Commit-Konvention dokumentiertFrischer Clone baut ohne manuelle Nacharbeit Lint-Fehler brechen den Build ab README-Setupanleitung von zweiter Person nachvollzogen
3FDN-02Datenmodell & Migrationen⚙️ FundamentBackendMittel32FertigPostgreSQL, pgx/v5, SQL-Migrationsdateien (kein ORM)Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.FDN-01DOC-01 DOC-09 FDN-04 MET-01 MET-02 QA-02 VER-01 VER-05Alle Kern-Entitäten mit Beziehungen und Indizes vorhanden Migration vorwärts und rückwärts ausführbar Seed-Datensatz für Entwicklung vorhandenMigration auf leerer DB und auf bestehender DB getestet Rollback stellt Vorzustand wieder her Fremdschlüssel-Constraints durch Negativtests belegt
4FDN-03Objekt-Storage-Abstraktion⚙️ FundamentBackendMittel32FertigS3-kompatibel, Presigned URLsStorage-Adapter mit einheitlicher Schnittstelle für Ablegen, Lesen, Löschen und signierte URLs. Lokaler Treiber für Entwicklung, S3 für Produktion.FDN-01DOC-01 QA-02 FDN-10Ein Interface, zwei austauschbare Treiber Signierte URLs mit konfigurierbarer Gültigkeit Pfadschema innerhalb des Mandanten-Buckets für Dokument/Revision festgelegt (Bucket-Trennung selbst ist Sache von Core TEN-01) Objektgröße wird bei jedem Schreib-/Löschvorgang an den zentralen Speicherverbrauch-Zähler (Core LIC-05) gemeldetRound-Trip-Test Upload/Download je Treiber Abgelaufene signierte URL wird abgewiesen Verhalten bei fehlendem Objekt liefert klaren Fehler Melde-Aufruf an Core LIC-05 bei Schreib- und Löschvorgang nachweislich ausgelöst, mit korrekter Größenangabe
5FDN-04Job-Queue & Worker-Runtime⚙️ FundamentBackendMittel33FertigPostgres-Jobqueue (processing_jobs, FOR UPDATE SKIP LOCKED), In-Prozess-Worker-Goroutinen, kein Redis/AMQPAsynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.FDN-02DOC-04 DOC-06 DOC-08 INT-03 QA-02 SRC-02 SRC-05 FDN-11Jobs werden zuverlässig eingereiht und verarbeitet Fehlgeschlagene Jobs landen nach n Versuchen in der DLQ Job-Status ist abfragbarAbsturz eines Workers führt zu erneuter Zustellung Idempotenz bei Doppelzustellung nachgewiesen DLQ-Eintrag manuell wiederholbar
6FDN-07CI-Pipeline & Testharness⚙️ FundamentDevOpsEinfach22FertigCI-Runner, Unit-/E2E-TestrunnerAutomatisierte Pipeline für Lint, Typprüfung, Unit- und E2E-Tests sowie Build-Artefakt. Testdatenbank wird pro Lauf frisch aufgesetzt.FDN-01QA-01 QA-02Pipeline läuft bei jedem Push Roter Test blockiert den Merge Testabdeckung wird ausgewiesen CI-Pipeline führt Dependency-/Supply-Chain-Scanning aus (govulncheck für Go-Module, npm audit für JS/TS-Pakete), Build schlägt bei kritischen bekannten Schwachstellen fehl. Sicherheitsrelevanter Code (Auth, Tenant-Scoping, Verschlüsselung, Berechtigungsprüfung) hat verpflichtende automatisierte Tests als Merge-Gate — ein Merge ohne diese Tests ist technisch blockiert, nicht nur Konvention.Absichtlich fehlschlagender Test bricht Pipeline ab Pipeline-Laufzeit unter vereinbartem Grenzwert Artefakt ist reproduzierbar erzeugbar Absichtlich eingeführte bekannte Schwachstelle in einer Testabhängigkeit lässt den Build fehlschlagen. Merge-Versuch eines sicherheitsrelevanten Codepfads ohne Test wird von der Pipeline blockiert.
7FDN-08Logging, Metriken & Fehler-Tracking⚙️ FundamentDevOpsEinfach22FertigStrukturierte Logs, Metrics-EndpointStrukturiertes Logging mit Korrelations-ID, technische Metriken und zentrale Fehlererfassung inklusive Alarmierung.FDN-01QA-02Jede Anfrage besitzt eine Korrelations-ID über alle Schichten Metriken für Latenz, Fehlerrate und Queue-Länge vorhanden Unbehandelte Fehler werden zentral gemeldetProvozierter Fehler erscheint innerhalb einer Minute im Tracking Logs enthalten keine Passwörter oder Tokens Alarm-Schwelle einmal ausgelöst und quittiert
8DOC-01Upload-API & Chunk-Handling🗂️ DokumentenkernBackendKomplex43Fertigtus.io / Multipart-UploadServerseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.FDN-02 FDN-03 FDN-09DOC-02 DOC-03 DOC-04 DOC-07 DOC-14 DOC-15 INT-01 INT-03 INT-06 INT-08 SRC-02 SRC-05 VER-01 INT-11 INT-12 INT-13 DOC-17Fortsetzbarer Upload nach Verbindungsabbruch Unerlaubte Dateitypen werden abgewiesen Dokument und Revision werden transaktional angelegt SHA-256 jeder Revision wird auf Klartext berechnet (vor FDN-09-Verschlüsselung) und transaktional mit der Revision in file_revisions.checksum_sha256 persistiert – Voraussetzung für Duplikaterkennung (DOC-02) und spätere Integritätsprüfung (Archive BAK-08)Upload von 1 GB Datei erfolgreich Abbruch bei 50 % und Fortsetzung ergibt identische Prüfsumme Parallel-Upload von 20 Dateien ohne Datenverlust Nach Upload ist file_revisions.checksum_sha256 befüllt und entspricht der SHA-256 des hochgeladenen Klartexts
9DOC-02Dublettenerkennung🗂️ DokumentenkernBackendEinfach24FertigSHA-256, Unique-IndexPrüfsumme jeder Datei berechnen, speichern und bei Upload gegen den Bestand prüfen. Nutzer entscheidet über Verwerfen oder bewusstes Duplikat.DOC-01SRC-02 SRC-05Prüfsumme wird bei jedem Upload persistiert Treffer wird dem Nutzer mit Verweis auf das Original gemeldet Bewusstes Duplikat ist möglich und wird markiertIdentische Datei zweimal hochgeladen erzeugt Warnung Datei mit einem geänderten Byte gilt nicht als Duplikat Prüfsummenberechnung bei Großdatei bleibt im Zeitbudget
10DOC-03Drag-and-Drop-Upload-Oberfläche🗂️ DokumentenkernFrontendMittel34FertigDropzone, FortschrittsanzeigeUpload-Oberfläche mit Ablagebereich, Mehrfachauswahl, Fortschritt je Datei, Abbrechen und verständlichen Fehlermeldungen.DOC-01QA-03Mehrere Dateien gleichzeitig per Drag-and-Drop Fortschritt und Status je Datei sichtbar Fehlgeschlagene Datei einzeln wiederholbarUpload per Tastatur und Dateidialog bedienbar Verhalten bei Netzabbruch im Browser geprüft Mobile Ansicht bleibt bedienbar
11DOC-04Vorschau- & Thumbnail-Pipeline🗂️ DokumentenkernBackendKomplex54FertigRenderer-Worker, BildableitungenAsynchrone Erzeugung von Seiten-Vorschauen und Thumbnails nach dem Upload, mit Cache und Wiederaufbau bei neuer Revision.DOC-01 FDN-04DOC-05 QA-10Thumbnail steht nach definierter Zeit bereit Vorschau wird gecacht und bei neuer Revision erneuert Fehlerhafte Datei blockiert die Pipeline nichtBeschädigte PDF-Datei führt zu Fehlerstatus statt Absturz Durchsatztest mit 500 Dokumenten Cache-Invalidierung bei neuer Revision belegt
12DOC-05PDF-Viewer-Komponente🗂️ DokumentenkernFrontendKomplex45FertigPDF.js im Web-WorkerInline-Betrachter mit Seitennavigation, Zoom, Suche im Dokument und Textauswahl – ohne Download-Zwang.DOC-04DOC-13 QA-03 VER-04PDF wird ohne Download angezeigt Zoom, Blättern und Textsuche funktionieren Große Dokumente werden seitenweise nachgeladen300-seitiges PDF öffnet im Zeitbudget Viewer per Tastatur bedienbar Speicherverbrauch im Browser bleibt stabil
13DOC-06Office-zu-PDF-Konverter🗂️ DokumentenkernBackendKomplex44FertigHeadless-Konverter im WorkerServerseitige Konvertierung von Text-, Tabellen- und Präsentationsformaten in PDF als Vorschau- und Archivderivat.FDN-04QA-03 VER-07Gängige Office-Formate werden konvertiert Konvertierung läuft isoliert mit Zeitlimit Ergebnis wird als Derivat der Revision abgelegtLayouttreue an Referenzdokumenten geprüft Zeitlimit bei Endlosdokument greift Konverter-Absturz beeinträchtigt andere Jobs nicht
14DOC-07Download & signierte URLs🗂️ DokumentenkernBackendEinfach24FertigPresigned URLsDownload von Original und Derivaten über kurzlebige signierte URLs, inklusive korrektem Dateinamen und Berechtigungsprüfung.DOC-01DOC-08Download liefert Originaldatei unverändert URL läuft nach kurzer Frist ab Ohne Leseberechtigung kein DownloadPrüfsumme vor und nach Download identisch Weitergegebene abgelaufene URL wird abgewiesen Sonderzeichen im Dateinamen korrekt übertragen
15DOC-08Massenexport als ZIP🗂️ DokumentenkernBackendMittel35FertigZIP-Streaming, Export-JobAuswahl mehrerer Dokumente als Hintergrund-Job zu einem Archiv bündeln, inklusive optionaler Metadaten-Datei und Download-Benachrichtigung.DOC-07 FDN-04QA-03 DOC-18Export läuft als Job und blockiert die Oberfläche nicht Archiv enthält Dokumente und Metadaten-Beilage Nur berechtigte Dokumente landen im ArchivExport von 1000 Dokumenten ohne Speicherüberlauf Archiv in gängigen Entpackern lesbar Berechtigungsfilter durch Negativtest belegt
16DOC-09Ordner- & Kabinettmodell🗂️ DokumentenkernBackendMittel33FertigBaumstruktur, Materialized PathHierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen.FDN-02DOC-10 DOC-11 DOC-14Beliebig tiefe Hierarchie abbildbar Verschieben aktualisiert den gesamten Teilbaum Teilbaum-Abfrage bleibt performantZyklus beim Verschieben wird verhindert Abfrage bei 10.000 Ordnern im Zeitbudget Umbenennen bricht keine Verweise
17DOC-10Ordner-Navigation & Dokumentenliste🗂️ DokumentenkernFrontendMittel34FertigBaum-Navigation, virtualisierte ListeNavigationsbaum, Brotkrumenpfad und virtualisierte Dokumentenliste mit Sortierung, Spaltenwahl und Mehrfachauswahl.DOC-09QA-03Baum und Liste bleiben synchron Liste bleibt bei vielen Einträgen flüssig Mehrfachauswahl mit Umschalt- und Strg-TasteListe mit 10.000 Zeilen scrollt ruckelfrei Navigation vollständig per Tastatur Zustand bleibt beim Zurücknavigieren erhalten
18DOC-11Soft-Delete & Papierkorb-Logik🗂️ DokumentenkernBackendEinfach24FertigSoft-Delete, Aufräum-JobLöschen setzt einen Papierkorb-Status statt physischer Entfernung. Endgültige Bereinigung erfolgt nach konfigurierbarer Frist.DOC-09DOC-12Gelöschte Objekte verschwinden aus allen normalen Ansichten Wiederherstellung stellt Ablageort und Metadaten wieder her Endgültige Löschung entfernt auch die DateiobjekteGelöschtes Dokument taucht in Suche und Liste nicht mehr auf Wiederherstellung nach Ordnerlöschung getestet Aufräum-Job löscht nur abgelaufene Einträge
19DOC-12Papierkorb-Oberfläche🗂️ DokumentenkernFrontendEinfach25FertigListenansicht, BestätigungsdialogAnsicht des Papierkorbs mit Restlaufzeit, Einzel- und Massenwiederherstellung sowie bestätigter endgültiger Löschung.DOC-11QA-03Restlaufzeit je Eintrag sichtbar Wiederherstellung einzeln und in Auswahl möglich Endgültiges Löschen erfordert ausdrückliche BestätigungVersehentliches Löschen ohne Bestätigung nicht möglich Massenwiederherstellung mit 100 Objekten geprüft Leerer Papierkorb zeigt verständlichen Hinweis
20SRC-01Suchindex-Infrastruktur🔍 Suche & OCRDevOpsMittel32FertigManticore Search (BM25)Suchdienst bereitstellen, Index-Schema mit deutscher Sprachbehandlung definieren und Betriebsparameter festlegen.FDN-01SRC-02Suchdienst ist reproduzierbar startbar Index-Schema mit Feldern und Gewichtung dokumentiert Deutsche Stemming- und Stoppwortbehandlung aktivNeuaufbau des Index aus dem Bestand möglich Umlaut- und Kompositasuche liefert Treffer Neustart des Dienstes ohne Datenverlust
21SRC-02Indexierungs-Worker & Synchronisierung🔍 Suche & OCRBackendKomplex45FertigQueue-Worker, Bulk-IndexingÄnderungen an Dokumenten, Metadaten und OCR-Texten laufend in den Suchindex übertragen, inklusive Voll-Reindexierung.SRC-01 DOC-01 FDN-04 DOC-02SRC-03Neues Dokument ist zeitnah auffindbar Änderung und Löschung werden im Index nachgezogen Voll-Reindexierung ohne Ausfall möglichKonsistenzabgleich Datenbank gegen Index ergibt keine Abweichung Indexierung von 10.000 Dokumenten im Zeitbudget Ausfall des Suchdienstes führt zu Nachholung statt Datenverlust
22SRC-03Such-API mit Ranking🔍 Suche & OCRBackendMittel36FertigSuchabfrage, Relevanz-TuningSuchschnittstelle mit Paginierung, Sortierung, Treffer-Ausschnitten und Berücksichtigung der Leseberechtigung.SRC-02QA-10 SRC-04 SRC-08Ergebnisse enthalten Textausschnitte mit Fundstellen Nur berechtigte Dokumente erscheinen Antwortzeit unter vereinbartem GrenzwertReferenz-Suchanfragen liefern erwartete Reihenfolge Berechtigungsfilter durch Negativtest belegt Lasttest mit gleichzeitigen Suchanfragen bestanden
23SRC-04Such-Oberfläche mit Hervorhebung🔍 Suche & OCRFrontendMittel37FertigSuchfeld, ErgebnislisteSuchfeld mit Vorschlägen, Ergebnisliste mit hervorgehobenen Fundstellen und Sprung in die Dokumentvorschau.SRC-03QA-04 SRC-09Fundstellen sind im Ergebnis hervorgehoben Kein Ergebnis liefert hilfreiche Alternativvorschläge Suchzustand ist per URL teilbarSuche vollständig per Tastatur bedienbar Verhalten bei sehr langem Suchbegriff geprüft Ergebnisliste auf Mobilgerät nutzbar
24SRC-05OCR-Worker🔍 Suche & OCRBackendKomplex55FertigTesseract, BildvorverarbeitungTexterkennung für Scans und Bilder inklusive Entzerrung, Rauschunterdrückung und Speicherung des Volltexts je Seite.FDN-04 DOC-01 DOC-02INT-06 MET-05 SRC-06 SRC-07Erkannter Text wird seitenweise gespeichert Bereits durchsuchbare PDFs werden übersprungen Verarbeitung skaliert über mehrere WorkerErkennungsrate an Referenz-Scanset gemessen und dokumentiert Schiefer Scan wird korrekt entzerrt Sehr großes Dokument läuft nicht in Zeitüberschreitung
25SRC-06PDF/A-Erzeugung mit Textebene🔍 Suche & OCRBackendMittel36FertigPDF/A-Konverter, TextlayerArchivfähiges PDF/A mit unsichtbarer Textebene aus der Texterkennung als zusätzliches Derivat erzeugen.SRC-05QA-04Erzeugtes PDF ist PDF/A-konform Text ist im Dokument markier- und durchsuchbar Original bleibt unverändert erhaltenKonformitätsprüfung mit Validierungswerkzeug bestanden Textposition deckt sich mit dem Bild Dateigröße bleibt im vereinbarten Rahmen
26SRC-07Spracherkennung & OCR-Qualitätsbewertung🔍 Suche & OCRBackendEinfach26FertigSpracherkennung, KonfidenzwerteDokumentsprache automatisch bestimmen, passendes Sprachmodell wählen und Konfidenzwerte für eine Nachbearbeitungsliste erfassen.SRC-05QA-04Sprache wird erkannt und am Dokument gespeichert Konfidenzwert je Seite verfügbar Dokumente unter Schwellwert erscheinen in einer PrüflisteSpracherkennung an gemischtsprachigem Set geprüft Schlechter Scan landet zuverlässig in der Prüfliste Schwellwert ist ohne Neuveröffentlichung konfigurierbar
27SRC-08Facetten- & Filter-API🔍 Suche & OCRBackendMittel37FertigFacettierung, FilterausdrückeKombinierbare Filter nach Typ, Tag, Datum, Ersteller und benutzerdefinierten Feldern samt Trefferzahlen je Facette.SRC-03 MET-02SRC-09 SRC-10Mehrere Filter sind gleichzeitig kombinierbar Facetten liefern korrekte Trefferzahlen Datums- und Wertebereiche werden unterstütztTrefferzahlen gegen Datenbankabfrage abgeglichen Filter auf leerem Ergebnis verhält sich stabil Antwortzeit mit fünf aktiven Filtern gemessen
28SRC-09Filter-Panel in der Suche🔍 Suche & OCRFrontendMittel38FertigFacetten-UI, Filter-ChipsSeitliches Filterpanel mit aktiven Filtern als entfernbare Chips und Zurücksetzen-Funktion.SRC-08 SRC-04QA-04Aktive Filter sind jederzeit sichtbar und einzeln entfernbar Trefferzahl aktualisiert sich unmittelbar Filterzustand steht in der URLGeteilte URL stellt identischen Filterzustand her Panel auf schmalem Bildschirm bedienbar Zurücksetzen entfernt wirklich alle Filter
29SRC-10Gespeicherte Suchanfragen🔍 Suche & OCRFullstackEinfach28FertigPersistierte AbfragenSuchen benennen, speichern, erneut ausführen und optional mit dem Team teilen.SRC-08QA-04Suche lässt sich benennen und wiederherstellen Geteilte Suche ist für Berechtigte sichtbar Ergebnis wird beim Aufruf frisch ermitteltGespeicherte Suche liefert nach Datenänderung aktuelle Treffer Geteilte Suche zeigt jedem nur erlaubte Dokumente Löschen einer Suche beeinträchtigt andere Nutzer nicht
30MET-01Tag-Modell & Tag-API🏷️ MetadatenBackendEinfach23FertigTag-Entität, ZuordnungstabelleTags mit Farbe und optionaler Hierarchie, Zuordnung zu Dokumenten sowie Zusammenführen und Umbenennen.FDN-02DOC-15 MET-03 MET-05Tags sind anlegbar, umbenennbar und zusammenführbar Mehrfachzuordnung je Dokument möglich Löschen eines Tags entfernt nur die ZuordnungZusammenführen erhält alle Zuordnungen Doppelte Tag-Namen werden verhindert Massenzuweisung an 500 Dokumente geprüft
31MET-02Benutzerdefinierte Metadatenfelder🏷️ MetadatenBackendKomplex43FertigFeldschema, ValidierungFrei definierbare Felder mit Datentyp, Pflichtkennzeichen, Standardwert und Validierungsregeln.FDN-02MET-03 MET-04 SRC-08Feldtypen Text, Zahl, Datum, Auswahl und Ja/Nein verfügbar Validierung greift beim Speichern Felddefinition ist versioniert änderbarUngültiger Wert wird mit klarer Meldung abgewiesen Typänderung eines Feldes mit Bestandsdaten getestet Pflichtfeld blockiert unvollständiges Speichern
32MET-03Metadaten- & Tag-Oberfläche🏷️ MetadatenFrontendMittel34FertigDynamische FormulareBearbeitungsbereich am Dokument mit dynamisch erzeugtem Formular, Tag-Eingabe mit Autovervollständigung und Massenbearbeitung.MET-01 MET-02QA-05Formular passt sich der Felddefinition automatisch an Tag-Eingabe schlägt bestehende Tags vor Massenbearbeitung für ausgewählte Dokumente möglichUngespeicherte Änderungen lösen Warnung aus Formular per Tastatur vollständig ausfüllbar Massenbearbeitung an 200 Dokumenten geprüft
33MET-04Dokumententypen & Vorlagen🏷️ MetadatenBackendMittel34FertigTypdefinition, FeldbindungDokumententypen wie Rechnung oder Vertrag mit fest zugeordneten Pflichtfeldern, Standard-Tags und Aufbewahrungsvorgabe.MET-02QA-05Typ bündelt Felder, Tags und Aufbewahrungsvorgabe Typwechsel überführt vorhandene Werte Typ ist an Ordner vorbelegbarTypwechsel mit Datenverlustprüfung getestet Pflichtfelder des Typs werden erzwungen Vorbelegung im Ordner greift beim Upload
34MET-05Regelbasierte Auto-Verschlagwortung🏷️ MetadatenBackendMittel36FertigRegelwerk, MustererkennungRegeln auf Basis von Textmustern, Absender oder Dateiname vergeben automatisch Tags, Typ und Ablageort.MET-01 SRC-05INT-04 QA-05Regeln sind ohne Eingriff in den Code pflegbar Reihenfolge und Priorität der Regeln sind steuerbar Automatische Zuweisung ist als solche erkennbarRegelwerk an Testkorpus mit erwarteter Trefferquote geprüft Widersprüchliche Regeln führen zu definiertem Ergebnis Regeländerung wirkt ohne Neustart
35VER-01Versionsmodell & Check-in/Check-out🔄 Versionierung & AuditBackendKomplex44FertigRevisionen, SperrenJede Änderung erzeugt eine neue Revision. Ausleihen sperrt das Dokument für andere, Einchecken gibt es mit Kommentar frei.DOC-01 FDN-02VER-02 VER-03 VER-07Alle Revisionen bleiben abrufbar Sperre verhindert konkurrierende Änderungen Sperre ist durch Administratoren aufhebbarZwei gleichzeitige Ausleihversuche – nur einer gewinnt Verwaiste Sperre wird nach Frist automatisch gelöst Alte Revision ist unverändert abrufbar
36VER-02Versionsansicht & Wiederherstellung🔄 Versionierung & AuditFrontendMittel35FertigVersionsliste, WiederherstellenListe aller Revisionen mit Autor, Zeitpunkt und Kommentar sowie Wiederherstellung einer früheren Fassung als neue Revision.VER-01QA-08Revisionen chronologisch mit Metadaten sichtbar Wiederherstellung erzeugt eine neue Revision statt Überschreiben Jede Revision ist einzeln herunterladbarWiederherstellung verändert die Historie nicht Ansicht bei 100 Revisionen bleibt übersichtlich Berechtigung wird je Revision geprüft
37VER-03Änderungshistorie & Diff-Berechnung🔄 Versionierung & AuditBackendMittel35FertigTextvergleich, Metadaten-DiffUnterschiede zwischen zwei Revisionen ermitteln – sowohl im Volltext als auch in Metadaten und Tags.VER-01VER-04Textunterschiede werden zeilen- oder absatzweise geliefert Metadatenänderungen werden als Vorher-Nachher ausgegeben Berechnung ist auch für große Dokumente möglichDiff an Referenzpaaren gegen erwartetes Ergebnis geprüft Vergleich zweier identischer Revisionen liefert leeres Ergebnis Laufzeit bei 200-seitigem Dokument gemessen
38VER-04Diff-Ansicht🔄 Versionierung & AuditFrontendMittel36FertigGegenüberstellung, FarbmarkierungZwei Revisionen nebeneinander mit farblicher Markierung von Hinzufügungen, Löschungen und Metadatenänderungen.VER-03 DOC-05QA-08Revisionen sind frei zum Vergleich wählbar Änderungen sind farblich und mit Symbol gekennzeichnet Sprung zur nächsten Änderung möglichFarbmarkierung ist auch ohne Farbwahrnehmung unterscheidbar Ansicht funktioniert auf schmalem Bildschirm Sehr viele Änderungen bremsen die Ansicht nicht aus
39VER-05Revisionssicherer Audit-Trail🔄 Versionierung & AuditBackendKomplex43FertigAppend-only-Protokoll, Hash-KetteUnveränderliches Protokoll aller sicherheits- und geschäftsrelevanten Ereignisse mit Verkettung zum Nachweis der Unversehrtheit.FDN-02VER-06 VER-08Einträge sind ausschließlich anfügbar Jeder Eintrag enthält Akteur, Zeit, Objekt und Aktion Verkettung erlaubt IntegritätsprüfungManipulationsversuch wird durch Integritätsprüfung erkannt Vollständigkeit gegen Referenzoperationen abgeglichen Protokollschreiben verlangsamt Kernoperationen nicht spürbar
40VER-06Audit-Log-Ansicht & Export🔄 Versionierung & AuditFrontendEinfach24FertigFilterbare Tabelle, CSV-ExportDurchsuchbare Protokollansicht mit Filtern nach Zeitraum, Akteur, Objekt und Aktion sowie Export für Prüfer.VER-05QA-08Filter nach Zeitraum, Akteur und Aktion vorhanden Export enthält exakt die gefilterten Einträge Zugriff nur für berechtigte RollenExport mit 100.000 Einträgen läuft ohne Abbruch Nicht berechtigter Nutzer erhält keinen Zugriff Exportdatei ist in Tabellenkalkulation korrekt lesbar
41VER-07Digitale Signatur🔄 Versionierung & AuditBackendKomplex55FertigPAdES, Zertifikate, ZeitstempelDokumente digital signieren und vorhandene Signaturen prüfen, inklusive qualifiziertem Zeitstempel.VER-01 DOC-06QA-08Signatur wird eingebettet und ist extern prüfbar Prüfergebnis wird am Dokument angezeigt Zeitstempel stammt von einer vertrauenswürdigen QuelleSignatur mit externem Prüfwerkzeug validiert Nachträgliche Änderung invalidiert die Signatur nachweislich Abgelaufenes Zertifikat wird als solches erkannt
42INT-01REST-API v1 & Schnittstellenbeschreibung🔌 Integration & APIBackendKomplex44FertigREST, OpenAPIDokument-spezifische API-Endpunkte (Dokument abrufen/anlegen/durchsuchen usw.) auf dem zentralen Core-REST-Grundgerüst definieren und dokumentieren – keine eigene Router-/Versionierungs-Infrastruktur, die liefert Core API-01.DOC-01INT-09 QA-10Alle dokument-eigenen Endpunkte sind in der Beschreibung dokumentiert Einheitliches Fehlerformat über alle Endpunkte (geerbt vom Core-REST-Grundgerüst) Endpunkte laufen auf der zentralen, versionierten Core-API auf, keine eigene VersionierungVertragstests gegen die Beschreibung laufen in der Pipeline Berechtigungen greifen identisch wie in der Oberfläche Beispielaufrufe aus der Dokumentation funktionieren
43INT-03E-Mail-Abruf über IMAP🔌 Integration & APIBackendKomplex44FertigIMAP-Client, Job-ZeitplanÜberwachte Postfächer regelmäßig abrufen, Nachrichten und Anhänge importieren und verarbeitete Nachrichten markieren.FDN-04 DOC-01INT-04Mehrere Postfächer parallel überwachbar Nachricht und Anhänge werden als Dokumente abgelegt Verarbeitete Nachrichten werden nicht erneut importiertVerbindungsabbruch führt zu Wiederholung ohne Duplikate Nachricht mit 20 Anhängen korrekt importiert Zugangsdaten liegen ausschließlich verschlüsselt vor
44INT-04E-Mail-Regeln & Anhangverarbeitung🔌 Integration & APIBackendMittel37FertigRegelwerk, AnhangfilterRegeln nach Absender, Betreff oder Anhangtyp steuern Ablageort, Typ und Verschlagwortung importierter Nachrichten.INT-03 MET-05QA-09Regeln greifen auf Absender, Betreff und Anhangtyp zu Signaturbilder und Werbeanhänge sind ausfilterbar Nachricht bleibt als Kontext am Dokument erhaltenRegelwerk an Testpostfach mit erwarteter Zuordnung geprüft Nachricht ohne passende Regel landet im Klärungskorb Filter verwirft keine relevanten Anhänge
45INT-06Scanner-Anbindung über Hot-Folder🔌 Integration & APIBackendKomplex46FertigÜberwachter Ordner, TrennseitenÜberwachtes Verzeichnis für Netzwerkscanner mit Stapeltrennung, automatischer Texterkennung und Ablage.DOC-01 SRC-05INT-10 QA-09 INT-14Neue Dateien werden automatisch übernommen Stapel werden anhand von Trennseiten aufgeteilt Fehlerhafte Dateien landen in einem FehlerordnerDatei wird erst nach vollständigem Schreiben verarbeitet Stapeltrennung an Referenzstapel geprüft Doppelte Einlieferung erzeugt kein Duplikat
46UX-01Responsive Layout & mobile Navigation📱 UX & ZugänglichkeitFrontendMittel31FertigBreakpoints, mobile MusterAlle Kernansichten für kleine Bildschirme optimieren, mit ausklappbarer Navigation und berührungsfreundlichen Zielen.UX-05Kernabläufe sind auf dem Telefon vollständig durchführbar Keine horizontale Scrollleiste bei 360 Pixel Breite Bedienelemente sind ausreichend großTest auf drei realen Geräteklassen Upload und Suche auf Mobilgerät durchgeführt Querformat geprüft
47UX-02Dunkles Erscheinungsbild & Theming📱 UX & ZugänglichkeitFrontendEinfach21FertigTheme-Tokens, SystempräferenzUmschaltbares helles und dunkles Erscheinungsbild mit Speicherung der Wahl und Berücksichtigung der Systemeinstellung.UX-05Umschaltung wirkt ohne Neuladen Wahl bleibt über Sitzungen erhalten Systemeinstellung wird als Voreinstellung übernommenKontrastprüfung in beiden Varianten bestanden Kein Aufblitzen des falschen Erscheinungsbilds beim Laden Diagramme und Vorschauen bleiben lesbar
48UX-03Mehrsprachigkeits-Infrastruktur📱 UX & ZugänglichkeitFrontendMittel31Fertigi18n-Bibliothek, SprachdateienAlle Texte auslagern, Sprachumschaltung sowie lokale Formate für Datum, Zahl und Währung bereitstellen.UX-04Keine fest verdrahteten Texte mehr in Komponenten Sprachwechsel wirkt ohne Neuladen Datums- und Zahlenformate folgen der SpracheAutomatische Prüfung findet keine unübersetzten Texte Fehlender Schlüssel führt zu sichtbarem Hinweis statt leerem Feld Serverseitig gerenderte Seite zeigt die richtige Sprache
49UX-04Übersetzungen Deutsch und Englisch📱 UX & ZugänglichkeitFrontendEinfach22FertigSprachdateien, TerminologielisteVollständige Übersetzung der Oberfläche in beide Sprachen inklusive abgestimmter Fachbegriffe.UX-03QA-11Beide Sprachdateien sind vollständig Fachbegriffe folgen einer abgestimmten Liste Fehlermeldungen sind ebenfalls übersetztAbdeckungsprüfung beider Sprachdateien bei 100 Prozent Sichtprüfung auf abgeschnittene Texte in beiden Sprachen Fachliche Gegenlesung dokumentiert
50UX-05Barrierefreiheit nach WCAG 2.1 AA📱 UX & ZugänglichkeitFrontendKomplex42FertigARIA, FokussteuerungSemantik, Fokusführung, Tastaturbedienung, Beschriftungen und Kontraste über alle Ansichten hinweg herstellen.UX-01 UX-02QA-11Alle Abläufe ohne Maus bedienbar Sichtbare Fokusmarkierung überall vorhanden Formularfelder besitzen zugeordnete BeschriftungenAutomatisierte Prüfung meldet keine kritischen Verstöße Vollständiger Durchlauf mit Bildschirmleser dokumentiert Fokusfalle in Dialogen geprüft
51QA-01Teststrategie & Testdatenbestand✅ Prüfungen & QualitätssicherungQAEinfach23FertigTeststrategie, anonymisierte TestdatenFestlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.FDN-07QA-03 QA-04 QA-05 QA-07 QA-10Testpyramide und Abdeckungsziele sind schriftlich festgelegt Referenzkorpus mit Scans, PDFs und Office-Dateien liegt vor Testdaten enthalten keine echten Personendaten Pflichttests für sicherheitsrelevanten Code (Tenant-Scoping, Zugriffsprüfung, Auth-nahe Logik) sind als verbindliches Merge-Gate verankert – kein Merge auf solchen Code ohne Test, analog Core QA-01Testdatenbestand ist per Befehl reproduzierbar Referenzkorpus deckt alle unterstützten Formate ab Strategie im Team abgenommen
52QA-02Prüfgate Fundament✅ Prüfungen & QualitätssicherungQAEinfach24FertigIntegrationstests, BetriebsprüfungAbnahme der Grundlage: Datenmodell, Storage, Queue, Auth, Pipeline und Observability greifen zuverlässig ineinander.FDN-02 FDN-03 FDN-04 FDN-07 FDN-08 FDN-09QA-12Alle Fundament-Tickets erfüllen ihre Prüfungen Ein Durchstich vom Login bis zum abgelegten Objekt funktioniert Keine offenen kritischen Befunde Verschlüsselung at rest (FDN-09) ist wirksam und die Schlüsselverwaltung geprüftNeuaufsetzen der Umgebung von null erfolgreich Ausfall eines Dienstes führt zu sauberem Fehlerbild Prüfbericht abgelegt und freigegeben
53QA-03Prüfgate Dokumentenkern✅ Prüfungen & QualitätssicherungQAMittel36FertigE2E-Tests, DatenintegritätVollständige Prüfung des Lebenszyklus: hochladen, ansehen, ablegen, herunterladen, löschen, wiederherstellen.DOC-03 DOC-05 DOC-06 DOC-08 DOC-10 DOC-12 QA-01 DOC-13 DOC-14 DOC-15QA-12Kompletter Lebenszyklus als automatisierter Test vorhanden Keine Datenveränderung zwischen Upload und Download Alle Ticket-Prüfungen des Epics bestandenPrüfsummenvergleich über den gesamten Lebenszyklus Abbruchszenarien in jedem Schritt getestet Referenzkorpus vollständig durchlaufen
54QA-04Prüfgate Suche & Texterkennung✅ Prüfungen & QualitätssicherungQAMittel39FertigRelevanz- und ErkennungsmessungMessen und dokumentieren von Erkennungsgüte, Trefferqualität und Konsistenz zwischen Datenbank und Suchindex.SRC-04 SRC-06 SRC-07 SRC-09 SRC-10 QA-01QA-12 QA-06Erkennungsrate am Referenzkorpus erreicht den Zielwert Relevanz an definierten Suchanfragen erfüllt die Erwartung Index und Datenbank sind nachweislich konsistentMessprotokoll mit Zielwerten und Ergebnissen abgelegt Voll-Reindexierung ohne Trefferverlust geprüft Berechtigungsfilter in der Suche negativ getestet
55QA-05Prüfgate Metadaten & Klassifizierung✅ Prüfungen & QualitätssicherungQAEinfach27FertigDatenqualitätstestsPrüfen von Feldvalidierung, Typwechseln, Massenbearbeitung und Güte der automatischen Zuordnung.MET-03 MET-04 QA-01 MET-05QA-12Validierungsregeln greifen in allen Eingabewegen Automatische Vorschläge erreichen die Zielgenauigkeit Massenbearbeitung erzeugt keine inkonsistenten DatenGenauigkeit der Klassifizierung dokumentiert Typwechsel mit Bestandsdaten ohne Verlust Validierung auch über die Schnittstelle wirksam
56QA-06Sicherheits- & Berechtigungsprüfung✅ Prüfungen & QualitätssicherungQAKomplex410FertigPenetrationstest, RollenmatrixSystematische Prüfung aller Zugriffspfade gegen die Rollenmatrix sowie Test auf gängige Sicherheitslücken.QA-04 SRC-11QA-12Jede Rolle wurde gegen jeden Endpunkt geprüft Keine unbefugte Rechteausweitung möglich Befunde sind behoben oder bewusst akzeptiertZugriff auf fremdes Objekt per ID schlägt fehl Prüfung auf Einschleusung, Sitzungsübernahme und unsichere Weiterleitung Sicherheitsbericht abgelegt und freigegeben
57QA-07Prüfgate Workflow & Benachrichtigung✅ Prüfungen & QualitätssicherungQAMittel34FertigProzesstests, ZeitrafferDurchspielen aller Prozesspfade inklusive Ablehnung, Vertretung, Eskalation und Fristablauf.QA-01QA-12Alle Prozesspfade sind mindestens einmal durchlaufen Fristen und Eskalationen lösen korrekt aus Keine Benachrichtigung geht verloren oder wird doppelt versandtZeitraffer-Test über simulierte Fristen Parallelentscheidungen erzeugen keinen Fehlzustand Zustellprotokoll gegen erwartete Ereignisse abgeglichen
58QA-08Revisionssicherheits-Prüfung✅ Prüfungen & QualitätssicherungQAMittel37FertigIntegritätsprüfung, SignaturvalidierungNachweis, dass Versionen, Protokoll und Signaturen unveränderlich, vollständig und extern prüfbar sind.VER-02 VER-04 VER-06 VER-07QA-12Historie ist lückenlos und nicht manipulierbar Signaturen sind mit externen Werkzeugen prüfbar Jede relevante Aktion erscheint im ProtokollManipulationsversuch wird erkannt und protokolliert Stichprobe von Aktionen im Protokoll wiedergefunden Prüfbericht für die Revision erstellt
59QA-09Schnittstellen-Vertragstests✅ Prüfungen & QualitätssicherungQAMittel38FertigVertragstests, TestempfängerAutomatisierte Prüfung, dass die Schnittstelle ihrer Beschreibung entspricht und Importwege zuverlässig arbeiten.INT-04 INT-06 INT-08 INT-09 INT-10 INT-11 INT-12 INT-13QA-12Vertragstests laufen in der Pipeline Import über E-Mail und Hot-Folder verliert keine Dokumente Webhook-Zustellung ist nachweisbarAbweichung zwischen Beschreibung und Verhalten bricht die Pipeline Dauerlauf-Import über 24 Stunden ohne Verlust Wiederholungsverhalten bei Ausfall belegt
60QA-10Last- & Leistungstest✅ Prüfungen & QualitätssicherungQAKomplex47BacklogLastgenerator, MessprotokollVerhalten unter realistischer und überhöhter Last messen: Suche, Upload, Vorschau und Schnittstelle.SRC-03 DOC-04 INT-01 QA-01QA-12Zielwerte für Antwortzeit und Durchsatz sind definiert und gemessen Engpässe sind identifiziert und dokumentiert System erholt sich nach Lastspitze selbstständigDauerlast über mehrere Stunden ohne Speicherwachstum Verhalten bei Überlast ist definiert statt zufällig Messprotokoll mit Zielwertvergleich abgelegt
61QA-11Barrierefreiheits-Audit✅ Prüfungen & QualitätssicherungQAMittel33FertigPrüfwerkzeuge, BildschirmleserUnabhängige Prüfung aller Ansichten gegen WCAG 2.1 AA mit Werkzeugen und manuellem Durchlauf.UX-04 UX-05QA-12Keine kritischen Verstöße offen Manueller Bildschirmleser-Durchlauf dokumentiert Restbefunde sind mit Frist eingeplantAutomatisierte Prüfung über alle Hauptseiten Vollständiger Ablauf ohne Maus durchgeführt Auditbericht abgelegt
62QA-12Abnahme- & Compliance-Prüfung✅ Prüfungen & QualitätssicherungQAKomplex411BacklogAbnahmeprotokoll, WiederherstellungstestGesamtabnahme vor der Freigabe: Aufbewahrung, Löschworkflow, Berichte und nachgewiesene Wiederherstellbarkeit.QA-08 QA-02 QA-03 QA-04 QA-05 QA-06 QA-07 QA-09 QA-10 QA-11Alle Prüfgates sind bestanden Wiederherstellung wurde real durchgeführt Abnahmeprotokoll ist unterzeichnetNotfallwiederherstellung auf leerem System nachgewiesen Löschung nur mit Freigabe und Protokoll möglich Offene Restrisiken sind schriftlich benannt
63FDN-09Verschlüsselung at rest & Schlüsselverwaltung⚙️ FundamentBackendMittel32FertigAES-256-GCM, Envelope EncryptionEnvelope-Encryption-Modul – Datenverschlüsselungsschlüssel (DEK) pro Objekt, verpackt durch einen Hauptschlüssel (KEK), der über Core API-10 (Master-Key-Verwaltung & -Rotation, KMS-Anbindung) bezogen wird. Dieses Ticket bleibt zuständig für die modul-lokale Objekt-Verschlüsselung (DEK pro Objekt, Envelope-Verfahren mit dem von Core bezogenen KEK) – nicht für die Master-Key-Verwaltung selbst. Bietet Encrypt/Decrypt-Schnittstelle über Streams, die von der Storage-Abstraktion (FDN-03) beim Ablegen/Lesen genutzt wird.FDN-01DOC-01 QA-02DEK wird pro Objekt neu erzeugt, nie wiederverwendet KEK wird ausschließlich über Core API-10 bezogen, nie im Code oder in der Datenbank im Klartext gespeichert Schlüsselrotation des KEK ist ohne Neuverschlüsselung aller Objekte möglich (nur DEK-Wrapper wird neu verpackt)Round-Trip Encrypt/Decrypt liefert identischen Klartext Manipulierter Chiffretext wird bei Decrypt erkannt und abgelehnt (GCM-Auth-Tag) KEK-Rotation getestet, alte Objekte weiterhin lesbar
64DOC-13Akten-/Vorgangsanzeige im Dokumentkontext🗂️ DokumentenkernFrontendEinfach26FertigNext.js/React/TS, externe REST-APIIn der Dokument-Detailansicht anzeigen, ob das Dokument zu einer Akte gehört, inkl. Vermerke und offener Wiedervorlage – ruft dafür ausschließlich die externe Workflow-Board-API auf (VOR-04), speichert selbst keine Akte-Daten in DMS.DOC-05QA-03Dokument-Detailansicht zeigt Akte-Zugehörigkeit, Vermerke und offene Wiedervorlagen an, falls vorhanden Kein eigenes Akte-Datenmodell in DMS, ausschließlich Anzeige über die externe API Fehlerfall (Workflow-Board nicht erreichbar) blockiert die Dokumentanzeige selbst nicht, zeigt nur den Akte-Bereich als „vorübergehend nicht verfügbar“Dokument mit verknüpfter Akte zeigt Akte-Informationen korrekt an Dokument ohne Akte-Verknüpfung zeigt Bereich nicht/leer an, kein Fehler Simulierter Ausfall der Workflow-API blockiert die übrige Dokumentanzeige nicht
65INT-08Watch-Folder-Import (Consume-Ordner)🔌 Integration & APIBackendMittel34FertigÜberwachter Ordner, Dateisystem-Events/PollingDateisystem-Ordner, der automatisch überwacht wird — jede dort abgelegte Datei wird ohne API-Aufruf importiert. Ergänzt DOC-01 (Upload-API), ersetzt sie nicht.DOC-01QA-09 INT-14Datei im überwachten Ordner wird automatisch erkannt und importiert, ohne manuellen Trigger Importierte Datei durchläuft denselben Pipeline-Weg wie ein API-Upload (Hash/Dedup/Verschlüsselung/OCR/Index) Fehlerhafte/nicht lesbare Datei landet in einem Fehler-Unterordner statt den Import-Prozess zu blockierenTestdatei im Ordner abgelegt, erscheint automatisch als Dokument Pipeline-Schritte (Hash, Dedup-Gate, Verschlüsselung) im Test nachweislich durchlaufen Absichtlich beschädigte Datei landet im Fehler-Unterordner, blockiert restlichen Ordner nicht
66INT-09CMIS-kompatible Schnittstelle (optional)🔌 Integration & APIBackendKomplex45FertigCMIS 1.1 (AtomPub oder Browser-Binding)CMIS-Standardschnittstelle als optionale zusätzliche API neben der eigenen REST-API — ermöglicht Drittwerkzeugen direkten Zugriff auf DMS-Inhalte, ohne NEXARCH-spezifische Integration schreiben zu müssen.INT-01QA-09 INT-15CMIS-Basisoperationen (Objekt lesen, Ordner navigieren, Dokument hochladen) funktionieren gegen einen CMIS-Standard-Client CMIS-Zugriff respektiert dieselben Rechte/Mandantengrenzen wie die eigene REST-API Optional aktivierbar, kein ZwangsbestandteilTest mit einem CMIS-Referenzclient gegen die Schnittstelle Berechtigungsprüfung im Test über CMIS-Pfad identisch zur REST-API Deaktivierung blockiert CMIS-Zugriff vollständig, REST-API bleibt unberührt
67INT-10Scanner-Stapelverarbeitung mit Trennseiten-/Barcode-Erkennung🔌 Integration & APIBackendMittel37FertigLeerseiten-Erkennung, Barcode-Decoding (z. B. ZBar/ZXing)Erkennung von Trennseiten (leere Seite oder Barcode-Seite) in einem Multi-Dokument-Scan-Stapel, der über INT-06 (Hot-Folder) eingeht — trennt automatisch in einzelne Dokumente statt eine große Datei anzulegen.INT-06QA-09Leere Trennseite wird erkannt und trennt den Stapel in einzelne Dokumente Barcode-Trennseite wird erkannt, Barcode-Wert kann optional als Metadatenfeld übernommen werden Stapel ohne Trennseiten wird als ein einzelnes Dokument behandelt, kein FehlverhaltenTest-Stapel mit Leerseiten-Trennung ergibt korrekte Anzahl Einzeldokumente Test-Stapel mit Barcode-Trennseiten ordnet Barcode-Werte korrekt zu Stapel ohne Trennseiten bleibt ein Dokument
68DOC-14Dokument-Zusammenführen & -Aufteilen🗂️ DokumentenkernBackendMittel34FertigPDF-Seitenmanipulation, Versionshistorie, Transaktionale Dokument-OperationenNachträgliches Zusammenführen mehrerer Dokumente zu einem (z.B. fälschlich getrennt gescannt) und Aufteilen eines mehrseitigen Dokuments in mehrere eigenständige Dokumente (z.B. Stapel-Scan ohne Trennseiten-Erkennung, siehe INT-10) – beides als nachträgliche Korrektur nach dem Import, nicht nur zum Importzeitpunkt.DOC-01 DOC-09QA-03Mehrere Dokumente lassen sich zu einem zusammenführen, Ursprungsdokumente bleiben in der Versionshistorie nachvollziehbar Ein mehrseitiges Dokument lässt sich an beliebigen Seitengrenzen in mehrere eigenständige Dokumente aufteilen, jedes mit eigenen Metadaten Beide Operationen respektieren bestehende Aufbewahrungssperren (Archive-Retention) – eine Kachel mit aktiver Löschsperre kann nicht durch Zusammenführen/Aufteilen umgangen werdenTest: drei Dokumente zusammengeführt, Ursprünge in Historie auffindbar Test: fünfseitiges Dokument an zwei Stellen geteilt, drei korrekte Einzeldokumente entstehen Test: Zusammenführen/Aufteilen eines Dokuments mit aktiver Löschsperre wird abgelehnt oder erfordert Freigabe, nicht stillschweigend erlaubt
69DOC-15Massenbearbeitung von Metadaten🗂️ DokumentenkernBackendMittel34FertigMassenoperation über Dokumentauswahl, transaktionale VerarbeitungMehrere ausgewählte Dokumente gleichzeitig mit Tags/Metadatenfeldern/Dokumenttyp bearbeiten (hinzufügen, entfernen, ersetzen) statt Dokument für Dokument – Vorbild paperless-ngx Bulk-Edit.DOC-01 MET-01QA-03Tag/Metadatenfeld kann über eine Auswahl mehrerer Dokumente gleichzeitig hinzugefügt oder entfernt werden Vorgang ist transaktional nachvollziehbar (Versionshistorie/Audit zeigt die Massenänderung, nicht stillschweigend) Vorgang respektiert bestehende Aufbewahrungssperren – ein gesperrtes Dokument in der Auswahl wird übersprungen mit klarer Rückmeldung, nicht die ganze Operation blockiert oder die Sperre umgangenTest: Tag auf 10 ausgewählte Dokumente gleichzeitig angewendet, alle korrekt aktualisiert Audit-Log zeigt Massenänderung nachvollziehbar Test mit einem gesperrten Dokument in der Auswahl: dieses wird übersprungen, Rest wird bearbeitet, klare Rückmeldung welches übersprungen wurde
70INT-11Archive-Anbindung: Objekttyp-Registrierung & Retention-Abfrage🔌 Integration & APIBackendMittel34FertigHTTP-Client gegen Archive-Modul-Adapter-Schnittstelle, Aufbewahrungsklassen-MappingDokument-Objekttyp und dessen Aufbewahrungsklasse bei NEXARCH Archive registrieren und vor jeder Löschung/Änderung eine Aufbewahrungssperre (Legal Hold) abfragen, statt eigene Retention-Logik im DMS zu bauen.DOC-01QA-09 INT-16Dokument-Objekttyp inkl. Aufbewahrungsklasse wird beim Start automatisch bei Archive registriert Vor Löschung oder Hard-Overwrite eines Dokuments wird eine Sperr-Abfrage an Archive gestellt Ist das Dokument gesperrt (Legal Hold), wird die Löschung abgelehnt und die Ablehnung im Audit-Log vermerkt Ist Archive nicht erreichbar, wird die Löschung sicherheitshalber verweigert (fail closed), nicht stillschweigend durchgeführtRegistrierung gegen eine echte Archive-Testinstanz durchgeführt, Objekttyp erscheint dort Test: gesperrtes Dokument kann nicht gelöscht werden, Ablehnung ist im Audit-Log sichtbar Test: Archive-Endpunkt absichtlich nicht erreichbar – Löschung wird verweigert, kein Fallback auf ungeprüfte Löschung
71INT-12AI-Anbindung: Objekttyp-Registrierung (Kopplung AI GOV-01)🔌 Integration & APIBackendMittel24FertigHTTP-Client gegen AI-Modul-Adapter-Schnittstelle, Feld-MappingDokument-Objekttyp und dessen KI-relevante Felder (Volltext, Metadaten) bei NEXARCH AI registrieren, damit Klassifizierung, Extraktion und semantische Suche für Dokumente optional nutzbar werden, ohne eigene KI-Logik im DMS zu bauen.DOC-01QA-09 INT-16Dokument-Objekttyp inkl. KI-relevanter Felder wird beim Start automatisch bei AI registriert Registrierung ist optional: ist AI-Modul nicht aktiviert (Core LIC-02), startet das DMS unverändert ohne Fehler Registrierungsfehler blockieren niemals den regulären DMS-Betrieb (fail open bei Registrierung, nicht bei Löschung)Registrierung gegen eine echte AI-Testinstanz durchgeführt, Objekttyp erscheint dort Test: AI-Modul deaktiviert – DMS startet und läuft unverändert, keine Fehlermeldung im Normalbetrieb Test: AI-Endpunkt nicht erreichbar bei Registrierung – DMS-Start wird dadurch nicht blockiert
72INT-13Workflow-Anbindung: Objekttyp- & Auslöser-Registrierung (Kopplung Workflow ENG-02)🔌 Integration & APIBackendMittel34FertigHTTP-Client gegen Workflow-Modul-Adapter-Schnittstelle, Ereignis-PublisherDokument-Objekttyp und Auslöser-Ereignisse (Dokument angelegt, Status geändert, Frist erreicht) bei NEXARCH Workflow registrieren und beim Eintreten publizieren, damit Genehmigungsprozesse und Aufgaben ohne eigene Workflow-Logik im DMS ausgelöst werden können.DOC-01QA-09 INT-16Dokument-Objekttyp inkl. verfügbarer Auslöser-Ereignisse wird beim Start automatisch bei Workflow registriert Ereignis 'Dokument angelegt' wird beim Anlegen eines Dokuments tatsächlich an Workflow publiziert Fehlschlagende Zustellung eines Ereignisses blockiert nicht die auslösende DMS-Aktion (asynchron, nicht im Request-Pfad)Registrierung gegen eine echte Workflow-Testinstanz durchgeführt, Objekttyp und Ereignisse erscheinen dort Test: Dokument angelegt – Ereignis kommt nachweislich bei Workflow an Test: Workflow-Endpunkt zum Zustellzeitpunkt nicht erreichbar – Dokumentanlage im DMS bleibt trotzdem erfolgreich, Ereignis wird nachgeliefert oder sichtbar verworfen (nicht stillschweigend verloren)
73SRC-11Feld-Whitelist-Query-Builder für Suchindex-Zugriff🔍 Suche & OCRBackendEinfach13FertigStatisches Enum/Switch für Feldnamen, getesteter Query-BuilderZentraler, getesteter Query-Builder mit Feld-Whitelist für den dynamischen Zugriff auf den DMS-Suchindex – Spalten-/Tabellennamen ausschließlich aus statischen Konstanten, nie aus Nutzereingabe oder generischem String-Zusammenbau (`fmt.Sprintf`), auch nicht hinter einer einfachen Whitelist-Funktion.SRC-01QA-06Spalten-/Feldnamen für dynamische Query-Teile stammen ausschließlich aus statischen Konstanten bzw. einem geschlossenen Enum/Switch-Typ, nie aus Nutzereingabe oder generischem String-Zusammenbau Whitelist ist nicht die einzige Absicherung – der Query-Builder selbst lässt keine anderen Werte durch, auch nicht bei einem Fehler in der Whitelist-Prüfung Entscheidung dokumentiert: DMS-eigene Implementierung, keine geteilte Utility mit dem jeweils anderen Board – konsistent mit der bereits getroffenen Entscheidung, Suche/OCR nicht zu zentralisierenVersuch, ein nicht in der Whitelist enthaltenes Feld anzufragen, wird abgewiesen statt stillschweigend ignoriert Code-Review bestätigt: kein dynamischer Spalten-/Tabellenname wird per String-Zusammenbau erzeugt
74DOC-16RET-05-Client: Aufbewahrungsklasse registrieren & Vernichtungs-Rückruf🗂️ DokumentenkernBackendMittel35FertigHTTP-Client gegen Archive RET-05, Rückruf-Endpunkt, Postgres-Jobqueue (FDN-04) für RequeueDMS registriert seine Objekttypen (Dokument, Anhang) bei Archive RET-05 mit Aufbewahrungsklasse und Rückruf-Adresse, empfängt Vernichtungs-Rückrufe und behandelt Registrierungsfehler tolerant statt sie zu verschlucken.DOC-01 FDN-04 RET-09DMS registriert seine Objekttypen (Dokument, Anhang) bei Archive RET-05 mit korrekter Aufbewahrungsklasse und eigener Rückruf-Adresse DMS empfängt den Vernichtungs-Rückruf, führt die Löschung durch und antwortet mit 2xx bei Erfolg Eine fehlgeschlagene Registrierung (Archive nicht erreichbar/Nicht-2xx) führt zu einem Requeue über FDN-04, nicht zu einem Absturz oder stillem VerwerfenRegistrierung real gegen einen Test-RET-05-Endpunkt durchgeführt und verifiziert Vernichtungs-Rückruf gegen einen echten Testfall ausgelöst, DMS-Löschung nachweislich erfolgt, 2xx-Antwort gesendet Simulierter Nicht-2xx-Fehler bei der Registrierung führt nachweislich zu einem Requeue-Eintrag in der Jobqueue, kein Absturz
75INT-14Tenant-Zuordnung & Zugriffsschutz für Hot-Folder/Scanner-Verzeichnisse🔌 Integration & APIBackendMittel212FertigDateisystem-Zugriffsrechte, Verzeichnisstruktur je Tenant, GoINT-06 (Netzwerkscanner-Ordner) und INT-08 (Hot-Folder) importieren Dateien ohne API-Aufruf und damit ohne Anwendungs-Auth-Kontext. Ohne klare Zuordnung, welches Verzeichnis zu welchem Mandanten gehört, und ohne Zugriffsschutz auf Dateisystemebene kann eine falsch konfigurierte Freigabe Dokumente dem falschen Tenant zuordnen oder Dritten Schreibzugriff erlauben. Je Tenant ein eigenes, klar benanntes Verzeichnis mit dediziertem Dateisystem-Benutzer/Gruppenrechten einführen, Import-Routine prüft beim Einlesen explizit die Tenant-Zuordnung des Quellverzeichnisses gegen die Registry (Core TEN-01), bevor ein Dokument angelegt wird.INT-06 INT-08Jedes Hot-Folder-/Scanner-Verzeichnis ist genau einem Tenant fest zugeordnet, verankert in der Core-Registry Die Import-Routine lehnt einen Import ab und protokolliert dies, wenn die Verzeichnis-Tenant-Zuordnung nicht auflösbar oder inkonsistent ist Dateisystemrechte beschränken Schreibzugriff auf das Verzeichnis auf die vorgesehenen Quellen (Scanner/Sync-Tool), dokumentiert in der BetriebsanleitungTest: Import aus einem korrekt zugeordneten Verzeichnis legt Dokument beim richtigen Tenant an Test: Import aus einem nicht zugeordneten/fehlkonfigurierten Verzeichnis wird abgelehnt und protokolliert Prüft Dateisystemrechte des Verzeichnisses gegen die Betriebsanleitung
76INT-15CMIS-Schnittstelle: Auth-/Tenant-Scoping-Parität zur REST-API🔌 Integration & APIBackendMittel212FertigCMIS, gemeinsame Auth-Middleware, GoINT-09 stellt eine CMIS-Standardschnittstelle für Drittwerkzeuge bereit, ohne festzulegen, ob diese dieselbe Authentifizierung und Tenant-Scoping-Durchsetzung wie die REST-API verwendet. Eine zweite, schwächer geprüfte API-Fläche würde die gesamte Zugriffskontrolle umgehbar machen. CMIS auf dieselbe Auth-Middleware und Tenant-Kontext-Ermittlung wie die REST-API (INT-01) verpflichten – keine eigene, parallele Auth-Implementierung.INT-09CMIS-Endpunkte verwenden dieselbe Auth-Middleware wie die REST-API, keine eigene Login-/Token-Prüfung Ein über CMIS authentifizierter Aufruf ist auf denselben Tenant beschränkt wie über die REST-API mit denselben Credentials Ein automatisierter Test vergleicht Zugriffsergebnisse für dieselbe Anfrage über REST und CMIS und erwartet identisches AutorisierungsverhaltenTest: Zugriff auf ein fremdes Tenant-Dokument über CMIS wird identisch zur REST-API abgelehnt Test: abgelaufenes/widerrufenes Token wird von CMIS genauso abgelehnt wie von der REST-API (Kopplung an Core IAM-17) Code-Review-Gate: CMIS-Handler dürfen keine eigene Auth-Logik enthalten, nur die gemeinsame Middleware referenzieren
77INT-16Nutzer-Tenant-Kontext in Modul-Rückkanälen (Archive/AI/Workflow)🔌 Integration & APIBackendMittel212FertigService-Credentials (Core API-02), Tenant-Kontext-Weiterreichung, GoINT-11/12/13 registrieren DMS-Objekttypen und Ereignisse bei Archive, AI und Workflow über Service-Credentials. Rückkanal-Aufrufe (z. B. DOC-13 → Workflow VOR-04) dürfen dabei niemals nur im Kontext des Service-Accounts laufen, sondern müssen den ursprünglichen Nutzer-Tenant-Kontext durchreichen – sonst könnte ein Nutzer über den Umweg eines anderen Moduls Daten eines fremden Mandanten sehen, obwohl DMS selbst korrekt mandantengetrennt ist. Tenant-ID des anfragenden Nutzers explizit als Pflichtparameter in jedem Rückkanal-Aufruf verankern und serverseitig gegen den Service-Credential-Scope validieren.INT-11 INT-12 INT-13Jeder Rückkanal-Aufruf an Archive/AI/Workflow trägt den Tenant-Kontext des ursprünglich anfragenden Nutzers als Pflichtparameter Das aufgerufene Modul validiert, dass der übergebene Tenant-Kontext zum Tenant des Zielobjekts passt, unabhängig vom Service-Credential-Scope Ein manipulierter/falscher Tenant-Kontext im Aufruf wird abgelehnt und protokolliertTest: Rückkanal-Aufruf mit korrektem Nutzer-Tenant-Kontext liefert erwartete Daten Test: Rückkanal-Aufruf mit manipuliertem Tenant-Kontext (fremder Tenant) wird abgelehnt Integrationstest über DOC-13 → Workflow VOR-04 mit zwei verschiedenen Tenants, prüft Isolation
78DOC-17Malware-Scan vor Ablage🗂️ DokumentenkernBackendMittel212FertigVirenscanner-Anbindung (z. B. ClamAV), Go, Postgres-JobqueueDOC-01 validiert Größe und MIME-Typ beim Upload, prüft aber nicht auf schädliche Inhalte (Viren, aktive Inhalte in Office-Dokumenten/Makros). Virenscan als verpflichtenden Verarbeitungsschritt vor endgültiger Ablage ergänzen – Upload bleibt in Quarantäne-Status, bis der Scan abgeschlossen ist; bei Fund wird das Dokument abgelehnt und der Vorfall protokolliert.DOC-01Jede hochgeladene Datei durchläuft einen Virenscan, bevor sie als reguläres Dokument sichtbar/abrufbar wird Ein positiver Scan-Fund führt zur Ablehnung des Dokuments und einem Audit-Event, nicht zu stiller Ablage Der Scan-Status ist für den hochladenden Nutzer sichtbar (in Bearbeitung/freigegeben/abgelehnt)Test mit EICAR-Testdatei: wird zuverlässig erkannt und abgelehnt Test mit sauberer Datei: durchläuft Scan und wird normal verfügbar Lasttest: Scan-Queue verarbeitet mehrere gleichzeitige Uploads ohne Verlust der Reihenfolge/Nachvollziehbarkeit
79FDN-10Signierte URLs: Scope-Bindung & kurze Ablaufzeit⚙️ FundamentBackendEinfach112FertigStorage-Adapter (S3-kompatibel), signierte URLs, GoFDN-03 stellt signierte URLs für den Storage-Zugriff bereit, ohne deren Scope und Ablaufzeit explizit festzulegen. Jede signierte URL muss fest an genau ein Objekt gebunden sein (nicht an ein Präfix/Verzeichnis) und eine kurze, konfigurierbare Ablaufzeit haben (Minuten, nicht Stunden). Nach Ablauf oder nach Löschung/Versionswechsel des Objekts muss die URL ungültig sein.FDN-03Eine signierte URL gewährt ausschließlich Zugriff auf genau das Objekt, für das sie ausgestellt wurde Ablaufzeit ist konfigurierbar und im Standardfall im Minutenbereich, hart durchgesetzt vom Storage-Adapter Nach Ablauf liefert ein Zugriffsversuch über die URL einen Fehler, kein stilles Fallback auf öffentlichen ZugriffTest: signierte URL für Objekt A liefert bei Zugriffsversuch auf Objekt B einen Fehler Test: abgelaufene URL wird abgelehnt Test: URL für ein zwischenzeitlich gelöschtes Objekt wird abgelehnt
80FDN-11Ressourcenlimits für asynchrone Verarbeitungsjobs⚙️ FundamentBackendMittel212FertigPostgres-Jobqueue, Worker-Goroutinen, Ressourcenlimits (Zeit/Speicher/Seitenzahl)FDN-04 verarbeitet OCR/Konvertierung/Indexierung/Exporte mit Wiederholungslogik, Backoff und Dead-Letter-Queue, ohne Obergrenzen pro Einzeljob festzulegen. Eine sehr große oder speziell präparierte Datei (z. B. sehr viele Seiten, Zip-Bomb-artige Kompression bei Konvertierung) kann einen Worker dauerhaft blockieren und damit die Verarbeitung für andere Mandanten verzögern. Harte Obergrenzen je Job definieren (max. Verarbeitungszeit, max. Speicherverbrauch, max. Seiten-/Dateigröße) – bei Überschreitung wird der Job abgebrochen, in die Dead-Letter-Queue verschoben und der Nutzer informiert, statt den Worker zu blockieren.FDN-04Jeder Verarbeitungsjob hat konfigurierbare Obergrenzen für Zeit, Speicher und Eingabegröße/Seitenzahl Eine Überschreitung führt zum kontrollierten Abbruch des Jobs (Dead-Letter-Queue), nicht zur Blockade des Workers Andere, gleichzeitig laufende Jobs (auch anderer Mandanten) bleiben von einem überschreitenden Job unbeeinflusstTest mit einer Datei, die absichtlich die Seiten-/Größenobergrenze überschreitet: Job wird kontrolliert abgebrochen Lasttest: ein überschreitender Job blockiert nicht die Verarbeitung paralleler, regulärer Jobs Test der Nutzerbenachrichtigung bei abgebrochenem Job
81VER-08Technische Durchsetzung Append-only für das Versionierungs-/Ereignisprotokoll🔄 Versionierung & AuditBackendEinfach212FertigPostgreSQL (REVOKE/Trigger), GoVER-05 konzipiert ein unveränderliches, verkettetes Protokoll aller sicherheits- und geschäftsrelevanten Ereignisse, setzt „unveränderlich“ aber nur konventionell um. Analog zu Core `AUD-07` technisch erzwingen: der Anwendungs-Datenbankrolle werden UPDATE-/DELETE-Rechte auf die Protokolltabelle entzogen (nur INSERT/SELECT), ergänzt um einen Datenbank-Trigger, der jeden Änderungsversuch ablehnt und selbst protokolliert.VER-05Die vom DMS-Prozess verwendete Datenbankrolle kann Protokolleinträge nachweislich weder verändern noch löschen Ein Änderungsversuch wird von der Datenbank abgelehnt und selbst protokolliert Die Verkettung (Unversehrtheitsnachweis) aus VER-05 bleibt vollständig nutzbarTestet UPDATE/DELETE gegen die Protokolltabelle mit der Anwendungsrolle, erwartet Rechteverweigerung Prüft, dass der Ablehnungsversuch selbst sichtbar protokolliert wird Regressionstest: Verkettungsprüfung (Unversehrtheitsnachweis) funktioniert nach der Rechteänderung weiterhin
82DOC-18Obergrenze für Gesamtgröße/Anzahl bei Archiv-Bündelung🗂️ DokumentenkernBackendEinfach113FertigPostgres-Jobqueue, Ressourcenlimits, GoDOC-08 bündelt mehrere ausgewählte Dokumente als Hintergrund-Job zu einem Archiv, ohne Obergrenze für Gesamtgröße oder Anzahl der Dokumente je Anfrage. Eine übermäßig große Auswahl kann sonst den Bündelungs-Job unverhältnismäßig lange laufen lassen und Ressourcen auf Kosten anderer Mandanten binden. Harte, konfigurierbare Obergrenze für maximale Gesamtgröße und maximale Dokumentanzahl je Bündelungs-Anfrage einführen – bei Überschreitung wird die Anfrage mit klarer Fehlermeldung abgelehnt, bevor der Job gestartet wird.DOC-08Eine Bündelungs-Anfrage mit konfigurierbar zu großer Gesamtgröße oder Dokumentanzahl wird vor Jobstart abgelehnt, mit klarer Fehlermeldung an den Nutzer Innerhalb der Obergrenze funktioniert die Bündelung aus DOC-08 unverändert Die Obergrenzen sind konfigurierbar, nicht hart im Code verankertTest: Anfrage mit Auswahl oberhalb der konfigurierten Obergrenze wird abgelehnt, kein Job wird gestartet Test: Anfrage innerhalb der Obergrenze wird normal verarbeitet Regressionstest bestehender DOC-08-Funktionalität nach Einführung der Prüfung
83SEC-01Unauthentifizierter Vernichtungs-Rückruf löscht Dokumente physisch🔒 SicherheitBackendKomplex313BacklogService-Token-Pflicht, Legal-Hold-Check, Body-LimitDer Vernichtungs-Rückruf des Retention-Dienstes ist im Standardbetrieb fail-open: ohne Bearer-Token werden Dokumente physisch gelöscht, Legal Hold wird nicht geprüft, der Audit-Akteur wird falsch protokolliert.RequireServiceToken serverseitig fest auf true erzwungen Aufruf ohne gültiges Bearer-Token wird mit 401/403 abgelehnt Legal-Hold-Status wird vor physischer Löschung geprüft Request-Body ist auf eine feste Obergrenze begrenzt Audit-Eintrag protokolliert den tatsächlichen Service-AkteurAngriffsnachstellung ohne Bearer-Token: vor Fix löschend, nach Fix abgelehnt Aufruf gegen Objekt mit aktivem Legal Hold wird abgelehnt Request-Body oberhalb der Obergrenze wird abgelehnt Audit-Log nach legitimem Aufruf enthält korrekten Service-Akteur
84SEC-02Mail-Postfachverwaltung ohne Rollenprüfung ermöglicht Credential-Exfiltration🔒 SicherheitBackendKomplex313BacklogRollenprüfung Admin-only, Passwortbindung bei Host-ÄnderungDie Mail-Postfachverwaltung erlaubt jeder authentifizierten Identität Host/Port-Änderungen ohne Passwortbestätigung, wodurch gespeicherte IMAP-Zugangsdaten an einen angreifereigenen Server exfiltriert werden können; ImportUserID ist zusätzlich frei wählbar.needsGuard für mail-accounts auf true gesetzt, nur Admin-Rolle Host/Port-Änderung verlangt erneute Passworteingabe ImportUserID wird serverseitig auf den authentifizierten Actor fixiert Automatisierter Test belegt Ablehnung von Host-Änderung ohne PasswortAngriffsnachstellung: Host-Änderung mit leerem Passwort auf fremden IMAP-Server, vor/nach Fix dokumentiert Angriffsnachstellung: Import mit fremdem ImportUserID, vor/nach Fix dokumentiert Regressionstest: legitime Host-Änderung mit Passwort funktioniert weiterhin
85SEC-03Guard-Lücken: Papierkorb/Ordnerbaum/Trigger-Webhooks ohne Zugriffsprüfung🔒 SicherheitBackendMittel213BacklogneedsGuard-Korrektur, eigentümerbezogene FilterungGET /trash, /folders und /triggers liefern mandanten-/nutzerübergreifend Daten aus, da needsGuard für diese Routen auf false steht.needsGuard für GET /folders/*, /trash, /triggers auf true GET /trash liefert nur eigene Papierkorb-Einträge folderapi liefert nur sichtbaren Teilbaum triggerapi liefert webhook_url nur bei BerechtigungAngriffsnachstellung GET /trash fremder Nutzer, vor/nach Fix dokumentiert Gleiche Nachstellung für /folders und /triggers Regressionstest: eigene Daten weiterhin vollständig sichtbar
86SEC-04Virenscan standardmäßig nicht in die Verarbeitungs-Pipeline eingereiht🔒 SicherheitBackendMittel213BacklogenqueueTypes-Default, Sichtbarkeitsfilter umkehrenmalwarescan.scan ist nicht in enqueueTypes enthalten; Dokumente ohne jemals ausgeführten Scan sind sofort sichtbar, da nur explizit unclean markierte Dokumente ausgeblendet werden.malwarescan.scan standardmäßig in enqueueTypes Sichtbarkeit nur bei explizitem status = clean Bestehende ungescannte Dokumente werden per Nachlauf erfasstAngriffsnachstellung: Upload bei deaktiviertem Scan-Worker, vor/nach Fix dokumentiert Regressionstest: clean-Dokument bleibt sichtbar Regressionstest: unclean-Dokument bleibt gesperrt
87SEC-05Upload-Limit standardmäßig unbegrenzt, Client-MIME ungeprüft, authentifizierter OOM🔒 SicherheitBackendMittel313BacklogUpload-Limit-Default, Server-MIME-Sniffing, Streaming-VerschlüsselungUpload-Limit 0 gilt als unbegrenzt, MIME-Typ wird vom Client übernommen, und die Verschlüsselung liest die komplette Datei ins RAM — ein authentifizierter Nutzer kann per großem Upload einen RAM-OOM auslösen.Standard-Upload-Limit ist fester Wert > 0 MIME-Typ wird serverseitig gesnifft und abgeglichen Verschlüsselungspfad verarbeitet den Stream statt vollständigem RAM-Puffer Request-Body ist hart begrenztAngriffsnachstellung: großer Upload, RAM-Verbrauch vor/nach Fix gemessen und dokumentiert Angriffsnachstellung: falsch deklarierter Content-Type wird per Sniffing erkannt Regressionstest: reguläre Uploads funktionieren weiterhin
88SEC-06Modul-Verifier akzeptiert fremde Tenants wenn TENANT_SLUG leer🔒 SicherheitBackendEinfach113BacklogTENANT_SLUG-Pflicht beim DienststartIst TENANT_SLUG beim Dienststart leer, wird die Tenant-Prüfung im Modul-Verifier übersprungen und Tokens für jeden Tenant akzeptiert.Dienststart verweigert bei fehlendem/leerem TENANT_SLUG verifier.go prüft Tenant immer, keine Ausnahme bei leerem Wert Token für fremden Tenant wird in jedem Fall abgelehntAngriffsnachstellung: Start ohne TENANT_SLUG, fremdes Token, vor/nach Fix dokumentiert Regressionstest: korrekter Start mit eigenem Token funktioniert Test: fremdes Token bei korrektem TENANT_SLUG weiterhin abgelehnt
89SEC-07NEXARCH_DMS_APP_ALLOW_CALLER_IDENTITY umgeht komplette Authentifizierung🔒 SicherheitBackendMittel213BacklogProduktionssperre für Übergangs-FlagDas Flag ALLOW_CALLER_IDENTITY erlaubt Admin-Zugriff per Query-Parameter ohne echte Authentifizierung und ist nur per Deployment-Checkliste, nicht technisch, auf Host 131 beschränkt.Flag wirkt nur bei explizit markierter Nicht-Produktionsumgebung Bei Produktion oder fehlender Markierung wird das Flag ignoriert Deployment-Checkliste enthält Entfernungsschritt vor ProduktivbetriebAngriffsnachstellung: Flag ohne Nicht-Produktions-Markierung, vor/nach Fix dokumentiert Regressionstest: Flag mit korrekter Markierung funktioniert für Host 131 weiterhin Test: Flag ohne jede Umgebungsvariable wird ignoriert
90SEC-08Objektrechte (Ordner-ACL) existieren im Code, werden aber nie geprueft🔒 SicherheitBackendKomplex313BacklogObjectAllowed in authz verdrahtenPoolChecker entscheidet Sichtbarkeit nur ueber created_by == caller plus statische Admin-Liste. policyclient.ObjectAllowed (Core RBAC-11, Ordner-/Dokumentpfad inkl. Gruppen) existiert fertig implementiert, wird aber nirgends aufgerufen. Suche filtert ebenfalls hart auf created_by.CanAccessDocument/CanAccessFolder fragen zusaetzlich ObjectAllowed ab, hasEntries=false aendert nichts am bisherigen Verhalten Bei hasEntries=true entscheidet ausschliesslich ObjectAllowed Suche filtert bei vorhandenen Objektrechten auf erlaubte Ordner-IDs statt created_by Ausfall der Objektrechte-Abfrage fuehrt zu Ablehnung (fail-closed) groupIDs-Herkunft dokumentiertMandant ohne Objektrechte-Eintrag: Verhalten identisch zum Stand vorher Dokument mit Freigabe fuer fremden Nutzer: dieser kann nun zugreifen Dokument mit Entzug fuer Ersteller: Ersteller wird abgelehnt RBAC-11 nicht erreichbar: Zugriff verweigert Suche liefert nur erlaubte Treffer
91SEC-09CMIS-Autorisierungspfad geprueft: kein Bypass bestaetigt🔒 SicherheitBackendMittel213FertigCMIS-Zugriffspruefung geklaertVermuteter Bypass geprueft und per echtem Test (TestPermissionParityWithREST, Host 204, TEST_TENANT_DSN) widerlegt: CMIS-Backend ist auf die komplette Middleware-Kette verdrahtet, interner Re-Dispatch prueft CanAccessDocument/CanAccessFolder erneut. Kein Code-Fix noetig.Dokumentiert und per Test belegt, dass CMIS-Zugriff auf fremdes Dokument NICHT durchgeht - erledigt Kein Code-Fix erforderlich, da kein Bypass bestaetigt Verbleibendes AllowCaller-Restrisiko als bereits durch SEC-07 abgedeckt dokumentiertAusgangsmessung durchgefuehrt: bestehender Test TestPermissionParityWithREST auf Host 204 gegen echte migrierte Testdatenbank ausgefuehrt, PASS Fremder Nutzer mit gueltigem Token liest fremdes Dokument ueber CMIS: 403 bestaetigt Gefaelschter caller-Parameter neben echtem fremden Token: 403 bestaetigt (Token-Identitaet gewinnt) REST und CMIS liefern fuer alle Tokenzustaende identische Statuscodes