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
| Rol | Responsabilidad |
|---|---|
| Sistema | Generar el PDF al completar la entrevista, cargarlo en R2 con SSE, registrar la referencia en el expediente y emitir el evento ISO |
| Admin documental | Verificar que el PDF fue generado y está accesible; gestionar la custodia conforme a DOC-005; coordinar la revocación si corresponde |
| Responsable de datos | Velar 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_urlpresente). - 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
- Al cerrar la entrevista (ENT-004), el sistema invoca
generateActaEntrevista(V2 canónico) a través de_completeInterviewCore. generateActaEntrevistaconstruye el acta consolidando cuestionario, respuestas, datos de la persona y firma embebida.- El sistema carga el acta a R2 mediante
uploadToR2, con SSE AES-256 activo. Obtiene la R2 key del objeto cargado. - 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. - El sistema actualiza
admission_interviews.pdf_urlcon la R2 key del acta. - El sistema emite el evento ISO
interview_completed. - Para acceder al documento, el Admin documental solicita una URL firmada mediante
getSignedUrl, que genera un enlace temporal conexpiresInSeconds. La URL expirada no permite el acceso; el objeto permanece en R2. - El Admin documental verifica que el PDF es legible y contiene la información correcta.
9. Puntos de control
| # | Control | Momento |
|---|---|---|
| C1 | La generación del PDF se dispara sólo tras el cierre firmado (ENT-004) | Paso 1 |
| C2 | El archivo se carga con SSE AES-256 siempre activo | Paso 3 |
| C3 | La R2 key queda registrada en admission_interviews.pdf_url | Paso 5 |
| C4 | El acceso es sólo por URL firmada con tiempo de expiración | Paso 7 |
| C5 | El sellado criptográfico ancla el hash en cadena verificable | Paso 4 |
10. Criterios de decisión
| Situación | Resultado |
|---|---|
PDF generado, en R2 y pdf_url presente | Entrevista completada con documento; custodia activa |
| PDF no generado por falla técnica | Entrevista firmada sin acta → §11 |
| URL firmada expirada al intentar acceder | Generar nueva URL firmada; el objeto sigue en R2 |
| Documento corrupto o ilegible | Admin documental inicia regeneración; ver §11 |
11. Excepciones y escalamiento
- Falla en la generación del PDF. La entrevista puede quedar firmada con
pdf_urlnulo (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
| Indicador | Fórmula | Meta | Fuente |
|---|---|---|---|
| Cobertura de actas | Entrevistas completadas con pdf_url no nulo ÷ entrevistas completadas | 100 % | admission_interviews |
| Disponibilidad del PDF | Accesos exitosos a URL firmada ÷ accesos intentados | ≥ 99 % | Logs de acceso R2 |
| Tiempo hasta generación | Timestamp de carga en R2 − timestamp de cierre | ≤ 60 s | Logs del sistema |
14. Riesgos y controles
| Riesgo | Control | Tipo |
|---|---|---|
| Documento accesible por terceros | Acceso exclusivo por URL firmada con expiración (C4) | Preventivo |
| Alteración del documento tras la firma | Sellado criptográfico (C5) + DOC-006 | Preventivo / Detectivo |
| Entrevista cerrada sin acta | pdf_url nullable no bloquea el cierre → brecha 2 en §17 | — |
| Pérdida del documento en R2 | R2 con SSE (C2); política de retención de DOC-005 | Preventivo |
| Imposibilidad de acreditar existencia del PDF en la cadena de auditoría | Ausencia de logAudit → brecha 1 en §17 | — |
15. Normativa y referencias
| Norma | Referencia | Qué cubre en este protocolo |
|---|---|---|
| ISO 9001:2015 | §8.5.1 Control de la provisión | El acta es el registro que acredita que la entrevista se ejecutó de forma controlada |
| ISO 27001:2022 | A.5.33 Protección de registros | El acta es un registro clínico; debe protegerse contra alteración, pérdida y acceso no autorizado |
| ISO 27001:2022 | A.8.15 Registro de eventos | La generación, el acceso y la revocación del documento deben quedar registrados |
| Ley 20.584 | Art. 12 | Integridad de la ficha clínica: el acta de entrevista forma parte del expediente de la persona |
| Ley 21.719 | Art. 14 quinquies | Medidas 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 protocolo | Dó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 custodia | admission_interviews.signature_url text (R2 key de la firma) |
| Evento ISO | logISOSystemEvent("interview_completed") en app/actions/interviews.ts:728-745 |
Brechas conocidas:
- Ausencia de entrada en
audit_logspara la generación del PDF. Confirmado por lectura directa deapp/actions/interviews.ts: no existe llamada alogAuditen ese archivo. La generación y la carga del acta no producen una entrada en la cadenaaudit_logsconprevious_hashychain_hash. El evento ISOinterview_completedregistra 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. pdf_urlnullable no bloquea el cierre. Confirmado en migración20240101000000_baseline_schema.sql: la columnaadmission_interviews.pdf_url textno tiene restricciónNOT 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 comocompletadasin que el acta exista. El Admin documental debe verificar la presencia depdf_urlcomo 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ón | Fecha | Cambio | Autor |
|---|---|---|---|
| 1.0 | 2026-08-28 | Versión inicial. Redactada desde la corrida de evidencia 2026-08-28-ENT. Dos brechas declaradas. | Admin documental |
| 1.1 | 2026-08-29 | Cierre 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-31 | 2026-08-31 | Detectados 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.2 | 2026-09-10 | Correcció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