erp-core/docs/05-user-stories/mgn-006/US-MGN-006-002-001-crear-orden-compra.md

3.1 KiB

US-MGN-006-002-001: Crear Orden de Compra

RF Asociado: RF-MGN-006-002 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 crear órdenes de compra (PO) a proveedores, Para formalizar la adquisición de productos con precios y condiciones acordadas.


Descripción Detallada

Una Purchase Order (PO) es el documento formal de compra. Incluye:

  • Proveedor
  • Líneas con: producto, cantidad, precio unitario, subtotal, impuestos
  • Términos de pago
  • Fecha esperada de entrega
  • Total de la orden
  • Estados: draft, sent, purchase (confirmada), done, cancelled

Criterios de Aceptación

Escenario 1: Crear PO en draft (Camino Feliz)

Dado que creo PO: partner_id=1, lines=[{product:1, qty:10, price:100}], payment_term_id=1, Cuando guardo, Entonces sistema crea PO en draft con número PO/2024/0001, amount_total=1000.

Escenario 2: Calcular totales automáticamente

Dado que línea tiene qty=10, price=100, tax=19%, Cuando guardo línea, Entonces sistema calcula subtotal=1000, tax_amount=190, total=1190.

Escenario 3: Crear PO desde RFQ

Dado que tengo RFQ con cotización aceptada, Cuando creo PO desde RFQ, Entonces sistema copia líneas con precios cotizados.


Reglas de Negocio

  • RN-1: PO se crean en estado draft.
  • RN-2: Total = suma(líneas.subtotal) + impuestos.
  • RN-3: Partner debe ser supplier.
  • RN-4: Número secuencial único: PO/{year}/{seq}.

Tareas Técnicas

Backend

  • Endpoint: POST /api/v1/purchase/orders
  • Service: PurchaseOrderService.create(dto)
  • Service: PurchaseOrderService.calculateTotals(lines)
  • DTO: CreatePurchaseOrderDto, OrderLineDto
  • Validar proveedor supplier
  • Calcular totales automáticamente
  • Unit tests
  • Integration tests
  • Swagger docs

Frontend

  • Componente: CreatePOForm.tsx
  • Tabla editable de líneas con cálculo automático
  • Selector de proveedor y productos
  • Resumen de totales
  • API client: purchaseOrderApi.create()
  • Component tests
  • E2E test

Database

  • Tabla: purchase.purchase_orders
  • Tabla: purchase.purchase_order_lines
  • Índices: idx_pos_partner_id, idx_pos_state
  • RLS policy: company_isolation

Estimación Detallada

Tarea Horas
Backend 2.5
Frontend 3
Testing 2
Code Review 0.5
TOTAL 8 horas = 5 SP

Definition of Done

  • Código implementado según ET
  • Tests pasando (>80%)
  • Code review aprobado
  • Cálculos correctos
  • QA validado
  • PO aprobado

Referencias