erp-core/docs/05-user-stories/mgn-006/US-MGN-006-003-002-validar-recepcion-compra.md

3.2 KiB

US-MGN-006-003-002: Validar Recepción de Compra

RF Asociado: RF-MGN-006-004 Módulo: MGN-006 - Compras Básico Epic: Recepciones de Compras Prioridad: P0 Story Points: 5 Sprint: Sprint 14 Estado: Ready for Development Fecha: 2025-11-24


User Story

Como usuario de almacén, Quiero validar recepciones de compra, Para actualizar el stock y generar movimientos de inventario.


Descripción Detallada

Validar una recepción:

  1. Verifica qty_done de cada línea
  2. Genera movimientos de stock (supplier location → input location → stock location)
  3. Actualiza stock_quants
  4. Cambia estado picking → done
  5. Actualiza estado de PO (si todo recibido → done)
  6. Opcionalmente crea backorder para cantidades pendientes

Criterios de Aceptación

Escenario 1: Validar recepción completa (Camino Feliz)

Dado que picking tiene todas las líneas con qty_done=qty_expected, Cuando valido, Entonces sistema genera movimientos, actualiza stock, cambia picking state=done, PO state=done.

Escenario 2: Validar recepción parcial con backorder

Dado que línea tiene qty_expected=10, qty_done=7, Cuando valido y acepto crear backorder, Entonces sistema valida 7 unidades, crea picking backorder para 3 unidades.

Escenario 3: Validar sin backorder (cerrar línea)

Dado que línea tiene qty_expected=10, qty_done=7, Cuando valido sin backorder, Entonces sistema valida 7 unidades, cierra línea PO (qty_received=7).


Reglas de Negocio

  • RN-1: Validar genera movimientos de stock automáticamente.
  • RN-2: Stock se actualiza en ubicación de entrada (Input Location).
  • RN-3: Si qty_done < qty_expected, preguntar por backorder.
  • RN-4: PO pasa a done cuando todas las líneas están recibidas.

Tareas Técnicas

Backend

  • Endpoint: POST /api/v1/inventory/pickings/:id/validate
  • Service: PickingService.validate(pickingId, createBackorder)
  • Service: StockMoveService.generateFromPicking(picking)
  • Service: PurchaseOrderService.updateReceiptStatus(poId)
  • Crear backorder si aplica
  • Transaction atomicidad
  • Unit tests
  • Integration tests
  • Swagger docs

Frontend

  • Botón Validar con confirmación
  • Modal para backorder (si qty_done < expected)
  • API client: pickingApi.validate()
  • Component tests
  • E2E test

Database

  • Transaction isolation
  • Lock: SELECT FOR UPDATE en pickings

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
  • Stock actualizado correctamente
  • Backorder funciona
  • Transaction implementada
  • QA validado
  • PO aprobado

Referencias