El módulo de Compras gestiona el abastecimiento de mercadería desde la creación de la orden hasta la recepción física en almacén. Una orden de compra comienza con estadoDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt
Use this file to discover all available pages before exploring further.
PENDIENTE y no afecta el stock hasta que se confirma su recepción con el endpoint PATCH /api/compras/{id}/recibir. En ese momento, el backend incrementa el stockActual de cada producto incluido en la orden y registra los movimientos de inventario correspondientes, todo en una sola transacción atómica.
Ciclo de Vida de una Compra
Crear la orden de compra
El ADMIN o ALMACENERO selecciona un proveedor, una fecha esperada de entrega opcional, observaciones y agrega los productos con sus cantidades y precios unitarios de compra. El sistema acepta búsqueda por nombre, código interno o escaneo de código de barras para agregar productos rápidamente. La orden queda con estado PENDIENTE y no modifica el stock.
El proveedor prepara el pedido
Durante este período la orden permanece en estado
PENDIENTE. El campo fechaEsperada sirve como referencia para el equipo de almacén. La orden visible en la lista de compras y contabilizada en el KPI comprasPendientes del Dashboard.Recibir la mercadería
Cuando la mercadería llega al almacén, el ADMIN o ALMACENERO hace clic en Recibir en la lista de compras (o llama a
PATCH /api/compras/{id}/recibir). El sistema valida que la compra esté en estado PENDIENTE y ejecuta la recepción.Stock incrementado automáticamente
Por cada línea de detalle,
stockActual del producto se suma en la cantidad especificada. Se crea un movimiento de inventario con tipo = ENTRADA y motivo = "Recepción compra C-YYYY-NNNN".Estados de una Compra
| Estado | Descripción |
|---|---|
PENDIENTE | Orden creada, esperando recepción de mercadería. |
RECIBIDA | Mercadería recibida. El stock ya fue incrementado. |
PARCIAL | Recepción parcial (reservado para uso futuro). |
ANULADA | Orden cancelada antes de recibirse. |
Crear una Orden de Compra — API
Campos de la solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
proveedorId | Long | ✅ | ID del proveedor registrado |
observaciones | String | ❌ | Notas internas para el pedido |
fechaEsperada | String (YYYY-MM-DD) | ❌ | Fecha estimada de llegada |
detalles | Array | ✅ | Lista de productos a comprar (mínimo 1) |
detalles[].productoId | Long | ✅ | ID del producto |
detalles[].cantidad | Integer | ✅ | Unidades pedidas (mínimo 1) |
detalles[].precioUnitario | BigDecimal | ✅ | Precio de costo unitario (≥ 0) |
200 OK: objeto Compra completo con número generado automáticamente y estado PENDIENTE.
Recibir Mercadería — API
id en la URL identifica la orden de compra que se va a marcar como recibida.
Respuesta 200 OK:
Listar y Consultar Compras
404 si el ID no existe.
Permisos por Rol
| Operación | ADMIN | VENDEDOR | ALMACENERO |
|---|---|---|---|
Listar / Ver (GET) | ✅ | ✅ | ✅ |
Crear orden (POST) | ✅ | ❌ | ✅ |
Recibir mercadería (PATCH) | ✅ | ❌ | ✅ |
Cuando se crea una nueva orden de compra, el número se genera con el patrón
C-YYYY-NNNN donde YYYY es el año actual y NNNN es un secuencial con ceros a la izquierda (ej. C-2024-0007). El contador se basa en el total de registros en la tabla compras al momento de la creación.