Richtlinien & Verfahren (Phase 1): Import, Rendering-Engine, Bibliothek, Coverage

Fundament des VDA-ISA-2027-Richtlinienmoduls (Spec §1–9):

- Datenmodell: PolicyDocument, PolicyRequirement, PolicyVariable (Variablen +
  Feature-Flags), PolicyBaselineParam, PolicyEvidence — inkl. RLS + Tenant-Guard
- Seed-Importer (import-policies.ts): liest die echten .md-Dateien (15 Richtlinien
  L00/R01–R14 + 11 Verfahren), mapping.json (120 Anforderungen/46 Controls),
  variables.schema.json (53 Variablen/Flags), Technische-Sicherheits-Baseline
  (31 BL-Parameter) und Nachweisregister; idempotent pro Mandant
- 6 im Vorlagenpaket beschädigte Variablen-Tokens (VA-08/09/10/12/13) repariert
  (dokumentiert im README des Übergabepakets)
- Rendering-Engine (policy-render.ts, Handlebars + marked): verschachtelte
  {{#if FLAG}}, {{VARIABLE}}, {{LINK:…}}-Deeplinks, Hidden-Anker + BL-Referenzen
  im Lesemodus entfernt (Wert bleibt), zentral verwaltete Abschnitte unterdrückt,
  wiederholtes „Umsetzung bei <Org>" reduziert (§7a); lenienter Fallback +
  Residue-Check über alle Flag-Kombinationen (analog _verify.py)
- UI: Bibliothek mit Typ-Chips/KPIs, Lesemodus-Popup (einklappbare Info-Tabelle,
  Control-Chips, Richtlinie↔Verfahren-Verlinkung), Coverage-Matrix
  (Control → Richtlinie → MUSS/SOLL → Verfahren → Anforderungs-IDs)
- Nav-Punkt „Richtlinien" aktiviert; de/en-Übersetzungen

Verifiziert: Import 28 Dokumente/120 Anforderungen; Rendering rückstandsfrei
über alle Flag-Kombinationen; Bibliothek, Lesemodus (R08 nested flags), Coverage
im Browser.

Später (Phase 2+): Bearbeiten/Freigabe-Workflow mit Versionierung, verwaltete
Tabellen (Krypto-/Risiko-/Klassifizierungsregister), Anwender-Handbuch,
DOCX/PDF-Export, Word-Upload, KI-Wizard, zentrale Baseline-/Variablen-Einstellseite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 13:35:59 +02:00
co-authored by Claude Opus 4.8
parent 2706424c08
commit 89b0e3a5a5
52 changed files with 7627 additions and 1 deletions
+110
View File
@@ -655,3 +655,113 @@ model AuditLog {
@@index([tenantId, createdAt])
@@map("audit_logs")
}
// ── Richtlinien & Verfahren (VDA-ISA 2027 Vorlagenpaket) ──────────────────────
// Dokumente werden aus ihrer echten Markdown-Vorlage gerendert; Variablen,
// Feature-Flags und Baseline-Parameter sind die eine Pflegestelle (§7).
enum PolicyDocType {
LEITLINIE // L00
RICHTLINIE // R01R14
VERFAHREN // VA-01VA-13
REGISTER // verwaltete Tabellen (Baseline, Nachweisregister, …)
HANDBUCH // Anwender-Handbuch
EIGENES // Word-Upload
}
enum PolicyStatus {
ENTWURF
IN_FREIGABE
FREIGEGEBEN
ARCHIVIERT
}
model PolicyDocument {
id String @id @default(cuid())
tenantId String @map("tenant_id")
code String // L00 | R01..R14 | VA-01..VA-13 | BASELINE | NACHWEIS | ISA_MAPPING
type PolicyDocType
title String
version String @default("1.0")
status PolicyStatus @default(FREIGEGEBEN)
owner String?
policyCode String? @map("policy_code") // bei VA: operationalisierte Richtlinie (R..)
fulfills String[] @default([]) // bei VA: erfüllte Anforderungs-IDs
rawMarkdown String @map("raw_markdown") // Vorlagen-Markdown mit Platzhaltern
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@unique([tenantId, code])
@@index([tenantId])
@@map("policy_documents")
}
model PolicyRequirement {
id String @id @default(cuid())
tenantId String @map("tenant_id")
reqId String @map("req_id") // z. B. 4.1.2-M1
policyCode String @map("policy_code") // R08
control String // 4.1.2
obligation String // MUSS | SOLL
condition String? // FLAG_… oder null
requirement String
implementation String
vaCodes String[] @default([]) @map("va_codes") // operationalisierende Verfahren
nachweisLink String? @map("nachweis_link")
createdAt DateTime @default(now()) @map("created_at")
@@unique([tenantId, reqId])
@@index([tenantId])
@@index([tenantId, control])
@@map("policy_requirements")
}
// Wizard-Variablen und Feature-Flags (variables.schema.json) — eine Pflegestelle
model PolicyVariable {
id String @id @default(cuid())
tenantId String @map("tenant_id")
key String // UPPER_SNAKE, z. B. PW_MIN_LENGTH / FLAG_CLOUD_USED
title String
kind String // string | boolean
groupName String? @map("group_name")
value String // aktueller Wert (Default aus Schema); Flags als "true"/"false"
required Boolean @default(false)
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@unique([tenantId, key])
@@index([tenantId])
@@map("policy_variables")
}
model PolicyBaselineParam {
id String @id @default(cuid())
tenantId String @map("tenant_id")
blId String @map("bl_id") // BL-IAM-01
section String // "1. Identitäts- und Zugriffsmanagement"
name String
vorgabe String // Vorlagentext (kann {{VARIABLE}} enthalten)
orderIdx Int @default(0) @map("order_idx")
createdAt DateTime @default(now()) @map("created_at")
@@unique([tenantId, blId])
@@index([tenantId])
@@map("policy_baseline_params")
}
model PolicyEvidence {
id String @id @default(cuid())
tenantId String @map("tenant_id")
nr Int
policyCode String @map("policy_code")
nachweis String
quelle String
verantwortlich String
turnus String
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantId])
@@map("policy_evidence")
}