Richtlinien Phase 2a: verwaltete Register-Tabellen + Anwender-Handbuch (§7b, §9.7)

Vier neue, in die Bibliothek integrierte Dokumente (öffnen als interaktive Popups):

- Krypto-Register (VA-07): editierbare Tabelle der eingesetzten Verschlüsselung
  mit Ablaufüberwachung (läuft-ab/abgelaufen-Markierung), Baseline-Bezug
  (BL-CRY-…), voller CRUD (add/edit/delete).
- Risiko-Bewertungsmatrix (R03/VA-09): zentrale Pflegestelle mit FB-80-04-Defaults
  — 4×4-Heatmap (Schadensausmaß × EW), Risikoklassen + Akzeptanzinstanz
  (Niedrig≤3 / Mittel≤6 / Hoch≤9 / Kritisch≥12, editierbar), EW-Skala,
  7 Schadenskategorien. (Rückkopplung in die 5×5-Heatmap der Risikoanalyse folgt.)
- Klassifizierungs-Handhabungsmatrix (R02/VA-08): AA-80-20-Defaults, 4 Schutzklassen
  × 14 Aspekte mit eskalierenden Regeln; Zellen inline editierbar, Aspekt/Klasse
  hinzufügbar.
- Anwender-Handbuch (§9.7): kuratierte Themen (Passwörter/MFA, Zugriffsrechte,
  Klassifizierung, mobiles Arbeiten, E-Mail, Vorfälle) in verständlicher Sprache;
  Werte via {{VARIABLE}}-Templating → automatisch synchron zur Baseline; Deep-Links
  in die Quellabschnitte (z. B. R08 §4.1.2).

Zusätzlich: Richtlinien/Verfahren, die eine verwaltete Tabelle einbetten
(R09/VA-07, R03/VA-09, R02/VA-08), zeigen im Lesemodus einen „Vollständige Tabelle
öffnen"-Callout auf das jeweilige Register (§7b).

Datenmodell: CryptoEntry, ClassificationClass/HandlingAspect/HandlingRule,
RiskMatrixClass/RiskEwLevel/RiskDamageDimension, HandbookTopic (+ RLS).
Server-Actions mit RBAC (policy:write) + Audit-Log. Seed aus FB-80-04/AA-80-20.

Verifiziert im Browser: alle vier Register gerendert, Ablauf-/Farb-/Deep-Link-Logik,
Krypto-CRUD (add + delete) end-to-end.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 15:55:46 +02:00
co-authored by Claude Opus 4.8
parent 89b0e3a5a5
commit e2b6dee788
11 changed files with 1056 additions and 17 deletions
+121
View File
@@ -765,3 +765,124 @@ model PolicyEvidence {
@@index([tenantId])
@@map("policy_evidence")
}
// ── Verwaltete Register-Tabellen (§7b) ───────────────────────────────────────
// Verschlüsselungsmechanismen-Register (VA-07 Kryptokonzept & Schlüsselverwaltung)
model CryptoEntry {
id String @id @default(cuid())
tenantId String @map("tenant_id")
dienst String
schluessel String
algorithmus String?
ablaufdatum DateTime? @map("ablauf_datum")
verantwortlich String
speicherort String?
baselineRef String? @map("baseline_ref") // z. B. BL-CRY-02
notes String?
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@index([tenantId])
@@map("crypto_entries")
}
// Klassifizierungs-Handhabungsmatrix (R02 / VA-08) — Schutzklassen × Aspekte
model ClassificationClass {
id String @id @default(cuid())
tenantId String @map("tenant_id")
name String
description String?
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
rules HandlingRule[]
@@index([tenantId])
@@map("classification_classes")
}
model HandlingAspect {
id String @id @default(cuid())
tenantId String @map("tenant_id")
name String
category String?
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
rules HandlingRule[]
@@index([tenantId])
@@map("handling_aspects")
}
model HandlingRule {
id String @id @default(cuid())
tenantId String @map("tenant_id")
classId String @map("class_id")
aspectId String @map("aspect_id")
text String
class ClassificationClass @relation(fields: [classId], references: [id], onDelete: Cascade)
aspect HandlingAspect @relation(fields: [aspectId], references: [id], onDelete: Cascade)
@@unique([classId, aspectId])
@@index([tenantId])
@@map("handling_rules")
}
// Risiko-Bewertungsmatrix (R03 / VA-09) — zentrale Pflegestelle (Defaults FB-80-04)
model RiskMatrixClass {
id String @id @default(cuid())
tenantId String @map("tenant_id")
name String // Niedrig | Mittel | Hoch | Kritisch
maxScore Int @map("max_score") // obere Schwelle des Risikowerts
acceptance String // Akzeptanzinstanz
tone String // ok | warn | orange | risk
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantId])
@@map("risk_matrix_classes")
}
model RiskEwLevel {
id String @id @default(cuid())
tenantId String @map("tenant_id")
level Int
label String
definition String
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantId])
@@map("risk_ew_levels")
}
model RiskDamageDimension {
id String @id @default(cuid())
tenantId String @map("tenant_id")
name String
levels Json // { "1": "…", "2": "…", "3": "…", "4": "…" }
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantId])
@@map("risk_damage_dimensions")
}
// Anwender-Handbuch (§9.7) — kuratierte Themen mit Deep-Links; Werte via Templating
model HandbookTopic {
id String @id @default(cuid())
tenantId String @map("tenant_id")
category String
title String
bodyMd String @map("body_md") // Markdown mit {{VARIABLE}} (bleibt via Baseline synchron)
sourceRefs String[] @default([]) @map("source_refs") // Deep-Links, z. B. R08#4.1.2
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@index([tenantId])
@@map("handbook_topics")
}