Referenzmatrix nach Mockup + Risiko-Bewertungsmatrix editierbar
Referenz-/Coverage-Matrix (§9.3) wie im GEFIM-Mockup aufgebaut: - Zwei Richtungen „nach Control" und „nach Dokument" (Umschalter) + Assessment- Export-Button (Platzhalter). - nach Control: Control-Nr + -Titel, je Anforderung MUSS/SOLL-Badge + Text, Richtlinie-Link, Verfahren-Chips. - nach Dokument: gruppiert je Richtlinie (Kopfzeile), Zeilen Control · Anforderung · Umsetzung (Variablen aufgelöst, BL entfernt) · Verfahren. - 44 Control-Titel aus dem Mockup übernommen (lib/control-titles.ts), numerische Control-Sortierung. Risiko-Bewertungsmatrix jetzt editierbar (war nur anzeigend / Edit-Popover wurde vom overflow-Container abgeschnitten): - Risikoklassen, Eintrittswahrscheinlichkeit UND Schadenskategorien inline bearbeitbar (Klick auf Zeile klappt Formular auf — kein abgeschnittenes Popover). - Neue Actions updateEwLevel/updateDamageDimension; Krypto-Register-Clipping (overflow-x-auto) ebenfalls entfernt. Verifiziert: beide Referenz-Richtungen gerendert; Risikoklasse-Edit end-to-end gespeichert (persistiert). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -124,6 +124,29 @@ export async function updateRiskClass(id: string, formData: FormData) {
|
||||
revalidatePath("/policies", "layout");
|
||||
}
|
||||
|
||||
export async function updateEwLevel(id: string, formData: FormData) {
|
||||
const { session, db } = await guard();
|
||||
await db.riskEwLevel.update({
|
||||
where: { id },
|
||||
data: { label: z.string().trim().min(1).parse(formData.get("label")), definition: str(formData.get("definition")) },
|
||||
});
|
||||
await writeAuditLog({ tenantId: session.user.tenantId, actorId: session.user.id, action: "update", entity: "risk_ew_level", entityId: id });
|
||||
revalidatePath("/policies", "layout");
|
||||
}
|
||||
|
||||
export async function updateDamageDimension(id: string, formData: FormData) {
|
||||
const { session, db } = await guard();
|
||||
await db.riskDamageDimension.update({
|
||||
where: { id },
|
||||
data: {
|
||||
name: z.string().trim().min(1).parse(formData.get("name")),
|
||||
levels: { "1": str(formData.get("l1")), "2": str(formData.get("l2")), "3": str(formData.get("l3")), "4": str(formData.get("l4")) },
|
||||
},
|
||||
});
|
||||
await writeAuditLog({ tenantId: session.user.tenantId, actorId: session.user.id, action: "update", entity: "risk_damage_dimension", entityId: id });
|
||||
revalidatePath("/policies", "layout");
|
||||
}
|
||||
|
||||
/* ── Bearbeitungsmodus Richtlinien/Verfahren ── */
|
||||
|
||||
/** Vorlagen-Markdown eines Dokuments speichern (Experten-Modus). */
|
||||
|
||||
Reference in New Issue
Block a user