00-day-brief.md
00 — Day brief · 2026-08-12 · PRIMA
Decisiones ALS-2 BRIEF
| Campo | Valor |
|---|---|
| Fecha | 2026-08-12 |
| Nombre | PRIMA |
| Complejidad | Nivel 3 (no L2 consecutivo tras CANTERA) |
| Sector | Seguros / micro-corredurías |
| Tipo | SaaS B2B: mesa de siniestros + pólizas multi-rol JWT |
| Plataforma | Web responsive (desktop staff + mobile agente) |
| Registro | R-HY — marketing sobrio + tool data-dense innovadora |
| Shell | S-SIDE — sidebar app / dashboard |
| Home | H-DATA — dashboard-first (métricas + cola, sin hero marketing genérico) |
| Flujo | F-KAN — tablero kanban de siniestros por estado |
| Por qué no CANTERA | No S-BOTTOM/H-WIZARD/F-ONB; no construcción; no wizard de campo |
| Por qué no PLIEGO | No S-MIN/H-FULL/F-STORY; no moda editorial |
Terna unicidad
R-HY · S-SIDE · H-DATA · F-KAN
Directivas
- D-P0-01…08, D-P1-01 (≥12 UX Paper), D-P0-08 (≥10 UI), D-P1-05 JWT multi-rol
- Tipografía Outfit + Source Serif 4 (evitar Archivo, Fraunces/Figtree, Syne, Literata, Sora)
- Paleta slate / ice / teal trust / coral — no limestone/copper, no wine, no maritime navy, no lime, no sage
Alcance L3 must
- Landing híbrida corta (propuesta de valor correduría) + login
- Dashboard data-first (KPIs + atajos)
- Kanban de siniestros (OPEN → IN_REVIEW → INFO_NEEDED → APPROVED → CLOSED / REJECTED)
- Detalle siniestro + cambio de estado con audit note
- Listado/búsqueda de pólizas
- Roles JWT: AGENT (agente), BACKOFFICE (tramitador), CLIENT (vista limitada de sus siniestros)
- Empty / loading / error / mobile claim board
- ≥12 UX + ≥10 UI artboards Paper
Supuestos documentados
- No somos una aseguradora: somos la mesa operativa de la correduría (intermediación).
- Volumen modelo: 15–40 siniestros abiertos por correduría pequeña; 1–3 agentes.
- No hay pasarela de pago en L3 slice (pólizas seed; cobro fuera de alcance).
00-paper-reference.md
Paper reference · PRIMA
| URL | https://app.paper.design/file/01KZTCHNZ8PSNBMX9Q42CEFDW5 |
| File ID | 01KZTCHNZ8PSNBMX9Q42CEFDW5 |
UX-count: 12 UI-count: 11
UX process (prefijo UX- · mínimo 12)
| ID | Nombre | Contenido |
|---|---|---|
| UX-00 | Process cover | Identidad PRIMA + terna |
| UX-01 | Stakeholders | Dueño, agente, backoffice, cliente |
| UX-02 | Personas | Elena, Marcos, Laura |
| UX-03 | JTBD | Cuando hay siniestro… |
| UX-04 | Stories | Must kanban/create/portal |
| UX-05 | Journey | Landing→portal |
| UX-06 | Blueprint | Front/back/soporte/fallos |
| UX-07 | Site map / IA | Rutas app + portal |
| UX-08 | Flujos | F1–F6 |
| UX-09 | Datos + permisos | ER + roles |
| UX-10 | Métricas | North star + activación |
| UX-11 | Research notes | Comprobado/supuesto/hipótesis |
UI producto (prefijo UI- · mínimo 10)
| ID | Nombre | Flujo |
|---|---|---|
| UI-00 | Design tokens | DS slate/teal |
| UI-01 | Landing hybrid | Marketing + preview kanban |
| UI-02 | Login | Split trust |
| UI-03 | Dashboard data | H-DATA KPIs + S-SIDE |
| UI-04 | Kanban claims | F-KAN core |
| UI-05 | Claim detail | Status + audit |
| UI-06 | New claim | Alta |
| UI-07 | Policies table | Búsqueda |
| UI-08 | Portal client | CLIENT list |
| UI-09 | Mobile kanban | Mobile core |
| UI-10 | Empty error loading | System states |
Media
- Tokens: Outfit + Source Serif 4; ink/ice/teal/coral
- Portfolio card: export UI-04 Kanban (producto, no UX-*)
01-project-definition.md
01 — Project definition · PRIMA
5.1 Identidad
| Campo | Valor |
|---|---|
| Nombre | PRIMA |
| Significado | La prima es el compromiso; el producto ordena el después del siniestro. También evoca “primera línea” de la correduría. |
| Eslogan | Siniestros claros. Clientes informados. |
| Una frase | Mesa operativa multi-rol para corredurías independientes: kanban de siniestros, pólizas y portal ligero del asegurado. |
| Ejecutiva | PRIMA es un SaaS B2B para micro-corredurías que aún gestionan siniestros por email y hojas de cálculo. Centraliza la cola de tramitación, estados auditables y la vista del cliente sin sustituir al core de la aseguradora. |
| Sector | Seguros / intermediación |
| Tipo | Plataforma SaaS B2B + portal cliente |
| Plataforma principal | Web responsive (desktop tramitación) |
| Secundarias | Mobile web para agente en visita |
| Mercado | España (ES-es); extensible LATAM |
| Idioma UI | Español |
| Otros idiomas | Catalán/inglés (Won’t have L3) |
5.2 Problema
| Tipo | Contenido |
|---|---|
| Principal | Siniestros dispersos en WhatsApp, email y Excel: sin estado compartido ni SLA visible. |
| Secundarios | Cliente sin visibilidad; re-trabajo entre agente y backoffice; sin historial de decisiones. |
| Quién | Agentes de correduría, tramitadores, asegurados. |
| Hoy | Hilos de email + carpetas compartidas + Excel. |
| Deficiencias | No hay dueño claro del estado; no hay métricas; incumplimiento percibido de plazos. |
| Coste | Horas de chase-up, churn de cartera, riesgo reputacional. |
| Oportunidad | Tool vertical light (no core asegurador) con kanban + JWT multi-rol. |
Comprobado (secundario): sector de corredurías atomizado en ES; digitalización parcial (hipótesis de mercado documentada, no encuesta propia).
Supuesto: 15–40 siniestros abiertos por oficina pequeña.
Hipótesis: kanban + notas de estado reducen tiempo medio de resolución percibido.
Decisión de diseño: no integrar APIs de aseguradoras en L3 (manual status + seed).
5.3 Objetivos
- Negocio: activar corredurías piloto; retención por uso diario del tablero.
- Usuario agente: abrir y mover siniestros sin fricción.
- Usuario backoffice: priorizar cola y documentar decisiones.
- Usuario cliente: ver estado sin llamar.
- Producto: vertical slice JWT + kanban + pólizas + portal.
- Experiencia: data-dense, sobrio, confiable (trust teal).
- Técnicos: Nest+Prisma+Neon; Angular standalone+Tailwind; a11y AA.
- No objetivos: cotización, cobro de primas, multitenancy org tree, OCR de partes, app nativa.
- Restricciones: L3 en un día; sin pasarela de pago.
- Riesgos: confusión con “core asegurador”; datos sensibles (PII).
5.4 Métricas
| Métrica | Definición |
|---|---|
| North Star | Siniestros movidos de estado por día / usuario activo |
| Activación | Primer siniestro creado o estado cambiado en ≤24h tras login |
| Conversión | Landing → trial/login demo |
| Retención | WAU agentes |
| Tiempo en estado | Mediana horas por columna kanban |
| Abandono | Siniestros sin update >7d |
| CSAT portal | Encuesta post-cierre (futuro) |
| Errores API | 5xx rate |
| Accesibilidad | 0 issues críticos axe en flujos core |
Roles
| Rol | Código JWT | Puede |
|---|---|---|
| Agente | AGENT | Crear siniestro, ver propios, mover a INFO_NEEDED |
| Tramitador | BACKOFFICE | Ver todos, cualquier transición, notas de audit |
| Cliente | CLIENT | Ver solo sus siniestros y estado |
02-ux-research-strategy.md
02 — UX research strategy · PRIMA
Enfoque
Investigación secundaria + modelo operativo (cron): sin entrevistas inventadas.
Fuentes / razonamiento
- Observación de operaciones de intermediación: el valor está en estado compartido, no en tarificación.
- Analogías: mesas de tickets (Zendesk/Jira) adaptadas a dominio siniestro.
- Riesgo de datos: DNI, matrícula, IBAN → minimizar campos en UI; mask en listados.
Stakeholders (mapa)
| Actor | Influencia | Interés | Necesidad | Riesgo |
|---|---|---|---|---|
| Dueño correduría | Alta | Alta | Visibilidad SLA | Resistencia a cambio |
| Agente | Media | Alta | Rapidez en campo | Bypass por WhatsApp |
| Backoffice | Alta | Alta | Cola priorizada | Sobrecarga si UX densa mal |
| Cliente asegurado | Baja | Alta | Tranquilidad | Llamadas si portal opaco |
| Legal/compliance | Alta | Media | Minimización datos | Bloqueo si PII expuesta |
| Aseguradora (externa) | Media | Baja | Datos limpios | Fuera de alcance L3 |
Personas (3)
1. Elena Vázquez — Agente (34)
- Contexto: visita talleres y clientes; móvil + portátil.
- Digital: media-alta.
- Motivación: cerrar partes sin reescribir emails.
- Frustración: “Nunca sé si backoffice ya lo cogió”.
- Cita: “Si el estado está en la app, dejo de reenviar capturas.”
- Escenario: registra siniestro de lunas y lo deja en OPEN.
2. Marcos Gil — Tramitador backoffice (41)
- Contexto: oficina, 2 monitores, Excel histórico.
- Motivación: priorizar y documentar.
- Frustración: estados inventados en el asunto del mail.
- Cita: “Necesito columnas, no hilos.”
3. Laura Peña — Asegurada (52)
- Contexto: poco tiempo, poca paciencia con jerga.
- Motivación: saber “en qué va lo mío”.
- Frustración: “llame usted mañana”.
- Cita: “Solo quiero ver si ya está con la compañía.”
JTBD
- Funcional: Cuando hay un siniestro, quiero registrarlo y seguir el estado, para no perder el hilo con el cliente.
- Emocional: Quiero sentir control y profesionalidad.
- Social: Quiero que el cliente perciba una correduría moderna.
Historias (épicas)
E1 Kanban
- Como BACKOFFICE, quiero ver columnas por estado, para priorizar.
AC: 5–6 columnas; drag o botones de transición; contador por columna. MoSCoW: Must.
E2 Alta
- Como AGENT, quiero crear un siniestro con póliza vinculada, para iniciar tramitación. Must.
E3 Portal
- Como CLIENT, quiero listar mis siniestros y su estado legible, para no llamar. Must.
E4 Pólizas
- Como AGENT, quiero buscar pólizas por matrícula/NIF, para vincular. Should.
Journey (agente + backoffice)
Descubrimiento landing → login → dashboard KPIs → kanban → detalle → cambio estado → cliente ve update.
Blueprint (resumen)
| Capa | Elemento |
|---|---|
| Usuario | Agente crea; cliente consulta |
| Frontstage | Dashboard, kanban, portal |
| Backstage | JWT, audit notes, Prisma |
| Soporte | Neon Postgres, email (futuro) |
| Fallos | Red, 401, validación |
| Recuperación | Reintento, re-login, mensajes claros |
03-information-architecture.md
03 — Information architecture · PRIMA
Mapa del sitio
/ (marketing hybrid)
/login
/app
/dashboard (H-DATA)
/claims (kanban F-KAN)
/claims/:id
/claims/new
/policies
/policies/:id
/portal
/claims (CLIENT)
/claims/:id
Navegación
- Shell S-SIDE: Dashboard · Siniestros · Pólizas · (Salir)
- CLIENT: solo Portal siniestros
- Breadcrumbs en detalle
Taxonomía estados siniestro
OPEN → IN_REVIEW → INFO_NEEDED → APPROVED → CLOSED
Alt: REJECTED desde IN_REVIEW/INFO_NEEDED
Matriz de permisos
| Módulo | AGENT | BACKOFFICE | CLIENT |
|---|---|---|---|
| Dashboard | Ver propio scope | Ver global | — |
| Claims list/kanban | Ver (scope) | Ver todos | — |
| Claim create | Sí | Sí | No |
| Claim status | Limitado | Full | No |
| Policies | Buscar/ver | Full | — |
| Portal claims | — | — | Solo suyos |
Inventario de contenido
| Contenido | Owner | Prioridad | Update |
|---|---|---|---|
| Marketing copy | Product | P1 | Raro |
| Labels estado | UX Writer | P0 | Estable |
| Notas audit | Sistema | P0 | Cada transición |
| Seed demo | Dev | P0 | Cada deploy |
04-user-flows.md
04 — User flows · PRIMA
F1 — Login JWT
Entrada: /login → email+password → JWT+role → redirect por rol
Errores: 401 credenciales; red
Analítica: login_success, login_fail
F2 — Dashboard data-first
KPIs: abiertos, en revisión, info pendiente, cerrados 7d
Atajos: Nuevo siniestro, Ir a kanban
F3 — Kanban siniestros
Columnas por estado; card con ref, asegurado, póliza, updatedAt
Acción: abrir detalle; (backoffice) mover estado
F4 — Crear siniestro
Form: policyId, title, description, incidentDate
Validación: policy requerida, title ≥ 4
Success → detalle OPEN
F5 — Cambio de estado
Select/botones permitidos + nota opcional → audit log
Cliente ve nuevo label amigable
F6 — Portal cliente
Lista simple + detalle read-only
Estados de sistema
Empty kanban · Loading skeleton · Error red · 403 · 401 sesión
05-data-model.md
05 — Data model · PRIMA
Entidades
User
id, email, passwordHash, name, role (AGENT|BACKOFFICE|CLIENT), createdAt
Policy
id, number, holderName, holderNif, plate?, productType, status (ACTIVE|LAPSED), agentId?, createdAt
Claim
id, ref (PRM-YYYY-####), policyId, title, description, status, incidentDate, createdById, assigneeId?, createdAt, updatedAt
ClaimEvent (audit)
id, claimId, fromStatus?, toStatus, note?, actorId, createdAt
Relaciones
User 1—N Policy (agent)
Policy 1—N Claim
User 1—N Claim (createdBy)
Claim 1—N ClaimEvent
Índices
Claim(status), Claim(ref unique), Policy(number unique), Policy(holderNif), User(email unique)
Privacidad
holderNif parcialmente enmascarado en listados; no IBAN en L3.
06-tech-stack.md
06 — Tech stack · PRIMA
| Capa | Elección | Por qué |
|---|---|---|
| Web | Angular standalone + Tailwind | CRON fijo + data UI |
| API | NestJS + Passport JWT | Multi-rol |
| DB | Neon Postgres + Prisma | Serverless + migraciones |
| Auth | JWT bearer | Simple L3 |
| Hosting (doc) | API Railway/Fly; web Vercel (opcional) | Documentado, no bloqueante |
No usamos Firebase/Supabase Auth para no diverger del playbook ALS.
07-creative-direction.md
07 — Creative direction · PRIMA
Concepto visual
Trust desk: sobriedad de oficina de seguros moderna sin clichés de “escudos dorados”. Slate profundo, hielo, teal de confianza, coral para riesgo/rechazo.
Mood
Profesional, denso, tranquilo. Dashboard y kanban como protagonistas (H-DATA / F-KAN).
Tipografía
- Display / serif acentos: Source Serif 4
- UI: Outfit
Color
| Token | Hex | Uso |
|---|---|---|
| ink | #0F172A | Texto |
| ice | #F1F5F9 | Fondo app |
| surface | #FFFFFF | Cards |
| teal | #0F766E | Primary |
| teal-soft | #CCFBF1 | Chips |
| coral | #E11D48 | Danger / REJECTED |
| amber | #D97706 | INFO_NEEDED |
| border | #E2E8F0 | Divisores |
Anti-cliché
No stock de familias felices con paraguas; no navy marítimo RELE; no limestone CANTERA.
08-design-system.md
08 — Design system · PRIMA
Tokens
Ver creative direction + CSS variables en Angular (styles.css / tailwind theme).
Componentes
- SideNav (S-SIDE)
- KpiCard
- KanbanColumn / KanbanCard
- StatusPill (por estado)
- DataTable (pólizas)
- FormField / Button primary-secondary-ghost
- EmptyState / ErrorBanner / Skeleton
Densidad
App: 8px grid; cards radius 10px; no rounded-3xl genérico.
09-content-guide.md
09 — Content guide · PRIMA
Voz
Clara, adulta, sin infantilizar. Evitar jerga de aseguradora sin glosa.
Labels de estado (cliente)
| Código | Label UI |
|---|---|
| OPEN | Recibido |
| IN_REVIEW | En estudio |
| INFO_NEEDED | Necesitamos información |
| APPROVED | Aceptado por tramitación |
| CLOSED | Cerrado |
| REJECTED | No procede |
Microcopy
- Empty kanban: “No hay siniestros en esta columna.”
- Error red: “No pudimos cargar el tablero. Reintenta.”
- CTA: “Nuevo siniestro”, “Mover estado”, “Ver póliza”
10-accessibility.md
10 — Accessibility · PRIMA
- WCAG 2.2 AA objetivo
- Contraste teal/ink sobre ice ≥ 4.5:1
- Kanban operable por teclado (focus cards + botones de estado; drag no es único path)
- Landmarks: nav, main
- StatusPill no solo color (texto)
- Focus visible 2px teal
- Reduced motion: sin parallax
11-privacy-security.md
11 — Privacy & security · PRIMA
- JWT short-lived; passwords bcrypt
- Roles en claim guards
- PII: NIF enmascarado en listas (
12345678A→***45678Apattern simplificado) - No logs de password
- Neon SSL
- No afirmación de cumplimiento legal definitivo (RGPD: bases lícitas a validar con cliente real)
- Retención: claims activos + audit; borrado lógico futuro
12-analytics.md
12 — Analytics · PRIMA
| Evento | Props |
|---|---|
| login_success | role |
| claim_created | policyId |
| claim_status_changed | from, to |
| kanban_viewed | — |
| policy_search | q_len |
| portal_claim_viewed | claimId |
North Star dashboard: status transitions / day.
13-qa-test-plan.md
13 — QA test plan · PRIMA
Smoke must
- Login AGENT / BACKOFFICE / CLIENT
- AGENT crea claim
- BACKOFFICE mueve estado + nota
- CLIENT ve claim propio, no ajenos
- Kanban render columnas
- 401 con token basura
A11y spot
- Tab order login → nav → kanban
- Status text present
14-dev-handoff.md
14 — Dev handoff · PRIMA
Repo
prima-app — apps/api (Nest) + apps/web (Angular)
Env
DATABASE_URL=
JWT_SECRET=
PORT=3012
Scripts
npm run db:migrate
npm run db:seed
npm run api # :3012
npm run web # :4212
Demo users
| Password | Role | |
|---|---|---|
| agente@prima.seguro | password123 | AGENT |
| mesa@prima.seguro | password123 | BACKOFFICE |
| cliente@prima.seguro | password123 | CLIENT |
15-roadmap.md
15 — Roadmap · PRIMA
Hecho (L3 día)
Landing, auth, dashboard, kanban, detalle+estado, pólizas, portal, Paper, seed
L4 futuro (explícito fuera de alcance hoy)
Integraciones aseguradoras, adjuntos OCR, multitenancy org, notificaciones email, métricas SLA automáticas
16-interaction-specs.md
16 — Interaction specs · PRIMA
Kanban card
- Hover: elevación 1; focus ring
- Click: navega a detalle
- Transición estado: botones en detalle (no solo drag)
Side nav
- Item activo: teal-soft bg + ink text
- Collapse no en L3
Toasts
Success 3s; error sticky hasta dismiss
17-prototype-map.md
17 — Prototype map · PRIMA
Paper hi-fi + Angular app como prototipo clicable.
Flujos prototipados: login → dashboard → kanban → detalle → status; portal cliente.
18-completeness-audit.md
18 — Completeness audit · PRIMA
| Gate | Estado |
|---|---|
| Day brief terna | Sí R-HY·S-SIDE·H-DATA·F-KAN |
| Docs 00–20 | Sí |
| UX Paper ≥12 | Ver 00-paper-reference |
| UI Paper ≥10 | Ver 00-paper-reference |
| JWT multi-rol | Sí |
| Kanban + estados | Sí |
| Empty/error/loading | Sí |
| Neon + seed | Sí |
| GitHub | Sí |
| Portfolio | Sí |
| SCORE craft ≥4 | Tras densificar Paper |
19-backlog-completo.md
19 — Backlog · PRIMA
Must (hecho en día)
Auth, claims CRUD-ish, kanban, policies list, portal, DS tokens
Should (si tiempo)
Filtros kanban por agente; búsqueda póliza avanzada
Could
Export CSV, dark mode
Won’t L3
Pasarela pago, API aseguradoras, app nativa
20-implementation.md
20 — Implementation notes · PRIMA
- API port 3012, web 4212
- Prisma models User Policy Claim ClaimEvent
- Guards RolesGuard
- Seed 3 users, 4 policies, 8 claims across columns