feat: Drafting Agent Kompetenzbereich erweitert — alle 18 Dokumenttypen, Gap-Banner, Redirect-Logic
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 35s
CI / test-python-backend-compliance (push) Successful in 32s
CI / test-python-document-crawler (push) Successful in 24s
CI / test-python-dsms-gateway (push) Successful in 23s
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 35s
CI / test-python-backend-compliance (push) Successful in 32s
CI / test-python-document-crawler (push) Successful in 24s
CI / test-python-dsms-gateway (push) Successful in 23s
- DOCUMENT_SDK_STEP_MAP: 12 kaputte URLs korrigiert (z.B. /sdk/loeschkonzept → /sdk/loeschfristen) - Go Backend: iace_ce_assessment zur validTypes-Whitelist hinzugefuegt - SOUL-Datei: von 17 auf ~80 Zeilen erweitert (18 draftbare Typen, Redirects, operative Module) - Intent Classifier: 10 fehlende Dokumenttyp-Patterns + 5 Redirect-Patterns (Impressum/AGB/Widerruf → Document Generator) - State Projector: getExistingDocumentTypes von 6 auf 11 Checks erweitert (risks, escalations, iace, obligations, dsr) - DraftingEngineWidget: Gap-Banner fuer kritische Luecken mit Analysieren-Button - Cross-Validation: 4 neue deterministische Regeln (DSFA-NO-VVT, DSFA-NO-TOM, DSI-NO-LF, AV-NO-VVT) - Prose Blocks: 5 neue Dokumenttypen (av_vertrag, betroffenenrechte, risikoanalyse, notfallplan, iace_ce_assessment) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -204,6 +204,27 @@ const DOCUMENT_PROSE_BLOCKS: Record<string, Array<{ blockId: string; blockType:
|
||||
{ blockId: 'lf-intro', blockType: 'introduction', sectionName: 'Einleitung Loeschfristen', targetWords: 100 },
|
||||
{ blockId: 'lf-conclusion', blockType: 'conclusion', sectionName: 'Fazit Loeschfristen', targetWords: 60 },
|
||||
],
|
||||
av_vertrag: [
|
||||
{ blockId: 'av-intro', blockType: 'introduction', sectionName: 'Einleitung Auftragsverarbeitung', targetWords: 130 },
|
||||
{ blockId: 'av-conclusion', blockType: 'conclusion', sectionName: 'Fazit Auftragsverarbeitung', targetWords: 80 },
|
||||
],
|
||||
betroffenenrechte: [
|
||||
{ blockId: 'betr-intro', blockType: 'introduction', sectionName: 'Einleitung Betroffenenrechte', targetWords: 120 },
|
||||
{ blockId: 'betr-conclusion', blockType: 'conclusion', sectionName: 'Fazit Betroffenenrechte', targetWords: 80 },
|
||||
],
|
||||
risikoanalyse: [
|
||||
{ blockId: 'risk-intro', blockType: 'introduction', sectionName: 'Einleitung Risikoanalyse', targetWords: 130 },
|
||||
{ blockId: 'risk-conclusion', blockType: 'conclusion', sectionName: 'Fazit Risikoanalyse', targetWords: 80 },
|
||||
],
|
||||
notfallplan: [
|
||||
{ blockId: 'notfall-intro', blockType: 'introduction', sectionName: 'Einleitung Notfallplan', targetWords: 120 },
|
||||
{ blockId: 'notfall-conclusion', blockType: 'conclusion', sectionName: 'Fazit Notfallplan', targetWords: 80 },
|
||||
],
|
||||
iace_ce_assessment: [
|
||||
{ blockId: 'iace-intro', blockType: 'introduction', sectionName: 'Einleitung IACE CE-Bewertung', targetWords: 150 },
|
||||
{ blockId: 'iace-appreciation', blockType: 'appreciation', sectionName: 'Wuerdigung bestehender Konformitaetsbewertung', targetWords: 60 },
|
||||
{ blockId: 'iace-conclusion', blockType: 'conclusion', sectionName: 'Fazit IACE CE-Bewertung', targetWords: 100 },
|
||||
],
|
||||
}
|
||||
|
||||
function buildV2SystemPrompt(
|
||||
|
||||
@@ -84,6 +84,66 @@ function deterministicCheck(
|
||||
})
|
||||
}
|
||||
|
||||
// Check 5: DSFA ohne VVT-Grundlage
|
||||
if (documentType === 'dsfa' && validationContext.crossReferences.vvtCategories.length === 0) {
|
||||
findings.push({
|
||||
id: 'DET-DSFA-NO-VVT',
|
||||
severity: 'error',
|
||||
category: 'cross_reference',
|
||||
title: 'DSFA ohne VVT-Grundlage',
|
||||
description: 'Eine DSFA setzt ein Verarbeitungsverzeichnis voraus. Ohne VVT fehlt die Uebersicht ueber die betroffenen Verarbeitungstaetigkeiten.',
|
||||
documentType: 'dsfa',
|
||||
crossReferenceType: 'vvt',
|
||||
legalReference: 'Art. 35 i.V.m. Art. 30 DSGVO',
|
||||
suggestion: 'Zuerst ein VVT erstellen, dann die DSFA darauf aufbauen.',
|
||||
})
|
||||
}
|
||||
|
||||
// Check 6: DSFA ohne TOM-Massnahmen
|
||||
if (documentType === 'dsfa' && validationContext.crossReferences.tomControls.length === 0) {
|
||||
findings.push({
|
||||
id: 'DET-DSFA-NO-TOM',
|
||||
severity: 'error',
|
||||
category: 'cross_reference',
|
||||
title: 'DSFA ohne TOM-Massnahmen',
|
||||
description: 'Eine DSFA muss Abhilfemassnahmen enthalten. Ohne TOM-Katalog koennen keine Schutzmassnahmen referenziert werden.',
|
||||
documentType: 'dsfa',
|
||||
crossReferenceType: 'tom',
|
||||
legalReference: 'Art. 35 Abs. 7d DSGVO',
|
||||
suggestion: 'TOM-Massnahmen definieren, bevor die DSFA erstellt wird.',
|
||||
})
|
||||
}
|
||||
|
||||
// Check 7: Datenschutzerklaerung ohne Loeschfristen
|
||||
if (documentType === 'dsi' && validationContext.crossReferences.retentionCategories.length === 0) {
|
||||
findings.push({
|
||||
id: 'DET-DSI-NO-LF',
|
||||
severity: 'warning',
|
||||
category: 'cross_reference',
|
||||
title: 'Datenschutzerklaerung ohne Loeschfristen',
|
||||
description: 'Die Datenschutzerklaerung muss Angaben zur Speicherdauer enthalten. Ohne definierte Loeschfristen fehlt diese Information.',
|
||||
documentType: 'dsi',
|
||||
crossReferenceType: 'lf',
|
||||
legalReference: 'Art. 13 Abs. 2a DSGVO',
|
||||
suggestion: 'Loeschfristen definieren und in der Datenschutzerklaerung referenzieren.',
|
||||
})
|
||||
}
|
||||
|
||||
// Check 8: AVV ohne VVT-Kontext
|
||||
if (documentType === 'av_vertrag' && validationContext.crossReferences.vvtCategories.length === 0) {
|
||||
findings.push({
|
||||
id: 'DET-AV-NO-VVT',
|
||||
severity: 'warning',
|
||||
category: 'cross_reference',
|
||||
title: 'AVV ohne VVT-Kontext',
|
||||
description: 'Ein Auftragsverarbeitungsvertrag sollte auf den im VVT dokumentierten Verarbeitungstaetigkeiten basieren.',
|
||||
documentType: 'av_vertrag',
|
||||
crossReferenceType: 'vvt',
|
||||
legalReference: 'Art. 28 Abs. 3 i.V.m. Art. 30 DSGVO',
|
||||
suggestion: 'VVT erstellen, um die betroffenen Verarbeitungstaetigkeiten fuer den AVV zu identifizieren.',
|
||||
})
|
||||
}
|
||||
|
||||
return findings
|
||||
}
|
||||
|
||||
|
||||
@@ -231,6 +231,32 @@ export function DraftingEngineWidget({
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Gap Banner */}
|
||||
{(() => {
|
||||
const gaps = state.complianceScope?.decision?.gaps?.filter(
|
||||
(g: { severity: string }) => g.severity === 'HIGH' || g.severity === 'CRITICAL'
|
||||
) ?? []
|
||||
if (gaps.length > 0) {
|
||||
return (
|
||||
<div className="mx-3 mt-2 px-3 py-2 bg-amber-50 border border-amber-200 rounded-lg flex items-center justify-between">
|
||||
<div className="flex items-center gap-2 text-xs text-amber-800">
|
||||
<svg className="w-4 h-4 text-amber-500 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" />
|
||||
</svg>
|
||||
<span className="font-medium">{gaps.length} kritische Luecke{gaps.length !== 1 ? 'n' : ''} erkannt</span>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => handleSendMessage('Was fehlt noch in meinem Compliance-Profil?')}
|
||||
className="text-xs font-medium text-amber-700 hover:text-amber-900 px-2 py-0.5 rounded hover:bg-amber-100 transition-colors"
|
||||
>
|
||||
Analysieren
|
||||
</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
return null
|
||||
})()}
|
||||
|
||||
{/* Error Banner */}
|
||||
{engine.error && (
|
||||
<div className="mx-3 mt-2 px-3 py-2 bg-red-50 border border-red-200 rounded-lg text-xs text-red-700 flex items-center justify-between">
|
||||
|
||||
@@ -1307,21 +1307,21 @@ export const DOCUMENT_SCOPE_MATRIX: Record<ScopeDocumentType, DocumentScopeRequi
|
||||
*/
|
||||
export const DOCUMENT_SDK_STEP_MAP: Partial<Record<ScopeDocumentType, string>> = {
|
||||
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',
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
|
||||
@@ -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"})
|
||||
|
||||
Reference in New Issue
Block a user