InVeloz

Contenido

api

Inventario

Inventario

El endpoint de Inventario proporciona visibilidad a nivel de lote y operaciones transaccionales — recepción de existencias en un almacén, movimiento entre ubicaciones y despacho.

El Objeto Lote

{
  "recNo": 15234,
  "partNo": 42,
  "shortID": "BOLT-M8-30",
  "description": "Hex Bolt M8x30mm",
  "associate": "Acme Corp",
  "warehouse": "Main",
  "wID": 1,
  "spot": "A-01-03",
  "units": 500.0,
  "received": "2025-01-15T09:30:00Z",
  "shipped": null,
  "serial": "LOT-2025-001",
  "serial2": null,
  "rFIDTag": null,
  "remark": "PO #4521",
  "hold": false,
  "jobID": 0,
  "jobName": null,
  "active": true
}
CampoTipoDescripción
recNointegerNúmero de registro único del lote
partNointegerNúmero de parte del artículo
shortIDstringSKU del artículo
descriptionstringDescripción del artículo
associatestringNombre del cliente/propietario (vacío = existencias propias)
warehousestringNombre del almacén
wIDintegerID del almacén
spotstringContenedor/ubicación dentro del almacén
unitsdecimalCantidad en este lote
receiveddatetimeFecha de recepción
shippeddatetime o nullFecha de envío (null si aún está en existencias)
serialstringNúmero de serie/lote
serial2stringNúmero de serie secundario
rFIDTagstringValor de etiqueta RFID
remarkstringNotas
holdbooleanSi el lote está retenido
jobIDintegerID de trabajo/proyecto asociado
jobNamestringNombre del trabajo/proyecto
activebooleanSi el lote está activo

Endpoints

MétodoRutaDescripción
GET/InventoryListar todos los lotes de inventario
GET/Inventory/{wid}Listar lotes en un almacén
GET/Inventory/StockLevelsNiveles de existencias agregados (todos los almacenes)
GET/Inventory/StockLevels/{wid}Niveles de existencias agregados (un almacén)
POST/Inventory/ReceiveRecibir existencias en un almacén
POST/Inventory/MoveMover existencias entre ubicaciones
POST/Inventory/IssueDespachar existencias de un almacén

Listar Lotes de Inventario

GET /Inventory?page=1&pageSize=50

Devuelve lotes individuales de inventario (registros de recepción) ordenados por el más reciente primero.

Respuesta

{
  "value": [
    {
      "recNo": 15234,
      "partNo": 42,
      "shortID": "BOLT-M8-30",
      "description": "Hex Bolt M8x30mm",
      "associate": "Acme Corp",
      "warehouse": "Main",
      "wID": 1,
      "spot": "A-01-03",
      "units": 500.0,
      "received": "2025-01-15T09:30:00Z",
      "shipped": null,
      "serial": "LOT-2025-001",
      "serial2": null,
      "rFIDTag": null,
      "remark": "PO #4521",
      "hold": false,
      "jobID": 0,
      "jobName": null,
      "active": true
    }
  ],
  "totalCount": 8420,
  "page": 1,
  "pageSize": 50,
  "pageCount": 169,
  "hasMore": true
}

Cada lote en value contiene los campos documentados en El Objeto Lote anterior.

Listar Lotes en un Almacén

GET /Inventory/3?page=1&pageSize=50

Igual que la lista completa, filtrada a un almacén específico por ID.

Niveles de Existencias (Agregado)

GET /Inventory/StockLevels
GET /Inventory/StockLevels/3

Devuelve conteos de existencias agregados por artículo. Opcionalmente filtrado a un solo almacén.

Respuesta

{
  "value": [
    {
      "partNo": 42,
      "available": 1200.0,
      "inStock": 1500.0,
      "onOrder": 500.0,
      "onHold": 300.0,
      "committed": 0.0,
      "packed": 0.0,
      "aSN": 0.0
    }
  ],
  "totalCount": 2340,
  "page": 1,
  "pageSize": 25,
  "pageCount": 94,
  "hasMore": true
}
CampoTipoDescripción
partNointegerNúmero de parte del artículo
availabledecimalDisponible para uso (inStock - onHold - committed - packed)
inStockdecimalTotal físicamente en almacén
onOrderdecimalEn órdenes de compra abiertas
onHolddecimalEn existencias pero retenido (calidad, inspección, etc.)
committeddecimalAsignado a órdenes de envío
packeddecimalEmpacado y en espera de envío
aSNdecimalEn tránsito (aviso de envío anticipado)

Recibir Existencias

POST /Inventory/Receive

Registra un ajuste positivo de inventario — existencias ingresando al sistema.

Cuerpo de la Solicitud

{
  "itemID": "BOLT-M8-30",
  "units": 500,
  "wid": 1,
  "reasonCode": 1,
  "spot": "A-01-03",
  "serial": "LOT-2025-002",
  "reference": "PO #4521",
  "remark": "Vendor delivery"
}

Campos Obligatorios

CampoTipoDescripción
itemIDstringShortID del artículo a recibir
unitsdecimalCantidad a recibir (debe ser > 0)
widintegerID del almacén destino
reasonCodeintegerCódigo de razón para el ajuste

Campos Opcionales

CampoTipoDescripción
spotstringContenedor/ubicación en el almacén
serialstringNúmero de serie o lote
serial2stringSerial secundario
rfidTagstringEtiqueta RFID
referencestringReferencia externa (número de OC, etc.)
remarkstringNotas
netWeightdecimalPeso neto
grossWeightdecimalPeso bruto
pricedecimalCosto unitario
expiresdatetimeFecha de vencimiento
supplierintegerID de proveedor
lineintegerNúmero de línea de OC (si recibe contra una OC)
jobidintegerID de trabajo/proyecto asociado

Respuesta

Devuelve el nuevo número de registro en caso de éxito.

Casos de Error

EstadoCausa
400Faltan campos obligatorios o fallo de validación
403Sin permiso de recepción, o almacén fuera de alcance

Mover Existencias

POST /Inventory/Move

Mueve inventario entre ubicaciones o almacenes.

Cuerpo de la Solicitud

{
  "itemID": "BOLT-M8-30",
  "units": 100,
  "wid": 1,
  "fromSpot": "A-01-03",
  "toSpot": "B-02-01"
}

Para movimientos entre almacenes, incluya shipToWid:

{
  "itemID": "BOLT-M8-30",
  "units": 100,
  "wid": 1,
  "shipToWid": 3,
  "transitSlip": "TS-2025-042"
}

Campos Obligatorios

CampoTipoDescripción
itemIDstringShortID del artículo a mover
unitsdecimalCantidad a mover
widintegerID del almacén de origen

Campos Opcionales

CampoTipoDescripción
fromSpotstringContenedor/ubicación de origen
toSpotstringContenedor/ubicación de destino
shipToWidintegerAlmacén de destino (para movimientos entre almacenes)
transitSlipstringReferencia de guía de tránsito
serialstringSerial/lote a mover
serial2stringSerial secundario
rfidTagstringEtiqueta RFID
referencestringReferencia externa
recnointegerRegistro de lote específico a mover
receivedstringFiltro de fecha de recepción

Respuesta

Devuelve el resultado de la operación de movimiento en caso de éxito.

Casos de Error

EstadoCausa
400Faltan campos obligatorios o fallo de validación
403Sin permiso de movimiento, o almacén(es) fuera de alcance

Despachar Existencias

POST /Inventory/Issue

Registra un ajuste negativo de inventario — existencias saliendo del sistema.

Cuerpo de la Solicitud

{
  "itemID": "BOLT-M8-30",
  "units": 50,
  "wid": 1,
  "reasonCode": 2,
  "spot": "A-01-03",
  "reference": "Work Order #789"
}

Campos Obligatorios

CampoTipoDescripción
itemIDstringShortID del artículo a despachar
unitsdecimalCantidad a despachar (debe ser > 0)
widintegerID del almacén de origen
reasonCodeintegerCódigo de razón para el ajuste

Campos Opcionales

CampoTipoDescripción
spotstringContenedor/ubicación de donde despachar
serialstringNúmero de serie/lote
serial2stringSerial secundario
rfidTagstringEtiqueta RFID
referencestringReferencia externa
remarkstringNotas
netWeightdecimalPeso neto
shiptointegerID de cliente destino
prodIDstringID de produccion/ensamblaje
recnointegerRegistro de lote especifico de donde despachar
lineintegerNumero de linea de orden

Respuesta

Devuelve el resultado de la operacion de despacho en caso de exito.

Casos de Error

EstadoCausa
400Faltan campos obligatorios o fallo de validacion
403Sin permiso de despacho, o almacen fuera de alcance

Alcance de Almacen

Todas las operaciones de inventario aplican el alcance de almacen. Sus credenciales de API estan asignadas a almacenes especificos. Si intenta leer o escribir inventario en un almacen fuera de su alcance, recibira un error 403.

Para movimientos entre almacenes, tanto el origen (wid) como el destino (shipToWid) deben estar en su alcance autorizado.

Permisos

AccionPermiso Requerido
Listar lotes / niveles de existenciasItem Master List (SecurityID 11)
Recibir existenciasPositive Adjustment (SecurityID 95)
Mover existenciasLocate/Move Units (SecurityID 15)
Despachar existenciasNegative Adjustment (SecurityID 88)

En esta página