These 5 data files were untracked and only saved in git stash. They are required by catalog-registry.ts for the Katalogverwaltung. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
434 lines
17 KiB
TypeScript
434 lines
17 KiB
TypeScript
/**
|
|
* DSGVO-Bussgeldentscheidungen und Durchsetzungsfaelle
|
|
*
|
|
* Strukturierter Katalog relevanter Bussgelder und Gerichtsentscheidungen
|
|
* als Referenz fuer DSFA-Risikobewertung und Compliance-Beratung.
|
|
*
|
|
* Quellen: Amtliche Entscheidungen/Bescheide (§5 UrhG), EDPB-Mitteilungen (CC-BY-4.0)
|
|
*/
|
|
|
|
// =============================================================================
|
|
// Types
|
|
// =============================================================================
|
|
|
|
export type GDPRViolationType =
|
|
| 'data_minimization' // Art. 5 — Datenminimierung/Zweckbindung
|
|
| 'security' // Art. 32 — Technische/Org. Massnahmen
|
|
| 'special_categories' // Art. 9 — Besondere Kategorien
|
|
| 'transparency' // Art. 12-14 — Informationspflichten
|
|
| 'lawfulness' // Art. 6 — Rechtsmaessigkeit
|
|
| 'data_subject_rights' // Art. 15-22 — Betroffenenrechte
|
|
| 'dpo_conflict' // Art. 38 — DSB-Interessenkonflikt
|
|
| 'accountability' // Art. 5 Abs. 2 — Rechenschaftspflicht
|
|
| 'international_transfer' // Art. 44-49 — Drittlandtransfer
|
|
|
|
export type EnforcementOutcome = 'final' | 'reduced_on_appeal' | 'pending' | 'overturned'
|
|
|
|
export interface GDPREnforcementCase {
|
|
id: string
|
|
company: string
|
|
country: string
|
|
authority: string
|
|
year: number
|
|
fineOriginal: number // Urspruengliches Bussgeld in Euro
|
|
fineAfterAppeal?: number // Nach Berufung (falls reduziert)
|
|
outcome: EnforcementOutcome
|
|
violationTypes: GDPRViolationType[]
|
|
gdprArticles: string[] // Verletzte Artikel
|
|
description: string
|
|
keyFacts: string[] // Wesentliche Tatbestandsmerkmale
|
|
lessons: string[] // Lehren fuer Unternehmen
|
|
/** Nur amtliche Quellen (Bescheide, Urteile, EDPB) */
|
|
officialSources: OfficialSource[]
|
|
}
|
|
|
|
export interface OfficialSource {
|
|
type: 'court_decision' | 'dsb_decision' | 'edpb_news' | 'bfdi_press'
|
|
title: string
|
|
reference?: string // Aktenzeichen
|
|
date?: string
|
|
url?: string
|
|
licenseNote: string // Lizenzhinweis
|
|
}
|
|
|
|
export interface GDPRLesson {
|
|
id: string
|
|
gdprArticles: string[]
|
|
title: string
|
|
description: string
|
|
relatedCaseIds: string[]
|
|
severity: 'critical' | 'high' | 'medium'
|
|
}
|
|
|
|
// =============================================================================
|
|
// Enforcement Cases
|
|
// =============================================================================
|
|
|
|
export const GDPR_ENFORCEMENT_CASES: GDPREnforcementCase[] = [
|
|
{
|
|
id: 'CASE-HM-2020',
|
|
company: 'H&M (Nuernberg)',
|
|
country: 'DE',
|
|
authority: 'Hamburger Datenschutzbehoerde (HmbBfDI)',
|
|
year: 2020,
|
|
fineOriginal: 35_300_000,
|
|
outcome: 'final',
|
|
violationTypes: ['special_categories', 'lawfulness'],
|
|
gdprArticles: ['Art. 6 DSGVO', 'Art. 9 DSGVO'],
|
|
description:
|
|
'Systematische Ausspaeung von Beschaeftigtendaten. In sog. "Welcome-Back-Talks" nach ' +
|
|
'Krankheit wurden private Informationen zu Gesundheit, Familie und Religion erfasst und ' +
|
|
'in einer Datenbank gespeichert. Die Daten waren fuer Fuehrungskraefte zugaenglich.',
|
|
keyFacts: [
|
|
'Erfassung und Auswertung privater Gesundheitsinformationen',
|
|
'Systematische Dokumentation in Datenbank',
|
|
'Zugang fuer breiten Kreis von Fuehrungskraeften',
|
|
'Verarbeitung besonderer Kategorien (Art. 9) ohne Rechtsgrundlage',
|
|
],
|
|
lessons: [
|
|
'Gesundheitsdaten duerfen nur mit strenger Rechtsgrundlage verarbeitet werden',
|
|
'Mitarbeiter-Gespraeche duerfen nicht zur verdeckten Datenerhebung missbraucht werden',
|
|
'Besondere Kategorien (Art. 9) erfordern besondere Schutzmassnahmen',
|
|
],
|
|
officialSources: [
|
|
{
|
|
type: 'dsb_decision',
|
|
title: 'HmbBfDI Bussgeld gegen H&M Servicecenter',
|
|
date: '2020-10-01',
|
|
licenseNote: 'Amtlicher Bescheid gem. §5 UrhG',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'CASE-DW-2019',
|
|
company: 'Deutsche Wohnen SE (Berlin)',
|
|
country: 'DE',
|
|
authority: 'Berliner Beauftragte fuer Datenschutz (BlnBDI)',
|
|
year: 2019,
|
|
fineOriginal: 14_500_000,
|
|
outcome: 'final',
|
|
violationTypes: ['data_minimization', 'accountability'],
|
|
gdprArticles: ['Art. 5 DSGVO', 'Art. 25 DSGVO'],
|
|
description:
|
|
'Langjaehrige Speicherung von Mieterdaten ohne Rechtsgrundlage. Das Archivsystem erlaubte ' +
|
|
'keine Loeschung veralteter Daten (Gehaltsabrechnungen, Kontodaten, Mietvertraege). ' +
|
|
'Trotz vorheriger Beanstandung keine technischen Massnahmen zur Loeschung umgesetzt.',
|
|
keyFacts: [
|
|
'Archivsystem ohne Loeschmoeglichkeit fuer veraltete Daten',
|
|
'Vorherige Beanstandung durch Aufsichtsbehoerde ohne Abhilfe',
|
|
'Verstoss gegen Datenminimierung und Speicherbegrenzung',
|
|
'Keine Privacy-by-Design-Massnahmen (Art. 25)',
|
|
],
|
|
lessons: [
|
|
'Loeschkonzepte muessen technisch umsetzbar sein',
|
|
'Vorherige Beanstandungen erhoehen das Bussgeld erheblich',
|
|
'Art. 25 (Privacy by Design) betrifft auch bestehende Systeme',
|
|
],
|
|
officialSources: [
|
|
{
|
|
type: 'edpb_news',
|
|
title: 'Berlin Commissioner for Data Protection Imposes Fine on Real Estate Company',
|
|
url: 'https://www.edpb.europa.eu/news/national-news/2019/berlin-commissioner-data-protection-imposes-fine-real-estate-company_en',
|
|
licenseNote: 'EDPB Nachricht, CC-BY-4.0',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'CASE-1U1-2019',
|
|
company: '1&1 Telecom GmbH',
|
|
country: 'DE',
|
|
authority: 'BfDI (Bundesbeauftragter)',
|
|
year: 2019,
|
|
fineOriginal: 9_550_000,
|
|
fineAfterAppeal: 900_000,
|
|
outcome: 'reduced_on_appeal',
|
|
violationTypes: ['security'],
|
|
gdprArticles: ['Art. 32 DSGVO'],
|
|
description:
|
|
'Unzureichende Kunden-Authentifizierung: Allein Name und Geburtsdatum genuegten fuer ' +
|
|
'telefonische Auskuenfte. Das LG Bonn bestaetigte den Verstoss, reduzierte das Bussgeld ' +
|
|
'jedoch auf 900.000 Euro, da kein massiver Datenskandal vorlag und das Unternehmen kooperativ war.',
|
|
keyFacts: [
|
|
'Nur Name und Geburtsdatum als Authentifizierung',
|
|
'Verstoesse gegen Art. 32 (technisch-organisatorische Massnahmen)',
|
|
'LG Bonn reduzierte Bussgeld von 9,55 Mio. auf 0,9 Mio. Euro',
|
|
'Kooperatives Verhalten als mildernder Umstand',
|
|
],
|
|
lessons: [
|
|
'Starke Authentifizierung ist Pflicht bei Kundenkontakt',
|
|
'Art. 32 verlangt dem Risiko angemessene Sicherheit',
|
|
'Kooperation mit der Aufsichtsbehoerde kann Bussgelder deutlich reduzieren',
|
|
],
|
|
officialSources: [
|
|
{
|
|
type: 'bfdi_press',
|
|
title: 'BfDI verhaengt Geldbusse gegen Telekommunikationsdienstleister',
|
|
date: '2019-12-09',
|
|
url: 'https://www.bfdi.bund.de/SharedDocs/Pressemitteilungen/DE/2019/30_BfDIverh%C3%A4ngtGeldbu%C3%9Fe1u1.html',
|
|
licenseNote: 'Amtliche Pressemitteilung gem. §5 UrhG',
|
|
},
|
|
{
|
|
type: 'court_decision',
|
|
title: 'LG Bonn, Urteil v. 11.11.2020 — Reduzierung auf 900.000 Euro',
|
|
reference: 'LG Bonn, 2020',
|
|
date: '2020-11-11',
|
|
licenseNote: 'Amtliches Werk gem. §5 UrhG',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'CASE-WA-2021',
|
|
company: 'WhatsApp Ireland Ltd.',
|
|
country: 'IE',
|
|
authority: 'Irish Data Protection Commission (DPC)',
|
|
year: 2021,
|
|
fineOriginal: 225_000_000,
|
|
outcome: 'final',
|
|
violationTypes: ['transparency'],
|
|
gdprArticles: ['Art. 5 DSGVO', 'Art. 12 DSGVO', 'Art. 13 DSGVO', 'Art. 14 DSGVO'],
|
|
description:
|
|
'Verletzung der Transparenzpflichten: Unvollstaendige Information ueber Datenweitergabe ' +
|
|
'innerhalb der Meta/Facebook-Unternehmensgruppe. Betroffene wurden nicht ausreichend darueber ' +
|
|
'informiert, welche Daten zu welchen Zwecken mit welchen Empfaengern geteilt wurden.',
|
|
keyFacts: [
|
|
'Mangelnde Transparenz bei konzerninterner Datenweitergabe',
|
|
'Unzureichende Datenschutzhinweise (Art. 12-14)',
|
|
'EDPB-Streitbeilegung erhoehte das Bussgeld erheblich',
|
|
'Hoechstes Bussgeld gegen ein Unternehmen in der EU zum damaligen Zeitpunkt',
|
|
],
|
|
lessons: [
|
|
'Datenschutzhinweise muessen vollstaendig und verstaendlich sein',
|
|
'Konzerninterne Datenweitergabe muss transparent dokumentiert werden',
|
|
'Art. 12 verlangt klare, einfache Sprache',
|
|
],
|
|
officialSources: [
|
|
{
|
|
type: 'dsb_decision',
|
|
title: 'DPC Decision re WhatsApp Ireland Limited',
|
|
date: '2021-09-02',
|
|
licenseNote: 'Amtliche Entscheidung der irischen Aufsichtsbehoerde',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'CASE-GOOGLE-2019',
|
|
company: 'Google LLC',
|
|
country: 'FR',
|
|
authority: 'CNIL (Franzoesische Datenschutzbehoerde)',
|
|
year: 2019,
|
|
fineOriginal: 50_000_000,
|
|
outcome: 'final',
|
|
violationTypes: ['transparency', 'lawfulness'],
|
|
gdprArticles: ['Art. 6 DSGVO', 'Art. 12 DSGVO', 'Art. 13 DSGVO'],
|
|
description:
|
|
'Maengel bei Einwilligung und Transparenz: Informationen zur Datenverarbeitung waren ueber ' +
|
|
'mehrere Seiten verstreut und schwer verstaendlich. Einwilligung fuer personalisierte Werbung ' +
|
|
'war vorausgewaehlt und nicht hinreichend spezifisch.',
|
|
keyFacts: [
|
|
'Informationen ueber 5-6 Klicks verstreut',
|
|
'Vorausgewaehlte Einwilligung (kein aktives Opt-in)',
|
|
'Einwilligung nicht granular genug',
|
|
'Erstes grosses DSGVO-Bussgeld gegen US-Tech-Konzern',
|
|
],
|
|
lessons: [
|
|
'Einwilligung muss aktiv, informiert und spezifisch sein',
|
|
'Datenschutzinformationen muessen leicht zugaenglich sein',
|
|
'Vorausgewaehlte Checkboxen sind keine gueltige Einwilligung',
|
|
],
|
|
officialSources: [
|
|
{
|
|
type: 'dsb_decision',
|
|
title: 'CNIL Deliberation No. SAN-2019-001 v. 21.01.2019',
|
|
date: '2019-01-21',
|
|
licenseNote: 'Amtliche Entscheidung der CNIL',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 'CASE-OLG-DD-2021',
|
|
company: 'GmbH-Geschaeftsfuehrer (Detektiveinsatz)',
|
|
country: 'DE',
|
|
authority: 'OLG Dresden',
|
|
year: 2021,
|
|
fineOriginal: 5_000, // Schadensersatz, kein Bussgeld
|
|
outcome: 'final',
|
|
violationTypes: ['lawfulness'],
|
|
gdprArticles: ['Art. 6 DSGVO', 'Art. 10 DSGVO', 'Art. 82 DSGVO'],
|
|
description:
|
|
'Persoenliche Haftung des Geschaeftsfuehrers: Ein GmbH-GF liess eine Privatperson durch ' +
|
|
'einen Detektiv ausspionieren. Das OLG Dresden sprach dem Betroffenen 5.000 Euro Schadensersatz ' +
|
|
'zu — gegen GmbH und Geschaeftsfuehrer als Gesamtschuldner. Begruendung: Der GF entscheide ' +
|
|
'selbst ueber die Datenverarbeitung und sei daher Verantwortlicher i.S.d. Art. 4 Nr. 7 DSGVO.',
|
|
keyFacts: [
|
|
'Geschaeftsfuehrer als Verantwortlicher (Art. 4 Nr. 7)',
|
|
'Persoenliche Haftung neben der GmbH (Gesamtschuldner)',
|
|
'Schadensersatz nach Art. 82 DSGVO',
|
|
'Ausspionierung durch Detektiv = Verstoss gegen Art. 6, 10',
|
|
],
|
|
lessons: [
|
|
'Geschaeftsfuehrer koennen persoenlich fuer DSGVO-Verstoesse haften',
|
|
'Art. 82 DSGVO ermoeglicht Schadensersatz gegen natuerliche Personen',
|
|
'Verantwortlichkeit i.S.d. Art. 4 Nr. 7 kann auch den GF persoenlich treffen',
|
|
],
|
|
officialSources: [
|
|
{
|
|
type: 'court_decision',
|
|
title: 'OLG Dresden, Urteil 2021 — Persoenliche GF-Haftung bei DSGVO-Verstoss',
|
|
reference: 'OLG Dresden, 2021',
|
|
date: '2021',
|
|
licenseNote: 'Amtliches Werk gem. §5 UrhG',
|
|
},
|
|
],
|
|
},
|
|
]
|
|
|
|
// =============================================================================
|
|
// Lessons Learned (aggregiert)
|
|
// =============================================================================
|
|
|
|
export const GDPR_LESSONS: GDPRLesson[] = [
|
|
{
|
|
id: 'LESSON-01',
|
|
gdprArticles: ['Art. 5 DSGVO', 'Art. 25 DSGVO'],
|
|
title: 'Datenminimierung und Loeschkonzepte sind Pflicht',
|
|
description:
|
|
'Personenbezogene Daten duerfen nur so lange gespeichert werden, wie es fuer den Zweck ' +
|
|
'notwendig ist. Technische Loeschmechanismen muessen implementiert sein. Archivsysteme ' +
|
|
'ohne Loeschfunktion verstoessen gegen Art. 5 und Art. 25 DSGVO.',
|
|
relatedCaseIds: ['CASE-DW-2019'],
|
|
severity: 'critical',
|
|
},
|
|
{
|
|
id: 'LESSON-02',
|
|
gdprArticles: ['Art. 32 DSGVO'],
|
|
title: 'Angemessene IT-Sicherheit (Art. 32) ist unverzichtbar',
|
|
description:
|
|
'Technisch-organisatorische Massnahmen muessen dem Risiko angemessen sein. ' +
|
|
'Schwache Authentifizierung (z.B. nur Name/Geburtsdatum) reicht nicht aus. ' +
|
|
'Verschluesselung, Zugriffskontrollen und starke Authentifizierung sind Pflicht.',
|
|
relatedCaseIds: ['CASE-1U1-2019'],
|
|
severity: 'critical',
|
|
},
|
|
{
|
|
id: 'LESSON-03',
|
|
gdprArticles: ['Art. 9 DSGVO'],
|
|
title: 'Besondere Kategorien erfordern besondere Vorsicht',
|
|
description:
|
|
'Gesundheitsdaten, religioese Ueberzeugungen und andere besondere Kategorien (Art. 9) ' +
|
|
'duerfen nur mit expliziter Rechtsgrundlage verarbeitet werden. Informelle Gespraeche ' +
|
|
'duerfen nicht zur verdeckten Erhebung solcher Daten missbraucht werden.',
|
|
relatedCaseIds: ['CASE-HM-2020'],
|
|
severity: 'critical',
|
|
},
|
|
{
|
|
id: 'LESSON-04',
|
|
gdprArticles: ['Art. 12 DSGVO', 'Art. 13 DSGVO', 'Art. 14 DSGVO'],
|
|
title: 'Transparenz und vollstaendige Datenschutzhinweise',
|
|
description:
|
|
'Betroffene muessen klar, verstaendlich und vollstaendig informiert werden. ' +
|
|
'Konzerninterne Datenweitergabe muss dokumentiert sein. Informationen duerfen ' +
|
|
'nicht ueber zahlreiche Unterseiten verstreut werden.',
|
|
relatedCaseIds: ['CASE-WA-2021', 'CASE-GOOGLE-2019'],
|
|
severity: 'high',
|
|
},
|
|
{
|
|
id: 'LESSON-05',
|
|
gdprArticles: ['Art. 82 DSGVO', 'Art. 4 Nr. 7 DSGVO'],
|
|
title: 'Persoenliche Haftung von Geschaeftsfuehrern moeglich',
|
|
description:
|
|
'Geschaeftsfuehrer koennen neben dem Unternehmen persoenlich fuer DSGVO-Verstoesse ' +
|
|
'haften, wenn sie die Datenverarbeitung selbst veranlassen. Dies gilt insbesondere ' +
|
|
'bei vorsaetzlichen Verstoessen.',
|
|
relatedCaseIds: ['CASE-OLG-DD-2021'],
|
|
severity: 'high',
|
|
},
|
|
{
|
|
id: 'LESSON-06',
|
|
gdprArticles: ['Art. 83 DSGVO'],
|
|
title: 'Kooperation kann Bussgelder deutlich reduzieren',
|
|
description:
|
|
'Kooperatives Verhalten und zeitnahe Massnahmen zur Abhilfe werden von Aufsichtsbehoerden ' +
|
|
'und Gerichten als mildernde Umstaende anerkannt. Im 1&1-Fall wurde das Bussgeld um ueber ' +
|
|
'90% reduziert.',
|
|
relatedCaseIds: ['CASE-1U1-2019'],
|
|
severity: 'medium',
|
|
},
|
|
]
|
|
|
|
// =============================================================================
|
|
// Violation Type Labels
|
|
// =============================================================================
|
|
|
|
export const VIOLATION_TYPE_LABELS: Record<GDPRViolationType, string> = {
|
|
data_minimization: 'Datenminimierung / Speicherbegrenzung',
|
|
security: 'IT-Sicherheit (Art. 32)',
|
|
special_categories: 'Besondere Kategorien (Art. 9)',
|
|
transparency: 'Transparenz / Informationspflichten',
|
|
lawfulness: 'Rechtsmaessigkeit (Art. 6)',
|
|
data_subject_rights: 'Betroffenenrechte',
|
|
dpo_conflict: 'DSB-Interessenkonflikt',
|
|
accountability: 'Rechenschaftspflicht',
|
|
international_transfer: 'Drittlandtransfer',
|
|
}
|
|
|
|
// =============================================================================
|
|
// Helper Functions
|
|
// =============================================================================
|
|
|
|
/**
|
|
* Gibt Enforcement Cases zurueck, die fuer bestimmte DSGVO-Artikel relevant sind.
|
|
*/
|
|
export function getEnforcementCasesForArticle(article: string): GDPREnforcementCase[] {
|
|
return GDPR_ENFORCEMENT_CASES.filter(c =>
|
|
c.gdprArticles.some(a => a.toLowerCase().includes(article.toLowerCase()))
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Gibt Enforcement Cases zurueck, die fuer einen bestimmten Verstosstyp relevant sind.
|
|
*/
|
|
export function getEnforcementCasesForViolationType(type: GDPRViolationType): GDPREnforcementCase[] {
|
|
return GDPR_ENFORCEMENT_CASES.filter(c => c.violationTypes.includes(type))
|
|
}
|
|
|
|
/**
|
|
* Gibt Lessons zurueck, die fuer bestimmte DSGVO-Artikel relevant sind.
|
|
*/
|
|
export function getLessonsForArticle(article: string): GDPRLesson[] {
|
|
return GDPR_LESSONS.filter(l =>
|
|
l.gdprArticles.some(a => a.toLowerCase().includes(article.toLowerCase()))
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Gibt das hoechste bekannte Bussgeld fuer einen Verstosstyp zurueck.
|
|
*/
|
|
export function getMaxFineForViolationType(type: GDPRViolationType): {
|
|
amount: number
|
|
company: string
|
|
year: number
|
|
} | null {
|
|
const cases = getEnforcementCasesForViolationType(type)
|
|
if (cases.length === 0) return null
|
|
|
|
const sorted = [...cases].sort((a, b) => b.fineOriginal - a.fineOriginal)
|
|
return {
|
|
amount: sorted[0].fineOriginal,
|
|
company: sorted[0].company,
|
|
year: sorted[0].year,
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Formatiert einen Euro-Betrag fuer die Anzeige.
|
|
*/
|
|
export function formatFineAmount(amount: number): string {
|
|
if (amount >= 1_000_000) {
|
|
return `${(amount / 1_000_000).toFixed(1)} Mio. Euro`
|
|
}
|
|
if (amount >= 1_000) {
|
|
return `${(amount / 1_000).toFixed(0)}.000 Euro`
|
|
}
|
|
return `${amount.toLocaleString('de-DE')} Euro`
|
|
}
|