RF59: Sistema genera certificado de finalización de curso
Descripción
El sistema genera un certificado de finalización (PDF) cuando un usuario completa un curso (RF57), con un folio verificable, y lo deja disponible para el usuario (RF58).
El PDF se almacena en S3 privado (SSE-S3) y se entrega solo por URL prefirmada. La generación es asíncrona y se dispara por la finalización del curso.
| Campo | Valor |
|---|---|
| Módulo | Courses Module |
| Actor | Sistema (worker de generación) |
| Endpoint | Interno: worker disparado por finalización (RF57) |
| Precondiciones | El usuario finalizó el curso cumpliendo las condiciones |
| Prioridad | Baja (post-MVP) |
| Etapa | MBI 1 |
| Requisitos relacionados | RF57, RF58 |
Reglas de negocio
- RN-59.1 — Se genera un único certificado por (usuario, curso); reintentos no duplican (idempotente por folio).
- RN-59.2 — El certificado incluye nombre del usuario, título del curso, fecha de finalización y un folio único verificable.
- RN-59.3 — El PDF se guarda en S3 privado; nunca público.
- RN-59.4 — Al generarse, se notifica al usuario (push/email) que su certificado está disponible.
- RN-59.5 — El folio permite verificar la autenticidad del certificado (endpoint de verificación).
Validaciones / consideraciones
| Aspecto | Regla |
|---|---|
| Disparador | Evento de finalización (RF57). |
| Idempotencia | Un certificado por usuario/curso. |
| Datos | Nombre real del usuario tomado de su perfil. |
Criterios de aceptación
Escenario 1: Generación exitosa
Dado que un usuario finalizó un curso, Cuando se dispara la generación, Entonces el sistema crea el PDF con folio único, Y lo guarda en S3 privado, Y notifica al usuario que está disponible (RF58).
Escenario 2: Reintento sin duplicar (idempotencia)
Dado que ya existe un certificado para ese usuario y curso, Cuando se vuelve a disparar la generación, Entonces el sistema no crea un duplicado.
Escenario 3: Fallo en la generación
Dado que la generación del PDF falla, Cuando ocurre el error, Entonces el sistema lo registra y reintenta más tarde, Y no marca el certificado como disponible hasta lograrlo.
Escenario 4: Verificación de autenticidad
Dado que alguien tiene el folio de un certificado, Cuando lo verifica, Entonces el sistema confirma su validez sin exponer datos personales innecesarios.
Criterios no funcionales
- Generación asíncrona; PDF en S3 privado con SSE-S3.
- Comunicación TLS 1.2+.