# US-MGN-009-001-002: Calificar Lead con Scoring **RF Asociado:** [RF-MGN-009-004](../../02-modelado/requerimientos-funcionales/mgn-009/RF-MGN-009-004-lead-scoring-y-calificación.md) **Módulo:** MGN-009 - CRM Básico **Epic:** Leads **Prioridad:** P1 **Story Points:** 3 **Sprint:** Sprint 20 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** vendedor, **Quiero** calificar leads con scoring automático, **Para** priorizar los leads más prometedores. ## Descripción Detallada Lead scoring asigna puntos basado en criterios: - Fuente: Referido (+30), Web (+10), Cold call (+5) - Empresa grande (>100 empleados): +20 - Email corporativo: +10 - Interacciones: +5 por cada llamada/email - Score total: 0-100 Clasificación: - Hot (80-100): Alta prioridad - Warm (50-79): Media prioridad - Cold (0-49): Baja prioridad ## Criterios de Aceptación ### Escenario 1: Calcular score automático **Dado que** lead tiene source=referido (+30), email corporativo (+10), 2 llamadas (+10), **Cuando** sistema calcula score, **Entonces** lead.score=50, classification=warm. ### Escenario 2: Actualizar score en tiempo real **Dado que** lead tiene score=45, **Cuando** registro nueva llamada (+5), **Entonces** score se actualiza a 50, classification cambia a warm. ### Escenario 3: Filtrar por clasificación **Dado que** hay 100 leads: 10 hot, 40 warm, 50 cold, **Cuando** filtro classification=hot, **Entonces** veo solo los 10 leads hot. ### Escenario 4: Calificación manual override **Dado que** lead tiene score automático=45, **Cuando** vendedor califica manualmente como qualified, **Entonces** lead.state=qualified, ignora score automático. ## Reglas de Negocio - **RN-1:** Score se calcula automáticamente al crear/actualizar lead. - **RN-2:** Score se actualiza al registrar actividades (llamadas, emails). - **RN-3:** Calificación manual override score automático. - **RN-4:** Classification: Hot (80+), Warm (50-79), Cold (0-49). ## Tareas Técnicas ### Backend - [ ] Service: `LeadScoringService.calculateScore(lead)` - [ ] Service: `LeadScoringService.updateScoreOnActivity(lead, activity)` - [ ] Reglas de scoring configurables - [ ] Unit tests ### Frontend - [ ] Componente: `LeadScoreBadge.tsx` (badge con score y color) - [ ] Componente: `LeadScoringConfigPanel.tsx` (configurar reglas) - [ ] Filtro por classification - [ ] Score visual (progress bar) ### Database - [ ] Columna: `crm.leads.score` (int 0-100) - [ ] Columna: `crm.leads.classification` (enum: hot, warm, cold) - [ ] Tabla: `crm.scoring_rules` (configuración) --- ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 1.5 | | Frontend | 1 | | Testing | 1 | | **TOTAL** | **3.5 horas = 3 SP** | --- ## Definition of Done - [ ] Scoring automático funciona - [ ] Classification correcta - [ ] Score actualiza en tiempo real - [ ] Filtros funcionan - [ ] Tests >80% - [ ] QA/PO aprobado --- ## Referencias - [RF-MGN-009-004](../../02-modelado/requerimientos-funcionales/mgn-009/RF-MGN-009-004-lead-scoring-y-calificación.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-009.yaml)