DACH
SDB-Plausibilitätsprüfung und TRGS 400
Welche Prüfpunkte bei einem Sicherheitsdatenblatt sich maschinell vorprüfen lassen und welche eine fachkundige Person beurteilen muss.
Letzte Aktualisierung: 2026-10-24
Hinweis. Diese Seite ist keine Rechtsberatung. Maßgeblich ist jeweils der aktuelle Wortlaut der genannten Vorschriften; klären Sie nationale Anforderungen mit der zuständigen Behörde oder einer fachkundigen Person.
Worum es in der TRGS 400 geht
Die TRGS 400 (Gefährdungsbeurteilung für Tätigkeiten mit Gefahrstoffen) konkretisiert die Gefahrstoffverordnung. Zur Gefährdungsbeurteilung gehört die Ermittlung von Informationen über die verwendeten Stoffe, und das Sicherheitsdatenblatt ist dafür eine zentrale Quelle. Wie diese Informationen zu ermitteln, zu prüfen und zu bewerten sind, steht in der aktuellen Fassung der TRGS 400; lesen Sie dort nach.
Typische Prüfpunkte bei einem SDB
| Prüfpunkt | Frage | Maschinell vorprüfbar? |
|---|---|---|
| Vollständigkeit | Sind alle 16 Abschnitte vorhanden und befüllt? | Ja: leere Abschnitte lassen sich zählen. |
| Formale Konsistenz | Haben H-Sätze und CAS-Nummern ein gültiges Format? | Ja: Format und CAS-Prüfziffer. |
| Einstufung und Kennzeichnung | Gibt es zu einer Einstufung ein Signalwort? | Teilweise: Vorhandensein ja, Richtigkeit nein. |
| Aktualität | Hat das SDB ein Revisionsdatum? | Ja: Vorhandensein und Format; die Bewertung bleibt bei Ihnen. |
| Inhaltliche Richtigkeit | Passt die Einstufung zur Zusammensetzung und zu den Stoffdaten? | Nein: Aufgabe einer fachkundigen Person. |
Skript: formale Vorprüfung
Das Skript prüft einen outputs.json-Datensatz auf leere Abschnitte, erkennbare H-Sätze (einschließlich EUH und kombinierter Sätze wie H300+H310), die CAS-Prüfziffer, ein Signalwort bei vorhandener Einstufung und ein ISO-Revisionsdatum:
import re
from datetime import date
H_SATZ = re.compile(r"^(EUH\d{3}|H\d{3}[A-Za-z]{0,2}(\+H\d{3}[A-Za-z]{0,2})*)$")
SIGNALWOERTER = {"gefahr", "achtung", "danger", "warning"}
ABSCHNITTE = [
"product_identification", "hazards_identification", "composition", "first_aid", "fire_fighting",
"accidental_release", "handling_storage", "exposure_controls_ppe", "physical_chemical_properties",
"stability_reactivity", "toxicological_information", "ecological_information", "disposal_considerations",
"transport_information", "regulatory_information", "revision_metadata",
]
def cas_gueltig(cas):
"""Prüft das CAS-Format (xxxxxxx-yy-z) und die Prüfziffer."""
teile = cas.strip().split("-")
if len(teile) != 3 or not all(t.isdigit() for t in teile) or len(teile[2]) != 1:
return False
ziffern = (teile[0] + teile[1])[::-1]
pruefsumme = sum(int(z) * (position + 1) for position, z in enumerate(ziffern))
return pruefsumme % 10 == int(teile[2])
def pruefe_sdb(sdb):
"""Gibt eine Liste von Auffälligkeiten zurück (leere Liste = nichts aufgefallen)."""
befunde = []
leer = [name for name in ABSCHNITTE if sdb.get(name) in (None, "", [], {})]
if leer:
befunde.append("leere Abschnitte: " + ", ".join(leer))
gefahren = sdb.get("hazards_identification") or {}
for satz in gefahren.get("h_statements") or []:
kennung = str(satz).split()[0] if str(satz).strip() else ""
if not H_SATZ.match(kennung):
befunde.append(f"H-Satz nicht erkennbar: {satz!r}")
signalwort = str(gefahren.get("signal_word") or "").strip().lower()
if (gefahren.get("ghs_classification") or gefahren.get("h_statements")) and signalwort not in SIGNALWOERTER:
befunde.append("Einstufung vorhanden, aber kein Signalwort (Gefahr oder Achtung)")
for stoff in sdb.get("composition") or []:
cas = str(stoff.get("cas_number") or "").strip()
if cas and not cas_gueltig(cas):
befunde.append(f"CAS-Nummer mit ungültiger Prüfziffer: {cas}")
datum = str((sdb.get("revision_metadata") or {}).get("revision_date") or "")
try:
date.fromisoformat(datum)
except ValueError:
befunde.append(f"Revisionsdatum fehlt oder ist kein ISO-Datum: {datum!r}")
return befunde
Ein Dokument ohne Befund ist formal unauffällig, nicht inhaltlich richtig. Das Skript ersetzt keine Beurteilung durch eine fachkundige Person. Die Feldnamen innerhalb der Abschnitte stammen aus einer Beispielantwort; passen Sie sie an Ihre Dokumente an.
So fügt es sich in den Ablauf ein
- Dokument über die API verarbeiten und
outputs.jsonspeichern. - Formale Vorprüfung ausführen. Dokumente mit Befund, Warnungen oder niedriger Konfidenz gehen zur Prüfung.
- Die fachkundige Person beurteilt Einstufung und Inhalt gegen das Original und dokumentiert die Entscheidung.
- Nur geprüfte Datensätze fließen in Gefahrstoffverzeichnis und Gefährdungsbeurteilung.
Häufige Fragen
Erfüllt die API die Anforderungen der TRGS 400?
Nein, das behaupten wir nicht. Die API liefert strukturierte Daten aus dem SDB und Signale wie Konfidenz und Warnungen. Die Gefährdungsbeurteilung und die Bewertung der Informationen bleiben Aufgabe des Arbeitgebers und fachkundiger Personen.
Was bedeutet ein Befund aus dem Skript?
Ein Befund ist ein Hinweis, das Dokument genauer anzusehen, etwa weil eine CAS-Prüfziffer nicht stimmt. Er ist kein Beweis für einen Fehler im SDB; auch die Extraktion kann sich irren.
Kann ich die Prüfpunkte erweitern?
Ja. Das Skript ist ein Ausgangspunkt, den Sie um eigene Regeln ergänzen können, zum Beispiel um Pflichtfelder Ihres Gefahrstoffmanagements.
Verwandte Seiten
- SDB-Digitalisierung und Gefahrstoffverzeichnis
- GHS-Einstufung aus dem SDB extrahieren
- DACH Übersicht
- Field coverage matrix (English)