diff --git a/prisma/import-managed.ts b/prisma/import-managed.ts index 84b4103..527309e 100644 --- a/prisma/import-managed.ts +++ b/prisma/import-managed.ts @@ -114,20 +114,20 @@ const GENERIC_REGISTERS: { { code: "REG-AUDIT-PLAN", title: "Audit-Programm-Register", orderIdx: 907, description: "Auditprogramm mit Zeitplan, Umfang, geprüften Controls, Prüfern und Ergebnissen (R03 / VA-15).", columns: [{ key: "zeitplan", label: "Zeitplan" }, { key: "umfang", label: "Umfang" }, { key: "controls", label: "Geprüfte Controls" }, { key: "pruefer", label: "Prüfer" }, { key: "ergebnisse", label: "Ergebnisse" }] }, - { code: "REG-EXT-SERVICES", title: "Register externe IT-/Cloud-/KI-Dienste", orderIdx: 908, - description: "Externe/Cloud-/KI-Dienste mit Schutzbedarf, Datenlokation, Verschlüsselung, Exit und Freigabe (R13/VA-10 + R02/VA-08).", - columns: [{ key: "dienst", label: "Dienst" }, { key: "schutzbedarf", label: "Schutzbedarf" }, { key: "datenlokation", label: "Datenlokation (EU)" }, { key: "verschluesselung", label: "Verschlüsselung" }, { key: "exit", label: "Exit-Strategie" }, { key: "freigabe", label: "Freigabestatus" }, { key: "freigeber", label: "Freigeber" }], supplierLink: true, assetLink: true }, - { code: "REG-SW-WHITELIST", title: "Register Software-Whitelist", orderIdx: 909, - description: "Zugelassene Software mit Version/Patch-Stand, Quelle/Lieferant, Freigabestatus und Review (R02 1.3.4).", - columns: [{ key: "software", label: "Software" }, { key: "version", label: "Version/Patch-Stand" }, { key: "freigabe", label: "Freigabestatus" }, { key: "freigeber", label: "Freigeber" }, { key: "review", label: "Review" }], supplierLink: true, assetLink: true }, - { code: "REG-CRIT-SERVICES", title: "Register kritischer IT-Dienste", orderIdx: 910, - description: "Kritische IT-Dienste mit BIA-Einstufung, RTO/RPO, Abhängigkeiten und Wiederanlaufreihenfolge (R04 5.2.8 / VA-02).", - columns: [{ key: "dienst", label: "Kritischer IT-Dienst" }, { key: "bia", label: "BIA-Einstufung" }, { key: "rto", label: "RTO" }, { key: "rpo", label: "RPO" }, { key: "abhaengigkeiten", label: "Abhängigkeiten" }, { key: "wiederanlauf", label: "Wiederanlaufreihenfolge" }], assetLink: true }, + // REG-NET bleibt ein leichtgewichtiges Register: der Netzplan ist ein extern gepflegtes + // Dokument, daher nur Referenz/Speicherort statt Tabelleninhalt (Datei-Upload folgt separat). { code: "REG-NET", title: "Netz-/Netzdienste-Register", orderIdx: 911, - description: "Netzplan/Segmentierung, Netzdienste, Zonen und Review-Turnus (R09 5.1.2 / R10 5.2.7 / VA-07).", - columns: [{ key: "bezeichnung", label: "Netzplan/Segment" }, { key: "netzdienst", label: "Netzdienst" }, { key: "zone", label: "Zone" }, { key: "review", label: "Review" }] }, + description: "Verweis auf den (extern gepflegten) Netzplan sowie Netzdienste/Zonen und Review-Turnus (R09 5.1.2 / R10 5.2.7 / VA-07).", + columns: [{ key: "netzplan", label: "Netzplan (Speicherort/Referenz)" }, { key: "netzdienst", label: "Netzdienst" }, { key: "zone", label: "Zone" }, { key: "review", label: "Review" }] }, ]; +// GAP-Konsolidierung: Diese Register wurden in die Fachmodule überführt und werden +// daher stillgelegt (Dokument + ManagedRegister + Zeilen entfernt). Die zugehörigen +// {{LINK:…}} zeigen jetzt auf die Module (siehe resolveLink): +// REG-EXT-SERVICES → Lieferanten/IT-Services · REG-SW-WHITELIST → Lieferanten/Software +// REG-CRIT-SERVICES → Assets (kritische Dienste) · REG-PROJECTS → Assets (Projekte) +const RETIRED_REGISTERS = ["REG-EXT-SERVICES", "REG-SW-WHITELIST", "REG-CRIT-SERVICES", "REG-PROJECTS"]; + export async function importManaged(prisma: PrismaClient, tenantId: string) { // Idempotent: alte Datensätze pro Mandant entfernen await prisma.handlingRule.deleteMany({ where: { tenantId } }); @@ -171,6 +171,11 @@ export async function importManaged(prisma: PrismaClient, tenantId: string) { }); } + // Stillgelegte Register entfernen (in Fachmodule überführt). RegisterRow hängt per + // Cascade an ManagedRegister; das Bibliotheks-Dokument wird ebenfalls entfernt. + await prisma.managedRegister.deleteMany({ where: { tenantId, code: { in: RETIRED_REGISTERS } } }); + await prisma.policyDocument.deleteMany({ where: { tenantId, code: { in: RETIRED_REGISTERS } } }); + // Krypto-Register for (let i = 0; i < CRYPTO.length; i++) { const c = CRYPTO[i]; diff --git a/src/lib/policy-render.ts b/src/lib/policy-render.ts index 201e8bc..905e9f2 100644 --- a/src/lib/policy-render.ts +++ b/src/lib/policy-render.ts @@ -62,6 +62,15 @@ export function resolveLink(target: string): { href: string; label: string } { return { href: "/policies?view=coverage", label: "ISA-Mapping-Matrix" }; case "BASELINE": return { href: "/policies/BASELINE", label: "Technische Sicherheits-Baseline" }; + // In Fachmodule überführte Register (GAP-Konsolidierung) — kein eigenes Dokument mehr. + case "REG-EXT-SERVICES": + return { href: "/suppliers?tab=services", label: "IT-Services (Lieferantenmodul)" }; + case "REG-SW-WHITELIST": + return { href: "/suppliers?tab=software", label: "Software-Freigaben (Lieferantenmodul)" }; + case "REG-CRIT-SERVICES": + return { href: "/assets?view=critical", label: "Kritische IT-Dienste (Assetinventar)" }; + case "REG-PROJECTS": + return { href: "/assets?type=PROJECT", label: "Projekte (Assetinventar)" }; default: return { href: q(code), label: anchor ? `${code} §${anchor}` : code }; }