import type { ScopeQuestionBlock, ScopeProfilingQuestion, } from './compliance-scope-types' /** * IDs of questions that are auto-filled from company profile. * These are no longer shown as interactive questions but still contribute to scoring. */ export const PROFILE_AUTOFILL_QUESTION_IDS = [ 'org_employee_count', 'org_annual_revenue', 'org_industry', 'org_business_model', 'org_has_dsb', 'org_cert_target', 'data_volume', 'prod_type', 'prod_webshop', ] as const /** * Block 1: Organisation & Reife */ export const BLOCK_1_ORGANISATION: ScopeQuestionBlock = { id: 'organisation', title: 'Kunden & Nutzer', description: 'Informationen zu Ihren Kunden und Nutzern', order: 1, questions: [ { id: 'org_customer_count', type: 'single', question: 'Wie viele Kunden/Nutzer betreuen Sie?', helpText: 'Schätzen Sie die Anzahl aktiver Kunden oder Nutzer', required: true, options: [ { value: '<100', label: 'Weniger als 100' }, { value: '100-1000', label: '100 bis 1.000' }, { value: '1000-10000', label: '1.000 bis 10.000' }, { value: '10000-100000', label: '10.000 bis 100.000' }, { value: '100000+', label: 'Mehr als 100.000' }, ], scoreWeights: { risk: 6, complexity: 7, assurance: 6 }, }, ], } /** * Block 2: Daten & Betroffene */ export const BLOCK_2_DATA: ScopeQuestionBlock = { id: 'data', title: 'Datenverarbeitung', description: 'Art und Umfang der verarbeiteten personenbezogenen Daten', order: 2, questions: [ { id: 'data_minors', type: 'boolean', question: 'Verarbeiten Sie Daten von Minderjährigen?', helpText: 'Besondere Schutzpflichten für unter 16-Jährige (bzw. 13-Jährige bei Online-Diensten)', required: true, scoreWeights: { risk: 10, complexity: 5, assurance: 7 }, mapsToVVTQuestion: 'data_minors', }, { id: 'data_art9', type: 'multi', question: 'Verarbeiten Sie besondere Kategorien personenbezogener Daten (Art. 9 DSGVO)?', helpText: 'Diese Daten unterliegen erhöhten Schutzanforderungen', required: true, options: [ { value: 'gesundheit', label: 'Gesundheitsdaten' }, { value: 'biometrie', label: 'Biometrische Daten (z.B. Fingerabdruck, Gesichtserkennung)' }, { value: 'genetik', label: 'Genetische Daten' }, { value: 'politisch', label: 'Politische Meinungen' }, { value: 'religion', label: 'Religiöse/weltanschauliche Überzeugungen' }, { value: 'gewerkschaft', label: 'Gewerkschaftszugehörigkeit' }, { value: 'sexualleben', label: 'Sexualleben/sexuelle Orientierung' }, { value: 'strafrechtlich', label: 'Strafrechtliche Verurteilungen/Straftaten' }, { value: 'ethnisch', label: 'Ethnische Herkunft' }, ], scoreWeights: { risk: 10, complexity: 8, assurance: 9 }, mapsToVVTQuestion: 'data_health', }, { id: 'data_hr', type: 'boolean', question: 'Verarbeiten Sie Personaldaten (HR)?', helpText: 'Bewerberdaten, Gehälter, Leistungsbeurteilungen etc.', required: true, scoreWeights: { risk: 6, complexity: 4, assurance: 5 }, mapsToVVTQuestion: 'dept_hr', mapsToLFQuestion: 'data-hr', }, { id: 'data_communication', type: 'boolean', question: 'Verarbeiten Sie Kommunikationsdaten (E-Mail, Chat, Telefonie)?', helpText: 'Inhalte oder Metadaten von Kommunikationsvorgängen', required: true, scoreWeights: { risk: 7, complexity: 5, assurance: 6 }, }, { id: 'data_financial', type: 'boolean', question: 'Verarbeiten Sie Finanzdaten (Konten, Zahlungen)?', helpText: 'Bankdaten, Kreditkartendaten, Buchhaltungsdaten', required: true, scoreWeights: { risk: 8, complexity: 6, assurance: 7 }, mapsToVVTQuestion: 'dept_finance', mapsToLFQuestion: 'data-buchhaltung', }, ], } /** * Block 3: Verarbeitung & Zweck */ export const BLOCK_3_PROCESSING: ScopeQuestionBlock = { id: 'processing', title: 'Verarbeitung & Zweck', description: 'Wie und wofür werden personenbezogene Daten verarbeitet?', order: 3, questions: [ { id: 'proc_tracking', type: 'boolean', question: 'Setzen Sie Tracking oder Profiling ein?', helpText: 'Web-Analytics, Werbe-Tracking, Nutzungsprofile etc.', required: true, scoreWeights: { risk: 7, complexity: 6, assurance: 6 }, }, { id: 'proc_adm_scoring', type: 'boolean', question: 'Treffen Sie automatisierte Entscheidungen (Art. 22 DSGVO)?', helpText: 'Scoring, Bonitätsprüfung, automatische Ablehnung ohne menschliche Beteiligung', required: true, scoreWeights: { risk: 9, complexity: 8, assurance: 8 }, }, { id: 'proc_ai_usage', type: 'multi', question: 'Setzen Sie KI-Systeme ein?', helpText: 'KI-Einsatz kann zusätzliche Anforderungen (EU AI Act) auslösen', required: true, options: [ { value: 'keine', label: 'Keine KI im Einsatz' }, { value: 'chatbot', label: 'Chatbots/Virtuelle Assistenten' }, { value: 'scoring', label: 'Scoring/Risikobewertung' }, { value: 'profiling', label: 'Profiling/Verhaltensvorhersage' }, { value: 'generativ', label: 'Generative KI (Text, Bild, Code)' }, { value: 'autonom', label: 'Autonome Systeme/Entscheidungen' }, ], scoreWeights: { risk: 8, complexity: 9, assurance: 7 }, }, { id: 'proc_data_combination', type: 'boolean', question: 'Führen Sie Daten aus verschiedenen Quellen zusammen?', helpText: 'Data Matching, Anreicherung aus externen Quellen', required: true, scoreWeights: { risk: 7, complexity: 7, assurance: 6 }, }, { id: 'proc_employee_monitoring', type: 'boolean', question: 'Überwachen Sie Mitarbeiter (Zeiterfassung, Standort, IT-Nutzung)?', helpText: 'Beschäftigtendatenschutz nach § 26 BDSG', required: true, scoreWeights: { risk: 8, complexity: 6, assurance: 7 }, }, { id: 'proc_video_surveillance', type: 'boolean', question: 'Setzen Sie Videoüberwachung ein?', helpText: 'Kameras in Büros, Produktionsstätten, Verkaufsräumen etc.', required: true, scoreWeights: { risk: 8, complexity: 5, assurance: 7 }, mapsToVVTQuestion: 'special_video_surveillance', mapsToLFQuestion: 'data-video', }, ], } /** * Block 4: Technik/Hosting/Transfers */ export const BLOCK_4_TECH: ScopeQuestionBlock = { id: 'tech', title: 'Hosting & Verarbeitung', description: 'Technische Infrastruktur und Datenübermittlung', order: 4, questions: [ { id: 'tech_hosting_location', type: 'single', question: 'Wo werden Ihre Daten primär gehostet?', helpText: 'Standort bestimmt anwendbares Datenschutzrecht', required: true, options: [ { value: 'de', label: 'Deutschland' }, { value: 'eu', label: 'EU (ohne Deutschland)' }, { value: 'ewr', label: 'EWR (z.B. Norwegen, Island)' }, { value: 'us_adequacy', label: 'USA (mit Angemessenheitsbeschluss/DPF)' }, { value: 'drittland', label: 'Drittland ohne Angemessenheitsbeschluss' }, ], scoreWeights: { risk: 7, complexity: 6, assurance: 7 }, }, { id: 'tech_subprocessors', type: 'boolean', question: 'Nutzen Sie Auftragsverarbeiter (externe Dienstleister)?', helpText: 'Cloud-Anbieter, Hosting, E-Mail-Service, CRM etc. – erfordert AVV nach Art. 28 DSGVO', required: true, scoreWeights: { risk: 6, complexity: 7, assurance: 7 }, }, { id: 'tech_third_country', type: 'boolean', question: 'Übermitteln Sie Daten in Drittländer?', helpText: 'Transfer außerhalb EU/EWR erfordert Schutzmaßnahmen (SCC, BCR etc.)', required: true, scoreWeights: { risk: 9, complexity: 8, assurance: 8 }, mapsToVVTQuestion: 'transfer_cloud_us', }, { id: 'tech_encryption_rest', type: 'boolean', question: 'Sind Daten im Ruhezustand verschlüsselt (at rest)?', helpText: 'Datenbank-, Dateisystem- oder Volume-Verschlüsselung', required: true, scoreWeights: { risk: -5, complexity: 3, assurance: 7 }, }, { id: 'tech_encryption_transit', type: 'boolean', question: 'Sind Daten bei Übertragung verschlüsselt (in transit)?', helpText: 'TLS/SSL für alle Verbindungen', required: true, scoreWeights: { risk: -5, complexity: 2, assurance: 7 }, }, { id: 'tech_cloud_providers', type: 'multi', question: 'Welche Cloud-Anbieter nutzen Sie?', helpText: 'Mehrfachauswahl möglich', required: false, options: [ { value: 'aws', label: 'Amazon Web Services (AWS)' }, { value: 'azure', label: 'Microsoft Azure' }, { value: 'gcp', label: 'Google Cloud Platform (GCP)' }, { value: 'hetzner', label: 'Hetzner' }, { value: 'ionos', label: 'IONOS' }, { value: 'ovh', label: 'OVH' }, { value: 'andere', label: 'Andere Anbieter' }, { value: 'keine', label: 'Keine Cloud-Nutzung (On-Premise)' }, ], scoreWeights: { risk: 5, complexity: 6, assurance: 6 }, }, ], } /** * Block 5: Rechte & Prozesse */ export const BLOCK_5_PROCESSES: ScopeQuestionBlock = { id: 'processes', title: 'Rechte & Prozesse', description: 'Etablierte Datenschutz- und Sicherheitsprozesse', order: 5, questions: [ { id: 'proc_dsar_process', type: 'boolean', question: 'Haben Sie einen Prozess für Betroffenenrechte (DSAR)?', helpText: 'Auskunft, Löschung, Berichtigung, Widerspruch etc. – Art. 15-22 DSGVO', required: true, scoreWeights: { risk: 6, complexity: 5, assurance: 8 }, }, { id: 'proc_deletion_concept', type: 'boolean', question: 'Haben Sie ein Löschkonzept?', helpText: 'Definierte Löschfristen und automatisierte Löschroutinen', required: true, scoreWeights: { risk: 7, complexity: 6, assurance: 8 }, }, { id: 'proc_incident_response', type: 'boolean', question: 'Haben Sie einen Notfallplan für Datenschutzvorfälle?', helpText: 'Incident Response Plan, 72h-Meldepflicht an Aufsichtsbehörde (Art. 33 DSGVO)', required: true, scoreWeights: { risk: 8, complexity: 6, assurance: 9 }, }, { id: 'proc_regular_audits', type: 'boolean', question: 'Führen Sie regelmäßige Datenschutz-Audits durch?', helpText: 'Interne oder externe Prüfungen mindestens jährlich', required: true, scoreWeights: { risk: 5, complexity: 4, assurance: 9 }, }, { id: 'proc_training', type: 'boolean', question: 'Schulen Sie Ihre Mitarbeiter im Datenschutz?', helpText: 'Awareness-Trainings, Onboarding, jährliche Auffrischung', required: true, scoreWeights: { risk: 6, complexity: 3, assurance: 7 }, }, ], } /** * Block 6: Produktkontext */ export const BLOCK_6_PRODUCT: ScopeQuestionBlock = { id: 'product', title: 'Website und Services', description: 'Spezifische Merkmale Ihrer Produkte und Services', order: 6, questions: [ { id: 'prod_cookies_consent', type: 'boolean', question: 'Benötigen Sie Cookie-Consent (Tracking-Cookies)?', helpText: 'Nicht-essenzielle Cookies erfordern opt-in Einwilligung', required: true, scoreWeights: { risk: 5, complexity: 4, assurance: 6 }, }, { id: 'prod_api_external', type: 'boolean', question: 'Bieten Sie externe APIs an (Daten-Weitergabe an Dritte)?', helpText: 'Programmierschnittstellen für Partner, Entwickler etc.', required: true, scoreWeights: { risk: 7, complexity: 7, assurance: 7 }, }, { id: 'prod_data_broker', type: 'boolean', question: 'Handeln Sie mit Daten (Data Brokerage, Adresshandel)?', helpText: 'Verkauf oder Vermittlung personenbezogener Daten', required: true, scoreWeights: { risk: 10, complexity: 8, assurance: 9 }, }, ], } /** * Hidden questions -- removed from UI but still contribute to scoring. * These are auto-filled from the Company Profile. */ export const HIDDEN_SCORING_QUESTIONS: ScopeProfilingQuestion[] = [ { id: 'org_employee_count', type: 'number', question: 'Mitarbeiterzahl (aus Profil)', required: false, scoreWeights: { risk: 5, complexity: 8, assurance: 6 }, mapsToCompanyProfile: 'employeeCount', }, { id: 'org_annual_revenue', type: 'single', question: 'Jahresumsatz (aus Profil)', required: false, scoreWeights: { risk: 4, complexity: 6, assurance: 7 }, mapsToCompanyProfile: 'annualRevenue', }, { id: 'org_industry', type: 'single', question: 'Branche (aus Profil)', required: false, scoreWeights: { risk: 7, complexity: 5, assurance: 6 }, mapsToCompanyProfile: 'industry', mapsToVVTQuestion: 'org_industry', mapsToLFQuestion: 'org-branche', }, { id: 'org_business_model', type: 'single', question: 'Geschäftsmodell (aus Profil)', required: false, scoreWeights: { risk: 6, complexity: 5, assurance: 5 }, mapsToCompanyProfile: 'businessModel', mapsToVVTQuestion: 'org_b2b_b2c', mapsToLFQuestion: 'org-geschaeftsmodell', }, { id: 'org_has_dsb', type: 'boolean', question: 'DSB vorhanden (aus Profil)', required: false, scoreWeights: { risk: 5, complexity: 3, assurance: 6 }, }, { id: 'org_cert_target', type: 'multi', question: 'Zertifizierungen (aus Profil)', required: false, scoreWeights: { risk: 3, complexity: 5, assurance: 10 }, }, { id: 'data_volume', type: 'single', question: 'Personendatensaetze (aus Profil)', required: false, scoreWeights: { risk: 7, complexity: 6, assurance: 6 }, }, { id: 'prod_type', type: 'multi', question: 'Angebotstypen (aus Profil)', required: false, scoreWeights: { risk: 5, complexity: 6, assurance: 5 }, }, { id: 'prod_webshop', type: 'boolean', question: 'Webshop (aus Profil)', required: false, scoreWeights: { risk: 7, complexity: 6, assurance: 6 }, }, ] /** * Block 7: KI-Systeme (portiert aus Company Profile Step 7) */ export const BLOCK_7_AI_SYSTEMS: ScopeQuestionBlock = { id: 'ai_systems', title: 'KI-Systeme', description: 'Erfassung eingesetzter KI-Systeme für EU AI Act und DSGVO-Dokumentation', order: 7, questions: [ { id: 'ai_uses_ai', type: 'boolean', question: 'Setzt Ihr Unternehmen KI-Systeme ein?', helpText: 'Chatbots, Empfehlungssysteme, automatisierte Entscheidungen, Copilot, etc.', required: true, scoreWeights: { risk: 8, complexity: 7, assurance: 6 }, }, { id: 'ai_categories', type: 'multi', question: 'Welche Kategorien von KI-Systemen setzen Sie ein?', helpText: 'Mehrfachauswahl möglich. Wird nur angezeigt, wenn KI im Einsatz ist.', required: false, options: [ { value: 'chatbot', label: 'Text-KI / Chatbots (ChatGPT, Claude, Gemini)' }, { value: 'office', label: 'Office / Produktivität (Copilot, Workspace AI)' }, { value: 'code', label: 'Code-Assistenz (GitHub Copilot, Cursor)' }, { value: 'image', label: 'Bildgenerierung (DALL-E, Midjourney, Firefly)' }, { value: 'translation', label: 'Übersetzung / Sprache (DeepL)' }, { value: 'crm', label: 'CRM / Sales KI (Salesforce Einstein, HubSpot AI)' }, { value: 'internal', label: 'Eigene / interne KI-Systeme' }, { value: 'other', label: 'Sonstige KI-Systeme' }, ], scoreWeights: { risk: 5, complexity: 5, assurance: 5 }, }, { id: 'ai_personal_data', type: 'boolean', question: 'Werden personenbezogene Daten an KI-Systeme übermittelt?', helpText: 'Z.B. Kundendaten in ChatGPT eingeben, E-Mails mit Copilot verarbeiten', required: false, scoreWeights: { risk: 10, complexity: 5, assurance: 7 }, }, { id: 'ai_risk_assessment', type: 'single', question: 'Haben Sie eine KI-Risikobewertung nach EU AI Act durchgeführt?', helpText: 'Risikoeinstufung der KI-Systeme (verboten / hochriskant / begrenzt / minimal)', required: false, options: [ { value: 'yes', label: 'Ja' }, { value: 'no', label: 'Nein' }, { value: 'not_yet', label: 'Noch nicht' }, ], scoreWeights: { risk: -5, complexity: 3, assurance: 8 }, }, ], }