package llm import ( "context" "fmt" "strings" ) // SearchResult matches the RAG service result structure type SearchResult struct { ID string `json:"id"` Content string `json:"content"` Source string `json:"source"` Score float64 `json:"score"` Metadata map[string]string `json:"metadata,omitempty"` } // Service provides LLM functionality for document generation type Service struct { apiKey string model string } // NewService creates a new LLM service func NewService(apiKey string) *Service { model := "claude-3-5-sonnet-20241022" if apiKey == "" { model = "mock" } return &Service{ apiKey: apiKey, model: model, } } // GetModel returns the current model name func (s *Service) GetModel() string { return s.model } // GenerateDSFA generates a Data Protection Impact Assessment func (s *Service) GenerateDSFA(ctx context.Context, context map[string]interface{}, ragSources []SearchResult) (string, int, error) { if s.apiKey == "" { return "", 0, fmt.Errorf("LLM not configured") } // Build prompt with context and RAG sources prompt := s.buildDSFAPrompt(context, ragSources) // In production, this would call the Anthropic API // response, err := s.callAnthropicAPI(ctx, prompt) // if err != nil { // return "", 0, err // } // For now, simulate a response content := s.generateDSFAContent(context, ragSources) tokensUsed := len(strings.Split(content, " ")) * 2 // Rough estimate return content, tokensUsed, nil } // GenerateTOM generates Technical and Organizational Measures func (s *Service) GenerateTOM(ctx context.Context, context map[string]interface{}, ragSources []SearchResult) (string, int, error) { if s.apiKey == "" { return "", 0, fmt.Errorf("LLM not configured") } content := s.generateTOMContent(context, ragSources) tokensUsed := len(strings.Split(content, " ")) * 2 return content, tokensUsed, nil } // GenerateVVT generates a Processing Activity Register func (s *Service) GenerateVVT(ctx context.Context, context map[string]interface{}, ragSources []SearchResult) (string, int, error) { if s.apiKey == "" { return "", 0, fmt.Errorf("LLM not configured") } content := s.generateVVTContent(context, ragSources) tokensUsed := len(strings.Split(content, " ")) * 2 return content, tokensUsed, nil } // GenerateGutachten generates an expert opinion/assessment func (s *Service) GenerateGutachten(ctx context.Context, context map[string]interface{}, ragSources []SearchResult) (string, int, error) { if s.apiKey == "" { return "", 0, fmt.Errorf("LLM not configured") } content := s.generateGutachtenContent(context, ragSources) tokensUsed := len(strings.Split(content, " ")) * 2 return content, tokensUsed, nil } // buildDSFAPrompt builds the prompt for DSFA generation func (s *Service) buildDSFAPrompt(context map[string]interface{}, ragSources []SearchResult) string { var sb strings.Builder sb.WriteString("Du bist ein Datenschutz-Experte und erstellst eine Datenschutz-Folgenabschätzung (DSFA) gemäß Art. 35 DSGVO.\n\n") // Add context if useCaseName, ok := context["useCaseName"].(string); ok { sb.WriteString(fmt.Sprintf("Use Case: %s\n", useCaseName)) } if description, ok := context["description"].(string); ok { sb.WriteString(fmt.Sprintf("Beschreibung: %s\n", description)) } // Add RAG context if len(ragSources) > 0 { sb.WriteString("\nRelevante rechtliche Grundlagen:\n") for _, source := range ragSources { sb.WriteString(fmt.Sprintf("- %s (%s)\n", source.Content[:min(200, len(source.Content))], source.Source)) } } sb.WriteString("\nErstelle eine vollständige DSFA mit allen erforderlichen Abschnitten.") return sb.String() } // Content generation functions (would be replaced by actual LLM calls in production) func (s *Service) generateDSFAContent(context map[string]interface{}, ragSources []SearchResult) string { useCaseName := "KI-gestützte Datenverarbeitung" if name, ok := context["useCaseName"].(string); ok { useCaseName = name } return fmt.Sprintf(`# Datenschutz-Folgenabschätzung (DSFA) ## Use Case: %s ## 1. Systematische Beschreibung der Verarbeitungsvorgänge Die geplante Verarbeitung umfasst die Analyse von Daten mittels KI-gestützter Systeme. ### 1.1 Verarbeitungszwecke - Automatisierte Analyse und Verarbeitung - Optimierung von Geschäftsprozessen - Qualitätssicherung ### 1.2 Rechtsgrundlage Gemäß Art. 6 Abs. 1 lit. f DSGVO basiert die Verarbeitung auf dem berechtigten Interesse des Verantwortlichen. ### 1.3 Kategorien verarbeiteter Daten - Nutzungsdaten - Metadaten - Aggregierte Analysedaten ## 2. Bewertung der Notwendigkeit und Verhältnismäßigkeit ### 2.1 Notwendigkeit Die Verarbeitung ist erforderlich, um die definierten Geschäftsziele zu erreichen. ### 2.2 Verhältnismäßigkeit Alternative Methoden wurden geprüft. Die gewählte Verarbeitungsmethode stellt den geringsten Eingriff bei gleichem Nutzen dar. ## 3. Risikobewertung ### 3.1 Identifizierte Risiken | Risiko | Wahrscheinlichkeit | Schwere | Gesamtbewertung | |--------|-------------------|---------|-----------------| | Unbefugter Zugriff | Mittel | Hoch | HOCH | | Datenverlust | Niedrig | Hoch | MITTEL | | Fehlinterpretation | Mittel | Mittel | MITTEL | ### 3.2 Maßnahmen zur Risikominderung 1. **Technische Maßnahmen** - Verschlüsselung (AES-256) - Zugriffskontrollen - Audit-Logging 2. **Organisatorische Maßnahmen** - Schulungen - Dokumentation - Regelmäßige Überprüfungen ## 4. Genehmigungsstatus | Rolle | Status | Datum | |-------|--------|-------| | Projektleiter | AUSSTEHEND | - | | DSB | AUSSTEHEND | - | | Geschäftsführung | AUSSTEHEND | - | --- *Generiert mit KI-Unterstützung. Manuelle Überprüfung erforderlich.* `, useCaseName) } func (s *Service) generateTOMContent(context map[string]interface{}, ragSources []SearchResult) string { return `# Technische und Organisatorische Maßnahmen (TOMs) ## 1. Vertraulichkeit (Art. 32 Abs. 1 lit. b DSGVO) ### 1.1 Zutrittskontrolle - [ ] Alarmanlage installiert - [ ] Chipkarten-System aktiv - [ ] Besucherprotokoll geführt ### 1.2 Zugangskontrolle - [ ] Starke Passwort-Policy (12+ Zeichen) - [ ] MFA aktiviert - [ ] Automatische Bildschirmsperre ### 1.3 Zugriffskontrolle - [ ] Rollenbasierte Berechtigungen - [ ] Need-to-know Prinzip - [ ] Quartalsweise Berechtigungsüberprüfung ## 2. Integrität (Art. 32 Abs. 1 lit. b DSGVO) ### 2.1 Weitergabekontrolle - [ ] TLS 1.3 für alle Übertragungen - [ ] E-Mail-Verschlüsselung - [ ] Sichere File-Transfer-Protokolle ### 2.2 Eingabekontrolle - [ ] Vollständiges Audit-Logging - [ ] Benutzeridentifikation bei Änderungen - [ ] Unveränderliche Protokolle ## 3. Verfügbarkeit (Art. 32 Abs. 1 lit. c DSGVO) ### 3.1 Verfügbarkeitskontrolle - [ ] Tägliche Backups - [ ] Georedundante Speicherung - [ ] USV-System - [ ] Dokumentierter Notfallplan ### 3.2 Wiederherstellung - [ ] RPO: 1 Stunde - [ ] RTO: 4 Stunden - [ ] Jährliche Wiederherstellungstests ## 4. Belastbarkeit - [ ] DDoS-Schutz implementiert - [ ] Lastverteilung aktiv - [ ] Skalierbare Infrastruktur --- *Generiert mit KI-Unterstützung. Manuelle Überprüfung erforderlich.* ` } func (s *Service) generateVVTContent(context map[string]interface{}, ragSources []SearchResult) string { return `# Verzeichnis der Verarbeitungstätigkeiten (Art. 30 DSGVO) ## Verarbeitungstätigkeit Nr. 1 ### Stammdaten | Feld | Wert | |------|------| | **Bezeichnung** | KI-gestützte Datenanalyse | | **Verantwortlicher** | [Unternehmen] | | **DSB** | [Name, Kontakt] | | **Abteilung** | IT / Data Science | ### Verarbeitungsdetails | Feld | Wert | |------|------| | **Zweck** | Optimierung von Geschäftsprozessen durch KI-Analyse | | **Rechtsgrundlage** | Art. 6 Abs. 1 lit. f DSGVO | | **Betroffene Kategorien** | Kunden, Mitarbeiter, Geschäftspartner | | **Datenkategorien** | Nutzungsdaten, Metadaten, Analyseergebnisse | ### Empfänger | Kategorie | Beispiele | |-----------|-----------| | Intern | IT-Abteilung, Management | | Auftragsverarbeiter | Cloud-Provider (mit AVV) | | Dritte | Keine | ### Drittlandtransfer | Frage | Antwort | |-------|---------| | Übermittlung in Drittländer? | Nein / Ja | | Falls ja, Garantien | [Standardvertragsklauseln / Angemessenheitsbeschluss] | ### Löschfristen | Datenkategorie | Frist | Grundlage | |----------------|-------|-----------| | Nutzungsdaten | 12 Monate | Betriebliche Notwendigkeit | | Analyseergebnisse | 36 Monate | Geschäftszweck | | Audit-Logs | 10 Jahre | Handelsrechtlich | ### Technisch-Organisatorische Maßnahmen Verweis auf TOM-Dokument Version 1.0 --- *Generiert mit KI-Unterstützung. Manuelle Überprüfung erforderlich.* ` } func (s *Service) generateGutachtenContent(context map[string]interface{}, ragSources []SearchResult) string { return `# Compliance-Gutachten ## Management Summary Das geprüfte System erfüllt die wesentlichen Anforderungen der anwendbaren Regulierungen. Es bestehen Optimierungspotenziale, die priorisiert adressiert werden sollten. ## 1. Prüfungsumfang ### 1.1 Geprüfte Regulierungen - DSGVO (EU 2016/679) - AI Act (EU 2024/...) - NIS2 (EU 2022/2555) ### 1.2 Prüfungsmethodik - Dokumentenprüfung - Technische Analyse - Interviews mit Stakeholdern ## 2. Ergebnisse ### 2.1 DSGVO-Konformität | Bereich | Bewertung | Handlungsbedarf | |---------|-----------|-----------------| | Rechtmäßigkeit | ✓ Erfüllt | Gering | | Transparenz | ◐ Teilweise | Mittel | | Datensicherheit | ✓ Erfüllt | Gering | | Betroffenenrechte | ◐ Teilweise | Mittel | ### 2.2 AI Act-Konformität | Bereich | Bewertung | Handlungsbedarf | |---------|-----------|-----------------| | Risikoklassifizierung | ✓ Erfüllt | Keiner | | Dokumentation | ◐ Teilweise | Mittel | | Human Oversight | ✓ Erfüllt | Gering | ### 2.3 NIS2-Konformität | Bereich | Bewertung | Handlungsbedarf | |---------|-----------|-----------------| | Risikomanagement | ✓ Erfüllt | Gering | | Incident Reporting | ◐ Teilweise | Hoch | | Supply Chain | ○ Nicht erfüllt | Kritisch | ## 3. Empfehlungen ### Kritisch (sofort) 1. Supply-Chain-Risikomanagement implementieren 2. Incident-Reporting-Prozess etablieren ### Hoch (< 3 Monate) 3. Transparenzdokumentation vervollständigen 4. Betroffenenrechte-Portal optimieren ### Mittel (< 6 Monate) 5. AI Act Dokumentation erweitern 6. Schulungsmaßnahmen durchführen ## 4. Fazit Das System zeigt einen guten Compliance-Stand mit klar definierten Verbesserungsbereichen. Bei Umsetzung der Empfehlungen ist eine vollständige Konformität erreichbar. --- *Erstellt: [Datum]* *Gutachter: [Name]* *Version: 1.0* ` } func min(a, b int) int { if a < b { return a } return b }