Saltar al contenido
DispensAI

ENT-005

Generación y custodia del PDF de entrevista

Establecer cómo se genera el documento consolidado de la entrevista de admisión, cómo se custodia en almacenamiento privado y cómo se accede a él con garantías de integridad.

1. Objetivo

Establecer cómo se genera el documento consolidado de la entrevista de admisión (acta de entrevista), cómo se carga en almacenamiento privado con cifrado en reposo, cómo se accede a él a través de URL firmada con tiempo de expiración, y qué registros acreditan que el documento existe y corresponde a una entrevista firmada.

2. Alcance

Cubre el tramo desde que el cierre de la entrevista dispara la generación del PDF hasta que el documento está en custodia y el expediente tiene la referencia.

No cubre:

  • La conducción de la entrevista → ENT-002 y ENT-003.
  • El cierre y la firma de la entrevista → [[wiki/entities/dispensai/protocolos/ENT-004]].
  • El sellado criptográfico del documento → [[wiki/entities/dispensai/protocolos/DOC-006]].
  • La verificación pública del documento → [[wiki/entities/dispensai/protocolos/DOC-007]].
  • La revocación del documento → [[wiki/entities/dispensai/protocolos/DOC-008]].

3. Definiciones

  • Acta de entrevista: documento que consolida el cuestionario, las respuestas de la persona, sus datos identificatorios y la firma electrónica simple. Es el respaldo documental de la sesión.
  • Almacenamiento privado (R2): bucket de Cloudflare R2, configurado con cifrado en reposo AES-256 siempre activo. El objeto no tiene URL pública permanente.
  • URL firmada (presigned URL): enlace temporal generado criptográficamente que permite descargar un objeto privado de R2 durante un período acotado (expiresInSeconds). Vencido el plazo, la URL no funciona; el objeto sigue en custodia.
  • Firma electrónica simple: la que se captura durante la entrevista (ENT-004). No es firma electrónica avanzada.
  • Sellado criptográfico: proceso definido en [[wiki/entities/dispensai/protocolos/DOC-006]] que ancla el hash del documento en una cadena verificable. Prueba integridad; no prueba autoría ni constituye certificación de ninguna autoridad.

4. Roles y responsables

RolResponsabilidad
SistemaGenerar el PDF al completar la entrevista, cargarlo en R2 con SSE, registrar la referencia en el expediente y emitir el evento ISO
Admin documentalVerificar que el PDF fue generado y está accesible; gestionar la custodia conforme a DOC-005; coordinar la revocación si corresponde
Responsable de datosVelar por que las políticas de retención y acceso al bucket sean coherentes con la base de licitud del tratamiento

5. Disparador de inicio

La entrevista fue cerrada conforme a [[wiki/entities/dispensai/protocolos/ENT-004]]: firma presente, respuestas conformadas, estado completada.

6. Requisitos previos

  • La entrevista tiene estado completada.
  • La firma está custodiada en R2 (signature_url presente).
  • El bucket R2 está configurado y las credenciales de acceso del sistema son válidas.

7. Entradas

  • Cuestionario y respuestas de la entrevista.
  • Firma electrónica simple en custodia.
  • Datos identificatorios de la persona (nombre, RUT — ya en el expediente).
  • Identidad visual de la organización para el documento.

8. Procedimiento paso a paso

  1. Al cerrar la entrevista (ENT-004), el sistema invoca generateActaEntrevista (V2 canónico) a través de _completeInterviewCore.
  2. generateActaEntrevista construye el acta consolidando cuestionario, respuestas, datos de la persona y firma embebida.
  3. El sistema carga el acta a R2 mediante uploadToR2, con SSE AES-256 activo. Obtiene la R2 key del objeto cargado.
  4. Dentro de generateActaEntrevista, se ejecuta el sellado criptográfico del documento conforme a [[wiki/entities/dispensai/protocolos/DOC-006]], que ancla el hash en una cadena verificable.
  5. El sistema actualiza admission_interviews.pdf_url con la R2 key del acta.
  6. El sistema emite el evento ISO interview_completed.
  7. Para acceder al documento, el Admin documental solicita una URL firmada mediante getSignedUrl, que genera un enlace temporal con expiresInSeconds. La URL expirada no permite el acceso; el objeto permanece en R2.
  8. El Admin documental verifica que el PDF es legible y contiene la información correcta.

9. Puntos de control

#ControlMomento
C1La generación del PDF se dispara sólo tras el cierre firmado (ENT-004)Paso 1
C2El archivo se carga con SSE AES-256 siempre activoPaso 3
C3La R2 key queda registrada en admission_interviews.pdf_urlPaso 5
C4El acceso es sólo por URL firmada con tiempo de expiraciónPaso 7
C5El sellado criptográfico ancla el hash en cadena verificablePaso 4

10. Criterios de decisión

SituaciónResultado
PDF generado, en R2 y pdf_url presenteEntrevista completada con documento; custodia activa
PDF no generado por falla técnicaEntrevista firmada sin acta → §11
URL firmada expirada al intentar accederGenerar nueva URL firmada; el objeto sigue en R2
Documento corrupto o ilegibleAdmin documental inicia regeneración; ver §11

11. Excepciones y escalamiento

  • Falla en la generación del PDF. La entrevista puede quedar firmada con pdf_url nulo (ver brecha 2 en §17). El Admin documental detecta la ausencia, reintenta la generación desde el panel y, si no es posible, escala a soporte técnico. Mientras el documento no exista, no debe comunicarse a la persona que su expediente está completo.
  • Corrupción del objeto en R2. El Admin documental solicita regenerar el PDF desde las respuestas y la firma almacenadas. El documento regenerado tiene una R2 key distinta; la referencia en el expediente se actualiza y el objeto corrupto se elimina siguiendo DOC-005.
  • Solicitud de acceso al documento por la persona solicitante. Se genera una URL firmada con tiempo de expiración adecuado al canal de entrega. No se comparte la R2 key directamente. La entrega queda registrada.

12. Registros generados

  • Acta de entrevista en R2 (objeto privado, SSE AES-256).
  • R2 key registrada en admission_interviews.pdf_url.
  • Referencia criptográfica del sellado (DOC-006).
  • Evento ISO interview_completed.

13. Indicadores

IndicadorFórmulaMetaFuente
Cobertura de actasEntrevistas completadas con pdf_url no nulo ÷ entrevistas completadas100 %admission_interviews
Disponibilidad del PDFAccesos exitosos a URL firmada ÷ accesos intentados≥ 99 %Logs de acceso R2
Tiempo hasta generaciónTimestamp de carga en R2 − timestamp de cierre≤ 60 sLogs del sistema

14. Riesgos y controles

RiesgoControlTipo
Documento accesible por tercerosAcceso exclusivo por URL firmada con expiración (C4)Preventivo
Alteración del documento tras la firmaSellado criptográfico (C5) + DOC-006Preventivo / Detectivo
Entrevista cerrada sin actapdf_url nullable no bloquea el cierre → brecha 2 en §17—
Pérdida del documento en R2R2 con SSE (C2); política de retención de DOC-005Preventivo
Imposibilidad de acreditar existencia del PDF en la cadena de auditoríaAusencia de logAudit → brecha 1 en §17—

15. Normativa y referencias

NormaReferenciaQué cubre en este protocolo
ISO 9001:2015§8.5.1 Control de la provisiónEl acta es el registro que acredita que la entrevista se ejecutó de forma controlada
ISO 27001:2022A.5.33 Protección de registrosEl acta es un registro clínico; debe protegerse contra alteración, pérdida y acceso no autorizado
ISO 27001:2022A.8.15 Registro de eventosLa generación, el acceso y la revocación del documento deben quedar registrados
Ley 20.584Art. 12Integridad de la ficha clínica: el acta de entrevista forma parte del expediente de la persona
Ley 21.719Art. 14 quinquiesMedidas técnicas de seguridad proporcionales al riesgo sobre el documento que contiene datos sensibles

La firma que contiene el documento es electrónica simple, válida entre las partes según la Ley 19.799 Art. 3. No equivale a firma electrónica avanzada. El sellado criptográfico (DOC-006) prueba integridad, no autoría. El cumplimiento de las normas citadas no está certificado por ninguna autoridad.

16. Anexos y formularios vinculados

  • [[wiki/entities/dispensai/protocolos/ENT-004]] — Cierre y firma de entrevista.
  • [[wiki/entities/dispensai/protocolos/DOC-005]] — Custodia documental en repositorio seguro.
  • [[wiki/entities/dispensai/protocolos/DOC-006]] — Sellado criptográfico de documentos.
  • [[wiki/entities/dispensai/protocolos/DOC-007]] — Verificación pública de documentos.

17. Implementación en el sistema

La generación y custodia del PDF están implementadas. Al completar la entrevista, _completeInterviewCore (importado en app/actions/interviews.ts) invoca generateActaEntrevista (V2 canónico, que reemplazó generateInterviewPdf). El objeto se carga a R2 con uploadToR2 (SSE AES-256 siempre activo). El acceso es por getSignedUrl con tiempo de expiración.

Elemento del protocoloDónde vive
Generación del acta (pasos 1-2)generateActaEntrevista dentro de _completeInterviewCore en lib/interview-core.ts
Carga a R2 con SSE (C2)uploadToR2 en lib/r2.ts:56-82; SSE AES-256 siempre activo
R2 key en el expediente (C3)admission_interviews.pdf_url text (actualizado tras la carga)
Acceso por URL firmada (C4)getSignedUrl en lib/r2.ts:92-111; enlace temporal con expiresInSeconds
Sellado criptográfico (C5)Ejecutado dentro de generateActaEntrevista; conforme a DOC-006
Firma en custodiaadmission_interviews.signature_url text (R2 key de la firma)
Evento ISOlogISOSystemEvent("interview_completed") en app/actions/interviews.ts:728-745

Brechas conocidas:

  1. Ausencia de entrada en audit_logs para la generación del PDF. Confirmado por lectura directa de app/actions/interviews.ts: no existe llamada a logAudit en ese archivo. La generación y la carga del acta no producen una entrada en la cadena audit_logs con previous_hash y chain_hash. El evento ISO interview_completed registra el cierre de la entrevista, pero no contiene el hash del documento ni la R2 key. Un auditor que revise la cadena no puede acreditar cuándo se generó el acta ni si su contenido corresponde a lo firmado en la sesión.
  2. pdf_url nullable no bloquea el cierre. Confirmado en migración 20240101000000_baseline_schema.sql: la columna admission_interviews.pdf_url text no tiene restricción NOT NULL. La regla que impide cerrar sin documento (ENT-004 §11) vive en el código de la server action, no en la base de datos. Si ese código falla o se omite en un refactor futuro, el sistema puede marcar una entrevista como completada sin que el acta exista. El Admin documental debe verificar la presencia de pdf_url como control compensatorio.

Lo que ejecuta la organización fuera del sistema: la verificación de que el PDF es legible y contiene la información correcta; la decisión de cuánto tiempo conservar el documento y cuándo revocarlo (DOC-008).

Brecha observada en auditoría 2026-08-31

  • Ruta no encontrada exacta: /admin/entrevistas/[id] — puede ser variante (singular/plural, /admin vs /dashboard) o ruta renombrada. Acción correctora: actualizar el frontmatter con la ruta real que usa el sistema.

18. Historial de versiones

VersiónFechaCambioAutor
1.02026-08-28Versión inicial. Redactada desde la corrida de evidencia 2026-08-28-ENT. Dos brechas declaradas.Admin documental
1.12026-08-29Cierre de INFERIDO: confirmado por lectura directa de app/actions/interviews.ts que no existe llamada a logAudit (brecha 1). Confirmado en migración 20240101000000_baseline_schema.sql que pdf_url text carece de NOT NULL (brecha 2). Ambas brechas pasan de INFERIDO a CONFIRMADO. Estado ascendido a Vigente.Admin documental
1.0+audit-2026-08-312026-08-31Detectados gaps en auditoría: /admin/entrevistas/[id]. §17 actualizada para documentar la brecha con evidencia de código. Estado documental sin cambio.Auditoría automática
1.22026-09-10Corrección de numeración normativa: el deber de adoptar medidas de seguridad es el Art. 14 quinquies de la Ley 21.719, no el 14 ter (deber de información); verificado contra el texto oficial (BCN, idNorma 1209272).Harness dispensai-protocolos

Documentos asociados

  • Acta de entrevista (PDF, generada por el sistema)
  • Firma electrónica simple embebida
  • Referencia criptográfica del sellado (DOC-006)

Registros y evidencia

  • admission_interviews.pdf_url (referencia al PDF en R2)
  • admission_interviews.signature_url (referencia a la firma en R2)
  • Evento ISO interview_completed

Indicadores

  • % de entrevistas cerradas con PDF generado
  • % de accesos al PDF que resultan en error de URL expirada
  • Tiempo entre cierre de entrevista y disponibilidad del PDF

Normativa y referencias

  • ISO 9001:2015 §8.5.1
  • ISO 27001:2022 A.5.33
  • ISO 27001:2022 A.8.15
  • Ley 20.584 Art. 12
  • Ley 21.719 Art. 14 quinquies

Dónde deja rastro en el sistema

Rutas
  • /admin/entrevistas/[id]
Tablas
  • admission_interviews
Eventos
  • interview_completed