# US-MGN-006-001-002: Enviar RFQ a Proveedor **RF Asociado:** [RF-MGN-006-001](../../02-modelado/requerimientos-funcionales/mgn-006/RF-MGN-006-001-solicitudes-de-cotización-rfq.md) **Módulo:** MGN-006 - Compras Básico **Epic:** Solicitudes de Cotización **Prioridad:** P0 **Story Points:** 2 **Sprint:** Sprint 12 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** usuario de compras, **Quiero** enviar RFQ por email a proveedores, **Para** solicitar formalmente sus cotizaciones. --- ## Descripción Detallada Enviar RFQ: 1. Cambia estado draft → sent 2. Genera PDF con detalles de la solicitud 3. Envía email al proveedor con PDF adjunto 4. Registra fecha de envío --- ## Criterios de Aceptación ### Escenario 1: Enviar RFQ exitosamente (Camino Feliz) **Dado que** RFQ está en draft con partner que tiene email válido, **Cuando** envío la RFQ, **Entonces** sistema cambia state=sent, envía email con PDF, registra sent_date. ### Escenario 2: Error al enviar sin email de proveedor **Dado que** proveedor no tiene email configurado, **Cuando** intento enviar RFQ, **Entonces** sistema retorna error 400 "El proveedor no tiene email configurado". ### Escenario 3: Error al enviar RFQ ya enviada **Dado que** RFQ está en state=sent, **Cuando** intento enviar nuevamente, **Entonces** sistema retorna error 400 "RFQ ya fue enviada". --- ## Reglas de Negocio - **RN-1:** Solo RFQ draft pueden enviarse. - **RN-2:** Proveedor debe tener email válido. - **RN-3:** Al enviar se genera PDF automáticamente. - **RN-4:** Se registra fecha y hora de envío. --- ## Tareas Técnicas ### Backend - [ ] Endpoint: POST /api/v1/purchase/rfqs/:id/send - [ ] Service: RFQService.send(rfqId) - [ ] Service: EmailService.sendRFQ(rfq, pdf) - [ ] Service: PDFService.generateRFQPDF(rfq) - [ ] Validar estado draft - [ ] Validar email proveedor - [ ] Unit tests - [ ] Integration tests - [ ] Swagger docs ### Frontend - [ ] Botón Enviar con confirmación - [ ] Modal preview de email - [ ] API client: rfqApi.send(id) - [ ] Component tests - [ ] E2E test ### Database - [ ] Campo: purchase.rfqs.sent_date - [ ] Campo: purchase.rfqs.sent_by_user_id --- ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 1.5 | | Frontend | 1 | | Testing | 0.5 | | Code Review | 0.5 | | **TOTAL** | **3.5 horas = 2 SP** | --- ## Definition of Done - [ ] Código implementado según ET - [ ] Tests pasando (>80%) - [ ] Code review aprobado - [ ] Email enviado correctamente - [ ] PDF generado correctamente - [ ] QA validado - [ ] PO aprobado --- ## Referencias - [RF-MGN-006-001](../../02-modelado/requerimientos-funcionales/mgn-006/RF-MGN-006-001-solicitudes-de-cotización-rfq.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-006.yaml)