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