Saltar al contenido principal

Recepciones de Ordenes de Compra

Acceso

Ruta: Procura > Ordenes de Compra > [Seleccionar Orden] > Boton "Recepcionar" Permisos: procurement:create

Acciones disponibles:

  • Ver estado de recepcion: Desde el detalle de cada orden de compra
  • Recibir items individuales: Seleccionar items y cantidades especificas
  • Recibir todo pendiente: Recibir todos los items restantes en un solo paso
  • Revertir recepcion: Anular una recepcion erronea

Descripcion General

Las recepciones permiten registrar entregas de ordenes de compra en uno o multiples envios. Cada recepcion genera automaticamente:

  1. Movimientos de entrada de inventario (tipo ENTRY, razon PURCHASE)
  2. Actualizacion de stock en el almacen destino (via WarehouseStock)
  3. Calculo de costo promedio ponderado (WAC)
  4. Creacion de unidades con trazabilidad serial/lote (si aplica)
  5. Creacion de items de inventario nuevos (si el item de OC no tenia vinculo)
  6. Asientos contables via Outbox Pattern
  7. Actualizacion de estado de la requisicion de material original

Proceso de Recepcion Individual

1. Acceder a la Orden de Compra

  1. Navegue a Procura > Ordenes de Compra
  2. Seleccione una orden en estado APPROVED, SENT o PARTIAL
  3. Haga clic en Recepcionar

2. Registrar Items Recibidos

Para cada item a recibir, especifique:

CampoObligatorioDescripcion
itemIdSiID del item de la OC
quantitySiCantidad recibida en este envio
warehouseIdSiAlmacen destino donde se almacenara
unitPriceNoPrecio unitario (si difiere del de la OC)
{
"receivedItems": [
{
"itemId": "uuid-item-oc",
"quantity": 30,
"warehouseId": "uuid-almacen"
}
],
"receiptDate": "2026-03-15"
}

3. Validaciones

  • No se puede recibir una OC cancelada
  • La cantidad total recibida (acumulada) no puede exceder la cantidad ordenada
  • Se valida que el item exista en la OC

Endpoint: POST /api/procurement/purchase-orders/:purchaseOrderId/receive


Recibir Todo Pendiente

Para recibir todos los items restantes de una OC en un solo paso:

  1. Haga clic en Recibir Todo
  2. Seleccione el almacen destino
  3. El sistema calcula automaticamente las cantidades pendientes por item
  4. Se procesan todas las recepciones en una transaccion

Endpoint: POST /api/procurement/purchase-orders/:purchaseOrderId/receive-all


Procesamiento Automatico

Al confirmar la recepcion, el sistema ejecuta los siguientes pasos en una sola transaccion atomica:

1. Movimiento de Inventario

Por cada item recibido se crea un InventoryMovement:

CampoValor
TipoENTRY
RazonPURCHASE
Almacen destinoAlmacen seleccionado
ReferenciaPurchaseOrder.id
CodigoAuto-generado (MOV-YYYY-NNNN)
Notas"Recepcion OC {codigo} - {descripcion_item}"

2. Creacion de Items Nuevos

Si un item de la OC no tiene inventoryItemId, el sistema crea automaticamente un InventoryItem:

  • Codigo auto-generado: ITM-NNNNN
  • Nombre y descripcion: tomados del item de la OC
  • Tipo de trazabilidad: LOT por defecto (o SERIAL si se especifica)
  • El item de la OC se vincula al nuevo item de inventario

3. Unidades con Trazabilidad

Si el item de inventario tiene trazabilidad habilitada (serial o lote):

  • Se crean InventoryUnit individuales con codigos secuenciales ({ITEM_CODE}-U-NNNN)
  • Estado inicial: AVAILABLE
  • Condicion: NEW
  • Se registra historial de creacion en InventoryUnitHistory
  • Se vincula al proveedor y OC de origen

4. Costo Promedio Ponderado

Se actualiza el WAC (Weighted Average Cost) del item en el almacen:

Nuevo WAC = (Stock Anterior x Costo Anterior + Cantidad Recibida x Costo Nuevo) / Stock Total

5. Estado de la Orden de Compra

CondicionNuevo estado
Al menos un item recibido, no todos completosPARTIAL
Todos los items recibidos al 100%COMPLETED

6. Asientos Contables (Outbox Pattern)

Por cada movimiento de entrada se crea una entrada en la tabla outbox:

  • Operacion: INVENTORY_ENTRY
  • Payload: IDs del movimiento, OC y codigo
  • Se intenta procesar inmediatamente despues del commit
  • Si falla, se procesa en el siguiente ciclo batch

Cierre de Ciclo con Requisicion de Material

Al recibir parcialmente (cualquier recepcion)

Si la requisicion de material original esta en estado AWAITING_PROCUREMENT:

  1. El estado cambia automaticamente a READY_FOR_DISPATCH
  2. Se notifica al equipo de logistica (usuarios con requisitions:fulfill)
  3. Logistica puede despachar los items que ahora tienen stock

Requisicion lista para despacho despues de recepcion de OC

Al recibir completamente (OC 100%)

El sistema busca el ProcurementAnalysis vinculado y cierra el ciclo:

Proposito de la requisicionAccion automatica
STOCK_REPLENISHMENTItems marcados FULFILLED. Requisicion pasa a FULFILLED. Se notifica al solicitante
Otros (DEPARTMENT, PROJECT, ASSET)Requisicion pasa a READY_FOR_DISPATCH. Se notifica a logistica para despacho manual

Adicionalmente, se sincronizan los inventoryItemId creados durante la recepcion hacia arriba en la cadena: OC -> ProcurementAnalysisItem -> MaterialRequisitionItem.


Reversion de Recepcion

Si se registro una recepcion por error:

  1. Se crea un movimiento de salida (EXIT) de reversion
  2. Se actualiza el stock (via WAC inverso)
  3. Se actualiza la cantidad recibida del item de la OC
  4. Si la OC estaba COMPLETED, regresa a PARTIAL
  5. Se genera entrada outbox para reversion contable

Endpoint: POST /api/procurement/purchase-orders/items/:itemId/reverse-receipt


Consultar Estado de Recepcion

Para ver el estado detallado de recepcion de una OC:

DatoDescripcion
Estado de OCEstado actual
Total itemsCantidad de lineas
Items recibidosItems al 100%
Total ordenadoSuma de cantidades ordenadas
Total recibidoSuma de cantidades recibidas
Total pendienteDiferencia
% recibidoPorcentaje general
Detalle por itemOrdenado, recibido, pendiente, fecha, quien recibio

Endpoint: GET /api/procurement/purchase-orders/:purchaseOrderId/receipt-status


Historial de Recepciones

Consulte el historial de todas las recepciones con filtros:

FiltroDescripcion
Fecha desde/hastaRango de fechas de recepcion
AlmacenAlmacen destino
ProveedorProveedor de la OC

Endpoint: GET /api/procurement/purchase-orders/receipts/history


Integracion con Facturacion

Despues de la recepcion, se puede generar la factura de proveedor:

EndpointDescripcion
POST .../create-invoiceCrear factura desde recepcion
GET .../invoice-statusVer estado de facturacion
POST .../receive-and-invoiceRecibir y facturar en un paso
GET /api/procurement/pending-invoicesListar recepciones sin facturar

Referencia API Completa

EndpointMetodoPermisoDescripcion
POST /api/procurement/purchase-orders/:id/receivePOSTprocurement:createRecibir items
POST /api/procurement/purchase-orders/:id/receive-allPOSTprocurement:createRecibir todo pendiente
GET /api/procurement/purchase-orders/:id/receipt-statusGETprocurement:readEstado de recepcion
POST /api/procurement/purchase-orders/items/:itemId/reverse-receiptPOSTprocurement:deleteRevertir recepcion
GET /api/procurement/purchase-orders/receipts/historyGETprocurement:readHistorial de recepciones
GET /api/procurement/reports/receipt-dashboardGETprocurement:readDashboard de recepciones
GET /api/procurement/reports/open-ordersGETprocurement:readReporte de ordenes abiertas

Documentos Relacionados

Otros Modulos