Modelo de riesgo agnóstico
El modelo de riesgo de froga es agnóstico de norma: un riesgo se declara una sola vez con primitivas canónicas; una proyección declarativa por estándar lo lleva al vocabulario y los artefactos que esa norma exige. El bucle de tratamiento — git cerrando el ciclo ISO 23894 — es el núcleo universal; lo que cambia de norma a norma es solo el vocabulario y los artefactos requeridos.
«En el fondo todas las normas son iguales.»
El principio de proyección al nivel del riesgo
Sección titulada «El principio de proyección al nivel del riesgo»Este mecanismo es el análogo exacto de la conformidad por proyección aplicado al nivel del riesgo. Así se corresponden:
| Nivel de medida | Nivel de riesgo |
|---|---|
froga conformance proyecta medidas a cláusulas | froga risk-projection proyecta riesgos a artefactos requeridos |
| Catálogo de cláusulas por norma | Catálogo de proyecciones de riesgo por norma |
conformance/<slug>.json firmado | risk-projection/<slug>.json firmado |
Cada proyección vive en crates/froga-core/resources/risk-projections/<f>.yaml y define:
vocabulary— cómo se llaman las primitivas canónicas en esa norma (p. ej.source: hazarden ISO 14971).required_artifacts— qué artefactos exige la norma por riesgo, y cómo satisfacerlos desde las primitivas ya declaradas.scoring— qué seam de puntuación usa la norma.
La función derive_risk_projection(risks, def, bundle, ap, approval_present) (crates/froga-core/src/risk_projection.rs) aplica la proyección riesgo a riesgo, artefacto a artefacto, y produce una decisión Covered / Partial / Gap por cada artefacto requerido — reutilizando ConformanceDecision y el evaluador de evidencia de conformidad.
Primitivas canónicas del riesgo
Sección titulada «Primitivas canónicas del riesgo»Cada riesgo en froga.yaml se declara con tres primitivas de la cadena causal:
| Primitiva | Significado |
|---|---|
source | Origen del peligro (p. ej. sesgo en los datos de entrenamiento) |
pathway | Vía por la que el peligro puede causar daño |
consequence | Daño potencial para las personas o la organización |
El campo benefit_risk declara el beneficio que compensa el riesgo cuando la norma lo exige (ISO 14971). Los cuatro campos son opcionales por defecto (serde(default)); su ausencia produce Gap en los artefactos que los necesitan.
La puntuación (likelihood × impact) sigue el seam ScoringModel: la implementación por defecto FiveByFive reproduce exactamente la matriz 5×5 de ISO 23894 (ver ISO 23894 como proyección).
Marcos soportados
Sección titulada «Marcos soportados»| Marco | Id canónico | Vocabulario de source |
|---|---|---|
| ISO 14971:2019 (seguridad de productos sanitarios) | iso/14971@2019 | hazard → hazardous situation → harm |
| prEN 18228:2026 (requisitos de producto IA, AI Act) | eu/pren-18228@2026 | source → pathway → consequence |
| ISO 23894:2023 (proceso de gestión de riesgos IA) | iso/23894@2023 | source → pathway → consequence |
ISO 23894 está ahora re-conducido como proyección: el nivel residual proyectado coincide byte a byte con el residual_overall que calcula el motor (test de paridad incluido).
Usar froga risk-projection
Sección titulada «Usar froga risk-projection»froga risk-projection --repo . --framework iso/14971@2019froga risk-projection --repo . --framework eu/pren-18228@2026froga risk-projection --repo .Sin --framework, el comando itera applicable_standards ∩ catalog y genera una proyección por cada marco aplicable en una sola invocación (N-en-1).
La salida indica, por riesgo y por artefacto requerido:
✅ CUBIERTO— la primitiva declarada satisface el artefacto.⚠ PARCIAL— la primitiva existe pero la evidencia es incompleta.❌ HUECO— la primitiva no está declarada o la señal de evidencia falta.
El artefacto firmado y el Anexo IV §5
Sección titulada «El artefacto firmado y el Anexo IV §5»Con --out (implícito en el modo N-en-1), el comando escribe los artefactos firmados:
.froga/risk-projection/iso_14971_2019.json ← FrogaArtifact<RiskProjection> firmado.froga/risk-projection/iso_14971_2019.json.sig ← sobre DSSE · in-toto · ECDSA-P256La proyección es bajo demanda: nunca se sella en el bundle. Se deriva del bundle.risk_analysis ya firmado y se firma como artefacto separado — el mismo patrón que froga conformance. Los bundles firmados existentes permanecen byte-idénticos.
El plano de control (nube) lee los artefactos verificados y los renderiza en el Anexo IV §5 de la ruta /[org]/systems/[slug]/annex-iv, mostrando el estado de proyección por marco aplicable.
Norma nueva = un YAML de proyección
Sección titulada «Norma nueva = un YAML de proyección»El payoff del modelo agnóstico: incorporar un nuevo marco normativo no requiere cambiar el núcleo del motor. Basta con añadir un fichero YAML de proyección en crates/froga-core/resources/risk-projections/ con su vocabulario, artefactos requeridos y scoring.
Candidatos ya en la hoja de ruta: ISO 31000, ISO/IEC 27001, ISO 26262 (automoción), ARP4761 (aeronáutica), Basel/NIST AI RMF (finanzas). Cada uno = un YAML, sin reescribir el motor.
Señales de evidencia y su alcance
Sección titulada «Señales de evidencia y su alcance»Los artefactos con satisfied_by.evidence en los catálogos de proyección se resuelven ahora con señales reales del bundle firmado — el mismo evaluador (evidence_present) que usa froga conformance. Ya no devuelven Gap fijo.
Las señales disponibles y sus proxies honestos:
| Señal | Proxy en el bundle o AP |
|---|---|
monitoring_plan | review_interval no vacío en el bundle o ≥ 1 measure con lifecycle: [monitoring] en el AP |
power_stats | ≥ 1 ControlResult.power presente en el bundle |
approval | Acto real Froga-Approved-by: en git (ciclo de vida Approved o UnderReview) |
signed_bundle | Bundle presente (por definición, si se llama al comando) |
signed_bom | Campo bom presente en el bundle (CycloneDX) |
affected_persons | ≥ 1 sistema con affected_persons declarado en el AP |
foreseeable_misuse | ≥ 1 sistema con foreseeable_misuse declarado en el AP |
Matiz honesto: monitoring_plan certifica un plan declarado (review_interval o measures lifecycle:monitoring), no evidencia operativa de revisión sostenida. Un organismo notificado distinguirá además si el plan tiene semántica Art. 72 (cita normativa + disparador + frecuencia ISO 8601 — plan accionable) de un compromiso sin cadencia verificable (audit-only). El basis de la decisión lo indica sin ambigüedad.
Los artefactos evaluados desde primitivas del riesgo (source, pathway, consequence, benefit_risk) y desde criterios built-in (residual_present, overall_residual) no usan estas señales y resuelven directamente desde el RiskAssessment.
Integración con la conformidad por proyección
Sección titulada «Integración con la conformidad por proyección»Las dos proyecciones coexisten y se complementan:
froga conformanceproyecta al nivel de la medida: prueba que un control satisface cláusulas de una norma.froga risk-projectionproyecta al nivel del riesgo: prueba que el riesgo y su gestión satisfacen el proceso de riesgo de la norma.
Ambas parten del mismo bundle.json firmado y producen artefactos firmados independientes. El Anexo IV §5 las renderiza juntas.
Referencias
Sección titulada «Referencias»- Conformidad dual de estándares — proyección al nivel de la medida (análogo en
froga conformance) - ISO 23894 como proyección — el seam
ScoringModel::FiveByFivey la paridad de scoring - Referencia CLI
froga— documentación completa defroga risk-projection - git cierra el bucle de tratamiento ISO 23894 — el bucle de tratamiento como núcleo universal