⚠ Supuestos que estoy asumiendo — Confirma antes de continuar
- El backend FastAPI existente se extiende; no se migra a otro framework.
- El scoring de leads usa reglas heurísticas (no ML) en esta primera versión.
- La asignación automática es round-robin ponderado por carga del comercial.
- No hay SSO; autenticación por JWT con refresh token (30 días).
- Los leads se importan desde CSV; la integración con CRM externo es fuera de scope.
→ Corrígeme ahora o procederé con estos supuestos.
Queremos que un comercial pueda ver sus leads asignados, su temperatura (scoring 0–100) y tomar acción (contactar, descartar, reabrir) sin salir del dashboard. El manager puede ver el estado de todo el equipo y reasignar manualmente.
Reencuadrado como criterios medibles:
- Dashboard carga en < 2 s (LCP) en conexión 4G
- Score visible por lead con etiqueta Frío / Tibio / Caliente / Urgente
- Asignación automática procesa nuevos leads en < 5 s tras importación
- Ningún lead queda sin asignar cuando hay comerciales activos
Convenciones: snake_case para Python, PascalCase para clases/componentes React, camelCase para variables JS/TS. Imports ordenados por ruff. Sin any en TypeScript salvo excepciones documentadas.
Pirámide: 60 % unitarios (lógica de scoring, asignación) → 30 % integración (API endpoints + BD) → 10 % E2E con Playwright (flujo crítico: importar CSV → ver leads asignados → cambiar estado).
Siempre
- Ejecutar tests antes de cada commit
- Validar inputs con Pydantic en la capa de schemas
- Seguir convenciones de naming definidas
- Documentar parámetros en funciones públicas
- Actualizar SPEC.md si cambia decisión
Preguntar primero
- Cambios en el esquema de BD (nueva migración)
- Añadir dependencias externas nuevas
- Cambiar la fórmula de scoring
- Modificar la política de asignación
- Tocar configuración de GitHub Actions
Nunca
- Hacer commit de secretos o .env
- Eliminar o saltarse tests fallidos
- Editar directorios vendor o node_modules
- Desplegar en producción sin aprobación
- Cambiar roles de usuario sin revisión de seguridad
- Dashboard lista los leads asignados al comercial autenticado con score y etiqueta visible E2E test
- LCP del dashboard en conexión 4G simulada < 2.5 s
- Importación de CSV de 1.000 leads procesada y asignada < 10 s
- Score calculado correctamente para los 4 casos de la suite de scoring 100 % pytest
- Ningún lead activo queda sin asignar cuando hay ≥1 comercial activo Integration test
- Manager puede reasignar lead manualmente y comercial lo ve en < 2 s (WebSocket o polling) Manual QA
- CI pasa en verde con cobertura ≥ 80 % backend y ≥ 70 % frontend GitHub Actions
-
T-01 · Modelo Lead y migración inicialSprint 1
-
T-02 · Servicio de scoring (heurístico)Sprint 1
-
T-03 · Endpoint GET /leads (paginado + filtros)Sprint 2
-
T-04 · Componente LeadCard + ScoreBadgeSprint 2
-
1¿Qué ocurre si todos los comerciales tienen carga máxima? — ¿El lead queda en cola de espera o se asigna igualmente al de menor carga? Afecta a T-05 (servicio de asignación).
-
2¿Se notifica al comercial por email cuando recibe un lead nuevo? — Necesitaría integración con servicio de correo (fuera de scope actual o dentro?).
-
3¿Cuántos días sin actividad definen un lead como "Frío"? — Actualmente asumimos 30 días. ¿Es correcto para el modelo de negocio de LeadPulse?