{
  "schema_version": "1.0",
  "project": "IA para gente curiosa",
  "fasciculo": 12,
  "capitulo": 11,
  "summary": {
    "global_decision": "block_release",
    "case_count": 14,
    "pass_count": 2,
    "review_count": 8,
    "block_count": 4,
    "max_risk_score": 0.7665,
    "avg_risk_score": 0.5018,
    "modality_rows": [
      {
        "modality": "audio",
        "case_count": 2,
        "avg_risk_score": 0.4208,
        "max_risk_score": 0.5237
      },
      {
        "modality": "document",
        "case_count": 2,
        "avg_risk_score": 0.4904,
        "max_risk_score": 0.4959
      },
      {
        "modality": "eval_dataset",
        "case_count": 2,
        "avg_risk_score": 0.5412,
        "max_risk_score": 0.619
      },
      {
        "modality": "image",
        "case_count": 4,
        "avg_risk_score": 0.3777,
        "max_risk_score": 0.6022
      },
      {
        "modality": "rag",
        "case_count": 1,
        "avg_risk_score": 0.5937,
        "max_risk_score": 0.5937
      },
      {
        "modality": "ui_trace",
        "case_count": 2,
        "avg_risk_score": 0.7422,
        "max_risk_score": 0.7665
      },
      {
        "modality": "video",
        "case_count": 1,
        "avg_risk_score": 0.531,
        "max_risk_score": 0.531
      }
    ],
    "mismatches": []
  },
  "cases": [
    {
      "case_id": "doc_dni_invoice",
      "title": "PDF administrativo con DNI y correo",
      "modality": "document",
      "purpose": "Responder una consulta de matrícula sin exponer identificadores",
      "owner": "equipo_soporte_academico",
      "destination": "approved_ai_provider",
      "storage": "redacted_trace",
      "entity_count": 2,
      "max_entity_sensitivity": 0.833,
      "exposure_score": 0.0,
      "impact": 0.7,
      "risk_score": 0.4959,
      "missing_controls": [],
      "retention_days": 30,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [],
      "next_action": "Enviar a revisión de privacidad/seguridad antes de publicar."
    },
    {
      "case_id": "image_badge_face",
      "title": "Foto de acreditación con cara y ID de estudiante",
      "modality": "image",
      "purpose": "Verificar que una imagen es del tipo correcto antes de archivarla",
      "owner": "equipo_admisiones",
      "destination": "internal_support_tool",
      "storage": "redacted_trace",
      "entity_count": 2,
      "max_entity_sensitivity": 0.704,
      "exposure_score": 0.0,
      "impact": 0.72,
      "risk_score": 0.455,
      "missing_controls": [],
      "retention_days": 30,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [],
      "next_action": "Enviar a revisión de privacidad/seguridad antes de publicar."
    },
    {
      "case_id": "audio_phone_slot",
      "title": "Llamada con teléfono y cambio de cita",
      "modality": "audio",
      "purpose": "Detectar intención y confirmar slot crítico antes de actualizar la cita",
      "owner": "equipo_contact_center",
      "destination": "internal_support_tool",
      "storage": "redacted_trace",
      "entity_count": 2,
      "max_entity_sensitivity": 0.455,
      "exposure_score": 0.0,
      "impact": 0.55,
      "risk_score": 0.3178,
      "missing_controls": [],
      "retention_days": 30,
      "decision": "pass",
      "expected_decision": "pass",
      "decision_matches_expected": true,
      "failures": [],
      "next_action": "Mantener como caso de regresión y vigilar drift de entradas."
    },
    {
      "case_id": "video_license_plate",
      "title": "Vídeo de parking con matrícula y persona visible",
      "modality": "video",
      "purpose": "Detectar evento de acceso sin conservar identificadores innecesarios",
      "owner": "equipo_operaciones",
      "destination": "internal_eval_store",
      "storage": "redacted_trace",
      "entity_count": 2,
      "max_entity_sensitivity": 0.645,
      "exposure_score": 0.12,
      "impact": 0.75,
      "risk_score": 0.531,
      "missing_controls": [
        "region_redaction"
      ],
      "retention_days": 30,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [
        "controles_faltantes"
      ],
      "next_action": "Añadir controles faltantes: region_redaction"
    },
    {
      "case_id": "rag_confidential_slide",
      "title": "RAG multimodal recupera una slide interna confidencial",
      "modality": "rag",
      "purpose": "Responder con política pública sin revelar una nota interna de negociación",
      "owner": "equipo_conocimiento",
      "destination": "approved_ai_provider",
      "storage": "redacted_trace",
      "entity_count": 1,
      "max_entity_sensitivity": 0.798,
      "exposure_score": 0.0,
      "impact": 0.88,
      "risk_score": 0.5937,
      "missing_controls": [
        "claim_grounding"
      ],
      "retention_days": 30,
      "decision": "block",
      "expected_decision": "block",
      "decision_matches_expected": true,
      "failures": [
        "secreto_sin_redactar",
        "controles_faltantes"
      ],
      "next_action": "Redactar información interna, revisar acceso de la fuente y bloquear publicación."
    },
    {
      "case_id": "ui_api_key_prompt_injection",
      "title": "Captura de pantalla con API key y texto que intenta dar órdenes",
      "modality": "ui_trace",
      "purpose": "Diagnosticar una incidencia sin copiar secretos ni obedecer OCR",
      "owner": "equipo_plataforma",
      "destination": "security_ticket",
      "storage": "secret_leak",
      "entity_count": 2,
      "max_entity_sensitivity": 0.99,
      "exposure_score": 0.34,
      "impact": 1.0,
      "risk_score": 0.718,
      "missing_controls": [],
      "retention_days": 0,
      "decision": "block",
      "expected_decision": "block",
      "decision_matches_expected": true,
      "failures": [
        "secreto_sin_redactar",
        "prompt_injection_visual_actionable"
      ],
      "next_action": "Revocar secreto, redactar captura, abrir incidente y bloquear publicación."
    },
    {
      "case_id": "computer_use_external_submit",
      "title": "Traza de computer use intenta enviar captura a un webhook externo",
      "modality": "ui_trace",
      "purpose": "Preparar diagnóstico interno sin exfiltrar pantalla",
      "owner": "equipo_sre",
      "destination": "public_webhook",
      "storage": "redacted_trace",
      "entity_count": 2,
      "max_entity_sensitivity": 0.6935,
      "exposure_score": 0.9,
      "impact": 0.86,
      "risk_score": 0.7665,
      "missing_controls": [
        "egress_policy"
      ],
      "retention_days": 30,
      "decision": "block",
      "expected_decision": "block",
      "decision_matches_expected": true,
      "failures": [
        "destino_bloqueado",
        "accion_externa_requiere_aprobacion",
        "controles_faltantes"
      ],
      "next_action": "Revisar egress policy: el destino no puede recibir esta modalidad."
    },
    {
      "case_id": "eval_dataset_student_email",
      "title": "Caso real usado como evaluación contiene correo de alumno",
      "modality": "eval_dataset",
      "purpose": "Convertir un fallo real en test de regresión sin conservar PII directa",
      "owner": "equipo_evalops",
      "destination": "internal_eval_store",
      "storage": "eval_case_redacted",
      "entity_count": 2,
      "max_entity_sensitivity": 0.5115,
      "exposure_score": 0.12,
      "impact": 0.68,
      "risk_score": 0.4633,
      "missing_controls": [
        "redacted_fixture"
      ],
      "retention_days": 180,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [
        "controles_faltantes"
      ],
      "next_action": "Añadir controles faltantes: redacted_fixture"
    },
    {
      "case_id": "image_exif_location",
      "title": "Imagen aparentemente inocua con coordenadas GPS en EXIF",
      "modality": "image",
      "purpose": "Publicar una foto de una instalación sin revelar ubicación sensible",
      "owner": "equipo_contenido",
      "destination": "approved_ai_provider",
      "storage": "raw_prompt",
      "entity_count": 2,
      "max_entity_sensitivity": 0.776,
      "exposure_score": 0.22,
      "impact": 0.75,
      "risk_score": 0.6022,
      "missing_controls": [
        "metadata_strip"
      ],
      "retention_days": 7,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [
        "controles_faltantes"
      ],
      "next_action": "Añadir controles faltantes: metadata_strip"
    },
    {
      "case_id": "low_res_ocr_missed_dni",
      "title": "OCR de baja resolución con DNI parcialmente detectado",
      "modality": "document",
      "purpose": "Extraer una fecha de un documento escaneado sin conservar identificadores",
      "owner": "equipo_document_ai",
      "destination": "approved_ai_provider",
      "storage": "raw_prompt",
      "entity_count": 2,
      "max_entity_sensitivity": 0.396,
      "exposure_score": 0.22,
      "impact": 0.82,
      "risk_score": 0.485,
      "missing_controls": [
        "field_level_redaction"
      ],
      "retention_days": 7,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [
        "controles_faltantes"
      ],
      "next_action": "Añadir controles faltantes: field_level_redaction"
    },
    {
      "case_id": "audio_noise_health_hint",
      "title": "Audio con ruido donde aparece una pista sanitaria",
      "modality": "audio",
      "purpose": "Clasificar intención de soporte sin conservar información sanitaria accidental",
      "owner": "equipo_contact_center",
      "destination": "internal_support_tool",
      "storage": "redacted_trace",
      "entity_count": 2,
      "max_entity_sensitivity": 0.627,
      "exposure_score": 0.0,
      "impact": 0.85,
      "risk_score": 0.5237,
      "missing_controls": [
        "transcript_pii_scan"
      ],
      "retention_days": 30,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [
        "controles_faltantes"
      ],
      "next_action": "Añadir controles faltantes: transcript_pii_scan"
    },
    {
      "case_id": "eval_reconstructible_token_fragment",
      "title": "Fixture de evaluación con fragmento de token reconstruible",
      "modality": "eval_dataset",
      "purpose": "Convertir un incidente de integración en regresión sin conservar credenciales",
      "owner": "equipo_evalops",
      "destination": "internal_eval_store",
      "storage": "eval_case_redacted",
      "entity_count": 2,
      "max_entity_sensitivity": 0.765,
      "exposure_score": 0.12,
      "impact": 0.91,
      "risk_score": 0.619,
      "missing_controls": [
        "redacted_fixture"
      ],
      "retention_days": 180,
      "decision": "block",
      "expected_decision": "block",
      "decision_matches_expected": true,
      "failures": [
        "secreto_sin_redactar",
        "controles_faltantes"
      ],
      "next_action": "Revocar secreto, redactar captura, abrir incidente y bloquear publicación."
    },
    {
      "case_id": "reflection_face_in_public_photo",
      "title": "Foto de producto con una cara reflejada en cristal",
      "modality": "image",
      "purpose": "Generar texto alternativo para catálogo público sin publicar personas accidentales",
      "owner": "equipo_contenido",
      "destination": "approved_ai_provider",
      "storage": "public_asset",
      "entity_count": 1,
      "max_entity_sensitivity": 0.448,
      "exposure_score": 0.0,
      "impact": 0.63,
      "risk_score": 0.3977,
      "missing_controls": [
        "region_redaction"
      ],
      "retention_days": 365,
      "decision": "review",
      "expected_decision": "review",
      "decision_matches_expected": true,
      "failures": [
        "controles_faltantes"
      ],
      "next_action": "Añadir controles faltantes: region_redaction"
    },
    {
      "case_id": "public_product_photo",
      "title": "Foto pública de producto sin personas ni identificadores",
      "modality": "image",
      "purpose": "Generar texto alternativo para catálogo público",
      "owner": "equipo_contenido",
      "destination": "approved_ai_provider",
      "storage": "public_asset",
      "entity_count": 0,
      "max_entity_sensitivity": 0.0,
      "exposure_score": 0.0,
      "impact": 0.2,
      "risk_score": 0.056,
      "missing_controls": [],
      "retention_days": 365,
      "decision": "pass",
      "expected_decision": "pass",
      "decision_matches_expected": true,
      "failures": [],
      "next_action": "Mantener como caso de regresión y vigilar drift de entradas."
    }
  ],
  "threat_model": [
    {
      "case_id": "doc_dni_invoice",
      "modality": "document",
      "asset": "PDF, OCR y campos extraídos",
      "trust_boundary": "upload de usuario -> OCR/Document AI -> proveedor o store interno",
      "failure_mode": "un identificador se conserva o viaja fuera de finalidad",
      "control": "ocr_pii_scan, field_level_redaction, retention_policy",
      "test": "fixture con DNI/correo y aserción de redacción por campo",
      "decision": "review",
      "risk_score": 0.4959
    },
    {
      "case_id": "image_badge_face",
      "modality": "image",
      "asset": "píxeles, regiones detectadas y metadatos EXIF",
      "trust_boundary": "imagen del usuario -> preprocesado -> modelo visual",
      "failure_mode": "cara, matrícula, dirección o GPS quedan visibles",
      "control": "image_pii_scan, region_redaction, metadata_strip",
      "test": "imagen con región sensible y metadatos antes/después",
      "decision": "review",
      "risk_score": 0.455
    },
    {
      "case_id": "audio_phone_slot",
      "modality": "audio",
      "asset": "audio bruto, transcript, slots y voz",
      "trust_boundary": "stream de voz -> ASR -> extractor de intención",
      "failure_mode": "dato personal o sanitario se guarda como transcript bruto",
      "control": "transcript_pii_scan, slot_confirmation, retention_policy",
      "test": "transcript con baja confianza y entidad sensible",
      "decision": "pass",
      "risk_score": 0.3178
    },
    {
      "case_id": "video_license_plate",
      "modality": "video",
      "asset": "frames, objetos, eventos y marcas temporales",
      "trust_boundary": "vídeo -> muestreo de frames -> analítica temporal",
      "failure_mode": "se conservan identificadores en frames no necesarios",
      "control": "frame_sampling_policy, region_redaction, retention_policy",
      "test": "frame con matrícula/cara y control faltante",
      "decision": "review",
      "risk_score": 0.531
    },
    {
      "case_id": "rag_confidential_slide",
      "modality": "rag",
      "asset": "fuentes recuperadas, OCR de documentos y citas",
      "trust_boundary": "índice multimodal -> retrieval -> contexto del modelo",
      "failure_mode": "fuente interna o nota confidencial aparece en respuesta",
      "control": "acl_filter, source_label, claim_grounding",
      "test": "documento con ACL y claim sensible no autorizado",
      "decision": "block",
      "risk_score": 0.5937
    },
    {
      "case_id": "ui_api_key_prompt_injection",
      "modality": "ui_trace",
      "asset": "captura, DOM, OCR, cookies, panel de red y acción externa",
      "trust_boundary": "pantalla observada -> agente -> tool externa",
      "failure_mode": "OCR malicioso o secreto gobierna una acción",
      "control": "secret_scan, taint_ocr, approval_gate, egress_policy",
      "test": "captura con API key y orden visual",
      "decision": "block",
      "risk_score": 0.718
    },
    {
      "case_id": "computer_use_external_submit",
      "modality": "ui_trace",
      "asset": "captura, DOM, OCR, cookies, panel de red y acción externa",
      "trust_boundary": "pantalla observada -> agente -> tool externa",
      "failure_mode": "OCR malicioso o secreto gobierna una acción",
      "control": "secret_scan, taint_ocr, approval_gate, egress_policy",
      "test": "captura con API key y orden visual",
      "decision": "block",
      "risk_score": 0.7665
    },
    {
      "case_id": "eval_dataset_student_email",
      "modality": "eval_dataset",
      "asset": "fixture, prompt, metadatos, expected output y trazas",
      "trust_boundary": "incidente real -> dataset de evaluación -> CI",
      "failure_mode": "un dato real queda congelado como regresión",
      "control": "redacted_fixture, dataset_owner, retention_policy",
      "test": "fixture con correo o token reconstruible",
      "decision": "review",
      "risk_score": 0.4633
    },
    {
      "case_id": "image_exif_location",
      "modality": "image",
      "asset": "píxeles, regiones detectadas y metadatos EXIF",
      "trust_boundary": "imagen del usuario -> preprocesado -> modelo visual",
      "failure_mode": "cara, matrícula, dirección o GPS quedan visibles",
      "control": "image_pii_scan, region_redaction, metadata_strip",
      "test": "imagen con región sensible y metadatos antes/después",
      "decision": "review",
      "risk_score": 0.6022
    },
    {
      "case_id": "low_res_ocr_missed_dni",
      "modality": "document",
      "asset": "PDF, OCR y campos extraídos",
      "trust_boundary": "upload de usuario -> OCR/Document AI -> proveedor o store interno",
      "failure_mode": "un identificador se conserva o viaja fuera de finalidad",
      "control": "ocr_pii_scan, field_level_redaction, retention_policy",
      "test": "fixture con DNI/correo y aserción de redacción por campo",
      "decision": "review",
      "risk_score": 0.485
    },
    {
      "case_id": "audio_noise_health_hint",
      "modality": "audio",
      "asset": "audio bruto, transcript, slots y voz",
      "trust_boundary": "stream de voz -> ASR -> extractor de intención",
      "failure_mode": "dato personal o sanitario se guarda como transcript bruto",
      "control": "transcript_pii_scan, slot_confirmation, retention_policy",
      "test": "transcript con baja confianza y entidad sensible",
      "decision": "review",
      "risk_score": 0.5237
    },
    {
      "case_id": "eval_reconstructible_token_fragment",
      "modality": "eval_dataset",
      "asset": "fixture, prompt, metadatos, expected output y trazas",
      "trust_boundary": "incidente real -> dataset de evaluación -> CI",
      "failure_mode": "un dato real queda congelado como regresión",
      "control": "redacted_fixture, dataset_owner, retention_policy",
      "test": "fixture con correo o token reconstruible",
      "decision": "block",
      "risk_score": 0.619
    },
    {
      "case_id": "reflection_face_in_public_photo",
      "modality": "image",
      "asset": "píxeles, regiones detectadas y metadatos EXIF",
      "trust_boundary": "imagen del usuario -> preprocesado -> modelo visual",
      "failure_mode": "cara, matrícula, dirección o GPS quedan visibles",
      "control": "image_pii_scan, region_redaction, metadata_strip",
      "test": "imagen con región sensible y metadatos antes/después",
      "decision": "review",
      "risk_score": 0.3977
    },
    {
      "case_id": "public_product_photo",
      "modality": "image",
      "asset": "píxeles, regiones detectadas y metadatos EXIF",
      "trust_boundary": "imagen del usuario -> preprocesado -> modelo visual",
      "failure_mode": "cara, matrícula, dirección o GPS quedan visibles",
      "control": "image_pii_scan, region_redaction, metadata_strip",
      "test": "imagen con región sensible y metadatos antes/después",
      "decision": "pass",
      "risk_score": 0.056
    }
  ],
  "lineage": [
    {
      "artifact_id": "art_doc_dni_invoice",
      "case_id": "doc_dni_invoice",
      "artifact_hash": "bbffb5d34c9fcbc6",
      "modality": "document",
      "surface": "pdf_ocr",
      "owner": "equipo_soporte_academico",
      "destination": "approved_ai_provider",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "hash:email|redact",
      "decision": "review",
      "retention_days": 30
    },
    {
      "artifact_id": "art_image_badge_face",
      "case_id": "image_badge_face",
      "artifact_hash": "3e9bcb8fd7da3c98",
      "modality": "image",
      "surface": "image_upload",
      "owner": "equipo_admisiones",
      "destination": "internal_support_tool",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "blur:strong|tokenize:student_id",
      "decision": "review",
      "retention_days": 30
    },
    {
      "artifact_id": "art_audio_phone_slot",
      "case_id": "audio_phone_slot",
      "artifact_hash": "61e42c5081db950d",
      "modality": "audio",
      "surface": "asr_transcript",
      "owner": "equipo_contact_center",
      "destination": "internal_support_tool",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "mask:last2|replace:<PERSONA>",
      "decision": "pass",
      "retention_days": 30
    },
    {
      "artifact_id": "art_video_license_plate",
      "case_id": "video_license_plate",
      "artifact_hash": "6b49970f6b8d1a44",
      "modality": "video",
      "surface": "frame_stream",
      "owner": "equipo_operaciones",
      "destination": "internal_eval_store",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "blur:strong|blur_or_redact",
      "decision": "review",
      "retention_days": 30
    },
    {
      "artifact_id": "art_rag_confidential_slide",
      "case_id": "rag_confidential_slide",
      "artifact_hash": "852021ac341d8bd9",
      "modality": "rag",
      "surface": "retrieved_pdf_slide",
      "owner": "equipo_conocimiento",
      "destination": "approved_ai_provider",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "redact",
      "decision": "block",
      "retention_days": 30
    },
    {
      "artifact_id": "art_ui_api_key_prompt_injection",
      "case_id": "ui_api_key_prompt_injection",
      "artifact_hash": "f0b8332de1f193c6",
      "modality": "ui_trace",
      "surface": "screenshot_ocr",
      "owner": "equipo_plataforma",
      "destination": "security_ticket",
      "storage": "secret_leak",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "revoke_and_redact|taint_untrusted_content",
      "decision": "block",
      "retention_days": 0
    },
    {
      "artifact_id": "art_computer_use_external_submit",
      "case_id": "computer_use_external_submit",
      "artifact_hash": "9934b8be3f0d58b3",
      "modality": "ui_trace",
      "surface": "browser_trace",
      "owner": "equipo_sre",
      "destination": "public_webhook",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "hash:email|redact",
      "decision": "block",
      "retention_days": 30
    },
    {
      "artifact_id": "art_eval_dataset_student_email",
      "case_id": "eval_dataset_student_email",
      "artifact_hash": "41bbf21848012b0e",
      "modality": "eval_dataset",
      "surface": "json_fixture",
      "owner": "equipo_evalops",
      "destination": "internal_eval_store",
      "storage": "eval_case_redacted",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "hash:email|tokenize:student_id",
      "decision": "review",
      "retention_days": 180
    },
    {
      "artifact_id": "art_image_exif_location",
      "case_id": "image_exif_location",
      "artifact_hash": "de64a648266a7800",
      "modality": "image",
      "surface": "image_upload_exif",
      "owner": "equipo_contenido",
      "destination": "approved_ai_provider",
      "storage": "raw_prompt",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "generalize:city|strip_exif_and_round_geohash",
      "decision": "review",
      "retention_days": 7
    },
    {
      "artifact_id": "art_low_res_ocr_missed_dni",
      "case_id": "low_res_ocr_missed_dni",
      "artifact_hash": "73a0c42f075b68cc",
      "modality": "document",
      "surface": "low_resolution_scan",
      "owner": "equipo_document_ai",
      "destination": "approved_ai_provider",
      "storage": "raw_prompt",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "hash:email|redact",
      "decision": "review",
      "retention_days": 7
    },
    {
      "artifact_id": "art_audio_noise_health_hint",
      "case_id": "audio_noise_health_hint",
      "artifact_hash": "c080f1f2ce6007cf",
      "modality": "audio",
      "surface": "asr_transcript_low_confidence",
      "owner": "equipo_contact_center",
      "destination": "internal_support_tool",
      "storage": "redacted_trace",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "mask:last2|redact",
      "decision": "review",
      "retention_days": 30
    },
    {
      "artifact_id": "art_eval_reconstructible_token_fragment",
      "case_id": "eval_reconstructible_token_fragment",
      "artifact_hash": "9575228ce2d71394",
      "modality": "eval_dataset",
      "surface": "json_fixture",
      "owner": "equipo_evalops",
      "destination": "internal_eval_store",
      "storage": "eval_case_redacted",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "redact|revoke_if_reconstructible",
      "decision": "block",
      "retention_days": 180
    },
    {
      "artifact_id": "art_reflection_face_in_public_photo",
      "case_id": "reflection_face_in_public_photo",
      "artifact_hash": "c641bc25a5ac7ad1",
      "modality": "image",
      "surface": "public_image_with_reflection",
      "owner": "equipo_contenido",
      "destination": "approved_ai_provider",
      "storage": "public_asset",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "blur:strong",
      "decision": "review",
      "retention_days": 365
    },
    {
      "artifact_id": "art_public_product_photo",
      "case_id": "public_product_photo",
      "artifact_hash": "afbd2cba09451ecc",
      "modality": "image",
      "surface": "public_image",
      "owner": "equipo_contenido",
      "destination": "approved_ai_provider",
      "storage": "public_asset",
      "policy_hash": "371ee6494a3eb0b5",
      "detector_version": "simulated-multimodal-detector-0.1",
      "redaction_operators": "none",
      "decision": "pass",
      "retention_days": 365
    }
  ],
  "policy_decisions": [
    {
      "decision_id": "allow_redacted_support_trace",
      "principal": "MultimodalSystem::risk-gate",
      "action": "SendArtifact",
      "resource": "Artifact::redacted_support_trace",
      "destination": "internal_support_tool",
      "risk_score": 0.32,
      "missing_controls": 0,
      "decision": "allow",
      "expected_decision": "allow",
      "matches_expected": true,
      "reasons": []
    },
    {
      "decision_id": "review_eval_fixture_with_missing_redaction",
      "principal": "MultimodalSystem::risk-gate",
      "action": "StoreEvalFixture",
      "resource": "Artifact::eval_fixture",
      "destination": "internal_eval_store",
      "risk_score": 0.51,
      "missing_controls": 1,
      "decision": "review",
      "expected_decision": "review",
      "matches_expected": true,
      "reasons": [
        "missing_controls",
        "risk_above_review_threshold"
      ]
    },
    {
      "decision_id": "deny_public_webhook",
      "principal": "MultimodalSystem::risk-gate",
      "action": "SendArtifact",
      "resource": "Artifact::screen_capture",
      "destination": "public_webhook",
      "risk_score": 0.76,
      "missing_controls": 1,
      "decision": "deny",
      "expected_decision": "deny",
      "matches_expected": true,
      "reasons": [
        "blocked_destination",
        "external_action_requires_approval",
        "missing_controls",
        "risk_above_review_threshold"
      ]
    },
    {
      "decision_id": "deny_secret_visible",
      "principal": "MultimodalSystem::risk-gate",
      "action": "CreateSecurityTicket",
      "resource": "Artifact::ui_trace",
      "destination": "security_ticket",
      "risk_score": 0.72,
      "missing_controls": 0,
      "decision": "deny",
      "expected_decision": "deny",
      "matches_expected": true,
      "reasons": [
        "unredacted_secret",
        "risk_above_review_threshold"
      ]
    }
  ],
  "detector_metrics": [
    {
      "entity_type": "ACCESS_TOKEN_FRAGMENT",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": true,
      "passes_recall_target": true
    },
    {
      "entity_type": "ADDRESS",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": false,
      "passes_recall_target": true
    },
    {
      "entity_type": "API_KEY",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": true,
      "passes_recall_target": true
    },
    {
      "entity_type": "COOKIE",
      "tp": 0,
      "fp": 0,
      "fn": 1,
      "precision": 1.0,
      "recall": 0.0,
      "f2": 0.0,
      "high_recall_entity": false,
      "passes_recall_target": true
    },
    {
      "entity_type": "DNI_NIE",
      "tp": 1,
      "fp": 0,
      "fn": 1,
      "precision": 1.0,
      "recall": 0.5,
      "f2": 0.5556,
      "high_recall_entity": true,
      "passes_recall_target": false
    },
    {
      "entity_type": "EMAIL",
      "tp": 2,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": false,
      "passes_recall_target": true
    },
    {
      "entity_type": "FACE",
      "tp": 1,
      "fp": 0,
      "fn": 1,
      "precision": 1.0,
      "recall": 0.5,
      "f2": 0.5556,
      "high_recall_entity": true,
      "passes_recall_target": false
    },
    {
      "entity_type": "GPS_LOCATION",
      "tp": 0,
      "fp": 0,
      "fn": 1,
      "precision": 1.0,
      "recall": 0.0,
      "f2": 0.0,
      "high_recall_entity": true,
      "passes_recall_target": false
    },
    {
      "entity_type": "HEALTH",
      "tp": 0,
      "fp": 0,
      "fn": 1,
      "precision": 1.0,
      "recall": 0.0,
      "f2": 0.0,
      "high_recall_entity": true,
      "passes_recall_target": false
    },
    {
      "entity_type": "LICENSE_PLATE",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": true,
      "passes_recall_target": true
    },
    {
      "entity_type": "PHONE",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": false,
      "passes_recall_target": true
    },
    {
      "entity_type": "PROMPT_INJECTION",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": false,
      "passes_recall_target": true
    },
    {
      "entity_type": "STUDENT_ID",
      "tp": 1,
      "fp": 0,
      "fn": 0,
      "precision": 1.0,
      "recall": 1.0,
      "f2": 1.0,
      "high_recall_entity": false,
      "passes_recall_target": true
    }
  ],
  "policy": {
    "schema_version": "1.0",
    "project": "IA para gente curiosa",
    "fasciculo": 12,
    "capitulo": 11,
    "quality_gates": {
      "auto_pass_max_risk": 0.44,
      "review_min_risk": 0.45,
      "block_min_risk": 0.82,
      "block_on_unredacted_secret": true,
      "block_on_actionable_prompt_injection": true,
      "require_owner_for_high_risk": true,
      "require_retention_for_persistent_storage": true,
      "require_human_approval_for_external_submit": true
    },
    "entity_sensitivity": {
      "NAME": 0.35,
      "EMAIL": 0.45,
      "PHONE": 0.5,
      "STUDENT_ID": 0.55,
      "ADDRESS": 0.6,
      "GPS_LOCATION": 0.8,
      "DNI_NIE": 0.85,
      "FACE": 0.8,
      "LICENSE_PLATE": 0.75,
      "HEALTH": 0.95,
      "PAYMENT": 0.9,
      "API_KEY": 1.0,
      "ACCESS_TOKEN_FRAGMENT": 0.85,
      "COOKIE": 0.8,
      "INTERNAL_SECRET": 0.95,
      "PROMPT_INJECTION": 0.7
    },
    "redaction_operators": {
      "NAME": "replace:<PERSONA>",
      "EMAIL": "hash:email",
      "PHONE": "mask:last2",
      "STUDENT_ID": "tokenize:student_id",
      "ADDRESS": "generalize:city",
      "GPS_LOCATION": "strip_exif_and_round_geohash",
      "DNI_NIE": "redact",
      "FACE": "blur:strong",
      "LICENSE_PLATE": "blur_or_redact",
      "HEALTH": "redact",
      "PAYMENT": "redact",
      "API_KEY": "revoke_and_redact",
      "ACCESS_TOKEN_FRAGMENT": "revoke_if_reconstructible",
      "COOKIE": "redact",
      "INTERNAL_SECRET": "redact",
      "PROMPT_INJECTION": "taint_untrusted_content"
    },
    "retention_days": {
      "raw_prompt": 7,
      "redacted_trace": 30,
      "eval_case_redacted": 180,
      "security_incident": 365,
      "secret_leak": 0,
      "public_asset": 365
    },
    "approved_destinations": [
      "internal_eval_store",
      "internal_support_tool",
      "approved_ai_provider",
      "security_ticket"
    ],
    "blocked_destinations": [
      "public_webhook",
      "personal_email",
      "unknown_domain"
    ],
    "required_controls_by_modality": {
      "document": [
        "ocr_pii_scan",
        "field_level_redaction",
        "retention_policy"
      ],
      "image": [
        "image_pii_scan",
        "region_redaction",
        "metadata_strip"
      ],
      "audio": [
        "transcript_pii_scan",
        "slot_confirmation",
        "retention_policy"
      ],
      "video": [
        "frame_sampling_policy",
        "region_redaction",
        "retention_policy"
      ],
      "rag": [
        "acl_filter",
        "source_label",
        "claim_grounding"
      ],
      "ui_trace": [
        "secret_scan",
        "taint_ocr",
        "approval_gate",
        "egress_policy"
      ],
      "eval_dataset": [
        "redacted_fixture",
        "dataset_owner",
        "retention_policy"
      ]
    },
    "detector_eval": {
      "beta": 2.0,
      "default_threshold": 0.7,
      "high_recall_entities": [
        "DNI_NIE",
        "API_KEY",
        "ACCESS_TOKEN_FRAGMENT",
        "HEALTH",
        "PAYMENT",
        "FACE",
        "LICENSE_PLATE",
        "GPS_LOCATION"
      ],
      "minimum_recall_for_high_risk": 0.9
    }
  }
}