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

3.2 KiB

US-MGN-006-003-001: Crear 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 registrar recepciones de productos comprados, Para actualizar el stock al recibir mercancía de proveedores.


Descripción Detallada

Una recepción (picking de tipo receipt/incoming) se genera automáticamente al confirmar una PO. El usuario de almacén:

  1. Accede al picking pendiente
  2. Verifica productos recibidos
  3. Registra cantidades reales (pueden diferir de las ordenadas)
  4. Valida la recepción para actualizar stock

Estados: draft, assigned, done, cancelled


Criterios de Aceptación

Escenario 1: Crear recepción desde PO confirmada (Automático)

Dado que PO se confirma con líneas, Cuando sistema ejecuta confirm(), Entonces genera picking de tipo receipt con state=assigned, líneas copiadas.

Escenario 2: Registrar cantidades recibidas manualmente

Dado que tengo picking de recepción en assigned, Cuando registro qty_done=8 (de qty_expected=10), Entonces sistema guarda qty_done para validación.

Escenario 3: Validar cantidad parcial

Dado que picking tiene línea con qty_expected=10, qty_done=8, Cuando valido, Entonces sistema pregunta: ¿Crear backorder para las 2 unidades faltantes?


Reglas de Negocio

  • RN-1: Recepciones se generan automáticamente desde PO confirmadas.
  • RN-2: qty_done puede ser menor a qty_expected (recepción parcial).
  • RN-3: Si qty_done < qty_expected, se puede crear backorder.
  • RN-4: Validar recepción actualiza stock en ubicación de entrada.

Tareas Técnicas

Backend

  • Endpoint: POST /api/v1/inventory/pickings (type=receipt)
  • Endpoint: GET /api/v1/inventory/pickings?type=receipt
  • Service: PickingService.createReceipt(purchaseOrderId)
  • Service: PickingService.updateQuantitiesDone(pickingId, lines)
  • Validar PO asociada
  • Unit tests
  • Integration tests
  • Swagger docs

Frontend

  • Componente: ReceiptsList.tsx
  • Componente: ReceiptForm.tsx
  • Tabla con qty_expected vs qty_done
  • API client: pickingApi
  • Component tests
  • E2E test

Database

  • Tabla: inventory.pickings (picking_type_id = receipt)
  • Campo: inventory.picking_lines.qty_done
  • Índices: idx_pickings_type_po

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
  • QA validado
  • PO aprobado

Referencias