diff --git a/admin-compliance/app/sdk/consent-management/page.tsx b/admin-compliance/app/sdk/consent-management/page.tsx
index 1446aef..2b59dd7 100644
--- a/admin-compliance/app/sdk/consent-management/page.tsx
+++ b/admin-compliance/app/sdk/consent-management/page.tsx
@@ -141,16 +141,24 @@ export default function ConsentManagementPage() {
)}
{activeTab === 'emails' && (
-
+
+
+
E-Mail-Templates wurden zentralisiert
+
+ Alle E-Mail-Vorlagen (DSR, Consent, Breach, Training, etc.) werden jetzt zentral
+ im E-Mail-Template-Modul verwaltet — mit Versionierung, Freigabe-Workflow und Audit-Log.
+
+
router.push('/sdk/email-templates')}
+ className="px-6 py-2.5 bg-purple-600 text-white text-sm font-medium rounded-lg hover:bg-purple-700 transition-colors"
+ >
+ Zu E-Mail-Templates
+
+
)}
{activeTab === 'gdpr' && (
diff --git a/admin-compliance/app/sdk/document-generator/_components/GeneratorPreviewTab.tsx b/admin-compliance/app/sdk/document-generator/_components/GeneratorPreviewTab.tsx
index 0478845..4ac76ca 100644
--- a/admin-compliance/app/sdk/document-generator/_components/GeneratorPreviewTab.tsx
+++ b/admin-compliance/app/sdk/document-generator/_components/GeneratorPreviewTab.tsx
@@ -12,6 +12,8 @@ interface GeneratorPreviewTabProps {
missing: string[]
onCopy: () => void
onExportMarkdown: () => void
+ onSaveToWorkflow?: () => void
+ saveStatus?: string | null
}
// ============================================================================
@@ -87,6 +89,8 @@ export default function GeneratorPreviewTab({
missing,
onCopy,
onExportMarkdown,
+ onSaveToWorkflow,
+ saveStatus,
}: GeneratorPreviewTabProps) {
const [viewMode, setViewMode] = useState<'preview' | 'markdown'>('preview')
@@ -196,6 +200,22 @@ export default function GeneratorPreviewTab({
>
PDF drucken
+ {onSaveToWorkflow && (
+
+ {saveStatus === 'saving' ? 'Speichern...' :
+ saveStatus === 'saved' ? 'Gespeichert!' :
+ saveStatus === 'error' ? 'Fehler' :
+ 'Als Version speichern'}
+
+ )}
diff --git a/admin-compliance/app/sdk/document-generator/_components/GeneratorSection.tsx b/admin-compliance/app/sdk/document-generator/_components/GeneratorSection.tsx
index ea313e6..8f9342b 100644
--- a/admin-compliance/app/sdk/document-generator/_components/GeneratorSection.tsx
+++ b/admin-compliance/app/sdk/document-generator/_components/GeneratorSection.tsx
@@ -101,6 +101,45 @@ export default function GeneratorSection({
const handleCopy = () => navigator.clipboard.writeText(renderedContent)
+ const [saveStatus, setSaveStatus] = useState(null)
+
+ const handleSaveToWorkflow = async () => {
+ setSaveStatus('saving')
+ try {
+ // 1. Create or find document
+ const docRes = await fetch('/api/sdk/v1/compliance/legal-documents/documents', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ type: template.templateType || 'custom',
+ name: template.documentTitle || 'Dokument',
+ description: `Generiert aus Template: ${template.templateType}`,
+ }),
+ })
+ if (!docRes.ok) throw new Error('Dokument konnte nicht erstellt werden')
+ const doc = await docRes.json()
+
+ // 2. Create version
+ const verRes = await fetch('/api/sdk/v1/compliance/legal-documents/versions', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ document_id: doc.id,
+ title: template.documentTitle || 'Dokument',
+ content: renderedContent,
+ language: template.language || 'de',
+ version: '1.0',
+ }),
+ })
+ if (!verRes.ok) throw new Error('Version konnte nicht erstellt werden')
+ setSaveStatus('saved')
+ setTimeout(() => setSaveStatus(null), 3000)
+ } catch (e) {
+ setSaveStatus('error')
+ setTimeout(() => setSaveStatus(null), 3000)
+ }
+ }
+
const handleExportMarkdown = () => {
const blob = new Blob([renderedContent], { type: 'text/markdown' })
const url = URL.createObjectURL(blob)
@@ -250,6 +289,8 @@ export default function GeneratorSection({
missing={missing}
onCopy={handleCopy}
onExportMarkdown={handleExportMarkdown}
+ onSaveToWorkflow={handleSaveToWorkflow}
+ saveStatus={saveStatus}
/>
)}