# US-MGN-009-005-001: Convertir Lead en Oportunidad

**RF Asociado:** [RF-MGN-009-005](../../02-modelado/requerimientos-funcionales/mgn-009/RF-MGN-009-005-conversión-a-cotización.md)
**Módulo:** MGN-009 - CRM Básico
**Epic:** Conversión
**Prioridad:** P0
**Story Points:** 4
**Sprint:** Sprint 21
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** vendedor, **Quiero** convertir leads calificados en oportunidades, **Para** avanzar en el pipeline de ventas.

## Descripción Detallada
Conversión Lead → Oportunidad:
1. Valida lead está qualified
2. Crea partner si no existe (desde lead.company_name y lead.email)
3. Crea oportunidad vinculada al partner
4. Marca lead como converted
5. Copia actividades del lead a la oportunidad

## Criterios de Aceptación

### Escenario 1: Convertir lead sin partner existente
**Dado que** lead qualified con company="ABC Corp", email="contact@abc.com",
**Cuando** convierto a oportunidad con amount=50000,
**Entonces** sistema crea partner "ABC Corp", crea oportunidad vinculada, marca lead.state=converted.

### Escenario 2: Convertir lead con partner existente
**Dado que** lead tiene email="juan@abc.com", ya existe partner con email similar,
**Cuando** convierto,
**Entonces** sistema sugiere partner existente, permite seleccionar o crear nuevo.

### Escenario 3: Copiar actividades
**Dado que** lead tiene 5 actividades registradas,
**Cuando** convierto a oportunidad,
**Entonces** sistema copia las 5 actividades a la oportunidad.

### Escenario 4: No convertir lead no calificado
**Dado que** lead está en state=new,
**Cuando** intento convertir,
**Entonces** error 400 "Solo leads calificados pueden convertirse".

## Reglas de Negocio
- **RN-1:** Solo leads en state=qualified pueden convertirse.
- **RN-2:** Conversión crea partner si no existe.
- **RN-3:** Lead marca como converted (no se elimina).
- **RN-4:** Actividades se copian a oportunidad.
- **RN-5:** lead.converted_to_opportunity_id vincula a oportunidad.

## Tareas Técnicas

### Backend
- [ ] Endpoint: `POST /api/v1/crm/leads/:id/convert`
- [ ] Service: `LeadService.convertToOpportunity(leadId, conversionDto)`
- [ ] Crear/buscar partner
- [ ] Crear oportunidad
- [ ] Copiar actividades
- [ ] Actualizar lead state=converted
- [ ] Unit tests

### Frontend
- [ ] Modal: `ConvertLeadModal.tsx`
- [ ] Formulario: Monto estimado, fecha cierre
- [ ] Selector: Partner existente o crear nuevo
- [ ] Confirmación conversión
- [ ] Navegación a oportunidad creada

---

## Estimación Detallada
| Tarea | Horas |
|-------|-------|
| Backend | 2.5 |
| Frontend | 1.5 |
| Testing | 2 |
| **TOTAL** | **6 horas = 4 SP** |

---

## Definition of Done
- [ ] Conversión funcional
- [ ] Partner se crea/vincula correctamente
- [ ] Actividades copiadas
- [ ] Lead marcado como converted
- [ ] Tests >80%
- [ ] QA/PO aprobado

---

## Referencias
- [RF-MGN-009-005](../../02-modelado/requerimientos-funcionales/mgn-009/RF-MGN-009-005-conversión-a-cotización.md)
