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
5af2938fae6299844d5ae33den 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);
}