Fachdokumente nach docs/, Entscheidungen festgehalten
CLAUDE.md und README.md verweisen auf docs/, die Dateien lagen aber im Wurzelverzeichnis. Verschoben. docs/13-entscheidungen.md hält fest, wo die Dokumente sich widersprechen und wie es aufgelöst wurde. Der wichtigste Punkt: 04-datenmodell.md verlangt eine Regel, die jedes UPDATE auf CaseEntryVersion verwirft, 05-akten-und-vorlagen.md verlangt, dass eine Umklassifizierung rückwirkend auf alle Versionen wirkt. Beides zusammen geht nicht. Aufgelöst über einen Trigger, der die Tabelle anhängend hält, aber das Anheben von minClearance zulässt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Suche und Export
|
||||
|
||||
## Suche
|
||||
|
||||
Postgres Full-Text-Search, deutsche Konfiguration. Kein Elasticsearch.
|
||||
|
||||
- `search_vector` auf `Case` per Trigger aus Aktenzeichen und Titel (Gewicht A),
|
||||
Abschnittswerten (B) und Verlaufseinträgen (C)
|
||||
- GIN-Index, `websearch_to_tsquery('german', $1)`
|
||||
- Zusätzlich Trigram-Index (`pg_trgm`) auf `caseNumber` und `displayName` für Tippfehler
|
||||
|
||||
Filter: Status, Fallart, Zeitraum, Beteiligte, Klassifizierung, Tags, nur meine Fälle.
|
||||
|
||||
**Die Sichtbarkeitsprüfung gehört in dieselbe Abfrage**, nicht als Nachfilter. Sonst stimmen
|
||||
Trefferzahl und Seitenlänge nicht und aus den Lücken lässt sich auf verborgene Akten
|
||||
schließen. Gleiches gilt für Facettenzähler.
|
||||
|
||||
Gespeicherte Ansichten, die es ab Werk geben sollte: meine Fälle, Wiedervorlage diese Woche,
|
||||
seit meinem letzten Besuch geändert, unbearbeitet seit 14 Tagen, zuletzt geöffnet.
|
||||
|
||||
## Export
|
||||
|
||||
### Einzelakte als PDF
|
||||
|
||||
Aufbau: Deckblatt mit Aktenzeichen, Klassifizierungsvermerk und `Stand:`-Zeitstempel,
|
||||
Kopfdatentabelle, Abschnitte in Vorlagenreihenfolge, chronologischer Verlauf,
|
||||
Anhangsverzeichnis mit Hashes.
|
||||
|
||||
Nachträglich geänderte Verlaufseinträge werden im Export als solche ausgewiesen
|
||||
(`bearbeitet, v3, 31.08.2026`), zurückgezogene erscheinen als Grabstein mit Begründung.
|
||||
Ein Export darf nie sauberer aussehen als die Akte ist. Der `Stand:`-Zeitstempel macht
|
||||
erkennbar, dass ein älterer Ausdruck überholt sein kann.
|
||||
|
||||
Drei Regeln:
|
||||
|
||||
1. **Der Export respektiert die Stufe des Abrufers.** Gesperrte Felder werden als Schwärzung
|
||||
ausgegeben, nicht weggelassen, mit dem Vermerk „Geschwärzt, Stufe 4". Sonst merkt der
|
||||
Empfänger nicht, dass er eine gekürzte Fassung hat.
|
||||
2. **Wasserzeichen** auf jeder Seite: Name des Abrufers, Zeitstempel, Freigabestufe.
|
||||
3. **Jeder Export wird protokolliert.** Ab Stufe 3 zusätzlich Freigabe durch einen Nutzer mit
|
||||
Recht `export.approve`, also Vier-Augen-Prinzip. Die Anfrage erscheint beim Leiter als
|
||||
Aufgabe im Dashboard.
|
||||
|
||||
### Technik
|
||||
|
||||
Playwright-Container rendert eine dedizierte Druckansicht `/faelle/[caseNumber]/druck`
|
||||
mit `@media print`-Styles. Kein PDF-Bibliotheks-Layout von Hand.
|
||||
|
||||
Erzeugte PDFs werden gecacht unter dem Schlüssel
|
||||
`sha256(caseId + updatedAt + clearanceLevel + templateVersion)`. Auf einem Homeserver kostet
|
||||
das Rendern spürbar CPU, und dieselbe Akte wird oft mehrfach exportiert.
|
||||
|
||||
Der Export läuft als Hintergrundauftrag: Klick erzeugt einen Job, die UI zeigt einen
|
||||
Fortschrittsbalken und der Download startet automatisch, sobald der Job fertig ist. Bei über
|
||||
3 Sekunden bekommt der Nutzer zusätzlich eine Benachrichtigung, damit er wegklicken kann.
|
||||
|
||||
### Weitere Wege
|
||||
|
||||
- ZIP mit PDFs und Anhängen für Sammelexporte, nur mit Recht `admin`
|
||||
- Vollständiger JSON-Export der Datenbank als Umzugs- und Notfallformat, ohne
|
||||
Stufenfilterung, nur für `admin`, immer protokolliert
|
||||
Reference in New Issue
Block a user