Phase 2, erster Teil: Akten anlegen, lesen, Vermerke schreiben
Fachlogik in lib/cases/service.ts, Zugriffsprüfung in lib/access/. Jede Funktion prüft selbst und schreibt ihren Protokolleintrag in derselben Transaktion wie die Änderung — die Server Actions daneben sind dünn. Schreibgrenzen nach docs/03: niemand legt eine Akte über der eigenen Stufe an, niemand stuft über die eigene Stufe hoch, archiviert und versiegelt sind schreibgeschützt auch für Admins. Eine Herabstufung verlangt eine Begründung und landet als sichtbarer Systemeintrag im Verlauf, nicht nur im Protokoll. Aktenzeichen über CaseCounter mit INSERT ... ON CONFLICT DO UPDATE, geprüft mit acht gleichzeitigen Anlagen ohne Doppelung. Wer eine Akte anlegt, wird ihr Ermittler, sonst verliert er sie aus dem Blick, sobald jemand hochstuft. Fallliste cursorbasiert auf (updatedAt, id), Sichtbarkeit und Trefferzahl in derselben Abfrage. Aktenansicht mit Kopfdaten sofort und Verlauf in eigener Suspense-Grenze. Vermerke optimistisch mit clientseitiger UUIDv7, die zugleich Idempotenzschlüssel ist — zweimal gesendet bleibt ein Eintrag. Lesezugriffe ab Stufe 3 werden protokolliert, gepuffert und alle zwei Sekunden gebündelt geschrieben, damit das Protokoll die Antwort nicht ausbremst. Die vier Startvorlagen stehen jetzt im Seed statt in Phase 3: ohne Vorlage lässt sich keine Akte anlegen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e8c5efc214
commit
1e5a470daf
@@ -38,24 +38,25 @@ Das ist der schwierigste Teil. Wenn er steht, ist der Rest Formularbau.
|
||||
|
||||
## Phase 2 — Akten
|
||||
|
||||
- [ ] Datenmodell für `Case`, `CaseSection`, `CaseEntry`, Beteiligte, Ausschlüsse
|
||||
- [ ] `lib/access/` mit Where-Fragmenten, überall verwendet, nirgends Nachfilterung
|
||||
- [ ] Aktenzeichen-Vergabe kollisionsfrei über `CaseCounter`
|
||||
- [ ] Fallliste mit Filtern, cursorbasiert, `loading.tsx` mit Skelett
|
||||
- [ ] Aktenansicht: Kopfdaten sofort, Verlauf und Chat in eigenen Suspense-Grenzen
|
||||
- [ ] Vermerk anlegen, optimistisch, mit clientseitiger UUIDv7
|
||||
- [ ] Statusübergänge mit Rechteprüfung und automatischem Systemeintrag
|
||||
- [ ] Schreibgrenzen nach `docs/03-auth-und-rechte.md`: keine Akte über der eigenen Stufe
|
||||
- [x] Datenmodell für `Case`, `CaseSection`, `CaseEntry`, Beteiligte, Ausschlüsse
|
||||
- [x] `lib/access/` mit Where-Fragmenten, überall verwendet, nirgends Nachfilterung
|
||||
- [x] Aktenzeichen-Vergabe kollisionsfrei über `CaseCounter`
|
||||
- [x] Fallliste mit Filtern, cursorbasiert, `loading.tsx` mit Skelett
|
||||
- [x] Aktenansicht: Kopfdaten sofort, Verlauf in eigener Suspense-Grenze (Chat: Phase 6)
|
||||
- [x] Vermerk anlegen, optimistisch, mit clientseitiger UUIDv7
|
||||
- [~] Statusübergänge mit Rechteprüfung und automatischem Systemeintrag — Fachlogik und
|
||||
Tests stehen, die Bedienung an der Akte fehlt noch
|
||||
- [x] Schreibgrenzen nach `docs/03-auth-und-rechte.md`: keine Akte über der eigenen Stufe
|
||||
anlegen, Ändern nur mit Lesezugriff, Klassifizierung nachträglich änderbar bis zur
|
||||
eigenen Stufe. Kein Löschen von Akten, nur `ARCHIVED` und `SEALED`
|
||||
- [ ] Umklassifizierung erzeugt `SYSTEM`-Eintrag und `AuditLog` mit alter und neuer Stufe
|
||||
- [ ] Negativtests dazu: Stufe 2 kann keine Stufe-4-Akte anlegen, nicht ändern, nicht
|
||||
- [x] Umklassifizierung erzeugt `SYSTEM`-Eintrag und `AuditLog` mit alter und neuer Stufe
|
||||
- [x] Negativtests dazu: Stufe 2 kann keine Stufe-4-Akte anlegen, nicht ändern, nicht
|
||||
hochstufen, auch nicht über einen direkten Aufruf der Server Action
|
||||
- [ ] Audit-Log für alle schreibenden Aktionen und Lesezugriffe ab Stufe 3
|
||||
- [x] Audit-Log für alle schreibenden Aktionen und Lesezugriffe ab Stufe 3
|
||||
- [ ] Nachträgliche Änderungen an Verlaufseinträgen nach `docs/05-akten-und-vorlagen.md`:
|
||||
`CaseEntryVersion`, Karenzzeit, Pflichtbegründung, `bearbeitet · vN` mit Diff-Historie
|
||||
- [ ] Zurückziehen mit Grabstein und Pflichtbegründung, kein hartes Löschen
|
||||
- [ ] Postgres-Regeln gegen `DELETE` auf `CaseEntry` und `CaseEntryVersion`
|
||||
- [x] Postgres-Regeln gegen `DELETE` auf `CaseEntry` und `CaseEntryVersion`
|
||||
- [ ] Änderungsübersicht als Reiter an der Akte
|
||||
- [ ] Adminseite für `AppSetting`: Änderungsrichtlinie, Karenzzeit, Markierungsverhalten
|
||||
|
||||
|
||||
Reference in New Issue
Block a user