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:
- Movimientos de entrada de inventario (tipo
ENTRY, razonPURCHASE) - Actualizacion de stock en el almacen destino (via
WarehouseStock) - Calculo de costo promedio ponderado (WAC)
- Creacion de unidades con trazabilidad serial/lote (si aplica)
- Creacion de items de inventario nuevos (si el item de OC no tenia vinculo)
- Asientos contables via Outbox Pattern
- Actualizacion de estado de la requisicion de material original
Proceso de Recepcion Individual
1. Acceder a la Orden de Compra
- Navegue a Procura > Ordenes de Compra
- Seleccione una orden en estado
APPROVED,SENToPARTIAL - Haga clic en Recepcionar
2. Registrar Items Recibidos
Para cada item a recibir, especifique:
| Campo | Obligatorio | Descripcion |
|---|---|---|
| itemId | Si | ID del item de la OC |
| quantity | Si | Cantidad recibida en este envio |
| warehouseId | Si | Almacen destino donde se almacenara |
| unitPrice | No | Precio 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:
- Haga clic en Recibir Todo
- Seleccione el almacen destino
- El sistema calcula automaticamente las cantidades pendientes por item
- 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:
| Campo | Valor |
|---|---|
| Tipo | ENTRY |
| Razon | PURCHASE |
| Almacen destino | Almacen seleccionado |
| Referencia | PurchaseOrder.id |
| Codigo | Auto-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
InventoryUnitindividuales 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
| Condicion | Nuevo estado |
|---|---|
| Al menos un item recibido, no todos completos | PARTIAL |
| 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:
- El estado cambia automaticamente a
READY_FOR_DISPATCH - Se notifica al equipo de logistica (usuarios con
requisitions:fulfill) - Logistica puede despachar los items que ahora tienen stock

Al recibir completamente (OC 100%)
El sistema busca el ProcurementAnalysis vinculado y cierra el ciclo:
| Proposito de la requisicion | Accion automatica |
|---|---|
| STOCK_REPLENISHMENT | Items 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:
- Se crea un movimiento de salida (EXIT) de reversion
- Se actualiza el stock (via WAC inverso)
- Se actualiza la cantidad recibida del item de la OC
- Si la OC estaba
COMPLETED, regresa aPARTIAL - 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:
| Dato | Descripcion |
|---|---|
| Estado de OC | Estado actual |
| Total items | Cantidad de lineas |
| Items recibidos | Items al 100% |
| Total ordenado | Suma de cantidades ordenadas |
| Total recibido | Suma de cantidades recibidas |
| Total pendiente | Diferencia |
| % recibido | Porcentaje general |
| Detalle por item | Ordenado, 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:
| Filtro | Descripcion |
|---|---|
| Fecha desde/hasta | Rango de fechas de recepcion |
| Almacen | Almacen destino |
| Proveedor | Proveedor 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:
| Endpoint | Descripcion |
|---|---|
POST .../create-invoice | Crear factura desde recepcion |
GET .../invoice-status | Ver estado de facturacion |
POST .../receive-and-invoice | Recibir y facturar en un paso |
GET /api/procurement/pending-invoices | Listar recepciones sin facturar |
Referencia API Completa
| Endpoint | Metodo | Permiso | Descripcion |
|---|---|---|---|
POST /api/procurement/purchase-orders/:id/receive | POST | procurement:create | Recibir items |
POST /api/procurement/purchase-orders/:id/receive-all | POST | procurement:create | Recibir todo pendiente |
GET /api/procurement/purchase-orders/:id/receipt-status | GET | procurement:read | Estado de recepcion |
POST /api/procurement/purchase-orders/items/:itemId/reverse-receipt | POST | procurement:delete | Revertir recepcion |
GET /api/procurement/purchase-orders/receipts/history | GET | procurement:read | Historial de recepciones |
GET /api/procurement/reports/receipt-dashboard | GET | procurement:read | Dashboard de recepciones |
GET /api/procurement/reports/open-orders | GET | procurement:read | Reporte de ordenes abiertas |
Navegacion
Documentos Relacionados
- Modulo de Procura - Vision general
- Analisis de Procura - Flujo de analisis y asignacion de proveedores
- Ordenes de Compra - Creacion y gestion de OC
Otros Modulos
- Inventario - Gestion de stock
- Presupuesto - Control presupuestario
- Contabilidad - Registro contable
- Requisiciones de Material - Solicitudes internas de material