diff --git a/ai-compliance-sdk/internal/iace/measures_library.go b/ai-compliance-sdk/internal/iace/measures_library.go index 3fbc35d..60e4896 100644 --- a/ai-compliance-sdk/internal/iace/measures_library.go +++ b/ai-compliance-sdk/internal/iace/measures_library.go @@ -11,6 +11,7 @@ func GetProtectiveMeasureLibrary() []ProtectiveMeasureEntry { all = append(all, getDesignMeasures()...) all = append(all, getProtectiveMeasures()...) all = append(all, getInformationMeasures()...) + all = append(all, GetMandatoryNormMeasures()...) // Norm-Pflichtmassnahmen return all } diff --git a/ai-compliance-sdk/internal/iace/measures_library_mandatory.go b/ai-compliance-sdk/internal/iace/measures_library_mandatory.go new file mode 100644 index 0000000..6c46fd5 --- /dev/null +++ b/ai-compliance-sdk/internal/iace/measures_library_mandatory.go @@ -0,0 +1,61 @@ +package iace + +// GetMandatoryNormMeasures returns protective measures that are REQUIRED +// by specific harmonized standards. These are not optional risk reductions +// but mandatory requirements that must be implemented when the referenced +// norm is applied. Deviating from these requires the manufacturer to +// independently prove equivalent safety (loss of presumption of conformity). +func GetMandatoryNormMeasures() []ProtectiveMeasureEntry { + return []ProtectiveMeasureEntry{ + // ── Pressen (EN 692, EN 693, ISO 16092) ───────────────────── + {ID: "MN001", ReductionType: "protective", SubType: "safety_control", Name: "Zweihandschaltung Typ IIIC", Description: "Zweihandschaltung nach EN 574 Typ IIIC fuer Pressen mit Handbeschickung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 692 Kap. 5.3.3", NormReferences: []string{"EN 692", "EN 574"}}, + {ID: "MN002", ReductionType: "protective", SubType: "safety_control", Name: "Stoesselabsturzsicherung", Description: "Mechanische oder hydraulische Stoesselabsturzsicherung bei vertikalen Pressen.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 693 Kap. 5.3.7", NormReferences: []string{"EN 693", "EN 692"}}, + {ID: "MN003", ReductionType: "protective", SubType: "movable_guard", Name: "Schutztuere mit Zuhaltung (Presse)", Description: "Bewegliche trennende Schutzeinrichtung mit Zuhaltung am Werkzeugeinbauraum.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 692 Kap. 5.3.2", NormReferences: []string{"EN 692", "ISO 14119"}}, + + // ── Roboter/Cobot (ISO 10218, ISO/TS 15066) ───────────────── + {ID: "MN004", ReductionType: "protective", SubType: "safety_control", Name: "Kraft-/Geschwindigkeitsbegrenzung Cobot", Description: "Begrenzung von Kontaktkraft und TCP-Geschwindigkeit gemaess ISO/TS 15066 Tabelle A.2.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO/TS 15066 Kap. 5.5.4", NormReferences: []string{"ISO/TS 15066", "ISO 10218-1"}}, + {ID: "MN005", ReductionType: "protective", SubType: "safety_control", Name: "Sicherheitsbewerteter Stopp (Roboter)", Description: "Sicherheitsbewerteter ueberwachter Stopp bei Personeneintritt in den Arbeitsraum.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO 10218-1 Kap. 5.5.2", NormReferences: []string{"ISO 10218-1", "ISO 10218-2"}}, + {ID: "MN006", ReductionType: "protective", SubType: "electro_sensitive", Name: "Sicherheitsscanner Cobot-Arbeitsraum", Description: "Optoelektronische Raumüberwachung fuer Geschwindigkeitsreduzierung bei Annaeherung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO 10218-2 Kap. 5.11", NormReferences: []string{"ISO 10218-2", "IEC 61496-3"}}, + + // ── Aufzuege (EN 81-20) ────────────────────────────────────── + {ID: "MN007", ReductionType: "protective", SubType: "safety_control", Name: "Fangvorrichtung Aufzug", Description: "Mechanische Fangvorrichtung die den Fahrkorb bei Seilbruch oder Uebergeschwindigkeit stoppt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 81-20 Kap. 5.6", NormReferences: []string{"EN 81-20"}}, + {ID: "MN008", ReductionType: "protective", SubType: "safety_control", Name: "Geschwindigkeitsbegrenzer Aufzug", Description: "Geschwindigkeitsbegrenzer der bei Uebergeschwindigkeit die Fangvorrichtung ausloest.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 81-20 Kap. 5.6.2", NormReferences: []string{"EN 81-20"}}, + {ID: "MN009", ReductionType: "protective", SubType: "safety_control", Name: "Puffer im Aufzugsschacht", Description: "Energieabsorbierende Puffer am Schachtboden und -decke als letzte Sicherung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 81-20 Kap. 5.8", NormReferences: []string{"EN 81-20"}}, + + // ── Flurfoerderzeuge (EN 1726, EN ISO 3691) ────────────────── + {ID: "MN010", ReductionType: "protective", SubType: "safety_control", Name: "Redundante Lastaufnahme (Gabelstapler)", Description: "Zweifache Lastaufhaengung: Jede Kette/Gurt muss einzeln die volle Last tragen koennen.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1726-1 Kap. 5.3", NormReferences: []string{"EN 1726-1", "EN ISO 3691-1"}}, + {ID: "MN011", ReductionType: "protective", SubType: "safety_control", Name: "Kippschutz Gabelstapler", Description: "Standsicherheitsnachweis bei max. Nennlast und maximaler Hubhoehe.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1726-1 Kap. 5.2", NormReferences: []string{"EN 1726-1"}}, + + // ── Holzbearbeitung (EN 1870, EN 848) ──────────────────────── + {ID: "MN012", ReductionType: "protective", SubType: "fixed_guard", Name: "Spaltkeil Kreissaege", Description: "Spaltkeil hinter dem Saegeblatt verhindert Rueckschlag.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1870-1 Kap. 5.3.3", NormReferences: []string{"EN 1870-1"}}, + {ID: "MN013", ReductionType: "protective", SubType: "fixed_guard", Name: "Saegeblattschutzhaube", Description: "Schutzhaube ueber dem nicht arbeitenden Teil des Saegeblatts.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1870-1 Kap. 5.3.2", NormReferences: []string{"EN 1870-1"}}, + + // ── Krane (EN 15011, EN 13000) ─────────────────────────────── + {ID: "MN014", ReductionType: "protective", SubType: "safety_control", Name: "Ueberlastsicherung Kran", Description: "Automatische Lastmomentbegrenzung die Hub bei Ueberschreitung der Nennlast sperrt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 15011 Kap. 5.3", NormReferences: []string{"EN 15011", "EN 13000"}}, + {ID: "MN015", ReductionType: "protective", SubType: "safety_control", Name: "Endschalter Kran (Hub/Fahrt)", Description: "Begrenzungsschalter fuer Hubbewegung, Katzfahrt und Kranfahrt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 15011 Kap. 5.2.6", NormReferences: []string{"EN 15011"}}, + + // ── Allgemein (ISO 13850, EN 60204-1) ──────────────────────── + {ID: "MN016", ReductionType: "protective", SubType: "emergency_stop", Name: "Not-Halt Kategorie 0 oder 1", Description: "Not-Halt-Einrichtung an jeder Bedienstelle, gut sichtbar und erreichbar.", HazardCategory: "safety_function", Mandatory: true, MandatoryNorm: "ISO 13850 Kap. 4.1", NormReferences: []string{"ISO 13850", "EN 60204-1"}}, + {ID: "MN017", ReductionType: "protective", SubType: "electrical_protection", Name: "Hauptschalter absperrbar", Description: "Hauptschalter muss in Aus-Stellung abschliessbar sein (Lockout).", HazardCategory: "electrical", Mandatory: true, MandatoryNorm: "EN 60204-1 Kap. 5.3", NormReferences: []string{"EN 60204-1"}}, + {ID: "MN018", ReductionType: "protective", SubType: "electrical_protection", Name: "Schutzleiteranschluss", Description: "Alle leitfaehigen Gehaeuseteile muessen mit dem Schutzleiter verbunden sein.", HazardCategory: "electrical", Mandatory: true, MandatoryNorm: "EN 60204-1 Kap. 8", NormReferences: []string{"EN 60204-1"}}, + + // ── AGV (EN ISO 3691-4) ────────────────────────────────────── + {ID: "MN019", ReductionType: "protective", SubType: "safety_control", Name: "Personenerkennung AGV", Description: "Sicherheitssensor (Laserscanner) zur Personenerkennung im Fahrweg des AGV.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN ISO 3691-4 Kap. 4.7", NormReferences: []string{"EN ISO 3691-4"}}, + {ID: "MN020", ReductionType: "protective", SubType: "safety_control", Name: "Notbremseinrichtung AGV", Description: "Automatische Bremsung bei Hinderniserkennung, manueller Not-Halt am Fahrzeug.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN ISO 3691-4 Kap. 4.4", NormReferences: []string{"EN ISO 3691-4"}}, + + // ── Kettensaege (ISO 11681) ────────────────────────────────── + {ID: "MN021", ReductionType: "protective", SubType: "safety_control", Name: "Kettenbremse (Kettensaege)", Description: "Kettenbremse die bei Rueckschlag die Kette innerhalb von 0,12s stoppt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO 11681-1 Kap. 4.11", NormReferences: []string{"ISO 11681-1"}}, + + // ── Fahrtreppen (EN 115-1) ─────────────────────────────────── + {ID: "MN022", ReductionType: "protective", SubType: "safety_control", Name: "Kammplatte Fahrtreppe", Description: "Kammplatten am Zu- und Abgang verhindern Einklemmen von Schuhwerk und Kleidung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 115-1 Kap. 5.6", NormReferences: []string{"EN 115-1"}}, + + // ── Sicherheitsfunktionen allgemein (ISO 13849-1) ──────────── + {ID: "MN023", ReductionType: "protective", SubType: "safety_control", Name: "Sicherheitsfunktion PL/SIL-konform", Description: "Jede Sicherheitsfunktion muss das per Risikograph ermittelte PL/SIL nachweislich erreichen.", HazardCategory: "safety_function", Mandatory: true, MandatoryNorm: "ISO 13849-1 Kap. 4", NormReferences: []string{"ISO 13849-1", "IEC 62061"}}, + + // ── Druckgeraete (EN ISO 4126-1) ───────────────────────────── + {ID: "MN024", ReductionType: "protective", SubType: "fluid_protection", Name: "Sicherheitsventil Druckbehaelter", Description: "Jeder Druckbehaelter muss mit einem Sicherheitsventil gegen unzulaessigen Ueberdruck gesichert sein.", HazardCategory: "pneumatic_hydraulic", Mandatory: true, MandatoryNorm: "EN ISO 4126-1 Kap. 4", NormReferences: []string{"EN ISO 4126-1"}}, + + // ── Schweissen (EN 60974-1) ────────────────────────────────── + {ID: "MN025", ReductionType: "protective", SubType: "electrical_protection", Name: "Leerlaufspannungsbegrenzung Schweissgeraet", Description: "Leerlaufspannung bei Lichtbogenhandschweissgeraeten max. 113V Spitze (AC) bzw. 113V (DC).", HazardCategory: "electrical", Mandatory: true, MandatoryNorm: "EN 60974-1 Kap. 7.3", NormReferences: []string{"EN 60974-1"}}, + } +} diff --git a/ai-compliance-sdk/internal/iace/models_api.go b/ai-compliance-sdk/internal/iace/models_api.go index 77251e7..de731c6 100644 --- a/ai-compliance-sdk/internal/iace/models_api.go +++ b/ai-compliance-sdk/internal/iace/models_api.go @@ -179,6 +179,12 @@ type ProtectiveMeasureEntry struct { Examples []string `json:"examples,omitempty"` NormReferences []string `json:"norm_references,omitempty"` Tags []string `json:"tags,omitempty"` + // Mandatory indicates this measure is REQUIRED by a harmonized standard. + // When true, the measure must be implemented if the referenced norm is applied. + // The norm creates a "presumption of conformity" — deviating requires the + // manufacturer to independently prove equivalent safety. + Mandatory bool `json:"mandatory,omitempty"` + MandatoryNorm string `json:"mandatory_norm,omitempty"` // e.g. "EN 1726-1 Kap. 5.3" } // ValidateMitigationHierarchyRequest is the request for hierarchy validation