/** * EU/EWR Rechtsgrundlagen — Nationale Ergaenzungsgesetze + Helpers * * Split from eu-legal-frameworks.ts for the 500 LOC hard cap. */ import type { CountryCode, LegalDocumentType, LicenseType, LegalFramework, SupervisoryAuthority, DocumentTypeMatrix, RAGLayer, DocumentUniformity } from './eu-legal-frameworks' export type { CountryCode, LegalDocumentType, LicenseType, DocumentUniformity } // ============================================================================= // Nationale Ergaenzungsgesetze (Phase 2 — modular pro Land) // ============================================================================= export const NATIONAL_FRAMEWORKS: LegalFramework[] = [ // --- Deutschland --- { id: 'DE-BDSG', countryCode: 'DE', name: 'BDSG', fullName: 'Bundesdatenschutzgesetz (2018)', abbreviation: 'BDSG', type: 'national_law', description: 'Nationales Begleitgesetz zur DSGVO. Ergaenzt u.a. Beschaeftigtendatenschutz (§26), ' + 'Videoueberwachung (§4), Forschung/Statistik, Bussgeldpraxis.', sourceUrl: 'https://www.gesetze-im-internet.de/bdsg_2018/', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Werk, gemeinfrei (§5 UrhG)', gdprOpeningClauses: ['Art. 6 Abs. 2', 'Art. 9 Abs. 4', 'Art. 23', 'Art. 85', 'Art. 88'], specialProvisions: [ '§26 BDSG — Beschaeftigtendatenschutz', '§4 BDSG — Videoueberwachung oeffentlich zugaenglicher Raeume', '§22 BDSG — Verarbeitung besonderer Kategorien', '§41-43 BDSG — Straf- und Bussgeldvorschriften', ], supervisoryAuthorities: [ { name: 'Bundesbeauftragter fuer den Datenschutz', abbreviation: 'BfDI', url: 'https://www.bfdi.bund.de', country: 'DE' }, ], ragPhase: 2, }, { id: 'DE-TTDSG', countryCode: 'DE', name: 'TTDSG', fullName: 'Telekommunikation-Telemedien-Datenschutz-Gesetz', abbreviation: 'TTDSG', type: 'national_law', description: 'Deutsche Umsetzung der ePrivacy-Richtlinie. Regelt insbesondere Cookie-Consent (§25 TTDSG), ' + 'Endgeraetezugriff und Telekommunikations-Datenschutz.', sourceUrl: 'https://www.gesetze-im-internet.de/ttdsg/', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Werk, gemeinfrei (§5 UrhG)', specialProvisions: [ '§25 TTDSG — Einwilligung fuer Cookies/Tracking', '§26 TTDSG — Anerkannte Dienste zur Einwilligungsverwaltung', ], ragPhase: 2, }, { id: 'DE-TMG', countryCode: 'DE', name: 'TMG / DDG', fullName: 'Telemediengesetz / Digitale-Dienste-Gesetz', abbreviation: 'TMG', type: 'national_law', description: 'Impressumspflicht (§5 TMG/DDG) und Anbieterkennzeichnung fuer Online-Dienste in Deutschland.', sourceUrl: 'https://www.gesetze-im-internet.de/tmg/', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Werk, gemeinfrei (§5 UrhG)', specialProvisions: [ '§5 TMG — Impressumspflicht (Anbieterkennzeichnung)', '§7-10 TMG — Verantwortlichkeit von Diensteanbietern', ], ragPhase: 3, }, // --- Oesterreich --- { id: 'AT-DSG', countryCode: 'AT', name: 'DSG (AT)', fullName: 'Datenschutzgesetz (Oesterreich, 2018)', abbreviation: 'DSG', type: 'national_law', description: 'Oesterreichisches Begleitgesetz zur DSGVO. Enthält Besonderheiten fuer Behoerden, ' + 'Strafverfolgung und teilweise andere Auslegungspraxis als Deutschland.', sourceUrl: 'https://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10001597', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Werk, Rechtsinformationssystem des Bundes (RIS)', supervisoryAuthorities: [ { name: 'Oesterreichische Datenschutzbehoerde', abbreviation: 'DSB', url: 'https://www.dsb.gv.at', country: 'AT' }, ], ragPhase: 2, }, // --- Schweiz (NICHT EU — eigenes Recht) --- { id: 'CH-DSG', countryCode: 'CH', name: 'revDSG (CH)', fullName: 'Bundesgesetz ueber den Datenschutz (revidiertes DSG, seit 01.09.2023)', abbreviation: 'revDSG', type: 'national_law', description: 'Die Schweiz ist nicht EU-Mitglied. Das revidierte DSG (2023) ist inhaltlich aehnlich der DSGVO, ' + 'aber nicht identisch. Unterschiede: andere Sanktionslogik (Busse bis 250.000 CHF gegen ' + 'natuerliche Personen), teils andere Begriffe, kein One-Stop-Shop.', sourceUrl: 'https://www.fedlex.admin.ch/eli/cc/2022/491/de', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Bundesrecht, Fedlex (Schweiz)', specialProvisions: [ 'Art. 60-66 revDSG — Strafbestimmungen (gegen natuerliche Personen)', 'Art. 16-18 revDSG — Drittlandtransfer (eigene Laenderliste)', 'Art. 22 revDSG — Datenschutz-Folgenabschaetzung', 'Art. 12 revDSG — Verzeichnis der Bearbeitungstaetigkeiten', ], supervisoryAuthorities: [ { name: 'Eidgenoessischer Datenschutzbeauftragter', abbreviation: 'EDOEB', url: 'https://www.edoeb.admin.ch', country: 'CH' }, ], ragPhase: 2, }, // --- Frankreich --- { id: 'FR-LIL', countryCode: 'FR', name: 'Loi Informatique et Libertés', fullName: 'Loi n° 78-17 du 6 janvier 1978 relative à l\'informatique, aux fichiers et aux libertés', abbreviation: 'LIL', type: 'national_law', description: 'Franzoesisches Begleitgesetz zur DSGVO (aktualisiert 2018). Spezialregelungen u.a. ' + 'zur Einwilligung Minderjaehriger (ab 15 Jahren), Forschungsdaten und Gesundheitsdaten.', sourceUrl: 'https://www.legifrance.gouv.fr/loda/id/JORFTEXT000000886460', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Gesetz, Légifrance (gemeinfrei)', supervisoryAuthorities: [ { name: 'Commission Nationale de l\'Informatique et des Libertés', abbreviation: 'CNIL', url: 'https://www.cnil.fr', country: 'FR' }, ], ragPhase: 2, }, // --- Spanien --- { id: 'ES-LOPDGDD', countryCode: 'ES', name: 'LOPDGDD', fullName: 'Ley Orgánica 3/2018 de Protección de Datos Personales y garantía de los derechos digitales', abbreviation: 'LOPDGDD', type: 'national_law', description: 'Spanisches Datenschutzgesetz. Ergaenzt DSGVO u.a. mit Regelungen zu ' + 'Kindereinwilligung, digitalem Testament und Rechten Verstorbener.', sourceUrl: 'https://www.boe.es/diario_boe/txt.php?id=BOE-A-2018-16673', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Gesetz, Boletín Oficial del Estado (gemeinfrei)', supervisoryAuthorities: [ { name: 'Agencia Española de Protección de Datos', abbreviation: 'AEPD', url: 'https://www.aepd.es', country: 'ES' }, ], ragPhase: 2, }, // --- Italien --- { id: 'IT-CODICE', countryCode: 'IT', name: 'Codice Privacy', fullName: 'Decreto Legislativo 30 giugno 2003, n. 196 (Codice in materia di protezione dei dati personali)', abbreviation: 'Codice Privacy', type: 'national_law', description: 'Italienischer Datenschutzkodex, angepasst an die DSGVO (D.Lgs. 101/2018). ' + 'Enthaelt Spezialregelungen fuer Gesundheitsdaten, Forschung und Journalismus.', sourceUrl: 'https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:decreto.legislativo:2003-06-30;196!vig=', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Gesetz, Normattiva (gemeinfrei)', supervisoryAuthorities: [ { name: 'Garante per la protezione dei dati personali', abbreviation: 'Garante', url: 'https://www.garanteprivacy.it', country: 'IT' }, ], ragPhase: 2, }, // --- Niederlande --- { id: 'NL-AVG', countryCode: 'NL', name: 'AVG / UAVG', fullName: 'Uitvoeringswet Algemene verordening gegevensbescherming (UAVG)', abbreviation: 'UAVG', type: 'national_law', description: 'Niederlaendisches Ausfuehrungsgesetz zur DSGVO.', sourceUrl: 'https://wetten.overheid.nl/BWBR0040948/', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Gesetz, wetten.overheid.nl (gemeinfrei)', supervisoryAuthorities: [ { name: 'Autoriteit Persoonsgegevens', abbreviation: 'AP', url: 'https://www.autoriteitpersoonsgegevens.nl', country: 'NL' }, ], ragPhase: 2, }, // --- Grossbritannien (post-Brexit) --- { id: 'GB-DPA', countryCode: 'GB', name: 'UK DPA 2018 / UK GDPR', fullName: 'Data Protection Act 2018 + UK GDPR (retained EU law)', abbreviation: 'DPA 2018', type: 'national_law', description: 'Nach Brexit: UK GDPR (inhaltlich weitgehend identisch mit EU-DSGVO) plus Data Protection Act 2018 ' + 'als nationales Begleitgesetz. ICO als Aufsichtsbehoerde.', sourceUrl: 'https://www.legislation.gov.uk/ukpga/2018/12/contents', license: 'OGL-3.0', licenseNote: 'UK legislation, Open Government Licence v3.0', supervisoryAuthorities: [ { name: 'Information Commissioner\'s Office', abbreviation: 'ICO', url: 'https://ico.org.uk', country: 'GB' }, ], ragPhase: 2, }, // --- Norwegen (EWR) --- { id: 'NO-PERSONOPPL', countryCode: 'NO', name: 'Personopplysningsloven', fullName: 'Lov om behandling av personopplysninger (personopplysningsloven)', abbreviation: 'POL', type: 'national_law', description: 'Norwegisches DSGVO-Ausfuehrungsgesetz (EWR-Mitglied, DSGVO gilt ueber EWR-Abkommen).', sourceUrl: 'https://lovdata.no/dokument/NL/lov/2018-06-15-38', license: 'PUBLIC_DOMAIN', licenseNote: 'Amtliches Gesetz, Lovdata (gemeinfrei)', supervisoryAuthorities: [ { name: 'Datatilsynet', abbreviation: 'DT', url: 'https://www.datatilsynet.no', country: 'NO' }, ], ragPhase: 2, }, ] // ============================================================================= // Helper Functions // ============================================================================= export function getAllSupervisoryAuthorities( allFrameworks: LegalFramework[] ): SupervisoryAuthority[] { const authorities: SupervisoryAuthority[] = [] for (const fw of allFrameworks) { if (fw.supervisoryAuthorities) { for (const sa of fw.supervisoryAuthorities) { if (!authorities.some(a => a.abbreviation === sa.abbreviation)) { authorities.push(sa) } } } } return authorities } export function getSupervisoryAuthority( country: CountryCode, allFrameworks: LegalFramework[] ): SupervisoryAuthority[] { return getAllSupervisoryAuthorities(allFrameworks).filter(sa => sa.country === country) } export function getCountrySpecificDocTypes( country: CountryCode, matrix: DocumentTypeMatrix[] ): DocumentTypeMatrix[] { return matrix.filter( d => d.uniformity === 'country_specific' || (d.uniformity === 'needs_national_supplement' && country !== 'EU') ) } export function getEUUniformDocTypes(matrix: DocumentTypeMatrix[]): DocumentTypeMatrix[] { return matrix.filter(d => d.uniformity === 'eu_uniform') } export function isGDPRCountry(country: CountryCode): boolean { const gdprCountries: CountryCode[] = ['EU', 'DE', 'AT', 'FR', 'ES', 'IT', 'NL', 'NO', 'IS'] return gdprCountries.includes(country) } export function hasSeparateLegalFramework(country: CountryCode): boolean { return country === 'CH' || country === 'GB' } export function getRAGSourcesForPhase(phase: 1 | 2 | 3, allFrameworks: LegalFramework[]): LegalFramework[] { return allFrameworks.filter(f => f.ragPhase === phase) } export function getRequiredFrameworkSummary( country: CountryCode, allFrameworks: LegalFramework[] ): { baseLaw: string nationalLaw: string | null supervisoryAuthority: string | null separateFramework: boolean } { const isGDPR = isGDPRCountry(country) const national = NATIONAL_FRAMEWORKS.filter(f => f.countryCode === country) const authorities = getSupervisoryAuthority(country, allFrameworks) return { baseLaw: isGDPR ? 'DSGVO (EU 2016/679)' : (country === 'CH' ? 'revDSG (CH)' : 'UK GDPR'), nationalLaw: national.length > 0 ? national.map(n => n.abbreviation).join(', ') : null, supervisoryAuthority: authorities.length > 0 ? authorities.map(a => a.abbreviation).join(', ') : null, separateFramework: hasSeparateLegalFramework(country), } } // Re-export RAGLayer type for barrel consumers export type { RAGLayer }