fix(cra): Konformitätspfad-Kacheln korrekt benennen + Gating nach CRA Art. 32

(a) Labels: Module korrekt zugeordnet — Modul A = Selbstbewertung, Modul B+C =
    benannte Stelle, EUCC = eigenes Zertifikat (nicht Modul H), "harmonisierte
    Norm" ist kein Modul sondern Konformitätsvermutung. Für den CRA noch KEINE
    harmonisierte Norm veröffentlicht → Kachel als "noch nicht verfügbar"
    (erwartet ~2027), nicht wählbar, mit Hinweis. (page/path/documents-Labels.)
(b) Gating: wichtige Klasse II + kritische Produkte dürfen NICHT selbst bewerten;
    harmonisierte Norm allein genügt dort nicht → ALLOWED_PATHS IMPORTANT_II/
    CRITICAL = {eucc, notified_body}; DEFAULT_FOR II = notified_body. _PATH_HINT
    entsprechend. Regressionstest test_cra_conformity_paths.py.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-06-15 13:49:00 +02:00
parent e1f89f6226
commit 731076835d
8 changed files with 105 additions and 61 deletions
@@ -67,13 +67,16 @@ ANNEX_III_CLASS_I = [
CLASSIFICATIONS = {"NOT_IN_SCOPE", "STANDARD", "IMPORTANT_I", "IMPORTANT_II", "CRITICAL"}
CONFORMITY_PATHS = {"self_assessment", "harmonized_standard", "eucc", "notified_body"}
# Allowed paths per classification (CRITICAL must use notified_body)
# Allowed paths per classification (CRA Art. 32 / Anhang VIII).
# IMPORTANT_II darf NICHT selbst bewerten — eine harmonisierte Norm allein genuegt
# hier nicht; es braucht benannte Stelle (Modul B+C/H) oder EUCC. CRITICAL ebenso,
# mit EUCC als regulaerem Weg.
ALLOWED_PATHS = {
"NOT_IN_SCOPE": set(),
"STANDARD": {"self_assessment", "harmonized_standard", "eucc", "notified_body"},
"IMPORTANT_I": {"self_assessment", "harmonized_standard", "eucc", "notified_body"},
"IMPORTANT_II": {"harmonized_standard", "eucc", "notified_body"},
"CRITICAL": {"notified_body"},
"IMPORTANT_II": {"eucc", "notified_body"},
"CRITICAL": {"eucc", "notified_body"},
}
STATUS_WHITELIST = {