diff --git a/messages/de.json b/messages/de.json index 8e99698..a39976a 100644 --- a/messages/de.json +++ b/messages/de.json @@ -163,7 +163,7 @@ "biaReport": "BIA-Report (PDF)", "critTable": "Kritikalität der Prozesse", "process": "Geschäftsprozess", - "detailHeading": "Prozess-Detail · {name}", + "detailHeading": "{name}", "detailSub": "Zugeordnete Assets nach Rolle", "critLabel": "Kritikalität: {label}", "primaryPill": "★ Primäres Asset", @@ -217,7 +217,7 @@ "status": "Status", "owner": "Owner", "empty": "Noch keine Risiken erfasst.", - "detailHeading": "Risiko-Detail · {ref}", + "detailHeading": "{ref} · {name}", "detailSub": "Bewertung, betroffene Assets & Behandlung", "editTitle": "Risiko bearbeiten", "createTitle": "Risiko anlegen", @@ -291,7 +291,7 @@ "newMeasure": "Maßnahme", "board": "Maßnahmen-Board", "empty": "Keine Maßnahmen.", - "detailHeading": "Maßnahme · {ref}", + "detailHeading": "{ref} · {name}", "detailSub": "Status, Verantwortung & verknüpfte Risiken", "editTitle": "Maßnahme bearbeiten", "createTitle": "Maßnahme anlegen", diff --git a/messages/en.json b/messages/en.json index b89a7d2..9e8c4cf 100644 --- a/messages/en.json +++ b/messages/en.json @@ -163,7 +163,7 @@ "biaReport": "BIA report (PDF)", "critTable": "Process criticality", "process": "Business process", - "detailHeading": "Process detail · {name}", + "detailHeading": "{name}", "detailSub": "Assigned assets by role", "critLabel": "Criticality: {label}", "primaryPill": "★ Primary asset", @@ -217,7 +217,7 @@ "status": "Status", "owner": "Owner", "empty": "No risks recorded yet.", - "detailHeading": "Risk detail · {ref}", + "detailHeading": "{ref} · {name}", "detailSub": "Rating, affected assets & treatment", "editTitle": "Edit risk", "createTitle": "Create risk", @@ -291,7 +291,7 @@ "newMeasure": "Measure", "board": "Measures board", "empty": "No measures.", - "detailHeading": "Measure · {ref}", + "detailHeading": "{ref} · {name}", "detailSub": "Status, responsibility & linked risks", "editTitle": "Edit measure", "createTitle": "Create measure", diff --git a/src/app/(app)/assets/page.tsx b/src/app/(app)/assets/page.tsx index 1029fa4..020007d 100644 --- a/src/app/(app)/assets/page.tsx +++ b/src/app/(app)/assets/page.tsx @@ -9,6 +9,7 @@ import { Button } from "@/components/ui/button"; import { FilterTabs } from "@/components/filter-tabs"; import { CiaBadge, + CiaLegend, KpiCard, OwnerChip, PageHead, @@ -196,7 +197,12 @@ export default async function AssetsPage({ Asset {t("type")} {t("owner")} - {t("protection")} (C/I/A) + + + {t("protection")} + + + {t("dependencies")} {t("status")} diff --git a/src/components/asset-modals.tsx b/src/components/asset-modals.tsx index b36dd59..0fbaa65 100644 --- a/src/components/asset-modals.tsx +++ b/src/components/asset-modals.tsx @@ -12,7 +12,7 @@ import { import { Button } from "@/components/ui/button"; import { Modal } from "@/components/modal"; import { AssetForm } from "@/components/asset-form"; -import { CiaBadge, Pill, Tag } from "@/components/mockup-ui"; +import { CiaBadge, CiaLegend, Pill, Tag } from "@/components/mockup-ui"; import { riskLevel, riskRef, RISK_PILL_TONE } from "@/lib/risk"; export type AssetWithRelations = Prisma.AssetGetPayload<{ @@ -145,6 +145,15 @@ export async function AssetDetailModal({

{tc("none")}

)} + + + + + {asset.relationsFrom.map((rel) => ( diff --git a/src/components/measure-modals.tsx b/src/components/measure-modals.tsx index bdf9613..291b8d5 100644 --- a/src/components/measure-modals.tsx +++ b/src/components/measure-modals.tsx @@ -42,7 +42,7 @@ export async function MeasureDetailModal({ return ( diff --git a/src/components/mockup-ui.tsx b/src/components/mockup-ui.tsx index f4c3a57..58050e8 100644 --- a/src/components/mockup-ui.tsx +++ b/src/components/mockup-ui.tsx @@ -55,11 +55,11 @@ export function KpiCard({ ); } -// Segmentbalken-Farben je Stufe 1–4 (Referenz docs/ISMS-GUI-Verbesserungen-GEFIM.html) +// Segmentbalken-Farben je Stufe 1–4 als Ampel: Grün → Gelb → Orange → Rot const CIA_BAR_COLORS: Record = { - 1: "bg-[#9db2c9]", - 2: "bg-[#5d8fbf]", - 3: "bg-[#e0982e]", + 1: "bg-[#2e9e6b]", + 2: "bg-[#e5b000]", + 3: "bg-[#e07d2e]", 4: "bg-[#d64c4c]", }; @@ -113,6 +113,19 @@ export function CiaBadge({ ); } +/** VER/INT/VFB-Beschriftung passend zur Balkenbreite — einmal pro Tabelle als Überschrift. */ +export function CiaLegend() { + return ( + + {["VER", "INT", "VFB"].map((l) => ( + + {l} + + ))} + + ); +} + export function Tag({ children }: { children: React.ReactNode }) { return ( @@ -142,6 +155,7 @@ export function OwnerChip({ name, noOwnerLabel }: { name?: string | null; noOwne const PILL_TONES = { ok: "bg-[#e7f6ee] text-[#2e9e6b]", warn: "bg-[#fbf1de] text-[#a9760f]", + orange: "bg-[#fbdcc0] text-[#c2681a]", risk: "bg-[#fbe7e7] text-[#d64c4c]", info: "bg-[#e7f1fa] text-[#3a86c8]", mut: "bg-[#eef0f4] text-muted-foreground", diff --git a/src/components/modal.tsx b/src/components/modal.tsx index 22bb5b1..e49ebea 100644 --- a/src/components/modal.tsx +++ b/src/components/modal.tsx @@ -26,7 +26,7 @@ export function Modal({ }) { return (
-
+
diff --git a/src/components/process-modals.tsx b/src/components/process-modals.tsx index 09c3cf8..6404a5b 100644 --- a/src/components/process-modals.tsx +++ b/src/components/process-modals.tsx @@ -16,7 +16,7 @@ import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Modal } from "@/components/modal"; import { SegmentedRating } from "@/components/segmented-rating"; -import { CiaBadge, CriticalityPill, Pill, Tag } from "@/components/mockup-ui"; +import { CiaBadge, CiaLegend, CriticalityPill, Pill, Tag } from "@/components/mockup-ui"; import { riskLevel, riskRef, RISK_PILL_TONE } from "@/lib/risk"; export type LinkedRisk = { @@ -158,6 +158,15 @@ export async function ProcessDetailModal({
{secondary.length === 0 &&

{t("noAssets")}

}
+ + + +
+ + + + + {secondary.map((pa) => ( diff --git a/src/components/risk-modals.tsx b/src/components/risk-modals.tsx index 2640951..95cc7dc 100644 --- a/src/components/risk-modals.tsx +++ b/src/components/risk-modals.tsx @@ -19,7 +19,7 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Modal } from "@/components/modal"; -import { CiaBadge, Pill, Tag } from "@/components/mockup-ui"; +import { CiaBadge, CiaLegend, Pill, Tag } from "@/components/mockup-ui"; import { riskLevel, riskRef, RISK_PILL_TONE } from "@/lib/risk"; import { measureRef, MEASURE_STATUS_TONE } from "@/lib/measure"; @@ -123,7 +123,7 @@ function RiskScoreScale({ gross, residual }: { gross: number; residual: number | // 5×5 → Score 1..25; Position linear auf der Skala const pos = (v: number) => `${((Math.min(25, Math.max(1, v)) - 1) / 24) * 100}%`; return ( -
+
@@ -241,6 +241,15 @@ export async function RiskDetailModal({

{t("noAssets")}

)}
+ + + +
+ + + + + {risk.riskAssets.map((ra) => ( @@ -266,9 +275,10 @@ export async function RiskDetailModal({ - {/* Brutto → Rest-Risiko: zwei Karten mit Pfeil + Farbskala */} + {/* Brutto → Rest-Risiko: Farbskala oben, darunter zwei Karten mit Pfeil */}
-
+ +
-
{/* Notwendige Maßnahmen — echt verknüpft */} diff --git a/src/components/segmented-rating.tsx b/src/components/segmented-rating.tsx index b14fa05..af1418e 100644 --- a/src/components/segmented-rating.tsx +++ b/src/components/segmented-rating.tsx @@ -3,11 +3,11 @@ import { useState } from "react"; import { cn } from "@/lib/utils"; -// Farblogik Stufe 1–4 (Referenz docs/ISMS-GUI-Verbesserungen-GEFIM.html) +// Ampel-Farblogik Stufe 1–4: Grün → Gelb → Orange → Rot const LEVEL_STYLE: Record = { - 1: { on: "bg-[#9db2c9] text-white border-transparent", border: "border-[#9db2c9]" }, - 2: { on: "bg-[#5d8fbf] text-white border-transparent", border: "border-[#5d8fbf]" }, - 3: { on: "bg-[#e0982e] text-white border-transparent", border: "border-[#e0982e]" }, + 1: { on: "bg-[#2e9e6b] text-white border-transparent", border: "border-[#2e9e6b]" }, + 2: { on: "bg-[#e5b000] text-[#3b3b3a] border-transparent", border: "border-[#e5b000]" }, + 3: { on: "bg-[#e07d2e] text-white border-transparent", border: "border-[#e07d2e]" }, 4: { on: "bg-[#d64c4c] text-white border-transparent", border: "border-[#d64c4c]" }, }; diff --git a/src/lib/risk.ts b/src/lib/risk.ts index ef3bc03..35eaaed 100644 --- a/src/lib/risk.ts +++ b/src/lib/risk.ts @@ -19,11 +19,11 @@ export const RISK_CELL_COLORS: Record = { critical: "#ef9a98", }; -/** Pillen-Ton je Stufe (mockup-ui Pill). */ -export const RISK_PILL_TONE: Record = { +/** Pillen-Ton je Stufe — gemäß Heatmap-Skala: Grün → Gelb → Orange → Rot. */ +export const RISK_PILL_TONE: Record = { low: "ok", - medium: "info", - elevated: "warn", + medium: "warn", + elevated: "orange", high: "risk", critical: "risk", };
+ + + +