Formato extendido (precondiciones, flujo principal, flujos alternos, excepciones y postcondiciones) para los 10 casos de uso más críticos del sistema: los que involucran dinero, seguridad o estado que debe ser consistente ante fallos.
| Caso de uso | CU-04 Iniciar sesión como administrador Administrador (Mike) | ||||||||||||||
| Descripción | El administrador se autentica con GitHub y accede al panel si su login está en la allowlist. | ||||||||||||||
| Precondición | El administrador tiene una cuenta de GitHub válida. Su login está registrado en la allowlist de src/lib/auth.ts. | ||||||||||||||
| Secuencia normal |
| ||||||||||||||
| Flujos alternos | Login no autorizado
| ||||||||||||||
| Postcondición | El administrador tiene una sesión JWT activa y un registro en admin_sessions con IP y user-agent. | ||||||||||||||
| Excepciones |
|
| Caso de uso | CU-09 Recibir alerta de monitor caído Cron externo (cron-job.org / Vercel Cron) | ||||||||||||||
| Descripción | El cron externo dispara el chequeo, detecta una caída, abre un incidente y notifica por push. | ||||||||||||||
| Precondición | Existe un monitor activo y no pausado en la tabla monitors. El cron externo tiene configurado el CRON_SECRET válido. | ||||||||||||||
| Secuencia normal |
| ||||||||||||||
| Flujos alternos | Recuperación
Degradación por latencia
| ||||||||||||||
| Postcondición | El estado materializado del monitor refleja el último chequeo; el historial permite reconstruir el SLO. | ||||||||||||||
| Excepciones |
|
| Caso de uso | CU-12 Procesar un pago con idempotencia Pasarela de pagos (Wompi) | ||||||||||||
| Descripción | La pasarela envía un webhook de pago; el sistema aplica el evento respetando idempotencia y orden. | ||||||||||||
| Precondición | Existe un payment en estado created o pending con un idempotencyKey único. | ||||||||||||
| Secuencia normal |
| ||||||||||||
| Flujos alternos | Evento duplicado
Evento fuera de orden
| ||||||||||||
| Postcondición | El estado del payment refleja fielmente la transacción real, con bitácora completa auditable para sustentación. | ||||||||||||
| Excepciones |
|
| Caso de uso | CU-14 Bloquear una IP maliciosa Administrador (Mike) | ||||||||||||||
| Descripción | El sensor clasifica un request hostil; el administrador (o el auto-block) añade la IP a la blocklist con TTL. | ||||||||||||||
| Precondición | El sensor de seguridad (sensor.ts) está observando requests entrantes. | ||||||||||||||
| Secuencia normal |
| ||||||||||||||
| Flujos alternos | Bloqueo manual
| ||||||||||||||
| Postcondición | Requests posteriores de esa IP reciben 403 seco hasta que expire el bloqueo. | ||||||||||||||
| Excepciones |
|
| Caso de uso | CU-18 Consultar documentación del proyecto Administrador (Mike) | ||||||||||
| Descripción | El administrador navega /docs para revisar requerimientos, casos de uso, diagramas y el kanban del propio portfolio. | ||||||||||
| Precondición | El administrador tiene sesión activa en /admin. | ||||||||||
| Secuencia normal |
| ||||||||||
| Flujos alternos | Consulta de diagrama
| ||||||||||
| Postcondición | El administrador cuenta con la documentación de ingeniería completa del proyecto sin salir del panel. |
| Caso de uso | CU-06 Registrar y dar seguimiento a un proyecto Administrador (Mike) | ||||||||||||
| Descripción | El administrador crea un proyecto, registra interacciones de seguimiento y documenta decisiones de arquitectura. | ||||||||||||
| Precondición | El administrador tiene sesión activa. Opcionalmente existe un cliente en la tabla clients al que asociar el proyecto. | ||||||||||||
| Secuencia normal |
| ||||||||||||
| Flujos alternos | Actualizar estado del proyecto
Editar o borrar un ADR
| ||||||||||||
| Postcondición | El proyecto queda con un historial trazable de interacciones y decisiones arquitectónicas en interactions y project_adrs. | ||||||||||||
| Excepciones |
|
| Caso de uso | CU-08 Registrar costos y calcular P&L Administrador (Mike) | ||||||||||||||
| Descripción | El administrador registra el costo de un servicio, quién lo paga y cuánto se factura al cliente. | ||||||||||||||
| Precondición | El proyecto existe. ENCRYPTION_KEY está configurada si el costo incluye credenciales cifradas. Existen tasas de cambio en app_settings para costos que no están en USD. | ||||||||||||||
| Secuencia normal |
| ||||||||||||||
| Flujos alternos | Editar o eliminar un servicio
Costo sin tasa de cambio
| ||||||||||||||
| Postcondición | El P&L del proyecto refleja el nuevo costo o ingreso desde el siguiente GET del detalle, sin desfase. | ||||||||||||||
| Excepciones |
|
| Caso de uso | CU-11 Ejecutar backup manual Administrador (Mike) | ||||||||||||||
| Descripción | El administrador dispara un backup de la base de datos hacia Blob storage desde el panel. | ||||||||||||||
| Precondición | El administrador tiene sesión activa (o, en el modo automático, el cron externo dispone del CRON_SECRET). Vercel Blob está habilitado en el proyecto. | ||||||||||||||
| Secuencia normal |
| ||||||||||||||
| Flujos alternos | Backup automático por cron
Consultar historial sin ejecutar
| ||||||||||||||
| Postcondición | Queda un archivo JSON inmutable en Vercel Blob con una fotografía completa de las tablas de negocio en ese momento. | ||||||||||||||
| Excepciones |
|
| Caso de uso | CU-13 Inyectar un fallo de chaos engineering Administrador (Mike) | ||||||||||||||
| Descripción | El administrador activa un flag de fallo temporal en una ruta y observa cómo el monitoreo lo detecta. | ||||||||||||||
| Precondición | El administrador tiene sesión activa. La ruta objetivo no pertenece a /admin, /api/admin ni /api/auth (protegidas contra auto-sabotaje). | ||||||||||||||
| Secuencia normal |
| ||||||||||||||
| Flujos alternos | Expiración natural
Botón de pánico
| ||||||||||||||
| Postcondición | Las rutas coincidentes sufren el fallo simulado hasta que el flag expira o se apaga manualmente, permitiendo validar que el monitoreo lo detecta. | ||||||||||||||
| Excepciones |
|
| Caso de uso | CU-16 Presentar un proyecto a un cliente Cliente | ||||||||||||||||
| Descripción | El administrador controla remotamente el avance de una presentación que el cliente ve en su navegador. | ||||||||||||||||
| Precondición | Existe una presentación creada para el proyecto con al menos un slide subido. | ||||||||||||||||
| Secuencia normal |
| ||||||||||||||||
| Flujos alternos | Agregar slides en vivo
Navegación directa
| ||||||||||||||||
| Postcondición | El slide actual queda sincronizado entre el control del administrador y la vista del cliente mediante estado persistido, sin necesidad de una conexión en tiempo real (WebSockets). | ||||||||||||||||
| Excepciones |
|