# Sprint 1.1 · Criterios de Aceptación

> **Para vos, Ricci.** Esta es la checklist que vas a usar al final del sprint para confirmar que está todo OK antes de cerrarlo. Si algo no se cumple → no avanzamos al Sprint 1.2.

---

## ✅ Checklist técnico (Claude Code lo confirma)

- [ ] BD `innovium_demo` existe en MySQL local
- [ ] Las 8 tablas creadas: `users`, `roles`, `permissions`, `role_permissions`, `user_roles`, `sessions`, `password_resets`, `audit_log`
- [ ] Las migraciones quedaron versionadas en `database/migrations/tenant/`
- [ ] Los seeds aplicados: 6 roles, ~25 permisos, mapeo role→permissions, 6 usuarios demo (uno por rol)
- [ ] Tests automáticos pasan (al menos 4 tests básicos)

---

## ✅ Checklist funcional (vos lo validás en el navegador)

### 1. Servidor levanta
- [ ] `php scripts/innovium serve` arranca sin errores
- [ ] `http://localhost:8000` muestra la welcome page (sigue funcionando)

### 2. Login funciona
- [ ] `http://localhost:8000/login` muestra el form de login
- [ ] El form se ve **idéntico al mockup `v2_login.svg`**: fondo dark con mesh gradient, glass card, wordmark Innovium, inputs con borders sutiles, botón purple gradient
- [ ] Probar login con credenciales válidas: te redirige a `/dashboard`
- [ ] Probar login con email inexistente: muestra error genérico ("Credenciales inválidas")
- [ ] Probar login con password incorrecto: mismo error genérico (no revelar cuál fue el problema)
- [ ] CSRF: si quitás el token del form, falla con error 419 o similar

### 3. Dashboard básico (post-login)
- [ ] `/dashboard` carga después de login
- [ ] Muestra el nombre del usuario logueado
- [ ] Muestra el rol del usuario
- [ ] Hay botón de "Cerrar sesión" visible

### 4. Logout funciona
- [ ] Click en "Cerrar sesión" → redirige a `/login`
- [ ] Después de logout, intentar entrar a `/dashboard` → redirige a `/login`

### 5. Audit log registra
- [ ] Hacer 1 login exitoso
- [ ] Hacer 1 login fallido
- [ ] Hacer 1 logout
- [ ] En MySQL ejecutar: `SELECT accion, creado_en FROM innovium_demo.audit_log ORDER BY id DESC LIMIT 5;`
- [ ] Ver las 3 entradas registradas con timestamps correctos

### 6. RBAC básico funciona
- [ ] Loguearse con usuario `vendedor@demo.cl`
- [ ] Intentar acceder a `/admin/usuarios` → debe rechazar con 403 o redirect
- [ ] Cerrar sesión, loguearse con `admin@demo.cl`
- [ ] Acceder a `/admin/usuarios` → debe permitir (aunque la pantalla esté vacía o sea placeholder)

---

## ✅ Checklist visual

- [ ] El login se ve igual al mockup (toleramos pequeñas diferencias, pero no tonos de azul corporativo, ni Bootstrap, ni Inter como display)
- [ ] El dashboard, aunque mínimo, usa Georgia para titulares y la paleta del design-kit
- [ ] El botón "Cerrar sesión" es secundario (no purple, sino glass o ghost)
- [ ] Funciona en tablet (1024×768) sin que se rompa el layout
- [ ] Funciona en mobile (375px) sin que se rompa

---

## ✅ Usuarios de prueba que vas a tener

Estos son los 6 usuarios que el seed crea. **Password de todos: `Innovium2026!`** (lo cambiás después).

| Email | Rol | Para qué |
|---|---|---|
| `superadmin@demo.cl` | Super Admin | Pruebas cross-tenant (más adelante) |
| `admin@demo.cl` | Admin Funeraria | Configuración del tenant |
| `gerente@demo.cl` | Gerente | Ver dashboards |
| `vendedor@demo.cl` | Vendedor | Crear contratos (cuando exista módulo) |
| `operativo@demo.cl` | Operativo | Agenda servicios (cuando exista módulo) |
| `contador@demo.cl` | Contador | Cobranzas (cuando exista módulo) |

⚠️ **Nota:** estos son usuarios DEMO para desarrollo. Antes de ir a producción, los borramos todos.

---

## ❌ Lo que NO esperar en este sprint

Para que no te frustres si no lo ves:

- 🚫 Pantallas de "olvidé mi password" — Sprint 2.x
- 🚫 Confirmación por email al crear cuenta — Sprint 2.x
- 🚫 2FA — Sprint 3.x+
- 🚫 Lockout por 5 intentos fallidos — Sprint 2.x
- 🚫 Pantalla de gestión de usuarios completa — solo placeholder
- 🚫 Selector de tenant — Sprint 1.2
- 🚫 Subdominios funcionando — Sprint 1.2

---

## Cómo cierro el sprint

Cuando todos los checks de arriba estén ✅:

1. Hacés un screenshot del login funcionando
2. Hacés un screenshot del dashboard post-login
3. Me los pegás acá en chat
4. Te confirmo "Sprint 1.1 cerrado, vamos al 1.2" o "esto hay que ajustar"
5. Si todo OK, hacés commit final: `chore: sprint 1.1 cerrado - auth + RBAC + audit_log`

---

## Si algo no funciona

**No avances**. Volvé acá y me decís:
- Qué intentaste hacer
- Qué esperabas que pasara
- Qué pasó realmente
- Mensaje de error si hay (texto completo o screenshot)

Yo ahí te ayudo a debuguear con Claude Code. **No improvises arreglos** sin entender qué falló.
