Merge PR #338: dms-kanban: Board nach Gitea main nachliefern
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s

This commit is contained in:
patrick committed 2026-10-19 02:22:48 +02:00
commit 8e3c1e4eee
130 files changed
+12257

No files matched your search

+475
View File
@@ -0,0 +1,475 @@
# dms-kanban – Dev Log
## 2026-08-25 23:00 – 23:00 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:25 – 23:26 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** repos
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:27 – 23:28 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:29 – 23:30 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:32 – 23:32 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:33 – 23:35 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:36 – 23:36 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:36 – 23:37 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:37 – 23:37 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:38 – 23:38 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:38 – 23:38 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:39 – 23:40 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:41 – 23:42 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:42 – 23:42 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:49 – 23:51 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:53 – 23:53 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-25 23:54 – 00:00 (6m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 00:46 – 00:47 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** core-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 00:48 – 00:54 (6m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 01:10 – 01:17 (6m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 01:24 – 01:24 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 09:27 – 09:27 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 09:42 – 09:42 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 10:50 – 10:52 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 10:57 – 10:58 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 12:35 – 12:40 (4m)
**Beschreibung:** Claude Code Session
**Projekt:** mail-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 12:41 – 12:41 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 12:43 – 12:43 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 14:27 – 14:30 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:08 – 15:11 (2m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:17 – 15:17 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:17 – 15:18 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:18 – 15:18 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:19 – 15:20 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:27 – 15:28 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:29 – 15:30 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-26 15:31 – 15:32 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-08-29 20:27 – 20:27 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-10-15 22:54 – 23:22 (27m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-28.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-15 23:51 – 23:51 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-28.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-15 23:53 – 23:53 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-28.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-15 23:56 – 23:56 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-28.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-10-16 00:02 – 00:02 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** dms-kanban
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-28.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
---
+113
View File
@@ -0,0 +1,113 @@
# DMS-Kanban – lokal abarbeiten
81 Arbeitskacheln · 8 Epics · 230 Personentage · 13 Wellen (inkl. Welle 12: Threat-Model-Nachtrag 2026-09-12 — INT-14, INT-15, INT-16, DOC-17, FDN-10, FDN-11, VER-08; Welle 13: DOC-18, ergänzt 2026-09-14, siehe SICHERHEITSKONZEPT.md Abschnitt 14 Finding #9).
Hinweis: Identität, Rechte, Mandantenverwaltung und Authentifizierung sind ausgelagert in NEXARCH Core (siehe ../core-kanban/) — dieses Board enthält dafür keine eigenen Tickets mehr, nur externe Verweise in der Ausgangslage betroffener Kacheln.
Hinweis: UI-Shell & Design-System ist ausgelagert in NEXARCH Core (siehe ../core-kanban/, SHL-01) — dieses Board hat dafür kein eigenes Ticket mehr, nur externe Verweise in den betroffenen Oberflächen-Tickets.
Hinweis: REST-API-Grundgerüst, Rate-Limiting, OpenAPI-Tooling und Webhook-Zustellung sind ausgelagert in NEXARCH Core (siehe ../core-kanban/, API-01/03/04/07) — dieses Board definiert nur noch die modul-eigenen Endpunkte.
Hinweis: Aufbewahrung, WORM, Compliance-Berichte und Backup sind ausgelagert in NEXARCH Archive (siehe ../archive-kanban/) — dieses Board enthält dafür keine eigenen Tickets mehr.
Hinweis: Genehmigungsprozesse, Aufgaben/Fristen und regelbasiertes Routing sind ausgelagert in NEXARCH Workflow (siehe ../workflow-kanban/), Benachrichtigungsversand in NEXARCH Core (siehe ../core-kanban/) — dieses Board enthält dafür keine eigenen Tickets mehr.
Hinweis: KI-Funktionen (Klassifizierung, Extraktion, Zusammenfassung, semantische Suche) sind ausgelagert in NEXARCH AI (siehe ../ai-kanban/), optional aktivierbar — dieses Board enthält dafür keine eigenen Tickets mehr.
Stand: 2026-08-26
## Weg 1 – Sofort loslegen (empfohlen)
`kanban.html` per Doppelklick im Browser öffnen. Kein Server, kein Internet, keine Installation.
- Kacheln per Drag & Drop zwischen Backlog → Bereit → In Arbeit → Prüfung → Fertig ziehen
- Der Stand wird im Browser gespeichert (localStorage) und bleibt nach dem Schließen erhalten
- Filter nach Epic, Rolle, Welle, Volltext sowie „Nur startbare“ (alle Vorgänger auf Fertig)
- Klick auf eine Kachel öffnet Details inkl. vollem Bau-Prompt und „Prompt kopieren“
- „Stand sichern“ exportiert den aktuellen Status als CSV
Hinweis: Der Stand hängt an Browser und Profil. Für Teamarbeit Weg 2 oder 3 nutzen.
## Weg 2 – Import in ein vorhandenes Werkzeug
`board.csv` (UTF-8 mit BOM, Komma-getrennt) importieren:
| Werkzeug | Weg |
| --- | --- |
| Trello | Board → Menü → Mehr → CSV importieren (Power-Up) |
| Jira | Einstellungen → System → Externes Importieren → CSV, Spalte „Status“ auf den Workflow mappen |
| GitHub Projects | Projekt → … → Import, oder per `gh` CLI aus `board.json` |
| Notion | Datenbank → … → Merge with CSV |
| Linear / Asana / ClickUp | jeweils CSV-Import, Spalten wie oben zuordnen |
Spalten: Code, Titel, Epic, Rolle, Komplexitaet, Aufwand_PT, Welle, Status, Technik,
Beschreibung, Haengt_ab_von, Schaltet_frei, Akzeptanzkriterien, Pruefungen.
## Weg 3 – Dateibasiert in der Entwicklungsumgebung
Der Ordner `tickets/` enthält für jede Kachel eine Markdown-Datei (`FDN-01.md` …).
Jede Datei ist ein vollständiger Bau-Prompt – Auftrag, Produkt-DNA, Ausgangslage,
Akzeptanzkriterien, Prüfungen und Abschlussregeln.
- **Obsidian**: Ordner als Vault öffnen, Community-Plugin „Kanban“ installieren, Spalten anlegen und die Notizen einsortieren.
- **VS Code**: Ordner öffnen, Erweiterung „Todo Tree“ oder „Markdown Kanban“ nutzen.
- **Coding-Assistent**: Dateiöffnen, Inhalt kopieren, als Auftrag übergeben. Ein Prompt = eine Kachel = ein Branch.
## Weg 4 – Eigenes Board im Netzwerk (Team)
Selbst gehostet, jeweils mit CSV-Import:
```bash
# Focalboard
docker run -d -p 8000:8000 --name focalboard mattermost/focalboard
# Planka
docker run -d -p 3010:1337 --name planka ghcr.io/plankanban/planka:latest
# Vikunja
docker run -d -p 3456:3456 --name vikunja vikunja/vikunja
```
Danach `board.csv` importieren.
## Reihenfolge der Arbeit
Die Wellen geben an, was parallel laufen darf. Eine Kachel ist startbar,
sobald alle Kacheln unter „Hängt ab von“ auf Fertig stehen.
- **Welle 1** (5 Kacheln): FDN-01, QA-06, UX-01, UX-02, UX-03
- **Welle 2** (8 Kacheln): FDN-02, FDN-03, FDN-07, FDN-08, FDN-09, SRC-01, UX-04, UX-05
- **Welle 3** (8 Kacheln): DOC-01, DOC-09, FDN-04, MET-01, MET-02, QA-01, QA-11, VER-05
- **Welle 4** (18 Kacheln): DOC-02, DOC-03, DOC-04, DOC-06, DOC-07, DOC-10, DOC-11, DOC-14, DOC-15, INT-01, INT-03, INT-08, MET-03, MET-04, QA-02, QA-07, VER-01, VER-06
- **Welle 5** (10 Kacheln): DOC-05, DOC-08, DOC-12, INT-09, QA-05, SRC-02, SRC-05, VER-02, VER-03, VER-07
- **Welle 6** (8 Kacheln): DOC-13, INT-06, MET-05, QA-03, SRC-03, SRC-06, SRC-07, VER-04
- **Welle 7** (6 Kacheln): INT-04, INT-10, QA-08, QA-10, SRC-04, SRC-08
- **Welle 8** (4 Kacheln): QA-09, QA-12, SRC-09, SRC-10
- **Welle 9** (1 Kacheln): QA-04
Kritischer Pfad (28 PT): FDN-01 → FDN-02 → DOC-01 → DOC-04 → DOC-05 → VER-04 → QA-08 → QA-12
## Produkt-DNA
### Übernehmen
- **paperless-ngx**: Kompromisslose Erfassungs-Pipeline: Consume-Ordner, Vorverarbeitung, OCR, durchsuchbares PDF/A – vollautomatisch ohne Nutzerinteraktion.
- **paperless-ngx**: Regelwerk für automatische Zuordnung von Korrespondent, Dokumenttyp und Tags direkt beim Import.
- **Docspell**: Sprachverarbeitende Extraktion konkreter Werte: Absender, Datum, Betrag, Vertragspartner werden als strukturierte Felder vorgeschlagen.
- **Docspell**: Sauberes Mandanten- und Datenmodell sowie ausgereifter Postfach-Abruf inklusive Anhangbehandlung.
- **Alfresco**: Vererbende Zugriffskontrolle über die Ablagehierarchie mit expliziten Erlaubnissen und Verboten.
- **Alfresco**: Echte Prozess-Engine mit deklarativen Prozessdefinitionen statt fest verdrahteter Freigabelogik.
- **Alfresco**: Versionierung mit Ausleihen/Einchecken sowie Aufbewahrungssteuerung inklusive Aufbewahrungssperre.
- **ecoDMS**: Revisionssicherheit als Grundhaltung: unveränderliches Protokoll, nachvollziehbare Vernichtung, Vier-Augen-Freigabe.
- **ecoDMS**: Praxisnaher Scanner- und Stapelworkflow mit Trennseiten und Klassifizierungsvorlagen.
### Vermeiden
- **Alfresco – Schwergewichtige Plattform mit hohem Ressourcenbedarf, langer Startzeit und aufwendigem Betrieb.**: Schlanker Dienst plus getrennte Worker. Jede Komponente muss auf einem kleinen Server startklar sein.
- **Alfresco – Übermächtiges Konfigurationsmodell mit steiler Lernkurve und träger Oberfläche.**: Sinnvolle Voreinstellungen, die ohne Konfiguration funktionieren. Komplexität nur dort, wo sie nachweislich gebraucht wird.
- **paperless-ngx – Kaum Governance: keine echte Rechtevererbung, keine Freigabeprozesse, keine Versionen, kein belastbares Protokoll.**: Rechte, Versionierung und Protokoll gehören von Anfang an ins Fundament, nicht als Nachrüstung.
- **paperless-ngx – Flache Ablage ohne Hierarchie, dadurch mühsam in Abteilungsstrukturen.**: Hierarchische Ablage und Verschlagwortung parallel anbieten – der Nutzer entscheidet, nicht das System.
- **Docspell – Karge Oberfläche und dünne Dokumentation, hohe Einstiegshürde.**: Oberfläche und Hilfetexte sind Teil jeder Kachel, nicht ein späterer Feinschliff.
- **ecoDMS – Geschlossenes System mit eigenständigem Desktop-Client und eingeschränkter Schnittstelle.**: Alles was die Oberfläche kann, kann auch die offene Schnittstelle. Die Oberfläche ist nur ein Nutzer der eigenen Programmierschnittstelle.
- **ecoDMS – Herstellerbindung durch proprietäre Ablage- und Datenformate.**: Offene Formate, jederzeit vollständiger Export von Dokumenten und Metadaten ohne Werkzeug des Herstellers.
## Arbeitsregeln
Je Kachel ein eigener Branch, schrittweise committen, Branch pushen, dann anhalten.
Kein Merge und kein Deploy ohne ausdrückliche Freigabe.
Code-Struktur: Hauptdateien/Entry-Points klein halten, Fachlogik in eigene Module/Dateien auslagern. Vor dem Anlegen einer neuen Funktions-/Modul-Datei prüfen, ob dieselbe Funktionalität nicht schon in einem anderen Modul (auch modulübergreifend, z. B. Core) existiert — keine doppelten Funktionsdateien, ein Modul/Board referenziert das andere extern statt Code zu kopieren (gleiches Prinzip wie bei den Konsolidierungen IAM/Archive/Workflow/AI/API/UI-Shell, siehe nexarch-state.json).
+416
View File
@@ -0,0 +1,416 @@
Code,Titel,Epic,Rolle,Komplexitaet,Aufwand_PT,Welle,Status,Technik,Beschreibung,Haengt_ab_von,Schaltet_frei,Akzeptanzkriterien,Pruefungen
FDN-01,Repository & Projektgerüst,⚙️ Fundament,DevOps,Einfach,2,1,Fertig,"Monorepo, Go, Next.js/TypeScript, golangci-lint, Prettier","Repository 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-01,"Repo lässt sich mit einem Befehl installieren und starten
Lint- und Format-Checks laufen lokal durch
Branch- und Commit-Konvention dokumentiert","Frischer Clone baut ohne manuelle Nacharbeit
Lint-Fehler brechen den Build ab
README-Setupanleitung von zweiter Person nachvollzogen"
FDN-02,Datenmodell & Migrationen,⚙️ Fundament,Backend,Mittel,3,2,Fertig,"PostgreSQL, pgx/v5, SQL-Migrationsdateien (kein ORM)","Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.",FDN-01,DOC-01 DOC-09 FDN-04 MET-01 MET-02 QA-02 VER-01 VER-05,"Alle Kern-Entitäten mit Beziehungen und Indizes vorhanden
Migration vorwärts und rückwärts ausführbar
Seed-Datensatz für Entwicklung vorhanden","Migration auf leerer DB und auf bestehender DB getestet
Rollback stellt Vorzustand wieder her
Fremdschlüssel-Constraints durch Negativtests belegt"
FDN-03,Objekt-Storage-Abstraktion,⚙️ Fundament,Backend,Mittel,3,2,Fertig,"S3-kompatibel, Presigned URLs","Storage-Adapter mit einheitlicher Schnittstelle für Ablegen, Lesen, Löschen und signierte URLs. Lokaler Treiber für Entwicklung, S3 für Produktion.",FDN-01,DOC-01 QA-02 FDN-10,"Ein 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) gemeldet","Round-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"
FDN-04,Job-Queue & Worker-Runtime,⚙️ Fundament,Backend,Mittel,3,3,Fertig,"Postgres-Jobqueue (processing_jobs, FOR UPDATE SKIP LOCKED), In-Prozess-Worker-Goroutinen, kein Redis/AMQP","Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.",FDN-02,DOC-04 DOC-06 DOC-08 INT-03 QA-02 SRC-02 SRC-05 FDN-11,"Jobs werden zuverlässig eingereiht und verarbeitet
Fehlgeschlagene Jobs landen nach n Versuchen in der DLQ
Job-Status ist abfragbar","Absturz eines Workers führt zu erneuter Zustellung
Idempotenz bei Doppelzustellung nachgewiesen
DLQ-Eintrag manuell wiederholbar"
FDN-07,CI-Pipeline & Testharness,⚙️ Fundament,DevOps,Einfach,2,2,Fertig,"CI-Runner, Unit-/E2E-Testrunner","Automatisierte Pipeline für Lint, Typprüfung, Unit- und E2E-Tests sowie Build-Artefakt. Testdatenbank wird pro Lauf frisch aufgesetzt.",FDN-01,QA-01 QA-02,"Pipeline 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."
FDN-08,"Logging, Metriken & Fehler-Tracking",⚙️ Fundament,DevOps,Einfach,2,2,Fertig,"Strukturierte Logs, Metrics-Endpoint","Strukturiertes Logging mit Korrelations-ID, technische Metriken und zentrale Fehlererfassung inklusive Alarmierung.",FDN-01,QA-02,"Jede Anfrage besitzt eine Korrelations-ID über alle Schichten
Metriken für Latenz, Fehlerrate und Queue-Länge vorhanden
Unbehandelte Fehler werden zentral gemeldet","Provozierter Fehler erscheint innerhalb einer Minute im Tracking
Logs enthalten keine Passwörter oder Tokens
Alarm-Schwelle einmal ausgelöst und quittiert"
DOC-01,Upload-API & Chunk-Handling,🗂️ Dokumentenkern,Backend,Komplex,4,3,Fertig,tus.io / Multipart-Upload,"Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.",FDN-02 FDN-03 FDN-09,DOC-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-17,"Fortsetzbarer 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"
DOC-02,Dublettenerkennung,🗂️ Dokumentenkern,Backend,Einfach,2,4,Fertig,"SHA-256, Unique-Index","Prüfsumme jeder Datei berechnen, speichern und bei Upload gegen den Bestand prüfen. Nutzer entscheidet über Verwerfen oder bewusstes Duplikat.",DOC-01,SRC-02 SRC-05,"Prüfsumme wird bei jedem Upload persistiert
Treffer wird dem Nutzer mit Verweis auf das Original gemeldet
Bewusstes Duplikat ist möglich und wird markiert","Identische Datei zweimal hochgeladen erzeugt Warnung
Datei mit einem geänderten Byte gilt nicht als Duplikat
Prüfsummenberechnung bei Großdatei bleibt im Zeitbudget"
DOC-03,Drag-and-Drop-Upload-Oberfläche,🗂️ Dokumentenkern,Frontend,Mittel,3,4,Fertig,"Dropzone, Fortschrittsanzeige","Upload-Oberfläche mit Ablagebereich, Mehrfachauswahl, Fortschritt je Datei, Abbrechen und verständlichen Fehlermeldungen.",DOC-01,QA-03,"Mehrere Dateien gleichzeitig per Drag-and-Drop
Fortschritt und Status je Datei sichtbar
Fehlgeschlagene Datei einzeln wiederholbar","Upload per Tastatur und Dateidialog bedienbar
Verhalten bei Netzabbruch im Browser geprüft
Mobile Ansicht bleibt bedienbar"
DOC-04,Vorschau- & Thumbnail-Pipeline,🗂️ Dokumentenkern,Backend,Komplex,5,4,Fertig,"Renderer-Worker, Bildableitungen","Asynchrone Erzeugung von Seiten-Vorschauen und Thumbnails nach dem Upload, mit Cache und Wiederaufbau bei neuer Revision.",DOC-01 FDN-04,DOC-05 QA-10,"Thumbnail steht nach definierter Zeit bereit
Vorschau wird gecacht und bei neuer Revision erneuert
Fehlerhafte Datei blockiert die Pipeline nicht","Beschädigte PDF-Datei führt zu Fehlerstatus statt Absturz
Durchsatztest mit 500 Dokumenten
Cache-Invalidierung bei neuer Revision belegt"
DOC-05,PDF-Viewer-Komponente,🗂️ Dokumentenkern,Frontend,Komplex,4,5,Fertig,PDF.js im Web-Worker,"Inline-Betrachter mit Seitennavigation, Zoom, Suche im Dokument und Textauswahl – ohne Download-Zwang.",DOC-04,DOC-13 QA-03 VER-04,"PDF wird ohne Download angezeigt
Zoom, Blättern und Textsuche funktionieren
Große Dokumente werden seitenweise nachgeladen","300-seitiges PDF öffnet im Zeitbudget
Viewer per Tastatur bedienbar
Speicherverbrauch im Browser bleibt stabil"
DOC-06,Office-zu-PDF-Konverter,🗂️ Dokumentenkern,Backend,Komplex,4,4,Fertig,Headless-Konverter im Worker,"Serverseitige Konvertierung von Text-, Tabellen- und Präsentationsformaten in PDF als Vorschau- und Archivderivat.",FDN-04,QA-03 VER-07,"Gängige Office-Formate werden konvertiert
Konvertierung läuft isoliert mit Zeitlimit
Ergebnis wird als Derivat der Revision abgelegt","Layouttreue an Referenzdokumenten geprüft
Zeitlimit bei Endlosdokument greift
Konverter-Absturz beeinträchtigt andere Jobs nicht"
DOC-07,Download & signierte URLs,🗂️ Dokumentenkern,Backend,Einfach,2,4,Fertig,Presigned URLs,"Download von Original und Derivaten über kurzlebige signierte URLs, inklusive korrektem Dateinamen und Berechtigungsprüfung.",DOC-01,DOC-08,"Download liefert Originaldatei unverändert
URL läuft nach kurzer Frist ab
Ohne Leseberechtigung kein Download","Prüfsumme vor und nach Download identisch
Weitergegebene abgelaufene URL wird abgewiesen
Sonderzeichen im Dateinamen korrekt übertragen"
DOC-08,Massenexport als ZIP,🗂️ Dokumentenkern,Backend,Mittel,3,5,Fertig,"ZIP-Streaming, Export-Job","Auswahl mehrerer Dokumente als Hintergrund-Job zu einem Archiv bündeln, inklusive optionaler Metadaten-Datei und Download-Benachrichtigung.",DOC-07 FDN-04,QA-03 DOC-18,"Export läuft als Job und blockiert die Oberfläche nicht
Archiv enthält Dokumente und Metadaten-Beilage
Nur berechtigte Dokumente landen im Archiv","Export von 1000 Dokumenten ohne Speicherüberlauf
Archiv in gängigen Entpackern lesbar
Berechtigungsfilter durch Negativtest belegt"
DOC-09,Ordner- & Kabinettmodell,🗂️ Dokumentenkern,Backend,Mittel,3,3,Fertig,"Baumstruktur, Materialized Path","Hierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen.",FDN-02,DOC-10 DOC-11 DOC-14,"Beliebig tiefe Hierarchie abbildbar
Verschieben aktualisiert den gesamten Teilbaum
Teilbaum-Abfrage bleibt performant","Zyklus beim Verschieben wird verhindert
Abfrage bei 10.000 Ordnern im Zeitbudget
Umbenennen bricht keine Verweise"
DOC-10,Ordner-Navigation & Dokumentenliste,🗂️ Dokumentenkern,Frontend,Mittel,3,4,Fertig,"Baum-Navigation, virtualisierte Liste","Navigationsbaum, Brotkrumenpfad und virtualisierte Dokumentenliste mit Sortierung, Spaltenwahl und Mehrfachauswahl.",DOC-09,QA-03,"Baum und Liste bleiben synchron
Liste bleibt bei vielen Einträgen flüssig
Mehrfachauswahl mit Umschalt- und Strg-Taste","Liste mit 10.000 Zeilen scrollt ruckelfrei
Navigation vollständig per Tastatur
Zustand bleibt beim Zurücknavigieren erhalten"
DOC-11,Soft-Delete & Papierkorb-Logik,🗂️ Dokumentenkern,Backend,Einfach,2,4,Fertig,"Soft-Delete, Aufräum-Job",Löschen setzt einen Papierkorb-Status statt physischer Entfernung. Endgültige Bereinigung erfolgt nach konfigurierbarer Frist.,DOC-09,DOC-12,"Gelöschte Objekte verschwinden aus allen normalen Ansichten
Wiederherstellung stellt Ablageort und Metadaten wieder her
Endgültige Löschung entfernt auch die Dateiobjekte","Gelöschtes Dokument taucht in Suche und Liste nicht mehr auf
Wiederherstellung nach Ordnerlöschung getestet
Aufräum-Job löscht nur abgelaufene Einträge"
DOC-12,Papierkorb-Oberfläche,🗂️ Dokumentenkern,Frontend,Einfach,2,5,Fertig,"Listenansicht, Bestätigungsdialog","Ansicht des Papierkorbs mit Restlaufzeit, Einzel- und Massenwiederherstellung sowie bestätigter endgültiger Löschung.",DOC-11,QA-03,"Restlaufzeit je Eintrag sichtbar
Wiederherstellung einzeln und in Auswahl möglich
Endgültiges Löschen erfordert ausdrückliche Bestätigung","Versehentliches Löschen ohne Bestätigung nicht möglich
Massenwiederherstellung mit 100 Objekten geprüft
Leerer Papierkorb zeigt verständlichen Hinweis"
SRC-01,Suchindex-Infrastruktur,🔍 Suche & OCR,DevOps,Mittel,3,2,Fertig,Manticore Search (BM25),"Suchdienst bereitstellen, Index-Schema mit deutscher Sprachbehandlung definieren und Betriebsparameter festlegen.",FDN-01,SRC-02,"Suchdienst ist reproduzierbar startbar
Index-Schema mit Feldern und Gewichtung dokumentiert
Deutsche Stemming- und Stoppwortbehandlung aktiv","Neuaufbau des Index aus dem Bestand möglich
Umlaut- und Kompositasuche liefert Treffer
Neustart des Dienstes ohne Datenverlust"
SRC-02,Indexierungs-Worker & Synchronisierung,🔍 Suche & OCR,Backend,Komplex,4,5,Fertig,"Queue-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-02,SRC-03,"Neues Dokument ist zeitnah auffindbar
Änderung und Löschung werden im Index nachgezogen
Voll-Reindexierung ohne Ausfall möglich","Konsistenzabgleich Datenbank gegen Index ergibt keine Abweichung
Indexierung von 10.000 Dokumenten im Zeitbudget
Ausfall des Suchdienstes führt zu Nachholung statt Datenverlust"
SRC-03,Such-API mit Ranking,🔍 Suche & OCR,Backend,Mittel,3,6,Fertig,"Suchabfrage, Relevanz-Tuning","Suchschnittstelle mit Paginierung, Sortierung, Treffer-Ausschnitten und Berücksichtigung der Leseberechtigung.",SRC-02,QA-10 SRC-04 SRC-08,"Ergebnisse enthalten Textausschnitte mit Fundstellen
Nur berechtigte Dokumente erscheinen
Antwortzeit unter vereinbartem Grenzwert","Referenz-Suchanfragen liefern erwartete Reihenfolge
Berechtigungsfilter durch Negativtest belegt
Lasttest mit gleichzeitigen Suchanfragen bestanden"
SRC-04,Such-Oberfläche mit Hervorhebung,🔍 Suche & OCR,Frontend,Mittel,3,7,Fertig,"Suchfeld, Ergebnisliste","Suchfeld mit Vorschlägen, Ergebnisliste mit hervorgehobenen Fundstellen und Sprung in die Dokumentvorschau.",SRC-03,QA-04 SRC-09,"Fundstellen sind im Ergebnis hervorgehoben
Kein Ergebnis liefert hilfreiche Alternativvorschläge
Suchzustand ist per URL teilbar","Suche vollständig per Tastatur bedienbar
Verhalten bei sehr langem Suchbegriff geprüft
Ergebnisliste auf Mobilgerät nutzbar"
SRC-05,OCR-Worker,🔍 Suche & OCR,Backend,Komplex,5,5,Fertig,"Tesseract, Bildvorverarbeitung","Texterkennung für Scans und Bilder inklusive Entzerrung, Rauschunterdrückung und Speicherung des Volltexts je Seite.",FDN-04 DOC-01 DOC-02,INT-06 MET-05 SRC-06 SRC-07,"Erkannter Text wird seitenweise gespeichert
Bereits durchsuchbare PDFs werden übersprungen
Verarbeitung skaliert über mehrere Worker","Erkennungsrate an Referenz-Scanset gemessen und dokumentiert
Schiefer Scan wird korrekt entzerrt
Sehr großes Dokument läuft nicht in Zeitüberschreitung"
SRC-06,PDF/A-Erzeugung mit Textebene,🔍 Suche & OCR,Backend,Mittel,3,6,Fertig,"PDF/A-Konverter, Textlayer",Archivfähiges PDF/A mit unsichtbarer Textebene aus der Texterkennung als zusätzliches Derivat erzeugen.,SRC-05,QA-04,"Erzeugtes PDF ist PDF/A-konform
Text ist im Dokument markier- und durchsuchbar
Original bleibt unverändert erhalten","Konformitätsprüfung mit Validierungswerkzeug bestanden
Textposition deckt sich mit dem Bild
Dateigröße bleibt im vereinbarten Rahmen"
SRC-07,Spracherkennung & OCR-Qualitätsbewertung,🔍 Suche & OCR,Backend,Einfach,2,6,Fertig,"Spracherkennung, Konfidenzwerte","Dokumentsprache automatisch bestimmen, passendes Sprachmodell wählen und Konfidenzwerte für eine Nachbearbeitungsliste erfassen.",SRC-05,QA-04,"Sprache wird erkannt und am Dokument gespeichert
Konfidenzwert je Seite verfügbar
Dokumente unter Schwellwert erscheinen in einer Prüfliste","Spracherkennung an gemischtsprachigem Set geprüft
Schlechter Scan landet zuverlässig in der Prüfliste
Schwellwert ist ohne Neuveröffentlichung konfigurierbar"
SRC-08,Facetten- & Filter-API,🔍 Suche & OCR,Backend,Mittel,3,7,Fertig,"Facettierung, Filterausdrücke","Kombinierbare Filter nach Typ, Tag, Datum, Ersteller und benutzerdefinierten Feldern samt Trefferzahlen je Facette.",SRC-03 MET-02,SRC-09 SRC-10,"Mehrere Filter sind gleichzeitig kombinierbar
Facetten liefern korrekte Trefferzahlen
Datums- und Wertebereiche werden unterstützt","Trefferzahlen gegen Datenbankabfrage abgeglichen
Filter auf leerem Ergebnis verhält sich stabil
Antwortzeit mit fünf aktiven Filtern gemessen"
SRC-09,Filter-Panel in der Suche,🔍 Suche & OCR,Frontend,Mittel,3,8,Fertig,"Facetten-UI, Filter-Chips",Seitliches Filterpanel mit aktiven Filtern als entfernbare Chips und Zurücksetzen-Funktion.,SRC-08 SRC-04,QA-04,"Aktive Filter sind jederzeit sichtbar und einzeln entfernbar
Trefferzahl aktualisiert sich unmittelbar
Filterzustand steht in der URL","Geteilte URL stellt identischen Filterzustand her
Panel auf schmalem Bildschirm bedienbar
Zurücksetzen entfernt wirklich alle Filter"
SRC-10,Gespeicherte Suchanfragen,🔍 Suche & OCR,Fullstack,Einfach,2,8,Fertig,Persistierte Abfragen,"Suchen benennen, speichern, erneut ausführen und optional mit dem Team teilen.",SRC-08,QA-04,"Suche lässt sich benennen und wiederherstellen
Geteilte Suche ist für Berechtigte sichtbar
Ergebnis wird beim Aufruf frisch ermittelt","Gespeicherte Suche liefert nach Datenänderung aktuelle Treffer
Geteilte Suche zeigt jedem nur erlaubte Dokumente
Löschen einer Suche beeinträchtigt andere Nutzer nicht"
MET-01,Tag-Modell & Tag-API,🏷️ Metadaten,Backend,Einfach,2,3,Fertig,"Tag-Entität, Zuordnungstabelle","Tags mit Farbe und optionaler Hierarchie, Zuordnung zu Dokumenten sowie Zusammenführen und Umbenennen.",FDN-02,DOC-15 MET-03 MET-05,"Tags sind anlegbar, umbenennbar und zusammenführbar
Mehrfachzuordnung je Dokument möglich
Löschen eines Tags entfernt nur die Zuordnung","Zusammenführen erhält alle Zuordnungen
Doppelte Tag-Namen werden verhindert
Massenzuweisung an 500 Dokumente geprüft"
MET-02,Benutzerdefinierte Metadatenfelder,🏷️ Metadaten,Backend,Komplex,4,3,Fertig,"Feldschema, Validierung","Frei definierbare Felder mit Datentyp, Pflichtkennzeichen, Standardwert und Validierungsregeln.",FDN-02,MET-03 MET-04 SRC-08,"Feldtypen Text, Zahl, Datum, Auswahl und Ja/Nein verfügbar
Validierung greift beim Speichern
Felddefinition ist versioniert änderbar","Ungültiger Wert wird mit klarer Meldung abgewiesen
Typänderung eines Feldes mit Bestandsdaten getestet
Pflichtfeld blockiert unvollständiges Speichern"
MET-03,Metadaten- & Tag-Oberfläche,🏷️ Metadaten,Frontend,Mittel,3,4,Fertig,Dynamische Formulare,"Bearbeitungsbereich am Dokument mit dynamisch erzeugtem Formular, Tag-Eingabe mit Autovervollständigung und Massenbearbeitung.",MET-01 MET-02,QA-05,"Formular passt sich der Felddefinition automatisch an
Tag-Eingabe schlägt bestehende Tags vor
Massenbearbeitung für ausgewählte Dokumente möglich","Ungespeicherte Änderungen lösen Warnung aus
Formular per Tastatur vollständig ausfüllbar
Massenbearbeitung an 200 Dokumenten geprüft"
MET-04,Dokumententypen & Vorlagen,🏷️ Metadaten,Backend,Mittel,3,4,Fertig,"Typdefinition, Feldbindung","Dokumententypen wie Rechnung oder Vertrag mit fest zugeordneten Pflichtfeldern, Standard-Tags und Aufbewahrungsvorgabe.",MET-02,QA-05,"Typ bündelt Felder, Tags und Aufbewahrungsvorgabe
Typwechsel überführt vorhandene Werte
Typ ist an Ordner vorbelegbar","Typwechsel mit Datenverlustprüfung getestet
Pflichtfelder des Typs werden erzwungen
Vorbelegung im Ordner greift beim Upload"
MET-05,Regelbasierte Auto-Verschlagwortung,🏷️ Metadaten,Backend,Mittel,3,6,Fertig,"Regelwerk, Mustererkennung","Regeln auf Basis von Textmustern, Absender oder Dateiname vergeben automatisch Tags, Typ und Ablageort.",MET-01 SRC-05,INT-04 QA-05,"Regeln sind ohne Eingriff in den Code pflegbar
Reihenfolge und Priorität der Regeln sind steuerbar
Automatische Zuweisung ist als solche erkennbar","Regelwerk an Testkorpus mit erwarteter Trefferquote geprüft
Widersprüchliche Regeln führen zu definiertem Ergebnis
Regeländerung wirkt ohne Neustart"
VER-01,Versionsmodell & Check-in/Check-out,🔄 Versionierung & Audit,Backend,Komplex,4,4,Fertig,"Revisionen, Sperren","Jede Änderung erzeugt eine neue Revision. Ausleihen sperrt das Dokument für andere, Einchecken gibt es mit Kommentar frei.",DOC-01 FDN-02,VER-02 VER-03 VER-07,"Alle Revisionen bleiben abrufbar
Sperre verhindert konkurrierende Änderungen
Sperre ist durch Administratoren aufhebbar","Zwei gleichzeitige Ausleihversuche – nur einer gewinnt
Verwaiste Sperre wird nach Frist automatisch gelöst
Alte Revision ist unverändert abrufbar"
VER-02,Versionsansicht & Wiederherstellung,🔄 Versionierung & Audit,Frontend,Mittel,3,5,Fertig,"Versionsliste, Wiederherstellen","Liste aller Revisionen mit Autor, Zeitpunkt und Kommentar sowie Wiederherstellung einer früheren Fassung als neue Revision.",VER-01,QA-08,"Revisionen chronologisch mit Metadaten sichtbar
Wiederherstellung erzeugt eine neue Revision statt Überschreiben
Jede Revision ist einzeln herunterladbar","Wiederherstellung verändert die Historie nicht
Ansicht bei 100 Revisionen bleibt übersichtlich
Berechtigung wird je Revision geprüft"
VER-03,Änderungshistorie & Diff-Berechnung,🔄 Versionierung & Audit,Backend,Mittel,3,5,Fertig,"Textvergleich, Metadaten-Diff",Unterschiede zwischen zwei Revisionen ermitteln – sowohl im Volltext als auch in Metadaten und Tags.,VER-01,VER-04,"Textunterschiede werden zeilen- oder absatzweise geliefert
Metadatenänderungen werden als Vorher-Nachher ausgegeben
Berechnung ist auch für große Dokumente möglich","Diff an Referenzpaaren gegen erwartetes Ergebnis geprüft
Vergleich zweier identischer Revisionen liefert leeres Ergebnis
Laufzeit bei 200-seitigem Dokument gemessen"
VER-04,Diff-Ansicht,🔄 Versionierung & Audit,Frontend,Mittel,3,6,Fertig,"Gegenüberstellung, Farbmarkierung","Zwei Revisionen nebeneinander mit farblicher Markierung von Hinzufügungen, Löschungen und Metadatenänderungen.",VER-03 DOC-05,QA-08,"Revisionen sind frei zum Vergleich wählbar
Änderungen sind farblich und mit Symbol gekennzeichnet
Sprung zur nächsten Änderung möglich","Farbmarkierung ist auch ohne Farbwahrnehmung unterscheidbar
Ansicht funktioniert auf schmalem Bildschirm
Sehr viele Änderungen bremsen die Ansicht nicht aus"
VER-05,Revisionssicherer Audit-Trail,🔄 Versionierung & Audit,Backend,Komplex,4,3,Fertig,"Append-only-Protokoll, Hash-Kette",Unveränderliches Protokoll aller sicherheits- und geschäftsrelevanten Ereignisse mit Verkettung zum Nachweis der Unversehrtheit.,FDN-02,VER-06 VER-08,"Einträge sind ausschließlich anfügbar
Jeder Eintrag enthält Akteur, Zeit, Objekt und Aktion
Verkettung erlaubt Integritätsprüfung","Manipulationsversuch wird durch Integritätsprüfung erkannt
Vollständigkeit gegen Referenzoperationen abgeglichen
Protokollschreiben verlangsamt Kernoperationen nicht spürbar"
VER-06,Audit-Log-Ansicht & Export,🔄 Versionierung & Audit,Frontend,Einfach,2,4,Fertig,"Filterbare Tabelle, CSV-Export","Durchsuchbare Protokollansicht mit Filtern nach Zeitraum, Akteur, Objekt und Aktion sowie Export für Prüfer.",VER-05,QA-08,"Filter nach Zeitraum, Akteur und Aktion vorhanden
Export enthält exakt die gefilterten Einträge
Zugriff nur für berechtigte Rollen","Export mit 100.000 Einträgen läuft ohne Abbruch
Nicht berechtigter Nutzer erhält keinen Zugriff
Exportdatei ist in Tabellenkalkulation korrekt lesbar"
VER-07,Digitale Signatur,🔄 Versionierung & Audit,Backend,Komplex,5,5,Fertig,"PAdES, Zertifikate, Zeitstempel","Dokumente digital signieren und vorhandene Signaturen prüfen, inklusive qualifiziertem Zeitstempel.",VER-01 DOC-06,QA-08,"Signatur wird eingebettet und ist extern prüfbar
Prüfergebnis wird am Dokument angezeigt
Zeitstempel stammt von einer vertrauenswürdigen Quelle","Signatur mit externem Prüfwerkzeug validiert
Nachträgliche Änderung invalidiert die Signatur nachweislich
Abgelaufenes Zertifikat wird als solches erkannt"
INT-01,REST-API v1 & Schnittstellenbeschreibung,🔌 Integration & API,Backend,Komplex,4,4,Fertig,"REST, OpenAPI","Dokument-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-01,INT-09 QA-10,"Alle 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 Versionierung","Vertragstests gegen die Beschreibung laufen in der Pipeline
Berechtigungen greifen identisch wie in der Oberfläche
Beispielaufrufe aus der Dokumentation funktionieren"
INT-03,E-Mail-Abruf über IMAP,🔌 Integration & API,Backend,Komplex,4,4,Fertig,"IMAP-Client, Job-Zeitplan","Überwachte Postfächer regelmäßig abrufen, Nachrichten und Anhänge importieren und verarbeitete Nachrichten markieren.",FDN-04 DOC-01,INT-04,"Mehrere Postfächer parallel überwachbar
Nachricht und Anhänge werden als Dokumente abgelegt
Verarbeitete Nachrichten werden nicht erneut importiert","Verbindungsabbruch führt zu Wiederholung ohne Duplikate
Nachricht mit 20 Anhängen korrekt importiert
Zugangsdaten liegen ausschließlich verschlüsselt vor"
INT-04,E-Mail-Regeln & Anhangverarbeitung,🔌 Integration & API,Backend,Mittel,3,7,Fertig,"Regelwerk, Anhangfilter","Regeln nach Absender, Betreff oder Anhangtyp steuern Ablageort, Typ und Verschlagwortung importierter Nachrichten.",INT-03 MET-05,QA-09,"Regeln greifen auf Absender, Betreff und Anhangtyp zu
Signaturbilder und Werbeanhänge sind ausfilterbar
Nachricht bleibt als Kontext am Dokument erhalten","Regelwerk an Testpostfach mit erwarteter Zuordnung geprüft
Nachricht ohne passende Regel landet im Klärungskorb
Filter verwirft keine relevanten Anhänge"
INT-06,Scanner-Anbindung über Hot-Folder,🔌 Integration & API,Backend,Komplex,4,6,Fertig,"Überwachter Ordner, Trennseiten","Überwachtes Verzeichnis für Netzwerkscanner mit Stapeltrennung, automatischer Texterkennung und Ablage.",DOC-01 SRC-05,INT-10 QA-09 INT-14,"Neue Dateien werden automatisch übernommen
Stapel werden anhand von Trennseiten aufgeteilt
Fehlerhafte Dateien landen in einem Fehlerordner","Datei wird erst nach vollständigem Schreiben verarbeitet
Stapeltrennung an Referenzstapel geprüft
Doppelte Einlieferung erzeugt kein Duplikat"
UX-01,Responsive Layout & mobile Navigation,📱 UX & Zugänglichkeit,Frontend,Mittel,3,1,Fertig,"Breakpoints, mobile Muster","Alle Kernansichten für kleine Bildschirme optimieren, mit ausklappbarer Navigation und berührungsfreundlichen Zielen.",,UX-05,"Kernablä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"
UX-02,Dunkles Erscheinungsbild & Theming,📱 UX & Zugänglichkeit,Frontend,Einfach,2,1,Fertig,"Theme-Tokens, Systempräferenz",Umschaltbares helles und dunkles Erscheinungsbild mit Speicherung der Wahl und Berücksichtigung der Systemeinstellung.,,UX-05,"Umschaltung wirkt ohne Neuladen
Wahl bleibt über Sitzungen erhalten
Systemeinstellung wird als Voreinstellung übernommen","Kontrastprüfung in beiden Varianten bestanden
Kein Aufblitzen des falschen Erscheinungsbilds beim Laden
Diagramme und Vorschauen bleiben lesbar"
UX-03,Mehrsprachigkeits-Infrastruktur,📱 UX & Zugänglichkeit,Frontend,Mittel,3,1,Fertig,"i18n-Bibliothek, Sprachdateien","Alle Texte auslagern, Sprachumschaltung sowie lokale Formate für Datum, Zahl und Währung bereitstellen.",,UX-04,"Keine fest verdrahteten Texte mehr in Komponenten
Sprachwechsel wirkt ohne Neuladen
Datums- und Zahlenformate folgen der Sprache","Automatische 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"
UX-04,Übersetzungen Deutsch und Englisch,📱 UX & Zugänglichkeit,Frontend,Einfach,2,2,Fertig,"Sprachdateien, Terminologieliste",Vollständige Übersetzung der Oberfläche in beide Sprachen inklusive abgestimmter Fachbegriffe.,UX-03,QA-11,"Beide Sprachdateien sind vollständig
Fachbegriffe folgen einer abgestimmten Liste
Fehlermeldungen sind ebenfalls übersetzt","Abdeckungsprüfung beider Sprachdateien bei 100 Prozent
Sichtprüfung auf abgeschnittene Texte in beiden Sprachen
Fachliche Gegenlesung dokumentiert"
UX-05,Barrierefreiheit nach WCAG 2.1 AA,📱 UX & Zugänglichkeit,Frontend,Komplex,4,2,Fertig,"ARIA, Fokussteuerung","Semantik, Fokusführung, Tastaturbedienung, Beschriftungen und Kontraste über alle Ansichten hinweg herstellen.",UX-01 UX-02,QA-11,"Alle Abläufe ohne Maus bedienbar
Sichtbare Fokusmarkierung überall vorhanden
Formularfelder besitzen zugeordnete Beschriftungen","Automatisierte Prüfung meldet keine kritischen Verstöße
Vollständiger Durchlauf mit Bildschirmleser dokumentiert
Fokusfalle in Dialogen geprüft"
QA-01,Teststrategie & Testdatenbestand,✅ Prüfungen & Qualitätssicherung,QA,Einfach,2,3,Fertig,"Teststrategie, anonymisierte Testdaten","Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.",FDN-07,QA-03 QA-04 QA-05 QA-07 QA-10,"Testpyramide 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-01","Testdatenbestand ist per Befehl reproduzierbar
Referenzkorpus deckt alle unterstützten Formate ab
Strategie im Team abgenommen"
QA-02,Prüfgate Fundament,✅ Prüfungen & Qualitätssicherung,QA,Einfach,2,4,Fertig,"Integrationstests, Betriebsprüfung","Abnahme der Grundlage: Datenmodell, Storage, Queue, Auth, Pipeline und Observability greifen zuverlässig ineinander.",FDN-02 FDN-03 FDN-04 FDN-07 FDN-08 FDN-09,QA-12,"Alle 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üft","Neuaufsetzen der Umgebung von null erfolgreich
Ausfall eines Dienstes führt zu sauberem Fehlerbild
Prüfbericht abgelegt und freigegeben"
QA-03,Prüfgate Dokumentenkern,✅ Prüfungen & Qualitätssicherung,QA,Mittel,3,6,Fertig,"E2E-Tests, Datenintegrität","Vollstä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-15,QA-12,"Kompletter Lebenszyklus als automatisierter Test vorhanden
Keine Datenveränderung zwischen Upload und Download
Alle Ticket-Prüfungen des Epics bestanden","Prüfsummenvergleich über den gesamten Lebenszyklus
Abbruchszenarien in jedem Schritt getestet
Referenzkorpus vollständig durchlaufen"
QA-04,Prüfgate Suche & Texterkennung,✅ Prüfungen & Qualitätssicherung,QA,Mittel,3,9,Fertig,Relevanz- und Erkennungsmessung,"Messen und dokumentieren von Erkennungsgüte, Trefferqualität und Konsistenz zwischen Datenbank und Suchindex.",SRC-04 SRC-06 SRC-07 SRC-09 SRC-10 QA-01,QA-12 QA-06,"Erkennungsrate am Referenzkorpus erreicht den Zielwert
Relevanz an definierten Suchanfragen erfüllt die Erwartung
Index und Datenbank sind nachweislich konsistent","Messprotokoll mit Zielwerten und Ergebnissen abgelegt
Voll-Reindexierung ohne Trefferverlust geprüft
Berechtigungsfilter in der Suche negativ getestet"
QA-05,Prüfgate Metadaten & Klassifizierung,✅ Prüfungen & Qualitätssicherung,QA,Einfach,2,7,Fertig,Datenqualitätstests,"Prüfen von Feldvalidierung, Typwechseln, Massenbearbeitung und Güte der automatischen Zuordnung.",MET-03 MET-04 QA-01 MET-05,QA-12,"Validierungsregeln greifen in allen Eingabewegen
Automatische Vorschläge erreichen die Zielgenauigkeit
Massenbearbeitung erzeugt keine inkonsistenten Daten","Genauigkeit der Klassifizierung dokumentiert
Typwechsel mit Bestandsdaten ohne Verlust
Validierung auch über die Schnittstelle wirksam"
QA-06,Sicherheits- & Berechtigungsprüfung,✅ Prüfungen & Qualitätssicherung,QA,Komplex,4,10,Fertig,"Penetrationstest, Rollenmatrix",Systematische Prüfung aller Zugriffspfade gegen die Rollenmatrix sowie Test auf gängige Sicherheitslücken.,QA-04 SRC-11,QA-12,"Jede Rolle wurde gegen jeden Endpunkt geprüft
Keine unbefugte Rechteausweitung möglich
Befunde sind behoben oder bewusst akzeptiert","Zugriff auf fremdes Objekt per ID schlägt fehl
Prüfung auf Einschleusung, Sitzungsübernahme und unsichere Weiterleitung
Sicherheitsbericht abgelegt und freigegeben"
QA-07,Prüfgate Workflow & Benachrichtigung,✅ Prüfungen & Qualitätssicherung,QA,Mittel,3,4,Fertig,"Prozesstests, Zeitraffer","Durchspielen aller Prozesspfade inklusive Ablehnung, Vertretung, Eskalation und Fristablauf.",QA-01,QA-12,"Alle Prozesspfade sind mindestens einmal durchlaufen
Fristen und Eskalationen lösen korrekt aus
Keine Benachrichtigung geht verloren oder wird doppelt versandt","Zeitraffer-Test über simulierte Fristen
Parallelentscheidungen erzeugen keinen Fehlzustand
Zustellprotokoll gegen erwartete Ereignisse abgeglichen"
QA-08,Revisionssicherheits-Prüfung,✅ Prüfungen & Qualitätssicherung,QA,Mittel,3,7,Fertig,"Integritätsprüfung, Signaturvalidierung","Nachweis, dass Versionen, Protokoll und Signaturen unveränderlich, vollständig und extern prüfbar sind.",VER-02 VER-04 VER-06 VER-07,QA-12,"Historie ist lückenlos und nicht manipulierbar
Signaturen sind mit externen Werkzeugen prüfbar
Jede relevante Aktion erscheint im Protokoll","Manipulationsversuch wird erkannt und protokolliert
Stichprobe von Aktionen im Protokoll wiedergefunden
Prüfbericht für die Revision erstellt"
QA-09,Schnittstellen-Vertragstests,✅ Prüfungen & Qualitätssicherung,QA,Mittel,3,8,Fertig,"Vertragstests, Testempfänger","Automatisierte 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-13,QA-12,"Vertragstests laufen in der Pipeline
Import über E-Mail und Hot-Folder verliert keine Dokumente
Webhook-Zustellung ist nachweisbar","Abweichung zwischen Beschreibung und Verhalten bricht die Pipeline
Dauerlauf-Import über 24 Stunden ohne Verlust
Wiederholungsverhalten bei Ausfall belegt"
QA-10,Last- & Leistungstest,✅ Prüfungen & Qualitätssicherung,QA,Komplex,4,7,Backlog,"Lastgenerator, Messprotokoll","Verhalten unter realistischer und überhöhter Last messen: Suche, Upload, Vorschau und Schnittstelle.",SRC-03 DOC-04 INT-01 QA-01,QA-12,"Zielwerte für Antwortzeit und Durchsatz sind definiert und gemessen
Engpässe sind identifiziert und dokumentiert
System erholt sich nach Lastspitze selbstständig","Dauerlast über mehrere Stunden ohne Speicherwachstum
Verhalten bei Überlast ist definiert statt zufällig
Messprotokoll mit Zielwertvergleich abgelegt"
QA-11,Barrierefreiheits-Audit,✅ Prüfungen & Qualitätssicherung,QA,Mittel,3,3,Fertig,"Prüfwerkzeuge, Bildschirmleser",Unabhängige Prüfung aller Ansichten gegen WCAG 2.1 AA mit Werkzeugen und manuellem Durchlauf.,UX-04 UX-05,QA-12,"Keine kritischen Verstöße offen
Manueller Bildschirmleser-Durchlauf dokumentiert
Restbefunde sind mit Frist eingeplant","Automatisierte Prüfung über alle Hauptseiten
Vollständiger Ablauf ohne Maus durchgeführt
Auditbericht abgelegt"
QA-12,Abnahme- & Compliance-Prüfung,✅ Prüfungen & Qualitätssicherung,QA,Komplex,4,11,Backlog,"Abnahmeprotokoll, Wiederherstellungstest","Gesamtabnahme 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-11,,"Alle Prüfgates sind bestanden
Wiederherstellung wurde real durchgeführt
Abnahmeprotokoll ist unterzeichnet","Notfallwiederherstellung auf leerem System nachgewiesen
Löschung nur mit Freigabe und Protokoll möglich
Offene Restrisiken sind schriftlich benannt"
FDN-09,Verschlüsselung at rest & Schlüsselverwaltung,⚙️ Fundament,Backend,Mittel,3,2,Fertig,"AES-256-GCM, Envelope Encryption","Envelope-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-01,DOC-01 QA-02,"DEK 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"
DOC-13,Akten-/Vorgangsanzeige im Dokumentkontext,🗂️ Dokumentenkern,Frontend,Einfach,2,6,Fertig,"Next.js/React/TS, externe REST-API","In 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-05,QA-03,"Dokument-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"
INT-08,Watch-Folder-Import (Consume-Ordner),🔌 Integration & API,Backend,Mittel,3,4,Fertig,"Überwachter Ordner, Dateisystem-Events/Polling","Dateisystem-Ordner, der automatisch überwacht wird — jede dort abgelegte Datei wird ohne API-Aufruf importiert. Ergänzt DOC-01 (Upload-API), ersetzt sie nicht.",DOC-01,QA-09 INT-14,"Datei 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 blockieren","Testdatei 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"
INT-09,CMIS-kompatible Schnittstelle (optional),🔌 Integration & API,Backend,Komplex,4,5,Fertig,CMIS 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-01,QA-09 INT-15,"CMIS-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 Zwangsbestandteil","Test 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"
INT-10,Scanner-Stapelverarbeitung mit Trennseiten-/Barcode-Erkennung,🔌 Integration & API,Backend,Mittel,3,7,Fertig,"Leerseiten-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-06,QA-09,"Leere 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 Fehlverhalten","Test-Stapel mit Leerseiten-Trennung ergibt korrekte Anzahl Einzeldokumente
Test-Stapel mit Barcode-Trennseiten ordnet Barcode-Werte korrekt zu
Stapel ohne Trennseiten bleibt ein Dokument"
DOC-14,Dokument-Zusammenführen & -Aufteilen,🗂️ Dokumentenkern,Backend,Mittel,3,4,Fertig,"PDF-Seitenmanipulation, Versionshistorie, Transaktionale Dokument-Operationen","Nachträ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-09,QA-03,"Mehrere 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 werden","Test: 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"
DOC-15,Massenbearbeitung von Metadaten,🗂️ Dokumentenkern,Backend,Mittel,3,4,Fertig,"Massenoperation über Dokumentauswahl, transaktionale Verarbeitung","Mehrere 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-01,QA-03,"Tag/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 umgangen","Test: 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"
INT-11,Archive-Anbindung: Objekttyp-Registrierung & Retention-Abfrage,🔌 Integration & API,Backend,Mittel,3,4,Fertig,"HTTP-Client gegen Archive-Modul-Adapter-Schnittstelle, Aufbewahrungsklassen-Mapping","Dokument-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-01,QA-09 INT-16,"Dokument-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ührt","Registrierung 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"
INT-12,AI-Anbindung: Objekttyp-Registrierung (Kopplung AI GOV-01),🔌 Integration & API,Backend,Mittel,2,4,Fertig,"HTTP-Client gegen AI-Modul-Adapter-Schnittstelle, Feld-Mapping","Dokument-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-01,QA-09 INT-16,"Dokument-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"
INT-13,Workflow-Anbindung: Objekttyp- & Auslöser-Registrierung (Kopplung Workflow ENG-02),🔌 Integration & API,Backend,Mittel,3,4,Fertig,"HTTP-Client gegen Workflow-Modul-Adapter-Schnittstelle, Ereignis-Publisher","Dokument-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-01,QA-09 INT-16,"Dokument-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)"
SRC-11,Feld-Whitelist-Query-Builder für Suchindex-Zugriff,🔍 Suche & OCR,Backend,Einfach,1,3,Fertig,"Statisches Enum/Switch für Feldnamen, getesteter Query-Builder","Zentraler, 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-01,QA-06,"Spalten-/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 zentralisieren","Versuch, 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"
DOC-16,RET-05-Client: Aufbewahrungsklasse registrieren & Vernichtungs-Rückruf,🗂️ Dokumentenkern,Backend,Mittel,3,5,Fertig,"HTTP-Client gegen Archive RET-05, Rückruf-Endpunkt, Postgres-Jobqueue (FDN-04) für Requeue","DMS 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-09,,"DMS 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 Verwerfen","Registrierung 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"
INT-14,Tenant-Zuordnung & Zugriffsschutz für Hot-Folder/Scanner-Verzeichnisse,🔌 Integration & API,Backend,Mittel,2,12,Fertig,"Dateisystem-Zugriffsrechte, Verzeichnisstruktur je Tenant, Go","INT-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-08,,"Jedes 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 Betriebsanleitung","Test: 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"
INT-15,CMIS-Schnittstelle: Auth-/Tenant-Scoping-Parität zur REST-API,🔌 Integration & API,Backend,Mittel,2,12,Fertig,"CMIS, gemeinsame Auth-Middleware, Go","INT-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-09,,"CMIS-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 Autorisierungsverhalten","Test: 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"
INT-16,Nutzer-Tenant-Kontext in Modul-Rückkanälen (Archive/AI/Workflow),🔌 Integration & API,Backend,Mittel,2,12,Fertig,"Service-Credentials (Core API-02), Tenant-Kontext-Weiterreichung, Go","INT-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-13,,"Jeder 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 protokolliert","Test: 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"
DOC-17,Malware-Scan vor Ablage,🗂️ Dokumentenkern,Backend,Mittel,2,12,Fertig,"Virenscanner-Anbindung (z. B. ClamAV), Go, Postgres-Jobqueue","DOC-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-01,,"Jede 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"
FDN-10,Signierte URLs: Scope-Bindung & kurze Ablaufzeit,⚙️ Fundament,Backend,Einfach,1,12,Fertig,"Storage-Adapter (S3-kompatibel), signierte URLs, Go","FDN-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-03,,"Eine 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 Zugriff","Test: 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"
FDN-11,Ressourcenlimits für asynchrone Verarbeitungsjobs,⚙️ Fundament,Backend,Mittel,2,12,Fertig,"Postgres-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-04,,"Jeder 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 unbeeinflusst","Test 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"
VER-08,Technische Durchsetzung Append-only für das Versionierungs-/Ereignisprotokoll,🔄 Versionierung & Audit,Backend,Einfach,2,12,Fertig,"PostgreSQL (REVOKE/Trigger), Go","VER-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-05,,"Die 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 nutzbar","Testet 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"
DOC-18,Obergrenze für Gesamtgröße/Anzahl bei Archiv-Bündelung,🗂️ Dokumentenkern,Backend,Einfach,1,13,Fertig,"Postgres-Jobqueue, Ressourcenlimits, Go","DOC-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-08,,"Eine 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 verankert","Test: 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"
1 Code Titel Epic Rolle Komplexitaet Aufwand_PT Welle Status Technik Beschreibung Haengt_ab_von Schaltet_frei Akzeptanzkriterien Pruefungen
2 FDN-01 Repository & Projektgerüst ⚙️ Fundament DevOps Einfach 2 1 Fertig Monorepo, Go, Next.js/TypeScript, golangci-lint, Prettier Repository 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-01 Repo lässt sich mit einem Befehl installieren und starten Lint- und Format-Checks laufen lokal durch Branch- und Commit-Konvention dokumentiert Frischer Clone baut ohne manuelle Nacharbeit Lint-Fehler brechen den Build ab README-Setupanleitung von zweiter Person nachvollzogen
3 FDN-02 Datenmodell & Migrationen ⚙️ Fundament Backend Mittel 3 2 Fertig PostgreSQL, pgx/v5, SQL-Migrationsdateien (kein ORM) Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar. FDN-01 DOC-01 DOC-09 FDN-04 MET-01 MET-02 QA-02 VER-01 VER-05 Alle Kern-Entitäten mit Beziehungen und Indizes vorhanden Migration vorwärts und rückwärts ausführbar Seed-Datensatz für Entwicklung vorhanden Migration auf leerer DB und auf bestehender DB getestet Rollback stellt Vorzustand wieder her Fremdschlüssel-Constraints durch Negativtests belegt
4 FDN-03 Objekt-Storage-Abstraktion ⚙️ Fundament Backend Mittel 3 2 Fertig S3-kompatibel, Presigned URLs Storage-Adapter mit einheitlicher Schnittstelle für Ablegen, Lesen, Löschen und signierte URLs. Lokaler Treiber für Entwicklung, S3 für Produktion. FDN-01 DOC-01 QA-02 FDN-10 Ein 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) gemeldet Round-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
5 FDN-04 Job-Queue & Worker-Runtime ⚙️ Fundament Backend Mittel 3 3 Fertig Postgres-Jobqueue (processing_jobs, FOR UPDATE SKIP LOCKED), In-Prozess-Worker-Goroutinen, kein Redis/AMQP Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue. FDN-02 DOC-04 DOC-06 DOC-08 INT-03 QA-02 SRC-02 SRC-05 FDN-11 Jobs werden zuverlässig eingereiht und verarbeitet Fehlgeschlagene Jobs landen nach n Versuchen in der DLQ Job-Status ist abfragbar Absturz eines Workers führt zu erneuter Zustellung Idempotenz bei Doppelzustellung nachgewiesen DLQ-Eintrag manuell wiederholbar
6 FDN-07 CI-Pipeline & Testharness ⚙️ Fundament DevOps Einfach 2 2 Fertig CI-Runner, Unit-/E2E-Testrunner Automatisierte Pipeline für Lint, Typprüfung, Unit- und E2E-Tests sowie Build-Artefakt. Testdatenbank wird pro Lauf frisch aufgesetzt. FDN-01 QA-01 QA-02 Pipeline 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.
7 FDN-08 Logging, Metriken & Fehler-Tracking ⚙️ Fundament DevOps Einfach 2 2 Fertig Strukturierte Logs, Metrics-Endpoint Strukturiertes Logging mit Korrelations-ID, technische Metriken und zentrale Fehlererfassung inklusive Alarmierung. FDN-01 QA-02 Jede Anfrage besitzt eine Korrelations-ID über alle Schichten Metriken für Latenz, Fehlerrate und Queue-Länge vorhanden Unbehandelte Fehler werden zentral gemeldet Provozierter Fehler erscheint innerhalb einer Minute im Tracking Logs enthalten keine Passwörter oder Tokens Alarm-Schwelle einmal ausgelöst und quittiert
8 DOC-01 Upload-API & Chunk-Handling 🗂️ Dokumentenkern Backend Komplex 4 3 Fertig tus.io / Multipart-Upload Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision. FDN-02 FDN-03 FDN-09 DOC-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-17 Fortsetzbarer 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
9 DOC-02 Dublettenerkennung 🗂️ Dokumentenkern Backend Einfach 2 4 Fertig SHA-256, Unique-Index Prüfsumme jeder Datei berechnen, speichern und bei Upload gegen den Bestand prüfen. Nutzer entscheidet über Verwerfen oder bewusstes Duplikat. DOC-01 SRC-02 SRC-05 Prüfsumme wird bei jedem Upload persistiert Treffer wird dem Nutzer mit Verweis auf das Original gemeldet Bewusstes Duplikat ist möglich und wird markiert Identische Datei zweimal hochgeladen erzeugt Warnung Datei mit einem geänderten Byte gilt nicht als Duplikat Prüfsummenberechnung bei Großdatei bleibt im Zeitbudget
10 DOC-03 Drag-and-Drop-Upload-Oberfläche 🗂️ Dokumentenkern Frontend Mittel 3 4 Fertig Dropzone, Fortschrittsanzeige Upload-Oberfläche mit Ablagebereich, Mehrfachauswahl, Fortschritt je Datei, Abbrechen und verständlichen Fehlermeldungen. DOC-01 QA-03 Mehrere Dateien gleichzeitig per Drag-and-Drop Fortschritt und Status je Datei sichtbar Fehlgeschlagene Datei einzeln wiederholbar Upload per Tastatur und Dateidialog bedienbar Verhalten bei Netzabbruch im Browser geprüft Mobile Ansicht bleibt bedienbar
11 DOC-04 Vorschau- & Thumbnail-Pipeline 🗂️ Dokumentenkern Backend Komplex 5 4 Fertig Renderer-Worker, Bildableitungen Asynchrone Erzeugung von Seiten-Vorschauen und Thumbnails nach dem Upload, mit Cache und Wiederaufbau bei neuer Revision. DOC-01 FDN-04 DOC-05 QA-10 Thumbnail steht nach definierter Zeit bereit Vorschau wird gecacht und bei neuer Revision erneuert Fehlerhafte Datei blockiert die Pipeline nicht Beschädigte PDF-Datei führt zu Fehlerstatus statt Absturz Durchsatztest mit 500 Dokumenten Cache-Invalidierung bei neuer Revision belegt
12 DOC-05 PDF-Viewer-Komponente 🗂️ Dokumentenkern Frontend Komplex 4 5 Fertig PDF.js im Web-Worker Inline-Betrachter mit Seitennavigation, Zoom, Suche im Dokument und Textauswahl – ohne Download-Zwang. DOC-04 DOC-13 QA-03 VER-04 PDF wird ohne Download angezeigt Zoom, Blättern und Textsuche funktionieren Große Dokumente werden seitenweise nachgeladen 300-seitiges PDF öffnet im Zeitbudget Viewer per Tastatur bedienbar Speicherverbrauch im Browser bleibt stabil
13 DOC-06 Office-zu-PDF-Konverter 🗂️ Dokumentenkern Backend Komplex 4 4 Fertig Headless-Konverter im Worker Serverseitige Konvertierung von Text-, Tabellen- und Präsentationsformaten in PDF als Vorschau- und Archivderivat. FDN-04 QA-03 VER-07 Gängige Office-Formate werden konvertiert Konvertierung läuft isoliert mit Zeitlimit Ergebnis wird als Derivat der Revision abgelegt Layouttreue an Referenzdokumenten geprüft Zeitlimit bei Endlosdokument greift Konverter-Absturz beeinträchtigt andere Jobs nicht
14 DOC-07 Download & signierte URLs 🗂️ Dokumentenkern Backend Einfach 2 4 Fertig Presigned URLs Download von Original und Derivaten über kurzlebige signierte URLs, inklusive korrektem Dateinamen und Berechtigungsprüfung. DOC-01 DOC-08 Download liefert Originaldatei unverändert URL läuft nach kurzer Frist ab Ohne Leseberechtigung kein Download Prüfsumme vor und nach Download identisch Weitergegebene abgelaufene URL wird abgewiesen Sonderzeichen im Dateinamen korrekt übertragen
15 DOC-08 Massenexport als ZIP 🗂️ Dokumentenkern Backend Mittel 3 5 Fertig ZIP-Streaming, Export-Job Auswahl mehrerer Dokumente als Hintergrund-Job zu einem Archiv bündeln, inklusive optionaler Metadaten-Datei und Download-Benachrichtigung. DOC-07 FDN-04 QA-03 DOC-18 Export läuft als Job und blockiert die Oberfläche nicht Archiv enthält Dokumente und Metadaten-Beilage Nur berechtigte Dokumente landen im Archiv Export von 1000 Dokumenten ohne Speicherüberlauf Archiv in gängigen Entpackern lesbar Berechtigungsfilter durch Negativtest belegt
16 DOC-09 Ordner- & Kabinettmodell 🗂️ Dokumentenkern Backend Mittel 3 3 Fertig Baumstruktur, Materialized Path Hierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen. FDN-02 DOC-10 DOC-11 DOC-14 Beliebig tiefe Hierarchie abbildbar Verschieben aktualisiert den gesamten Teilbaum Teilbaum-Abfrage bleibt performant Zyklus beim Verschieben wird verhindert Abfrage bei 10.000 Ordnern im Zeitbudget Umbenennen bricht keine Verweise
17 DOC-10 Ordner-Navigation & Dokumentenliste 🗂️ Dokumentenkern Frontend Mittel 3 4 Fertig Baum-Navigation, virtualisierte Liste Navigationsbaum, Brotkrumenpfad und virtualisierte Dokumentenliste mit Sortierung, Spaltenwahl und Mehrfachauswahl. DOC-09 QA-03 Baum und Liste bleiben synchron Liste bleibt bei vielen Einträgen flüssig Mehrfachauswahl mit Umschalt- und Strg-Taste Liste mit 10.000 Zeilen scrollt ruckelfrei Navigation vollständig per Tastatur Zustand bleibt beim Zurücknavigieren erhalten
18 DOC-11 Soft-Delete & Papierkorb-Logik 🗂️ Dokumentenkern Backend Einfach 2 4 Fertig Soft-Delete, Aufräum-Job Löschen setzt einen Papierkorb-Status statt physischer Entfernung. Endgültige Bereinigung erfolgt nach konfigurierbarer Frist. DOC-09 DOC-12 Gelöschte Objekte verschwinden aus allen normalen Ansichten Wiederherstellung stellt Ablageort und Metadaten wieder her Endgültige Löschung entfernt auch die Dateiobjekte Gelöschtes Dokument taucht in Suche und Liste nicht mehr auf Wiederherstellung nach Ordnerlöschung getestet Aufräum-Job löscht nur abgelaufene Einträge
19 DOC-12 Papierkorb-Oberfläche 🗂️ Dokumentenkern Frontend Einfach 2 5 Fertig Listenansicht, Bestätigungsdialog Ansicht des Papierkorbs mit Restlaufzeit, Einzel- und Massenwiederherstellung sowie bestätigter endgültiger Löschung. DOC-11 QA-03 Restlaufzeit je Eintrag sichtbar Wiederherstellung einzeln und in Auswahl möglich Endgültiges Löschen erfordert ausdrückliche Bestätigung Versehentliches Löschen ohne Bestätigung nicht möglich Massenwiederherstellung mit 100 Objekten geprüft Leerer Papierkorb zeigt verständlichen Hinweis
20 SRC-01 Suchindex-Infrastruktur 🔍 Suche & OCR DevOps Mittel 3 2 Fertig Manticore Search (BM25) Suchdienst bereitstellen, Index-Schema mit deutscher Sprachbehandlung definieren und Betriebsparameter festlegen. FDN-01 SRC-02 Suchdienst ist reproduzierbar startbar Index-Schema mit Feldern und Gewichtung dokumentiert Deutsche Stemming- und Stoppwortbehandlung aktiv Neuaufbau des Index aus dem Bestand möglich Umlaut- und Kompositasuche liefert Treffer Neustart des Dienstes ohne Datenverlust
21 SRC-02 Indexierungs-Worker & Synchronisierung 🔍 Suche & OCR Backend Komplex 4 5 Fertig Queue-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-02 SRC-03 Neues Dokument ist zeitnah auffindbar Änderung und Löschung werden im Index nachgezogen Voll-Reindexierung ohne Ausfall möglich Konsistenzabgleich Datenbank gegen Index ergibt keine Abweichung Indexierung von 10.000 Dokumenten im Zeitbudget Ausfall des Suchdienstes führt zu Nachholung statt Datenverlust
22 SRC-03 Such-API mit Ranking 🔍 Suche & OCR Backend Mittel 3 6 Fertig Suchabfrage, Relevanz-Tuning Suchschnittstelle mit Paginierung, Sortierung, Treffer-Ausschnitten und Berücksichtigung der Leseberechtigung. SRC-02 QA-10 SRC-04 SRC-08 Ergebnisse enthalten Textausschnitte mit Fundstellen Nur berechtigte Dokumente erscheinen Antwortzeit unter vereinbartem Grenzwert Referenz-Suchanfragen liefern erwartete Reihenfolge Berechtigungsfilter durch Negativtest belegt Lasttest mit gleichzeitigen Suchanfragen bestanden
23 SRC-04 Such-Oberfläche mit Hervorhebung 🔍 Suche & OCR Frontend Mittel 3 7 Fertig Suchfeld, Ergebnisliste Suchfeld mit Vorschlägen, Ergebnisliste mit hervorgehobenen Fundstellen und Sprung in die Dokumentvorschau. SRC-03 QA-04 SRC-09 Fundstellen sind im Ergebnis hervorgehoben Kein Ergebnis liefert hilfreiche Alternativvorschläge Suchzustand ist per URL teilbar Suche vollständig per Tastatur bedienbar Verhalten bei sehr langem Suchbegriff geprüft Ergebnisliste auf Mobilgerät nutzbar
24 SRC-05 OCR-Worker 🔍 Suche & OCR Backend Komplex 5 5 Fertig Tesseract, Bildvorverarbeitung Texterkennung für Scans und Bilder inklusive Entzerrung, Rauschunterdrückung und Speicherung des Volltexts je Seite. FDN-04 DOC-01 DOC-02 INT-06 MET-05 SRC-06 SRC-07 Erkannter Text wird seitenweise gespeichert Bereits durchsuchbare PDFs werden übersprungen Verarbeitung skaliert über mehrere Worker Erkennungsrate an Referenz-Scanset gemessen und dokumentiert Schiefer Scan wird korrekt entzerrt Sehr großes Dokument läuft nicht in Zeitüberschreitung
25 SRC-06 PDF/A-Erzeugung mit Textebene 🔍 Suche & OCR Backend Mittel 3 6 Fertig PDF/A-Konverter, Textlayer Archivfähiges PDF/A mit unsichtbarer Textebene aus der Texterkennung als zusätzliches Derivat erzeugen. SRC-05 QA-04 Erzeugtes PDF ist PDF/A-konform Text ist im Dokument markier- und durchsuchbar Original bleibt unverändert erhalten Konformitätsprüfung mit Validierungswerkzeug bestanden Textposition deckt sich mit dem Bild Dateigröße bleibt im vereinbarten Rahmen
26 SRC-07 Spracherkennung & OCR-Qualitätsbewertung 🔍 Suche & OCR Backend Einfach 2 6 Fertig Spracherkennung, Konfidenzwerte Dokumentsprache automatisch bestimmen, passendes Sprachmodell wählen und Konfidenzwerte für eine Nachbearbeitungsliste erfassen. SRC-05 QA-04 Sprache wird erkannt und am Dokument gespeichert Konfidenzwert je Seite verfügbar Dokumente unter Schwellwert erscheinen in einer Prüfliste Spracherkennung an gemischtsprachigem Set geprüft Schlechter Scan landet zuverlässig in der Prüfliste Schwellwert ist ohne Neuveröffentlichung konfigurierbar
27 SRC-08 Facetten- & Filter-API 🔍 Suche & OCR Backend Mittel 3 7 Fertig Facettierung, Filterausdrücke Kombinierbare Filter nach Typ, Tag, Datum, Ersteller und benutzerdefinierten Feldern samt Trefferzahlen je Facette. SRC-03 MET-02 SRC-09 SRC-10 Mehrere Filter sind gleichzeitig kombinierbar Facetten liefern korrekte Trefferzahlen Datums- und Wertebereiche werden unterstützt Trefferzahlen gegen Datenbankabfrage abgeglichen Filter auf leerem Ergebnis verhält sich stabil Antwortzeit mit fünf aktiven Filtern gemessen
28 SRC-09 Filter-Panel in der Suche 🔍 Suche & OCR Frontend Mittel 3 8 Fertig Facetten-UI, Filter-Chips Seitliches Filterpanel mit aktiven Filtern als entfernbare Chips und Zurücksetzen-Funktion. SRC-08 SRC-04 QA-04 Aktive Filter sind jederzeit sichtbar und einzeln entfernbar Trefferzahl aktualisiert sich unmittelbar Filterzustand steht in der URL Geteilte URL stellt identischen Filterzustand her Panel auf schmalem Bildschirm bedienbar Zurücksetzen entfernt wirklich alle Filter
29 SRC-10 Gespeicherte Suchanfragen 🔍 Suche & OCR Fullstack Einfach 2 8 Fertig Persistierte Abfragen Suchen benennen, speichern, erneut ausführen und optional mit dem Team teilen. SRC-08 QA-04 Suche lässt sich benennen und wiederherstellen Geteilte Suche ist für Berechtigte sichtbar Ergebnis wird beim Aufruf frisch ermittelt Gespeicherte Suche liefert nach Datenänderung aktuelle Treffer Geteilte Suche zeigt jedem nur erlaubte Dokumente Löschen einer Suche beeinträchtigt andere Nutzer nicht
30 MET-01 Tag-Modell & Tag-API 🏷️ Metadaten Backend Einfach 2 3 Fertig Tag-Entität, Zuordnungstabelle Tags mit Farbe und optionaler Hierarchie, Zuordnung zu Dokumenten sowie Zusammenführen und Umbenennen. FDN-02 DOC-15 MET-03 MET-05 Tags sind anlegbar, umbenennbar und zusammenführbar Mehrfachzuordnung je Dokument möglich Löschen eines Tags entfernt nur die Zuordnung Zusammenführen erhält alle Zuordnungen Doppelte Tag-Namen werden verhindert Massenzuweisung an 500 Dokumente geprüft
31 MET-02 Benutzerdefinierte Metadatenfelder 🏷️ Metadaten Backend Komplex 4 3 Fertig Feldschema, Validierung Frei definierbare Felder mit Datentyp, Pflichtkennzeichen, Standardwert und Validierungsregeln. FDN-02 MET-03 MET-04 SRC-08 Feldtypen Text, Zahl, Datum, Auswahl und Ja/Nein verfügbar Validierung greift beim Speichern Felddefinition ist versioniert änderbar Ungültiger Wert wird mit klarer Meldung abgewiesen Typänderung eines Feldes mit Bestandsdaten getestet Pflichtfeld blockiert unvollständiges Speichern
32 MET-03 Metadaten- & Tag-Oberfläche 🏷️ Metadaten Frontend Mittel 3 4 Fertig Dynamische Formulare Bearbeitungsbereich am Dokument mit dynamisch erzeugtem Formular, Tag-Eingabe mit Autovervollständigung und Massenbearbeitung. MET-01 MET-02 QA-05 Formular passt sich der Felddefinition automatisch an Tag-Eingabe schlägt bestehende Tags vor Massenbearbeitung für ausgewählte Dokumente möglich Ungespeicherte Änderungen lösen Warnung aus Formular per Tastatur vollständig ausfüllbar Massenbearbeitung an 200 Dokumenten geprüft
33 MET-04 Dokumententypen & Vorlagen 🏷️ Metadaten Backend Mittel 3 4 Fertig Typdefinition, Feldbindung Dokumententypen wie Rechnung oder Vertrag mit fest zugeordneten Pflichtfeldern, Standard-Tags und Aufbewahrungsvorgabe. MET-02 QA-05 Typ bündelt Felder, Tags und Aufbewahrungsvorgabe Typwechsel überführt vorhandene Werte Typ ist an Ordner vorbelegbar Typwechsel mit Datenverlustprüfung getestet Pflichtfelder des Typs werden erzwungen Vorbelegung im Ordner greift beim Upload
34 MET-05 Regelbasierte Auto-Verschlagwortung 🏷️ Metadaten Backend Mittel 3 6 Fertig Regelwerk, Mustererkennung Regeln auf Basis von Textmustern, Absender oder Dateiname vergeben automatisch Tags, Typ und Ablageort. MET-01 SRC-05 INT-04 QA-05 Regeln sind ohne Eingriff in den Code pflegbar Reihenfolge und Priorität der Regeln sind steuerbar Automatische Zuweisung ist als solche erkennbar Regelwerk an Testkorpus mit erwarteter Trefferquote geprüft Widersprüchliche Regeln führen zu definiertem Ergebnis Regeländerung wirkt ohne Neustart
35 VER-01 Versionsmodell & Check-in/Check-out 🔄 Versionierung & Audit Backend Komplex 4 4 Fertig Revisionen, Sperren Jede Änderung erzeugt eine neue Revision. Ausleihen sperrt das Dokument für andere, Einchecken gibt es mit Kommentar frei. DOC-01 FDN-02 VER-02 VER-03 VER-07 Alle Revisionen bleiben abrufbar Sperre verhindert konkurrierende Änderungen Sperre ist durch Administratoren aufhebbar Zwei gleichzeitige Ausleihversuche – nur einer gewinnt Verwaiste Sperre wird nach Frist automatisch gelöst Alte Revision ist unverändert abrufbar
36 VER-02 Versionsansicht & Wiederherstellung 🔄 Versionierung & Audit Frontend Mittel 3 5 Fertig Versionsliste, Wiederherstellen Liste aller Revisionen mit Autor, Zeitpunkt und Kommentar sowie Wiederherstellung einer früheren Fassung als neue Revision. VER-01 QA-08 Revisionen chronologisch mit Metadaten sichtbar Wiederherstellung erzeugt eine neue Revision statt Überschreiben Jede Revision ist einzeln herunterladbar Wiederherstellung verändert die Historie nicht Ansicht bei 100 Revisionen bleibt übersichtlich Berechtigung wird je Revision geprüft
37 VER-03 Änderungshistorie & Diff-Berechnung 🔄 Versionierung & Audit Backend Mittel 3 5 Fertig Textvergleich, Metadaten-Diff Unterschiede zwischen zwei Revisionen ermitteln – sowohl im Volltext als auch in Metadaten und Tags. VER-01 VER-04 Textunterschiede werden zeilen- oder absatzweise geliefert Metadatenänderungen werden als Vorher-Nachher ausgegeben Berechnung ist auch für große Dokumente möglich Diff an Referenzpaaren gegen erwartetes Ergebnis geprüft Vergleich zweier identischer Revisionen liefert leeres Ergebnis Laufzeit bei 200-seitigem Dokument gemessen
38 VER-04 Diff-Ansicht 🔄 Versionierung & Audit Frontend Mittel 3 6 Fertig Gegenüberstellung, Farbmarkierung Zwei Revisionen nebeneinander mit farblicher Markierung von Hinzufügungen, Löschungen und Metadatenänderungen. VER-03 DOC-05 QA-08 Revisionen sind frei zum Vergleich wählbar Änderungen sind farblich und mit Symbol gekennzeichnet Sprung zur nächsten Änderung möglich Farbmarkierung ist auch ohne Farbwahrnehmung unterscheidbar Ansicht funktioniert auf schmalem Bildschirm Sehr viele Änderungen bremsen die Ansicht nicht aus
39 VER-05 Revisionssicherer Audit-Trail 🔄 Versionierung & Audit Backend Komplex 4 3 Fertig Append-only-Protokoll, Hash-Kette Unveränderliches Protokoll aller sicherheits- und geschäftsrelevanten Ereignisse mit Verkettung zum Nachweis der Unversehrtheit. FDN-02 VER-06 VER-08 Einträge sind ausschließlich anfügbar Jeder Eintrag enthält Akteur, Zeit, Objekt und Aktion Verkettung erlaubt Integritätsprüfung Manipulationsversuch wird durch Integritätsprüfung erkannt Vollständigkeit gegen Referenzoperationen abgeglichen Protokollschreiben verlangsamt Kernoperationen nicht spürbar
40 VER-06 Audit-Log-Ansicht & Export 🔄 Versionierung & Audit Frontend Einfach 2 4 Fertig Filterbare Tabelle, CSV-Export Durchsuchbare Protokollansicht mit Filtern nach Zeitraum, Akteur, Objekt und Aktion sowie Export für Prüfer. VER-05 QA-08 Filter nach Zeitraum, Akteur und Aktion vorhanden Export enthält exakt die gefilterten Einträge Zugriff nur für berechtigte Rollen Export mit 100.000 Einträgen läuft ohne Abbruch Nicht berechtigter Nutzer erhält keinen Zugriff Exportdatei ist in Tabellenkalkulation korrekt lesbar
41 VER-07 Digitale Signatur 🔄 Versionierung & Audit Backend Komplex 5 5 Fertig PAdES, Zertifikate, Zeitstempel Dokumente digital signieren und vorhandene Signaturen prüfen, inklusive qualifiziertem Zeitstempel. VER-01 DOC-06 QA-08 Signatur wird eingebettet und ist extern prüfbar Prüfergebnis wird am Dokument angezeigt Zeitstempel stammt von einer vertrauenswürdigen Quelle Signatur mit externem Prüfwerkzeug validiert Nachträgliche Änderung invalidiert die Signatur nachweislich Abgelaufenes Zertifikat wird als solches erkannt
42 INT-01 REST-API v1 & Schnittstellenbeschreibung 🔌 Integration & API Backend Komplex 4 4 Fertig REST, OpenAPI Dokument-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-01 INT-09 QA-10 Alle 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 Versionierung Vertragstests gegen die Beschreibung laufen in der Pipeline Berechtigungen greifen identisch wie in der Oberfläche Beispielaufrufe aus der Dokumentation funktionieren
43 INT-03 E-Mail-Abruf über IMAP 🔌 Integration & API Backend Komplex 4 4 Fertig IMAP-Client, Job-Zeitplan Überwachte Postfächer regelmäßig abrufen, Nachrichten und Anhänge importieren und verarbeitete Nachrichten markieren. FDN-04 DOC-01 INT-04 Mehrere Postfächer parallel überwachbar Nachricht und Anhänge werden als Dokumente abgelegt Verarbeitete Nachrichten werden nicht erneut importiert Verbindungsabbruch führt zu Wiederholung ohne Duplikate Nachricht mit 20 Anhängen korrekt importiert Zugangsdaten liegen ausschließlich verschlüsselt vor
44 INT-04 E-Mail-Regeln & Anhangverarbeitung 🔌 Integration & API Backend Mittel 3 7 Fertig Regelwerk, Anhangfilter Regeln nach Absender, Betreff oder Anhangtyp steuern Ablageort, Typ und Verschlagwortung importierter Nachrichten. INT-03 MET-05 QA-09 Regeln greifen auf Absender, Betreff und Anhangtyp zu Signaturbilder und Werbeanhänge sind ausfilterbar Nachricht bleibt als Kontext am Dokument erhalten Regelwerk an Testpostfach mit erwarteter Zuordnung geprüft Nachricht ohne passende Regel landet im Klärungskorb Filter verwirft keine relevanten Anhänge
45 INT-06 Scanner-Anbindung über Hot-Folder 🔌 Integration & API Backend Komplex 4 6 Fertig Überwachter Ordner, Trennseiten Überwachtes Verzeichnis für Netzwerkscanner mit Stapeltrennung, automatischer Texterkennung und Ablage. DOC-01 SRC-05 INT-10 QA-09 INT-14 Neue Dateien werden automatisch übernommen Stapel werden anhand von Trennseiten aufgeteilt Fehlerhafte Dateien landen in einem Fehlerordner Datei wird erst nach vollständigem Schreiben verarbeitet Stapeltrennung an Referenzstapel geprüft Doppelte Einlieferung erzeugt kein Duplikat
46 UX-01 Responsive Layout & mobile Navigation 📱 UX & Zugänglichkeit Frontend Mittel 3 1 Fertig Breakpoints, mobile Muster Alle Kernansichten für kleine Bildschirme optimieren, mit ausklappbarer Navigation und berührungsfreundlichen Zielen. UX-05 Kernablä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
47 UX-02 Dunkles Erscheinungsbild & Theming 📱 UX & Zugänglichkeit Frontend Einfach 2 1 Fertig Theme-Tokens, Systempräferenz Umschaltbares helles und dunkles Erscheinungsbild mit Speicherung der Wahl und Berücksichtigung der Systemeinstellung. UX-05 Umschaltung wirkt ohne Neuladen Wahl bleibt über Sitzungen erhalten Systemeinstellung wird als Voreinstellung übernommen Kontrastprüfung in beiden Varianten bestanden Kein Aufblitzen des falschen Erscheinungsbilds beim Laden Diagramme und Vorschauen bleiben lesbar
48 UX-03 Mehrsprachigkeits-Infrastruktur 📱 UX & Zugänglichkeit Frontend Mittel 3 1 Fertig i18n-Bibliothek, Sprachdateien Alle Texte auslagern, Sprachumschaltung sowie lokale Formate für Datum, Zahl und Währung bereitstellen. UX-04 Keine fest verdrahteten Texte mehr in Komponenten Sprachwechsel wirkt ohne Neuladen Datums- und Zahlenformate folgen der Sprache Automatische 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
49 UX-04 Übersetzungen Deutsch und Englisch 📱 UX & Zugänglichkeit Frontend Einfach 2 2 Fertig Sprachdateien, Terminologieliste Vollständige Übersetzung der Oberfläche in beide Sprachen inklusive abgestimmter Fachbegriffe. UX-03 QA-11 Beide Sprachdateien sind vollständig Fachbegriffe folgen einer abgestimmten Liste Fehlermeldungen sind ebenfalls übersetzt Abdeckungsprüfung beider Sprachdateien bei 100 Prozent Sichtprüfung auf abgeschnittene Texte in beiden Sprachen Fachliche Gegenlesung dokumentiert
50 UX-05 Barrierefreiheit nach WCAG 2.1 AA 📱 UX & Zugänglichkeit Frontend Komplex 4 2 Fertig ARIA, Fokussteuerung Semantik, Fokusführung, Tastaturbedienung, Beschriftungen und Kontraste über alle Ansichten hinweg herstellen. UX-01 UX-02 QA-11 Alle Abläufe ohne Maus bedienbar Sichtbare Fokusmarkierung überall vorhanden Formularfelder besitzen zugeordnete Beschriftungen Automatisierte Prüfung meldet keine kritischen Verstöße Vollständiger Durchlauf mit Bildschirmleser dokumentiert Fokusfalle in Dialogen geprüft
51 QA-01 Teststrategie & Testdatenbestand ✅ Prüfungen & Qualitätssicherung QA Einfach 2 3 Fertig Teststrategie, anonymisierte Testdaten Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen. FDN-07 QA-03 QA-04 QA-05 QA-07 QA-10 Testpyramide 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-01 Testdatenbestand ist per Befehl reproduzierbar Referenzkorpus deckt alle unterstützten Formate ab Strategie im Team abgenommen
52 QA-02 Prüfgate Fundament ✅ Prüfungen & Qualitätssicherung QA Einfach 2 4 Fertig Integrationstests, Betriebsprüfung Abnahme der Grundlage: Datenmodell, Storage, Queue, Auth, Pipeline und Observability greifen zuverlässig ineinander. FDN-02 FDN-03 FDN-04 FDN-07 FDN-08 FDN-09 QA-12 Alle 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üft Neuaufsetzen der Umgebung von null erfolgreich Ausfall eines Dienstes führt zu sauberem Fehlerbild Prüfbericht abgelegt und freigegeben
53 QA-03 Prüfgate Dokumentenkern ✅ Prüfungen & Qualitätssicherung QA Mittel 3 6 Fertig E2E-Tests, Datenintegrität Vollstä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-15 QA-12 Kompletter Lebenszyklus als automatisierter Test vorhanden Keine Datenveränderung zwischen Upload und Download Alle Ticket-Prüfungen des Epics bestanden Prüfsummenvergleich über den gesamten Lebenszyklus Abbruchszenarien in jedem Schritt getestet Referenzkorpus vollständig durchlaufen
54 QA-04 Prüfgate Suche & Texterkennung ✅ Prüfungen & Qualitätssicherung QA Mittel 3 9 Fertig Relevanz- und Erkennungsmessung Messen und dokumentieren von Erkennungsgüte, Trefferqualität und Konsistenz zwischen Datenbank und Suchindex. SRC-04 SRC-06 SRC-07 SRC-09 SRC-10 QA-01 QA-12 QA-06 Erkennungsrate am Referenzkorpus erreicht den Zielwert Relevanz an definierten Suchanfragen erfüllt die Erwartung Index und Datenbank sind nachweislich konsistent Messprotokoll mit Zielwerten und Ergebnissen abgelegt Voll-Reindexierung ohne Trefferverlust geprüft Berechtigungsfilter in der Suche negativ getestet
55 QA-05 Prüfgate Metadaten & Klassifizierung ✅ Prüfungen & Qualitätssicherung QA Einfach 2 7 Fertig Datenqualitätstests Prüfen von Feldvalidierung, Typwechseln, Massenbearbeitung und Güte der automatischen Zuordnung. MET-03 MET-04 QA-01 MET-05 QA-12 Validierungsregeln greifen in allen Eingabewegen Automatische Vorschläge erreichen die Zielgenauigkeit Massenbearbeitung erzeugt keine inkonsistenten Daten Genauigkeit der Klassifizierung dokumentiert Typwechsel mit Bestandsdaten ohne Verlust Validierung auch über die Schnittstelle wirksam
56 QA-06 Sicherheits- & Berechtigungsprüfung ✅ Prüfungen & Qualitätssicherung QA Komplex 4 10 Fertig Penetrationstest, Rollenmatrix Systematische Prüfung aller Zugriffspfade gegen die Rollenmatrix sowie Test auf gängige Sicherheitslücken. QA-04 SRC-11 QA-12 Jede Rolle wurde gegen jeden Endpunkt geprüft Keine unbefugte Rechteausweitung möglich Befunde sind behoben oder bewusst akzeptiert Zugriff auf fremdes Objekt per ID schlägt fehl Prüfung auf Einschleusung, Sitzungsübernahme und unsichere Weiterleitung Sicherheitsbericht abgelegt und freigegeben
57 QA-07 Prüfgate Workflow & Benachrichtigung ✅ Prüfungen & Qualitätssicherung QA Mittel 3 4 Fertig Prozesstests, Zeitraffer Durchspielen aller Prozesspfade inklusive Ablehnung, Vertretung, Eskalation und Fristablauf. QA-01 QA-12 Alle Prozesspfade sind mindestens einmal durchlaufen Fristen und Eskalationen lösen korrekt aus Keine Benachrichtigung geht verloren oder wird doppelt versandt Zeitraffer-Test über simulierte Fristen Parallelentscheidungen erzeugen keinen Fehlzustand Zustellprotokoll gegen erwartete Ereignisse abgeglichen
58 QA-08 Revisionssicherheits-Prüfung ✅ Prüfungen & Qualitätssicherung QA Mittel 3 7 Fertig Integritätsprüfung, Signaturvalidierung Nachweis, dass Versionen, Protokoll und Signaturen unveränderlich, vollständig und extern prüfbar sind. VER-02 VER-04 VER-06 VER-07 QA-12 Historie ist lückenlos und nicht manipulierbar Signaturen sind mit externen Werkzeugen prüfbar Jede relevante Aktion erscheint im Protokoll Manipulationsversuch wird erkannt und protokolliert Stichprobe von Aktionen im Protokoll wiedergefunden Prüfbericht für die Revision erstellt
59 QA-09 Schnittstellen-Vertragstests ✅ Prüfungen & Qualitätssicherung QA Mittel 3 8 Fertig Vertragstests, Testempfänger Automatisierte 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-13 QA-12 Vertragstests laufen in der Pipeline Import über E-Mail und Hot-Folder verliert keine Dokumente Webhook-Zustellung ist nachweisbar Abweichung zwischen Beschreibung und Verhalten bricht die Pipeline Dauerlauf-Import über 24 Stunden ohne Verlust Wiederholungsverhalten bei Ausfall belegt
60 QA-10 Last- & Leistungstest ✅ Prüfungen & Qualitätssicherung QA Komplex 4 7 Backlog Lastgenerator, Messprotokoll Verhalten unter realistischer und überhöhter Last messen: Suche, Upload, Vorschau und Schnittstelle. SRC-03 DOC-04 INT-01 QA-01 QA-12 Zielwerte für Antwortzeit und Durchsatz sind definiert und gemessen Engpässe sind identifiziert und dokumentiert System erholt sich nach Lastspitze selbstständig Dauerlast über mehrere Stunden ohne Speicherwachstum Verhalten bei Überlast ist definiert statt zufällig Messprotokoll mit Zielwertvergleich abgelegt
61 QA-11 Barrierefreiheits-Audit ✅ Prüfungen & Qualitätssicherung QA Mittel 3 3 Fertig Prüfwerkzeuge, Bildschirmleser Unabhängige Prüfung aller Ansichten gegen WCAG 2.1 AA mit Werkzeugen und manuellem Durchlauf. UX-04 UX-05 QA-12 Keine kritischen Verstöße offen Manueller Bildschirmleser-Durchlauf dokumentiert Restbefunde sind mit Frist eingeplant Automatisierte Prüfung über alle Hauptseiten Vollständiger Ablauf ohne Maus durchgeführt Auditbericht abgelegt
62 QA-12 Abnahme- & Compliance-Prüfung ✅ Prüfungen & Qualitätssicherung QA Komplex 4 11 Backlog Abnahmeprotokoll, Wiederherstellungstest Gesamtabnahme 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-11 Alle Prüfgates sind bestanden Wiederherstellung wurde real durchgeführt Abnahmeprotokoll ist unterzeichnet Notfallwiederherstellung auf leerem System nachgewiesen Löschung nur mit Freigabe und Protokoll möglich Offene Restrisiken sind schriftlich benannt
63 FDN-09 Verschlüsselung at rest & Schlüsselverwaltung ⚙️ Fundament Backend Mittel 3 2 Fertig AES-256-GCM, Envelope Encryption Envelope-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-01 DOC-01 QA-02 DEK 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
64 DOC-13 Akten-/Vorgangsanzeige im Dokumentkontext 🗂️ Dokumentenkern Frontend Einfach 2 6 Fertig Next.js/React/TS, externe REST-API In 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-05 QA-03 Dokument-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
65 INT-08 Watch-Folder-Import (Consume-Ordner) 🔌 Integration & API Backend Mittel 3 4 Fertig Überwachter Ordner, Dateisystem-Events/Polling Dateisystem-Ordner, der automatisch überwacht wird — jede dort abgelegte Datei wird ohne API-Aufruf importiert. Ergänzt DOC-01 (Upload-API), ersetzt sie nicht. DOC-01 QA-09 INT-14 Datei 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 blockieren Testdatei 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
66 INT-09 CMIS-kompatible Schnittstelle (optional) 🔌 Integration & API Backend Komplex 4 5 Fertig CMIS 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-01 QA-09 INT-15 CMIS-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 Zwangsbestandteil Test 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
67 INT-10 Scanner-Stapelverarbeitung mit Trennseiten-/Barcode-Erkennung 🔌 Integration & API Backend Mittel 3 7 Fertig Leerseiten-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-06 QA-09 Leere 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 Fehlverhalten Test-Stapel mit Leerseiten-Trennung ergibt korrekte Anzahl Einzeldokumente Test-Stapel mit Barcode-Trennseiten ordnet Barcode-Werte korrekt zu Stapel ohne Trennseiten bleibt ein Dokument
68 DOC-14 Dokument-Zusammenführen & -Aufteilen 🗂️ Dokumentenkern Backend Mittel 3 4 Fertig PDF-Seitenmanipulation, Versionshistorie, Transaktionale Dokument-Operationen Nachträ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-09 QA-03 Mehrere 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 werden Test: 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
69 DOC-15 Massenbearbeitung von Metadaten 🗂️ Dokumentenkern Backend Mittel 3 4 Fertig Massenoperation über Dokumentauswahl, transaktionale Verarbeitung Mehrere 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-01 QA-03 Tag/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 umgangen Test: 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
70 INT-11 Archive-Anbindung: Objekttyp-Registrierung & Retention-Abfrage 🔌 Integration & API Backend Mittel 3 4 Fertig HTTP-Client gegen Archive-Modul-Adapter-Schnittstelle, Aufbewahrungsklassen-Mapping Dokument-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-01 QA-09 INT-16 Dokument-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ührt Registrierung 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
71 INT-12 AI-Anbindung: Objekttyp-Registrierung (Kopplung AI GOV-01) 🔌 Integration & API Backend Mittel 2 4 Fertig HTTP-Client gegen AI-Modul-Adapter-Schnittstelle, Feld-Mapping Dokument-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-01 QA-09 INT-16 Dokument-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
72 INT-13 Workflow-Anbindung: Objekttyp- & Auslöser-Registrierung (Kopplung Workflow ENG-02) 🔌 Integration & API Backend Mittel 3 4 Fertig HTTP-Client gegen Workflow-Modul-Adapter-Schnittstelle, Ereignis-Publisher Dokument-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-01 QA-09 INT-16 Dokument-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)
73 SRC-11 Feld-Whitelist-Query-Builder für Suchindex-Zugriff 🔍 Suche & OCR Backend Einfach 1 3 Fertig Statisches Enum/Switch für Feldnamen, getesteter Query-Builder Zentraler, 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-01 QA-06 Spalten-/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 zentralisieren Versuch, 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
74 DOC-16 RET-05-Client: Aufbewahrungsklasse registrieren & Vernichtungs-Rückruf 🗂️ Dokumentenkern Backend Mittel 3 5 Fertig HTTP-Client gegen Archive RET-05, Rückruf-Endpunkt, Postgres-Jobqueue (FDN-04) für Requeue DMS 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-09 DMS 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 Verwerfen Registrierung 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
75 INT-14 Tenant-Zuordnung & Zugriffsschutz für Hot-Folder/Scanner-Verzeichnisse 🔌 Integration & API Backend Mittel 2 12 Fertig Dateisystem-Zugriffsrechte, Verzeichnisstruktur je Tenant, Go INT-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-08 Jedes 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 Betriebsanleitung Test: 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
76 INT-15 CMIS-Schnittstelle: Auth-/Tenant-Scoping-Parität zur REST-API 🔌 Integration & API Backend Mittel 2 12 Fertig CMIS, gemeinsame Auth-Middleware, Go INT-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-09 CMIS-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 Autorisierungsverhalten Test: 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
77 INT-16 Nutzer-Tenant-Kontext in Modul-Rückkanälen (Archive/AI/Workflow) 🔌 Integration & API Backend Mittel 2 12 Fertig Service-Credentials (Core API-02), Tenant-Kontext-Weiterreichung, Go INT-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-13 Jeder 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 protokolliert Test: 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
78 DOC-17 Malware-Scan vor Ablage 🗂️ Dokumentenkern Backend Mittel 2 12 Fertig Virenscanner-Anbindung (z. B. ClamAV), Go, Postgres-Jobqueue DOC-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-01 Jede 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
79 FDN-10 Signierte URLs: Scope-Bindung & kurze Ablaufzeit ⚙️ Fundament Backend Einfach 1 12 Fertig Storage-Adapter (S3-kompatibel), signierte URLs, Go FDN-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-03 Eine 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 Zugriff Test: 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
80 FDN-11 Ressourcenlimits für asynchrone Verarbeitungsjobs ⚙️ Fundament Backend Mittel 2 12 Fertig Postgres-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-04 Jeder 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 unbeeinflusst Test 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
81 VER-08 Technische Durchsetzung Append-only für das Versionierungs-/Ereignisprotokoll 🔄 Versionierung & Audit Backend Einfach 2 12 Fertig PostgreSQL (REVOKE/Trigger), Go VER-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-05 Die 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 nutzbar Testet 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
82 DOC-18 Obergrenze für Gesamtgröße/Anzahl bei Archiv-Bündelung 🗂️ Dokumentenkern Backend Einfach 1 13 Fertig Postgres-Jobqueue, Ressourcenlimits, Go DOC-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-08 Eine 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 verankert Test: 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
File diff suppressed because it is too large. Load diff
+50
View File
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>DMS Kanban – lokal</title>
<link rel="stylesheet" href="../_shared/kanban.css">
</head>
<body>
<header>
<div class="row">
<h1>DMS Kanban <span class="sub">– lokal, offline, ohne Server</span></h1>
<input id="q" placeholder="Suche: Code, Titel, Technik …" style="min-width:220px" />
<select id="fEpic"><option value="">Alle Epics</option></select>
<select id="fRole"><option value="">Alle Rollen</option></select>
<select id="fWave"><option value="">Alle Wellen</option></select>
<button id="onlyReady">Nur startbare</button>
<button id="exportBtn">Stand sichern</button>
<button id="resetBtn">Zurücksetzen</button>
</div>
<div class="stats" id="stats"></div>
</header>
<div class="board" id="board"></div>
<dialog id="dlg">
<div class="dlg-head">
<div>
<div class="code" id="dCode" style="font-family:ui-monospace,Menlo,monospace;font-size:11px;color:var(--muted)"></div>
<div id="dTitle" style="font-size:18px;font-weight:600;margin-top:4px"></div>
<div id="dMeta" style="margin-top:8px"></div>
</div>
<div class="row">
<button class="primary" id="copyBtn">Prompt kopieren</button>
<button id="closeBtn">Schließen</button>
</div>
</div>
<div class="dlg-body">
<p id="dDesc" style="font-size:13px;color:#C7D3E5;line-height:1.6;margin-top:0"></p>
<h3>Baut auf</h3><div id="dDeps"></div>
<h3>Schaltet frei</h3><div id="dNext"></div>
<h3>Akzeptanzkriterien</h3><ul id="dAcc"></ul>
<h3>Prüfungen vor der Abnahme</h3><ul id="dChk"></ul>
<h3>Bau-Prompt</h3><pre id="dPrompt"></pre>
</div>
</dialog>
<script id="data" type="application/json">{"erzeugtAm": "2026-08-26", "totalDays": 230, "epics": [{"key": "FDN", "name": "Fundament", "emoji": "⚙️", "color": "#64748B", "description": "Projektgerüst, Datenmodell, Storage, Queue, Auth-Basis, CI und Observability. Alles andere baut hierauf auf."}, {"key": "DOC", "name": "Dokumentenkern", "emoji": "🗂️", "color": "#3B82F6", "description": "Upload, Vorschau, Download, Ablagestruktur und Papierkorb – das funktionale Herz des DMS."}, {"key": "SRC", "name": "Suche & OCR", "emoji": "🔍", "color": "#06B6D4", "description": "Volltextindex, OCR-Pipeline, Facetten und gespeicherte Suchen."}, {"key": "MET", "name": "Metadaten", "emoji": "🏷️", "color": "#10B981", "description": "Tags, benutzerdefinierte Felder, Dokumententypen und automatische Klassifizierung."}, {"key": "VER", "name": "Versionierung & Audit", "emoji": "🔄", "color": "#EC4899", "description": "Versionskontrolle, Historie, revisionssicherer Audit-Trail und Signatur."}, {"key": "INT", "name": "Integration & API", "emoji": "🔌", "color": "#14B8A6", "description": "Öffentliche REST-API, E-Mail-Import, Webhooks und Scanner-Anbindung."}, {"key": "UX", "name": "UX & Zugänglichkeit", "emoji": "📱", "color": "#F97316", "description": "Responsive Ansicht, Theming, Mehrsprachigkeit und Barrierefreiheit."}, {"key": "QA", "name": "Prüfungen & Qualitätssicherung", "emoji": "✅", "color": "#22C55E", "description": "Teststrategie und verbindliche Prüfgates je Ausbaustufe. Ein Gate schließt eine Ausbaustufe ab."}], "waves": [{"welle": 1, "codes": ["FDN-01", "UX-01", "UX-02", "UX-03"]}, {"welle": 2, "codes": ["FDN-02", "FDN-03", "FDN-07", "FDN-08", "FDN-09", "SRC-01", "UX-04", "UX-05"]}, {"welle": 3, "codes": ["DOC-01", "DOC-09", "FDN-04", "MET-01", "MET-02", "QA-01", "QA-11", "VER-05"]}, {"welle": 4, "codes": ["DOC-02", "DOC-03", "DOC-04", "DOC-06", "DOC-07", "DOC-10", "DOC-11", "DOC-14", "DOC-15", "INT-01", "INT-03", "INT-08", "MET-03", "MET-04", "QA-02", "QA-07", "VER-01", "VER-06", "INT-11", "INT-12", "INT-13"]}, {"welle": 5, "codes": ["DOC-05", "DOC-08", "DOC-12", "INT-09", "SRC-02", "SRC-05", "VER-02", "VER-03", "VER-07"]}, {"welle": 6, "codes": ["DOC-13", "INT-06", "MET-05", "QA-03", "SRC-03", "SRC-06", "SRC-07", "VER-04"]}, {"welle": 7, "codes": ["INT-04", "INT-10", "QA-08", "QA-10", "SRC-04", "SRC-08", "QA-05"]}, {"welle": 8, "codes": ["QA-09", "SRC-09", "SRC-10"]}, {"welle": 9, "codes": ["QA-04"]}, {"welle": 10, "codes": ["QA-06"]}, {"welle": 11, "codes": ["QA-12"]}, {"welle": 12, "codes": ["INT-14", "INT-15", "INT-16", "DOC-17", "FDN-10", "FDN-11", "VER-08"]}, {"welle": 13, "codes": ["DOC-18"]}], "kritischerPfad": {"tage": 28, "pfad": ["FDN-01", "FDN-02", "DOC-01", "DOC-04", "DOC-05", "VER-04", "QA-08", "QA-12"]}, "produktDna": {"uebernehmen": [{"produkt": "paperless-ngx", "staerke": "Kompromisslose Erfassungs-Pipeline: Consume-Ordner, Vorverarbeitung, OCR, durchsuchbares PDF/A – vollautomatisch ohne Nutzerinteraktion."}, {"produkt": "paperless-ngx", "staerke": "Regelwerk für automatische Zuordnung von Korrespondent, Dokumenttyp und Tags direkt beim Import."}, {"produkt": "Docspell", "staerke": "Sprachverarbeitende Extraktion konkreter Werte: Absender, Datum, Betrag, Vertragspartner werden als strukturierte Felder vorgeschlagen."}, {"produkt": "Docspell", "staerke": "Sauberes Mandanten- und Datenmodell sowie ausgereifter Postfach-Abruf inklusive Anhangbehandlung."}, {"produkt": "Alfresco", "staerke": "Vererbende Zugriffskontrolle über die Ablagehierarchie mit expliziten Erlaubnissen und Verboten."}, {"produkt": "Alfresco", "staerke": "Echte Prozess-Engine mit deklarativen Prozessdefinitionen statt fest verdrahteter Freigabelogik."}, {"produkt": "Alfresco", "staerke": "Versionierung mit Ausleihen/Einchecken sowie Aufbewahrungssteuerung inklusive Aufbewahrungssperre."}, {"produkt": "ecoDMS", "staerke": "Revisionssicherheit als Grundhaltung: unveränderliches Protokoll, nachvollziehbare Vernichtung, Vier-Augen-Freigabe."}, {"produkt": "ecoDMS", "staerke": "Praxisnaher Scanner- und Stapelworkflow mit Trennseiten und Klassifizierungsvorlagen."}], "vermeiden": [{"produkt": "Alfresco", "schwaeche": "Schwergewichtige Plattform mit hohem Ressourcenbedarf, langer Startzeit und aufwendigem Betrieb.", "gegenmittel": "Schlanker Dienst plus getrennte Worker. Jede Komponente muss auf einem kleinen Server startklar sein."}, {"produkt": "Alfresco", "schwaeche": "Übermächtiges Konfigurationsmodell mit steiler Lernkurve und träger Oberfläche.", "gegenmittel": "Sinnvolle Voreinstellungen, die ohne Konfiguration funktionieren. Komplexität nur dort, wo sie nachweislich gebraucht wird."}, {"produkt": "paperless-ngx", "schwaeche": "Kaum Governance: keine echte Rechtevererbung, keine Freigabeprozesse, keine Versionen, kein belastbares Protokoll.", "gegenmittel": "Rechte, Versionierung und Protokoll gehören von Anfang an ins Fundament, nicht als Nachrüstung."}, {"produkt": "paperless-ngx", "schLine truncated
<script src="../_shared/kanban.js"></script>
</body>
</html>
+25
View File
@@ -0,0 +1,25 @@
# Bekannte Fehler in archivdms — zu vermeiden in NEXARCH DMS
Ermittelt am 2026-08-25 per Code-Audit von `repos/archivdms`. Dient als Vermeidungs-Checkliste für den kompletten Neubau (siehe `reuse-mapping.md`).
## Sicherheit / Datenintegrität
1. **`go.sum` fehlt komplett** (DEVLOG.md:102) — `go test ./...` schlägt in DB-/Crypto-Paketen fehl. → `go.sum` von Anfang an committen, CI-Gate `go mod verify`.
2. **Kaum Unit-Tests** für kritische Pakete: nur 2 `_test.go` in ganz `internal/`, 0 für `auth`, `storage` (Tenant-Isolation, Retention/WORM), `ldapstore`, `permissions.go`. → Testpflicht für Auth/Tenant-Scoping/Retention als Merge-Gate.
3. **Rechte-Bug**: frische Uploads für Ersteller selbst unsichtbar — ACL (`internal/storage/permissions.go`, `RecomputeVisibility`) vergab Sichtbarkeit nur über Gruppen-Grants (DEVLOG.md:1087). → Expliziter "Ersteller sieht immer sein Dokument"-Pfad von Anfang an im Datenmodell.
4. **Superadmin-Sonderfall wiederholt vergessen**: 403 "tenant context required" für Superadmin mehrfach gepatcht (DEVLOG.md:1146, 4144). → Superadmin-ohne-Tenant als First-Class-Zustand im Datenmodell.
## Robustheit / Fehlerbehandlung
5. **pgx-Typmismatch bei Intervall-Queries**, 2x derselbe Bug (`processing_jobs.go` Z.314, Z.290) durch `($1 || ' seconds')::interval` statt Cast. → Arithmetischen Cast als verbindliche Konvention.
6. **Nil-Slice → JSON `null` statt `[]`**, ≥8x wiederholter Frontend-Crash, jedes Mal einzeln mit `?? []` gepatcht statt an der Wurzel behoben (DEVLOG.md:1078, 1120). → Backend-Konvention: jeder Listen-Handler liefert `make([]T, 0)`, per Lint erzwingen.
7. **Silent-Fail durch Logger-Wiring-Fehler** (`cmd_documents_reprocess_all.go`) — Logger nie verdrahtet, CLI-Pfad ohne Debug-Logs (DEVLOG.md:531). → Logger-Injection zentral über DI/Konstruktor-Pflichtfeld.
8. **OCR-Bug-Kette durch Code-Duplikation**: 4 Bugs in Koordinaten-Transform (Deskew/EXIF/OSD), Ursache ~35 Zeilen dupliziertes Boilerplate in 5 Funktionen (DEVLOG.md:346-354). → Gemeinsame Koordinatentransform-Utility mit Property-Tests.
## Betrieb / Skalierung
9. **In-Memory Rate-Limiter ohne Shared State** (`internal/auth/ratelimit.go`) — bei Mehrinstanz-Deployment pro Instanz getrennt, aushebelbar. → Bei Mehrinstanz-Betrieb Rate-Limit-State extern (Redis/DB) oder Single-Instance-Constraint dokumentieren.
10. **Dynamische Tabellennamen via `fmt.Sprintf` in SQL** (`taxonomy.go:281`, `workflows.go:611`, `classification_templates_title.go:102`, `internal/index/manticore.go`) — aktuell durch Whitelist-Funktion abgesichert, aber fragiles Muster. → Geschlossener Enum/Switch-Typ statt Sprintf-in-SQL.
## Positiv zu übernehmende Muster (kein Fehler)
Tenant-Filter (`WHERE ... AND tenant_id = $n`), IDOR-Guards bei Shares, Vier-Augen-Prinzip bei Löschbestätigung mit `FOR UPDATE`-Lock, Timing-safe Passwortvergleich bei Share-Links.
+17
View File
@@ -0,0 +1,17 @@
# Bekannte Fehler in archivmail — zu vermeiden in NEXARCH (DMS + späteres Mail-Modul)
Ermittelt am 2026-08-25 per Code-Audit von `repos/archivmail`. Mail-spezifische Punkte (IMAP/SMTP/Mailer) gelten primär für das künftige NEXARCH-Mail-Board; die Muster zu SQL/Tenant-Scoping/Attachment-Handling/Tests betreffen auch NEXARCH DMS direkt.
1. **Header-Injection**: `internal/mailer/mailer.go:144-146` — From/To/Subject per Stringkonkatenation ohne CRLF-Validierung. → `net/mail`-Writer nutzen oder Headerwerte hart auf CRLF/Steuerzeichen prüfen. (Mail-Board)
2. **Login ohne Tenant-Filter**: `internal/userstore/userstore.go:338` — `SELECT ... WHERE email=$1` ohne tenant_id → Cross-Tenant-Verwechslungsrisiko. → E-Mail global unique erzwingen oder Lookup zusätzlich scopen. **(betrifft auch DMS: IAM-01/IAM-02 — jeden Login-Query auf Tenant-Scoping prüfen)**
3. **Ungebremstes Anhang-Lesen**: `pkg/mailparser/parser.go:199,214,254,343` — `io.ReadAll` ohne Größenlimit → Speicherbombe. → `io.LimitReader` mit Max-Size, harte Ablehnung. **(betrifft auch DMS: DOC-01 Upload-API — Größenlimit von Anfang an, nicht nachrüsten)**
4. **Kaum Tests**: nur 2 von 18 Modulen getestet (`auth`, `imap/folder_state`), `tenantstore`/`imapserver`/`smtpd`/`pop3` ohne Tests. → Pflichttests für Tenant-Scoping/Protokoll-State-Machines vor Merge. **(betrifft auch DMS: QA-01 Teststrategie)**
5. **IMAP-Resync-Bug** (`internal/imap/scheduler.go:410`, Kommentar "BUG-1 UIDVALIDITY=0"): nicht-konforme Server brachen Resync. → Defensive Validierung + Fallback-Tests. (Mail-Board)
6. **Privilege-Escalation-Lücke gepatcht**: `internal/api/ldap_handlers.go:191` — Rollenzuweisung nachträglich gehärtet. → Rollen-Erlaubnis-Matrix von Anfang an testgestützt. **(betrifft auch DMS: IAM-02/IAM-07 LDAP-Abgleich)**
7. **Tenant-Filter als Post-Filter statt in Query**: `internal/api/ediscovery.go:90` — fehleranfällig bei neuen Codepfaden. → Tenant-Scoping ausschließlich in Query-/Repository-Schicht. **(betrifft auch DMS: IAM-03 Policy-Enforcement — zentral, nicht pro Handler)**
8. **Attachment-Preview Content-Type-Erkennung über Dateiendung, fragile Guard-Reihenfolge**: `src/components/mail/AttachmentPreviewDialog.tsx:74,199`. → Content-Type serverseitig via Magic-Bytes, State-Machine explizit modellieren. **(betrifft auch DMS: DOC-05 PDF-Viewer)**
9. **iframe-PDF-Vorschau als unsicher verworfen**, `PdfCanvasPreview.tsx:7-17` — positiv: Canvas-Rendering statt iframe. → Für NEXARCH DMS-Viewer (DOC-05) von Anfang an Canvas-Rendering, kein iframe/HTML-Rendering von Fremdinhalt.
10. **Restore-Datenintegritätsbug** (`cmd_backup.go:206`, "BUG-2, -force restore where destination isn't empty"). → Restore immer in leeres Temp-Verzeichnis + atomarer Swap. **(betrifft auch DMS: REP-06 Sicherung & Wiederherstellung)**
11. **Dynamische SQL-Klauseln via Sprintf/Join**: `internal/index/manticore.go:268,323`. → Spalten-/Tabellennamen nur aus statischen Konstanten. **(betrifft auch DMS: SRC-01/SRC-03 Suchindex/Such-API)**
12. **Gleiches Muster dupliziert**: `internal/storage/ocr.go:159` (`whereClause = "WHERE " + joinAnd(...)`). → Zentraler getesteter Query-Builder mit Feld-Whitelist. **(betrifft auch DMS: mehrere API-Handler)**
13. **Kein zentrales Issue-Tracking** — Bugs nur als `BUG-N`-Kommentare im Code, kein Tracker. → NEXARCH: Bugs/Fixes durchsuchbar tracken, damit wiederkehrende Muster sichtbar werden. (projektweit)
+158
View File
@@ -0,0 +1,158 @@
# NEXARCH DMS – Entscheidung: kompletter Neubau
Entscheidung 2026-08-25: NEXARCH DMS wird komplett neu gebaut — KEIN Codeimport aus archivdms/archivmail, auch nicht für Auth/Storage/Tenant/Queue-Grundgerüst. Grund: bekannte Code-Fehler aus archivdms sollen nicht in NEXARCH übernommen werden, nicht eine Ablehnung von Datenmodell oder Konzept an sich.
archivdms/archivmail dienen ausschließlich als **Konzeptreferenz** (Spalte "Quelle" unten zeigt, wo die alte Lösung technisch nachgesehen werden kann, um Fehler nicht zu wiederholen oder bewährte Prinzipien zu erkennen — nicht zum Kopieren).
Techstack-Entscheidung bleibt unabhängig davon bestehen (Go-Backend, PostgreSQL/pgx, Manticore Search, Postgres-Jobqueue statt Redis, bcrypt) — das ist eine Technologiewahl, kein Codeimport.
Alle 86 Tickets daher: **NEU**.
## ⚙️ Fundament
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| FDN-01 | NEU |archivdms/ (Repo-Layout: cmd/, internal/, src/) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-02 | NEU |archivdms/internal/storage/migrations/ (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-03 | NEU |archivdms/internal/objectstore/local.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-04 | NEU |archivdms/internal/jobqueue/jobqueue.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-05 | NEU |archivdms/internal/auth/auth.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-06 | NEU |archivdms/src/components/shell, ui (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-07 | NEU |archivdms/.gitea/workflows (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| FDN-08 | NEU |archivdms/internal/api/observability.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## 🗂️ Dokumentenkern
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| DOC-01 | NEU |archivdms/internal/api/document_handlers.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-02 | NEU |archivdms/internal/storage/documents.go (content_hash) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-03 | NEU |archivdms/src/components/documents (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-04 | NEU |archivdms/internal/thumbnail/thumbnail.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-05 | NEU |archivdms/src/components/documents (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-06 | NEU |archivdms/internal/ocr/convert.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-07 | NEU |archivdms/internal/api/signed_url_handlers.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-08 | NEU |archivdms/internal/api/document_bulk_export_handlers.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-09 | NEU |archivdms/internal/storage/akten.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-10 | NEU |archivdms/src/components/akten (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-11 | NEU |archivdms/internal/storage/trash.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| DOC-12 | NEU |archivdms/src/components/trash (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## 🏷️ Metadaten
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| MET-01 | NEU |archivdms/internal/storage/taxonomy.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| MET-02 | NEU |archivdms/internal/storage/custom_fields.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| MET-03 | NEU |archivdms/src/components/custom-fields, taxonomy (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| MET-04 | NEU |archivdms/internal/storage/classification_templates.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| MET-05 | NEU |archivdms/internal/storage/metadata_suggestions_naivebayes.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## 🔍 Suche & OCR
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| SRC-01 | NEU |archivdms/internal/index/manticore.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-02 | NEU |archivdms/internal/storage/index_sync.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-03 | NEU |archivdms/internal/index/index.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-04 | NEU |archivdms/src/components/search (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-05 | NEU |archivdms/internal/ocr/ocr.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-06 | NEU | - | Kein PDF/A-Erzeugung (ocrmypdf) in Altsystemen |
| SRC-07 | NEU |archivdms/internal/ocr/ocr.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-08 | NEU |archivdms/internal/storage/documents.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| SRC-09 | NEU | - | Kein dediziertes Filter-Panel im Frontend |
| SRC-10 | NEU |archivdms/internal/storage/saved_views.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## 📱 UX & Zugänglichkeit
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| UX-01 | NEU |archivdms/src/components/shell (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| UX-02 | NEU |archivdms/src/components/theme-provider.tsx (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| UX-03 | NEU | - | Keine i18n-Infrastruktur in Altsystemen |
| UX-04 | NEU | - | Keine Übersetzungsdateien vorhanden |
| UX-05 | NEU | - | Kein WCAG-Audit/A11y-Grundlage vorhanden |
## 👥 Identität & Rechte
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| IAM-01 | NEU |archivdms/internal/userstore/userstore.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| IAM-02 | NEU |archivdms/internal/storage/permissions.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| IAM-03 | NEU |archivdms/internal/storage/permissions.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| IAM-04 | NEU |archivdms/src/components/permissions (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| IAM-05 | NEU | - | Kein Gruppen-/Abteilungsmodell in Altsystemen |
| IAM-06 | NEU | - | Kein OIDC/SSO in archivdms oder archivmail |
| IAM-07 | NEU |archivmail/internal/api/ldap_sync.go, ldap_tenants.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## 🔄 Versionierung & Audit
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| VER-01 | NEU | - | Kein Check-in/Check-out/Versionsmodell vorhanden |
| VER-02 | NEU | - | Keine Versionsansicht/Restore-UI vorhanden |
| VER-03 | NEU | - | Keine Änderungshistorie/Diff-Berechnung vorhanden |
| VER-04 | NEU | - | Keine Diff-Ansicht im Frontend |
| VER-05 | NEU |archivdms/internal/audit/audit.go, archivmail/internal/audit/audit.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| VER-06 | NEU |archivmail/internal/api (audit export) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| VER-07 | NEU | - | Digitale Signatur in keinem Altsystem vorhanden |
## 📋 Workflow
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| WFL-01 | NEU |archivdms/internal/storage/workflows.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| WFL-02 | NEU |archivdms/src/components (kein workflow-UI Ordner) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| WFL-03 | NEU |archivdms/src/components/reminders (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| WFL-04 | NEU |archivdms/internal (reminders) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| WFL-05 | NEU |archivdms/internal/mailer/mailer.go, templates.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| WFL-06 | NEU | - | Keine Benachrichtigungs-Einstellungs-UI |
| WFL-07 | NEU |archivdms/internal/storage/workflows.go (matching) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## 🔌 Integration & API
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| INT-01 | NEU |archivmail/internal/api/v1_handlers.go, openapi.yaml (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| INT-02 | NEU |archivmail/internal/auth/apikey_middleware.go, apikey_handlers.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| INT-03 | NEU |archivmail/internal/imap/ (client, importer, scheduler) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| INT-04 | NEU |archivmail/internal/api/rules_handlers.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| INT-05 | NEU | - | Keine Webhook-Registry in Altsystemen |
| INT-06 | NEU |archivdms/internal/sftpserver, pagesplit, barcode (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
## ✅ Prüfungen & Qualitätssicherung
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| QA-01 | NEU |archivdms/.gitea/workflows, features/ (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| QA-02 | NEU |archivdms CI-Setup (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| QA-03 | NEU |archivdms internal/*_test.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| QA-04 | NEU |archivdms/internal/api/observability_test.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| QA-05 | NEU | - | Kein Prüfgate für Klassifizierung vorhanden |
| QA-06 | NEU |archivmail/internal/auth/auth_test.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| QA-07 | NEU | - | Kein Workflow/Notification-Prüfgate vorhanden |
| QA-08 | NEU |archivdms/internal/audit, archivmail/internal/audit (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| QA-09 | NEU | - | Keine Contract-Tests für Schnittstellen vorhanden |
| QA-10 | NEU | - | Kein Last-/Performance-Test-Setup vorhanden |
| QA-11 | NEU | - | Kein A11y-Audit-Tooling vorhanden |
| QA-12 | NEU | - | Kein Abnahme-/Compliance-Prüfprozess vorhanden |
## 📊 Reporting & Archiv
| Code | Verdict | Quelle | Kurznotiz |
|---|---|---|---|
| REP-01 | NEU |archivdms/internal/storage/dashboard.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| REP-02 | NEU |archivdms Dashboard-Backend, kein UI-Ordner (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| REP-03 | NEU |archivdms/internal/storage/retention_rules.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| REP-04 | NEU |archivdms/internal/storage/trash.go (Vier-Augen) (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| REP-05 | NEU |archivmail/internal/api/dsgvo_handlers.go, storage/dsgvo_requests.go (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
| REP-06 | NEU |archivmail/deploy/cron.d (archivmail backup), reconciliation/ (nur Konzeptreferenz, kein Codeimport) | Neu entworfen |
---
## Zusammenfassung
- ÜBERNEHMEN: 40
- TEILWEISE: 24
- NEU: 22
+200
View File
@@ -0,0 +1,200 @@
# tickets – Dev Log
## 2026-09-12 21:25 – 21:27 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
Keine Änderungen ermittelbar.
---
## 2026-09-18 13:41 – 13:41 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** code
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- archive-kanban/board.json | 3062 +++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------
---
## 2026-09-20 01:04 – 01:04 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** code-integ
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 01:10 – 01:11 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** banking
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 01:14 – 01:15 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 01:17 – 01:17 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 01:29 – 01:29 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 08:56 – 08:56 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 09:05 – 09:06 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 09:18 – 09:18 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** banking
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 09:27 – 09:27 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-17.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 09:28 – 09:28 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** n8n-setup
### Commits
- defe256 dms-kanban: Ticket FDN-18 (Verdrahtung der Suche in Worker und App) anlegen
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 09:56 – 09:56 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 10:00 – 10:00 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 10:05 – 10:05 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 19:44 – 19:44 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** nexarch
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 19:55 – 19:55 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-09-20 20:01 – 20:01 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** tickets
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- dms-kanban/tickets/FDN-18.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
+79
View File
@@ -0,0 +1,79 @@
# DOC-01 – Upload-API & Chunk-Handling
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
**Technische Grundlage:** tus.io / Multipart-Upload
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Erfassen muss so anspruchslos sein wie das Ablegen einer Datei im Consume-Ordner von paperless-ngx – zusätzlich fortsetzbar bei Abbruch.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-02` Datenmodell & Migrationen – Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
- `FDN-03` Objekt-Storage-Abstraktion – Storage-Adapter mit einheitlicher Schnittstelle für Ablegen, Lesen, Löschen und signierte URLs. Lokaler Treiber für Entwicklung, S3 für Produktion.
- `FDN-09` Verschlüsselung at rest & Schlüsselverwaltung – Envelope-Encryption-Modul mit Encrypt/Decrypt-Schnittstelle über Streams, das von der Storage-Abstraktion beim Ablegen/Lesen genutzt wird.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Fortsetzbarer Upload nach Verbindungsabbruch
2. Unerlaubte Dateitypen werden abgewiesen
3. Dokument und Revision werden transaktional angelegt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Upload von 1 GB Datei erfolgreich
2. Abbruch bei 50 % und Fortsetzung ergibt identische Prüfsumme
3. Parallel-Upload von 20 Dateien ohne Datenverlust
## Bekannte Fehler vermeiden
- **Ungebremstes Lesen von Anhängen/Uploads**: Ein Vorgängerprojekt las Anhänge ohne Größenlimit vollständig in den Speicher, was eine Speicherbombe ermöglichte. → Von Anfang an mit einem Limit-Reader/Max-Size arbeiten und Uploads über dem Limit hart ablehnen, statt das Limit nachträglich nachzurüsten.
- **Reihenfolge beachten**: SHA-256-Hash für Dublettenerkennung (DOC-02) wird auf dem Klartext berechnet, bevor die Verschlüsselung aus FDN-09 angewendet wird – nicht danach.
- **Verarbeitungsreihenfolge nach Upload**: Hash-Berechnung & Duplikatsprüfung (DOC-02) zuerst, danach erst Verschlüsselung (FDN-09) für neue/bewusste Duplikate, danach OCR (SRC-05) und Indexierung (SRC-02) – niemals umgekehrt.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-02` Dublettenerkennung
- `DOC-03` Drag-and-Drop-Upload-Oberfläche
- `DOC-04` Vorschau- & Thumbnail-Pipeline
- `DOC-07` Download & signierte URLs
- `SRC-02` Indexierungs-Worker & Synchronisierung
- `SRC-05` OCR-Worker
- `VER-01` Versionsmodell & Check-in/Check-out
- `INT-01` REST-API v1 & Schnittstellenbeschreibung
- `INT-03` E-Mail-Abruf über IMAP
- `INT-06` Scanner-Anbindung über Hot-Folder
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-01: upload-api & chunk-handling`
- Branch: `feature/doc-01-upload-api-chunk-handling`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+65
View File
@@ -0,0 +1,65 @@
# DOC-02 – Dublettenerkennung
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Prüfsumme jeder Datei berechnen, speichern und bei Upload gegen den Bestand prüfen. Nutzer entscheidet über Verwerfen oder bewusstes Duplikat.
**Technische Grundlage:** SHA-256, Unique-Index
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** paperless-ngx erkennt Dubletten über Prüfsummen. Übernimm das und lasse bewusste Duplikate zu, statt sie stumm zu verwerfen.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Prüfsumme wird bei jedem Upload persistiert
2. Treffer wird dem Nutzer mit Verweis auf das Original gemeldet
3. Bewusstes Duplikat ist möglich und wird markiert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Identische Datei zweimal hochgeladen erzeugt Warnung
2. Datei mit einem geänderten Byte gilt nicht als Duplikat
3. Prüfsummenberechnung bei Großdatei bleibt im Zeitbudget
## Bekannte Fehler vermeiden
- Hash muss auf dem Klartext berechnet werden, nicht auf dem verschlüsselten Objekt (siehe FDN-09) – sonst erzeugt dieselbe Datei bei jedem Upload einen anderen Hash und Dublettenerkennung versagt vollständig.
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-02: dublettenerkennung`
- Branch: `feature/doc-02-dublettenerkennung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# DOC-03 – Drag-and-Drop-Upload-Oberfläche
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Frontend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Frontend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Oberfläche und Zustandsführung. Alle Daten ausschließlich über die öffentliche Schnittstelle beziehen.
## Auftrag
Upload-Oberfläche mit Ablagebereich, Mehrfachauswahl, Fortschritt je Datei, Abbrechen und verständlichen Fehlermeldungen.
**Technische Grundlage:** Dropzone, Fortschrittsanzeige
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Die Ablage-Oberfläche von Docspell ist funktional, aber spröde. Hier entsteht der erste Eindruck – investiere entsprechend.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `SHL-01` UI-Shell & Design-System (zentral).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Mehrere Dateien gleichzeitig per Drag-and-Drop
2. Fortschritt und Status je Datei sichtbar
3. Fehlgeschlagene Datei einzeln wiederholbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Upload per Tastatur und Dateidialog bedienbar
2. Verhalten bei Netzabbruch im Browser geprüft
3. Mobile Ansicht bleibt bedienbar
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-03: drag-and-drop-upload-oberfläche`
- Branch: `feature/doc-03-drag-and-drop-upload-oberfläche`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+68
View File
@@ -0,0 +1,68 @@
# DOC-04 – Vorschau- & Thumbnail-Pipeline
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 5 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Asynchrone Erzeugung von Seiten-Vorschauen und Thumbnails nach dem Upload, mit Cache und Wiederaufbau bei neuer Revision.
**Technische Grundlage:** Renderer-Worker, Bildableitungen
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Vorschaubilder beim Import erzeugen, wie paperless-ngx es tut. Ein fehlerhaftes Dokument darf die Strecke nie anhalten.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
- `FDN-04` Job-Queue & Worker-Runtime – Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Thumbnail steht nach definierter Zeit bereit
2. Vorschau wird gecacht und bei neuer Revision erneuert
3. Fehlerhafte Datei blockiert die Pipeline nicht
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Beschädigte PDF-Datei führt zu Fehlerstatus statt Absturz
2. Durchsatztest mit 500 Dokumenten
3. Cache-Invalidierung bei neuer Revision belegt
## Bekannte Fehler vermeiden
- **Content-Type-Erkennung über Dateiendung ist fragil**: Ein Vorgängerprojekt erkannte den Content-Type von Vorschau-Dateien über die Dateiendung mit fragiler Guard-Reihenfolge. → Content-Type serverseitig über Magic-Bytes bestimmen und den Vorschau-Zustand als explizite State-Machine modellieren.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-05` PDF-Viewer-Komponente
- `QA-10` Last- & Leistungstest
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-04: vorschau- & thumbnail-pipeline`
- Branch: `feature/doc-04-vorschau-thumbnail-pipeline`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+69
View File
@@ -0,0 +1,69 @@
# DOC-05 – PDF-Viewer-Komponente
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Frontend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 5
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Frontend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Oberfläche und Zustandsführung. Alle Daten ausschließlich über die öffentliche Schnittstelle beziehen.
## Auftrag
Inline-Betrachter mit Seitennavigation, Zoom, Suche im Dokument und Textauswahl – ohne Download-Zwang.
**Technische Grundlage:** PDF.js im Web-Worker
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Vollwertige Anzeige im Browser. ecoDMS verlangt dafür einen eigenen Arbeitsplatz-Client – genau das entfällt hier.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-04` Vorschau- & Thumbnail-Pipeline – Asynchrone Erzeugung von Seiten-Vorschauen und Thumbnails nach dem Upload, mit Cache und Wiederaufbau bei neuer Revision.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `SHL-01` UI-Shell & Design-System (zentral).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. PDF wird ohne Download angezeigt
2. Zoom, Blättern und Textsuche funktionieren
3. Große Dokumente werden seitenweise nachgeladen
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. 300-seitiges PDF öffnet im Zeitbudget
2. Viewer per Tastatur bedienbar
3. Speicherverbrauch im Browser bleibt stabil
## Bekannte Fehler vermeiden
- **Content-Type-Erkennung über Dateiendung ist fragil**: Ein Vorgängerprojekt erkannte den Content-Type für die Anhang-/Dokumentvorschau über die Dateiendung mit fragiler Guard-Reihenfolge. → Content-Type serverseitig über Magic-Bytes bestimmen und den Vorschau-Zustand explizit als State-Machine modellieren.
- **iframe-Vorschau als unsicher verworfen**: Ein Vorgängerprojekt musste die PDF-Vorschau von iframe auf Canvas-Rendering umstellen, weil iframe Fremdinhalt unkontrolliert rendert. → Für den PDF-Viewer von Anfang an Canvas-Rendering einsetzen, kein iframe/HTML-Rendering von Fremdinhalt.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `VER-04` Diff-Ansicht
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-05: pdf-viewer-komponente`
- Branch: `feature/doc-05-pdf-viewer-komponente`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+67
View File
@@ -0,0 +1,67 @@
# DOC-06 – Office-zu-PDF-Konverter
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Serverseitige Konvertierung von Text-, Tabellen- und Präsentationsformaten in PDF als Vorschau- und Archivderivat.
**Technische Grundlage:** Headless-Konverter im Worker
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Alfresco löst die Umwandlung über einen eigenen Dienst. Übernimm die Idee, aber isoliert, mit Zeitlimit und ohne Rückwirkung auf andere Aufträge.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-04` Job-Queue & Worker-Runtime – Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Gängige Office-Formate werden konvertiert
2. Konvertierung läuft isoliert mit Zeitlimit
3. Ergebnis wird als Derivat der Revision abgelegt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Layouttreue an Referenzdokumenten geprüft
2. Zeitlimit bei Endlosdokument greift
3. Konverter-Absturz beeinträchtigt andere Jobs nicht
## Bekannte Fehler vermeiden
- **Bug-Kette durch Code-Duplikation**: Ein Vorgängerprojekt hatte mehrere Bugs in ähnlichen Transformations-/Konvertierungsfunktionen (Koordinaten, Formate), verursacht durch dupliziertes Boilerplate in mehreren Funktionen. → Gemeinsame, gut getestete Utility-Funktion (mit Property-Tests) statt paralleler Implementierungen für Format-/Koordinatentransformationen.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `VER-07` Digitale Signatur
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-06: office-zu-pdf-konverter`
- Branch: `feature/doc-06-office-zu-pdf-konverter`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# DOC-07 – Download & signierte URLs
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Download von Original und Derivaten über kurzlebige signierte URLs, inklusive korrektem Dateinamen und Berechtigungsprüfung.
**Technische Grundlage:** Presigned URLs
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Kurzlebige signierte Verweise statt Weiterleitung über den Anwendungsserver – schlanker als der Alfresco-Weg.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Download liefert Originaldatei unverändert
2. URL läuft nach kurzer Frist ab
3. Ohne Leseberechtigung kein Download
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Prüfsumme vor und nach Download identisch
2. Weitergegebene abgelaufene URL wird abgewiesen
3. Sonderzeichen im Dateinamen korrekt übertragen
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-08` Massenexport als ZIP
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-07: download & signierte urls`
- Branch: `feature/doc-07-download-signierte-urls`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# DOC-08 – Massenexport als ZIP
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 5
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Auswahl mehrerer Dokumente als Hintergrund-Job zu einem Archiv bündeln, inklusive optionaler Metadaten-Datei und Download-Benachrichtigung.
**Technische Grundlage:** ZIP-Streaming, Export-Job
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Vollständiger Export ohne Herstellerwerkzeug ist die Antwort auf die Herstellerbindung von ecoDMS.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-07` Download & signierte URLs – Download von Original und Derivaten über kurzlebige signierte URLs, inklusive korrektem Dateinamen und Berechtigungsprüfung.
- `FDN-04` Job-Queue & Worker-Runtime – Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Export läuft als Job und blockiert die Oberfläche nicht
2. Archiv enthält Dokumente und Metadaten-Beilage
3. Nur berechtigte Dokumente landen im Archiv
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Export von 1000 Dokumenten ohne Speicherüberlauf
2. Archiv in gängigen Entpackern lesbar
3. Berechtigungsfilter durch Negativtest belegt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-08: massenexport als zip`
- Branch: `feature/doc-08-massenexport-als-zip`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# DOC-09 – Ordner- & Kabinettmodell
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Hierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen.
**Technische Grundlage:** Baumstruktur, Materialized Path
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Die Hierarchie, die paperless-ngx fehlt, in der Vererbungslogik von Alfresco – aber ohne dessen Modellierungsaufwand.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-02` Datenmodell & Migrationen – Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Beliebig tiefe Hierarchie abbildbar
2. Verschieben aktualisiert den gesamten Teilbaum
3. Teilbaum-Abfrage bleibt performant
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Zyklus beim Verschieben wird verhindert
2. Abfrage bei 10.000 Ordnern im Zeitbudget
3. Umbenennen bricht keine Verweise
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-10` Ordner-Navigation & Dokumentenliste
- `DOC-11` Soft-Delete & Papierkorb-Logik
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-09: ordner- & kabinettmodell`
- Branch: `feature/doc-09-ordner-kabinettmodell`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# DOC-10 – Ordner-Navigation & Dokumentenliste
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Frontend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Frontend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Oberfläche und Zustandsführung. Alle Daten ausschließlich über die öffentliche Schnittstelle beziehen.
## Auftrag
Navigationsbaum, Brotkrumenpfad und virtualisierte Dokumentenliste mit Sortierung, Spaltenwahl und Mehrfachauswahl.
**Technische Grundlage:** Baum-Navigation, virtualisierte Liste
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Verschlagwortung und Ordner gleichberechtigt anbieten. Der Nutzer wählt seinen Weg, nicht das System.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-09` Ordner- & Kabinettmodell – Hierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `SHL-01` UI-Shell & Design-System (zentral).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Baum und Liste bleiben synchron
2. Liste bleibt bei vielen Einträgen flüssig
3. Mehrfachauswahl mit Umschalt- und Strg-Taste
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Liste mit 10.000 Zeilen scrollt ruckelfrei
2. Navigation vollständig per Tastatur
3. Zustand bleibt beim Zurücknavigieren erhalten
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-10: ordner-navigation & dokumentenliste`
- Branch: `feature/doc-10-ordner-navigation-dokumentenliste`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# DOC-11 – Soft-Delete & Papierkorb-Logik
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Löschen setzt einen Papierkorb-Status statt physischer Entfernung. Endgültige Bereinigung erfolgt nach konfigurierbarer Frist.
**Technische Grundlage:** Soft-Delete, Aufräum-Job
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Revisionssichere Systeme löschen nie sofort. Übernimm die Haltung von ecoDMS: Frist, dann Vernichtung mit Protokoll.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-09` Ordner- & Kabinettmodell – Hierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Gelöschte Objekte verschwinden aus allen normalen Ansichten
2. Wiederherstellung stellt Ablageort und Metadaten wieder her
3. Endgültige Löschung entfernt auch die Dateiobjekte
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Gelöschtes Dokument taucht in Suche und Liste nicht mehr auf
2. Wiederherstellung nach Ordnerlöschung getestet
3. Aufräum-Job löscht nur abgelaufene Einträge
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-12` Papierkorb-Oberfläche
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-11: soft-delete & papierkorb-logik`
- Branch: `feature/doc-11-soft-delete-papierkorb-logik`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# DOC-12 – Papierkorb-Oberfläche
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Frontend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 5
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Frontend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Oberfläche und Zustandsführung. Alle Daten ausschließlich über die öffentliche Schnittstelle beziehen.
## Auftrag
Ansicht des Papierkorbs mit Restlaufzeit, Einzel- und Massenwiederherstellung sowie bestätigter endgültiger Löschung.
**Technische Grundlage:** Listenansicht, Bestätigungsdialog
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** Wiederherstellung muss offensichtlich sein. Verlorene Dokumente sind der häufigste Vertrauensverlust in einem Archiv.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-11` Soft-Delete & Papierkorb-Logik – Löschen setzt einen Papierkorb-Status statt physischer Entfernung. Endgültige Bereinigung erfolgt nach konfigurierbarer Frist.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `SHL-01` UI-Shell & Design-System (zentral).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Restlaufzeit je Eintrag sichtbar
2. Wiederherstellung einzeln und in Auswahl möglich
3. Endgültiges Löschen erfordert ausdrückliche Bestätigung
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Versehentliches Löschen ohne Bestätigung nicht möglich
2. Massenwiederherstellung mit 100 Objekten geprüft
3. Leerer Papierkorb zeigt verständlichen Hinweis
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-12: papierkorb-oberfläche`
- Branch: `feature/doc-12-papierkorb-oberfläche`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+65
View File
@@ -0,0 +1,65 @@
# DOC-13 – Akten-/Vorgangsanzeige im Dokumentkontext
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Frontend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Frontend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Oberfläche und Zustandsführung. Alle Daten ausschließlich über die öffentliche Schnittstelle beziehen.
## Auftrag
In 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.
**Technische Grundlage:** Next.js/React/TS, externe REST-API
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** In 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.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-05` PDF-Viewer-Komponente – Inline-Betrachter mit Seitennavigation, Zoom, Suche im Dokument und Textauswahl – ohne Download-Zwang.
- Setzt voraus (externes Workflow-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/workflow-kanban/): `VOR-04` Rückkanal-API: Workflow-Status & Vermerke für verlinkte Objekte.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Dokument-Detailansicht zeigt Akte-Zugehörigkeit, Vermerke und offene Wiedervorlagen an, falls vorhanden
2. Kein eigenes Akte-Datenmodell in DMS, ausschließlich Anzeige über die externe API
3. Fehlerfall (Workflow-Board nicht erreichbar) blockiert die Dokumentanzeige selbst nicht, zeigt nur den Akte-Bereich als „vorübergehend nicht verfügbar“
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Dokument mit verknüpfter Akte zeigt Akte-Informationen korrekt an
2. Dokument ohne Akte-Verknüpfung zeigt Bereich nicht/leer an, kein Fehler
3. Simulierter Ausfall der Workflow-API blockiert die übrige Dokumentanzeige nicht
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Akte-Datenmodell (Workflow-Board, siehe `VOR-01`)
- Vermerke-Erfassung (Workflow-Board, siehe `VOR-02`)
- Wiedervorlage-Erfassung (Workflow-Board, siehe `VOR-03`)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-13: akten vorgangsanzeige im dokumentkontext`
- Branch: `feature/doc-13-akten-vorgangsanzeige-im-dokumentkontext`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+65
View File
@@ -0,0 +1,65 @@
# DOC-14 – Dokument-Zusammenführen & -Aufteilen
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Nachträ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.
**Technische Grundlage:** PDF-Seitenmanipulation, Versionshistorie, Transaktionale Dokument-Operationen
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- paperless-ngx: Merge/Split-Werkzeug als praktische Korrekturfunktion im Alltag.
**Bewusst vermeiden:**
- Kein Verlust der Versionshistorie/Audit-Spur beim Zusammenführen/Aufteilen – jede entstehende neue Dokument-Einheit bleibt nachvollziehbar mit ihrem Ursprung verknüpft (Alfresco-Lehre: Nachvollziehbarkeit von Änderungen).
**Für genau diese Kachel:** Merge/Split müssen so selbstverständlich nutzbar sein wie bei paperless-ngx – aber ohne dessen Schwäche, die Herkunft der neuen Dokument-Einheiten zu verschleiern.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
- `DOC-09` Ordner- & Kabinettmodell – Hierarchische Ablage mit Verschieben, Umbenennen und effizienten Teilbaum-Abfragen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Mehrere Dokumente lassen sich zu einem zusammenführen, Ursprungsdokumente bleiben in der Versionshistorie nachvollziehbar
2. Ein mehrseitiges Dokument lässt sich an beliebigen Seitengrenzen in mehrere eigenständige Dokumente aufteilen, jedes mit eigenen Metadaten
3. Beide Operationen respektieren bestehende Aufbewahrungssperren (Archive-Retention) – eine Kachel mit aktiver Löschsperre kann nicht durch Zusammenführen/Aufteilen umgangen werden
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: drei Dokumente zusammengeführt, Ursprünge in Historie auffindbar
2. Test: fünfseitiges Dokument an zwei Stellen geteilt, drei korrekte Einzeldokumente entstehen
3. Test: Zusammenführen/Aufteilen eines Dokuments mit aktiver Löschsperre wird abgelehnt oder erfordert Freigabe, nicht stillschweigend erlaubt
## Bekannte Fehler vermeiden
- Zusammenführen/Aufteilen darf keine Lücke im Audit-Trail erzeugen – jede neue Dokument-Einheit muss auf ihre Ursprungsdokumente zurückführbar bleiben, sonst wird die Revisionssicherheit (Kernprinzip aus ecoDMS-Produkt-DNA) an genau dieser Stelle unterlaufen.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `INT-10` Trennseiten-Erkennung beim Stapel-Scan (Importzeitpunkt)
- Archive-Retention/Löschsperren-Logik selbst (Archive-Board)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-14: dokument-zusammenfuehren-aufteilen`
- Branch: `feature/doc-14-dokument-zusammenfuehren-aufteilen`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# DOC-15 – Massenbearbeitung von Metadaten
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Mehrere ausgewählte Dokumente gleichzeitig mit Tags/Metadatenfeldern/Dokumenttyp bearbeiten (hinzufügen, entfernen, ersetzen) statt Dokument für Dokument – Vorbild paperless-ngx Bulk-Edit.
**Technische Grundlage:** Massenoperation über Dokumentauswahl, transaktionale Verarbeitung
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
- Hierarchische Ablage mit vererbbaren Eigenschaften – der Bereich, in dem paperless-ngx am deutlichsten fehlt.
- Papierkorb mit Frist statt sofortiger Vernichtung, wie es revisionssichere Systeme handhaben.
**Bewusst vermeiden:**
- Keine erzwungene Ordnerdisziplin. Ablage und Verschlagwortung stehen gleichberechtigt nebeneinander.
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
**Für genau diese Kachel:** paperless-ngx erlaubt Massenänderung von Tags/Metadaten über mehrere Dokumente gleichzeitig – dieser Bedienkomfort fehlt bisher, es gibt nur Massenexport (DOC-08), keine Massenbearbeitung.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling
- `MET-01` Tag-Modell & Tag-API
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Tag/Metadatenfeld kann über eine Auswahl mehrerer Dokumente gleichzeitig hinzugefügt oder entfernt werden
2. Vorgang ist transaktional nachvollziehbar (Versionshistorie/Audit zeigt die Massenänderung, nicht stillschweigend)
3. Vorgang respektiert bestehende Aufbewahrungssperren – ein gesperrtes Dokument in der Auswahl wird übersprungen mit klarer Rückmeldung, nicht die ganze Operation blockiert oder die Sperre umgangen
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Tag auf 10 ausgewählte Dokumente gleichzeitig angewendet, alle korrekt aktualisiert
2. Audit-Log zeigt Massenänderung nachvollziehbar
3. Test mit einem gesperrten Dokument in der Auswahl: dieses wird übersprungen, Rest wird bearbeitet, klare Rückmeldung welches übersprungen wurde
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-03` Prüfgate Dokumentenkern
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-15: massenbearbeitung von metadaten`
- Branch: `feature/doc-15-massenbearbeitung-von-metadaten`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+58
View File
@@ -0,0 +1,58 @@
# DOC-17 – Malware-Scan vor Ablage
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
DOC-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.
**Technische Grundlage:** Virenscanner-Anbindung (z. B. ClamAV), Go, Postgres-Jobqueue
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- paperless-ngx: Verarbeitungspipeline mit klar abgegrenzten, nacheinander laufenden Schritten (hier: Upload → Scan → Freigabe).
**Bewusst vermeiden:**
- ecoDMS – in älteren Versionen kein verpflichtender Malware-Scan vor Ablage.: Scan ist ein Pflichtschritt, kein optionales Zusatzfeature.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: DOC-01.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jede hochgeladene Datei durchläuft einen Virenscan, bevor sie als reguläres Dokument sichtbar/abrufbar wird
2. Ein positiver Scan-Fund führt zur Ablehnung des Dokuments und einem Audit-Event, nicht zu stiller Ablage
3. Der Scan-Status ist für den hochladenden Nutzer sichtbar (in Bearbeitung/freigegeben/abgelehnt)
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test mit EICAR-Testdatei: wird zuverlässig erkannt und abgelehnt
2. Test mit sauberer Datei: durchläuft Scan und wird normal verfügbar
3. Lasttest: Scan-Queue verarbeitet mehrere gleichzeitige Uploads ohne Verlust der Reihenfolge/Nachvollziehbarkeit
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12): MIME-/Größenvalidierung allein erkennt keine schädlichen Inhalte innerhalb eines gültigen Dateityps (z. B. Makro in einer echten .docx-Datei).
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-01` Upload-API & Chunk-Handling
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-17: malware-scan-vor-ablage`
- Branch: `feature/doc-17-malware-scan-vor-ablage`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+58
View File
@@ -0,0 +1,58 @@
# DOC-18 – Obergrenze für Gesamtgröße/Anzahl bei Archiv-Bündelung
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 1 Personentage | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
DOC-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.
**Technische Grundlage:** Postgres-Jobqueue, Ressourcenlimits, Go
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Docspell: klare Verarbeitungsgrenzen statt unbegrenzter Best-Effort-Verarbeitung.
**Bewusst vermeiden:**
- archivdms (bekannte Fehlerklasse ähnlich) – Ressourcenerschöpfung durch unbegrenzte Einzeljobs war in Altsystemen eine wiederkehrende Betriebsstörung.: harte, konfigurierbare Obergrenzen von Anfang an statt nachträglicher Begrenzung nach Vorfall.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: DOC-08.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Eine Bündelungs-Anfrage mit konfigurierbar zu großer Gesamtgröße oder Dokumentanzahl wird vor Jobstart abgelehnt, mit klarer Fehlermeldung an den Nutzer
2. Innerhalb der Obergrenze funktioniert die Bündelung aus DOC-08 unverändert
3. Die Obergrenzen sind konfigurierbar, nicht hart im Code verankert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Anfrage mit Auswahl oberhalb der konfigurierten Obergrenze wird abgelehnt, kein Job wird gestartet
2. Test: Anfrage innerhalb der Obergrenze wird normal verarbeitet
3. Regressionstest bestehender DOC-08-Funktionalität nach Einführung der Prüfung
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12, Finding #9): unbegrenzte Bündelungs-Anfragen sind ein kleiner, aber realer Denial-of-Service-Vektor gegen den gemeinsamen Job-Worker-Pool.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-08` Massenexport als ZIP
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-18: obergrenze-f-r-gesamtgr-e-anzahl-bei-archiv-b-ndelung`
- Branch: `feature/doc-18-obergrenze-f-r-gesamtgr-e-anzahl-bei-archiv-b-ndelung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+60
View File
@@ -0,0 +1,60 @@
# DOC-19 – TIFF-Vorschau in der Thumbnail-Pipeline
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 1 Personentag | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
TIFF als unterstütztes Quellformat in der Vorschau-/Thumbnail-Pipeline ergänzen — Netzwerkscanner (INT-06) liefern häufig TIFF-Stapel, dafür fehlt aktuell jede Vorschau.
**Technische Grundlage:** Bildableitung, wie bei JPEG/PNG/GIF bereits vorhanden
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
**Bewusst vermeiden:**
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt.
**Für genau diese Kachel:** Scan-Stapel vom Netzwerkscanner sind in der Praxis oft TIFF, nicht PDF — ohne diese Kachel bleibt die Vorschau für genau die Dokumente dunkel, die am häufigsten über den Scanner-Weg (INT-06) reinkommen.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-04` Vorschau- & Thumbnail-Pipeline – `dms/internal/thumbnail/generate.go` erkennt Content-Type über Magic-Bytes und erzeugt PNG-Thumbnails für PDF (via `pdftoppm`) sowie JPEG/PNG/GIF (via Go-Standardbibliothek `image`). TIFF fällt aktuell in den `default`-Zweig und schlägt als "nicht unterstützter Dateityp" fehl (Job-Status "failed", keine Pipeline-Blockade, aber auch kein Thumbnail).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. TIFF-Dateien (Single- und Multi-Page) erzeugen ein Thumbnail von der ersten Seite
2. Bereits unterstützte Formate (PDF/JPEG/PNG/GIF) funktionieren unverändert weiter
3. Beschädigte/nicht dekodierbare TIFF-Datei führt zu Fehlerstatus statt Absturz, wie bei den übrigen Formaten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Echtes Multi-Page-TIFF aus einem realen Scanvorgang (oder gleichwertig erzeugt) liefert korrektes Thumbnail der ersten Seite
2. Bestehende Testsuite für PDF/JPEG/PNG/GIF bleibt grün
3. Absichtlich beschädigte TIFF-Datei erzeugt Fehlerstatus, kein Prozessabsturz, andere Jobs in der Queue unbeeinträchtigt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-20` Office-Dokumente in der Vorschau anzeigen (separates, unabhängiges Problem — Office-Formate, nicht TIFF)
- `INT-06` Scanner-Anbindung selbst (liefert TIFF nur an, diese Kachel verarbeitet es nur in der bestehenden Pipeline weiter)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen (`dms/internal/thumbnail/generate.go`) und halte dich an die dort etablierten Muster (Magic-Bytes-Erkennung, Fehlerbehandlung, kleinste Lösung).
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-19: tiff-vorschau in der thumbnail-pipeline`
- Branch: `feature/doc-19-tiff-vorschau-in-der-thumbnail-pipeline`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# DOC-20 – Office-Dokumente in der Vorschau anzeigen
**Epic:** 🗂️ Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Den bereits vorhandenen PDF-Viewer (DOC-05) auch für Office-Dokumente nutzbar machen, indem der Inhalts-Endpunkt bei vorliegendem PDF-Derivat (DOC-06) dieses statt des Originals ausliefert — ohne den Download-Zwang oder Client-Zwang wiedereinzuführen, den das Produkt bewusst vermeidet.
**Technische Grundlage:** Bestehende Endpunkte `documentapi` (DOC-05) und `pdfconvert` (DOC-06) verknüpfen
## Produkt-DNA für diesen Bereich
> Erfassen muss so mühelos sein wie bei paperless-ngx, die Ablage so strukturiert wie bei Alfresco.
**Übernehmen:**
- Automatisierte Erfassungsstrecke: ablegen genügt, das System übernimmt Vorverarbeitung und Ableitungen.
**Bewusst vermeiden:**
- Keine Vorschau, die den Download erzwingt oder einen eigenen Client verlangt – der Fehler von ecoDMS.
- Das Original darf beim Anzeigen niemals verändert oder ersetzt werden (GoBD-Unveränderbarkeit) — die Anzeige liest ausschließlich das separate Derivat, die Revision bleibt unangetastet.
**Für genau diese Kachel:** DOC-06 erzeugt das PDF-Derivat bereits, DOC-05 kann PDF bereits anzeigen — beide Ketten sind fertig, aber nirgendwo verbunden. Eine hochgeladene .docx liefert heute den Rohinhalt an PDF.js, das damit nichts anfangen kann.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-05` PDF-Viewer-Komponente – `dms/internal/documentapi`, `GET /documents/{id}/content` liefert aktuell IMMER den entschlüsselten Originalinhalt der aktuellen Revision (Magic-Bytes-Content-Type), unabhängig vom tatsächlichen Format.
- `DOC-06` Office-zu-PDF-Konverter – `dms/internal/pdfconvert`, legt das PDF-Derivat in eigener Tabelle `revision_pdf_derivatives` ab (Status pending/processing/ready/failed je Revision), Original bleibt unverändert.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Bei einer Revision mit `ready`-Derivat in `revision_pdf_derivatives` liefert der Inhalts-/Vorschau-Endpunkt das PDF-Derivat, nicht das Original
2. Ohne vorhandenes oder noch nicht fertiges Derivat bleibt das bisherige Verhalten (Original-Content ausliefern) unverändert erhalten — kein Bruch für bereits unterstützte Formate wie PDF-Originale selbst
3. Der PDF-Viewer (DOC-05, `web/pdf-viewer`) zeigt eine hochgeladene .docx/.xlsx/.pptx nach abgeschlossener Konvertierung ohne weitere Änderung am Frontend an
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: .docx hochgeladen, nach Abschluss der Konvertierung liefert der Endpunkt PDF-Bytes (Magic-Bytes-Check `%PDF`), nicht die ursprünglichen .docx-Bytes
2. Test: PDF-Original hochgeladen (kein Derivat nötig) liefert weiterhin exakt das Original, byteidentisch
3. Test: Derivat-Status `failed` oder `pending` liefert sinnvolles Fallback-/Fehlerverhalten, kein stiller Ausfall
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-19` TIFF-Vorschau in der Thumbnail-Pipeline (separates, unabhängiges Problem)
- Änderungen an `web/pdf-viewer` selbst, falls über reines Zeigen des gelieferten PDFs hinaus nötig (z. B. Hinweistext "aus Office-Datei konvertiert") — Frontend-Hinweistexte sind eine eigene, kleinere Folgekachel, falls gewünscht
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen (`dms/internal/documentapi/handler.go`, `dms/internal/pdfconvert/pdfconvert.go`) und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-20: office-dokumente in der vorschau anzeigen`
- Branch: `feature/doc-20-office-dokumente-in-der-vorschau-anzeigen`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+59
View File
@@ -0,0 +1,59 @@
# DOC-21 – Papierkorb: Dokumente und Ordner per API in den Papierkorb verschieben
**Epic:** 📄 Dokumentenkern | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Der Gesamtstart (FDN-19, Befund B5) hat gezeigt: `internal/trash` kann Dokumente und Ordner in den Papierkorb verschieben, die HTTP-Schnittstelle kennt aber nur Liste, Wiederherstellen und endgültig Löschen. Der Smoke-Test brauchte dafür ein Hilfswerkzeug. Ein Nutzer kann über die API kein Dokument löschen.
Einen Endpunkt ergänzen, der eine Auswahl von Dokumenten und Ordnern in den Papierkorb verschiebt, mit denselben Identitäts-, Rechte- und Mandantenregeln wie die übrigen Papierkorb-Endpunkte.
**Technische Grundlage:** `internal/trash` (`SoftDeleteDocument`, `SoftDeleteFolder`), `internal/trashapi`, `internal/authz`, `internal/openapi`, `internal/apiwiring`, `docs/API.md`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Löschen ist zunächst umkehrbar: Der Papierkorb hält Objekte bis zum Ablauf der Frist, Wiederherstellen stellt Ablageort und Metadaten unverändert wieder her.
**Bewusst vermeiden:**
- Kein stilles Löschen fremder oder ausgeliehener Dokumente: Wer nicht berechtigt ist, bekommt eine Ablehnung, kein „erfolgreich“.
- Keine Löschung ohne Spur: Jede Verschiebung erscheint im Audit-Log, der Suchindex zieht nach.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: DOC-11 (Papierkorb-Logik), DOC-12 (Papierkorb-API), INT-01 (REST-API und Identität), INT-15 (Rechte-Parität), VER-01 (Ausleihe/Sperren), VER-09 (Audit), SRC-02 (Indexierung), FDN-19 (Befund B5).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. `POST /trash` verschiebt eine Auswahl von Dokumenten und Ordnern (mit Unterordnern und enthaltenen Dokumenten) in den Papierkorb, meldet das Ergebnis je ID und ist wiederholbar, ohne doppelte Audit-Einträge zu erzeugen
2. Nur berechtigte Nutzer desselben Mandanten können verschieben: fremde Dokumente und Ordner führen zu 403, fehlende Identität zu 401; ein von einem anderen Nutzer ausgeliehenes (gesperrtes) Dokument wird nicht verschoben und mit Grund gemeldet
3. Jede Verschiebung schreibt ein Audit-Ereignis, das Dokument verschwindet aus Ordneransicht und Suche und ist über `POST /trash/restore` unverändert wiederherstellbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Kompletter Lebenszyklus über die API: Verschieben, Papierkorb-Liste, Suche findet nichts mehr, Wiederherstellen, Suche findet wieder, Audit-Kette gültig
2. Negativtests: anderer Nutzer, anderer Mandant, ausgeliehenes Dokument, unbekannte und bereits verschobene ID, leere und ungültige Auswahl
3. Vertragsabgleich: OpenAPI-Beschreibung und tatsächliche Routen stimmen überein, CMIS-Parität (Delete-Objekt ist in CMIS nicht angeboten) ist dokumentiert
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Oberfläche für das Verschieben in den Papierkorb (DOC-12 und Folgekacheln)
- Endgültiges Löschen, Aufbewahrungsfristen und Legal-Hold (DOC-14, INT-11)
- Rechtemodell über die Eigentümerprüfung hinaus (Core RBAC)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-21: papierkorb-api zum verschieben in den papierkorb`
- Branch: `feature/doc-21-papierkorb-api-zum-verschieben-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# DOC-22 – Externe Freigabelinks mit Passwort und Ablauf
**Epic:** 📄 Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 4 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dokumente lassen sich nur an authentifizierte Nutzer des Mandanten ausliefern. Docspell und paperless-ngx bieten Freigabelinks für Externe, ohne dass ein Konto nötig ist. Ein Freigabelink ist die kontrollierte Ausnahme von der Regel „nur mit Konto“ und darf deshalb nur mit Ablauf, Widerruf, Zugriffsbegrenzung und Nachweis im Audit-Log entstehen.
Freigabelinks für ein einzelnes Dokument (nur lesen) einführen, mit Pflichtablauf, optionalem Passwort, Download-Limit und sofortigem Widerruf.
**Entscheidung erforderlich:** Produkt- und Datenschutzentscheidung: Externe Freigabe erlaubt Zugriff ohne Konto. Vor der Umsetzung festlegen: wer darf Links erzeugen (Eigentümer, Rolle), maximale Laufzeit, Passwortpflicht ja oder nein, Download-Limit, ob Freigaben mandantenweit abschaltbar sind. Standardvorschlag: nur Eigentümer und Mandantenadministration, Laufzeit höchstens 14 Tage, Passwort empfohlen, Freigabe per Mandanten-Schalter aus.
**Technische Grundlage:** `internal/sharelink` (neu), `internal/downloadapi`, `internal/storage` (signierte URLs, FDN-10), `internal/audittrail`, `internal/modulecall`, Migration (nächste freie DMS-Nummer), OpenAPI-Tabelle
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Freigaben als bewusst begrenzte Ausnahme: kurze Laufzeit, Widerruf, Nachweis (Vorbild Docspell und paperless-ngx).
**Bewusst vermeiden:**
- Keine Dauerlinks: der Ablauf ist Pflicht, die Obergrenze per Umgebungsvariable.
- Kein Geheimnis in der Datenbank im Klartext: Link-Token nur als Hash, Passwort nur als sicherer Hash, nie in Logs, Audit oder Fehlermeldungen.
- Kein Zugriff über die Freigabe hinaus: genau dieses Dokument, nur lesen, keine Auflistung, keine Ordnernavigation.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-10, DOC-07, VER-09, INT-01, INT-16.
Bezug: `VERGLEICHSANALYSE-QUELLSYSTEME.md` (Wurzelverzeichnis), Quellen [D1] (Docspell: öffentliche Links mit Passwort) und [P3] (paperless-ngx: Freigabe).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Freigabelinks lassen sich für ein Dokument erzeugen mit Pflichtablauf (Obergrenze konfigurierbar), optionalem Passwort und optionalem Download-Limit und sofort widerrufen; der Token ist hochentropisch und nur als Hash gespeichert
2. Der Abruf ohne Konto läuft über einen eigenen, begrenzten Pfad mit Ratenbegrenzung und Sperre bei Fehlversuchen; gelöschte, im Papierkorb liegende, gesperrte oder fremde Dokumente werden nie ausgeliefert, Antworten enthalten keine Interna
3. Erzeugung, Abruf, Fehlversuch und Widerruf stehen im Audit-Log ohne Token und Passwort; der Mandant ergibt sich aus der Instanz, nie aus Anfrageparametern
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Sicherheitsfälle: falsches Passwort, abgelaufen, widerrufen, Download-Limit erreicht, manipulierter oder erratener Token, Enumeration, fremder Mandant, Dokument im Papierkorb
2. Ratenbegrenzung und Sperre halten unter Last, keine Zeitunterschiede, die Gültigkeit verraten (zeitkonstanter Vergleich)
3. Audit-Kette bleibt gültig (`VerifyChain`), Passwort und Token tauchen in keinem Log auf
## Nicht Bestandteil dieser Kachel
- Anonyme Upload-URLs und weitere Kanäle (`INT-17`)
- Versand der Links per E-Mail und Oberfläche zur Verwaltung (eigenes UX-Ticket)
- Freigaben von Ordnern oder mehreren Dokumenten
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-22: externe freigabelinks mit passwort und ablauf`
- Branch: `feature/doc-22-externe-freigabelinks-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+60
View File
@@ -0,0 +1,60 @@
# DOC-23 – RBAC-11-Objektrechte im DMS verdrahten
**Epic:** 📄 Dokumentenkern | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
RBAC-11 (Core) hat einen eigenständigen Objekt-ACL-Anfragemodus gebaut (`/object-acl/{grant,revoke,break,unbreak,list}`, Vererbung über den vom Aufrufer mitgegebenen Pfad). Das DMS ruft ihn noch nicht auf. Die Ordnerendpunkte prüfen weiterhin nur Mandant und Eigentümer, die Ordnerstruktur bleibt mandantenweit sichtbar (dokumentierte Grenze aus INT-15, die jetzt geschlossen werden kann).
Ordner- und Dokumentzugriff soll zusätzlich zur bestehenden Modulrecht-Prüfung (RBAC-06/RBAC-10) die Objekt-ACL abfragen, wenn für den Ordner eine ACL existiert. Ordner ohne ACL verhalten sich unverändert wie bisher.
**Technische Grundlage:** `dms/internal/folderapi`, `dms/internal/authz`, `dms/internal/policyclient`, Core `/object-acl/*` (RBAC-11)
## Produkt-DNA für diesen Bereich
> Rechte, die im Katalog stehen, aber nirgends geprüft werden, sind keine Rechte.
**Übernehmen:**
- Fail-closed: Ausfall der Core-Policy-Prüfung verweigert, gibt nie stillschweigend Zugriff frei.
- Rückwärtskompatibilität: Bestandsordner ohne ACL bleiben nutzbar wie zuvor.
**Bewusst vermeiden:**
- Keine eigene, zweite Rechteverwaltung im DMS parallel zu Core-RBAC.
- Keine mandantenweite Sichtbarkeit von Ordnerinhalten mehr, sobald eine ACL gesetzt ist.
## Ausgangslage
- `RBAC-11` Objektrechte mit Vererbung für Ordner (Core) – eigenständiger Objekt-ACL-Anfragemodus, vom DMS noch nicht genutzt.
- `RBAC-06` Policy-Entscheidungs-Endpunkt, `RBAC-10` Mandant/Modulaktivierung in `/authorize` – bestehendes Aufrufmuster in `dms/internal/policyclient`.
- `INT-15` CMIS Auth-/Tenant-Scoping-Parität – dokumentierte Lücke „Ordnerstruktur bleibt mandantenweit sichtbar bis Core-RBAC“, jetzt schließbar.
## Akzeptanzkriterien
1. Ein Ordner mit gesetzter Objekt-ACL zeigt Inhalt und Navigation nur berechtigten Nutzern; Rechteentzug wirkt sofort
2. Ein Ordner ohne Objekt-ACL verhält sich unverändert wie vor diesem Ticket
3. Ausfall der Core-Policy-Prüfung verweigert den Zugriff (fail closed), niemals stillschweigende Freigabe
## Prüfungen vor der Abnahme
1. Vererbung auf Unterordner geprüft (ACL auf Elternordner wirkt auf Kinder ohne eigene ACL)
2. Mandantentrennung geprüft (ACL eines Mandanten wirkt nie auf einen anderen)
3. Endpunkte zum Setzen/Entfernen von Ordnerberechtigungen im DMS real gegen den Core-Objekt-ACL-Endpunkt geprüft
## Nicht Bestandteil dieser Kachel
- Oberfläche zur Rechtevergabe (eigenes UX-Ticket)
- Objektrechte auf Dokumentenebene unterhalb des Ordners (nur Ordner-Granularität in diesem Ticket)
## Arbeitsweise
1. Lies `docs/RBAC-11-PRUEFPROTOKOLL.md`, `dms/internal/folderapi`, `dms/internal/authz`, `dms/internal/policyclient` vollständig.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `DOC-23: rbac-11-objektrechte im dms verdrahten`
- Branch: `feature/doc-23-rbac-11-objektrechte-im-dms-verdrahten`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+65
View File
@@ -0,0 +1,65 @@
# FDN-01 – Repository & Projektgerüst
**Epic:** ⚙️ Fundament | **Rolle:** DevOps | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 1
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich DevOps und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Betrieb, Automatisierung und Reproduzierbarkeit. Alles als Konfiguration im Repository, nichts von Hand.
## Auftrag
Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
**Technische Grundlage:** Monorepo, Go, Next.js/TypeScript, golangci-lint, Prettier
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Startklar in Minuten – das Gegenteil der Alfresco-Installation. Ein einziger Befehl bringt Dienst, Datenbank und Worker hoch.
## Ausgangslage
Diese Kachel hat keine Vorbedingungen und ist sofort startbar.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Repo lässt sich mit einem Befehl installieren und starten
2. Lint- und Format-Checks laufen lokal durch
3. Branch- und Commit-Konvention dokumentiert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Frischer Clone baut ohne manuelle Nacharbeit
2. Lint-Fehler brechen den Build ab
3. README-Setupanleitung von zweiter Person nachvollzogen
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `FDN-02` Datenmodell & Migrationen
- `FDN-03` Objekt-Storage-Abstraktion
- `FDN-07` CI-Pipeline & Testharness
- `FDN-08` Logging, Metriken & Fehler-Tracking
- `SRC-01` Suchindex-Infrastruktur
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-01: repository & projektgerüst`
- Branch: `feature/fdn-01-repository-projektgerüst`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+75
View File
@@ -0,0 +1,75 @@
# FDN-02 – Datenmodell & Migrationen
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 2
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
**Technische Grundlage:** PostgreSQL, pgx/v5, SQL-Migrationsdateien (kein ORM)
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Docspell zeigt, wie ein klares Kernmodell aussieht. Ergänze von Beginn an Revision, Rechtebezug und Protokollanker, die paperless-ngx fehlen.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-01` Repository & Projektgerüst – Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle Kern-Entitäten mit Beziehungen und Indizes vorhanden
2. Migration vorwärts und rückwärts ausführbar
3. Seed-Datensatz für Entwicklung vorhanden
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Migration auf leerer DB und auf bestehender DB getestet
2. Rollback stellt Vorzustand wieder her
3. Fremdschlüssel-Constraints durch Negativtests belegt
## Bekannte Fehler vermeiden
- **Fehlende Lock-/Sum-Datei blockiert CI**: Ein Vorgängerprojekt hatte über lange Zeit keine committete Dependency-Lock-Datei, wodurch Tests in DB-/Crypto-Paketen fehlschlugen. → Lock-Datei von Anfang an committen und ein CI-Gate einrichten, das Dependency-Integrität prüft.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `FDN-04` Job-Queue & Worker-Runtime
- Core `IAM-01` Benutzer-Datenmodell & CRUD (Auth liegt vollständig in Core)
- `DOC-01` Upload-API & Chunk-Handling
- `DOC-09` Ordner- & Kabinettmodell
- `MET-01` Tag-Modell & Tag-API
- `MET-02` Benutzerdefinierte Metadatenfelder
- Workflow `ENG-01` Workflow-Engine & Zustandsmodell (liegt im Workflow-Board)
- `VER-01` Versionsmodell & Check-in/Check-out
- `VER-05` Revisionssicherer Audit-Trail
- `QA-02` Prüfgate Fundament
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-02: datenmodell & migrationen`
- Branch: `feature/fdn-02-datenmodell-migrationen`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+68
View File
@@ -0,0 +1,68 @@
# FDN-03 – Objekt-Storage-Abstraktion
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 2
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Storage-Adapter mit einheitlicher Schnittstelle für Ablegen, Lesen, Löschen und signierte URLs. Lokaler Treiber für Entwicklung, S3 für Produktion.
**Technische Grundlage:** S3-kompatibel, Presigned URLs
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Ablage im offenen Objektformat, jederzeit ohne Herstellerwerkzeug lesbar – bewusst anders als die geschlossene Ablage von ecoDMS.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-01` Repository & Projektgerüst – Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `LIC-05` Speicherverbrauch-Metrik je Tenant.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Ein Interface, zwei austauschbare Treiber
2. Signierte URLs mit konfigurierbarer Gültigkeit
3. Pfadschema innerhalb des Mandanten-Buckets für Dokument/Revision festgelegt (Bucket-Trennung selbst ist Sache von Core TEN-01)
4. Objektgröße wird bei jedem Schreib-/Löschvorgang an den zentralen Speicherverbrauch-Zähler (Core LIC-05) gemeldet
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Round-Trip-Test Upload/Download je Treiber
2. Abgelaufene signierte URL wird abgewiesen
3. Verhalten bei fehlendem Objekt liefert klaren Fehler
4. Melde-Aufruf an Core LIC-05 bei Schreib- und Löschvorgang nachweislich ausgelöst, mit korrekter Größenangabe
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-01` Upload-API & Chunk-Handling
- `QA-02` Prüfgate Fundament
- `FDN-09` Verschlüsselung at rest & Schlüsselverwaltung – die Storage-Ebene nutzt die fertige Encrypt/Decrypt-Schnittstelle aus FDN-09, verschlüsselt aber nicht selbst.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-03: objekt-storage-abstraktion`
- Branch: `feature/fdn-03-objekt-storage-abstraktion`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+76
View File
@@ -0,0 +1,76 @@
# FDN-04 – Job-Queue & Worker-Runtime
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
**Technische Grundlage:** Postgres-Jobqueue (processing_jobs, FOR UPDATE SKIP LOCKED), In-Prozess-Worker-Goroutinen, kein Redis/AMQP
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Die Hintergrundverarbeitung von paperless-ngx ist der Grund für die gute Erfassungsqualität. Baue sie belastbarer: Wiederholung, Rückstellung, Fehlerkorb.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-02` Datenmodell & Migrationen – Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jobs werden zuverlässig eingereiht und verarbeitet
2. Fehlgeschlagene Jobs landen nach n Versuchen in der DLQ
3. Job-Status ist abfragbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Absturz eines Workers führt zu erneuter Zustellung
2. Idempotenz bei Doppelzustellung nachgewiesen
3. DLQ-Eintrag manuell wiederholbar
## Bekannte Fehler vermeiden
- **Fehlerhafter Typ-Cast bei Intervall-Queries**: In einem Vorgängerprojekt trat derselbe Fehler zweimal auf, weil Intervall-Werte per String-Konkatenation statt korrektem Cast in SQL-Queries eingebaut wurden. → Arithmetischen Cast (kein String-Concat für Intervalle) als verbindliche Konvention für Job-Queue-Queries festlegen.
- **In-Memory Rate-Limiter ohne geteilten Zustand**: Bei Mehrinstanz-Betrieb hatte jede Instanz einen eigenen Rate-Limiter-Zustand, wodurch Limits aushebelbar waren. → Falls der Worker mehrinstanzfähig skaliert werden soll, State (Rate-Limits, Job-Locks) extern (Redis/DB) halten oder Single-Instance-Constraint explizit dokumentieren.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-04` Vorschau- & Thumbnail-Pipeline
- `DOC-06` Office-zu-PDF-Konverter
- `DOC-08` Massenexport als ZIP
- `SRC-02` Indexierungs-Worker & Synchronisierung
- `SRC-05` OCR-Worker
- `TSK-03` Fristen & Erinnerungen (externes Workflow-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/workflow-kanban/)
- `API-07` Webhook-Registry & Zustellung (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/) – Benachrichtigungsversand läuft über Core CFG-02/API-07, nicht über einen eigenen Dienst
- `INT-03` E-Mail-Abruf über IMAP
- `INT-05` Webhook-Registry & Zustellung
- `QA-02` Prüfgate Fundament
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-04: job-queue & worker-runtime`
- Branch: `feature/fdn-04-job-queue-worker-runtime`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+72
View File
@@ -0,0 +1,72 @@
# FDN-07 – CI-Pipeline & Testharness
**Epic:** ⚙️ Fundament | **Rolle:** DevOps | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 2
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich DevOps und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Betrieb, Automatisierung und Reproduzierbarkeit. Alles als Konfiguration im Repository, nichts von Hand.
## Auftrag
Automatisierte Pipeline für Lint, Typprüfung, Unit- und E2E-Tests sowie Build-Artefakt. Testdatenbank wird pro Lauf frisch aufgesetzt.
**Technische Grundlage:** CI-Runner, Unit-/E2E-Testrunner
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Ohne automatisierte Prüfstrecke ist Revisionssicherheit eine Behauptung.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-01` Repository & Projektgerüst – Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Pipeline läuft bei jedem Push
2. Roter Test blockiert den Merge
3. Testabdeckung wird ausgewiesen
4. 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.
5. 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.
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Absichtlich fehlschlagender Test bricht Pipeline ab
2. Pipeline-Laufzeit unter vereinbartem Grenzwert
3. Artefakt ist reproduzierbar erzeugbar
4. Absichtlich eingeführte bekannte Schwachstelle in einer Testabhängigkeit lässt den Build fehlschlagen.
5. Merge-Versuch eines sicherheitsrelevanten Codepfads ohne Test wird von der Pipeline blockiert.
## Bekannte Fehler vermeiden
- **Kaum Unit-Tests für kritische Pakete**: In Vorgängerprojekten fehlten Tests für Auth, Storage/Tenant-Isolation und Protokoll-State-Machines fast vollständig, trotz hoher Kritikalität dieser Bereiche. → Testpflicht für Auth/Tenant-Scoping/Retention als Merge-Gate in der CI-Pipeline verankern, nicht optional lassen.
- archivdms/archivmail hatten faktisch keine Tests für Auth/Tenant-Isolation (siehe known-issues-archivdms.md #2, known-issues-archivmail.md #4) — das darf sich nicht wiederholen, deshalb technisches Merge-Gate statt Test-Empfehlung.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-01` Teststrategie & Testdatenbestand
- `QA-02` Prüfgate Fundament
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-07: ci-pipeline & testharness`
- Branch: `feature/fdn-07-ci-pipeline-testharness`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+66
View File
@@ -0,0 +1,66 @@
# FDN-08 – Logging, Metriken & Fehler-Tracking
**Epic:** ⚙️ Fundament | **Rolle:** DevOps | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 2
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich DevOps und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Betrieb, Automatisierung und Reproduzierbarkeit. Alles als Konfiguration im Repository, nichts von Hand.
## Auftrag
Strukturiertes Logging mit Korrelations-ID, technische Metriken und zentrale Fehlererfassung inklusive Alarmierung.
**Technische Grundlage:** Strukturierte Logs, Metrics-Endpoint
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Alfresco ist im Betrieb schwer zu durchschauen. Mache jede Anfrage über alle Schichten hinweg nachvollziehbar.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-01` Repository & Projektgerüst – Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jede Anfrage besitzt eine Korrelations-ID über alle Schichten
2. Metriken für Latenz, Fehlerrate und Queue-Länge vorhanden
3. Unbehandelte Fehler werden zentral gemeldet
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Provozierter Fehler erscheint innerhalb einer Minute im Tracking
2. Logs enthalten keine Passwörter oder Tokens
3. Alarm-Schwelle einmal ausgelöst und quittiert
## Bekannte Fehler vermeiden
- **Silent-Fail durch Logger-Wiring-Fehler**: In einem Vorgängerprojekt war der Logger in einem CLI-Pfad nie korrekt verdrahtet, wodurch Debug-Logs stillschweigend fehlten. → Logger-Injection zentral über Dependency Injection als Konstruktor-Pflichtfeld erzwingen, damit ein fehlender Logger beim Build/Start auffällt statt zur Laufzeit stumm zu bleiben.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-02` Prüfgate Fundament
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-08: logging, metriken & fehler-tracking`
- Branch: `feature/fdn-08-logging-metriken-fehler-tracking`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+70
View File
@@ -0,0 +1,70 @@
# FDN-09 – Verschlüsselung at rest & Schlüsselverwaltung
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 2
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Envelope-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.
**Technische Grundlage:** AES-256-GCM, Envelope Encryption
## Produkt-DNA für diesen Bereich
> Ein Fundament, das man an einem Vormittag aufsetzt und das trotzdem Governance trägt.
**Übernehmen:**
- Trennung von Anfrage-Dienst und Hintergrund-Workern wie bei paperless-ngx – lange Aufgaben blockieren nie eine Anfrage.
- Sauber modelliertes Kern-Datenmodell mit klaren Beziehungen nach dem Vorbild von Docspell.
- Protokoll und Rechte werden im Datenmodell von Beginn an mitgedacht – das fehlt paperless-ngx dauerhaft.
**Bewusst vermeiden:**
- Kein Anwendungsserver mit minutenlanger Startzeit und mehreren Gigabyte Grundverbrauch wie bei Alfresco.
- Keine Konfiguration, ohne die das System nicht startet. Voreinstellungen müssen für den Einstieg genügen.
**Für genau diese Kachel:** Verschlüsselung darf kein Werkzeug des Herstellers erfordern und muss offenes, dokumentiertes Verfahren nutzen – bewusst anders als geschlossene Verschlüsselung von ecoDMS.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-01` Repository & Projektgerüst – Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `API-10` Master-Key-Verwaltung & -Rotation (KMS-Anbindung).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. DEK wird pro Objekt neu erzeugt, nie wiederverwendet
2. KEK wird ausschließlich über Core `API-10` bezogen, nie im Code oder in der Datenbank im Klartext gespeichert
3. Schlüsselrotation des KEK ist ohne Neuverschlüsselung aller Objekte möglich (nur DEK-Wrapper wird neu verpackt)
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Round-Trip Encrypt/Decrypt liefert identischen Klartext
2. Manipulierter Chiffretext wird bei Decrypt erkannt und abgelehnt (GCM-Auth-Tag)
3. KEK-Rotation getestet, alte Objekte weiterhin lesbar
## Bekannte Fehler vermeiden
- Hash-Berechnung für Dublettenerkennung (DOC-02) MUSS auf dem Klartext erfolgen, bevor diese Verschlüsselung angewendet wird. Bei nichtdeterministischer Verschlüsselung (zufälliger IV/Nonce) erzeugt dieselbe Datei sonst bei jedem Upload einen anderen Chiffretext und Duplikate werden nie erkannt. Reihenfolge im Upload-Pfad (DOC-01): Datei empfangen → SHA-256 auf Klartext → verschlüsseln (dieses Ticket) → Chiffretext ablegen.
- Master-Key-Verwaltung wurde ursprünglich unabhängig in DMS und Mail geplant — Duplikat im sicherheitskritischsten Bereich. Der Master-Key kommt jetzt zentral aus Core API-10, nur die Objekt-Verschlüsselung selbst bleibt hier.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `FDN-03` Objekt-Storage-Abstraktion
- `DOC-01` Upload-API & Chunk-Handling
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-09: verschlüsselung at rest & schlüsselverwaltung`
- Branch: `feature/fdn-09-verschluesselung-at-rest-schluesselverwaltung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+58
View File
@@ -0,0 +1,58 @@
# FDN-10 – Signierte URLs: Scope-Bindung & kurze Ablaufzeit
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 1 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
FDN-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.
**Technische Grundlage:** Storage-Adapter (S3-kompatibel), signierte URLs, Go
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- paperless-ngx/Alfresco: zeitlich begrenzte, objektgebundene Zugriffs-Tokens statt dauerhafter Links.
**Bewusst vermeiden:**
- Alfresco – in älteren Konfigurationen teils lang gültige Download-Links ohne erzwungene kurze TTL.: Ablaufzeit ist ein hartes, kurzes Limit, keine Empfehlung.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-03.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Eine signierte URL gewährt ausschließlich Zugriff auf genau das Objekt, für das sie ausgestellt wurde
2. Ablaufzeit ist konfigurierbar und im Standardfall im Minutenbereich, hart durchgesetzt vom Storage-Adapter
3. Nach Ablauf liefert ein Zugriffsversuch über die URL einen Fehler, kein stilles Fallback auf öffentlichen Zugriff
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: signierte URL für Objekt A liefert bei Zugriffsversuch auf Objekt B einen Fehler
2. Test: abgelaufene URL wird abgelehnt
3. Test: URL für ein zwischenzeitlich gelöschtes Objekt wird abgelehnt
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12): ohne explizite Scope-/TTL-Vorgabe könnten signierte URLs versehentlich zu breit (Präfix statt Objekt) oder zu lange gültig ausgestellt werden.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `FDN-03` Objekt-Storage-Abstraktion
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-10: signierte-urls-scope-bindung-kurze-ablaufzeit`
- Branch: `feature/fdn-10-signierte-urls-scope-bindung-kurze-ablaufzeit`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+58
View File
@@ -0,0 +1,58 @@
# FDN-11 – Ressourcenlimits für asynchrone Verarbeitungsjobs
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
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.
**Technische Grundlage:** Postgres-Jobqueue, Worker-Goroutinen, Ressourcenlimits (Zeit/Speicher/Seitenzahl)
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Docspell: klare Verarbeitungsgrenzen statt unbegrenzter Best-Effort-Verarbeitung.
**Bewusst vermeiden:**
- archivdms (bekannter Fehlerklasse ähnlich) – Ressourcenerschöpfung durch unbegrenzte Einzeljobs war in Altsystemen eine wiederkehrende Betriebsstörung.: harte, konfigurierbare Obergrenzen je Job von Anfang an statt nachträglicher Begrenzung nach Vorfall.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-04.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jeder Verarbeitungsjob hat konfigurierbare Obergrenzen für Zeit, Speicher und Eingabegröße/Seitenzahl
2. Eine Überschreitung führt zum kontrollierten Abbruch des Jobs (Dead-Letter-Queue), nicht zur Blockade des Workers
3. Andere, gleichzeitig laufende Jobs (auch anderer Mandanten) bleiben von einem überschreitenden Job unbeeinflusst
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test mit einer Datei, die absichtlich die Seiten-/Größenobergrenze überschreitet: Job wird kontrolliert abgebrochen
2. Lasttest: ein überschreitender Job blockiert nicht die Verarbeitung paralleler, regulärer Jobs
3. Test der Nutzerbenachrichtigung bei abgebrochenem Job
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12): unbegrenzte Einzeljob-Verarbeitung ist ein Denial-of-Service-Vektor gegen den gemeinsamen Worker-Pool, auch ohne böswillige Absicht (einfach eine sehr große legitime Datei genügt).
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `FDN-04` Job-Queue & Worker-Runtime
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-11: ressourcenlimits-f-r-asynchrone-verarbeitungsjobs`
- Branch: `feature/fdn-11-ressourcenlimits-f-r-asynchrone-verarbeitungsjobs`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+57
View File
@@ -0,0 +1,57 @@
# FDN-12 – Port-Register & Kollisionsprüfung für Standard-Ports
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Klein | **Aufwand:** 1 Personentag | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
In Betriebsstufe 1 (`PROXMOX-DEPLOYMENT.md`) laufen alle Module auf einem LXC. Die Standard-Ports der Binaries kollidieren bereits: DMS-App `:8090` gegen `archive/cmd/scrub-metrics` `:8090`, DMS-Worker-Metriken `:8091` gegen `archive/cmd/restoretest-metrics` `:8091`. Ein Port-Register mit festem Bereich je Modul und eine automatische Prüfung einführen, die doppelt vergebene oder außerhalb des Modulbereichs liegende Standard-Ports in `cmd/**/main.go` erkennt. DMS-Defaults in den DMS-Bereich verschieben.
**Technische Grundlage:** Textregister (`deploy/ports.tsv`), Shell-Prüfskript, Aufruf in der CI-Pipeline (FDN-07)
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Ein Binary pro Modul, ein systemd-Service pro Binary (`PROXMOX-DEPLOYMENT.md` Abschnitt 1): Module müssen ohne Konfigurationsänderung nebeneinander starten.
**Bewusst vermeiden:**
- Kollisionen, die erst beim Deployment auf dem Produktivsystem auffallen: Prüfung im Build statt beim Start des zweiten Dienstes.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-01, FDN-08. Die CI-Anbindung setzt FDN-07 voraus.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Das Port-Register weist jedem Modul einen Portbereich zu; DMS liegt in 8100–8199
2. Die Prüfung schlägt fehl bei doppelt vergebenem Standard-Port und bei einem Port außerhalb des Modulbereichs
3. Die DMS-Defaults (App, Worker-Metriken) liegen im DMS-Bereich und sind in `dms/README.md` dokumentiert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Prüfskript gegen einen echten Baum aus Archive- und DMS-Quellen vor der Änderung: meldet die zwei bekannten Kollisionen
2. Prüfskript nach der Änderung: fehlerfrei
3. Test mit synthetischem Baum: Duplikat und Bereichsverletzung werden erkannt, sauberer Baum besteht
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Getrennte Datenbank/Schema je Modul und modulspezifischer Name der Migrationstabelle (`schema_migrations`)
- Routenpräfix je Modul hinter dem gemeinsamen nginx
- Preflight im Installationsskript (freie Ports, Dienstnamen)
- Anpassung der Archive-Defaults (eigenes Board)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-12: port-register und kollisionspruefung`
- Branch: `feature/fdn-12-port-register-und-kollisionspruefung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+55
View File
@@ -0,0 +1,55 @@
# FDN-13 – Datenbank-/Schema-Trennung & eigene Migrationstabelle je Modul
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Klein | **Aufwand:** 1 Personentag | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
In Betriebsstufe 1 teilen sich alle Module einen PostgreSQL-Cluster. `internal/migrate` legt die Tabelle `schema_migrations` unqualifiziert an; liegen zwei Module in derselben Datenbank/demselben Schema, überschreiben sie gegenseitig ihren Migrationsfortschritt. Migrationstabelle modulspezifisch benennen (`dms_schema_migrations`), bestehende Installationen ohne Datenverlust umstellen und die Zuordnung Datenbank/Schema je Modul in `PROXMOX-DEPLOYMENT.md` verbindlich festlegen.
**Technische Grundlage:** Go-Migrationsrunner (FDN-02), PostgreSQL-Schemas
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Ein Binary pro Modul, unabhängig deploybar (`PROXMOX-DEPLOYMENT.md` Abschnitt 7): jedes Modul verwaltet seinen eigenen Migrationsstand.
**Bewusst vermeiden:**
- Namensräume, die erst beim gemeinsamen Deployment kollidieren.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-02, FDN-12.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Der Migrationsrunner des DMS nutzt eine modulspezifisch benannte Tabelle
2. Eine bestehende `schema_migrations`-Tabelle mit DMS-Versionen wird verlustfrei übernommen (Umbenennung, keine erneute Ausführung)
3. Zwei Module in derselben Datenbank behindern sich nicht gegenseitig beim Migrieren
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Migration gegen leere Datenbank legt `dms_schema_migrations` an
2. Test: Upgrade von Bestand mit `schema_migrations` führt keine Migration doppelt aus
3. Test: zweiter Runner mit anderem Tabellennamen in derselben Datenbank migriert unabhängig
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Routenpräfix je Modul
- Anpassung anderer Module (eigene Boards)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-13: datenbank-schema-trennung-je-modul`
- Branch: `feature/fdn-13-datenbank-schema-trennung-je-modul`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+55
View File
@@ -0,0 +1,55 @@
# FDN-14 – Routenpräfix je Modul hinter dem gemeinsamen Reverse Proxy
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Klein | **Aufwand:** 1 Personentag | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Das DMS registriert HTTP-Pfade auf Root-Ebene (`/search`, `/documents/{id}/content`, `/healthz`). Hinter einem gemeinsamen nginx (Betriebsstufe 1) kollidieren diese, sobald ein anderes Modul denselben Pfad nutzt. Alle DMS-Routen unter einem einheitlichen Präfix `/api/dms/v1` bereitstellen (konfigurierbar), `/healthz` bleibt zusätzlich ohne Präfix erreichbar, nginx-Beispielkonfiguration in `PROXMOX-DEPLOYMENT.md` ergänzen.
**Technische Grundlage:** net/http ServeMux, Reverse-Proxy-Konfiguration
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle: stabile, versionierte Pfade.
**Bewusst vermeiden:**
- Pfadkollisionen zwischen Modulen hinter einem Proxy.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-02, FDN-12.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle fachlichen DMS-Routen sind unter dem konfigurierbaren Präfix erreichbar
2. Ohne Präfix sind sie nicht mehr erreichbar (außer `/healthz`)
3. Die Präfixe aller Module sind im Port-/Routenregister ohne Überschneidung eingetragen
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Routen unter Präfix antworten, Root-Pfade liefern 404
2. Test: Präfix über Umgebungsvariable ändert alle Routen konsistent
3. Prüfskript: doppelte Präfixe im Register werden erkannt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Modul-zu-Modul-Authentifizierung (Core API-09)
- Anpassung anderer Module (eigene Boards)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-14: routenpraefix-je-modul`
- Branch: `feature/fdn-14-routenpraefix-je-modul`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+55
View File
@@ -0,0 +1,55 @@
# FDN-15 – Preflight-Prüfung im Installationsskript
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Klein | **Aufwand:** 1 Personentag | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Das Installationsskript (Betriebsstufe 1, `PROXMOX-DEPLOYMENT.md` Abschnitt 2) soll vor dem Einspielen prüfen, ob die Standard-Ports frei sind, ob die systemd-Unit-Namen (`nexarch-dms.service`, `nexarch-dms-worker.service`) bereits belegt sind und ob die Ziel-Datenbank bzw. das Schema erreichbar ist und keinen fremden Migrationsstand enthält. Bei Konflikt: Abbruch vor jeder Änderung mit klarer Meldung.
**Technische Grundlage:** Bash-Installationsskript, `deploy/ports.tsv` (FDN-12), systemd
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Das bewährte `install.sh`-Muster aus archivdms: natives Setup, kein Docker.
**Bewusst vermeiden:**
- Halb installierte Systeme durch Abbruch mitten im Ablauf; Kollisionen, die erst beim Start des zweiten Dienstes sichtbar werden.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-02, FDN-12.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Preflight läuft vor jeder Änderung am System
2. Belegter Port, vorhandene Unit oder fremder Migrationsstand führt zum Abbruch ohne Änderung
3. Ein freies System besteht den Preflight
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Port mit Testlistener belegt, Preflight bricht ab und nennt Port und Modul
2. Test: vorhandene Unit-Datei erkannt
3. Test: freies System besteht
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Vollständiges Installationsskript für alle Module (eigene Kachel)
- systemd-Unit-Dateien selbst
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-15: preflight-im-installationsskript`
- Branch: `feature/fdn-15-preflight-im-installationsskript`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+54
View File
@@ -0,0 +1,54 @@
# FDN-16 – Test-Isolation je Schema für Integrationstests
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Die Integrationstests des DMS teilen sich Tabellen im Schema `public` der Test-Datenbank: Inline-DDL (`CREATE TABLE IF NOT EXISTS`) verschiedener Pakete kollidiert, veraltete Tabellen aus früheren Läufen verfälschen Ergebnisse, Rollback-Tests entfernen fremde Tabellen. Folge: `trash`, `trashapi`, `export`, `audittrail`, `documenttype`, `malwarescan` schlugen unabhängig vom Code fehl, echte Fehler blieben verdeckt. Jeder Test bekommt ein eigenes, frisches Schema (`search_path`), das danach entfernt wird.
**Technische Grundlage:** PostgreSQL-Schemas, `internal/testdb`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Ein Prüfergebnis ist nur belastbar, wenn es reproduzierbar ist und nicht vom Zustand vorheriger Läufe abhängt.
**Bewusst vermeiden:**
- Geteilter Zustand zwischen Tests und Paketen; Tests, die nur grün sind, weil eine andere Suite Tabellen angelegt hat.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-02, QA-01, QA-08.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle DB-Integrationstests laufen in einem eigenen Schema und hinterlassen keine Tabellen oder Schemas
2. Alle Pakete laufen gleichzeitig (`go test ./...`) und wiederholt ohne Kollision
3. Ein vom Test-Datenbankbenutzer nicht ausführbarer Rollentest wird ausdrücklich übersprungen (mit Begründung), nicht als Fehler gewertet
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Alle Pakete parallel und mit `-p 1` auf dem Testhost
2. Danach keine `dmstest_*`-Schemas in der Test-Datenbank
3. Bisher verdeckte Fehler sind benannt und behoben oder dokumentiert
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Der Migrationstest (`internal/migrate`) ist in `FDN-13` umgestellt
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-16: test-isolation-je-schema`
- Branch: `feature/test-schema-isolation`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+58
View File
@@ -0,0 +1,58 @@
# FDN-17 – Worker-Verdrahtung aller Jobtypen
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Die Fachpakete liefern Handler für asynchrone Jobs (Vorschau `thumbnail.generate`, PDF-Konvertierung `pdfconvert.generate`, Virenscan `malwarescan.scan`, Massenexport `export.zip`, Texterkennung `ocr.plan`/`ocr.pages`), aber `cmd/worker` verarbeitet bisher nur die Requeue-Jobs für die RET-05-Registrierung. Alle anderen Jobs bleiben ewig `pending`; mit Virenscan bedeutet das sogar: hochgeladene Dokumente bleiben dauerhaft unsichtbar (fail-safe). Auch der Upload-Dienst im Consume-Ordner (`cmd/app`) reiht keinen dieser Jobs ein.
Den Worker so verdrahten, dass er alle verfügbaren Jobtypen über die Job-Queue (FDN-04) abarbeitet, mit konfigurierbarer Parallelität, und den Upload-Dienst im App-Prozess mit den passenden Einreihern versehen. Jobtypen, deren Werkzeug oder Konfiguration fehlt (kein `soffice`, kein `clamd`, kein `tesseract`), werden nicht abgeholt und das ausdrücklich gemeldet, nicht still ignoriert.
**Technische Grundlage:** `internal/jobqueue` (FDN-04), Umgebungsvariablen (`NEXARCH_DMS_WORKER_*`), externe Werkzeuge über `exec.LookPath`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- paperless-ngx: Verarbeitung getrennt vom Anfragedienst, mehrere Worker parallel.
**Bewusst vermeiden:**
- Jobs, die eingereiht, aber nie verarbeitet werden, ohne dass es jemand merkt.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-04, DOC-04, DOC-06, DOC-08, DOC-17, SRC-05.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Der Worker verarbeitet alle verfügbaren Jobtypen über einen Dispatcher; ein unbekannter Jobtyp schlägt sichtbar fehl statt still zu verschwinden
2. Ein Jobtyp ohne Werkzeug/Konfiguration wird nicht abgeholt und beim Start mit Grund gemeldet
3. Parallelität ist konfigurierbar; mehrere Worker verarbeiten dieselbe Queue ohne Doppelverarbeitung
4. Der Upload-Dienst im App-Prozess reiht Vorschau, Virenscan, Texterkennung und Konvertierung ein
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Ende-zu-Ende: Upload → alle Jobtypen laufen bis zum Endzustand (Vorschau bereit, Scan sauber, Text erkannt, Export bereit)
2. Test: fehlendes Werkzeug/Konfiguration → Jobtyp nicht abgeholt, Meldung vorhanden
3. Test: unbekannter Jobtyp landet nach den Versuchen in der Dead-Letter-Queue
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `SRC-02` Indexierungs-Worker (eigener Handler, folgt derselben Registrierung)
- Ressourcenlimits je Job (`FDN-11`)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-17: worker-verdrahtung-aller-jobtypen`
- Branch: `feature/fdn-17-worker-verdrahtung-aller-jobtypen`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+57
View File
@@ -0,0 +1,57 @@
# FDN-18 – Verdrahtung der Suche in Worker und App
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Die Suche ist als Bibliothek fertig (Indexierungs-Handler `searchindex.sync`, Such-API, gespeicherte Suchen, OCR-Qualitäts-API), aber nirgends verdrahtet: der Worker holt `searchindex.sync` nicht ab, der Upload-Dienst reiht keine Indexierung ein, der Volltext der Texterkennung erreicht den Index nicht, und `cmd/app` bindet weder `/search` noch `/saved-searches` noch `/ocr` ein. Ein hochgeladenes Dokument ist damit im laufenden System nie auffindbar.
Den Indexierungs-Handler im Worker registrieren (mit dem OCR-Text als Volltext), die Indexierung nach Upload und nach abgeschlossener Texterkennung einreihen und die Such-Routen unter dem DMS-Routenpräfix im App-Prozess einbinden. Ohne Manticore-Konfiguration bleibt alles sauber deaktiviert und wird gemeldet.
**Technische Grundlage:** `internal/workerruntime` (FDN-17), `internal/searchsync`, `internal/searchapi`, `internal/savedsearchapi`, `internal/ocrapi`, Umgebungsvariablen (`NEXARCH_DMS_WORKER_MANTICORE_ADDR`, `NEXARCH_DMS_APP_MANTICORE_ADDR`)
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- paperless-ngx: Index wird asynchron und selbständig nachgeführt.
**Bewusst vermeiden:**
- Kein stiller Auseinanderlauf von Datenbank und Suchindex: Ist die Indexierung nicht verdrahtet, wird das beim Start gemeldet.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-17, FDN-14, SRC-02, SRC-03, SRC-05, SRC-10, QA-04.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Der Worker holt `searchindex.sync` ab, wenn Manticore konfiguriert ist, und indexiert den Volltext der Texterkennung; ohne Konfiguration wird der Jobtyp nicht abgeholt und mit Grund gemeldet
2. Der Upload-Dienst reiht die Indexierung ein, und nach abgeschlossener Texterkennung wird das Dokument erneut indexiert
3. `cmd/app` bindet `/search`, `/saved-searches` und `/ocr` unter dem DMS-Routenpräfix ein; ohne Manticore-/Datenbankkonfiguration bleiben sie deaktiviert und es gibt eine Warnung
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Ende-zu-Ende: Upload → Worker → Texterkennung → Suchindex → `GET /search` findet das Dokument über einen Begriff aus dem erkannten Text
2. Test: fehlende Konfiguration → Jobtyp nicht abgeholt, Meldung vorhanden; Routen nicht eingebunden, Warnung vorhanden
3. Such-Oberfläche im Browser gegen das echte Backend statt gegen einen Stub
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Verdrahtung von Papierkorb, Massenbearbeitung und weiteren `*api`-Paketen in `cmd/app`
- Rechtemodell über Core (bleibt der vorläufige Besitzerfilter)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-18: verdrahtung der suche in worker und app`
- Branch: `feature/fdn-18-verdrahtung-suche-im-worker-und-app`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+59
View File
@@ -0,0 +1,59 @@
# FDN-19 – Gesamtsystem-Start und Smoke-Test
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Alle Kacheln sind einzeln in frischen Klonen mit Testschemas geprüft, das System lief aber nie als Ganzes: Anwendung, Worker, Suchindex, Validator-Sidecar und Datenbank zusammen, mit echten Migrationen und echter Konfiguration. Ob Verdrahtung, Konfiguration und Zusammenspiel in einem laufenden System tragen, ist unbekannt.
Das komplette DMS auf einem Testhost mit eigener Datenbank starten und mit einem Ende-zu-Ende-Smoke-Test durchspielen (Upload, Texterkennung, Suche, E-Rechnung, Download, Papierkorb, Löschschutz, Audit, Mandantentrennung), den Ressourcenbedarf im Betrieb messen, den Wiederanlauf prüfen und den Testaufbau spurlos zurückbauen.
**Technische Grundlage:** `cmd/app`, `cmd/worker`, `cmd/migrate`, Manticore, KoSIT-Sidecar (MET-07), `docs/BETRIEB-UMGEBUNGSVARIABLEN.md`, `deploy/ports.tsv`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Ein Gesamtsystem gilt erst als fertig, wenn ein reproduzierbarer Lauf es zeigt, nicht wenn die Einzelteile grün sind.
**Bewusst vermeiden:**
- Kein Testaufbau, der bestehende Dienste oder Datenbanken des Hosts berührt oder Restspuren hinterlässt.
- Keine echten Betriebsschlüssel oder Kundendaten im Test: Schlüssel und Daten sind synthetisch.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-17, FDN-18, INT-01, INT-11, INT-16, MET-06, MET-07, QA-02, SRC-05, SRC-10.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Anwendung, Worker, Suchindex und Validator laufen zusammen gegen eine frisch migrierte, eigene Datenbank; der Smoke-Test durchläuft den Dokumentenlebenszyklus vollständig und reproduzierbar per Skript
2. Der Smoke-Test belegt Mandanten- und Rechtetrennung, den fail-closed-Löschschutz ohne Archive-Anbindung und eine gültige Audit-Kette
3. Der Aufbau lässt sich vollständig zurückbauen; der Ausgangszustand des Hosts ist danach belegt wiederhergestellt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Ressourcenmessung im Betrieb (CPU, Speicher je Prozess und gesamt, Last vor und nach) gegen den Zielwert des Hosts, ohne Speichermangel-Abbrüche
2. Neustart und Wiederanlauf: App und Worker während laufender Jobs beenden, Jobs laufen nach dem Neustart weiter, es entstehen keine doppelten Dokumente
3. Rückbau ohne Restspuren: Prozesse, Dateien, Datenbank, Rolle, Suchindex-Tabellen; Dienst- und Portlisten vor und nach dem Test stimmen überein
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Anbindung an das echte Core (JWKS, Rollen, `dms.*`-Rechte) und Archive (Sperrabfrage): der Test nutzt einen lokalen Stellvertreter
- Produktivbetrieb, Deploy auf Produktivhosts, Packaging
- Behebung von Befunden außerhalb des Gesamtstarts (nur als Befund ausweisen)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-19: gesamtsystem-start und smoke-test`
- Branch: `feature/fdn-19-gesamtsystem-start-smoke-test`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+58
View File
@@ -0,0 +1,58 @@
# FDN-20 – Konfigurierbare Job-Sperrfrist und Herzschlag
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Die Sperrfrist der Job-Warteschlange ist in `cmd/worker` fest auf fünf Minuten verdrahtet. Nach hartem Abbruch von Worker oder Host laufen gehaltene Jobs deshalb erst nach knapp 300 Sekunden weiter (Befund B7 aus FDN-19). Eine kürzere Frist ist ohne Herzschlag nicht sicher, weil ein langer Job (Texterkennung, Konvertierung) dann nach Ablauf der Frist ein zweites Mal ausgeführt würde.
Die Sperrfrist per Umgebungsvariable konfigurierbar machen (mit geprüften Grenzen und sicherem Standard) und laufende Jobs ihre Sperre in regelmäßigen Abständen verlängern lassen. Verliert ein Worker seine Sperre, bricht er den Job ab und schreibt kein Ergebnis mehr.
**Technische Grundlage:** `internal/jobqueue` (Queue, Worker), `cmd/worker`, `docs/BETRIEB-UMGEBUNGSVARIABLEN.md`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Ein abgestürzter Worker verzögert Verarbeitung nur kurz und ohne Datenverlust, ein langer Job wird nicht doppelt ausgeführt.
**Bewusst vermeiden:**
- Kein stilles Doppelverarbeiten: Ein Worker, der seine Sperre verloren hat, darf den Job weder abschließen noch als fehlgeschlagen markieren.
- Keine unsichere Konfiguration: Werte außerhalb des zulässigen Bereichs verhindern den Start, statt stillschweigend ersetzt zu werden.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-04, FDN-11, FDN-17, FDN-19.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Die Sperrfrist ist per Umgebungsvariable einstellbar; der Standard bleibt fünf Minuten, ungültige oder außerhalb des Bereichs liegende Werte verhindern den Start mit klarer Meldung
2. Laufende Jobs verlängern ihre Sperre regelmäßig; ein Job, der länger als die Sperrfrist läuft, wird nicht von einem zweiten Worker abgeholt
3. Ein Worker, der seine Sperre verloren hat, bricht den Job ab und verändert dessen Zustand nicht mehr
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Doppelausführung: Ein Job, der ein Mehrfaches der Sperrfrist läuft, wird von genau einem Worker ausgeführt; es entsteht kein doppeltes Ergebnis
2. Wiederanlauf nach hartem Abbruch mit kurzer Sperrfrist: Der gehaltene Job läuft nach Ablauf der (kurzen) Frist weiter, ohne Datenverlust
3. Negativfälle: ungültige, negative, zu kleine und zu große Werte werden abgewiesen
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Änderungen an Jobtypen, Handlern oder Retry-/Backoff-Logik
- Sperrverwaltung außerhalb der Job-Warteschlange (z. B. Dokumentensperren)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-20: konfigurierbare job-sperrfrist und herzschlag`
- Branch: `feature/fdn-20-job-sperrfrist-herzschlag-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+54
View File
@@ -0,0 +1,54 @@
# FDN-21 – Suchindex-Name je Instanz
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 1 Personentag | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Der Suchindex-Name `dms_documents` ist fest im Code verdrahtet (Befund B9 aus FDN-19). Mehrere DMS-Instanzen auf demselben Manticore, wie es Modell C (eine Instanz je Mandant) vorsieht, würden sich gegenseitig überschreiben, und ein Entwicklungsbetrieb teilt sich den Namen mit Tests.
Den Namen je Instanz konfigurierbar machen, durch alle Verwender durchreichen und belegen, dass zwei Instanzen auf demselben Manticore einander nicht beeinflussen.
**Technische Grundlage:** `internal/searchindex` (`schema.go`, `query.go`, `facets.go`), `searchapi`, `searchsync`, `savedsearch`, `workerruntime`, `apiwiring`, `cmd/app`, `cmd/worker`, `docs/BETRIEB-UMGEBUNGSVARIABLEN.md`
## Produkt-DNA für diesen Bereich
**Bewusst vermeiden:**
- Kein stilles Auseinanderlaufen oder Überschreiben von Indexen verschiedener Mandanten. Ein falsch geschriebener oder unzulässiger Name ist ein Startfehler, kein stiller Ersatzname.
- Keine Änderung des Verhaltens bestehender Installationen ohne Vorwarnung: der Standardname bleibt `dms_documents`.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: SRC-01, SRC-02, SRC-03, SRC-08, SRC-10, FDN-18, FDN-19.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Der Indexname ist per Umgebungsvariable je Instanz einstellbar (Standard `dms_documents`) und wird in App, Worker, Suche, gespeicherten Suchen und Konsistenzprüfung einheitlich verwendet
2. Ungültige Namen (Zeichen außerhalb `[a-z][a-z0-9_]{0,62}`, leer, Manticore-Schlüsselwörter) werden beim Start abgelehnt
3. Zwei Instanzen mit verschiedenen Namen auf demselben Manticore sehen, ändern und löschen nur ihre eigenen Dokumente
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Zwei Instanzen parallel gegen dasselbe Manticore: Indexieren, Suchen, Neuindexierung und Löschen der einen Instanz lassen die andere unverändert
2. Bestehende Installation ohne gesetzte Variable liest weiterhin `dms_documents`
3. Eingeschleuste Namen (`x; DROP TABLE y`, Leerzeichen, Groß-/Kleinschreibung, zu lang) erreichen nie eine Manticore-Anfrage
## Nicht Bestandteil dieser Kachel
- Automatische Vergabe von Namen aus dem Mandanten (der Betrieb setzt den Namen)
- Umzug oder Umbenennung bestehender Indexe
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-21: suchindex-name je instanz`
- Branch: `feature/fdn-21-suchindex-name-je-instanz-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+56
View File
@@ -0,0 +1,56 @@
# FDN-22 – Verschlüsselung der Textkopien (DSGVO)
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dateien liegen verschlüsselt im Objekt-Speicher (FDN-09, Envelope-Verfahren mit Mandanten-KEK), ihr Klartext aber zusätzlich unverschlüsselt in der Datenbank: als OCR-Text je Seite (`revision_ocr_pages.text`, SRC-05), als extrahierter Klartext (`revision_text_index.text`, SRC-13) und als Suchtext der E-Rechnung (`revision_einvoice.search_text`, MET-06). Wer die Datenbank liest oder sichert, bekommt damit den Inhalt aller Dokumente. Für Kunden mit personenbezogenen Daten und besonderen Kategorien (Art. 9 DSGVO) ist das nicht hinnehmbar.
Die drei Textspeicher verschlüsselt ablegen, Bestandsdaten überführen und belegen, dass ohne Schlüssel kein Klartext zurückfällt. Der Suchindex (Manticore) enthält notwendig durchsuchbare Begriffe und kann nicht verschlüsselt werden: Restrisiko und Betriebsvorgabe festhalten.
**Technische Grundlage:** `internal/crypto`, neues Paket `internal/textcrypt`, `internal/ocr`, `internal/plaintext`, `internal/einvoice`, `internal/workerruntime`, Migration `0031`, `docs/BETRIEB-UMGEBUNGSVARIABLEN.md`
## Produkt-DNA für diesen Bereich
**Bewusst vermeiden:**
- Kein stiller Rückfall auf Klartext: fehlt der Schlüssel oder ist er falsch, schlägt der Zugriff fehl.
- Kein Datenverlust bei der Überführung von Bestandsdaten und keine Entschlüsselung in der Datenbank (nur im Speicher des Dienstes).
- Kein Vermischen von Mandanten: ein Text ist an seine Revision und Seite gebunden (Additional Data) und mit dem Mandanten-KEK verpackt.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-09, SRC-05, SRC-07, SRC-13, MET-06.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. OCR-Text, Klartext-Extrakt und E-Rechnungs-Suchtext werden nur verschlüsselt gespeichert (AES-256-GCM, DEK je Revision mit dem Mandanten-KEK verpackt, Bindung an Revision und Seite); die Klartextspalten bleiben leer
2. Suche, Regelauswertung, Sprachbestimmung und E-Rechnungs-Indexierung liefern unverändert dieselben Ergebnisse; fehlender oder falscher Schlüssel und ein fremder Mandanten-KEK führen zu einem Fehler, nie zu Klartext
3. Bestehende Klartextzeilen lassen sich ohne Datenverlust nachverschlüsseln, der Stand ist abfragbar; endgültiges Löschen entfernt Text und Indexeintrag
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Rohabfrage der drei Tabellen nach einem Lauf enthält kein Klartextwort, weder in Textspalten noch im Byte-Inhalt der Chiffretexte
2. Falscher Schlüssel, fehlender Schlüsselbezug und Chiffretext einer anderen Revision oder Seite werden abgelehnt
3. Bestandsdaten: Klartext vorher, verschlüsselt nachher, Suche vorher und nachher gleich; zweiter Lauf ändert nichts
## Nicht Bestandteil dieser Kachel
- Verschlüsselung des Manticore-Index (Restrisiko, siehe Protokoll)
- Verschlüsselung der Metadatenfelder und der Fehlerliste (`findings`)
- Schlüsselrotation der Textschlüssel (der KEK-Wechsel läuft über das Umverpacken des DEK wie bei FDN-09)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-22: verschlüsselung der textkopien`
- Branch: `feature/fdn-22-verschluesselung-textkopien-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+61
View File
@@ -0,0 +1,61 @@
# FDN-23 – Periodischer Integritätsjob für Objektprüfsummen
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 13
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Das DMS speichert je Revision den SHA-256 des Klartexts (`file_revisions.checksum_sha256`) und das Objekt verschlüsselt im Storage (FDN-03, FDN-09). Ob beides dauerhaft zusammenpasst, prüft heute nur der Download beim Lesen. Ein beschädigtes, fehlendes oder nicht mehr entschlüsselbares Objekt fällt erst auf, wenn jemand es öffnet (Vergleichsanalyse: paperless-ngx besitzt dafür einen „Sanity-Checker“).
Einen periodischen Job im Worker ergänzen, der Revisionen stichprobenweise oder vollständig prüft: Objekt vorhanden, entschlüsselbar, Größe und SHA-256 des entschlüsselten Klartexts stimmen mit der Datenbank überein. Das Ergebnis wird je Revision und je Lauf abgelegt, eine Abweichung erzeugt ein Audit-Ereignis.
**Technische Grundlage:** `internal/jobqueue`, `internal/workerruntime`, `internal/storage`, `internal/crypto`, `internal/audittrail`, `cmd/worker`, `docs/BETRIEB-UMGEBUNGSVARIABLEN.md`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Regelmäßige Integritätsprüfung wie der Sanity-Checker von paperless-ngx, aber mit prüfbarem Ergebnis je Revision.
- Nachgewiesene Wiederherstellbarkeit setzt voraus, dass Beschädigung früh sichtbar wird, nicht erst beim Zugriff.
**Bewusst vermeiden:**
- Keine Verwechslung von Infrastrukturfehlern mit Integritätsverletzungen: Ein nicht erreichbarer Speicher oder KEK-Dienst ist `error`, keine Aussage über das Objekt.
- Keine Dauerlast: Prüfung ist begrenzt (Stichprobe, Zeitfenster, Pausen) und setzt nach Abbruch dort fort, wo sie aufgehört hat.
- Keine falschen Alarme bei gelöschten oder im Papierkorb liegenden Dokumenten.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-03, FDN-04, FDN-09, FDN-11, FDN-17, FDN-20, VER-09, DOC-01.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Der Job prüft je Revision Vorhandensein, Entschlüsselbarkeit, Größe und SHA-256 und legt das Ergebnis mit den getrennten Zuständen `ok`, `mismatch`, `missing`, `unreadable` und `error` je Revision und je Lauf ab
2. Eine Abweichung (`mismatch`, `missing`, `unreadable`) erzeugt genau ein Audit-Ereignis je Statuswechsel, die Hash-Kette bleibt gültig; Speicher- oder Schlüsseldienstfehler (`error`) werden nicht als Integritätsverletzung gemeldet
3. Der Lauf ist über Umgebungsvariablen steuerbar (Intervall, Stichprobengröße oder Vollprüfung, Zeitfenster, Pausen, Zeitlimit je Revision), begrenzt in Dauer und Last und setzt nach Abbruch fort; gelöschte und im Papierkorb liegende Dokumente werden nicht als Fehler gemeldet
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Absichtlich beschädigtes Objekt (`mismatch` bzw. `unreadable`), fehlendes Objekt (`missing`) und falscher Schlüssel (`unreadable`) werden erkannt; unversehrte Objekte bleiben `ok`
2. Abbruch mitten im Lauf und Neustart: Die Prüfung setzt fort, keine Revision wird ausgelassen oder doppelt gemeldet
3. Mandantentrennung: Ergebnisse und Audit-Ereignisse eines Mandanten sind nur in dessen Datenbank sichtbar; ein fremder Schlüssel ergibt `unreadable`, nie `ok`
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Reparatur oder Wiederherstellung beschädigter Objekte (Archive-Backup)
- Oberfläche oder API zur Anzeige der Ergebnisse
- Prüfung von Derivaten (Vorschau, PDF/A, OCR-Text) und Suchindex (siehe SRC-02, SRC-11)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-23: periodischer integritätsjob für objektprüfsummen`
- Branch: `feature/fdn-23-integritaetsjob-objektpruefsummen-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+60
View File
@@ -0,0 +1,60 @@
# FDN-24 – Pfadbereinigung bei Export und Wiederherstellung, Zeitlimit für pdftoppm
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 1 Personentag | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Zip-Eintragsnamen des Exports entstehen ungeprüft aus dem Dokumenttitel (`../`, absolute Pfade, Steuerzeichen), das Entpacken von Sicherungen im Archive prüft Tar-Pfade nicht (Tar-Slip), und `pdftoppm` läuft ohne Zeitlimit (Befunde F-12, F-13). Titel werden zu sicheren Dateinamen bereinigt, Tar-Einträge außerhalb des Zielverzeichnisses als beschädigt abgewiesen, und `pdftoppm` läuft mit Kontext und Zeitlimit.
**Technische Grundlage:** `dms/internal/export` (`sanitizeEntryName`), `archive/internal/backup` (`safeExtractPath`, `extractFileMode`), `dms/internal/thumbnail` (`RenderTimeout`, `CommandContext`)
## Produkt-DNA für diesen Bereich
> Ein Dateiname aus Nutzereingaben ist nie ein Pfad.
**Übernehmen:**
- Exportformat (ZIP mit `manifest.csv`) und Dublettenzähler bleiben.
**Bewusst vermeiden:**
- Kein Entpacken außerhalb des Zielverzeichnisses, keine setuid-Bits aus Archiven.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `QA-15` Sicherheitsprüfung Gesamtprojekt – Befundbericht `docs/SICHERHEITSPRUEFUNG-GESAMTPROJEKT.md`, hier: F-12 (mittel), F-13 (mittel, Teil Zeitlimit).
- `DOC-15` Export, `DOC-04` Vorschau, `FDN-11` Ressourcenlimits.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Zip-Eintragsnamen enthalten nur den letzten Namensbestandteil ohne Steuerzeichen und Windows-Sonderzeichen, nie `.` oder `..`, höchstens 200 Bytes bei erhaltener Endung
2. Tar-Einträge mit `..`, absolutem Pfad oder NUL werden als beschädigt abgewiesen; Dateirechte übernehmen nur Berechtigungsbits ohne Schreibrecht für Gruppe und andere
3. `pdftoppm` wird nach 60 s (konfigurierbar) beendet, auch bei Abbruch des Auftrags-Kontexts; die Fehlermeldung ist gekürzt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Tests mit Pfadangriffen (`../`, `..\\`, absolute Pfade, NUL, lange und mehrbyte-Namen) und mit einem hängenden Ersatzprogramm
2. Bestehende Export-, Thumbnail- und Backup-Tests grün
3. `soffice`-Sandbox und Prozess-Isolation bleiben offen (OPS-Ticket)
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Sandbox für externe Prozesse (Systemd-Direktiven, bubblewrap)
- Formel-Einschleusung in `manifest.csv` (CSV-Injection)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Status: umgesetzt in Branch `feature/qa-15-phase2b-sicherheitsbehebung` (PR gegen `integration/gesamtprojekt`), Protokoll `docs/QA-15-PHASE2B-PRUEFPROTOKOLL.md`
- Commit-Nachricht: `FDN-24: pfadbereinigung bei export und wiederherstellung, zeitlimit fuer pdftoppm`
- Branch: `feature/qa-15-phase2b-sicherheitsbehebung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# FDN-26 – Skalierungs-Benchmark für große Dokumentbestände
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Alle bisherigen Performance-Zielwerte (Suche <500ms, Facetten <50ms, RBAC-11-Vererbung <50ms) wurden gegen kleine synthetische Testkorpora gemessen. Ob sie bei einem großen Dokumentbestand noch halten, ist unbelegt (Vergleichsanalyse Runde 2: fehlende Skalierungs-Benchmarks als Lücke gegenüber teils vorhandenen Referenzwerten der Quellsysteme).
Einen wiederholbaren Lastgenerator bauen, der eine große synthetische Dokumentmenge über den echten Upload-Pfad erzeugt, danach Suchlatenz, Facetten-/Filter-Antwortzeit, Ordnernavigation, Job-Queue-Durchsatz, Datenbank-/Indexgröße und Migrationsdauer messen und gegen die bestehenden Zielwerte prüfen.
**Technische Grundlage:** `internal/testcorpus`, `internal/upload`, `internal/searchindex`, `internal/searchapi`, `internal/folderapi`, `internal/jobqueue`, `cmd/migrate`
## Produkt-DNA für diesen Bereich
> Eine Zielzahl ohne Messung bei realistischer Größe ist eine Behauptung, kein Nachweis.
**Übernehmen:**
- Erzeugung über den echten Pfad (Upload-API), nicht per Direkt-SQL, damit OCR-Anbindung, Suchindex und Metadaten-Pipeline mitlaufen.
- Wiederholbarkeit: derselbe Lastgenerator lässt sich für künftige Regressionsmessungen erneut ausführen.
**Bewusst vermeiden:**
- Keine Optimierung an Zielwerten vorbei: fällt eine Messung durch, wird das als Befund mit Vorschlag dokumentiert, nicht stillschweigend die Zielzahl angehoben.
- Kein Dauerbestand: nach dem Lauf werden alle erzeugten Daten vollständig entfernt.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-04, FDN-21, DOC-01, SRC-08, RBAC-11 (Anbindung im DMS, siehe DOC-23).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Ein Werkzeug erzeugt eine synthetische Dokumentmenge über den echten Upload-Pfad und lässt sich mit einer wählbaren Zielgröße wiederholt ausführen
2. Suchlatenz (p50/p95/p99), Facetten-/Filter-Antwortzeit und Ordnernavigation sind bei der Zielmenge gemessen und mit den bestehenden Zielwerten aus QA-13, SRC-08 und RBAC-11 verglichen
3. Job-Queue-Durchsatz, Datenbank-/Indexgröße und Migrationsdauer auf befüllter Datenbank sind gemessen und im Protokoll mit Zahlen festgehalten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Lastgenerator läuft wiederholt ohne manuelle Eingriffe und meldet Fortschritt
2. Alle Messwerte sind reale Zahlen aus dem Lauf, keine Schätzungen; Abweichungen von bestehenden Zielwerten sind als Befund mit Optimierungsvorschlag dokumentiert
3. Nach Abschluss sind alle erzeugten Testdaten, Schemas und Indexeinträge vollständig entfernt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Optimierung gefundener Engpässe (außer trivialer Indexfixes)
- Dauerhaftes Last-/Monitoring-Dashboard
- Lasttest gegen mehrere gleichzeitige Mandanten
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test bzw. reproduzierbaren Messlauf.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-26: skalierungs-benchmark für große dokumentbestände`
- Branch: `feature/fdn-25-skalierungs-benchmark-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+60
View File
@@ -0,0 +1,60 @@
# FDN-27 – Backup- und Wiederherstellungsnachweis
**Epic:** ⚙️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 15
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Der Gesamtsystem-Smoke-Test (FDN-19) belegt nur den Wiederanlauf laufender Dienste, kein eigenständiges Backup-Werkzeug und keinen echten Restore-Nachweis. Die Vergleichsanalyse (Runde 2) benennt das als Lücke: „Backup/Restore-Nachweis für DMS-Daten unvollständig dokumentiert“.
Ein Werkzeug bauen, das einen konsistenten Snapshot aus Postgres-Daten und verschlüsselten Storage-Objekten erzeugt, und ein Gegenstück, das diesen Snapshot in eine leere Zielumgebung einspielt und den Suchindex daraus neu aufbaut (Manticore selbst wird nicht gesichert, da er aus Postgres/Storage rekonstruierbar ist). Ein echter Restore auf einen zweiten, unabhängigen Stand weist nach, dass Dokumentzahl, Prüfsummen und Suche nach der Wiederherstellung übereinstimmen.
**Technische Grundlage:** `internal/storage`, `internal/crypto`, `internal/integrity`, `internal/searchsync`, `internal/searchindex`, `dms/cmd/migrate`, `docs/BETRIEB-UMGEBUNGSVARIABLEN.md`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Nachgewiesene Wiederherstellbarkeit ist Freigabevoraussetzung (siehe QA-Leitsatz), nicht nur behauptet.
- Verschlüsselte Objekte bleiben im Backup verschlüsselt, Restore braucht denselben KEK-Zugang wie das Original.
**Bewusst vermeiden:**
- Kein Duplizieren der Konsistenzprüfung aus FDN-23 (Objektintegrität) oder SRC-02/SRC-11 (Index-Konsistenz) – das Werkzeug nutzt sie nach dem Restore, statt sie neu zu bauen.
- Kein Sichern des Suchindex selbst – er ist aus Postgres und Storage vollständig rekonstruierbar.
- Keine geschätzten Zeitwerte – RTO/RPO werden real gemessen, nicht angenommen.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: FDN-03, FDN-09, FDN-21, FDN-23, SRC-02, SRC-11.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Ein Backup-Werkzeug erzeugt aus einer laufenden Instanz einen konsistenten Snapshot: Postgres-Daten, verschlüsselte Storage-Objekte mit Prüfsummen-Manifest; der Suchindex wird nicht mitgesichert
2. Ein Restore-Werkzeug spielt den Snapshot in eine leere Zieldatenbank und ein leeres Zielverzeichnis ein und baut den Suchindex vollständig neu auf
3. Nach einem echten Restore auf einen zweiten, unabhängigen Stand stimmen Dokumentzahl, Objektprüfsummen (FDN-23-Integritätsjob liefert `ok`) und Suchtreffer mit dem Original überein; RTO und RPO sind für die Testmenge real gemessen, nicht geschätzt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Backup und Restore auf einem zweiten, komplett unabhängigen Datenbank-/Storage-/Index-Stand real durchgeführt, nicht simuliert
2. Restore mit falschem oder fehlendem KEK-Zugang schlägt kontrolliert fehl, liefert keinen unvollständigen oder unverschlüsselten Teilzustand
3. Gemessene Dauer für Backup und Restore bei der Testmenge dokumentiert (RTO/RPO)
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Automatisierte, wiederkehrende Backup-Zeitplanung im Betrieb (Betriebsentscheidung, siehe DEPLOYMENT-131-CHECKLISTE.md)
- Oberfläche zur Steuerung von Backup/Restore
- Sicherung/Wiederherstellung von Core-, Archive- oder Mail-Daten (eigene Module, eigene Tickets)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-27: backup- und wiederherstellungsnachweis`
- Branch: `feature/fdn-27-backup-wiederherstellungsnachweis-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
+44
View File
@@ -0,0 +1,44 @@
# FDN-28 – Rückstau/Drosselung vor dem Datenbank-Verbindungspool (Nachtrag zu QA-10)
**Epic:** 🏗️ Fundament | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 8
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API).
## Auftrag
QA-10 (Last-/Leistungstest) hat bei 150 gleichzeitigen Anfragen einen echten Engpass gefunden: der Postgres-Verbindungspool läuft mit `too many clients already` (SQLSTATE 53300) über — sowohl HTTP-Anfragen als auch Hintergrundjobs (Malware-Scan, Such-Synchronisierung) scheitern dabei mit rohen Verbindungsfehlern statt einer definierten `503`-Antwort. Es fehlt eine Rückstau-/Zulassungssteuerung zwischen HTTP-Handlern und dem DB-Pool.
**Technische Grundlage:** Begrenzung gleichzeitiger Anfragen (z. B. Semaphor/Worker-Pool vor dem DB-Zugriff), definierte `503`-Antwort mit `Retry-After` bei Überlast, unverändertes Verhalten unterhalb der Grenze.
## Ausgangslage
`dms/docs/QA-10-PRUEFPROTOKOLL.md` (Befund im Überlast-Abschnitt), `dms/internal/apiwiring` (HTTP-Verdrahtung), bestehender Postgres-Pool (`pgxpool`).
## Akzeptanzkriterien
1. Bei Überschreiten einer konfigurierbaren Zulassungsgrenze antwortet die API mit `503` und `Retry-After` statt eines rohen Verbindungsfehlers
2. Hintergrundjobs (Malware-Scan, Such-Synchronisierung) laufen bei Überlast verzögert statt mit Verbindungsfehlern zu scheitern
3. Verhalten unterhalb der Zulassungsgrenze bleibt unverändert (keine Regression bei normaler Last)
## Prüfungen vor der Abnahme
1. Simulierte Überlast (analog QA-10s Überlast-Phase): keine rohen Verbindungsfehler mehr, definierte `503`-Antworten mit `Retry-After`
2. Hintergrundjobs unter derselben Überlast: verzögerte Verarbeitung statt Fehlschlag, kein Datenverlust
3. Bestehende QA-10-Prüfungen (realistische Last, Erholung, Dauerlast) laufen unverändert grün
## Nicht Bestandteil dieser Kachel
- Grundlegende Postgres-Pool-Größenänderung (nur Zulassungssteuerung davor)
- Horizontale Skalierung/mehrere Instanzen
## Arbeitsweise
1. Lies zuerst `dms/docs/QA-10-PRUEFPROTOKOLL.md` für den genauen Befund.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `FDN-28: rueckstau drosselung vor db-verbindungspool`
- Branch: `feature/fdn-28-rueckstau-drosselung-db-verbindungspool`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+66
View File
@@ -0,0 +1,66 @@
# INT-01 – REST-API v1 & Schnittstellenbeschreibung
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dokument-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.
**Technische Grundlage:** REST, OpenAPI
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** Die Schnittstelle ist das Produkt. Die eigene Oberfläche darf keinen einzigen internen Sonderweg nutzen.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `RBAC-02` Policy-Enforcement-Schicht (zentral).
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `API-01` REST-API-Grundgerüst & Versionierung.
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle dokument-eigenen Endpunkte sind in der Beschreibung dokumentiert
2. Einheitliches Fehlerformat über alle Endpunkte (geerbt vom Core-REST-Grundgerüst)
3. Endpunkte laufen auf der zentralen, versionierten Core-API auf, keine eigene Versionierung
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Vertragstests gegen die Beschreibung laufen in der Pipeline
2. Berechtigungen greifen identisch wie in der Oberfläche
3. Beispielaufrufe aus der Dokumentation funktionieren
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Setzt voraus (externes Core-Board): `API-03` Zentrales Rate-Limiting & API-Gateway-Schicht
- Setzt voraus (externes Core-Board): `API-07` Zentrale Webhook-Registry & Zustellung
- `QA-10` Last- & Leistungstest
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-01: rest-api v1 & schnittstellenbeschreibung`
- Branch: `feature/int-01-rest-api-v1-schnittstellenbeschreibung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-03 – E-Mail-Abruf über IMAP
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Überwachte Postfächer regelmäßig abrufen, Nachrichten und Anhänge importieren und verarbeitete Nachrichten markieren.
**Technische Grundlage:** IMAP-Client, Job-Zeitplan
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** Der Postfach-Abruf von Docspell ist ausgereift. Übernimm besonders die Behandlung von Nachricht und Anhängen als zusammengehörige Einheit.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-04` Job-Queue & Worker-Runtime – Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Mehrere Postfächer parallel überwachbar
2. Nachricht und Anhänge werden als Dokumente abgelegt
3. Verarbeitete Nachrichten werden nicht erneut importiert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Verbindungsabbruch führt zu Wiederholung ohne Duplikate
2. Nachricht mit 20 Anhängen korrekt importiert
3. Zugangsdaten liegen ausschließlich verschlüsselt vor
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `INT-04` E-Mail-Regeln & Anhangverarbeitung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-03: e-mail-abruf über imap`
- Branch: `feature/int-03-e-mail-abruf-über-imap`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-04 – E-Mail-Regeln & Anhangverarbeitung
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 7
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Regeln nach Absender, Betreff oder Anhangtyp steuern Ablageort, Typ und Verschlagwortung importierter Nachrichten.
**Technische Grundlage:** Regelwerk, Anhangfilter
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** Signaturbilder und Werbeanhänge müssen ausfilterbar sein, sonst verstopft der Import das Archiv.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `INT-03` E-Mail-Abruf über IMAP – Überwachte Postfächer regelmäßig abrufen, Nachrichten und Anhänge importieren und verarbeitete Nachrichten markieren.
- `MET-05` Regelbasierte Auto-Verschlagwortung – Regeln auf Basis von Textmustern, Absender oder Dateiname vergeben automatisch Tags, Typ und Ablageort.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Regeln greifen auf Absender, Betreff und Anhangtyp zu
2. Signaturbilder und Werbeanhänge sind ausfilterbar
3. Nachricht bleibt als Kontext am Dokument erhalten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Regelwerk an Testpostfach mit erwarteter Zuordnung geprüft
2. Nachricht ohne passende Regel landet im Klärungskorb
3. Filter verwirft keine relevanten Anhänge
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-09` Schnittstellen-Vertragstests
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-04: e-mail-regeln & anhangverarbeitung`
- Branch: `feature/int-04-e-mail-regeln-anhangverarbeitung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-06 – Scanner-Anbindung über Hot-Folder
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Überwachtes Verzeichnis für Netzwerkscanner mit Stapeltrennung, automatischer Texterkennung und Ablage.
**Technische Grundlage:** Überwachter Ordner, Trennseiten
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** Der Stapelworkflow von ecoDMS ist praxiserprobt: Trennseiten teilen den Stapel in Einzeldokumente.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
- `SRC-05` OCR-Worker – Texterkennung für Scans und Bilder inklusive Entzerrung, Rauschunterdrückung und Speicherung des Volltexts je Seite.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Neue Dateien werden automatisch übernommen
2. Stapel werden anhand von Trennseiten aufgeteilt
3. Fehlerhafte Dateien landen in einem Fehlerordner
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Datei wird erst nach vollständigem Schreiben verarbeitet
2. Stapeltrennung an Referenzstapel geprüft
3. Doppelte Einlieferung erzeugt kein Duplikat
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-09` Schnittstellen-Vertragstests
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-06: scanner-anbindung über hot-folder`
- Branch: `feature/int-06-scanner-anbindung-über-hot-folder`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+66
View File
@@ -0,0 +1,66 @@
# INT-08 – Watch-Folder-Import (Consume-Ordner)
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dateisystem-Ordner, der automatisch überwacht wird — jede dort abgelegte Datei wird ohne API-Aufruf importiert. Ergänzt DOC-01 (Upload-API), ersetzt sie nicht — für Nutzer, die Dateien nicht über die Oberfläche hochladen, sondern per Netzwerkfreigabe/Sync-Tool ablegen.
**Technische Grundlage:** Überwachter Ordner, Dateisystem-Events/Polling
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** paperless-ngx' "kompromisslose Erfassungs-Pipeline … vollautomatisch ohne Nutzerinteraktion" — hier konkret als Consume-Ordner umgesetzt, der ohne API-Aufruf importiert.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision. Der Watch-Folder-Import mündet in denselben Pipeline-Weg, den DOC-01 für API-Uploads etabliert hat.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Datei im überwachten Ordner wird automatisch erkannt und importiert, ohne manuellen Trigger
2. Importierte Datei durchläuft denselben Pipeline-Weg wie ein API-Upload (Hash/Dedup/Verschlüsselung/OCR/Index)
3. Fehlerhafte/nicht lesbare Datei landet in einem Fehler-Unterordner statt den Import-Prozess zu blockieren
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Testdatei im Ordner abgelegt, erscheint automatisch als Dokument
2. Pipeline-Schritte (Hash, Dedup-Gate, Verschlüsselung) im Test nachweislich durchlaufen
3. Absichtlich beschädigte Datei landet im Fehler-Unterordner, blockiert restlichen Ordner nicht
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `DOC-02` Dublettenerkennung
- `SRC-05` OCR-Worker
- `SRC-02` Indexierungs-Worker & Synchronisierung
- `INT-06` Scanner-Anbindung über Hot-Folder
- `INT-10` Scanner-Stapelverarbeitung mit Trennseiten-/Barcode-Erkennung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-08: watch-folder-import (consume-ordner)`
- Branch: `feature/int-08-watch-folder-import-consume-ordner`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-09 – CMIS-kompatible Schnittstelle (optional)
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 5
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
CMIS-Standardschnittstelle (Content Management Interoperability Services) als optionale zusätzliche API neben der eigenen REST-API — ermöglicht Drittwerkzeugen (ECM-Migrationstools, manche Office-Plugins), die CMIS sprechen, direkten Zugriff auf DMS-Inhalte, ohne NEXARCH-spezifische Integration schreiben zu müssen.
**Technische Grundlage:** CMIS 1.1 (AtomPub oder Browser-Binding)
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** Alfresco beherrscht CMIS als Standard — NEXARCH übernimmt das Prinzip offener Interoperabilität (ecoDMS-Lehre "was die Oberfläche kann, kann auch die offene Schnittstelle"), ohne Alfresco's Gesamtgewicht zu übernehmen.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `INT-01` REST-API v1 & Schnittstellenbeschreibung – Öffentliche REST-API mit vollständiger OpenAPI-Beschreibung. Die CMIS-Schicht spiegelt die dort etablierten Rechte- und Mandantenprüfungen, statt sie neu zu erfinden.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. CMIS-Basisoperationen (Objekt lesen, Ordner navigieren, Dokument hochladen) funktionieren gegen einen CMIS-Standard-Client
2. CMIS-Zugriff respektiert dieselben Rechte/Mandantengrenzen wie die eigene REST-API
3. Optional aktivierbar, kein Zwangsbestandteil
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test mit einem CMIS-Referenzclient gegen die Schnittstelle
2. Berechtigungsprüfung im Test über CMIS-Pfad identisch zur REST-API
3. Deaktivierung blockiert CMIS-Zugriff vollständig, REST-API bleibt unberührt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-09` Schnittstellen-Vertragstests
- `QA-06` Sicherheits- & Berechtigungsprüfung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-09: cmis-kompatible schnittstelle (optional)`
- Branch: `feature/int-09-cmis-kompatible-schnittstelle-optional`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-10 – Scanner-Stapelverarbeitung mit Trennseiten-/Barcode-Erkennung
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 7
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
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.
**Technische Grundlage:** Leerseiten-Erkennung, Barcode-Decoding (z. B. ZBar/ZXing)
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Postfach-Abruf mit Regelwerk und sauberer Anhangbehandlung nach dem Vorbild von Docspell.
- Überwachter Ordner als universelle Einlieferung, wie ihn paperless-ngx populär gemacht hat.
- Stapelverarbeitung mit Trennseiten für Netzwerkscanner, wie sie ecoDMS praxistauglich löst.
**Bewusst vermeiden:**
- Keine Schnittstelle, die weniger kann als die Oberfläche. Die Oberfläche nutzt ausschließlich die öffentliche Schnittstelle.
- Kein eigener Arbeitsplatz-Client als Voraussetzung für Kernfunktionen.
**Für genau diese Kachel:** Der Stapelworkflow von ecoDMS ist praxiserprobt: Trennseiten teilen den Stapel in Einzeldokumente — hier erweitert um Barcode-Trennseiten mit optionaler Metadatenübernahme.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `INT-06` Scanner-Anbindung über Hot-Folder – Überwachtes Verzeichnis für Netzwerkscanner mit Stapeltrennung, automatischer Texterkennung und Ablage. Die dort bereits vorhandene einfache Stapeltrennung wird um Trennseiten- und Barcode-Erkennung erweitert.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Leere Trennseite wird erkannt und trennt den Stapel in einzelne Dokumente
2. Barcode-Trennseite wird erkannt, Barcode-Wert kann optional als Metadatenfeld übernommen werden
3. Stapel ohne Trennseiten wird als ein einzelnes Dokument behandelt, kein Fehlverhalten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test-Stapel mit Leerseiten-Trennung ergibt korrekte Anzahl Einzeldokumente
2. Test-Stapel mit Barcode-Trennseiten ordnet Barcode-Werte korrekt zu
3. Stapel ohne Trennseiten bleibt ein Dokument
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-09` Schnittstellen-Vertragstests
- `SRC-05` OCR-Worker
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-10: scanner-stapelverarbeitung mit trennseiten-/barcode-erkennung`
- Branch: `feature/int-10-scanner-stapelverarbeitung-trennseiten-barcode-erkennung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-11 – Archive-Anbindung: Objekttyp-Registrierung & Retention-Abfrage
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dokument-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.
**Technische Grundlage:** HTTP-Client gegen Archive-Modul-Adapter-Schnittstelle, Aufbewahrungsklassen-Mapping
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Zentrale Aufbewahrungslogik einmal in Archive, nicht doppelt im DMS – vermeidet widersprüchliche Löschregeln.
**Bewusst vermeiden:**
- Keine eigene Retention-/Legal-Hold-Logik im DMS. Das führt zu Divergenz zwischen den Modulen.
**Für genau diese Kachel:** Ohne diese Anbindung würde das DMS Dokumente löschen können, die Archive eigentlich sperrt – das wäre eine stille Compliance-Lücke.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
Setzt voraus (externes Board, siehe /home/sysops/Dokumente/Scripte/nexarch/archive-kanban/):
- `RET-05` Modul-Adapter-Schnittstelle (DMS/Mail registrieren Objekttypen) – Schnittstelle, über die DMS und Mail ihre Objekttypen (Dokument, Mail, Anhang) und die zugehörige Aufbewahrungsklasse bei Archive registrieren, statt eigene Retention-Logik zu bauen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Dokument-Objekttyp inkl. Aufbewahrungsklasse wird beim Start automatisch bei Archive registriert
2. Vor Löschung oder Hard-Overwrite eines Dokuments wird eine Sperr-Abfrage an Archive gestellt
3. Ist das Dokument gesperrt (Legal Hold), wird die Löschung abgelehnt und die Ablehnung im Audit-Log vermerkt
4. Ist Archive nicht erreichbar, wird die Löschung sicherheitshalber verweigert (fail closed), nicht stillschweigend durchgeführt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Registrierung gegen eine echte Archive-Testinstanz durchgeführt, Objekttyp erscheint dort
2. Test: gesperrtes Dokument kann nicht gelöscht werden, Ablehnung ist im Audit-Log sichtbar
3. Test: Archive-Endpunkt absichtlich nicht erreichbar – Löschung wird verweigert, kein Fallback auf ungeprüfte Löschung
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- (keine direkt abhängigen Kacheln bekannt)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-11: archive anbindung objekttyp registrierung retention abfrage`
- Branch: `feature/int-11-archive-anbindung-objekttyp-registrierung-retention-abfrage`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# INT-12 – AI-Anbindung: Objekttyp-Registrierung (Kopplung AI GOV-01)
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dokument-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.
**Technische Grundlage:** HTTP-Client gegen AI-Modul-Adapter-Schnittstelle, Feld-Mapping
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- KI bleibt optional zuschaltbar über Core LIC-02 – kein Zwang, keine harte Kopplung.
**Bewusst vermeiden:**
- Keine eigene Klassifizierungs- oder Extraktionslogik im DMS. Das dupliziert AI-Funktionalität.
**Für genau diese Kachel:** Ohne diese Registrierung bliebe AI GOV-01 ohne Gegenstelle im DMS – die KI-Funktionen (CLS/EXT/SEM) hätten keine Dokumente zum Verarbeiten.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
Setzt voraus (externes Board, siehe /home/sysops/Dokumente/Scripte/nexarch/ai-kanban/):
- `GOV-01` Modul-Adapter-Schnittstelle (DMS/Mail registrieren KI-fähige Objekttypen) – Schnittstelle, über die DMS und Mail KI-fähige Objekttypen (Dokument, E-Mail, Thread) und deren Felder registrieren, statt eigene KI-Logik zu bauen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Dokument-Objekttyp inkl. KI-relevanter Felder wird beim Start automatisch bei AI registriert
2. Registrierung ist optional: ist AI-Modul nicht aktiviert (Core LIC-02), startet das DMS unverändert ohne Fehler
3. Registrierungsfehler blockieren niemals den regulären DMS-Betrieb (fail open bei Registrierung, nicht bei Löschung)
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Registrierung gegen eine echte AI-Testinstanz durchgeführt, Objekttyp erscheint dort
2. Test: AI-Modul deaktiviert – DMS startet und läuft unverändert, keine Fehlermeldung im Normalbetrieb
3. Test: AI-Endpunkt nicht erreichbar bei Registrierung – DMS-Start wird dadurch nicht blockiert
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- (keine direkt abhängigen Kacheln bekannt)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-12: ai anbindung objekttyp registrierung kopplung ai gov 01`
- Branch: `feature/int-12-ai-anbindung-objekttyp-registrierung-kopplung-ai-gov-01`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# INT-13 – Workflow-Anbindung: Objekttyp- & Auslöser-Registrierung (Kopplung Workflow ENG-02)
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dokument-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.
**Technische Grundlage:** HTTP-Client gegen Workflow-Modul-Adapter-Schnittstelle, Ereignis-Publisher
## Produkt-DNA für diesen Bereich
> Die Schnittstelle ist das Produkt. Genau das Gegenteil des geschlossenen Ansatzes von ecoDMS.
**Übernehmen:**
- Ereignis-Publikation asynchron und best-effort mit sichtbarem Fehlerzustand, analog zum Core-Webhook-Muster (Postgres-Jobqueue statt Redis).
**Bewusst vermeiden:**
- Keine eigene Genehmigungs- oder Aufgabenlogik im DMS. Das dupliziert Workflow-Funktionalität.
**Für genau diese Kachel:** Ohne diese Anbindung bliebe Workflow ENG-02 ohne Gegenstelle im DMS – Freigabeprozesse (z. B. Vier-Augen-Freigabe vor Löschung) könnten nicht am Dokumentenlebenszyklus andocken.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
Setzt voraus (externes Board, siehe /home/sysops/Dokumente/Scripte/nexarch/workflow-kanban/):
- `ENG-02` Verbindungs-Credential-Verwaltung (OAuth/API-Keys, verschlüsselt) – Verwaltung von Zugangsdaten für Drittsysteme (OAuth-Tokens, API-Keys), verschlüsselt gespeichert und je Connector-Instanz zugeordnet.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Dokument-Objekttyp inkl. verfügbarer Auslöser-Ereignisse wird beim Start automatisch bei Workflow registriert
2. Ereignis 'Dokument angelegt' wird beim Anlegen eines Dokuments tatsächlich an Workflow publiziert
3. Fehlschlagende Zustellung eines Ereignisses blockiert nicht die auslösende DMS-Aktion (asynchron, nicht im Request-Pfad)
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Registrierung gegen eine echte Workflow-Testinstanz durchgeführt, Objekttyp und Ereignisse erscheinen dort
2. Test: Dokument angelegt – Ereignis kommt nachweislich bei Workflow an
3. Test: Workflow-Endpunkt zum Zustellzeitpunkt nicht erreichbar – Dokumentanlage im DMS bleibt trotzdem erfolgreich, Ereignis wird nachgeliefert oder sichtbar verworfen (nicht stillschweigend verloren)
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- (keine direkt abhängigen Kacheln bekannt)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-13: workflow anbindung objekttyp auslöser registrierung kopplung workflow eng 02`
- Branch: `feature/int-13-workflow-anbindung-objekttyp-auslöser-registrierung-kopplung-workflow-eng-02`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+59
View File
@@ -0,0 +1,59 @@
# INT-14 – Tenant-Zuordnung & Zugriffsschutz für Hot-Folder/Scanner-Verzeichnisse
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
INT-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.
**Technische Grundlage:** Dateisystem-Zugriffsrechte, Verzeichnisstruktur je Tenant, Go
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Docspell: klare Trennung von Eingangsordnern mit expliziter Zuordnung statt impliziter Konvention.
**Bewusst vermeiden:**
- ecoDMS – geteilte Scan-Ordner ohne harte Mandantentrennung in älteren Setups.: ein Verzeichnis gehört technisch erzwungen genau einem Tenant, keine gemeinsame Ablage mehrerer Mandanten im selben Pfad.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: INT-06, INT-08.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jedes Hot-Folder-/Scanner-Verzeichnis ist genau einem Tenant fest zugeordnet, verankert in der Core-Registry
2. Die Import-Routine lehnt einen Import ab und protokolliert dies, wenn die Verzeichnis-Tenant-Zuordnung nicht auflösbar oder inkonsistent ist
3. Dateisystemrechte beschränken Schreibzugriff auf das Verzeichnis auf die vorgesehenen Quellen (Scanner/Sync-Tool), dokumentiert in der Betriebsanleitung
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Import aus einem korrekt zugeordneten Verzeichnis legt Dokument beim richtigen Tenant an
2. Test: Import aus einem nicht zugeordneten/fehlkonfigurierten Verzeichnis wird abgelehnt und protokolliert
3. Prüft Dateisystemrechte des Verzeichnisses gegen die Betriebsanleitung
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12): dateisystembasierte Importe ohne Auth-Kontext sind ein Einfallstor für Tenant-Fehlzuordnung, das durch Modell C (physische DB-Trennung) allein nicht abgedeckt wird, weil der Fehler bereits vor dem ersten Datenbankzugriff entsteht.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `INT-06` Scanner-Anbindung über Hot-Folder
- `INT-08` Watch-Folder-Import (Consume-Ordner)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-14: tenant-zuordnung-zugriffsschutz-f-r-hot-folder-scanner-verzeichnisse`
- Branch: `feature/int-14-tenant-zuordnung-zugriffsschutz-f-r-hot-folder-scanner-verzeichnisse`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+59
View File
@@ -0,0 +1,59 @@
# INT-15 – CMIS-Schnittstelle: Auth-/Tenant-Scoping-Parität zur REST-API
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
INT-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.
**Technische Grundlage:** CMIS, gemeinsame Auth-Middleware, Go
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Alfresco: CMIS als zusätzliches Protokoll über derselben Zugriffskontrollschicht, nicht als eigener Sicherheitsperimeter.
**Bewusst vermeiden:**
- Keycloak – historisch mehrere Auth-Pfade (Admin-API, Account-Console, Protokoll-Endpunkte) mit inkonsistenter Prüfung.: genau eine Auth-/Tenant-Scoping-Implementierung für alle Protokoll-Fassaden (REST, CMIS).
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: INT-09.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. CMIS-Endpunkte verwenden dieselbe Auth-Middleware wie die REST-API, keine eigene Login-/Token-Prüfung
2. Ein über CMIS authentifizierter Aufruf ist auf denselben Tenant beschränkt wie über die REST-API mit denselben Credentials
3. Ein automatisierter Test vergleicht Zugriffsergebnisse für dieselbe Anfrage über REST und CMIS und erwartet identisches Autorisierungsverhalten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Zugriff auf ein fremdes Tenant-Dokument über CMIS wird identisch zur REST-API abgelehnt
2. Test: abgelaufenes/widerrufenes Token wird von CMIS genauso abgelehnt wie von der REST-API (Kopplung an Core IAM-17)
3. Code-Review-Gate: CMIS-Handler dürfen keine eigene Auth-Logik enthalten, nur die gemeinsame Middleware referenzieren
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12): eine zusätzliche Protokoll-Fassade ohne geteilte Auth-Schicht ist ein klassischer Bypass-Vektor für ansonsten korrekt durchgesetzte Zugriffskontrollen.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `INT-09` CMIS-kompatible Schnittstelle (optional)
- `INT-01` REST-API v1 & Schnittstellenbeschreibung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-15: cmis-schnittstelle-auth-tenant-scoping-parit-t-zur-rest-api`
- Branch: `feature/int-15-cmis-schnittstelle-auth-tenant-scoping-parit-t-zur-rest-api`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+60
View File
@@ -0,0 +1,60 @@
# INT-16 – Nutzer-Tenant-Kontext in Modul-Rückkanälen (Archive/AI/Workflow)
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 2 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
INT-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.
**Technische Grundlage:** Service-Credentials (Core API-02), Tenant-Kontext-Weiterreichung, Go
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Zitadel: Service-Accounts agieren im Namen eines Kontexts, nie mit implizit eigenen, umfassenderen Rechten.
**Bewusst vermeiden:**
- Keycloak – Service-Client-Aufrufe teilen sich in manchen Integrationen denselben weiten Scope wie der Admin-Client.: Service-Credential trägt nur die Rechte, um im Namen eines übergebenen Tenant-Kontexts zu handeln, nie tenant-übergreifend von sich aus.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: INT-11, INT-12, INT-13.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jeder Rückkanal-Aufruf an Archive/AI/Workflow trägt den Tenant-Kontext des ursprünglich anfragenden Nutzers als Pflichtparameter
2. Das aufgerufene Modul validiert, dass der übergebene Tenant-Kontext zum Tenant des Zielobjekts passt, unabhängig vom Service-Credential-Scope
3. Ein manipulierter/falscher Tenant-Kontext im Aufruf wird abgelehnt und protokolliert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Test: Rückkanal-Aufruf mit korrektem Nutzer-Tenant-Kontext liefert erwartete Daten
2. Test: Rückkanal-Aufruf mit manipuliertem Tenant-Kontext (fremder Tenant) wird abgelehnt
3. Integrationstest über DOC-13 → Workflow VOR-04 mit zwei verschiedenen Tenants, prüft Isolation
## Bekannte Fehler vermeiden
Threat-Model-Finding (DMS-Board, 2026-09-12): physische Tenant-Trennung (Core Modell C) schützt nur innerhalb eines Moduls — ein Rückkanal über Service-Credentials ohne durchgereichten Nutzer-Tenant-Kontext kann diese Isolation modulübergreifend aufweichen.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `INT-11` Archive-Anbindung: Objekttyp-Registrierung & Retention-Abfrage
- `INT-12` AI-Anbindung: Objekttyp-Registrierung (Kopplung AI GOV-01)
- `INT-13` Workflow-Anbindung: Objekttyp- & Auslöser-Registrierung (Kopplung Workflow ENG-02)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-16: nutzer-tenant-kontext-in-modul-r-ckkan-len-archive-ai-workflow`
- Branch: `feature/int-16-nutzer-tenant-kontext-in-modul-r-ckkan-len-archive-ai-workflow`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+16
View File
@@ -0,0 +1,16 @@
# INT-17 – Entscheidung (2026-09-22)
Nutzerentscheidung zur Frage aus INT-17 ("welcher Kanal zuerst, ob überhaupt, welches Schutzniveau"):
- **Anonyme Upload-URLs:** abgelehnt. Kein Kanal, der Uploads ohne Konto und ohne Zuordnung zu einer Person erlaubt.
- **SMTP-Gateway:** gewünscht, aber Umsetzung derzeit zurückgestellt ("keine jetzt"). Vorgemerkt als Folgekanal.
- **Mobile Erfassung (mobilfreundliche Weboberfläche):** gewünscht, aber Umsetzung derzeit zurückgestellt ("keine jetzt"). Vorgemerkt als Folgekanal.
**Konsequenz für dieses Ticket:** Es wird kein Kanal jetzt implementiert. INT-17 bleibt offen und wird in zwei Nachfolgetickets aufgeteilt, sobald die Umsetzung freigegeben wird:
- `INT-18` – SMTP-Gateway (Weiterleitung an feste Adresse je Mandant/Postfach, Absenderprüfung, Größenlimit, Malware-Scan-Pflicht wie beim IMAP-Pfad INT-03, Ratenbegrenzung)
- `INT-19` – Mobile Erfassung (mobilfreundliche Weboberfläche, angemeldete Nutzer, kein anonymer Zugriff; Kamera-Aufnahme im Browser, kein separates App-Paket)
Beide Folgetickets brauchen vor der Umsetzung noch: Schutzniveau (Ratenbegrenzung, Größenlimits), genaue Zuordnung zu Mandant/Postfach, und beim SMTP-Gateway die Absenderauthentifizierung (SPF/DKIM-Prüfung oder Zulassungsliste).
**Nächster Schritt:** Wenn einer der beiden Kanäle freigegeben wird, wird das jeweilige Ticket (`INT-18`/`INT-19`) im Format der bestehenden INT-Tickets ausformuliert und umgesetzt.
+62
View File
@@ -0,0 +1,62 @@
# INT-17 – Externe Erfassungskanäle: anonyme Upload-URLs, SMTP-Gateway, Mobile Erfassung
**Epic:** 🔌 Integration & API | **Rolle:** Fullstack | **Komplexität:** Komplex | **Aufwand:** 5 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Fullstack und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Schnittstelle und Oberfläche aus einem Guss: Fachlogik serverseitig, Oberfläche ausschließlich über die öffentliche Schnittstelle.
## Auftrag
Dokumente kommen bisher über angemeldete Nutzer, Watch-Folder (INT-08, INT-06) und IMAP-Abruf (INT-03) ins System. Docspell bietet zusätzlich anonyme Upload-URLs, ein SMTP-Gateway und eine mobilfreundliche Erfassung. Jeder dieser Kanäle öffnet eine Angriffsfläche ohne Konto und braucht ein eigenes Bedrohungsmodell.
Zuerst entscheiden, welcher Kanal in welcher Reihenfolge gebaut wird, dann den freigegebenen ersten Kanal umsetzen. Die übrigen Kanäle bleiben ausgeschlossen und bekommen je ein eigenes Ticket.
**Entscheidung erforderlich:** Produkt- und Sicherheitsentscheidung vor der Umsetzung: welcher der drei Kanäle (anonyme Upload-URLs, SMTP-Gateway, Mobile Erfassung als mobilfreundliche Weboberfläche) zuerst kommt, ob überhaupt, und mit welchem Schutzniveau (Passwort, Ablauf, Ratenbegrenzung). Ohne Freigabe bleibt nur das Entscheidungsdokument.
**Technische Grundlage:** `internal/upload`, `internal/malwarescan`, `internal/importdir`, `internal/apiwiring`, OpenAPI-Tabelle, Migration (nächste freie DMS-Nummer), `docs/INT-17-ENTSCHEIDUNG.md`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Erfassung von außen, aber begrenzt: Größe, Typ, Rate und Mandantenbindung wie bei DOC-01.
**Bewusst vermeiden:**
- Kein Kanal ohne Bedrohungsmodell und ausdrückliche Freigabe.
- Keine ungescannte Ablage: jede Datei durchläuft Typprüfung und Malware-Scan, bevor sie sichtbar wird.
- Keine Mandantenwahl durch den Absender: der Mandant ergibt sich aus der Bindung des Kanals.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: DOC-01, INT-03, INT-06, INT-08, INT-14, INT-16, DOC-22.
Bezug: `VERGLEICHSANALYSE-QUELLSYSTEME.md` (Wurzelverzeichnis), Quelle [D1] (Docspell: anonyme Upload-URLs, SMTP-Gateway, mobilfreundliche Oberfläche).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Ein Entscheidungsdokument liegt vor: je Kanal Nutzen, Bedrohungsmodell (Missbrauch, Massen-Upload, Typumgehung, Replay, Enumeration), Aufwand und Abhängigkeiten, mit ausdrücklicher Freigabe eines ersten Kanals durch die verantwortliche Person
2. Der freigegebene Kanal ist umgesetzt: Mandantenbindung, Größen- und Typlimits, Malware-Scan vor Ablage, Ratenbegrenzung, Audit-Eintrag je Eingang, Abschaltung per Umgebungsvariable (Standard aus)
3. Nicht freigegebene Kanäle haben keinen aktiven Codepfad und keine Route; das ist per Test belegt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Missbrauchsfälle gegen den freigegebenen Kanal: Massen-Upload, Typumgehung (MIME und Endung), überlanger Name, Pfadtricks, wiederholte Eingänge, fremder Mandant
2. Malware-Pfad: ein Testmuster wird abgewiesen und nie sichtbar; Ausfall des Scanners führt zur Ablehnung
3. Abschaltung und Standardzustand: ohne Schalter sind Route und Codepfad nicht vorhanden; Audit-Kette bleibt gültig
## Nicht Bestandteil dieser Kachel
- Die beiden nicht freigegebenen Kanäle (je eigenes Ticket)
- Native Mobil-Apps und App-Store-Auslieferung
- Freigabelinks zum Herunterladen (`DOC-22`)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-17: externe erfassungskanäle`
- Branch: `feature/int-17-externe-erfassungskanaele-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+61
View File
@@ -0,0 +1,61 @@
# INT-18 – SMTP-Gateway (Weiterleitung an feste Adresse je Mandant/Postfach)
**Epic:** 🔌 Integration & API | **Rolle:** Fullstack | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Fullstack und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Schnittstelle und Oberfläche aus einem Guss: Fachlogik serverseitig, Oberfläche ausschließlich über die öffentliche Schnittstelle.
## Auftrag
Aus `INT-17-ENTSCHEIDUNG.md`: SMTP-Gateway wurde als Kanal freigegeben, zurückgestellt bis zur expliziten Freigabe. Diese liegt jetzt vor. Ein SMTP-Eingang nimmt E-Mails an einer festen, mandanten-/postfachgebundenen Adresse entgegen und übergibt Anhänge/Nachricht an die bestehende Upload-Pipeline — analog zum bestehenden IMAP-Abruf (INT-03), aber als eingehender SMTP-Dienst statt aktivem Abruf.
**Technische Grundlage:** SMTP-Server-Bibliothek (Go), Absenderauthentifizierung (SPF/DKIM-Prüfung oder Zulassungsliste, siehe Prüfungen), bestehende DOC-01-Upload-API und Malware-Scan-Pipeline (DOC-17), Ratenbegrenzung wie bei INT-17/DOC-01.
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Feste Zuordnung Mandant/Postfach zu einer Empfangsadresse — wie bei INT-03s IMAP-Postfachbindung, kein Mandant durch Absenderwahl.
- Größen-/Typ-/Ratenbegrenzung, Malware-Scan-Pflicht wie bei jedem anderen Eingangskanal dieser Session (DOC-01, INT-17, INT-19).
**Bewusst vermeiden:**
- Kein offenes Relais: nur eingehende Zustellung an registrierte, mandantengebundene Adressen, kein Weiterversand.
- Kein Vertrauen in den Absender ohne Prüfung: SPF/DKIM oder Zulassungsliste, sonst Ablehnung.
- Keine ungescannte Ablage: jeder Anhang durchläuft Typprüfung und Malware-Scan wie jeder andere Upload.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: DOC-01, DOC-17, INT-03 (Postfachbindungs-Muster), INT-17-ENTSCHEIDUNG, INT-19 (Kill-Switch-Muster).
Bezug: `dms-kanban/tickets/INT-17-ENTSCHEIDUNG.md` (Freigabe-Historie).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. SMTP-Dienst nimmt E-Mails an registrierten, mandanten-/postfachgebundenen Adressen entgegen; unbekannte Zieladresse wird abgelehnt (kein offenes Relais)
2. Absenderauthentifizierung (SPF/DKIM-Prüfung oder Zulassungsliste) vor Annahme; ungeprüfter/fehlgeschlagener Absender wird abgelehnt
3. Anhänge laufen über die bestehende DOC-01-Pipeline (Größen-/Typlimit, Malware-Scan vor Sichtbarkeit, Audit-Eintrag je Eingang)
4. Ratenbegrenzung je Absender/Zieladresse; Abschaltbar per Umgebungsvariable (Standard aus), ohne Schalter kein aktiver Codepfad/Port
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Missbrauchsfälle: unbekannte Zieladresse, fehlgeschlagene SPF/DKIM-Prüfung, überlanger/zu großer Anhang, falscher Dateityp, wiederholte Zustellung, Rate-Limit-Überschreitung
2. Malware-Pfad: ein Testmuster wird abgewiesen und nie sichtbar; Ausfall des Scanners führt zur Ablehnung
3. Kein offenes Relais: Zustellversuch an eine nicht-registrierte Adresse wird abgelehnt, keine Weiterleitung möglich
4. Abschaltung und Standardzustand: ohne Schalter ist der Dienst/Port nicht aktiv
## Nicht Bestandteil dieser Kachel
- Ausgehender Mailversand (das ist Mail-Board, nicht dieses Ticket)
- Anonyme Upload-URLs (in INT-17-ENTSCHEIDUNG.md abgelehnt)
- Mobile Erfassung (siehe INT-19/INT-21)
## Arbeitsweise
1. Lies zuerst INT-03 (Postfachbindungs-Muster) und die bestehende DOC-01-Upload-API/Malware-Pipeline, halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-18: smtp gateway weiterleitung an feste adresse`
- Branch: `feature/int-18-smtp-gateway-weiterleitung-an-feste-adresse-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# INT-19 – Mobile Erfassung (mobilfreundliche Weboberfläche)
**Epic:** 🔌 Integration & API | **Rolle:** Fullstack | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Fullstack und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Schnittstelle und Oberfläche aus einem Guss: Fachlogik serverseitig, Oberfläche ausschließlich über die öffentliche Schnittstelle.
## Auftrag
Aus `INT-17-ENTSCHEIDUNG.md`: Mobile Erfassung wurde als zweiter Kanal freigegeben (nach dem Watch-Folder/IMAP-Bestand), zurückgestellt bis zur expliziten Freigabe. Diese liegt jetzt vor. Nutzer sollen Dokumente/Kassenbelege direkt vom Smartphone aus per Kamera aufnehmen und einreichen können, ohne ein separates App-Paket zu benötigen — eine mobilfreundliche Weboberfläche, angemeldete Nutzer, kein anonymer Zugriff.
**Technische Grundlage:** Next.js/React/TypeScript, `@nexarch/shl`-Design-System, Browser-Kamera-API (`getUserMedia`/`<input capture>`), bestehende DOC-01-Upload-API (`internal/upload`/`internal/uploadapi`) — kein neuer Backend-Upload-Pfad, dieselbe Pipeline (Duplikaterkennung, Verschlüsselung, Malware-Scan, OCR).
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Erfassung von außen, aber begrenzt: Größe, Typ, Rate und Mandantenbindung wie bei DOC-01/INT-17.
- Mobilfreundliche Bedienung wie bei modernen Scan-Apps, aber ohne eigenes App-Paket — die Weboberfläche selbst ist die Kamera-Erfassung.
**Bewusst vermeiden:**
- Kein anonymer Zugriff: nur angemeldete Nutzer, kein Kanal ohne Konto.
- Kein separates App-Paket, keine native Auslieferung über App-Stores (siehe INT-21 für die spätere, eigenständig zu entscheidende native Variante).
- Keine ungescannte Ablage: jede Aufnahme durchläuft dieselbe Typprüfung und denselben Malware-Scan wie jeder andere Upload, bevor sie sichtbar wird.
- Kein Mandant durch Nutzerwahl: der Mandant ergibt sich aus der angemeldeten Sitzung, nicht aus einer Eingabe im Formular.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: DOC-01, DOC-02, DOC-17, FDN-09, SRC-05, INT-14, INT-16, INT-17-ENTSCHEIDUNG.
Bezug: `dms-kanban/tickets/INT-17-ENTSCHEIDUNG.md` (Freigabe-Historie), `dms/internal/upload`/`dms/internal/uploadapi` (bestehende Upload-API, wird 1:1 wiederverwendet, kein neuer Backend-Endpunkt außer einem Abschalt-Schalter falls noch nicht vorhanden).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Mobilfreundliche Weboberfläche mit Kamera-Aufnahme (Live-Vorschau, erneut aufnehmen möglich, mehrere Seiten vor dem Absenden sammelbar), nur für angemeldete Nutzer erreichbar
2. Aufnahme läuft über die bestehende DOC-01-Upload-API (kein eigener Upload-Pfad); Mandant und Nutzer ergeben sich aus der Sitzung, nicht aus Formulareingaben
3. Größen- und Typlimits wie bei DOC-01 greifen unverändert; Malware-Scan läuft vor jeder Sichtbarkeit; jeder Eingang erzeugt einen Audit-Eintrag
4. Abschaltbar per Umgebungsvariable (Standard aus); ohne Freigabe ist weder Route noch Codepfad aktiv
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Missbrauchsfälle: überlange/zu große Aufnahme, falscher Dateityp, wiederholte Einreichung, Versuch ohne Anmeldung
2. Malware-Pfad: ein Testmuster wird abgewiesen und nie sichtbar; Ausfall des Scanners führt zur Ablehnung, nicht zur stillen Freigabe
3. Abschaltung und Standardzustand: ohne Schalter sind Route und Codepfad nicht vorhanden
4. Echter Barrierefreiheits-Check (pa11y, WCAG 2.1 AA) gegen die laufende Oberfläche
## Nicht Bestandteil dieser Kachel
- Native Apps und App-Store-Auslieferung (siehe INT-21)
- Anonyme Upload-URLs (in INT-17-ENTSCHEIDUNG.md abgelehnt)
- SMTP-Gateway (siehe INT-18, Mail-Board)
- Eigene Kassenbeleg-spezifische Erkennung/Sonderauswertung (bestehende OCR/Metadaten-Pipeline reicht für diese Kachel)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen (`dms/internal/upload`, `dms/internal/uploadapi`) und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-19: mobile erfassung mobilfreundliche weboberflaeche`
- Branch: `feature/int-19-mobile-erfassung-mobilfreundliche-weboberflaeche`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+64
View File
@@ -0,0 +1,64 @@
# INT-20 – Trigger-/Automatisierungssystem nach Upload
**Epic:** 🔌 Integration & API | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Schwächen bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
`VERGLEICHSANALYSE-RUNDE-2.md` zeigt: paperless-ngx hat ein Workflow-System, das nach Ereignissen (Erstellung, Aktualisierung) Aktionen auslöst (Webhook, E-Mail, Tag/Typ setzen). NEXARCH hat bisher nur Metadaten-Auto-Regeln (MET-05) ohne Aktionen nach außen. Trigger-Definitionen lösen bei einem Ereignis (Upload abgeschlossen, Texterkennung fertig, E-Rechnung geprüft) eine Aktion aus: Webhook, Tag setzen, Dokumententyp setzen.
**Technische Grundlage:** `internal/trigger`, `internal/triggerapi`, Hooks in `internal/upload` (Complete), `internal/ocr` (OnText), `internal/einvoice` (OnConformanceChecked), `internal/apiwiring`, OpenAPI-Tabelle, Migration (nächste freie DMS-Nummer)
## Produkt-DNA für diesen Bereich
> Ein Trigger-Fehler darf nie die Verarbeitung des Dokuments selbst blockieren.
**Übernehmen:**
- Ereignisbasierte Aktionen wie bei paperless-ngx, aber auf den bereits vorhandenen Verarbeitungsstufen des DMS aufgesetzt statt einer eigenen Engine.
- Webhook-Signatur (HMAC) und SSRF-Schutz wie bei den bestehenden ausgehenden Aufrufen des Systems (F-08/F-22-Muster).
**Bewusst vermeiden:**
- Keine eigene Templating-Sprache, kein Trigger-Editor mit beliebigem Code.
- Kein Trigger-Fehler, der einen abgeschlossenen Upload rückwirkend scheitern lässt.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `MET-05` Regelbasierte Auto-Verschlagwortung – Muster für Bedingungen (Dateiname/Regex) und Aktionen (Tag/Typ setzen), das dieses Ticket für Trigger-Bedingungen übernimmt.
- `SRC-05` OCR-Worker – liefert das Ereignis „Texterkennung fertig“ (OnText-Hook).
- `MET-07` Konformitätsvalidierung E-Rechnung – liefert das Ereignis „E-Rechnung geprüft“ (Konformitätsprüfung abgeschlossen).
- `FDN-22` Verschlüsselung der Textkopien – Envelope-Muster (Tenant-KEK), das dieses Ticket für das Webhook-Geheimnis übernimmt.
## Akzeptanzkriterien
1. Trigger feuert bei passendem Ereignis und passender Bedingung, nicht bei unpassenden
2. Ein Fehler in einer Aktion (z. B. nicht erreichbarer Webhook) blockiert die Verarbeitung des Dokuments nicht und wird protokolliert
3. Trigger-Verwaltung ist nur für berechtigte Nutzer möglich, das Webhook-Geheimnis wird nie im Klartext ausgeliefert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Webhook-SSRF-Negativfälle (Loopback, private Netze, Link-Local) werden abgelehnt
2. Fehlgeschlagene Aktion blockiert weder den Upload noch die übrigen Trigger für dasselbe Dokument
3. Unberechtigter Zugriff auf die Trigger-Verwaltung wird abgelehnt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Ereignisse „Tag hinzugefügt“ und „Typ geändert“ (eigene Schreibpfade in tagapi/documentapi, nicht Teil dieser Kachel)
- E-Mail-Benachrichtigung als Aktion (im DMS existiert kein E-Mail-Versandweg)
- Ordner verschieben als Aktion, Templating der Webhook-Nutzlast
- Oberfläche zur Trigger-Verwaltung (siehe UX-11-Familie)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `INT-20: trigger-/automatisierungssystem nach upload`
- Branch: `feature/int-20-trigger-automatisierung-nach-upload-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+71
View File
@@ -0,0 +1,71 @@
# INT-21 – Native Android-Erfassungs-App
**Epic:** 🔌 Integration & API | **Rolle:** Mobile/Fullstack | **Komplexität:** Komplex | **Aufwand:** 6 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Mobile/Fullstack und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert.
Fachlogik serverseitig, App ausschließlich über die öffentliche Schnittstelle.
## Auftrag
Ergänzend zu INT-19 (mobilfreundliche Weboberfläche, Erstkanal) eine native Android-App zur Dokumenten-/Kassenbeleg-Erfassung, für Nutzer, die lieber eine installierte App als eine Website nutzen. Ausdrücklich **Ergänzung, nicht Ersatz** von INT-19 — die Web-Lösung bleibt bestehen.
**Technische Grundlage:** Kotlin, Android SDK auf Build-Host 192.168.1.236 (`/opt/android-sdk`: `build-tools`, `cmake`, `cmdline-tools`/`sdkmanager`, `ndk`, `platforms`, `platform-tools` — bestätigt vorhanden). CameraX für Kamera-Aufnahme. Room (lokale SQLite-Datenbank) für die Offline-Warteschlange. Bestehende DOC-01-Upload-API als einziger Server-Endpunkt (kein neuer Backend-Code nötig, es sei denn ein Token-Ausgabe-Endpunkt fehlt noch, siehe Akzeptanzkriterium 1).
**Wichtig — nichts auf der Entwicklungsmaschine installieren:** jeglicher Android-Build (Gradle, SDK-Zugriffe, Emulator/Gerätetests) läuft ausschließlich auf Host 236, wo das SDK bereits liegt. Die Entwicklungsmaschine bleibt reine Code-Erstellung.
## Nutzerentscheidungen (2026-09-26, bindend für diese Kachel)
- **Auth:** Login mit Benutzername/Passwort in der App, danach ein langlebiges Zugriffstoken vom bestehenden Auth-System (wie andere Modul-Clients es bereits nutzen) — kein QR-Pairing.
- **Vertrieb:** internes APK-Hosting, kein Play Store, kein Google-Review-Prozess.
- **Offline-Fähigkeit:** ja — Aufnahmen werden bei fehlender Verbindung lokal zwischengespeichert und automatisch nachgereicht, sobald wieder eine Verbindung besteht.
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Dieselbe Erfassungsbegrenzung wie INT-19/DOC-01: Größe, Typ, Rate, Mandantenbindung aus der angemeldeten Sitzung.
- Kamera-Erfassung mit Live-Vorschau und erneuter Aufnahme wie bei modernen Scan-Apps (CamScanner-artig), aber ohne serverseitige Sonderlogik — Kantenerkennung/Zuschnitt rein clientseitig, das Backend sieht nur die fertige Bilddatei wie bei jedem anderen Upload.
**Bewusst vermeiden:**
- Kein anonymer Zugriff, kein Mandant durch Nutzerwahl — wie bei INT-19.
- Keine stille Offline-Warteschlange ohne sichtbaren Status: der Nutzer muss jederzeit sehen, welche Aufnahmen noch nicht übertragen wurden.
- Kein separater Backend-Uploadpfad — dieselbe DOC-01-API wie die Weboberfläche.
## Ausgangslage
Setzt auf INT-19 auf (dieselbe Produkt-DNA, dieselbe Upload-API). Baut zusätzlich auf einem Token-Ausgabe-Mechanismus für native Clients auf — prüfen, ob ein solcher bereits existiert (z.B. über die bestehende Modul-Token-/Session-Infrastruktur, `moduleauth`/Account-API); falls nicht, den kleinstmöglichen fehlenden Endpunkt ergänzen (Benutzername/Passwort gegen ein langlebiges Zugriffstoken tauschen), keine neue Auth-Architektur erfinden.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Login mit Benutzername/Passwort in der App liefert ein langlebiges Zugriffstoken; falscher Login wird abgelehnt, kein Zugriff ohne gültiges Token
2. Kamera-Aufnahme mit Live-Vorschau, erneuter Aufnahme, Sammeln mehrerer Seiten vor dem Absenden
3. Aufnahmen laufen über die bestehende DOC-01-Upload-API; Mandant/Nutzer ergeben sich aus dem Token, nicht aus einer Eingabe
4. Fehlende Verbindung: Aufnahme wird lokal zwischengespeichert (Room), Status "wartet auf Übertragung" sichtbar; sobald wieder Verbindung besteht, automatische Nachreichung ohne Nutzeraktion
5. Größen-/Typlimits wie bei INT-19/DOC-01 greifen unverändert; abgelehnte Aufnahmen werden dem Nutzer verständlich erklärt (nicht nur ein Fehlercode)
6. APK wird als internes Verteilungsartefakt gebaut (kein Play-Store-Bundle-Format-Zwang), Build läuft vollständig auf Host 236
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Login-Fehlerfälle: falsches Passwort, unbekannter Nutzer, abgelaufenes/widerrufenes Token — jeweils korrekt abgewiesen
2. Kamera-Erfassung real getestet (Emulator oder Gerät über Host 236), inkl. erneuter Aufnahme und Mehrseiten-Sammlung
3. Offline-Szenario real erzwungen (Verbindung getrennt): Aufnahme wird zwischengespeichert, Status sichtbar, nach Wiederverbindung automatische Nachreichung ohne Datenverlust
4. Größen-/Typ-Missbrauchsfälle wie bei INT-19 (überlange/zu große Aufnahme, falscher Typ) korrekt abgewiesen
5. Echter APK-Build auf Host 236 erfolgreich, Build-Artefakt vorhanden und installierbar (Smoke-Install auf Emulator)
## Nicht Bestandteil dieser Kachel
- iOS-Variante (eigenes, noch nicht angelegtes Ticket)
- Play-Store-Vertrieb (bewusst gegen entschieden)
- Serverseitige Sonderlogik für Kassenbelege über die bestehende OCR/Metadaten-Pipeline hinaus
## Arbeitsweise
1. Lies zuerst INT-19 und die bestehende DOC-01-Upload-API (`dms/internal/upload`/`dms/internal/uploadapi`), sowie die bestehende Auth-Infrastruktur (`moduleauth`, Account-API) für das Token-Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche, kein neuer Backend-Uploadpfad.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test (Unit-Tests für die App-Logik, wo sinnvoll auch instrumentierte Tests).
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Konfiguration/Build-Variablen.
7. Jeglicher Android-Build/-Test läuft auf Host 236, nichts auf der Entwicklungsmaschine installieren.
## Abschluss
- Commit-Nachricht: `INT-21: native android erfassungs app`
- Branch: `feature/int-21-native-android-erfassungs-app`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+67
View File
@@ -0,0 +1,67 @@
# MET-01 – Tag-Modell & Tag-API
**Epic:** 🏷️ Metadaten | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Tags mit Farbe und optionaler Hierarchie, Zuordnung zu Dokumenten sowie Zusammenführen und Umbenennen.
**Technische Grundlage:** Tag-Entität, Zuordnungstabelle
## Produkt-DNA für diesen Bereich
> Die Extraktionsqualität von Docspell mit dem verständlichen Ordnungsmodell von paperless-ngx.
**Übernehmen:**
- Konkrete Werte werden vorgeschlagen, nicht nur Kategorien – Datum, Betrag, Vertragspartner wie bei Docspell.
- Verständliches Grundmodell aus Korrespondent, Dokumenttyp und Tags, das ohne Schulung begreifbar ist.
- Klassifizierungsvorlagen je Dokumentart nach dem Vorbild von ecoDMS.
**Bewusst vermeiden:**
- Keine automatische Übernahme ohne Bestätigung. Vorschläge werden mit Sicherheitsgrad angezeigt und freigegeben.
- Kein starres Feldschema, das nur durch Codeänderung erweiterbar ist.
**Für genau diese Kachel:** Das Verschlagwortungsmodell von paperless-ngx ist verständlich und wirksam. Ergänze Zusammenführen und Umbenennen, was dort umständlich ist.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-02` Datenmodell & Migrationen – Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Tags sind anlegbar, umbenennbar und zusammenführbar
2. Mehrfachzuordnung je Dokument möglich
3. Löschen eines Tags entfernt nur die Zuordnung
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Zusammenführen erhält alle Zuordnungen
2. Doppelte Tag-Namen werden verhindert
3. Massenzuweisung an 500 Dokumente geprüft
## Bekannte Fehler vermeiden
- **Nil-Slice wird als JSON `null` statt `[]` serialisiert**: Ein Vorgängerprojekt musste diesen Fehler in Listen-Endpunkten wiederholt einzeln im Frontend patchen, statt ihn an der Wurzel zu beheben. → Backend-Konvention: jeder Listen-Handler (z. B. Tag-Listen) liefert grundsätzlich eine leere Liste statt nil, idealerweise per Lint erzwungen.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `MET-03` Metadaten- & Tag-Oberfläche
- `MET-05` Regelbasierte Auto-Verschlagwortung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `MET-01: tag-modell & tag-api`
- Branch: `feature/met-01-tag-modell-tag-api`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+64
View File
@@ -0,0 +1,64 @@
# MET-02 – Benutzerdefinierte Metadatenfelder
**Epic:** 🏷️ Metadaten | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Frei definierbare Felder mit Datentyp, Pflichtkennzeichen, Standardwert und Validierungsregeln.
**Technische Grundlage:** Feldschema, Validierung
## Produkt-DNA für diesen Bereich
> Die Extraktionsqualität von Docspell mit dem verständlichen Ordnungsmodell von paperless-ngx.
**Übernehmen:**
- Konkrete Werte werden vorgeschlagen, nicht nur Kategorien – Datum, Betrag, Vertragspartner wie bei Docspell.
- Verständliches Grundmodell aus Korrespondent, Dokumenttyp und Tags, das ohne Schulung begreifbar ist.
- Klassifizierungsvorlagen je Dokumentart nach dem Vorbild von ecoDMS.
**Bewusst vermeiden:**
- Keine automatische Übernahme ohne Bestätigung. Vorschläge werden mit Sicherheitsgrad angezeigt und freigegeben.
- Kein starres Feldschema, das nur durch Codeänderung erweiterbar ist.
**Für genau diese Kachel:** Alfresco erlaubt eigene Inhaltsmodelle, aber nur mit Modelldateien und Neustart. Erlaube Felddefinition zur Laufzeit über die Oberfläche.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-02` Datenmodell & Migrationen – Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Feldtypen Text, Zahl, Datum, Auswahl und Ja/Nein verfügbar
2. Validierung greift beim Speichern
3. Felddefinition ist versioniert änderbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Ungültiger Wert wird mit klarer Meldung abgewiesen
2. Typänderung eines Feldes mit Bestandsdaten getestet
3. Pflichtfeld blockiert unvollständiges Speichern
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `SRC-08` Facetten- & Filter-API
- `MET-03` Metadaten- & Tag-Oberfläche
- `MET-04` Dokumententypen & Vorlagen
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `MET-02: benutzerdefinierte metadatenfelder`
- Branch: `feature/met-02-benutzerdefinierte-metadatenfelder`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+64
View File
@@ -0,0 +1,64 @@
# MET-03 – Metadaten- & Tag-Oberfläche
**Epic:** 🏷️ Metadaten | **Rolle:** Frontend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Frontend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Oberfläche und Zustandsführung. Alle Daten ausschließlich über die öffentliche Schnittstelle beziehen.
## Auftrag
Bearbeitungsbereich am Dokument mit dynamisch erzeugtem Formular, Tag-Eingabe mit Autovervollständigung und Massenbearbeitung.
**Technische Grundlage:** Dynamische Formulare
## Produkt-DNA für diesen Bereich
> Die Extraktionsqualität von Docspell mit dem verständlichen Ordnungsmodell von paperless-ngx.
**Übernehmen:**
- Konkrete Werte werden vorgeschlagen, nicht nur Kategorien – Datum, Betrag, Vertragspartner wie bei Docspell.
- Verständliches Grundmodell aus Korrespondent, Dokumenttyp und Tags, das ohne Schulung begreifbar ist.
- Klassifizierungsvorlagen je Dokumentart nach dem Vorbild von ecoDMS.
**Bewusst vermeiden:**
- Keine automatische Übernahme ohne Bestätigung. Vorschläge werden mit Sicherheitsgrad angezeigt und freigegeben.
- Kein starres Feldschema, das nur durch Codeänderung erweiterbar ist.
**Für genau diese Kachel:** Docspell zeigt viele Felder, führt aber nicht. Baue ein Formular, das der Dokumentart folgt und nur Relevantes zeigt.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `MET-01` Tag-Modell & Tag-API – Tags mit Farbe und optionaler Hierarchie, Zuordnung zu Dokumenten sowie Zusammenführen und Umbenennen.
- `MET-02` Benutzerdefinierte Metadatenfelder – Frei definierbare Felder mit Datentyp, Pflichtkennzeichen, Standardwert und Validierungsregeln.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `SHL-01` UI-Shell & Design-System (zentral).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Formular passt sich der Felddefinition automatisch an
2. Tag-Eingabe schlägt bestehende Tags vor
3. Massenbearbeitung für ausgewählte Dokumente möglich
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Ungespeicherte Änderungen lösen Warnung aus
2. Formular per Tastatur vollständig ausfüllbar
3. Massenbearbeitung an 200 Dokumenten geprüft
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-05` Prüfgate Metadaten & Klassifizierung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `MET-03: metadaten- & tag-oberfläche`
- Branch: `feature/met-03-metadaten-tag-oberfläche`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# MET-04 – Dokumententypen & Vorlagen
**Epic:** 🏷️ Metadaten | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Dokumententypen wie Rechnung oder Vertrag mit fest zugeordneten Pflichtfeldern, Standard-Tags und Aufbewahrungsvorgabe.
**Technische Grundlage:** Typdefinition, Feldbindung
## Produkt-DNA für diesen Bereich
> Die Extraktionsqualität von Docspell mit dem verständlichen Ordnungsmodell von paperless-ngx.
**Übernehmen:**
- Konkrete Werte werden vorgeschlagen, nicht nur Kategorien – Datum, Betrag, Vertragspartner wie bei Docspell.
- Verständliches Grundmodell aus Korrespondent, Dokumenttyp und Tags, das ohne Schulung begreifbar ist.
- Klassifizierungsvorlagen je Dokumentart nach dem Vorbild von ecoDMS.
**Bewusst vermeiden:**
- Keine automatische Übernahme ohne Bestätigung. Vorschläge werden mit Sicherheitsgrad angezeigt und freigegeben.
- Kein starres Feldschema, das nur durch Codeänderung erweiterbar ist.
**Für genau diese Kachel:** Klassifizierungsvorlagen sind die praktischste Idee von ecoDMS: Dokumentart bündelt Pflichtfelder, Verschlagwortung und Aufbewahrung.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `MET-02` Benutzerdefinierte Metadatenfelder – Frei definierbare Felder mit Datentyp, Pflichtkennzeichen, Standardwert und Validierungsregeln.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Typ bündelt Felder, Tags und Aufbewahrungsvorgabe
2. Typwechsel überführt vorhandene Werte
3. Typ ist an Ordner vorbelegbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Typwechsel mit Datenverlustprüfung getestet
2. Pflichtfelder des Typs werden erzwungen
3. Vorbelegung im Ordner greift beim Upload
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-05` Prüfgate Metadaten & Klassifizierung
- KI-gestützte Klassifizierung (externes AI-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/ai-kanban/): `CLS-01` Dokumentklassifizierung, `CLS-03` Automatische Verschlagwortung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `MET-04: dokumententypen & vorlagen`
- Branch: `feature/met-04-dokumententypen-vorlagen`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+65
View File
@@ -0,0 +1,65 @@
# MET-05 – Regelbasierte Auto-Verschlagwortung
**Epic:** 🏷️ Metadaten | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Regeln auf Basis von Textmustern, Absender oder Dateiname vergeben automatisch Tags, Typ und Ablageort.
**Technische Grundlage:** Regelwerk, Mustererkennung
## Produkt-DNA für diesen Bereich
> Die Extraktionsqualität von Docspell mit dem verständlichen Ordnungsmodell von paperless-ngx.
**Übernehmen:**
- Konkrete Werte werden vorgeschlagen, nicht nur Kategorien – Datum, Betrag, Vertragspartner wie bei Docspell.
- Verständliches Grundmodell aus Korrespondent, Dokumenttyp und Tags, das ohne Schulung begreifbar ist.
- Klassifizierungsvorlagen je Dokumentart nach dem Vorbild von ecoDMS.
**Bewusst vermeiden:**
- Keine automatische Übernahme ohne Bestätigung. Vorschläge werden mit Sicherheitsgrad angezeigt und freigegeben.
- Kein starres Feldschema, das nur durch Codeänderung erweiterbar ist.
**Für genau diese Kachel:** Das Regelwerk von paperless-ngx erledigt einen Großteil der Arbeit lange vor jedem Sprachmodell. Baue es zuerst.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `MET-01` Tag-Modell & Tag-API – Tags mit Farbe und optionaler Hierarchie, Zuordnung zu Dokumenten sowie Zusammenführen und Umbenennen.
- `SRC-05` OCR-Worker – Texterkennung für Scans und Bilder inklusive Entzerrung, Rauschunterdrückung und Speicherung des Volltexts je Seite.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Regeln sind ohne Eingriff in den Code pflegbar
2. Reihenfolge und Priorität der Regeln sind steuerbar
3. Automatische Zuweisung ist als solche erkennbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Regelwerk an Testkorpus mit erwarteter Trefferquote geprüft
2. Widersprüchliche Regeln führen zu definiertem Ergebnis
3. Regeländerung wirkt ohne Neustart
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `WFL-07` Regelbasiertes Dokumenten-Routing
- `INT-04` E-Mail-Regeln & Anhangverarbeitung
- KI-gestützte Klassifizierung (externes AI-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/ai-kanban/): `CLS-01` Dokumentklassifizierung, `CLS-03` Automatische Verschlagwortung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `MET-05: regelbasierte auto-verschlagwortung`
- Branch: `feature/met-05-regelbasierte-auto-verschlagwortung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+60
View File
@@ -0,0 +1,60 @@
# MET-06 – Metadaten aus E-Rechnungen (Lesen)
**Epic:** 🏷️ Metadaten | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 12
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
E-Rechnungen (XRechnung als reines XML in den Syntaxen UBL und UN/CEFACT CII, ZUGFeRD/Factur-X als eingebettetes XML in einem PDF/A-3) werden beim Eingang erkannt, ihre Kerndaten ausgelesen und als Metadatenfelder am Dokument abgelegt, damit Suche, Filter und Regeln damit arbeiten. Das DMS liest E-Rechnungen ausschließlich; es stellt keine aus.
Kerndaten: Rechnungsnummer, Rechnungsdatum, Fälligkeit, Aussteller und Empfänger (Name), Betrag netto und brutto, Steuerbetrag, Währung, IBAN, Leitweg-ID. Zusätzlich entsteht ein Prüfergebnis mit Fehlerliste (Struktur, Pflichtfelder, Summenprüfung). Original und Revision bleiben unverändert.
**Technische Grundlage:** `internal/workerruntime` (Jobtyp), `internal/metadatafield`, `internal/searchsync` (Attribute für Filter), `internal/audittrail`, `pdfcpu` für die Anhangsextraktion, `encoding/xml`
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Docspell/paperless-ngx: Strukturierte Belegdaten fließen ohne Handarbeit in Metadaten und Suche.
**Bewusst vermeiden:**
- Keine stillen Falschwerte: Eine fehlerhafte oder unvollständige E-Rechnung wird mit Fehlerliste gemeldet, ausgelesene Werte werden nie geraten.
- Kein XML-Parser mit Entity-Expansion oder externen Entitäten: Eingaben sind unvertrauenswürdig.
## Ausgangslage
Setzt auf folgenden bereits fertiggestellten Kacheln auf: MET-02, MET-05, FDN-04, FDN-17, SRC-02, SRC-08, VER-09, DOC-01.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. XRechnung (UBL Invoice/CreditNote, CII) und ZUGFeRD/Factur-X werden erkannt; bei PDF wird das eingebettete XML extrahiert
2. Die Kerndaten werden ausgelesen und als Metadatenfelder abgelegt und sind über Suche und Filter verfügbar
3. Ein Prüfergebnis mit Fehlerliste (Struktur, Pflichtfelder, Summenprüfung) wird je Revision gespeichert; das Original bleibt byteweise unverändert; das Auslesen wird im Audit-Log festgehalten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Referenzsatz synthetischer E-Rechnungen (UBL, CII, ZUGFeRD-PDF, fehlerhafte Varianten): alle Kerndaten stimmen mit den Erwartungswerten überein
2. Angriffseingaben (DTD/Entity-Expansion, externe Entität, übergroße Datei, kaputtes XML) werden abgewiesen und erzeugen ein Prüfergebnis statt eines Absturzes
3. Ende-zu-Ende: Upload → Worker → Metadatenfelder → Suche/Filter findet die Rechnung über die Rechnungsnummer
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- Erzeugen oder Ausstellen von E-Rechnungen
- Vollvalidierung gegen die offiziellen XSD- und Schematron-Regelwerke (benötigt zusätzliches Werkzeug)
- Buchhaltungs- oder Zahlungsanbindung, Oberfläche zur Anzeige der Rechnungsdaten
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
7. Ausschließlich synthetische Rechnungen als Testdaten, keine echten Belege.
## Abschluss
- Commit-Nachricht: `MET-06: metadaten aus e-rechnungen`
- Branch: `feature/met-06-metadaten-aus-e-rechnungen`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+75
View File
@@ -0,0 +1,75 @@
# MET-07 – Konformitätsvalidierung E-Rechnung
**Epic:** 🏷️ Metadaten & Klassifizierung | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 9
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist eine belastbare, versionierte Konformitätsaussage, die nie mehr behauptet, als geprüft wurde.
## Auftrag
Eingelesene E-Rechnungen (MET-06) gegen das offizielle Regelwerk (XSD und Schematron, EN 16931 und XRechnung) prüfen und das Ergebnis je Revision ablegen.
**Technische Grundlage:** optionaler KoSIT-Validator als Sidecar (Daemon, nur lokal erreichbar), Konfiguration per Umgebungsvariable.
## Produkt-DNA für diesen Bereich
> Ein Ergebnis „gültig“ ist nur so viel wert wie die Prüfung dahinter.
**Übernehmen:**
- Ampel-Ergebnis wie bei ecoDMS (gültig, manuell prüfen, defekt), ergänzt um Regelwerk-Version und Prüfzeitpunkt.
- Referenzprüfung mit dem KoSIT-Validator, dem Referenzwerkzeug für XRechnung.
**Bewusst vermeiden:**
- Kein „gültig“ ohne Prüfung: Ausfall oder Abwesenheit des Validators ergibt „nicht geprüft“.
- Keine Vermischung von „intern stimmig“ (MET-06), „technisch gültig“ (XSD und Schematron) und steuerlicher Richtigkeit (nicht Gegenstand).
- Keine Änderung am Original: Das XML bleibt unverändert und führend (Aufbewahrung, GoBD).
## Ausgangslage
- `MET-06` Metadaten aus E-Rechnungen – Erkennung, Auslesen, interne Plausibilität, Ergebnis je Revision (`revision_einvoice`).
- `FDN-04` Job-Queue und Worker-Runtime, `FDN-18` Verdrahtungsmuster mit optionalem externen Dienst (Adresse per Env, leer = aus).
## Akzeptanzkriterien
1. Ergebnis je Revision enthält Status (`conformant`, `warnings`, `non_conformant`, `not_checked`), Regelwerk-Version, Validator-Version, Prüfzeitpunkt und Hash des Berichts
2. Fehlender oder ausgefallener Validator ergibt `not_checked`, nie `conformant`; das Einlesen nach MET-06 bleibt davon unberührt
3. Regelwerk-Update ermöglicht Neuprüfung bestehender Revisionen, ohne das Original zu verändern
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Referenzsatz aus gültigen und ungültigen synthetischen Rechnungen (UBL, CII, ZUGFeRD-Profile, Rechnung und Gutschrift) liefert je den erwarteten Status
2. Validator gestoppt, blockiert und mit Fehler antwortend: jeweils `not_checked`, kein Absturz, Wiederanlauf ohne Neustart
3. Validator nur über Loopback oder internes Netz erreichbar, kein Kundendatenabfluss, Betrieb lokal
## Nicht Bestandteil dieser Kachel
- Ausstellen von E-Rechnungen
- Steuerrechtliche oder GoBD-Bewertung
- Oberfläche und API für das Ergebnis (INT-01)
- Ersatz des Validators durch eine Go-Implementierung (erst nach Differenztest gegen den KoSIT-Validator)
## Arbeitsweise
1. Lies zuerst MET-06 (`internal/einvoice`) und das Sidecar-Muster aus FDN-18; nutze das Ergebnis-Datenmodell weiter.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Nichts auf Host 131 oder der Entwicklungsmaschine installieren; den Validator als Sidecar-Image im `deploy/`-Paket beschreiben und den Lauf gegen eine dafür bereitgestellte Instanz durchführen, fehlt sie, Prüfungen als offen ausweisen.
5. Nur synthetische Rechnungen, keine echten Belege.
6. Keine Zugangsdaten oder Adressen im Code, ausschließlich Umgebungsvariablen.
## Prüfplan (Qualitätssicherung)
| Bereich | Fälle | Erwartung |
|---|---|---|
| Formate | UBL Invoice, UBL CreditNote, CII, ZUGFeRD (alle Profile), Factur-X, XRechnung | Status je Format wie im Referenzsatz |
| Positiv | Offizielle Beispiele des Regelwerk-Pakets plus eigene synthetische Rechnungen | `conformant` |
| Negativ | Fehlende Pflichtfelder, falsche Summen, ungültige Codelisten, falsche Steuerkategorie, kaputtes XML | `non_conformant` mit Regel-ID im Bericht |
| Grenzfälle | Nur Warnungen des Regelwerks, Regelwerk mit geänderter Fehlerstufe | `warnings`, Stufe stimmt mit Bericht überein |
| Ausfall | Validator aus, Timeout, HTTP 422 (Verarbeitungsfehler), Antwort mit unbekanntem Format | `not_checked`, Grund im Ergebnis |
| Versionsdrift | Regelwerk-Bundle austauschen, Neuprüfung anstoßen | Neues Ergebnis mit neuer Version, altes bleibt nachvollziehbar |
| Sicherheit | XXE, Entity-Expansion, übergroße Datei, PDF mit manipuliertem Anhang, Daemon von außen erreichbar | Abweisung bzw. nicht erreichbar, Validator-Version ohne bekannte URI-Auflösungslücke (mindestens v1.6.3) |
| Revisionssicherheit | Hash des Original-XML vor und nach Validierung und Neuprüfung | Identisch |
| Nachvollziehbarkeit | Audit-Ereignis je Validierung, `VerifyChain` | Kette intakt |
## Abschluss
- Commit-Nachricht: `MET-07: konformitätsvalidierung e-rechnung`
- Branch: `feature/met-07-konformitaetsvalidierung-e-rechnung-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# MET-08 – Factur-X- und ZUGFeRD-Szenarien im Validator-Regelwerk
**Epic:** 🏷️ Metadaten & Klassifizierung | **Rolle:** Backend | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust NEXARCH DMS (Dokumentenkern, Suche & OCR, Metadaten, Versionierung, Integration/API), das sich an paperless-ngx, Alfresco, Docspell und ecoDMS orientiert und bekannte Fehler aus archivdms (siehe known-issues-archivdms.md) bewusst vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Das Regelwerk-Paket des KoSIT-Validators enthält kein Szenario für die ZUGFeRD-Profile BASIC, BASIC WL, EXTENDED und MINIMUM und für die XRechnung-Kennung 2.3. Diese Rechnungen enden deshalb als `not_checked` (Befund QA-13). Der Ausweichzustand ist korrekt, aber für Betreiber, die ZUGFeRD empfangen, unbefriedigend.
Die Validator-Konfiguration um die offiziellen Factur-X-/ZUGFeRD-Szenarien erweitern, sodass diese Profile geprüft werden statt `not_checked` zu bleiben.
**Technische Grundlage:** `deploy/kosit/`, Validator-Konfiguration unter `/opt/nexarch-kosit` (Host), `internal/einvoice`, `scripts/`, `docs/MET-08-PRUEFPROTOKOLL.md`
## Produkt-DNA für diesen Bereich
**Bewusst vermeiden:**
- Keine selbstgebauten Regeln: nur offizielle Schemas und Schematron-Artefakte aus Primärquelle, mit Version und Prüfsumme.
- Kein stilles Umschalten: ein Regelwerkwechsel löst die Neuprüfung aus (QA-13), das Ergebnis nennt die Version.
- Keine Abschwächung von `not_checked`: was kein Szenario hat, bleibt `not_checked`.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: MET-06, MET-07, QA-13.
Bezug: `VERGLEICHSANALYSE-QUELLSYSTEME.md` (Wurzelverzeichnis), Abschnitt „Wo NEXARCH schlechter oder unfertig ist“ (ZUGFeRD-Profile ohne Szenario bleiben `not_checked`).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Die Validator-Konfiguration enthält Szenarien für die Factur-X- und ZUGFeRD-Profile (MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED) und die XRechnung-Kennung 2.3, mit dokumentierter Quelle, Version und Prüfsumme der Artefakte
2. Der Referenzsatz aller Profile liefert je `conformant` oder `non_conformant` mit Regelwerk-Kennung statt `not_checked`; Profile ohne offizielles Artefakt bleiben `not_checked` und sind aufgelistet
3. Der Regelwerkwechsel löst die Neuprüfung bestehender Revisionen aus; die Einrichtung ist in `deploy/kosit/README.md` beschrieben und rückbaubar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Referenzsatz je Profil, positiv und negativ (synthetisch, mutiert), Ergebnis wie erwartet
2. Ausfall und Blockade des Validators führen weiterhin zu `not_checked`, nie zu `conformant`
3. Neuprüfung nach Konfigurationswechsel ohne Datenverlust, das alte Ergebnis bleibt nachvollziehbar
## Nicht Bestandteil dieser Kachel
- Ausstellen von E-Rechnungen
- Änderungen am KoSIT-Validator selbst
- Neue Metadatenfelder (MET-06)
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `MET-08: factur-x- und zugferd-szenarien im validator-regelwerk`
- Branch: `feature/met-08-facturx-zugferd-szenarien-validator-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
---
## Status (2026-09-22)
**Nicht umgesetzt.** Recherche ergab kein offizielles, mit dem KoSIT-Validator kompatibles und prüfsummenfähiges Regelwerk-Paket für die geforderten Profile. Details, Rechercheweg und Freigabefrage: `dms/docs/MET-08-PRUEFPROTOKOLL.md` (Branch `feature/met-08-facturx-zugferd-szenarien-validator-dms`, Commit `60bac77`, gepusht ohne PR, da keine Codeänderung).
+70
View File
@@ -0,0 +1,70 @@
# QA-01 – Teststrategie & Testdatenbestand
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.
**Technische Grundlage:** Teststrategie, anonymisierte Testdaten
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Ein Referenzkorpus aus echten Belegarten ist die Voraussetzung dafür, Erkennungsgüte überhaupt messen zu können.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-07` CI-Pipeline & Testharness – Automatisierte Pipeline für Lint, Typprüfung, Unit- und E2E-Tests sowie Build-Artefakt. Testdatenbank wird pro Lauf frisch aufgesetzt.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Testpyramide und Abdeckungsziele sind schriftlich festgelegt
2. Referenzkorpus mit Scans, PDFs und Office-Dateien liegt vor
3. Testdaten enthalten keine echten Personendaten
4. 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-01
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Testdatenbestand ist per Befehl reproduzierbar
2. Referenzkorpus deckt alle unterstützten Formate ab
3. Strategie im Team abgenommen
## Bekannte Fehler vermeiden
- **Kaum Tests trotz hoher Kritikalität**: In Vorgängerprojekten waren große Teile von Auth, Tenant-Scoping und Protokoll-State-Machines ungetestet, obwohl gerade dort Fehler am teuersten sind. → Testpflicht-Grundsatz für die Teststrategie: Auth/Tenant-Scoping/Retention/State-Machines erhalten verbindliche Pflichttests vor Merge, nicht optional nachgereicht.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-03` Prüfgate Dokumentenkern
- `QA-04` Prüfgate Suche & Texterkennung
- `QA-05` Prüfgate Metadaten & Klassifizierung
- `QA-07` Prüfgate Workflow & Benachrichtigung
- `QA-10` Last- & Leistungstest
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-01: teststrategie & testdatenbestand`
- Branch: `feature/qa-01-teststrategie-testdatenbestand`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+68
View File
@@ -0,0 +1,68 @@
# QA-02 – Prüfgate Fundament
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Abnahme der Grundlage: Datenmodell, Storage, Queue, Auth, Pipeline und Observability greifen zuverlässig ineinander.
**Technische Grundlage:** Integrationstests, Betriebsprüfung
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Fundament abnehmen, bevor Fachlichkeit daraufgesetzt wird. Nachträgliche Korrekturen am Fundament sind die teuersten.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `IAM-02` Login/Session/JWT-Grundgerüst.
- `FDN-02` Datenmodell & Migrationen – Kern-Entitäten modellieren: Dokument, Datei-Revision, Ordner, Benutzer, Tag, Metadatenfeld. Migrationen versioniert und rückrollbar.
- `FDN-03` Objekt-Storage-Abstraktion – Storage-Adapter mit einheitlicher Schnittstelle für Ablegen, Lesen, Löschen und signierte URLs. Lokaler Treiber für Entwicklung, S3 für Produktion.
- `FDN-04` Job-Queue & Worker-Runtime – Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `SHL-01` UI-Shell & Design-System (zentral).
- `FDN-07` CI-Pipeline & Testharness – Automatisierte Pipeline für Lint, Typprüfung, Unit- und E2E-Tests sowie Build-Artefakt. Testdatenbank wird pro Lauf frisch aufgesetzt.
- `FDN-08` Logging, Metriken & Fehler-Tracking – Strukturiertes Logging mit Korrelations-ID, technische Metriken und zentrale Fehlererfassung inklusive Alarmierung.
- `FDN-09` Verschlüsselung at rest & Schlüsselverwaltung – Envelope-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.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle Fundament-Tickets erfüllen ihre Prüfungen
2. Ein Durchstich vom Login bis zum abgelegten Objekt funktioniert
3. Keine offenen kritischen Befunde
4. Verschlüsselung at rest (FDN-09) ist wirksam und die Schlüsselverwaltung geprüft
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Neuaufsetzen der Umgebung von null erfolgreich
2. Ausfall eines Dienstes führt zu sauberem Fehlerbild
3. Prüfbericht abgelegt und freigegeben
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-02: prüfgate fundament`
- Branch: `feature/qa-02-prüfgate-fundament`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+69
View File
@@ -0,0 +1,69 @@
# QA-03 – Prüfgate Dokumentenkern
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Vollständige Prüfung des Lebenszyklus: hochladen, ansehen, ablegen, herunterladen, löschen, wiederherstellen.
**Technische Grundlage:** E2E-Tests, Datenintegrität
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Der gesamte Lebenszyklus als durchgehender Test. Die Prüfsumme muss von der Erfassung bis zum Export identisch bleiben.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `DOC-03` Drag-and-Drop-Upload-Oberfläche – Upload-Oberfläche mit Ablagebereich, Mehrfachauswahl, Fortschritt je Datei, Abbrechen und verständlichen Fehlermeldungen.
- `DOC-05` PDF-Viewer-Komponente – Inline-Betrachter mit Seitennavigation, Zoom, Suche im Dokument und Textauswahl – ohne Download-Zwang.
- `DOC-06` Office-zu-PDF-Konverter – Serverseitige Konvertierung von Text-, Tabellen- und Präsentationsformaten in PDF als Vorschau- und Archivderivat.
- `DOC-08` Massenexport als ZIP – Auswahl mehrerer Dokumente als Hintergrund-Job zu einem Archiv bündeln, inklusive optionaler Metadaten-Datei und Download-Benachrichtigung.
- `DOC-10` Ordner-Navigation & Dokumentenliste – Navigationsbaum, Brotkrumenpfad und virtualisierte Dokumentenliste mit Sortierung, Spaltenwahl und Mehrfachauswahl.
- `DOC-12` Papierkorb-Oberfläche – Ansicht des Papierkorbs mit Restlaufzeit, Einzel- und Massenwiederherstellung sowie bestätigter endgültiger Löschung.
- `QA-01` Teststrategie & Testdatenbestand – Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.
- `DOC-13` Akten-/Vorgangsanzeige im Dokumentkontext – In 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-14` Dokument-Zusammenführen & -Aufteilen – Nachträ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-15` Massenbearbeitung von Metadaten – Mehrere ausgewählte Dokumente gleichzeitig mit Tags/Metadatenfeldern/Dokumenttyp bearbeiten (hinzufügen, entfernen, ersetzen) statt Dokument für Dokument – Vorbild paperless-ngx Bulk-Edit.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Kompletter Lebenszyklus als automatisierter Test vorhanden
2. Keine Datenveränderung zwischen Upload und Download
3. Alle Ticket-Prüfungen des Epics bestanden
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Prüfsummenvergleich über den gesamten Lebenszyklus
2. Abbruchszenarien in jedem Schritt getestet
3. Referenzkorpus vollständig durchlaufen
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-03: prüfgate dokumentenkern`
- Branch: `feature/qa-03-prüfgate-dokumentenkern`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+65
View File
@@ -0,0 +1,65 @@
# QA-04 – Prüfgate Suche & Texterkennung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 9
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Messen und dokumentieren von Erkennungsgüte, Trefferqualität und Konsistenz zwischen Datenbank und Suchindex.
**Technische Grundlage:** Relevanz- und Erkennungsmessung
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Erkennungsgüte gegen den Referenzkorpus messen und den Wert festhalten – ohne Zahl gibt es keine Verbesserung.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `SRC-04` Such-Oberfläche mit Hervorhebung – Suchfeld mit Vorschlägen, Ergebnisliste mit hervorgehobenen Fundstellen und Sprung in die Dokumentvorschau.
- `SRC-06` PDF/A-Erzeugung mit Textebene – Archivfähiges PDF/A mit unsichtbarer Textebene aus der Texterkennung als zusätzliches Derivat erzeugen.
- `SRC-07` Spracherkennung & OCR-Qualitätsbewertung – Dokumentsprache automatisch bestimmen, passendes Sprachmodell wählen und Konfidenzwerte für eine Nachbearbeitungsliste erfassen.
- `SRC-09` Filter-Panel in der Suche – Seitliches Filterpanel mit aktiven Filtern als entfernbare Chips und Zurücksetzen-Funktion.
- `SRC-10` Gespeicherte Suchanfragen – Suchen benennen, speichern, erneut ausführen und optional mit dem Team teilen.
- `QA-01` Teststrategie & Testdatenbestand – Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Erkennungsrate am Referenzkorpus erreicht den Zielwert
2. Relevanz an definierten Suchanfragen erfüllt die Erwartung
3. Index und Datenbank sind nachweislich konsistent
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Messprotokoll mit Zielwerten und Ergebnissen abgelegt
2. Voll-Reindexierung ohne Trefferverlust geprüft
3. Berechtigungsfilter in der Suche negativ getestet
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-04: prüfgate suche & texterkennung`
- Branch: `feature/qa-04-prüfgate-suche-texterkennung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+64
View File
@@ -0,0 +1,64 @@
# QA-05 – Prüfgate Metadaten & Klassifizierung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Einfach | **Aufwand:** 2 Personentage | **Welle:** 7
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Prüfen von Feldvalidierung, Typwechseln, Massenbearbeitung und Güte der automatischen Zuordnung.
**Technische Grundlage:** Datenqualitätstests
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Genauigkeit der automatischen Zuordnung an gekennzeichneten Beispielen belegen, nicht behaupten.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `MET-03` Metadaten- & Tag-Oberfläche – Bearbeitungsbereich am Dokument mit dynamisch erzeugtem Formular, Tag-Eingabe mit Autovervollständigung und Massenbearbeitung.
- `MET-04` Dokumententypen & Vorlagen – Dokumententypen wie Rechnung oder Vertrag mit fest zugeordneten Pflichtfeldern, Standard-Tags und Aufbewahrungsvorgabe.
- `QA-01` Teststrategie & Testdatenbestand – Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.
- Setzt voraus (externes AI-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/ai-kanban/): `CLS-01` Dokumentklassifizierung, `CLS-03` Automatische Verschlagwortung.
- `MET-05` Regelbasierte Auto-Verschlagwortung – Regeln auf Basis von Textmustern, Absender oder Dateiname vergeben automatisch Tags, Typ und Ablageort.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Validierungsregeln greifen in allen Eingabewegen
2. Automatische Vorschläge erreichen die Zielgenauigkeit
3. Massenbearbeitung erzeugt keine inkonsistenten Daten
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Genauigkeit der Klassifizierung dokumentiert
2. Typwechsel mit Bestandsdaten ohne Verlust
3. Validierung auch über die Schnittstelle wirksam
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-05: prüfgate metadaten & klassifizierung`
- Branch: `feature/qa-05-prüfgate-metadaten-klassifizierung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+70
View File
@@ -0,0 +1,70 @@
# QA-06 – Sicherheits- & Berechtigungsprüfung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 10
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Systematische Prüfung aller Zugriffspfade gegen die Rollenmatrix sowie Test auf gängige Sicherheitslücken.
**Technische Grundlage:** Penetrationstest, Rollenmatrix
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Jede Rolle gegen jeden Endpunkt prüfen. Berechtigungslücken zeigen sich fast immer in Suche, Export oder Schnittstelle.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `IAM-05` LDAP/Active-Directory-Anbindung.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `RBAC-05` Rechte-Administrationsoberfläche.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `IAM-06` SSO-Anmeldung über OIDC.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `IAM-09` API-Token & Service-Accounts, `API-03` Rate-Limiting – API-Token-Verwaltung und Ratenbegrenzung liegen zentral in Core, nicht im DMS.
- `QA-04` Prüfgate Suche & Texterkennung – Messen und dokumentieren von Erkennungsgüte, Trefferqualität und Konsistenz zwischen Datenbank und Suchindex.
- `SRC-11` Feld-Whitelist-Query-Builder für Suchindex-Zugriff – Zentraler, 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.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Jede Rolle wurde gegen jeden Endpunkt geprüft
2. Keine unbefugte Rechteausweitung möglich
3. Befunde sind behoben oder bewusst akzeptiert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Zugriff auf fremdes Objekt per ID schlägt fehl
2. Prüfung auf Einschleusung, Sitzungsübernahme und unsichere Weiterleitung
3. Sicherheitsbericht abgelegt und freigegeben
## Bekannte Fehler vermeiden
- **In-Memory Rate-Limiter ohne geteilten Zustand**: Ein Vorgängerprojekt hatte bei Mehrinstanz-Betrieb pro Instanz getrennte Rate-Limits, die dadurch aushebelbar waren. → Bei Sicherheitsprüfungen gezielt testen, ob Rate-Limits/Lockouts auch bei mehreren Instanzen wirksam bleiben (externer State statt In-Memory).
- **Bewährte Muster aus Vorgängerprojekten prüfen und übernehmen**: Physische Mandantentrennung (eigene Datenbank pro Tenant, eigener Objekt-Storage-Bucket pro Tenant) statt Query-Filter prüfen — sicherstellen, dass kein Codepfad eine falsche Tenant-Datenbank oder ein falsches Bucket referenzieren kann, IDOR-Guards bei Freigaben/Shares, Vier-Augen-Prinzip bei kritischen Löschbestätigungen mit Datenbank-Lock, sowie timing-safe Vergleich bei Passwort-/Link-Prüfungen. → Diese Muster als feste Prüfpunkte in die Sicherheits-/Berechtigungsprüfung aufnehmen.
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-06: sicherheits- & berechtigungsprüfung`
- Branch: `feature/qa-06-sicherheits-berechtigungsprüfung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# QA-07 – Prüfgate Workflow & Benachrichtigung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 4
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Durchspielen aller Prozesspfade inklusive Ablehnung, Vertretung, Eskalation und Fristablauf.
**Technische Grundlage:** Prozesstests, Zeitraffer
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Alle Prozesspfade durchspielen, einschließlich Ablehnung, Vertretung und Fristablauf im Zeitraffer.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `QA-01` Teststrategie & Testdatenbestand – Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.
Setzt voraus (externes Workflow-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/workflow-kanban/): `RTE-02` Routing-Engine-Ausführung, `TSK-03` Erinnerungen & Eskalationsregeln, `APR-01` Freigabe-Postfach & Genehmigungsansicht.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `CFG-04` Benachrichtigungs-Einstellungen-Oberfläche.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle Prozesspfade sind mindestens einmal durchlaufen
2. Fristen und Eskalationen lösen korrekt aus
3. Keine Benachrichtigung geht verloren oder wird doppelt versandt
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Zeitraffer-Test über simulierte Fristen
2. Parallelentscheidungen erzeugen keinen Fehlzustand
3. Zustellprotokoll gegen erwartete Ereignisse abgeglichen
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-07: prüfgate workflow & benachrichtigung`
- Branch: `feature/qa-07-prüfgate-workflow-benachrichtigung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+64
View File
@@ -0,0 +1,64 @@
# QA-08 – Revisionssicherheits-Prüfung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 7
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Nachweis, dass Versionen, Protokoll und Signaturen unveränderlich, vollständig und extern prüfbar sind.
**Technische Grundlage:** Integritätsprüfung, Signaturvalidierung
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Manipulationsversuch am Protokoll muss erkannt werden. Das ist der eigentliche Nachweis der Revisionssicherheit.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `VER-02` Versionsansicht & Wiederherstellung – Liste aller Revisionen mit Autor, Zeitpunkt und Kommentar sowie Wiederherstellung einer früheren Fassung als neue Revision.
- `VER-04` Diff-Ansicht – Zwei Revisionen nebeneinander mit farblicher Markierung von Hinzufügungen, Löschungen und Metadatenänderungen.
- `VER-06` Audit-Log-Ansicht & Export – Durchsuchbare Protokollansicht mit Filtern nach Zeitraum, Akteur, Objekt und Aktion sowie Export für Prüfer.
- `VER-07` Digitale Signatur – Dokumente digital signieren und vorhandene Signaturen prüfen, inklusive qualifiziertem Zeitstempel.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Historie ist lückenlos und nicht manipulierbar
2. Signaturen sind mit externen Werkzeugen prüfbar
3. Jede relevante Aktion erscheint im Protokoll
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Manipulationsversuch wird erkannt und protokolliert
2. Stichprobe von Aktionen im Protokoll wiedergefunden
3. Prüfbericht für die Revision erstellt
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `QA-12` Abnahme- & Compliance-Prüfung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-08: revisionssicherheits-prüfung`
- Branch: `feature/qa-08-revisionssicherheits-prüfung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+69
View File
@@ -0,0 +1,69 @@
# QA-09 – Schnittstellen-Vertragstests
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 8
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Automatisierte Prüfung, dass die Schnittstelle ihrer Beschreibung entspricht und Importwege zuverlässig arbeiten.
**Technische Grundlage:** Vertragstests, Testempfänger
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Die Schnittstelle gegen ihre eigene Beschreibung prüfen. Abweichung bricht die Prüfstrecke.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `IAM-09` API-Token & Service-Accounts, `API-03` Rate-Limiting.
- `INT-04` E-Mail-Regeln & Anhangverarbeitung – Regeln nach Absender, Betreff oder Anhangtyp steuern Ablageort, Typ und Verschlagwortung importierter Nachrichten.
- Setzt voraus (externes Core-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/core-kanban/): `API-07` Webhook-Registry & Zustellung – Externe Systeme abonnieren Ereignisse und erhalten signierte Aufrufe mit Wiederholung bei Fehlern.
- `INT-06` Scanner-Anbindung über Hot-Folder – Überwachtes Verzeichnis für Netzwerkscanner mit Stapeltrennung, automatischer Texterkennung und Ablage.
- `INT-08` Watch-Folder-Import (Consume-Ordner) – Dateisystem-Ordner, der automatisch überwacht wird — jede dort abgelegte Datei wird ohne API-Aufruf importiert. Ergänzt DOC-01 (Upload-API), ersetzt sie nicht.
- `INT-09` CMIS-kompatible Schnittstelle (optional) – 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-10` Scanner-Stapelverarbeitung mit Trennseiten-/Barcode-Erkennung – 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-11` Archive-Anbindung: Objekttyp-Registrierung & Retention-Abfrage – Dokument-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.
- `INT-12` AI-Anbindung: Objekttyp-Registrierung (Kopplung AI GOV-01) – Dokument-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.
- `INT-13` Workflow-Anbindung: Objekttyp- & Auslöser-Registrierung (Kopplung Workflow ENG-02) – Dokument-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.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Vertragstests laufen in der Pipeline
2. Import über E-Mail und Hot-Folder verliert keine Dokumente
3. Webhook-Zustellung ist nachweisbar
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Abweichung zwischen Beschreibung und Verhalten bricht die Pipeline
2. Dauerlauf-Import über 24 Stunden ohne Verlust
3. Wiederholungsverhalten bei Ausfall belegt
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-09: schnittstellen-vertragstests`
- Branch: `feature/qa-09-schnittstellen-vertragstests`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# QA-10 – Last- & Leistungstest
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 7
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Verhalten unter realistischer und überhöhter Last messen: Suche, Upload, Vorschau und Schnittstelle.
**Technische Grundlage:** Lastgenerator, Messprotokoll
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Verhalten unter Überlast definieren, statt es dem Zufall zu überlassen.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `SRC-03` Such-API mit Ranking – Suchschnittstelle mit Paginierung, Sortierung, Treffer-Ausschnitten und Berücksichtigung der Leseberechtigung.
- `DOC-04` Vorschau- & Thumbnail-Pipeline – Asynchrone Erzeugung von Seiten-Vorschauen und Thumbnails nach dem Upload, mit Cache und Wiederaufbau bei neuer Revision.
- `INT-01` REST-API v1 & Schnittstellenbeschreibung – Öffentliche Schnittstelle für Dokumente, Suche, Metadaten und Workflows mit maschinenlesbarer Beschreibung und Versionierung.
- `QA-01` Teststrategie & Testdatenbestand – Festlegen, was auf welcher Ebene geprüft wird, und einen realistischen, anonymisierten Testdatenbestand mit Referenzdokumenten aufbauen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Zielwerte für Antwortzeit und Durchsatz sind definiert und gemessen
2. Engpässe sind identifiziert und dokumentiert
3. System erholt sich nach Lastspitze selbstständig
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Dauerlast über mehrere Stunden ohne Speicherwachstum
2. Verhalten bei Überlast ist definiert statt zufällig
3. Messprotokoll mit Zielwertvergleich abgelegt
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-10: last- & leistungstest`
- Branch: `feature/qa-10-last-leistungstest`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+61
View File
@@ -0,0 +1,61 @@
# QA-11 – Barrierefreiheits-Audit
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 3
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Unabhängige Prüfung aller Ansichten gegen WCAG 2.1 AA mit Werkzeugen und manuellem Durchlauf.
**Technische Grundlage:** Prüfwerkzeuge, Bildschirmleser
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Unabhängige Prüfung mit Werkzeug und manuellem Durchlauf. Automatik allein findet etwa die Hälfte der Verstöße.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `UX-04` Übersetzungen Deutsch und Englisch – Vollständige Übersetzung der Oberfläche in beide Sprachen inklusive abgestimmter Fachbegriffe.
- `UX-05` Barrierefreiheit nach WCAG 2.1 AA – Semantik, Fokusführung, Tastaturbedienung, Beschriftungen und Kontraste über alle Ansichten hinweg herstellen.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Keine kritischen Verstöße offen
2. Manueller Bildschirmleser-Durchlauf dokumentiert
3. Restbefunde sind mit Frist eingeplant
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Automatisierte Prüfung über alle Hauptseiten
2. Vollständiger Ablauf ohne Maus durchgeführt
3. Auditbericht abgelegt
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-11: barrierefreiheits-audit`
- Branch: `feature/qa-11-barrierefreiheits-audit`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+70
View File
@@ -0,0 +1,70 @@
# QA-12 – Abnahme- & Compliance-Prüfung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 11
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Gesamtabnahme vor der Freigabe: Aufbewahrung, Löschworkflow, Berichte und nachgewiesene Wiederherstellbarkeit.
**Technische Grundlage:** Abnahmeprotokoll, Wiederherstellungstest
## Produkt-DNA für diesen Bereich
> Prüfen heißt messen. Behauptungen ohne Messprotokoll gelten nicht als erledigt.
**Übernehmen:**
- Fester Referenzkorpus aus echten Belegarten, an dem Erkennungsgüte und Trefferqualität wiederholbar gemessen werden.
- Nachgewiesene Wiederherstellbarkeit als Freigabevoraussetzung, wie es revisionssichere Archive verlangen.
**Bewusst vermeiden:**
- Keine Freigabe auf Zuruf. Jedes Prüfgate hinterlässt ein abgelegtes, nachlesbares Protokoll.
- Keine Prüfung nur auf dem Entwicklungsrechner mit drei Musterdokumenten.
**Für genau diese Kachel:** Gesamtabnahme mit real durchgeführter Wiederherstellung. Erst danach ist das System freigabefähig.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- Setzt voraus (externes Archive-Board, siehe /home/sysops/Dokumente/Scripte/nexarch/archive-kanban/): `RET-03` Löschworkflow & Aufbewahrungssperre, `CMP-02` DSGVO-/Datenschutz-Berichte, `BAK-03` Restore-Verfahren.
- `QA-08` Revisionssicherheits-Prüfung – Nachweis, dass Versionen, Protokoll und Signaturen unveränderlich, vollständig und extern prüfbar sind.
- `QA-02` Prüfgate Fundament – Abnahme der Grundlage: Datenmodell, Storage, Queue, Auth, Pipeline und Observability greifen zuverlässig ineinander.
- `QA-03` Prüfgate Dokumentenkern – Vollständige Prüfung des Lebenszyklus: hochladen, ansehen, ablegen, herunterladen, löschen, wiederherstellen.
- `QA-04` Prüfgate Suche & Texterkennung – Messen und dokumentieren von Erkennungsgüte, Trefferqualität und Konsistenz zwischen Datenbank und Suchindex.
- `QA-05` Prüfgate Metadaten & Klassifizierung – Prüfen von Feldvalidierung, Typwechseln, Massenbearbeitung und Güte der automatischen Zuordnung.
- `QA-06` Sicherheits- & Berechtigungsprüfung – Systematische Prüfung aller Zugriffspfade gegen die Rollenmatrix sowie Test auf gängige Sicherheitslücken.
- `QA-07` Prüfgate Workflow & Benachrichtigung – Durchspielen aller Prozesspfade inklusive Ablehnung, Vertretung, Eskalation und Fristablauf.
- `QA-09` Schnittstellen-Vertragstests – Automatisierte Prüfung, dass die Schnittstelle ihrer Beschreibung entspricht und Importwege zuverlässig arbeiten.
- `QA-10` Last- & Leistungstest – Verhalten unter realistischer und überhöhter Last messen: Suche, Upload, Vorschau und Schnittstelle.
- `QA-11` Barrierefreiheits-Audit – Unabhängige Prüfung aller Ansichten gegen WCAG 2.1 AA mit Werkzeugen und manuellem Durchlauf.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle Prüfgates sind bestanden
2. Wiederherstellung wurde real durchgeführt
3. Abnahmeprotokoll ist unterzeichnet
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Notfallwiederherstellung auf leerem System nachgewiesen
2. Löschung nur mit Freigabe und Protokoll möglich
3. Offene Restrisiken sind schriftlich benannt
## Nicht Bestandteil dieser Kachel
- Alles, was nicht in den Akzeptanzkriterien steht. Keine vorauseilende Umsetzung späterer Anforderungen.
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-12: abnahme- & compliance-prüfung`
- Branch: `feature/qa-12-abnahme-compliance-prüfung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+63
View File
@@ -0,0 +1,63 @@
# QA-13 – Prüfgate E-Rechnung
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 9
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Messen und dokumentieren, dass Lesen (MET-06) und Konformitätsprüfung (MET-07) von E-Rechnungen über alle Formate, Ausfallfälle, Regelwerk-Wechsel und Angriffseingaben korrekt und revisionssicher arbeiten.
**Technische Grundlage:** KoSIT-Validator-Sidecar, synthetische Rechnungen, Ergebnis je Revision
## Produkt-DNA für diesen Bereich
> Ein Ergebnis „konform“ ist nur so viel wert wie die Prüfung dahinter.
**Übernehmen:**
- Fester Referenzsatz aus offiziellen Beispielen und daraus erzeugten Varianten, wiederholbar gemessen.
- Ergebnis mit Regelwerk- und Validator-Version, sodass ein Wechsel nachvollziehbar bleibt.
**Bewusst vermeiden:**
- Kein „konform“, wenn nicht geprüft wurde oder der Bericht Fehlermeldungen enthält.
- Keine Vermischung von „intern stimmig“, „technisch gültig“ und steuerlicher Richtigkeit.
**Für genau diese Kachel:** Lücken der Matrix aus MET-07 (Gutschriften, ZUGFeRD-Profile, Regelwerk-Drift, Sicherheit gegen den echten Validator) real schließen.
## Ausgangslage
- `MET-06` Metadaten aus E-Rechnungen – Lesen und interne Plausibilitätsprüfung.
- `MET-07` Konformitätsvalidierung E-Rechnung – KoSIT-Sidecar, Ergebnis je Revision, Neuprüfung.
- `QA-04` Prüfgate Suche und Texterkennung – Suche und Berechtigung.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Alle Formate (UBL Invoice und CreditNote, CII, ZUGFeRD-Profile, Factur-X, XRechnung) liefern den erwarteten Status; nicht abgedeckte Profile sind `not_checked`, nie `conformant`
2. Ein Regelwerk-Wechsel wird ohne Betreiber-Angabe erkannt und löst die Neuprüfung aus
3. Original, Audit-Kette und Berechtigung bleiben über Lesen, Validieren und Neuprüfen unverändert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Formatmatrix gegen den echten Validator mit Zielwert je Fall
2. Ausfallfälle (Timeout, abgebrochener Bericht, Weiterleitung, 422, 5xx, Fremdformat) und Angriffseingaben (XXE, externe Ressourcen, übergroße Dokumente, manipulierter PDF-Anhang) gegen den echten Validator
3. Trennung der Stufen intern stimmig, technisch gültig und konform an Gegenbeispielen
## Nicht Bestandteil dieser Kachel
- Steuerrechtliche oder GoBD-Bewertung
- Oberfläche und API für das Ergebnis (`INT-01`)
- Ausstellen von E-Rechnungen
## Arbeitsweise
1. Lies zuerst `internal/einvoice` und das MET-07-Protokoll; halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Gefundene Lücken je Fehler bis zu fünf Iterationen beheben, danach stoppen und berichten.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Nur synthetische Rechnungen, keine echten Belege.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-13: prüfgate e-rechnung`
- Branch: `feature/qa-13-pruefgate-e-rechnung-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+62
View File
@@ -0,0 +1,62 @@
# QA-16 – Erkennungsgüte an anonymisierten echten Belegen
**Epic:** ✅ Prüfungen & Qualitätssicherung | **Rolle:** QA | **Komplexität:** Mittel | **Aufwand:** 4 Personentage | **Welle:** 14
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich QA und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Prüfung und Nachweis. Ergebnis ist ein abgelegtes Protokoll mit Zielwert, Messwert und Bewertung.
## Auftrag
Die Erkennungsgüte (SRC-05, SRC-07) ist bisher nur an synthetischen Seiten gemessen (QA-04: 9 Seiten, Zeichengenauigkeit 1,0000, ein Pipeline-Nachweis, keine Praxisgüte). Die Vergleichsanalyse führt das als Reifelücke: echte Scans mit Rauschen, Schräglage, Stempeln und Handschrift verhalten sich anders. Ohne Zahl an echten Belegen gibt es keine belastbare Aussage und keine begründeten Schwellwerte für die Nachbearbeitungsliste.
Einen kleinen Referenzkorpus aus anonymisierten echten Belegen aufbauen, die Erkennungsgüte je Belegart messen und die Schwellwerte daran begründen. Die Auswertung an echten Belegen läuft ausschließlich auf lokalen Servern (Ollama-/Tesseract-Umgebung des Betreibers), nicht über externe Dienste und nicht in Claude-Sitzungen (Projektregel im `CLAUDE.md`).
**Entscheidung erforderlich:** Wer liefert die Belege, welche Anonymisierung gilt (Schwärzen, Ersetzen, Rasterung), wer erteilt die DSGVO-Freigabe (Art. 9 beachten), wie viele Belege je Art, und welche Zielwerte gelten je Belegart. Auswertung nur lokal (Ollama-/Tesseract-Umgebung des Betreibers).
**Technische Grundlage:** `internal/ocr`, `internal/ocr/langdetect`, `internal/testcorpus`, `docs/QA-16-PRUEFPROTOKOLL.md`, lokale Auswertungsumgebung des Betreibers
## Produkt-DNA für diesen Bereich
**Übernehmen:**
- Fester Referenzkorpus, an dem Erkennungsgüte wiederholbar gemessen wird (Produkt-DNA QA-04).
**Bewusst vermeiden:**
- Keine echten Kunden- oder Mandantendaten in Repo, Prompts, Testfixtures, Screenshots oder Protokollen: nur Kennzahlen, nie Inhalte.
- Keine Anonymisierung ohne Nachweis: Rückführbarkeit auf Personen muss ausgeschlossen und dokumentiert sein.
- Keine Aussage „Erkennungsgüte erreicht“ ohne Zahl und Belegart.
## Ausgangslage
Setzt auf folgenden bereits fertigen Kacheln auf: SRC-05, SRC-07, QA-01, QA-04.
Bezug: `VERGLEICHSANALYSE-QUELLSYSTEME.md` (Wurzelverzeichnis), Abschnitt „Wo NEXARCH schlechter oder unfertig ist“ (Reife, Erkennungsgüte an echten Scans nicht gemessen).
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Ein Referenzkorpus aus anonymisierten echten Belegen liegt ausschließlich lokal beim Betreiber (nicht im Repo), mit dokumentierter Anonymisierung und schriftlicher Freigabe; das Protokoll enthält nur Kennzahlen
2. Zeichen- und Wortgenauigkeit sowie Konfidenzverteilung sind je Belegart (z. B. Rechnung, Vertrag, Kontoauszug, Handschriftnotiz) gegen vorab festgelegte Zielwerte gemessen, Zielwert und Messwert stehen im Protokoll
3. Die Schwellwerte der Nachbearbeitungsliste (SRC-07) sind an den Messwerten begründet bestätigt oder angepasst; Unterschreitungen führen zu benannten Folgetickets
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Nachweis der Anonymisierung und der Freigabe liegt vor, bevor ein Beleg in den Korpus kommt
2. Die Auswertung lief nachweislich nur auf lokalen Servern, es gab keine Übertragung an externe Dienste und keinen Zugriff aus Claude-Sitzungen
3. Wiederholbarkeit: ein zweiter Lauf auf demselben Korpus liefert gleiche Kennzahlen (Toleranz vorab festlegen)
## Nicht Bestandteil dieser Kachel
- Wechsel der OCR-Engine oder Training eigener Modelle
- Verbesserungsmaßnahmen bei Unterschreitung der Zielwerte (eigene Tickets)
- Aufnahme echter Belege ins Repository oder in Testfixtures
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `QA-16: erkennungsgüte an anonymisierten echten belegen`
- Branch: `feature/qa-16-erkennungsguete-echte-belege-dms`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+66
View File
@@ -0,0 +1,66 @@
# SRC-01 – Suchindex-Infrastruktur
**Epic:** 🔍 Suche & OCR | **Rolle:** DevOps | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 2
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich DevOps und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Betrieb, Automatisierung und Reproduzierbarkeit. Alles als Konfiguration im Repository, nichts von Hand.
## Auftrag
Suchdienst bereitstellen, Index-Schema mit deutscher Sprachbehandlung definieren und Betriebsparameter festlegen.
**Technische Grundlage:** Manticore Search (BM25)
## Produkt-DNA für diesen Bereich
> Erkennungsgüte auf dem Niveau von paperless-ngx, Trefferqualität ohne Suchsyntax-Studium.
**Übernehmen:**
- Bildvorverarbeitung vor der Texterkennung: Entzerren, Zuschneiden, Rauschunterdrückung – der Kern der guten Erkennungsrate von paperless-ngx.
- Bereits durchsuchbare Dokumente werden erkannt und nicht erneut verarbeitet.
- Archivfähiges Dokument mit unsichtbarer Textebene als eigenes Derivat, Original bleibt unangetastet.
**Bewusst vermeiden:**
- Keine Suche, die nur mit Abfragesprache brauchbare Treffer liefert. Facetten und Filter statt Syntax.
- Kein stiller Auseinanderlauf von Datenbank und Suchindex – Konsistenz ist prüfbar und wiederherstellbar.
**Für genau diese Kachel:** paperless-ngx kommt mit einem eingebetteten Index weit, stößt aber bei Menge an Grenzen. Wähle von Anfang an einen eigenständigen Suchdienst.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `FDN-01` Repository & Projektgerüst – Repository anlegen, Ordnerstruktur für App, Worker und Shared-Paket festlegen, Linting/Formatierung und Commit-Konventionen etablieren.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Suchdienst ist reproduzierbar startbar
2. Index-Schema mit Feldern und Gewichtung dokumentiert
3. Deutsche Stemming- und Stoppwortbehandlung aktiv
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Neuaufbau des Index aus dem Bestand möglich
2. Umlaut- und Kompositasuche liefert Treffer
3. Neustart des Dienstes ohne Datenverlust
## Bekannte Fehler vermeiden
- **Dynamische Tabellen-/Spaltennamen via String-Formatierung in SQL**: Zwei Vorgängerprojekte bauten Tabellen-/Spaltennamen per Sprintf/Join direkt in SQL-Strings ein — nur durch nachträgliche Whitelist-Prüfung abgesichert, aber ein fragiles Muster. → Für den Suchindex einen geschlossenen Enum/Switch-Typ oder zentralen Query-Builder mit Feld-Whitelist statt Sprintf-in-SQL verwenden.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `SRC-02` Indexierungs-Worker & Synchronisierung
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `SRC-01: suchindex-infrastruktur`
- Branch: `feature/src-01-suchindex-infrastruktur`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+69
View File
@@ -0,0 +1,69 @@
# SRC-02 – Indexierungs-Worker & Synchronisierung
**Epic:** 🔍 Suche & OCR | **Rolle:** Backend | **Komplexität:** Komplex | **Aufwand:** 4 Personentage | **Welle:** 5
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Änderungen an Dokumenten, Metadaten und OCR-Texten laufend in den Suchindex übertragen, inklusive Voll-Reindexierung.
**Technische Grundlage:** Queue-Worker, Bulk-Indexing
## Produkt-DNA für diesen Bereich
> Erkennungsgüte auf dem Niveau von paperless-ngx, Trefferqualität ohne Suchsyntax-Studium.
**Übernehmen:**
- Bildvorverarbeitung vor der Texterkennung: Entzerren, Zuschneiden, Rauschunterdrückung – der Kern der guten Erkennungsrate von paperless-ngx.
- Bereits durchsuchbare Dokumente werden erkannt und nicht erneut verarbeitet.
- Archivfähiges Dokument mit unsichtbarer Textebene als eigenes Derivat, Original bleibt unangetastet.
**Bewusst vermeiden:**
- Keine Suche, die nur mit Abfragesprache brauchbare Treffer liefert. Facetten und Filter statt Syntax.
- Kein stiller Auseinanderlauf von Datenbank und Suchindex – Konsistenz ist prüfbar und wiederherstellbar.
**Für genau diese Kachel:** Der stille Auseinanderlauf von Datenbank und Index ist ein klassischer Fehler. Mache Konsistenz messbar und den Neuaufbau jederzeit möglich.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `SRC-01` Suchindex-Infrastruktur – Suchdienst bereitstellen, Index-Schema mit deutscher Sprachbehandlung definieren und Betriebsparameter festlegen.
- `DOC-01` Upload-API & Chunk-Handling – Serverseitige Aufnahme von Dateien inklusive fortsetzbarem Upload, Größen- und MIME-Validierung sowie Anlage von Dokument und erster Revision.
- `DOC-02` Dublettenerkennung – Prüfung auf bereits vorhandene Dokumente über Hash-Vergleich vor jeder weiteren Verarbeitung.
- `FDN-04` Job-Queue & Worker-Runtime – Asynchrone Verarbeitung für OCR, Konvertierung, Indexierung und Exporte. Mit Wiederholungslogik, Backoff und Dead-Letter-Queue.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Neues Dokument ist zeitnah auffindbar
2. Änderung und Löschung werden im Index nachgezogen
3. Voll-Reindexierung ohne Ausfall möglich
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Konsistenzabgleich Datenbank gegen Index ergibt keine Abweichung
2. Indexierung von 10.000 Dokumenten im Zeitbudget
3. Ausfall des Suchdienstes führt zu Nachholung statt Datenverlust
## Bekannte Fehler vermeiden
- **Reihenfolge beachten**: Indexierung darf erst nach abgeschlossener Duplikatsprüfung (DOC-02) starten. Bei bestätigtem, nicht bewusst gewünschtem Duplikat wird nicht indexiert – sonst entstehen doppelte/inkonsistente Sucheinträge und unnötige Rechenlast.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `SRC-03` Such-API mit Ranking
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `SRC-02: indexierungs-worker & synchronisierung`
- Branch: `feature/src-02-indexierungs-worker-synchronisierung`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
+68
View File
@@ -0,0 +1,68 @@
# SRC-03 – Such-API mit Ranking
**Epic:** 🔍 Suche & OCR | **Rolle:** Backend | **Komplexität:** Mittel | **Aufwand:** 3 Personentage | **Welle:** 6
---
## Rolle
Du bist erfahrene Entwicklerin im Bereich Backend und baust ein Dokumentenmanagement-System, das die Stärken von paperless-ngx, Alfresco, Docspell und ecoDMS vereint und deren bekannte Schwächen vermeidet.
Serverseitige Logik, Datenzugriff und Schnittstelle. Keine Geschäftslogik in der Oberfläche.
## Auftrag
Suchschnittstelle mit Paginierung, Sortierung, Treffer-Ausschnitten und Berücksichtigung der Leseberechtigung.
**Technische Grundlage:** Suchabfrage, Relevanz-Tuning
## Produkt-DNA für diesen Bereich
> Erkennungsgüte auf dem Niveau von paperless-ngx, Trefferqualität ohne Suchsyntax-Studium.
**Übernehmen:**
- Bildvorverarbeitung vor der Texterkennung: Entzerren, Zuschneiden, Rauschunterdrückung – der Kern der guten Erkennungsrate von paperless-ngx.
- Bereits durchsuchbare Dokumente werden erkannt und nicht erneut verarbeitet.
- Archivfähiges Dokument mit unsichtbarer Textebene als eigenes Derivat, Original bleibt unangetastet.
**Bewusst vermeiden:**
- Keine Suche, die nur mit Abfragesprache brauchbare Treffer liefert. Facetten und Filter statt Syntax.
- Kein stiller Auseinanderlauf von Datenbank und Suchindex – Konsistenz ist prüfbar und wiederherstellbar.
**Für genau diese Kachel:** Alfresco filtert Treffer nach Berechtigung – unverzichtbar. paperless-ngx kann das nicht sauber und darf hier kein Vorbild sein.
## Ausgangslage
Die folgenden Arbeitspakete sind bereits fertiggestellt und dürfen vorausgesetzt werden. Baue auf ihnen auf, statt Funktionalität zu duplizieren:
- `SRC-02` Indexierungs-Worker & Synchronisierung – Änderungen an Dokumenten, Metadaten und OCR-Texten laufend in den Suchindex übertragen, inklusive Voll-Reindexierung.
## Akzeptanzkriterien
Die Kachel gilt erst als umgesetzt, wenn alle Punkte erfüllt sind:
1. Ergebnisse enthalten Textausschnitte mit Fundstellen
2. Nur berechtigte Dokumente erscheinen
3. Antwortzeit unter vereinbartem Grenzwert
## Prüfungen vor der Abnahme
Führe jede Prüfung tatsächlich durch und halte das Ergebnis schriftlich fest. Nicht durchgeführte Prüfungen zählen als offen:
1. Referenz-Suchanfragen liefern erwartete Reihenfolge
2. Berechtigungsfilter durch Negativtest belegt
3. Lasttest mit gleichzeitigen Suchanfragen bestanden
## Bekannte Fehler vermeiden
- **Dynamische SQL-Klauseln via Sprintf/Join**: Zwei Vorgängerprojekte bauten Sortier-/Filter-Klauseln der Such-API per String-Konkatenation, teils dupliziert an mehreren Stellen. → Zentralen, getesteten Query-Builder mit Feld-Whitelist verwenden; Spalten-/Tabellennamen nur aus statischen Konstanten, nicht per Sprintf.
## Nicht Bestandteil dieser Kachel
Diese Punkte gehören ausdrücklich in andere Kacheln. Bereite höchstens die Schnittstelle dafür vor:
- `SRC-04` Such-Oberfläche mit Hervorhebung
- `SRC-08` Facetten- & Filter-API
- `QA-10` Last- & Leistungstest
## Arbeitsweise
1. Lies zuerst den bestehenden Code der Vorbedingungen und halte dich an die dort etablierten Muster.
2. Setze die kleinste Lösung um, die alle Akzeptanzkriterien erfüllt. Kein Umbau angrenzender Bereiche.
3. Schreibe zu jedem Akzeptanzkriterium mindestens einen automatisierten Test.
4. Führe alle Prüfungen aus und dokumentiere Zielwert und Ergebnis.
5. Deutschsprachige Oberflächentexte, englischsprachige Bezeichner im Code.
6. Keine Zugangsdaten, Schlüssel oder Verbindungszeichenfolgen im Code – ausschließlich über Umgebungsvariablen.
## Abschluss
- Commit-Nachricht: `SRC-03: such-api mit ranking`
- Branch: `feature/src-03-such-api-mit-ranking`
- Schrittweise committen, Branch pushen, dann anhalten. Kein Merge, kein Deploy.
- In der Beschreibung des Pull Request die durchgeführten Prüfungen mit Ergebnis auflisten.
Loaded 100 of 130 files, more files were not shown because too many files have changed in this diff. Show more