/** * VVT Baseline-Katalog * * Vordefinierte Verarbeitungstaetigkeiten als Templates. * Werden vom Profiling-Fragebogen (Generator) genutzt, um * auf Basis der Antworten VVT-Eintraege vorzubefuellen. */ import type { VVTActivity, BusinessFunction } from './vvt-types' export interface BaselineTemplate { templateId: string businessFunction: BusinessFunction name: string description: string purposes: string[] legalBases: { type: string; description?: string; reference?: string }[] dataSubjectCategories: string[] personalDataCategories: string[] recipientCategories: { type: string; name: string; description?: string }[] retentionPeriod: { duration?: number; durationUnit?: string; description: string; legalBasis?: string; deletionProcedure?: string } tomDescription: string structuredToms: { accessControl: string[] confidentiality: string[] integrity: string[] availability: string[] separation: string[] } typicalSystems: string[] protectionLevel: 'LOW' | 'MEDIUM' | 'HIGH' dpiaRequired: boolean tags: string[] } // ============================================================================= // BASELINE TEMPLATES // ============================================================================= export const VVT_BASELINE_CATALOG: BaselineTemplate[] = [ // ==================== HR ==================== { templateId: 'hr-mitarbeiterverwaltung', businessFunction: 'hr', name: 'Mitarbeiterverwaltung', description: 'Verwaltung von Stammdaten, Vertraegen und Personalakten der Beschaeftigten', purposes: ['Durchfuehrung des Beschaeftigungsverhaeltnisses', 'Personalverwaltung und -planung'], legalBases: [ { type: 'CONTRACT', description: 'Arbeitsvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, { type: 'LEGAL_OBLIGATION', description: 'Arbeitsrechtliche Pflichten', reference: '§ 26 BDSG' }, ], dataSubjectCategories: ['EMPLOYEES'], personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'DOB', 'SOCIAL_SECURITY', 'TAX_ID', 'BANK_ACCOUNT', 'EMPLOYMENT_DATA'], recipientCategories: [ { type: 'INTERNAL', name: 'Personalabteilung' }, { type: 'AUTHORITY', name: 'Finanzamt' }, { type: 'AUTHORITY', name: 'Sozialversicherungstraeger' }, ], retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre nach Ende des Beschaeftigungsverhaeltnisses', legalBasis: 'HGB § 257, AO § 147', deletionProcedure: 'Sichere Loeschung nach Ablauf' }, tomDescription: 'Zugriffskontrolle auf Personalakten, Verschluesselung, Protokollierung', structuredToms: { accessControl: ['RBAC', 'Need-to-know-Prinzip', 'Personalakten nur fuer HR'], confidentiality: ['Verschluesselung personenbezogener Daten', 'Vertraulichkeitsvereinbarungen'], integrity: ['Aenderungsprotokollierung', 'Vier-Augen-Prinzip bei Gehaltsaenderungen'], availability: ['Regelmaessige Backups', 'Redundante Speicherung'], separation: ['Trennung Personal-/Gehaltsdaten'], }, typicalSystems: ['HR-Software', 'Gehaltsabrechnung', 'Dokumentenmanagement'], protectionLevel: 'HIGH', dpiaRequired: false, tags: ['hr', 'mitarbeiter', 'personal'], }, { templateId: 'hr-gehaltsabrechnung', businessFunction: 'hr', name: 'Gehaltsabrechnung', description: 'Berechnung und Auszahlung von Gehaeltern, Sozialabgaben und Steuern', purposes: ['Lohn- und Gehaltsabrechnung', 'Erfuellung steuer- und sozialversicherungsrechtlicher Pflichten'], legalBases: [ { type: 'CONTRACT', description: 'Arbeitsvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, { type: 'LEGAL_OBLIGATION', description: 'Steuer-/Sozialversicherungsrecht', reference: 'Art. 6 Abs. 1 lit. c DSGVO' }, ], dataSubjectCategories: ['EMPLOYEES'], personalDataCategories: ['NAME', 'ADDRESS', 'SOCIAL_SECURITY', 'TAX_ID', 'BANK_ACCOUNT', 'SALARY_DATA'], recipientCategories: [ { type: 'PROCESSOR', name: 'Lohnbuero / Steuerberater' }, { type: 'AUTHORITY', name: 'Finanzamt' }, { type: 'AUTHORITY', name: 'Krankenkassen' }, ], retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre (steuerrechtlich)', legalBasis: 'AO § 147 Abs. 1 Nr. 1', deletionProcedure: 'Automatische Loeschung nach Fristablauf' }, tomDescription: 'Strenge Zugriffskontrolle, Verschluesselung, Trennung von Stamm- und Gehaltsdaten', structuredToms: { accessControl: ['Nur Lohnbuchhaltung/Steuerberater', 'MFA'], confidentiality: ['Verschluesselung at-rest und in-transit', 'Vertraulichkeitsklausel'], integrity: ['Revisionssichere Ablage', 'Pruefprotokoll'], availability: ['Monatliche Backups', 'Jahresabschluss-Archiv'], separation: ['Gehaltsdaten getrennt von allgemeinen Personaldaten'], }, typicalSystems: ['DATEV', 'Lohnabrechnungssoftware'], protectionLevel: 'HIGH', dpiaRequired: false, tags: ['hr', 'gehalt', 'lohn', 'steuer'], }, { templateId: 'hr-bewerbermanagement', businessFunction: 'hr', name: 'Bewerbermanagement', description: 'Entgegennahme, Verwaltung und Bewertung von Bewerbungen', purposes: ['Bearbeitung eingehender Bewerbungen', 'Bewerberauswahl'], legalBases: [ { type: 'CONTRACT', description: 'Vorvertragliche Massnahmen', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, { type: 'LEGITIMATE_INTEREST', description: 'Bewerberauswahl', reference: '§ 26 Abs. 1 BDSG' }, ], dataSubjectCategories: ['APPLICANTS'], personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'EDUCATION_DATA', 'EMPLOYMENT_DATA', 'PHOTO_VIDEO'], recipientCategories: [ { type: 'INTERNAL', name: 'Personalabteilung' }, { type: 'INTERNAL', name: 'Fachabteilung' }, ], retentionPeriod: { duration: 6, durationUnit: 'MONTHS', description: '6 Monate nach Absage (AGG-Frist)', legalBasis: 'AGG § 15 Abs. 4', deletionProcedure: 'Automatische Loeschung 6 Monate nach Absage' }, tomDescription: 'Zugriffsbeschraenkung auf beteiligte Entscheidungstraeger, verschluesselte Uebertragung', structuredToms: { accessControl: ['Nur HR + Fachabteilung', 'Zeitlich begrenzter Zugriff'], confidentiality: ['TLS fuer Bewerbungsportale', 'Verschluesselter E-Mail-Empfang'], integrity: ['Unveraenderbare Bewerbungseingaenge'], availability: ['Regelmaessige Backups'], separation: ['Getrennte Bewerberdatenbank'], }, typicalSystems: ['Bewerbermanagementsystem', 'E-Mail'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['hr', 'bewerbung', 'recruiting'], }, { templateId: 'hr-zeiterfassung', businessFunction: 'hr', name: 'Zeiterfassung', description: 'Erfassung von Arbeitszeiten, Urlaub und Fehlzeiten', purposes: ['Arbeitszeiterfassung gemaess ArbZG', 'Urlaubsverwaltung'], legalBases: [ { type: 'LEGAL_OBLIGATION', description: 'Arbeitszeitgesetz', reference: 'Art. 6 Abs. 1 lit. c DSGVO, ArbZG § 16 Abs. 2' }, ], dataSubjectCategories: ['EMPLOYEES'], personalDataCategories: ['NAME', 'EMPLOYMENT_DATA'], recipientCategories: [ { type: 'INTERNAL', name: 'Personalabteilung' }, { type: 'INTERNAL', name: 'Vorgesetzte' }, ], retentionPeriod: { duration: 2, durationUnit: 'YEARS', description: '2 Jahre (ArbZG)', legalBasis: 'ArbZG § 16 Abs. 2', deletionProcedure: 'Automatische Loeschung' }, tomDescription: 'Zugriffskontrolle nach Abteilung, Protokollierung von Aenderungen', structuredToms: { accessControl: ['Vorgesetzte sehen nur eigene Abteilung', 'HR sieht alle'], confidentiality: ['Krankmeldungen nur HR'], integrity: ['Aenderungshistorie'], availability: ['Taegliches Backup'], separation: ['Trennung Zeitdaten / Gehaltsdaten'], }, typicalSystems: ['Zeiterfassungssystem', 'HR-Software'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['hr', 'zeiterfassung', 'arbeitszeit'], }, // ==================== FINANCE ==================== { templateId: 'finance-buchhaltung', businessFunction: 'finance', name: 'Buchhaltung & Rechnungswesen', description: 'Finanzbuchhaltung, Rechnungsstellung und Zahlungsverkehr', purposes: ['Finanzbuchhaltung', 'Rechnungsstellung', 'Erfuellung handels-/steuerrechtlicher Aufbewahrungspflichten'], legalBases: [ { type: 'LEGAL_OBLIGATION', description: 'HGB, AO', reference: 'Art. 6 Abs. 1 lit. c DSGVO' }, { type: 'CONTRACT', description: 'Vertragserfuellung', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, ], dataSubjectCategories: ['CUSTOMERS', 'SUPPLIERS', 'BUSINESS_PARTNERS'], personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'BANK_ACCOUNT', 'PAYMENT_DATA', 'CONTRACT_DATA', 'TAX_ID'], recipientCategories: [ { type: 'PROCESSOR', name: 'Steuerberater / Wirtschaftspruefer' }, { type: 'AUTHORITY', name: 'Finanzamt' }, ], retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre (HGB) / 6 Jahre (Geschaeftsbriefe)', legalBasis: 'HGB § 257, AO § 147', deletionProcedure: 'Loeschung nach Ablauf der jeweiligen Frist' }, tomDescription: 'Zugriffskontrolle nach Vier-Augen-Prinzip, revisionssichere Archivierung', structuredToms: { accessControl: ['Vier-Augen-Prinzip', 'RBAC nach Buchhaltungsrollen'], confidentiality: ['Verschluesselung Finanzdaten'], integrity: ['Revisionssichere Archivierung (GoBD)', 'Aenderungsprotokoll'], availability: ['Redundante Speicherung', 'Jaehrliche Backups'], separation: ['Trennung Debitoren/Kreditoren'], }, typicalSystems: ['DATEV', 'ERP-System', 'Buchhaltungssoftware'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['finance', 'buchhaltung', 'rechnungswesen'], }, { templateId: 'finance-zahlungsverkehr', businessFunction: 'finance', name: 'Zahlungsverkehr', description: 'Abwicklung von Zahlungen, SEPA-Lastschriften und Ueberweisungen', purposes: ['Zahlungsabwicklung', 'Mahnwesen'], legalBases: [ { type: 'CONTRACT', description: 'Vertragserfuellung', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, ], dataSubjectCategories: ['CUSTOMERS', 'SUPPLIERS'], personalDataCategories: ['NAME', 'BANK_ACCOUNT', 'PAYMENT_DATA'], recipientCategories: [ { type: 'PROCESSOR', name: 'Zahlungsdienstleister' }, { type: 'PROCESSOR', name: 'Kreditinstitut' }, ], retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre', legalBasis: 'HGB § 257', deletionProcedure: 'Automatische Loeschung' }, tomDescription: 'PCI-DSS-konforme Verarbeitung, Verschluesselung, Zugriffsbeschraenkung', structuredToms: { accessControl: ['Streng limitierter Zugriff', 'MFA'], confidentiality: ['TLS 1.3', 'Tokenisierung von Zahlungsdaten'], integrity: ['Transaktionsprotokoll'], availability: ['Hochverfuegbarer Zahlungsservice'], separation: ['Zahlungsdaten getrennt von CRM'], }, typicalSystems: ['Banking-Software', 'Payment Gateway'], protectionLevel: 'HIGH', dpiaRequired: false, tags: ['finance', 'zahlung', 'payment'], }, // ==================== SALES / CRM ==================== { templateId: 'sales-kundenverwaltung', businessFunction: 'sales_crm', name: 'Kundenverwaltung (CRM)', description: 'Verwaltung von Kundenbeziehungen, Kontakten und Vertriebsaktivitaeten', purposes: ['Kundenbetreuung', 'Vertragserfuellung', 'Vertriebssteuerung'], legalBases: [ { type: 'CONTRACT', description: 'Kundenvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, { type: 'LEGITIMATE_INTEREST', description: 'Kundenbindung', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, ], dataSubjectCategories: ['CUSTOMERS', 'PROSPECTIVE_CUSTOMERS', 'BUSINESS_PARTNERS'], personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'CONTRACT_DATA', 'COMMUNICATION_DATA'], recipientCategories: [ { type: 'INTERNAL', name: 'Vertrieb' }, { type: 'INTERNAL', name: 'Kundenservice' }, ], retentionPeriod: { duration: 3, durationUnit: 'YEARS', description: '3 Jahre nach letzter Interaktion (Verjaeherung)', legalBasis: 'BGB § 195', deletionProcedure: 'Loeschung nach Inaktivitaetsfrist' }, tomDescription: 'Zugriffskontrolle nach Kundengruppen, Verschluesselung, regemaessige Datenpflege', structuredToms: { accessControl: ['RBAC nach Vertriebsgebiet', 'Kundendaten-Owner'], confidentiality: ['Verschluesselung in CRM', 'VPN fuer Fernzugriff'], integrity: ['Aenderungshistorie im CRM'], availability: ['Cloud-CRM mit SLA 99.9%'], separation: ['Mandantentrennung'], }, typicalSystems: ['CRM-System', 'E-Mail', 'Telefon'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['sales', 'crm', 'kunden', 'vertrieb'], }, { templateId: 'sales-vertriebssteuerung', businessFunction: 'sales_crm', name: 'Vertriebssteuerung', description: 'Analyse von Vertriebskennzahlen und Pipeline-Management', purposes: ['Vertriebsoptimierung', 'Umsatzplanung'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'Unternehmenssteuerung', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, ], dataSubjectCategories: ['CUSTOMERS', 'PROSPECTIVE_CUSTOMERS'], personalDataCategories: ['NAME', 'CONTRACT_DATA', 'COMMUNICATION_DATA'], recipientCategories: [ { type: 'INTERNAL', name: 'Vertriebsleitung' }, { type: 'INTERNAL', name: 'Geschaeftsfuehrung' }, ], retentionPeriod: { duration: 3, durationUnit: 'YEARS', description: '3 Jahre', legalBasis: 'Berechtigtes Interesse', deletionProcedure: 'Anonymisierung nach Ablauf' }, tomDescription: 'Aggregierte Auswertungen wo moeglich, Zugriffsbeschraenkung auf Fuehrungsebene', structuredToms: { accessControl: ['Nur Management'], confidentiality: ['Aggregierte Reports bevorzugt'], integrity: ['Nachvollziehbare Berechnungen'], availability: ['Dashboard-Verfuegbarkeit'], separation: ['Reporting getrennt von Operativdaten'], }, typicalSystems: ['CRM-System', 'BI-Tool'], protectionLevel: 'LOW', dpiaRequired: false, tags: ['sales', 'vertrieb', 'reporting'], }, // ==================== MARKETING ==================== { templateId: 'marketing-newsletter', businessFunction: 'marketing', name: 'Newsletter-Marketing', description: 'Versand von Marketing-E-Mails und Newslettern an Abonnenten', purposes: ['Direktmarketing', 'Kundenbindung', 'Informationsversand'], legalBases: [ { type: 'CONSENT', description: 'Einwilligung zum Newsletter-Empfang', reference: 'Art. 6 Abs. 1 lit. a DSGVO, § 7 Abs. 2 UWG' }, ], dataSubjectCategories: ['NEWSLETTER_SUBSCRIBERS', 'CUSTOMERS'], personalDataCategories: ['NAME', 'CONTACT', 'USAGE_DATA'], recipientCategories: [ { type: 'PROCESSOR', name: 'E-Mail-Dienstleister' }, { type: 'INTERNAL', name: 'Marketing-Abteilung' }, ], retentionPeriod: { description: 'Bis zum Widerruf der Einwilligung', deletionProcedure: 'Sofortige Loeschung bei Abmeldung' }, tomDescription: 'Double-Opt-In, Abmeldelink in jeder E-Mail, Einwilligungsprotokollierung', structuredToms: { accessControl: ['Nur Marketing-Team'], confidentiality: ['TLS-Versand', 'Keine Weitergabe an Dritte'], integrity: ['Einwilligungsnachweis (Timestamp, IP, Version)'], availability: ['Redundanter E-Mail-Service'], separation: ['Newsletter-Liste getrennt von CRM'], }, typicalSystems: ['Newsletter-Tool', 'E-Mail-Marketing-Plattform'], protectionLevel: 'LOW', dpiaRequired: false, tags: ['marketing', 'newsletter', 'email'], }, { templateId: 'marketing-website-analytics', businessFunction: 'marketing', name: 'Website-Analytics', description: 'Analyse des Nutzerverhaltens auf der Website mittels Tracking-Tools', purposes: ['Website-Optimierung', 'Reichweitenmessung'], legalBases: [ { type: 'CONSENT', description: 'Cookie-Einwilligung', reference: 'Art. 6 Abs. 1 lit. a DSGVO, § 25 TDDDG' }, ], dataSubjectCategories: ['WEBSITE_USERS'], personalDataCategories: ['IP_ADDRESS', 'DEVICE_ID', 'USAGE_DATA', 'LOCATION_DATA'], recipientCategories: [ { type: 'PROCESSOR', name: 'Analytics-Anbieter' }, { type: 'INTERNAL', name: 'Marketing' }, ], retentionPeriod: { duration: 14, durationUnit: 'MONTHS', description: '14 Monate', deletionProcedure: 'Automatische Loeschung/Anonymisierung' }, tomDescription: 'IP-Anonymisierung, Cookie-Consent-Management, Opt-Out-Moeglichkeit', structuredToms: { accessControl: ['Nur Webanalyse-Team'], confidentiality: ['IP-Anonymisierung', 'Pseudonymisierung'], integrity: ['Datenqualitaetspruefung'], availability: ['CDN-basiertes Tracking'], separation: ['Analytics getrennt von personenbezogenen Profilen'], }, typicalSystems: ['Matomo', 'Plausible', 'Google Analytics'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['marketing', 'analytics', 'website', 'tracking'], }, { templateId: 'marketing-social-media', businessFunction: 'marketing', name: 'Social-Media-Marketing', description: 'Betrieb von Social-Media-Kanaelen und Interaktion mit Nutzern', purposes: ['Oeffentlichkeitsarbeit', 'Kundeninteraktion'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'Marketing', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, ], dataSubjectCategories: ['WEBSITE_USERS', 'CUSTOMERS'], personalDataCategories: ['NAME', 'CONTACT', 'USAGE_DATA', 'COMMUNICATION_DATA'], recipientCategories: [ { type: 'CONTROLLER', name: 'Social-Media-Plattform (gemeinsame Verantwortlichkeit)' }, ], retentionPeriod: { description: 'Abhaengig von Plattform-Einstellungen', deletionProcedure: 'Regelmaessige Pruefung und Bereinigung' }, tomDescription: 'Datenschutzeinstellungen der Plattform, gemeinsame Verantwortlichkeit gemaess Art. 26', structuredToms: { accessControl: ['Nur Social-Media-Manager', 'Passwort-Manager'], confidentiality: ['Plattform-Datenschutzeinstellungen'], integrity: ['Redaktionsplan'], availability: ['Multi-Kanal-Management'], separation: ['Geschaeftlich/Privat getrennt'], }, typicalSystems: ['Social-Media-Plattformen', 'Social-Media-Management-Tool'], protectionLevel: 'LOW', dpiaRequired: false, tags: ['marketing', 'social-media'], }, // ==================== SUPPORT ==================== { templateId: 'support-ticketsystem', businessFunction: 'support', name: 'Kundenservice / Ticketsystem', description: 'Bearbeitung von Kundenanfragen und Support-Tickets', purposes: ['Kundenservice', 'Reklamationsbearbeitung', 'Vertragserfuellung'], legalBases: [ { type: 'CONTRACT', description: 'Kundenvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, ], dataSubjectCategories: ['CUSTOMERS', 'APP_USERS'], personalDataCategories: ['NAME', 'CONTACT', 'CONTRACT_DATA', 'COMMUNICATION_DATA'], recipientCategories: [ { type: 'INTERNAL', name: 'Support-Team' }, { type: 'PROCESSOR', name: 'Helpdesk-Software-Anbieter' }, ], retentionPeriod: { duration: 3, durationUnit: 'YEARS', description: '3 Jahre nach Ticketschliessung', legalBasis: 'BGB § 195', deletionProcedure: 'Automatische Loeschung geschlossener Tickets' }, tomDescription: 'Zugriffskontrolle nach Ticket-Owner, Verschluesselung, Audit-Trail', structuredToms: { accessControl: ['Ticket-basierte Zugriffskontrolle', 'Agent-Rollen'], confidentiality: ['TLS', 'Verschluesselung'], integrity: ['Ticket-Historie unveraenderbar'], availability: ['Hochverfuegbarer Helpdesk'], separation: ['Mandantentrennung'], }, typicalSystems: ['Helpdesk-Software', 'E-Mail', 'Chat'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['support', 'kundenservice', 'tickets'], }, // ==================== IT OPERATIONS ==================== { templateId: 'it-systemadministration', businessFunction: 'it_operations', name: 'Systemadministration', description: 'Verwaltung von IT-Systemen, Benutzerkonten und Zugriffsrechten', purposes: ['IT-Betrieb', 'Benutzerverwaltung', 'Sicherheitsueberwachung'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'IT-Sicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, { type: 'CONTRACT', description: 'Bereitstellung IT-Dienste', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, ], dataSubjectCategories: ['EMPLOYEES', 'APP_USERS'], personalDataCategories: ['NAME', 'CONTACT', 'LOGIN_DATA', 'IP_ADDRESS', 'DEVICE_ID'], recipientCategories: [ { type: 'INTERNAL', name: 'IT-Abteilung' }, { type: 'PROCESSOR', name: 'IT-Dienstleister' }, ], retentionPeriod: { duration: 1, durationUnit: 'YEARS', description: '1 Jahr nach Kontodeaktivierung', deletionProcedure: 'Automatische Loeschung deaktivierter Konten' }, tomDescription: 'PAM, MFA, Protokollierung, regelmaessige Rechtereviews', structuredToms: { accessControl: ['PAM (Privileged Access Management)', 'MFA', 'Regelmaessige Rechtereviews'], confidentiality: ['Verschluesselung', 'Passwort-Policies'], integrity: ['Change Management', 'Konfigurationsmanagement'], availability: ['Redundanz', 'Monitoring', 'Alerting'], separation: ['Prod/Dev/Staging getrennt', 'Admin-Netze isoliert'], }, typicalSystems: ['Active Directory / IAM', 'Monitoring', 'ITSM'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['it', 'admin', 'benutzerverwaltung'], }, { templateId: 'it-backup', businessFunction: 'it_operations', name: 'Backup & Recovery', description: 'Sicherung und Wiederherstellung von Daten und Systemen', purposes: ['Datensicherung', 'Disaster Recovery', 'Geschaeftskontinuitaet'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'Datensicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO, Art. 32 DSGVO' }, ], dataSubjectCategories: ['EMPLOYEES', 'CUSTOMERS'], personalDataCategories: ['NAME', 'CONTACT', 'CONTRACT_DATA'], recipientCategories: [ { type: 'PROCESSOR', name: 'Backup-Dienstleister' }, { type: 'INTERNAL', name: 'IT-Abteilung' }, ], retentionPeriod: { duration: 90, durationUnit: 'DAYS', description: '90 Tage Aufbewahrung der Backups', deletionProcedure: 'Automatische Rotation und Loeschung' }, tomDescription: 'Verschluesselung, Zugriffskontrolle, regelmaessige Wiederherstellungstests', structuredToms: { accessControl: ['Nur Backup-Admins', 'Separater Encryption Key'], confidentiality: ['AES-256-Verschluesselung', 'Verschluesselter Transport'], integrity: ['Checksummen-Pruefung', 'Regelmaessige Restore-Tests'], availability: ['3-2-1-Backup-Regel', 'Georedundanz'], separation: ['Backup-Netzwerk isoliert'], }, typicalSystems: ['Backup-Software', 'Cloud-Storage'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['it', 'backup', 'recovery'], }, { templateId: 'it-logging', businessFunction: 'it_operations', name: 'Protokollierung & Logging', description: 'Erfassung von System- und Sicherheitslogs zur Fehlerbehebung und Angriffserkennung', purposes: ['IT-Sicherheit', 'Fehlerbehebung', 'Angriffserkennung'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'IT-Sicherheit und Betrieb', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, ], dataSubjectCategories: ['EMPLOYEES', 'APP_USERS', 'WEBSITE_USERS'], personalDataCategories: ['IP_ADDRESS', 'LOGIN_DATA', 'USAGE_DATA', 'DEVICE_ID'], recipientCategories: [ { type: 'INTERNAL', name: 'IT-Sicherheit' }, { type: 'PROCESSOR', name: 'SIEM-Anbieter' }, ], retentionPeriod: { duration: 90, durationUnit: 'DAYS', description: '90 Tage (Standard) / 1 Jahr (Security-Logs)', deletionProcedure: 'Automatische Rotation' }, tomDescription: 'SIEM, Integritaetsschutz der Logs, Zugriffskontrolle, Pseudonymisierung', structuredToms: { accessControl: ['Nur Security-Team', 'Read-Only fuer Auditoren'], confidentiality: ['Pseudonymisierung wo moeglich'], integrity: ['WORM-Storage fuer Security-Logs', 'Hashketten'], availability: ['Redundante Log-Speicherung'], separation: ['Zentrale Log-Infrastruktur getrennt'], }, typicalSystems: ['SIEM', 'ELK Stack', 'Syslog'], protectionLevel: 'MEDIUM', dpiaRequired: false, tags: ['it', 'logging', 'sicherheit'], }, { templateId: 'it-iam', businessFunction: 'it_operations', name: 'Identity & Access Management', description: 'Verwaltung von Identitaeten, Authentifizierung und Autorisierung', purposes: ['Zugriffskontrolle', 'Identitaetsverwaltung', 'Compliance'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'IT-Sicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, { type: 'CONTRACT', description: 'Bereitstellung IT-Dienste', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, ], dataSubjectCategories: ['EMPLOYEES', 'APP_USERS'], personalDataCategories: ['NAME', 'CONTACT', 'LOGIN_DATA'], recipientCategories: [ { type: 'INTERNAL', name: 'IT-Abteilung' }, { type: 'PROCESSOR', name: 'IAM-Anbieter' }, ], retentionPeriod: { duration: 6, durationUnit: 'MONTHS', description: '6 Monate nach Kontodeaktivierung', deletionProcedure: 'Automatische Deprovisionierung' }, tomDescription: 'MFA, SSO, regelmaessige Access Reviews, Least-Privilege-Prinzip', structuredToms: { accessControl: ['MFA', 'SSO', 'Least Privilege', 'Regelmaessige Reviews'], confidentiality: ['Passwort-Hashing (bcrypt)', 'Token-basierte Auth'], integrity: ['Audit-Trail aller Aenderungen'], availability: ['Hochverfuegbarer IdP'], separation: ['Identitaeten pro Mandant'], }, typicalSystems: ['IAM-System', 'SSO Provider', 'MFA'], protectionLevel: 'HIGH', dpiaRequired: false, tags: ['it', 'iam', 'zugriffskontrolle'], }, // ==================== OTHER ==================== { templateId: 'other-videokonferenz', businessFunction: 'other', name: 'Videokonferenzen', description: 'Durchfuehrung von Video-Meetings und Online-Besprechungen', purposes: ['Interne Kommunikation', 'Kundeninteraktion', 'Remote-Arbeit'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'Geschaeftliche Kommunikation', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, { type: 'CONTRACT', description: 'Arbeitsvertrag (bei Mitarbeitern)', reference: 'Art. 6 Abs. 1 lit. b DSGVO' }, ], dataSubjectCategories: ['EMPLOYEES', 'CUSTOMERS', 'BUSINESS_PARTNERS'], personalDataCategories: ['NAME', 'CONTACT', 'PHOTO_VIDEO', 'IP_ADDRESS', 'COMMUNICATION_DATA'], recipientCategories: [ { type: 'PROCESSOR', name: 'Videokonferenz-Anbieter' }, ], retentionPeriod: { description: 'Keine dauerhafte Speicherung von Meetings (sofern nicht aufgezeichnet)', deletionProcedure: 'Aufzeichnungen nach Verwendungszweck loeschen' }, tomDescription: 'Ende-zu-Ende-Verschluesselung, Warteraum, Passwortschutz, Aufnahme nur mit Einwilligung', structuredToms: { accessControl: ['Meeting-Passwort', 'Warteraum', 'Host-Kontrolle'], confidentiality: ['TLS / E2E-Verschluesselung'], integrity: ['Teilnehmerliste'], availability: ['Redundante Infrastruktur'], separation: ['Separate Meeting-Raeume'], }, typicalSystems: ['Jitsi', 'Zoom', 'Teams', 'Google Meet'], protectionLevel: 'LOW', dpiaRequired: false, tags: ['kommunikation', 'video', 'meeting'], }, { templateId: 'other-besuchermanagement', businessFunction: 'other', name: 'Besuchermanagement', description: 'Erfassung und Verwaltung von Besuchern am Firmenstandort', purposes: ['Zutrittskontrolle', 'Sicherheit', 'Nachverfolgung'], legalBases: [ { type: 'LEGITIMATE_INTEREST', description: 'Gebaeudesicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO' }, ], dataSubjectCategories: ['VISITORS'], personalDataCategories: ['NAME', 'CONTACT', 'PHOTO_VIDEO'], recipientCategories: [ { type: 'INTERNAL', name: 'Empfang / Sicherheit' }, ], retentionPeriod: { duration: 30, durationUnit: 'DAYS', description: '30 Tage nach Besuch', deletionProcedure: 'Automatische Loeschung' }, tomDescription: 'Besucherausweise, Begleitpflicht, zeitlich begrenzter Zugang', structuredToms: { accessControl: ['Besucherausweise', 'Begleitpflicht'], confidentiality: ['Besucherliste nicht oeffentlich einsehbar'], integrity: ['Besuchsprotokoll'], availability: ['Papier-Backup fuer Besucherliste'], separation: ['Besucherbereich getrennt'], }, typicalSystems: ['Besuchermanagementsystem', 'Zutrittskontrollsystem'], protectionLevel: 'LOW', dpiaRequired: false, tags: ['besucher', 'zutritt', 'empfang'], }, ] // ============================================================================= // HELPER: Convert template to VVTActivity // ============================================================================= export function templateToActivity(template: BaselineTemplate, vvtId: string): Omit & { id: string } { const now = new Date().toISOString() return { id: crypto.randomUUID(), vvtId, name: template.name, description: template.description, purposes: template.purposes, legalBases: template.legalBases, dataSubjectCategories: template.dataSubjectCategories, personalDataCategories: template.personalDataCategories, recipientCategories: template.recipientCategories, thirdCountryTransfers: [], retentionPeriod: template.retentionPeriod, tomDescription: template.tomDescription, businessFunction: template.businessFunction, systems: template.typicalSystems.map((s, i) => ({ systemId: `sys-${i}`, name: s })), deploymentModel: 'cloud', dataSources: [{ type: 'DATA_SUBJECT', description: 'Direkt von der betroffenen Person' }], dataFlows: [], protectionLevel: template.protectionLevel, dpiaRequired: template.dpiaRequired, structuredToms: template.structuredToms, status: 'DRAFT', responsible: '', owner: '', createdAt: now, updatedAt: now, } } // ============================================================================= // HELPER: Get templates by business function // ============================================================================= export function getTemplatesByFunction(fn: BusinessFunction): BaselineTemplate[] { return VVT_BASELINE_CATALOG.filter(t => t.businessFunction === fn) } export function getTemplateById(templateId: string): BaselineTemplate | undefined { return VVT_BASELINE_CATALOG.find(t => t.templateId === templateId) }