diff --git a/admin-compliance/app/sdk/ai-act/page.tsx b/admin-compliance/app/sdk/ai-act/page.tsx index 5d65075e..98c01b14 100644 --- a/admin-compliance/app/sdk/ai-act/page.tsx +++ b/admin-compliance/app/sdk/ai-act/page.tsx @@ -362,6 +362,16 @@ export default function AIActPage() { )} +
+ Quellen & Lizenz: + + Inhalte gemaess EU-Verordnung 2024/1689 (KI-Verordnung / AI Act) — + Lizenzregel R1 (EU_LAW, woertlich uebernehmbar). + Risiko-Klassifizierungslogik basiert auf Anhang III der Verordnung.{' '} + Quellenverzeichnis + +
+ {/* Tabs */}
{TABS.map(tab => ( diff --git a/admin-compliance/app/sdk/audit-checklist/page.tsx b/admin-compliance/app/sdk/audit-checklist/page.tsx index 2bdb5175..5cfd4171 100644 --- a/admin-compliance/app/sdk/audit-checklist/page.tsx +++ b/admin-compliance/app/sdk/audit-checklist/page.tsx @@ -3,6 +3,7 @@ import React, { useState } from 'react' import { useRouter } from 'next/navigation' import { StepHeader, STEP_EXPLANATIONS } from '@/components/sdk/StepHeader' +import { LicenseModuleBanner } from '@/components/sdk/LicenseModuleBanner' import { useAuditChecklist } from './_hooks/useAuditChecklist' import { ChecklistItemCard } from './_components/ChecklistItemCard' import { LoadingSkeleton } from './_components/LoadingSkeleton' @@ -89,6 +90,12 @@ export default function AuditChecklistPage() {
+ + {error && (
{error} diff --git a/admin-compliance/app/sdk/cra/page.tsx b/admin-compliance/app/sdk/cra/page.tsx index 35854e0f..69865ed2 100644 --- a/admin-compliance/app/sdk/cra/page.tsx +++ b/admin-compliance/app/sdk/cra/page.tsx @@ -99,6 +99,16 @@ export default function CRAProjectsPage() {

+
+ Quellen & Lizenz: + + Inhalte gemaess EU-Verordnung 2024/2847 (Cyber Resilience Act) — + Lizenzregel R1 (EU_LAW, woertlich uebernehmbar). ENISA-Implementation-Guidance + ergaenzend (R1 EU_PUBLIC).{' '} + Quellenverzeichnis + +
+ {error && (
{error} diff --git a/admin-compliance/app/sdk/document-generator/page.tsx b/admin-compliance/app/sdk/document-generator/page.tsx index 96a32b51..a8e850b7 100644 --- a/admin-compliance/app/sdk/document-generator/page.tsx +++ b/admin-compliance/app/sdk/document-generator/page.tsx @@ -297,6 +297,16 @@ function DocumentGeneratorPageInner() { tips={stepInfo.tips} /> +
+ Quellen & Lizenz: + + Die 91 Standard-Vorlagen sind BreakPilot-Eigenwerke (Lizenzregel R3 — Identifier-Verweis, + eigene Lizenz). Vorlagen mit gesetzlicher Grundlage (z.B. VVT nach Art. 30 DSGVO, + Loeschkonzept nach Art. 17 DSGVO) zitieren die jeweilige Rechtsquelle als R1.{' '} + Quellenverzeichnis + +
+ {/* Status bar */}
diff --git a/admin-compliance/app/sdk/dsfa/page.tsx b/admin-compliance/app/sdk/dsfa/page.tsx index 79209f1f..c8195506 100644 --- a/admin-compliance/app/sdk/dsfa/page.tsx +++ b/admin-compliance/app/sdk/dsfa/page.tsx @@ -132,6 +132,16 @@ export default function DSFAPage() { )} +
+ Quellen & Lizenz: + + Inhalte gemaess DSGVO Art. 35 (EU 2016/679) — Lizenzregel R1 + (Hoheitsrecht/EU_LAW, woertlich uebernehmbar). Vorlagen-Texte aus + Aufsichtsbehoerden ebenfalls R1.{' '} + Quellenverzeichnis + +
+ {/* DSFA Requirement Check */} {dsfaCheck.required && dsfas.length === 0 && (
diff --git a/admin-compliance/app/sdk/iace/[projectId]/hazards/_components/HazardTable.tsx b/admin-compliance/app/sdk/iace/[projectId]/hazards/_components/HazardTable.tsx index 42e8348d..024abacb 100644 --- a/admin-compliance/app/sdk/iace/[projectId]/hazards/_components/HazardTable.tsx +++ b/admin-compliance/app/sdk/iace/[projectId]/hazards/_components/HazardTable.tsx @@ -39,11 +39,19 @@ export function HazardTable({ hazards, lifecyclePhases, onDelete }: { .map((hazard) => ( -
+
{hazard.name}
{hazard.name.startsWith('Auto:') && ( Auto )} + {(hazard as { pattern_id?: string }).pattern_id && ( + + {(hazard as { pattern_id?: string }).pattern_id} · R3 + + )}
{hazard.description && (
{hazard.description}
diff --git a/admin-compliance/app/sdk/isms/page.tsx b/admin-compliance/app/sdk/isms/page.tsx index b8f96d5b..7980b117 100644 --- a/admin-compliance/app/sdk/isms/page.tsx +++ b/admin-compliance/app/sdk/isms/page.tsx @@ -9,6 +9,7 @@ import { ObjectivesTab } from './_components/ObjectivesTab' import { AuditsTab } from './_components/AuditsTab' import { ReviewsTab } from './_components/ReviewsTab' import { AssetsTab } from './_components/AssetsTab' +import { LicenseModuleBanner } from '@/components/sdk/LicenseModuleBanner' // ============================================================================= // MAIN PAGE @@ -38,6 +39,13 @@ export default function ISMSPage() {

Hinweis: Basierend auf eigenen Pruefaspekten, kein ISO-Normtext. Ersetzt kein Zertifizierungsaudit.

+
+ +
{/* Tabs */} diff --git a/admin-compliance/app/sdk/security-backlog/page.tsx b/admin-compliance/app/sdk/security-backlog/page.tsx index a3029a71..86930289 100644 --- a/admin-compliance/app/sdk/security-backlog/page.tsx +++ b/admin-compliance/app/sdk/security-backlog/page.tsx @@ -5,6 +5,7 @@ import { SecurityItemCard } from './_components/SecurityItemCard' import { ItemModal } from './_components/ItemModal' import { useSecurityBacklog, EMPTY_NEW_ITEM } from './_hooks/useSecurityBacklog' import type { SecurityItem } from './_hooks/useSecurityBacklog' +import { LicenseModuleBanner } from '@/components/sdk/LicenseModuleBanner' export default function SecurityBacklogPage() { const [filter, setFilter] = useState('all') @@ -37,6 +38,11 @@ export default function SecurityBacklogPage() { return (
+ {/* Header */}
diff --git a/admin-compliance/app/sdk/tom-generator/page.tsx b/admin-compliance/app/sdk/tom-generator/page.tsx index 26d8c04e..55d069e0 100644 --- a/admin-compliance/app/sdk/tom-generator/page.tsx +++ b/admin-compliance/app/sdk/tom-generator/page.tsx @@ -4,6 +4,7 @@ import React from 'react' import { useRouter } from 'next/navigation' import { useTOMGenerator } from '@/lib/sdk/tom-generator' import { TOM_GENERATOR_STEPS } from '@/lib/sdk/tom-generator/types' +import { LicenseModuleBanner } from '@/components/sdk/LicenseModuleBanner' /** * TOM Generator Landing Page @@ -45,6 +46,14 @@ export default function TOMGeneratorPage() {

+
+ +
+ {/* Progress Card */} {hasProgress && (
diff --git a/admin-compliance/app/sdk/vvt/_components/TabVerzeichnis.tsx b/admin-compliance/app/sdk/vvt/_components/TabVerzeichnis.tsx index 9f9e2c8c..e7848fe4 100644 --- a/admin-compliance/app/sdk/vvt/_components/TabVerzeichnis.tsx +++ b/admin-compliance/app/sdk/vvt/_components/TabVerzeichnis.tsx @@ -350,7 +350,12 @@ function ActivityCard({ activity, onEdit, onDelete }: { activity: VVTActivity; o DSFA )} {(activity as any).sourceTemplateId && ( - Vorlage + + Vorlage · R1 + )}

{activity.name || '(Ohne Namen)'}

diff --git a/admin-compliance/components/catalog-manager/CatalogTable.tsx b/admin-compliance/components/catalog-manager/CatalogTable.tsx index 40e12a5d..83d8d032 100644 --- a/admin-compliance/components/catalog-manager/CatalogTable.tsx +++ b/admin-compliance/components/catalog-manager/CatalogTable.tsx @@ -195,12 +195,18 @@ export default function CatalogTable({ )} {entry.source === 'system' ? ( - - System + + System · R1/R2/R3 ) : ( - - Benutzerdefiniert + + Benutzerdefiniert · R3 )} diff --git a/admin-compliance/components/sdk/LicenseModuleBanner.tsx b/admin-compliance/components/sdk/LicenseModuleBanner.tsx new file mode 100644 index 00000000..6c765d22 --- /dev/null +++ b/admin-compliance/components/sdk/LicenseModuleBanner.tsx @@ -0,0 +1,62 @@ +'use client' + +// Reusable licence-source banner placed at the top of an SDK module page. +// One-line context that tells the user (and any auditor) which sources +// the module draws on and which BreakPilot licence rule applies. +// +// Usage: +// +// +// For modules that are pure BreakPilot eigenwerk: +// + +type Props = { + rule: 1 | 2 | 3 + sourceLabel: string + /** Optional extended note shown after sourceLabel */ + detail?: string +} + +const RULE_META: Record = { + 1: { + bg: 'bg-emerald-50 border-emerald-200', + text: 'text-emerald-800', + pill: 'bg-emerald-600 text-white', + descr: 'Hoheitsrecht/Public Domain — woertlich uebernehmbar', + }, + 2: { + bg: 'bg-amber-50 border-amber-200', + text: 'text-amber-800', + pill: 'bg-amber-600 text-white', + descr: 'Woertlich mit Attribution-Pflicht', + }, + 3: { + bg: 'bg-slate-50 border-slate-200', + text: 'text-slate-700', + pill: 'bg-slate-600 text-white', + descr: 'Identifier-Verweis / BreakPilot-Eigenwerk', + }, +} + +export function LicenseModuleBanner({ rule, sourceLabel, detail }: Props) { + const m = RULE_META[rule] + return ( +
+ + R{rule} + +
+ Quellen & Lizenz:{' '} + {sourceLabel} + — {m.descr}. + {detail && {detail}} + Quellenverzeichnis +
+
+ ) +} + +export default LicenseModuleBanner