# 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)
