Ir al contenido

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 medidaNivel de riesgo
froga conformance proyecta medidas a cláusulasfroga risk-projection proyecta riesgos a artefactos requeridos
Catálogo de cláusulas por normaCatálogo de proyecciones de riesgo por norma
conformance/<slug>.json firmadorisk-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: hazard en 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.


Cada riesgo en froga.yaml se declara con tres primitivas de la cadena causal:

PrimitivaSignificado
sourceOrigen del peligro (p. ej. sesgo en los datos de entrenamiento)
pathwayVía por la que el peligro puede causar daño
consequenceDañ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).


MarcoId canónicoVocabulario de source
ISO 14971:2019 (seguridad de productos sanitarios)iso/14971@2019hazardhazardous situationharm
prEN 18228:2026 (requisitos de producto IA, AI Act)eu/pren-18228@2026sourcepathwayconsequence
ISO 23894:2023 (proceso de gestión de riesgos IA)iso/23894@2023sourcepathwayconsequence

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).


Proyectar al catálogo de ISO 14971
froga risk-projection --repo . --framework iso/14971@2019
Proyectar al catálogo de prEN 18228
froga risk-projection --repo . --framework eu/pren-18228@2026
Todos los marcos aplicables (declarados en applicable_standards)
froga 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.

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-P256

La 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.


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.


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ñalProxy en el bundle o AP
monitoring_planreview_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
approvalActo real Froga-Approved-by: en git (ciclo de vida Approved o UnderReview)
signed_bundleBundle presente (por definición, si se llama al comando)
signed_bomCampo 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 conformance proyecta al nivel de la medida: prueba que un control satisface cláusulas de una norma.
  • froga risk-projection proyecta 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.