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