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