diff --git a/admin-compliance/agent-core/soul/drafting-agent.soul.md b/admin-compliance/agent-core/soul/drafting-agent.soul.md index c28c1ec..596cebf 100644 --- a/admin-compliance/agent-core/soul/drafting-agent.soul.md +++ b/admin-compliance/agent-core/soul/drafting-agent.soul.md @@ -13,4 +13,87 @@ Konsistenz zwischen Dokumenten sicherzustellen. - Fuelle fehlende Informationen mit [PLATZHALTER: ...] Markierung ## Kompetenzbereich -DSGVO, BDSG, AI Act, TTDSG, DSK-Kurzpapiere, SDM V3.0, BSI-Grundschutz, ISO 27001/27701, EDPB Guidelines, WP248 +DSGVO, BDSG, AI Act (EU 2024/1689), TTDSG, DDG (§5 Impressum), +DSK-Kurzpapiere, SDM V3.0, BSI-Grundschutz (IT-Grundschutz-Kompendium), +ISO 27001/27701, EDPB Guidelines, WP248, +EN-Normen (EN 13849, EN 62443), BGB §305ff (AGB), +Standard Contractual Clauses (SCC, 2021/914/EU) + +## Draftbare Dokumenttypen (18) + +| Typ | Label | Rechtsgrundlage | +|-----|-------|-----------------| +| vvt | Verarbeitungsverzeichnis | Art. 30 DSGVO | +| tom | Technisch-Organisatorische Massnahmen | Art. 32 DSGVO | +| dsfa | Datenschutz-Folgenabschaetzung | Art. 35 DSGVO | +| dsi | Datenschutzerklaerung | Art. 13/14 DSGVO | +| lf | Loeschfristen/Loeschkonzept | Art. 17 DSGVO | +| av_vertrag | Auftragsverarbeitungsvertrag | Art. 28 DSGVO | +| betroffenenrechte | Betroffenenrechte-Konzept | Art. 15-22 DSGVO | +| einwilligung | Einwilligungsmanagement | Art. 6 Abs. 1a / Art. 7 DSGVO | +| daten_transfer | Drittlandtransfer / SCC | Art. 44-49 DSGVO | +| datenpannen | Datenpannen-Meldekonzept | Art. 33/34 DSGVO | +| vertragsmanagement | Vertragsmanagement-Richtlinie | Art. 28 DSGVO | +| schulung | Schulungskonzept Datenschutz | Art. 39 DSGVO | +| audit_log | Audit- und Protokollierungskonzept | Art. 5 Abs. 2 DSGVO | +| risikoanalyse | Risikoanalyse | Art. 32 / Art. 35 DSGVO | +| notfallplan | Notfall- und Krisenmanagement | Art. 32 Abs. 1c DSGVO | +| zertifizierung | Zertifizierungskonzept | Art. 42/43 DSGVO, ISO 27001 | +| datenschutzmanagement | DSMS-Konzept | §§ 38, 64 BDSG | +| iace_ce_assessment | IACE CE-Bewertung | AI Act (EU 2024/1689), EN-Normen | + +## NICHT draftbare Dokumente — Weiterleitung + +Folgende Dokumente werden NICHT vom Drafting Agent erstellt. Verweise stattdessen auf das passende Modul: + +| Anfrage | Antwort / Weiterleitung | +|---------|------------------------| +| Impressum (DDG §5) | "Impressum-Templates finden Sie unter /sdk/document-generator → Kategorie 'Impressum'." | +| AGB (BGB §305ff) | "AGB-Vorlagen erstellen Sie im Document Generator unter /sdk/document-generator → Kategorie 'AGB'." | +| Widerrufsbelehrung | "Widerrufs-Templates finden Sie unter /sdk/document-generator → Kategorie 'Widerruf'." | +| NDA / Geheimhaltung | "NDA-Vorlagen finden Sie unter /sdk/document-generator." | +| SLA / Dienstleistungsvertrag | "SLA-Vorlagen finden Sie unter /sdk/document-generator." | + +## Operative Module — Erklaeren, nicht Entwerfen + +Folgende Module sind operative Tools. Im explain-Modus erklaeren, im ask-Modus auf Luecken hinweisen, aber KEINE Entwuerfe erstellen: + +| Modul | SDK-Pfad | Erklaerung | +|-------|----------|------------| +| DSR (Betroffenenanfragen) | /sdk/dsr | Anfragen-Management nach Art. 15-22 DSGVO. Konfiguration im DSR-Modul. | +| E-Mail-Templates | /sdk/dsr | E-Mail-Vorlagen fuer Betroffenenanfragen. Teil des DSR-Moduls. | +| Banner/Consent | /sdk/cookie-banner | Cookie-Banner-Konfiguration. Einstellungen unter Consent-Management. | +| Einwilligungsverwaltung | /sdk/einwilligungen | Verwaltung erteilter Einwilligungen. Operatives Dashboard. | + +## Luecken-Kommunikation (Ask-Modus) + +Wenn der Nutzer nach Luecken fragt oder kritische Gaps existieren: + +1. **Prioritaet**: Zeige zuerst CRITICAL/HIGH Gaps, dann MEDIUM +2. **Link**: Verweise auf den passenden SDK-Schritt (DOCUMENT_SDK_STEP_MAP) +3. **Begruendung**: Erklaere WARUM das Dokument fehlt (Rechtsgrundlage) +4. **Aufwand**: Nenne den geschaetzten Aufwand aus der Scope-Matrix +5. **Reihenfolge**: Empfehle eine sinnvolle Bearbeitungsreihenfolge: + VVT → TOM → Loeschfristen → DSFA → AVV → Risikoanalyse → Rest + +## Modus-Verhalten + +### explain +- Erklaere Compliance-Konzepte sachlich und verstaendlich +- Verweise auf Rechtsgrundlagen und SDK-Module +- Bei operativen Modulen: erklaere Funktion + verweise auf SDK-Pfad + +### ask +- Analysiere Luecken im Compliance-Profil +- Zeige fehlende Pflichtdokumente nach Scope-Level +- Gib priorisierte Handlungsempfehlungen + +### draft +- Erstelle strukturierte Dokumententwuerfe +- Halte die Tiefe strikt am Scope-Level +- Verwende [PLATZHALTER: ...] fuer fehlende Informationen + +### validate +- Pruefe Cross-Dokument-Konsistenz +- Melde Scope-Verletzungen und fehlende Referenzen +- Schlage konkrete Korrekturen vor diff --git a/admin-compliance/app/api/sdk/drafting-engine/draft/route.ts b/admin-compliance/app/api/sdk/drafting-engine/draft/route.ts index ebe502f..ea195df 100644 --- a/admin-compliance/app/api/sdk/drafting-engine/draft/route.ts +++ b/admin-compliance/app/api/sdk/drafting-engine/draft/route.ts @@ -204,6 +204,27 @@ const DOCUMENT_PROSE_BLOCKS: Record )} + {/* Gap Banner */} + {(() => { + const gaps = state.complianceScope?.decision?.gaps?.filter( + (g: { severity: string }) => g.severity === 'HIGH' || g.severity === 'CRITICAL' + ) ?? [] + if (gaps.length > 0) { + return ( +
+
+ + + + {gaps.length} kritische Luecke{gaps.length !== 1 ? 'n' : ''} erkannt +
+ +
+ ) + } + return null + })()} + {/* Error Banner */} {engine.error && (
diff --git a/admin-compliance/lib/sdk/compliance-scope-types.ts b/admin-compliance/lib/sdk/compliance-scope-types.ts index ae65297..865b609 100644 --- a/admin-compliance/lib/sdk/compliance-scope-types.ts +++ b/admin-compliance/lib/sdk/compliance-scope-types.ts @@ -1307,21 +1307,21 @@ export const DOCUMENT_SCOPE_MATRIX: Record> = { vvt: '/sdk/vvt', - lf: '/sdk/loeschkonzept', + lf: '/sdk/loeschfristen', tom: '/sdk/tom', - av_vertrag: '/sdk/auftragsverarbeitung', - dsi: '/sdk/datenschutzinformation', - betroffenenrechte: '/sdk/betroffenenrechte', + av_vertrag: '/sdk/vendor-compliance', + dsi: '/sdk/consent', + betroffenenrechte: '/sdk/dsr', dsfa: '/sdk/dsfa', - daten_transfer: '/sdk/drittland', - datenpannen: '/sdk/datenpanne', - einwilligung: '/sdk/einwilligung', - vertragsmanagement: '/sdk/vertragsmanagement', - schulung: '/sdk/schulung', - audit_log: '/sdk/audit-logging', - risikoanalyse: '/sdk/risikoanalyse', + daten_transfer: '/sdk/vendor-compliance', + datenpannen: '/sdk/incidents', + einwilligung: '/sdk/einwilligungen', + vertragsmanagement: '/sdk/workflow', + schulung: '/sdk/training', + audit_log: '/sdk/audit-checklist', + risikoanalyse: '/sdk/risks', notfallplan: '/sdk/notfallplan', - zertifizierung: '/sdk/zertifizierung', + zertifizierung: '/sdk/iace', datenschutzmanagement: '/sdk/dsms', iace_ce_assessment: '/sdk/iace', }; diff --git a/admin-compliance/lib/sdk/drafting-engine/intent-classifier.ts b/admin-compliance/lib/sdk/drafting-engine/intent-classifier.ts index 41be915..071e881 100644 --- a/admin-compliance/lib/sdk/drafting-engine/intent-classifier.ts +++ b/admin-compliance/lib/sdk/drafting-engine/intent-classifier.ts @@ -142,6 +142,125 @@ const DOCUMENT_TYPE_PATTERNS: Array<{ /\bcookie/i, ], }, + { + type: 'datenpannen', + patterns: [ + /\bdatenpanne/i, + /\bdata\s*breach/i, + /\bart\.?\s*33\b/i, + /\bsicherheitsvorfall/i, + /\bincident/i, + /\bmelde.*vorfall/i, + ], + }, + { + type: 'daten_transfer', + patterns: [ + /\bdrittland/i, + /\btransfer/i, + /\bscc\b/i, + /\bstandardvertragsklausel/i, + /\bart\.?\s*44\b/i, + ], + }, + { + type: 'vertragsmanagement', + patterns: [ + /\bvertragsmanagement/i, + /\bcontract\s*management/i, + ], + }, + { + type: 'schulung', + patterns: [ + /\bschulung/i, + /\btraining/i, + /\bawareness/i, + /\bmitarbeiterschulung/i, + ], + }, + { + type: 'audit_log', + patterns: [ + /\baudit/i, + /\blogging\b/i, + /\bprotokollierung/i, + /\bart\.?\s*5\s*abs\.?\s*2\b/i, + ], + }, + { + type: 'risikoanalyse', + patterns: [ + /\brisikoanalyse/i, + /\brisk\s*assessment/i, + /\brisikobewertung/i, + ], + }, + { + type: 'notfallplan', + patterns: [ + /\bnotfallplan/i, + /\bkrisenmanagement/i, + /\bbusiness\s*continuity/i, + /\bnotfall/i, + ], + }, + { + type: 'zertifizierung', + patterns: [ + /\bzertifizierung/i, + /\biso\s*27001\b/i, + /\biso\s*27701\b/i, + /\bart\.?\s*42\b/i, + ], + }, + { + type: 'datenschutzmanagement', + patterns: [ + /\bdsms\b/i, + /\bdatenschutzmanagement/i, + /\bpdca/i, + ], + }, + { + type: 'iace_ce_assessment', + patterns: [ + /\biace\b/i, + /\bce[\s-]?kennzeichnung/i, + /\bai\s*act\b/i, + /\bki[\s-]?verordnung/i, + ], + }, +] + +// ============================================================================ +// Redirect Patterns (nicht-draftbare Dokumente → Document Generator) +// ============================================================================ + +const REDIRECT_PATTERNS: Array<{ + pattern: RegExp + response: string +}> = [ + { + pattern: /\bimpressum\b/i, + response: 'Impressum-Templates finden Sie unter /sdk/document-generator → Kategorie "Impressum". Der Drafting Agent erstellt keine Impressen, da diese nach DDG §5 unternehmensspezifisch sind.', + }, + { + pattern: /\b(agb|allgemeine.?geschaefts)/i, + response: 'AGB-Vorlagen erstellen Sie im Document Generator unter /sdk/document-generator → Kategorie "AGB". Der Drafting Agent erstellt keine AGB, da diese nach BGB §305ff individuell gestaltet werden muessen.', + }, + { + pattern: /\bwiderruf/i, + response: 'Widerrufs-Templates finden Sie unter /sdk/document-generator → Kategorie "Widerruf".', + }, + { + pattern: /\bnda\b/i, + response: 'NDA-Vorlagen finden Sie unter /sdk/document-generator.', + }, + { + pattern: /\bsla\b/i, + response: 'SLA-Vorlagen finden Sie unter /sdk/document-generator.', + }, ] // ============================================================================ @@ -158,6 +277,19 @@ export class IntentClassifier { */ classify(input: string): IntentClassification { const normalized = this.normalize(input) + + // Redirect-Check: Nicht-draftbare Dokumente → Document Generator + for (const redirect of REDIRECT_PATTERNS) { + if (redirect.pattern.test(normalized)) { + return { + mode: 'explain', + confidence: 0.90, + matchedPatterns: [redirect.pattern.source], + suggestedResponse: redirect.response, + } + } + } + let bestMatch: IntentClassification = { mode: 'explain', confidence: 0.3, diff --git a/admin-compliance/lib/sdk/drafting-engine/state-projector.ts b/admin-compliance/lib/sdk/drafting-engine/state-projector.ts index 67e5866..9eba9c9 100644 --- a/admin-compliance/lib/sdk/drafting-engine/state-projector.ts +++ b/admin-compliance/lib/sdk/drafting-engine/state-projector.ts @@ -300,6 +300,11 @@ export class StateProjector { if (state.documents?.length) types.push('dsi') if (state.consents?.length) types.push('einwilligung') if (state.cookieBanner) types.push('einwilligung') + if (state.risks?.length) types.push('risikoanalyse') + if (state.escalationWorkflows?.length) types.push('datenpannen') + if (state.iaceProjects?.length) types.push('iace_ce_assessment') + if (state.obligations?.length) types.push('zertifizierung') + if (state.dsrConfig) types.push('betroffenenrechte') return types } diff --git a/admin-compliance/lib/sdk/drafting-engine/types.ts b/admin-compliance/lib/sdk/drafting-engine/types.ts index 80d7276..5e3579e 100644 --- a/admin-compliance/lib/sdk/drafting-engine/types.ts +++ b/admin-compliance/lib/sdk/drafting-engine/types.ts @@ -33,6 +33,8 @@ export interface IntentClassification { matchedPatterns: string[] /** Falls Draft oder Validate: erkannter Dokumenttyp */ detectedDocumentType?: ScopeDocumentType + /** Vorgeschlagene Antwort fuer Redirect-Szenarien (z.B. Document Generator) */ + suggestedResponse?: string } // ============================================================================ diff --git a/ai-compliance-sdk/internal/api/handlers/drafting_handlers.go b/ai-compliance-sdk/internal/api/handlers/drafting_handlers.go index bc2fb27..3f96ce3 100644 --- a/ai-compliance-sdk/internal/api/handlers/drafting_handlers.go +++ b/ai-compliance-sdk/internal/api/handlers/drafting_handlers.go @@ -107,6 +107,7 @@ func (h *DraftingHandlers) DraftDocument(c *gin.Context) { "daten_transfer": true, "datenpannen": true, "vertragsmanagement": true, "schulung": true, "audit_log": true, "risikoanalyse": true, "notfallplan": true, "zertifizierung": true, "datenschutzmanagement": true, + "iace_ce_assessment": true, } if !validTypes[req.DocumentType] { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid document_type"})