erp-core/docs/05-user-stories/mgn-005/US-MGN-005-005-002-validar-ajuste-inventario.md

3.4 KiB

US-MGN-005-005-002: Validar Ajuste de Inventario

RF Asociado: RF-MGN-005-007 Módulo: MGN-005 - Inventario Básico Epic: Ajustes de Inventario Prioridad: P0 Story Points: 4 Sprint: Sprint 11 Estado: Ready for Development Fecha: 2025-11-24


User Story

Como usuario de inventario, Quiero validar ajustes de inventario, Para aplicar las correcciones al stock y generar movimientos automáticos.


Descripción Detallada

Validar un ajuste:

  1. Cambia estado draft → done
  2. Genera movimientos de stock por cada línea:
    • Diferencia positiva: movimiento de ubicación virtual → ubicación física (incremento)
    • Diferencia negativa: movimiento de ubicación física → ubicación virtual (decremento)
  3. Actualiza stock_quants
  4. Genera asiento contable de valoración (opcional, según configuración)

Criterios de Aceptación

Escenario 1: Validar ajuste con diferencias (Camino Feliz)

Dado que ajuste tiene línea: Producto A en Zona A (diff=+2), Cuando valido el ajuste, Entonces el sistema genera movimiento de stock: Virtual Location → Zona A, qty=2, actualiza stock.

Escenario 2: Validar ajuste con diferencia negativa

Dado que ajuste tiene línea: Producto B en Zona A (diff=-3), Cuando valido, Entonces el sistema genera movimiento: Zona A → Virtual Location, qty=3.

Escenario 3: Error al validar ajuste ya validado

Dado que ajuste está en state=done, Cuando intento validar nuevamente, Entonces el sistema retorna error 400 "Ajuste ya fue validado".


Reglas de Negocio

  • RN-1: Solo ajustes en draft pueden validarse.
  • RN-2: Validar genera movimientos de stock automáticamente.
  • RN-3: Diferencias positivas: entrada desde ubicación virtual.
  • RN-4: Diferencias negativas: salida hacia ubicación virtual.
  • RN-5: Movimientos generados actualizan stock_quants.

Tareas Técnicas

Backend

  • Endpoint: POST /api/v1/inventory/adjustments/:id/validate
  • Service: InventoryAdjustmentService.validate(id)
  • Service: generateStockMoves(adjustment)
  • Transaction para atomicidad
  • Unit tests (>80%)
  • Integration tests
  • Swagger docs

Frontend

  • Botón Validar con confirmación
  • Modal mostrando movimientos a generar
  • API client: adjustmentApi.validate(id)
  • Component tests
  • E2E test

Database

  • Transaction isolation: READ COMMITTED
  • Lock: SELECT FOR UPDATE

Estimación Detallada

Tarea Horas
Backend 2.5
Frontend 2
Testing 1.5
Code Review 0.5
TOTAL 6.5 horas = 4 SP

Definition of Done

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

Referencias