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