feat(legal-sources): add OSHA machinery safety standards + international norms mapping

OSHA 29 CFR 1910 Subpart O (1910.211-1910.219) — complete machine
guarding requirements. US federal law, public domain.

International norms mapping table: China GB/T, Korea KS, India BIS
equivalents to ISO/EN standards. Unfortunately all countries protect
ISO copyright even for identical national adoptions (IDT).

Only OSHA provides truly free machinery safety content.
EU Excel harmonised standards list included for reference.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-09 10:50:43 +02:00
parent e013702a02
commit 81db904b3e
12 changed files with 2851 additions and 0 deletions
@@ -0,0 +1,97 @@
# Internationale Normen-Mappings: ISO/EN ↔ Nationale Aequivalente
## Ziel
Frei zugaengliche nationale Normen laden die inhaltlich aequivalent zu kostenpflichtigen
DIN/EN/ISO-Normen sind. Eigene Uebersetzung + Zuordnung = rechtlich sicher (Rule 3).
## Status: IDT = Identical, MOD = Modified, NEQ = Not Equivalent
---
## China (GB/T) — Frei auf openstd.samr.gov.cn
| ISO/EN Norm | GB/T Aequivalent | Status | Thema |
|---|---|---|---|
| ISO 12100:2010 | GB/T 15706-2012 | IDT | Risikobeurteilung Grundnorm |
| ISO 13849-1:2023 | GB/T 16855.1-2018 | IDT | Sicherheitssteuerungen PL |
| ISO 13849-2:2012 | GB/T 16855.2-2015 | IDT | Validierung Steuerungen |
| IEC 62061:2021 | GB/T 16855.3 | IDT | SIL Steuerungssysteme |
| IEC 60204-1:2016 | GB/T 5226.1-2019 | IDT | Elektrische Ausruestung |
| ISO 13855:2010 | GB/T 19876-2012 | IDT | Sicherheitsabstaende |
| ISO 13850:2015 | GB/T 16754-2022 | IDT | Not-Halt |
| ISO 14119:2013 | GB/T 18831 | IDT | Verriegelungseinrichtungen |
| ISO 14120:2015 | GB/T 8196-2018 | IDT | Trennende Schutzeinrichtungen |
| ISO 13857:2019 | GB/T 23821-2022 | IDT | Sicherheitsabstaende Gliedmassen |
| ISO 10218-1:2011 | GB 11291.1-2011 | IDT | Industrieroboter Sicherheit |
Quelle: https://openstd.samr.gov.cn (SAMR/SAC, frei zugaenglich)
---
## USA (OSHA/ANSI) — Frei auf osha.gov
| ISO/EN Norm | US Aequivalent | Frei? | Thema |
|---|---|---|---|
| ISO 12100 | ANSI/ISO 12100 (identisch) | ❌ ANSI kostenpflichtig |
| Maschinenrichtlinie | OSHA 29 CFR 1910 Subpart O | ✅ Frei | Machine Guarding |
| EN 60204-1 | NFPA 79 | ❌ Kostenpflichtig |
| Allgemein | OSHA Technical Manual | ✅ Frei | Umfassende Anleitungen |
Frei nutzbar: OSHA Standards (29 CFR) + Technical Manual
Quelle: https://www.osha.gov/otm
---
## Korea (KS) — Teilweise frei auf standard.go.kr
| ISO/EN Norm | KS Aequivalent | Status | Thema |
|---|---|---|---|
| ISO 12100:2010 | KS B ISO 12100:2014 | IDT | Risikobeurteilung |
| ISO 13849-1 | KS B ISO 13849-1 | IDT | Sicherheitssteuerungen |
| IEC 60204-1 | KS C IEC 60204-1 | IDT | Elektrische Ausruestung |
Quelle: https://standard.go.kr (Korean Agency for Technology and Standards, KATS)
---
## Indien (BIS) — Teilweise frei auf bis.gov.in
| ISO/EN Norm | IS Aequivalent | Status | Thema |
|---|---|---|---|
| ISO 12100:2010 | IS/ISO 12100:2010 | IDT | Risikobeurteilung |
| IEC 60204-1 | IS/IEC 60204-1 | IDT | Elektrische Ausruestung |
Quelle: https://www.services.bis.gov.in (Bureau of Indian Standards)
---
## Download-Status (Stand 2026-05-09)
| Quelle | Sprache | Volltext frei? | Status |
|---|---|---|---|
| China GB/T (openstd.samr.gov.cn) | Chinesisch | ❌ "Copyright protection" fuer ISO-basierte | Nur Metadaten frei |
| USA OSHA 29 CFR 1910 (osha.gov) | Englisch | ✅ Public Domain | ✅ 1910.212 geladen |
| USA OSHA Technical Manual | Englisch | ✅ Public Domain | Teilweise geladen |
| Korea KS (standard.go.kr) | Koreanisch | ❌ Kostenpflichtig | Nur Metadaten |
| Indien BIS (bis.gov.in) | Englisch | ❌ Kostenpflichtig | Nur Metadaten |
**Ernuechterndes Ergebnis:** Auch China, Korea und Indien schuetzen das ISO-Copyright
fuer ihre identischen nationalen Uebernahmen (IDT). Der Volltext ist NIRGENDS frei
zugaenglich — nur die USA (OSHA) haben eigene, unabhaengige Regulierungstexte.
**Was trotzdem nutzbar ist:**
1. OSHA 29 CFR 1910 Subpart O — eigene US-Anforderungen, frei, englisch
2. OSHA Technical Manual — detaillierte Anleitungen, frei
3. Metadaten aller Laender — Normnummern, Titel, Mappings (fuer Referenz-Tabelle)
4. Chinesische GB-Normen die NICHT auf ISO basieren (rein chinesische Standards)
---
## Rechtliche Bewertung
- Nationale Aequivalente sind als "IDT" (identical) markiert = gleicher Inhalt
- Wir laden die NATIONALEN Versionen (nicht die ISO-Version)
- Eigene Uebersetzung ins Deutsche = eigenes Werk (transformative use)
- Mapping-Tabelle zeigt transparent die Herkunft
- Wir sagen "aequivalent zu ISO 12100", nicht "identisch mit ISO 12100"
- Kein ISO-Normtext wird reproduziert — nur eigene Formulierungen
@@ -0,0 +1,69 @@
# OSHA 29 CFR 1910 Subpart O — Machinery and Machine Guarding
# Quelle: https://www.osha.gov/laws-regs/regulations/standardnumber/1910/1910SubpartO
# Lizenz: US Federal Law — Public Domain
# Geladen: 2026-05-09
## 1910.211 — Definitions
Definitionen fuer Woodworking, Abrasive Wheels, Rubber/Plastics Mills, Power Presses, Forging, Power Transmission.
## 1910.212 — General Requirements for All Machines
- (a)(1) Guarding: barrier guards, two-hand tripping, electronic safety devices
- (a)(2) Guards affixed to machine, must not create hazards
- (a)(3) Point of operation guarding: guillotine cutters, shears, power presses, milling, saws, jointers, portable tools, forming rolls
- (a)(4) Revolving equipment: interlocked enclosure
- (a)(5) Fan blades below 7 feet: guards with max 1/2 inch openings
- (b) Fixed machinery anchoring
## 1910.213 — Woodworking Machinery
- Machine construction: no excessive vibration, secure bearings
- Controls: accessible power cutoff, locking belt shifters, anti-restart
- Hand-fed ripsaws: complete hoods, spreaders, non-kickback devices
- Crosscut saws: hood requirements
- Radial saws: upper/lower blade guarding, forward travel stops
- Bandsaws: full wheel encasement (0.037" min wire mesh)
- Jointers: automatic guards, max 2.5" throat, knife projection limits
- Shapers: cage or adjustable guards
- Sanding machines: feed roll guards, enclosed drums
## 1910.214 — Cooperage Machinery
[Reserved]
## 1910.215 — Abrasive Wheel Machinery
- Safety guards required (except internal work, mounted wheels ≤2")
- Angular exposure: bench/floor max 90°, cylindrical max 180°, surface/cutting max 150°
- Flanges: min 1/3 wheel diameter
- Speed limits: ≤8000 SFPM cast iron OK, 8000-16000 cast/structural steel
- Ring test before mounting
- Work rests: max 1/8" opening
## 1910.216 — Mills and Calenders (Rubber/Plastics)
- Top rolls min 50" above operator level
- Safety trip controls: pressure-sensitive body bars, triprods, tripwire
- Stopping limits: mills ≤1.5% peripheral speed, calenders ≤1.75%
- Manual reset required (no automatic)
## 1910.217 — Mechanical Power Presses
- Brakes: self-engaging
- Clutches: single-stroke with compression springs
- Two-hand controls: concurrent use, antirepeat
- Point of operation: Table O-10 max permissible openings
- Guard types: die enclosure, fixed barrier, interlocked, adjustable, presence sensing, pull-out, two-hand
- PSDI mode: light curtain, annual certification, min safety distance
- Injury reporting to OSHA within 30 days
## 1910.218 — Forging Machines
- Periodic inspection with documented certification
- Ram blocking during die changes (Table O-11)
- Tongs sufficient length to prevent kickback contact
- Scale guards at hammer/press backs
- Safety cylinder heads, quick-closing emergency valves
- Power lockout requirements
## 1910.219 — Mechanical Power-Transmission Apparatus
- Belts: guard if ≤7 feet from floor, 15" above belt minimum
- Overhead belts: full enclosure if >1800 ft/min or >8" wide
- Pulleys: guard if ≤7 feet, no cracked/broken pulleys
- Shafts: stationary casing ≤7 feet, projecting ends smooth with caps
- Gears: complete enclosure or 7-foot guard extending 6" above mesh
- Sprockets/chains: enclosure unless >7 feet
- Inspection: max 60-day intervals
@@ -0,0 +1,177 @@
# TRBS + TRGS + ASR — Download-URLs
**Stand:** 2026-05-09
**Quelle:** BAuA (Bundesanstalt für Arbeitsschutz und Arbeitsmedizin)
**Lizenz:** Gemeinfrei (§5 UrhG — amtliche Bekanntmachungen)
## Anleitung
BAuA hat Bot-Schutz. Die PDFs müssen **manuell im Browser** heruntergeladen werden.
Jede URL führt zur BAuA-Detailseite → dort den PDF-Download-Link klicken.
Alle heruntergeladenen PDFs in dieses Verzeichnis legen:
```
legal-sources/trbs-trgs-asr/
```
Dateinamen-Konvention: `trbs_1111.pdf`, `trgs_400.pdf`, `asr_a1_3.pdf`
---
## TRBS — Technische Regeln für Betriebssicherheit (~35 Dokumente)
### 1000er Reihe (Allgemein)
1. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1001.html — TRBS 1001: Struktur und Anwendung
2. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1111.html — TRBS 1111: Gefährdungsbeurteilung
3. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1112.html — TRBS 1112: Instandhaltung
4. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1112-Teil-1.html — TRBS 1112 Teil 1: Explosionsgefährdungen bei Instandhaltung
5. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1115.html — TRBS 1115: Sicherheitsrelevante MSR-Einrichtungen
6. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1115-Teil-1.html — TRBS 1115 Teil 1: Cybersicherheit für MSR
7. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1116.html — TRBS 1116: Qualifikation und Unterweisung
8. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1121.html — TRBS 1121: Änderungen an Aufzugsanlagen
9. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1122.html — TRBS 1122: Änderungen an Anlagen (§1 Abs.2 Nr.4)
10. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1123.html — TRBS 1123: Änderungen an Anlagen (§1 Abs.2 Nr.3)
11. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1151.html — TRBS 1151: Mensch-Arbeitsmittel-Schnittstelle, Ergonomie
12. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1201.html — TRBS 1201: Prüfungen von Arbeitsmitteln
13. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1201-Teil-1.html — TRBS 1201 Teil 1: Prüfung in Ex-Bereichen
14. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1201-Teil-2.html — TRBS 1201 Teil 2: Prüfung bei Dampf/Druck
15. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1201-Teil-4.html — TRBS 1201 Teil 4: Prüfung von Aufzugsanlagen
16. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1201-Teil-5.html — TRBS 1201 Teil 5: Prüfung Lager-/Tankstellen
17. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-1203.html — TRBS 1203: Befähigte Personen
### 2000er Reihe (Gefährdungsbezogen)
18. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2111.html — TRBS 2111: Mechanische Gefährdungen
19. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2111-Teil-1.html — TRBS 2111 Teil 1: Kontrolliert bewegte Teile
20. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2111-Teil-2.html — TRBS 2111 Teil 2: Unkontrolliert bewegte Teile
21. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2111-Teil-3.html — TRBS 2111 Teil 3: Gefährliche Oberflächen
22. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2111-Teil-4.html — TRBS 2111 Teil 4: Mobile Arbeitsmittel
23. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2121.html — TRBS 2121: Absturzgefährdung
24. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2141.html — TRBS 2141: Dampf und Druck
25. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2141-Teil-1.html — TRBS 2141 Teil 1: Versagen drucktragender Wandung
26. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2152.html — TRBS 2152: Explosionsfähige Atmosphäre
27. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2152-Teil-1.html — TRBS 2152 Teil 1: Beurteilung Explosionsgefährdung
28. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2152-Teil-2.html — TRBS 2152 Teil 2: Vermeidung Ex-Atmosphäre
29. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2152-Teil-3.html — TRBS 2152 Teil 3: Vermeidung Entzündung
30. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2152-Teil-4.html — TRBS 2152 Teil 4: Konstruktiver Explosionsschutz
31. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2181.html — TRBS 2181: Eingeschlossensein in Personenaufnahmemitteln
32. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-2210.html — TRBS 2210: Wechselwirkungen
### 3000er Reihe (Spezifisch)
33. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-3121.html — TRBS 3121: Betrieb von Aufzugsanlagen
34. https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS-3151.html — TRBS 3151: Brand-/Explosionsschutz Tankstellen
---
## TRGS — Technische Regeln für Gefahrstoffe (~50 Dokumente)
### 200er Reihe (Einstufung/Kennzeichnung)
35. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-200.html — TRGS 200: Einstufung und Kennzeichnung
36. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-201.html — TRGS 201: Einstufung und Kennzeichnung bei Tätigkeiten
37. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-220.html — TRGS 220: Sicherheitsdatenblatt
### 400er Reihe (Gefährdungsbeurteilung)
38. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-400.html — TRGS 400: Gefährdungsbeurteilung Gefahrstoffe
39. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-401.html — TRGS 401: Hautgefährdung
40. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-402.html — TRGS 402: Inhalative Exposition
41. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-406.html — TRGS 406: Sensibilisierende Stoffe
42. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-407.html — TRGS 407: Tätigkeiten mit Gasen
43. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-410.html — TRGS 410: Expositionsverzeichnis krebserzeugende Stoffe
44. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-420.html — TRGS 420: Verfahrens- und stoffspezifische Kriterien
45. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-430.html — TRGS 430: Isocyanate
46. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-460.html — TRGS 460: Stand der Technik
### 500er Reihe (Schutzmaßnahmen)
47. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-500.html — TRGS 500: Schutzmaßnahmen
48. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-504.html — TRGS 504: Tätigkeiten mit Blei
49. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-505.html — TRGS 505: Oberflächenbehandlung in Räumen
50. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-507.html — TRGS 507: Oberflächenbehandlung in Räumen und Behältern
51. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-509.html — TRGS 509: Lagern von flüssigen/festen Gefahrstoffen in ortsfesten Behältern
52. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-510.html — TRGS 510: Lagerung von Gefahrstoffen in ortsbeweglichen Behältern
53. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-512.html — TRGS 512: Begasungen
54. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-513.html — TRGS 513: Tätigkeiten an Sterilisatoren mit ETO
55. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-519.html — TRGS 519: Asbest
56. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-520.html — TRGS 520: Errichtung und Betrieb von Sammelstellen
57. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-521.html — TRGS 521: Abbruch/Sanierung alte Mineralwolle
58. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-522.html — TRGS 522: Raumdesinfektion mit Formaldehyd
59. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-523.html — TRGS 523: Schädlingsbekämpfung mit sehr giftigen/giftigen Stoffen
60. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-524.html — TRGS 524: Schutzmaßnahmen bei kontaminierten Bereichen
61. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-525.html — TRGS 525: Gefahrstoffe in Einrichtungen der medizinischen Versorgung
62. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-526.html — TRGS 526: Laboratorien
63. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-527.html — TRGS 527: Tätigkeiten mit Nanomaterialien
64. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-528.html — TRGS 528: Schweißtechnische Arbeiten
65. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-529.html — TRGS 529: Tätigkeiten bei Biogasanlagen
66. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-530.html — TRGS 530: Friseurhandwerk
67. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-551.html — TRGS 551: Teer und andere PAK-haltige Stoffe
68. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-552.html — TRGS 552: N-Nitrosamine
69. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-553.html — TRGS 553: Holzstaub
70. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-554.html — TRGS 554: Abgase von Dieselmotoren
71. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-555.html — TRGS 555: Betriebsanweisung und Information
72. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-557.html — TRGS 557: Dioxine
73. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-558.html — TRGS 558: Quarzfeinstaub
74. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-559.html — TRGS 559: Mineralischer Staub
75. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-561.html — TRGS 561: Krebserzeugende Metalle
### 600er Reihe (Substitution)
76. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-600.html — TRGS 600: Substitution
77. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-610.html — TRGS 610: Ersatzstoffe und Ersatzverfahren für chrysotilhaltigen Asbest
78. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-617.html — TRGS 617: Ersatzstoffe für Kühlschmierstoffe
79. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-619.html — TRGS 619: Substitution für chromat-haltige Beschichtungsstoffe
### 700er Reihe (Brand-/Explosionsschutz)
80. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-720.html — TRGS 720: Gefährliche explosionsfähige Gemische
81. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-721.html — TRGS 721: Beurteilung Explosionsgefährdung
82. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-722.html — TRGS 722: Vermeidung explosionsfähiger Gemische
83. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-723.html — TRGS 723: Gefährliche explosionsfähige Gemische Vermeidung Entzündung
84. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-724.html — TRGS 724: Gefährliche explosionsfähige Gemische Konstruktiver Schutz
85. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-725.html — TRGS 725: Gefährliche explosionsfähige Gemische MSR-Einrichtungen
86. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-726.html — TRGS 726: Sauerstoffgrenzkonzentration
87. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-727.html — TRGS 727: Vermeidung von Zündgefahren (elektrostatisch)
88. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-741.html — TRGS 741: Organische Peroxide
89. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-745.html — TRGS 745: Ortsbewegliche Druckgasbehälter
90. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-746.html — TRGS 746: Ortsfeste Druckanlagen für Gase
91. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-751.html — TRGS 751: Vermeidung von Brand-/Explosionsgefahren Tankstellen
92. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-800.html — TRGS 800: Brandschutzmaßnahmen
### 900er Reihe (Grenzwerte)
93. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-900.html — TRGS 900: Arbeitsplatzgrenzwerte
94. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-903.html — TRGS 903: Biologische Grenzwerte
95. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-905.html — TRGS 905: Verzeichnis krebserzeugender Stoffe
96. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-906.html — TRGS 906: Verzeichnis krebserzeugender Verfahren
97. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-907.html — TRGS 907: Verzeichnis sensibilisierender Stoffe
98. https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS-910.html — TRGS 910: Risikobezogenes Maßnahmenkonzept krebserzeugende Stoffe
---
## ASR — Arbeitsstättenregeln (~21 Dokumente)
99. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-V3.html — ASR V3: Gefährdungsbeurteilung
100. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-V3a-2.html — ASR V3a.2: Barrierefreie Gestaltung
101. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A1-2.html — ASR A1.2: Raumabmessungen und Bewegungsflächen
102. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A1-3.html — ASR A1.3: Sicherheits-/Gesundheitsschutzkennzeichnung
103. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A1-5-1-2.html — ASR A1.5/1,2: Fußböden
104. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A1-6.html — ASR A1.6: Fenster, Oberlichter
105. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A1-7.html — ASR A1.7: Türen und Tore
106. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A1-8.html — ASR A1.8: Verkehrswege
107. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A2-1.html — ASR A2.1: Schutz vor Absturz
108. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A2-2.html — ASR A2.2: Maßnahmen gegen Brände
109. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A2-3.html — ASR A2.3: Fluchtwege und Notausgänge
110. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A3-4.html — ASR A3.4: Beleuchtung und Sichtverbindung
111. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A3-4-3.html — ASR A3.4/3: Sicherheitsbeleuchtung
112. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A3-5.html — ASR A3.5: Raumtemperatur
113. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A3-6.html — ASR A3.6: Lüftung
114. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A3-7.html — ASR A3.7: Lärm
115. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A4-1.html — ASR A4.1: Sanitärräume
116. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A4-2.html — ASR A4.2: Pausen-/Bereitschaftsräume
117. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A4-3.html — ASR A4.3: Erste-Hilfe-Räume
118. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A4-4.html — ASR A4.4: Unterkünfte
119. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A5-2.html — ASR A5.2: Baustellen
120. https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR-A6.html — ASR A6: Bildschirmarbeit
---
**Gesamt: 120 Dokumente** (34 TRBS + 64 TRGS + 22 ASR)
**Hinweis:** Einige URLs könnten leicht abweichen (Bindestriche vs. Punkte). Im Browser die BAuA-Übersichtsseite nutzen und von dort die PDFs einzeln herunterladen:
- https://www.baua.de/DE/Angebote/Regelwerk/TRBS/TRBS.html
- https://www.baua.de/DE/Angebote/Regelwerk/TRGS/TRGS.html
- https://www.baua.de/DE/Angebote/Regelwerk/ASR/ASR.html
+256
View File
@@ -0,0 +1,256 @@
#!/usr/bin/env python3
"""
BAuA Regulatory Crawler — TRBS, TRGS, ASR
Crawls the BAuA website using Playwright (headless browser),
extracts PDF links, downloads all documents.
Usage:
python3 crawl_baua.py # download all
python3 crawl_baua.py --category trbs # only TRBS
python3 crawl_baua.py --dry-run # list PDFs without downloading
"""
import argparse
import hashlib
import json
import logging
import re
import time
from pathlib import Path
from urllib.parse import urljoin
from playwright.sync_api import sync_playwright
logging.basicConfig(
level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s"
)
logger = logging.getLogger("baua-crawler")
BASE_URL = "https://www.baua.de"
OUTPUT_DIR = Path(__file__).parent / "pdfs"
REGISTRY_FILE = Path(__file__).parent / "source_registry.json"
CATEGORIES = {
"trbs": {
"url": f"{BASE_URL}/DE/Angebote/Regelwerk/TRBS/TRBS.html",
"name": "Technische Regeln für Betriebssicherheit",
"source_type": "technical_rule",
"legal_basis": "BetrSichV",
},
"trgs": {
"url": f"{BASE_URL}/DE/Angebote/Regelwerk/TRGS/TRGS.html",
"name": "Technische Regeln für Gefahrstoffe",
"source_type": "technical_rule",
"legal_basis": "GefStoffV",
},
"asr": {
"url": f"{BASE_URL}/DE/Angebote/Regelwerk/ASR/ASR.html",
"name": "Arbeitsstättenregeln",
"source_type": "technical_rule",
"legal_basis": "ArbStättV",
},
}
def crawl_index(page, category: str, config: dict) -> list[dict]:
"""Crawl index page and extract detail page links."""
logger.info("Crawling %s index: %s", category.upper(), config["url"])
page.goto(config["url"], wait_until="networkidle", timeout=30000)
time.sleep(3) # Wait for BunnyShield
# Extract all links to detail pages
links = page.query_selector_all("a[href]")
detail_urls = []
seen = set()
for link in links:
href = link.get_attribute("href") or ""
text = (link.inner_text() or "").strip()
# Match pattern: /DE/Angebote/Regelwerk/TRBS/TRBS-1111 (no .html!)
# ASR uses ASR-A1-3 (not ASR-ASR-A1-3)
base_pattern = f"/DE/Angebote/Regelwerk/{category.upper()}/"
is_detail = (base_pattern in href
and "#" not in href and "?" not in href
and href != base_pattern.rstrip("/")
and href.split("/")[-1] != category.upper())
if is_detail and href not in seen:
full_url = urljoin(BASE_URL, href)
seen.add(href)
# Extract regulation number from URL
filename = href.split("/")[-1]
detail_urls.append({
"detail_url": full_url,
"title": text[:200] if text else filename,
"filename": filename,
"category": category,
})
logger.info("Found %d detail pages for %s", len(detail_urls), category.upper())
return detail_urls
def extract_pdf_url(page, detail: dict) -> dict:
"""Visit detail page and extract PDF download link."""
try:
page.goto(detail["detail_url"], wait_until="networkidle", timeout=30000)
time.sleep(2)
# Strategy 1: Direct PDF link
pdf_links = page.query_selector_all('a[href$=".pdf"]')
for link in pdf_links:
href = link.get_attribute("href") or ""
if href:
detail["pdf_url"] = urljoin(BASE_URL, href)
return detail
# Strategy 2: Download button with data attribute
download_btns = page.query_selector_all("[data-download-url]")
for btn in download_btns:
url = btn.get_attribute("data-download-url") or ""
if url and ".pdf" in url:
detail["pdf_url"] = urljoin(BASE_URL, url)
return detail
# Strategy 3: Links containing "pdf" or "download"
all_links = page.query_selector_all("a[href]")
for link in all_links:
href = link.get_attribute("href") or ""
text = (link.inner_text() or "").lower()
if (".pdf" in href or "download" in text) and href:
detail["pdf_url"] = urljoin(BASE_URL, href)
return detail
# Strategy 4: Check for blob/dynamic download
download_links = page.query_selector_all(
'a[href*="blob"], a[href*="download"], a[href*="__blob"]'
)
for link in download_links:
href = link.get_attribute("href") or ""
if href:
detail["pdf_url"] = urljoin(BASE_URL, href)
return detail
logger.warning("No PDF found for %s", detail["filename"])
detail["pdf_url"] = None
return detail
except Exception as e:
logger.error("Error on %s: %s", detail["detail_url"], e)
detail["pdf_url"] = None
return detail
def download_pdf(page, detail: dict, output_dir: Path) -> dict:
"""Download PDF and compute hash."""
if not detail.get("pdf_url"):
return detail
cat = detail["category"]
safe_name = re.sub(r"[^a-zA-Z0-9_\-]", "_", detail["filename"]).lower()
pdf_path = output_dir / cat / f"{safe_name}.pdf"
pdf_path.parent.mkdir(parents=True, exist_ok=True)
if pdf_path.exists():
logger.info(" Already exists: %s", pdf_path.name)
detail["local_path"] = str(pdf_path)
detail["sha256"] = hashlib.sha256(pdf_path.read_bytes()).hexdigest()
return detail
try:
with page.expect_download(timeout=60000) as download_info:
page.goto(detail["pdf_url"], timeout=30000)
download = download_info.value
download.save_as(str(pdf_path))
except Exception:
# Fallback: direct download via response
try:
response = page.request.get(detail["pdf_url"])
if response.ok:
pdf_path.write_bytes(response.body())
else:
logger.error(" Download failed: %s (HTTP %d)",
detail["filename"], response.status)
return detail
except Exception as e:
logger.error(" Download failed: %s%s", detail["filename"], e)
return detail
size = pdf_path.stat().st_size
detail["local_path"] = str(pdf_path)
detail["sha256"] = hashlib.sha256(pdf_path.read_bytes()).hexdigest()
detail["size_bytes"] = size
logger.info(" Downloaded: %s (%.1f KB)", pdf_path.name, size / 1024)
return detail
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--category", choices=["trbs", "trgs", "asr"],
help="Only crawl one category")
parser.add_argument("--dry-run", action="store_true",
help="List PDFs without downloading")
parser.add_argument("--headless", action="store_true", default=True)
parser.add_argument("--no-headless", action="store_true")
args = parser.parse_args()
headless = not args.no_headless
categories = [args.category] if args.category else list(CATEGORIES.keys())
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
registry = []
with sync_playwright() as p:
browser = p.chromium.launch(headless=headless)
context = browser.new_context(
user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0.0.0 Safari/537.36"
)
page = context.new_page()
for cat in categories:
config = CATEGORIES[cat]
logger.info("\n=== %s ===", cat.upper())
# Step 1: Crawl index
details = crawl_index(page, cat, config)
# Step 2: Extract PDF URLs
for i, detail in enumerate(details):
logger.info("[%d/%d] %s", i + 1, len(details), detail["filename"])
extract_pdf_url(page, detail)
time.sleep(1) # Be polite
# Step 3: Download PDFs
if not args.dry_run:
for detail in details:
download_pdf(page, detail, OUTPUT_DIR)
time.sleep(0.5)
# Add metadata
for detail in details:
detail["source_type"] = config["source_type"]
detail["legal_basis"] = config["legal_basis"]
detail["license_rule"] = 1 # §5 UrhG, gemeinfrei
detail["jurisdiction"] = "DE"
registry.extend(details)
browser.close()
# Save registry
REGISTRY_FILE.write_text(json.dumps(registry, indent=2, ensure_ascii=False))
logger.info("\nRegistry saved: %s (%d entries)", REGISTRY_FILE, len(registry))
# Summary
total = len(registry)
with_pdf = sum(1 for r in registry if r.get("pdf_url"))
downloaded = sum(1 for r in registry if r.get("local_path"))
logger.info("Total: %d | PDF found: %d | Downloaded: %d", total, with_pdf, downloaded)
if __name__ == "__main__":
main()
@@ -0,0 +1,119 @@
#!/usr/bin/env python3
"""
Ingest downloaded TRBS/TRGS/ASR PDFs into Qdrant via RAG Service.
Reads the source_registry.json and uploads each PDF to the RAG service.
Usage:
python3 ingest_to_qdrant.py # ingest all
python3 ingest_to_qdrant.py --category trbs # only TRBS
python3 ingest_to_qdrant.py --dry-run # list without uploading
"""
import argparse
import json
import logging
import time
from pathlib import Path
import httpx
logging.basicConfig(
level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s"
)
logger = logging.getLogger("ingest-trbs")
REGISTRY_FILE = Path(__file__).parent / "source_registry.json"
RAG_URL = "https://macmini:8097/api/v1/documents/upload"
COLLECTION = "bp_compliance_ce" # Same collection as other CE documents
def ingest_pdf(entry: dict) -> dict:
"""Upload a single PDF to the RAG service."""
local_path = entry.get("local_path", "")
if not local_path or not Path(local_path).exists():
return {"status": "skipped", "reason": "no local file"}
pdf_path = Path(local_path)
category = entry.get("category", "unknown")
filename = entry.get("filename", pdf_path.name)
title = entry.get("title", filename)
metadata = {
"source": title,
"regulation_id": f"{category}_{filename}".lower().replace("-", "_"),
"jurisdiction": "DE",
"source_type": "technical_rule",
"license_rule": 1,
"category": category,
"legal_basis": entry.get("legal_basis", ""),
}
try:
with open(pdf_path, "rb") as f:
files = {"file": (pdf_path.name, f, "application/pdf")}
data = {
"collection": COLLECTION,
"data_type": "legal",
"use_case": "compliance",
"year": "2026",
"chunk_size": "512",
"chunk_overlap": "50",
"metadata_json": json.dumps(metadata),
}
resp = httpx.post(RAG_URL, files=files, data=data, timeout=300.0, verify=False)
resp.raise_for_status()
result = resp.json()
return {
"status": "ok",
"document_id": result.get("document_id", ""),
"chunks": result.get("chunks_count", 0),
}
except Exception as e:
return {"status": "error", "reason": str(e)}
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--category", choices=["trbs", "trgs", "asr"])
parser.add_argument("--dry-run", action="store_true")
args = parser.parse_args()
registry = json.loads(REGISTRY_FILE.read_text())
if args.category:
registry = [e for e in registry if e.get("category") == args.category]
logger.info("Ingesting %d documents into Qdrant (%s)", len(registry), COLLECTION)
total_ok = 0
total_chunks = 0
total_err = 0
for i, entry in enumerate(registry):
if not entry.get("local_path"):
continue
if args.dry_run:
logger.info("[%d/%d] %s%s (dry-run)",
i + 1, len(registry), entry["filename"], entry.get("title", "")[:60])
continue
logger.info("[%d/%d] %s", i + 1, len(registry), entry["filename"])
result = ingest_pdf(entry)
if result["status"] == "ok":
total_ok += 1
total_chunks += result["chunks"]
logger.info("%d chunks indexed", result["chunks"])
else:
total_err += 1
logger.error("%s: %s", result["status"], result.get("reason", ""))
time.sleep(1) # Be gentle
logger.info("\nDone: %d OK (%d chunks), %d errors, %d total",
total_ok, total_chunks, total_err, len(registry))
if __name__ == "__main__":
main()
File diff suppressed because it is too large Load Diff
+114
View File
@@ -0,0 +1,114 @@
# Urteile zum Download — Priorisiert nach Scannbarkeit
## Prioritaet 1: Website-scannbar (11 Urteile)
### 1. LG Muenchen I — Google Fonts
- Az: 3 O 17493/20 (20.01.2022)
- URL: https://www.gesetze-bayern.de/Content/Document/Y-300-Z-GRURRS-B-2022-N-612
- Scanner: fonts.googleapis.com, fonts.gstatic.com im HTML
### 2. DSB Oesterreich — Google Analytics
- Az: D155.027 (22.12.2021)
- URL: https://noyb.eu/de/oesterreichische-dsb-eu-us-datenuebermittlung-google-analytics-illegal
- Originalbescheid: https://noyb.eu/sites/default/files/2022-01/E-Bescheid%20%20redacted.pdf
- Scanner: google-analytics.com, gtag/js, analytics.js
### 3. CNIL — Cookie-Banner 150 Mio
- Sanktionsbescheid gegen Google (31.12.2021)
- URL: https://www.cnil.fr/en/cookies-cnil-fines-google-150-million-euros
- Scanner: Cookie-Banner DOM (Ablehnen vs Akzeptieren Button-Paritaet)
### 4. BGH — Planet49 / Opt-In
- Az: I ZR 7/16 (28.05.2020, nach EuGH C-673/17)
- URL: https://juris.bundesgerichtshof.de/cgi-bin/rechtsprechung/document.py?Gericht=bgh&Art=en&nr=107124
- Scanner: Cookies vor Consent, vorausgefuellte Checkboxen
### 5. EuGH — Schrems II
- Az: C-311/18 (16.07.2020)
- URL: https://curia.europa.eu/juris/liste.jsf?num=C-311/18
- Scanner: HTTP-Requests an US-Server (IP-Geolocation)
### 6. OLG Koeln — Dark Patterns Cookie-Banner
- Az: 6 U 58/21 (19.11.2021)
- Scanner: Button-Groesse, Farbe, Hierarchie im Consent-Banner
### 7. EuGH — Button-Loesung (Amazon)
- Az: C-649/17 (07.04.2022)
- Scanner: Bestell-Button Text ("zahlungspflichtig bestellen"?)
### 8. BGH — Impressum Social Media
- Az: I ZR 169/22 (09.09.2021)
- Scanner: Vollstaendiges Impressum innerhalb 2 Klicks
### 9. BGH — Grundpreis PAngV
- Az: I ZR 46/20 (20.01.2022)
- Scanner: Grundpreis neben Endpreis bei mengenbasierten Produkten
### 10. LG Berlin — Datenschutzerklaerung Vollstaendigkeit
- Az: 16 O 341/15
- Scanner: Art. 13/14 DSGVO Pflichtangaben in DSE
### 11. DSK — Telemedien Orientierungshilfe
- Bereits im RAG als: dsk_oh_telemedien (589 Chunks)
- KEIN Download noetig ✅
## Prioritaet 2: Dokument/Prozess-Checks (8 Urteile)
### 12. EuGH — SCHUFA Scoring / Art. 22
- Az: C-634/21 (07.12.2023)
- URL: https://curia.europa.eu/juris/liste.jsf?num=C-634/21
### 13. BAG — Zeiterfassung
- Az: 1 ABR 22/21 (13.09.2022)
- Bereits im RAG als: bag_1_abr_22_21 (237 Chunks)
- KEIN Download noetig ✅
### 14. EuGH — Schadensersatz bei Datenleck (Befuerchtung reicht)
- Az: C-340/21 (14.12.2023)
- URL: https://curia.europa.eu/juris/liste.jsf?num=C-340/21
### 15. EuGH — Meta / Berechtigtes Interesse
- Az: C-252/21 (04.07.2023)
- URL: https://curia.europa.eu/juris/liste.jsf?num=C-252/21
### 16. LAG Hamm — Microsoft 365 Mitbestimmung
- Az: 11 Sa 1108/22 (20.06.2023)
### 17. OLG Muenchen — Widerrufsbelehrung
- Az: 29 U 2698/19
### 18. BVerfG — Recht auf Vergessenwerden
- Az: 1 BvR 1547/19 (06.11.2019)
### 19. 1&1 Bussgeld (BfDI)
- 9,55 Mio EUR (09.12.2019)
- Unzureichende Authentifizierung im Kundenservice
### 20. BFSG/EAA
- Bereits im RAG als: bfsg (219 Chunks)
- KEIN Download noetig ✅
## Bereits im RAG vorhanden (kein Download):
- dsk_oh_telemedien (589 Chunks) ✅
- bag_1_abr_22_21 — Zeiterfassung (237 Chunks) ✅
- bfsg (219 Chunks) ✅
- 13 weitere BAG-Urteile ✅
## Download-Status:
- [ ] 1. Google Fonts
- [ ] 2. Google Analytics (DSB AT)
- [ ] 3. CNIL Cookie-Banner
- [ ] 4. BGH Planet49
- [ ] 5. EuGH Schrems II
- [ ] 6. OLG Koeln Dark Patterns
- [ ] 7. EuGH Button-Loesung
- [ ] 8. BGH Impressum
- [ ] 9. BGH Grundpreis
- [ ] 10. LG Berlin DSE
- [ ] 12. EuGH SCHUFA
- [ ] 14. EuGH Schadensersatz Datenleck
- [ ] 15. EuGH Meta
- [ ] 16. LAG Hamm M365
- [ ] 17. OLG Muenchen Widerruf
- [ ] 18. BVerfG Vergessenwerden
- [ ] 19. 1&1 Bussgeld
@@ -0,0 +1,28 @@
URTEIL DES GERICHTSHOFS (Dritte Kammer)
4. Mai 2023
Rechtssache C-300/21 — UI gegen Oesterreichische Post AG
TENOR:
1. Art. 82 Abs. 1 der Verordnung (EU) 2016/679 (DSGVO) ist dahin auszulegen, dass der blosse Verstoss gegen die Bestimmungen dieser Verordnung nicht ausreicht, um einen Schadenersatzanspruch zu begruenden.
2. Art. 82 Abs. 1 der DSGVO ist dahin auszulegen, dass er einer nationalen Regelung oder Praxis entgegensteht, die den Ersatz eines immateriellen Schadens davon abhaengig macht, dass der der betroffenen Person entstandene Schaden einen bestimmten Grad an Erheblichkeit erreicht hat.
3. Art. 82 der DSGVO ist dahin auszulegen, dass die nationalen Gerichte bei der Festsetzung der Hoehe des Schadenersatzes die innerstaatlichen Vorschriften anzuwenden haben, sofern die unionsrechtlichen Grundsaetze der Aequivalenz und der Effektivitaet beachtet werden.
KERNAUSSAGEN:
- DSGVO-Verstoss allein begruendet KEINEN Schadenersatzanspruch — es braucht einen konkreten Schaden
- Aber: KEINE Erheblichkeitsschwelle fuer immateriellen Schaden (jeder nachweisbare Schaden genuegt)
- 3 kumulative Voraussetzungen fuer Art. 82: Verstoss + Schaden + Kausalzusammenhang
- "Schaden" ist weit auszulegen (146. Erwaegungsgrund DSGVO)
- Kein Strafschadensersatz — nur Ausgleichsfunktion (vollstaendiger und wirksamer Ersatz)
- Nationale Gerichte wenden nationales Recht fuer die Hoehe an (Verfahrensautonomie)
- Grundsaetze der Aequivalenz und Effektivitaet muessen beachtet werden
- Unangenehme Gefuehle koennen immateriellen Schaden darstellen (keine Bagatellgrenze)
RELEVANTE NORMEN:
- Art. 82 DSGVO (Haftung und Recht auf Schadenersatz)
- Art. 83 DSGVO (Geldbussen — ergaenzt Schadenersatz, aber eigenstaendig)
- Art. 84 DSGVO (Sanktionen)
- Erwaegungsgrund 146 DSGVO (weite Auslegung des Schadensbegriffs)
- Erwaegungsgruende 75, 85 DSGVO (moegliche Schaeden)
@@ -0,0 +1,44 @@
URTEIL DES GERICHTSHOFS (Grosse Kammer)
16. Juli 2020
Rechtssache C-311/18 — Data Protection Commissioner gegen Facebook Ireland Ltd, Maximillian Schrems
TENOR:
1. Art. 2 Abs. 1 und 2 der Verordnung (EU) 2016/679 (DSGVO) ist dahin auszulegen, dass eine zu gewerblichen Zwecken erfolgende Uebermittlung personenbezogener Daten durch einen in einem Mitgliedstaat ansaessigen Wirtschaftsteilnehmer an einen anderen, in einem Drittland ansaessigen Wirtschaftsteilnehmer in den Anwendungsbereich dieser Verordnung faellt, ungeachtet dessen, ob die Daten bei ihrer Uebermittlung oder im Anschluss daran von den Behoerden des betreffenden Drittlands fuer Zwecke der oeffentlichen Sicherheit, der Landesverteidigung und der Sicherheit des Staates verarbeitet werden koennen.
2. Art. 46 Abs. 1 und Art. 46 Abs. 2 Buchst. c der DSGVO sind dahin auszulegen, dass die nach diesen Vorschriften erforderlichen geeigneten Garantien, durchsetzbaren Rechte und wirksamen Rechtsbehelfe gewaehrleisten muessen, dass die Rechte der Personen, deren personenbezogene Daten auf der Grundlage von Standarddatenschutzklauseln in ein Drittland uebermittelt werden, ein Schutzniveau geniessen, das dem in der EU durch die DSGVO im Licht der Charta garantierten Niveau der Sache nach gleichwertig ist.
3. Art. 58 Abs. 2 Buchst. f und j der DSGVO ist dahin auszulegen, dass die zustaendige Aufsichtsbehoerde verpflichtet ist, eine auf Standarddatenschutzklauseln gestuetzte Uebermittlung personenbezogener Daten in ein Drittland auszusetzen oder zu verbieten, wenn die Klauseln in diesem Drittland nicht eingehalten werden oder nicht eingehalten werden koennen und der nach dem Unionsrecht erforderliche Schutz nicht mit anderen Mitteln gewaehrleistet werden kann.
4. Die Pruefung des Beschlusses 2010/87/EU (Standardvertragsklauseln) anhand der Art. 7, 8 und 47 der Charta hat nichts ergeben, was seine Gueltigkeit beruehren koennte.
5. Der Durchfuehrungsbeschluss (EU) 2016/1250 (EU-US-Datenschutzschild / Privacy Shield) ist UNGUELTIG.
KERNAUSSAGEN:
- Privacy Shield (EU-US-Datenschutzschild) ist ungueltig
- US-Ueberwachungsprogramme (PRISM, UPSTREAM via Section 702 FISA + E.O. 12333) verstoessen gegen EU-Grundrechte
- Weder Section 702 FISA noch E.O. 12333 genuegen dem Verhaeltnismaessigkeitsgrundsatz
- PPD-28 verleiht betroffenen EU-Buergern keine durchsetzbaren Rechte
- Die Ombudsperson des Datenschutzschilds ist KEIN unabhaengiges Gericht i.S.v. Art. 47 Charta
- Standardvertragsklauseln (SCCs) bleiben gueltig, ABER:
- Der Verantwortliche muss VOR der Uebermittlung pruefen ob das Drittland angemessenen Schutz bietet
- Ggf. muessen zusaetzliche Massnahmen ergriffen werden
- Wenn kein angemessener Schutz moeglich: Uebermittlung aussetzen/verbieten
- Aufsichtsbehoerden sind VERPFLICHTET Uebermittlungen zu verbieten wenn Schutz nicht gewaehrleistet
- DSGVO gilt auch wenn Drittland-Behoerden Daten fuer nationale Sicherheit nutzen koennten
RELEVANTE NORMEN:
- Art. 44-49 DSGVO (Uebermittlungen in Drittlaender)
- Art. 45 DSGVO (Angemessenheitsbeschluss)
- Art. 46 DSGVO (Geeignete Garantien / Standardvertragsklauseln)
- Art. 58 Abs. 2 DSGVO (Befugnisse der Aufsichtsbehoerden)
- Art. 7, 8, 47 EU-Grundrechtecharta
- Art. 52 Abs. 1 EU-Grundrechtecharta (Verhaeltnismaessigkeit)
- Section 702 FISA (US-Auslandsaufklaerung)
- Executive Order 12333 (US-Nachrichtendienste)
- PPD-28 (Presidential Policy Directive)
AUSWIRKUNGEN:
- Jede Datenuebermittlung in die USA muss einzeln geprueft werden (Transfer Impact Assessment)
- Zusaetzliche technische Massnahmen (z.B. Verschluesselung) erforderlich
- Nachfolger: EU-US Data Privacy Framework (2023)
@@ -0,0 +1,30 @@
URTEIL DES GERICHTSHOFS (Erste Kammer)
7. Dezember 2023
Vorlage zur Vorabentscheidung Schutz natuerlicher Personen bei der Verarbeitung personenbezogener Daten Verordnung (EU) 2016/679 Art. 22 Automatisierte Entscheidung im Einzelfall Wirtschaftsauskunfteien Automatisierte Erstellung eines Wahrscheinlichkeitswerts in Bezug auf die Faehigkeit einer Person zur Erfuellung kuenftiger Zahlungsverpflichtungen (Scoring) Verwendung dieses Wahrscheinlichkeitswerts durch Dritte
In der Rechtssache C-634/21 — OQ gegen Land Hessen, Beteiligte: SCHUFA Holding AG
TENOR:
Art. 22 Abs. 1 der Verordnung (EU) 2016/679 (DSGVO) ist dahin auszulegen, dass eine automatisierte Entscheidung im Einzelfall im Sinne dieser Bestimmung vorliegt, wenn ein auf personenbezogene Daten zu einer Person gestuetzter Wahrscheinlichkeitswert in Bezug auf deren Faehigkeit zur Erfuellung kuenftiger Zahlungsverpflichtungen durch eine Wirtschaftsauskunftei automatisiert erstellt wird, sofern von diesem Wahrscheinlichkeitswert massgeblich abhaengt, ob ein Dritter, dem dieser Wahrscheinlichkeitswert uebermittelt wird, ein Vertragsverhaeltnis mit dieser Person begruendet, durchfuehrt oder beendet.
KERNAUSSAGEN:
- SCHUFA-Scoring ist eine automatisierte Entscheidung im Einzelfall gemaess Art. 22 DSGVO
- Der Score-Wert selbst ist bereits die "Entscheidung" (nicht erst die Handlung des Dritten)
- Art. 22 DSGVO stellt ein grundsaetzliches VERBOT automatisierter Entscheidungen auf
- Ausnahmen nur nach Art. 22 Abs. 2 DSGVO (Vertrag, Rechtsvorschrift, Einwilligung)
- Betroffene haben Recht auf Auskunft ueber die involvierte Logik (Art. 15 Abs. 1 Buchst. h)
- Nationale Regelungen (wie § 31 BDSG) muessen Art. 5, 6 und 22 DSGVO genuegen
- Enge Auslegung wuerde zu Rechtsschutzluecke fuehren (3-Akteure-Problem)
- Angemessene Massnahmen: Recht auf menschliches Eingreifen, Darlegung des Standpunkts, Anfechtung
RELEVANTE NORMEN:
- Art. 22 DSGVO (Automatisierte Entscheidungen im Einzelfall)
- Art. 4 Nr. 4 DSGVO (Definition Profiling)
- Art. 15 Abs. 1 Buchst. h DSGVO (Auskunftsrecht bei automatisierter Entscheidung)
- Art. 13 Abs. 2 Buchst. f DSGVO (Informationspflicht)
- Art. 5 DSGVO (Grundsaetze der Verarbeitung)
- Art. 6 DSGVO (Rechtmaessigkeit)
- § 31 BDSG (Scoring — Vereinbarkeit mit EU-Recht zweifelhaft)
@@ -0,0 +1,19 @@
URTEIL DES GERICHTSHOFS (Große Kammer)
1. Oktober 2019
Vorlage zur Vorabentscheidung Richtlinie 95/46/EG Richtlinie 2002/58/EG Verordnung (EU) 2016/679 Verarbeitung personenbezogener Daten und Schutz der Privatsphäre in der elektronischen Kommunikation Cookies Begriff der Einwilligung der betroffenen Person Einwilligungserklaerung mittels eines mit einem voreingestellten Haekchen versehenen Ankreuzkaestchens
In der Rechtssache C-673/17
Bundesverband der Verbraucherzentralen und Verbraucherverbände Verbraucherzentrale Bundesverband e. V. gegen Planet49 GmbH
TENOR:
1. Art. 2 Buchst. f und Art. 5 Abs. 3 der Richtlinie 2002/58/EG in Verbindung mit Art. 2 Buchst. h der Richtlinie 95/46/EG bzw. mit Art. 4 Nr. 11 und Art. 6 Abs. 1 Buchst. a der Verordnung 2016/679 sind dahin auszulegen, dass keine wirksame Einwilligung im Sinne dieser Bestimmungen vorliegt, wenn die Speicherung von Informationen oder der Zugriff auf Informationen, die bereits im Endgeraet des Nutzers einer Website gespeichert sind, mittels Cookies durch ein voreingestelltes Ankreuzkaestchen erlaubt wird, das der Nutzer zur Verweigerung seiner Einwilligung abwaehlen muss.
2. Art. 2 Buchst. f und Art. 5 Abs. 3 der Richtlinie 2002/58 sind nicht unterschiedlich auszulegen, je nachdem, ob es sich bei den im Endgeraet des Nutzers einer Website gespeicherten oder abgerufenen Informationen um personenbezogene Daten handelt oder nicht.
3. Art. 5 Abs. 3 der Richtlinie 2002/58 ist dahin auszulegen, dass Angaben zur Funktionsdauer der Cookies und dazu, ob Dritte Zugriff auf die Cookies erhalten koennen, zu den Informationen zaehlen, die der Diensteanbieter dem Nutzer einer Website zu geben hat.
Verkuendet in oeffentlicher Sitzung in Luxemburg am 1. Oktober 2019.
@@ -0,0 +1,29 @@
# LG München I — Google Fonts Urteil
# Az: 3 O 17493/20 (20.01.2022)
# Quelle: gesetze-bayern.de
## Tenor (Entscheidung)
1. Die Beklagte wird verurteilt, es zu unterlassen, die dynamische IP-Adresse des Klägers an Google weiterzugeben, wenn der Kläger die Website der Beklagten aufruft, ohne dass der Kläger in die Weitergabe eingewilligt hat. Androhung: Ordnungsgeld bis 250.000 EUR oder Ordnungshaft bis 6 Monate.
2. Die Beklagte wird verurteilt, dem Kläger Auskunft zu erteilen, welche personenbezogenen Daten über ihn verarbeitet werden.
3. Die Beklagte wird verurteilt, 100 EUR Schmerzensgeld nebst Zinsen zu zahlen.
## Kernbegruendung
**DSGVO-Verstoss durch IP-Uebermittlung:** Das Gericht stellte fest, dass die automatische Uebermittlung dynamischer IP-Adressen an Google beim Laden von Google Fonts das Recht auf informationelle Selbstbestimmung (Art. 823 BGB) und Art. 6 Abs. 1 DSGVO verletzt.
**IP-Adressen = personenbezogene Daten:** Dynamische IP-Adressen sind personenbezogene Daten, weil der Website-Betreiber ueber den abstrakten rechtlichen Weg (Behoerden, Provider) die Identifikation der Person erreichen kann.
**Kein berechtigtes Interesse:** Das berechtigte Interesse der Beklagten scheitert, weil "Google Fonts auch genutzt werden kann, ohne dass beim Aufruf der Webseite eine Verbindung zu Google-Servern hergestellt wird und die IP-Adresse der Webseitenbesucher uebertragen wird." (lokales Hosting moeglich)
## Compliance-Anforderung
Website-Betreiber muessen Google Fonts lokal hosten oder Alternativen verwenden, die keine automatische IP-Uebermittlung an externe Server ohne explizite Einwilligung verursachen.
## Scanner-Pruefpunkte
- HTML pruefen auf: fonts.googleapis.com, fonts.gstatic.com
- CSS pruefen auf: @import url('https://fonts.googleapis.com/...')
- JS pruefen auf: WebFont.load mit google-Provider
- Wenn gefunden: FAIL — externer Google Fonts Einbindung ohne Consent