Generar enlace de compartición
High
"Como cliente de GrowthPulse, quiero generar un enlace único para mi informe con fecha de expiración configurable, para que pueda enviarlo a mi director sin que tenga cuenta en la plataforma."
Criterios de aceptación (Given-When-Then)
›Dado que el usuario está en un dashboard, cuando pulsa "Compartir", entonces se genera un enlace JWT válido en < 1 s.
›El usuario puede seleccionar expiración: 24 h, 7 días o 30 días.
›El enlace copia al portapapeles con confirmación visual.
›Si el token expira, el visitante ve mensaje de "Enlace caducado" (no 404).
I ✓
N ✓
V ✓
E ✓
S ✓
T ✓
Vista pública del informe
High
"Como destinatario externo, quiero ver el informe a través del enlace sin necesitar cuenta, para revisar las métricas que mi proveedor ha compartido conmigo."
Criterios de aceptación
›Dado un token JWT válido, cuando el visitante accede a la URL pública, entonces el dashboard se renderiza en modo lectura en < 3 s.
›No se muestran controles de edición ni navegación de cuenta.
›El informe es responsive (mobile-first, ≥ 320 px).
›Rate limit: máx. 60 req/min por IP; respuesta 429 con retry-after.
›Accesible con lector de pantalla (WCAG 2.1 AA).
I ✓
N ✓
V ✓
E ✓
S ✓
T ✓
Revocar acceso de enlace
High
"Como administrador de la cuenta, quiero poder revocar cualquier enlace activo, para controlar qué información sigue siendo accesible a externos."
Criterios de aceptación
›Dado que hay enlaces activos, cuando el admin pulsa "Revocar", entonces el enlace deja de funcionar en < 5 s (TTL de caché).
›El panel de admin muestra lista de enlaces activos con fecha de creación y expiración.
›Los no-admin no ven el panel de gestión de enlaces.
I ✓
N ✓
V ✓
E ✓
S ✓
T ✓
Token JWT firmado para links públicos
High · Enabler técnico
"Como developer, necesito implementar firma y validación de tokens JWT con expiración configurable para habilitar las historias de compartición pública."
Criterios de aceptación
›Endpoint POST /api/share genera JWT firmado con RS256.
›Tests unitarios de firma y validación con ≥ 90 % cobertura.
›Sin regresión en endpoints de autenticación existentes.
I ✓
N —
V ✓
E ✓
S ✓
T ✓
Rate limiting en endpoint público
Medium · Enabler técnico
"Como developer, necesito implementar rate limiting en el endpoint público para proteger la plataforma de abuso y garantizar disponibilidad."
Criterios de aceptación
›60 req/min por IP; respuesta HTTP 429 con header Retry-After.
›Configuración via variable de entorno (no hardcoded).
›Tests de integración que verifican el throttling.
I ✓
N —
V ✓
E ✓
S ✓
T ✓