Saltar al contenido principal

Actualización de Inventario

El microservicio Williams es el encargado de gestionar el estado del inventario para cada producto.
Otros servicios, como Ares, consumen esta información para mantenerse actualizados.

Este documento describe cómo interactuar con el API de Williams para realizar operaciones relacionadas con el inventario en el almacén principal.

  • CEDIS tiene el identificador 5af2938fae6299844d5ae33d en el catalogo de williams.
  • El status 10 significa que el producto está disponible para venta.
  • En esta documentación se usa un producto de prueba, en este caso su sku es MP_1.

Ambientes


Autenticación

Para usar los endpoints es necesario obtener un token de acceso.

Endpoint:

POST /api/Users/login

Payload:

{
"username": "gabo",
"password": "BhK8oACS45"
}

⚠️ Nota: Utiliza un usuario y contraseña real generados en Williams

Respuesta esperada (ejemplo):

{
"id": "eyJhbGciOi...",
"ttl": 6220220,
"created": "2025-09-05T15:12:30.000Z",
"userId": "12345"
}

El atributo "id" corresponde al token de acceso, el cual debe incluirse en todas las solicitudes siguientes como parámetro de query:

?access_token={token}

⚠️ Nota: El token puede expirar. Cuando eso suceda, se debe generar uno nuevo.


Operaciones de Inventario

1. Agregar stock a un producto

Endpoint:

POST /api/Items/add?access_token={token}

Payload:

{
"sku": "MP_1",
"qty": 10,
"stock": "CEDIS"
}

2. Descontar stock de un producto

Endpoint:

POST /api/Items/dim?access_token={token}

Payload:

{
"sku": "MP_1",
"qty": 5,
"stock": "CEDIS"
}

3. Consultar stock de un producto específico

Endpoint:

POST /api/Items/all-sale?access_token={token}

Payload:

{
"sku": "MP_1",
"location": "5af2938fae6299844d5ae33d"
}

Respuesta esperada (ejemplo):

{
"items": [
{
"_id": "MP_1",
"stocks": [
{
"status": 10,
"locationId": "5af2938fae6299844d5ae33d",
"count": 5,
"location": {
"_id": "5af2938fae6299844d5ae33d",
"address": "Parque Logístico...",
"code": "CEDIS",
"priority": 999,
"groupId": "5a9db74fdb82d13bd5e7b8da"
}
}
],
"total": 5
}
]
}

4. Consultar stock de todos los productos disponibles en CEDIS

Endpoint:

POST /api/Items/all-sale-by-location?access_token={token}

Payload:

{
"location": "5af2938fae6299844d5ae33d",
"status": [10]
}

Respuesta esperada (ejemplo):

{
"items": [
{
"_id": "9785_3",
"stocks": [
{
"status": 10,
"count": 10
}
]
},
{
"_id": "MP_1",
"stocks": [
{
"status": 10,
"count": 5
}
]
}
]
}

5. Consultar location id usando location code (necesario para update de inventario m2)

Endpoint:

GET /api/Locations?filter=%7B%22where%22%3A%7B%22code%22%3A%22{location_code}%22%7D%7D&access_token={token}"

Respuesta esperada (ejemplo):

[
{
"address": "string",
"code": "string", //location_code
"priority": 0,
"id": "string", //5af2938fae6299844d5ae33d
"supplierId": "string",
"groupId": "string"
}
]

m2 consulta este endpoint de la siguiente manera:

  public function getLocationByCode($code)
{
$filters['code'] = $code; //CEDIS
$data = [
'filter' => json_encode([
'where' => $filters,
]),
];

$options = [
'json' => $data
];

return $this->client->request('get', self::LOCATIONS_ENDPOINT, $options, $data);
}