# US-MGN-006-002-002: Confirmar Orden de Compra

**RF Asociado:** [RF-MGN-006-002](../../02-modelado/requerimientos-funcionales/mgn-006/RF-MGN-006-002-gestión-de-órdenes-de-compra.md)
**Módulo:** MGN-006 - Compras Básico
**Epic:** Órdenes de Compra
**Prioridad:** P0
**Story Points:** 5
**Sprint:** Sprint 13
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** usuario de compras,
**Quiero** confirmar órdenes de compra,
**Para** comprometer la compra y generar recepciones pendientes.

---

## Descripción Detallada
Confirmar una PO:
1. Cambia estado draft → purchase (confirmada)
2. Genera recepción (picking) pendiente automáticamente
3. Reserva presupuesto (si aplica)
4. Envía email al proveedor con PO en PDF
5. Bloquea edición de líneas

---

## Criterios de Aceptación

### Escenario 1: Confirmar PO exitosamente (Camino Feliz)
**Dado que** PO está en draft,
**Cuando** confirmo,
**Entonces** sistema cambia state=purchase, genera picking de recepción, envía email al proveedor.

### Escenario 2: Generar picking automáticamente
**Dado que** confirmo PO con líneas: Producto A qty=10, Producto B qty=5,
**Cuando** confirmo,
**Entonces** sistema genera picking de tipo receipt con esas líneas.

### Escenario 3: Error al confirmar PO ya confirmada
**Dado que** PO está en state=purchase,
**Cuando** intento confirmar,
**Entonces** sistema retorna error 400 "PO ya fue confirmada".

---

## Reglas de Negocio
- **RN-1:** Solo PO draft pueden confirmarse.
- **RN-2:** Confirmar genera picking de recepción automáticamente.
- **RN-3:** PO confirmada no puede editarse (solo cancelarse).
- **RN-4:** Se envía email al proveedor con PDF de PO.

---

## Tareas Técnicas

### Backend
- [ ] Endpoint: POST /api/v1/purchase/orders/:id/confirm
- [ ] Service: PurchaseOrderService.confirm(id)
- [ ] Service: PickingService.createFromPO(po)
- [ ] Service: EmailService.sendPO(po, pdf)
- [ ] Validar estado draft
- [ ] Generar picking automático
- [ ] Transaction atomicidad
- [ ] Unit tests
- [ ] Integration tests
- [ ] Swagger docs

### Frontend
- [ ] Botón Confirmar con confirmación
- [ ] Modal mostrando impacto (picking generado)
- [ ] API client: purchaseOrderApi.confirm(id)
- [ ] Component tests
- [ ] E2E test

### Database
- [ ] Campo: purchase.purchase_orders.confirmed_date
- [ ] Campo: purchase.purchase_orders.confirmed_by_user_id

---

## Estimación Detallada
| Tarea | Horas |
|-------|-------|
| Backend | 3 |
| Frontend | 2 |
| Testing | 2 |
| Code Review | 1 |
| **TOTAL** | **8 horas = 5 SP** |

---

## Definition of Done
- [ ] Código implementado según ET
- [ ] Tests pasando (>80%)
- [ ] Code review aprobado
- [ ] Picking generado correctamente
- [ ] Email enviado
- [ ] Transaction implementada
- [ ] QA validado
- [ ] PO aprobado

---

## Referencias
- [RF-MGN-006-002](../../02-modelado/requerimientos-funcionales/mgn-006/RF-MGN-006-002-gestión-de-órdenes-de-compra.md)
- [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-006.yaml)
- [Schema](../../02-modelado/database-design/schemas/purchase-schema-ddl.sql)
