Skip to main content
El módulo de Órdenes de Compra permite registrar solicitudes de abastecimiento de productos perecederos, controlar su vigencia y actualizar su estado a lo largo del ciclo de vida.

Registrar orden

Crea una nueva orden con sus productos, cantidades y fecha de vigencia.

Validar vigencia

Verifica si una orden sigue activa según su fecha de emisión y días de vigencia.

Actualizar estado

Cambia el estado de una orden a VIGENTE, EXPIRADA o CERRADA.

Consultar órdenes

Lista todas las órdenes o consulta una por su ID.

Ciclo de vida de una orden

Cada orden pasa por los siguientes estados definidos en el enum EstadoOrden:
EstadoDescripción
VIGENTELa orden está activa. Se asigna automáticamente al crear una nueva orden.
EXPIRADALa fecha de emisión más los días de vigencia ya superó la fecha actual.
CERRADALa orden fue cerrada manualmente, independientemente de la fecha.
Al registrar una nueva orden, el sistema siempre asigna el estado VIGENTE de forma automática, sin importar el valor enviado en el cuerpo de la petición.

Estructura del objeto OrdenCompra

Una orden de compra contiene los datos generales del pedido y una lista de productos (detalles) con las cantidades solicitadas.
{
  "idOrden": 1,
  "fechaEmision": "2026-04-07",
  "vigenciaDias": 10,
  "cantidadSolicitada": 200,
  "estado": "VIGENTE",
  "division": "PERECEDEROS",
  "departamento": "FRUTAS",
  "productos": [
    {
      "idDetalle": 1,
      "producto": {
        "idProducto": 42,
        "descripcion": "Manzana Gala",
        "codigoBarras": "7501234567890"
      },
      "cantidadEsperada": 100
    },
    {
      "idDetalle": 2,
      "producto": {
        "idProducto": 55,
        "descripcion": "Plátano Tabasco",
        "codigoBarras": "7509876543210"
      },
      "cantidadEsperada": 100
    }
  ]
}

Campos principales

CampoTipoDescripción
idOrdenLongIdentificador único generado automáticamente.
fechaEmisionLocalDateFecha de emisión en formato yyyy-MM-dd. Si se omite, se usa hoy.
vigenciaDiasintNúmero de días que la orden permanece vigente.
cantidadSolicitadaintCantidad total de unidades solicitadas en la orden.
estadoEstadoOrdenEstado actual: VIGENTE, EXPIRADA o CERRADA.
divisionDivisionDivisión a la que pertenece la orden (enum).
departamentoDepartamentoDepartamento destino (ej. FRUTAS, VERDURAS).
productosListLíneas de detalle con producto y cantidad esperada.

Campos de OrdenCompraDetalle

CampoTipoDescripción
idDetalleLongIdentificador del renglón.
productoProductoObjeto del producto con código y descripción.
cantidadEsperadaintCantidad solicitada para ese producto.

Endpoints

Listar todas las órdenes

GET /api/ordenes-compra/list
Devuelve el listado completo de órdenes registradas.

Registrar una nueva orden

POST /api/ordenes-compra
Cuerpo de la petición:
{
  "fechaEmision": "2026-04-07",
  "vigenciaDias": 7,
  "cantidadSolicitada": 150,
  "division": "PERECEDEROS",
  "departamento": "VERDURAS",
  "productos": [
    {
      "producto": { "idProducto": 10 },
      "cantidadEsperada": 75
    },
    {
      "producto": { "idProducto": 11 },
      "cantidadEsperada": 75
    }
  ]
}
Si omites fechaEmision, el sistema registra la fecha actual automáticamente.

Obtener una orden por ID

GET /api/ordenes-compra/{id}

Validar vigencia de una orden

GET /api/ordenes-compra/{id}/vigente
Respuesta posible:
{ "data": "La orden está vigente" }
{ "data": "La orden está expirada" }
La vigencia se calcula como:
fechaEmision + vigenciaDias >= hoy  &&  estado == VIGENTE

Actualizar el estado de una orden

PUT /api/ordenes-compra/{id}/estado
Cuerpo de la petición:
{ "nuevoEstado": "CERRADA" }
Los valores válidos para nuevoEstado son: VIGENTE, EXPIRADA, CERRADA (sin distinción de mayúsculas/minúsculas).
El cambio de estado es inmediato y persiste en base de datos. Asegúrate de confirmar antes de cerrar una orden activa.

Flujo de trabajo

1

Crear la orden

Envía un POST /api/ordenes-compra con los datos del pedido y la lista de productos. El sistema asigna el estado VIGENTE y, si no se provee, la fecha de emisión del día.
2

Verificar vigencia antes de procesar

Antes de recepcionar una entrega, consulta GET /api/ordenes-compra/{id}/vigente para confirmar que la orden sigue activa. Si la respuesta indica que está expirada, no debe procesarse.
3

Recepcionar y cerrar

Una vez completada la recepción, actualiza el estado a CERRADA con PUT /api/ordenes-compra/{id}/estado para indicar que la orden fue atendida.