Integración por Lotes (Batch) de Atributos de Producto
Introducción
Esta sección describe la interfaz de carga de atributos de producto para la integración por lotes (batch) en la Tol.
Los atributos de producto permiten añadir información adicional a los productos más allá de las características básicas que se gestionan a través de la carga estándar de surtido. Estos atributos se definen a nivel de producto, pero pueden tener valores específicos para una tienda preparadora o idioma, lo que permite una gran flexibilidad en la gestión de la información del producto.
Definición
La interfaz permite realizar altas, modificaciones y bajas de atributos de producto. Las bajas se gestionan a través del backend de la aplicación.
Validaciones por Artículo
Al procesar la carga de atributos, se realizan las siguientes validaciones:
- Si el producto no está dado de alta en la TOL, no se darán de alta los atributos y se escribirá un error en la tabla de errores de carga.
- Si el identificador de un atributo no existe en la tabla de atributos, no se insertará y se escribirá un error en la tabla de errores de carga.
Atributos
Los identificadores de atributos se definen en el back-office de la TOL. Estos identificadores se utilizan para la carga de atributos en la plataforma.
También es posible configurar validaciones a través de expresiones regulares para asegurar la integridad de los datos.
Tienda Preparadora
Un atributo puede tener valores diferentes en función de la tienda preparadora. Si no se especifica una tienda preparadora, el atributo se aplicará a todas las tiendas.
En caso de que un atributo tenga valores definidos tanto para una tienda preparadora específica como para la tienda preparadora por defecto, prevalecerá el valor más restrictivo (el de la tienda preparadora específica).
Ejemplo:
- Tienda preparadora "0001": Atributo "nutriscore" = "A"
- Tienda preparadora por defecto: Atributo "nutriscore" = "B"
En este caso, el producto en la tienda preparadora "0001" tendrá el atributo "nutriscore" = "A", mientras que en el resto de tiendas preparadoras tendrá "nutriscore" = "B".
Idiomas
Los valores de los atributos pueden cargarse por idioma. Si no se especifica un idioma, el valor se aplicará a todos los idiomas.
Si un atributo tiene un valor definido para un idioma específico y también para el idioma por defecto, prevalecerá el valor más restrictivo (el del idioma específico).
Interfaz
Acción
Alta
Realiza el alta del atributo en el sistema.
Es obligatorio informar todos los campos obligatorios.
Si se intenta dar de alta un atributo que ya existe, se modificará su valor.
- Gestión de errores
Si el producto está dado de baja en la TOL, se generará un error de tipo warning, pero se ejecutará la acción.
Si el identificador de un atributo no existe en la tabla, no se insertará y se escribirá un error en la tabla de errores de carga.
| Mensaje | Descripción |
|---|---|
| El producto con código [{0}] no existe | El código del producto, “productCode”, no existe en BBDD |
| El atributo [{0}] del producto [{1}] no existe | El código del atributo, “code” no existe ó esta desactivado en BBDD |
| zona [{0}] no existe | La tienda preparadora, “zoneId”, no existe ó esta desactivada en BBDD. |
| Idioma [{0}] no soportado en el atributo [{1}] del producto [{2}] | El idioma,”lang”, no existe ó está desactivado. |
| El atributo [{0}] del producto [{1}] no tiene informado el valor | El valor, “values”, no tiene valor asignado |
| El valor [{0}] del atributo [{1}] del producto [{2}] no cumple la expresión regular [{3}] | El valor, “values”, no cumple con el patrón del atributo |
| El valor [{0}] del atributo [{1}] del producto [{2}] no es un número | El valor, “values”, no es un numero según el atributo. |
| El valor [{0}] del atributo [{1}] del producto [{2}] es menor que el mínimo [{3}] | El valor, “values”, si es un número no puede ser menor al valor minimo del atributo |
| El valor [{0}] del atributo [{1}] del producto [{2}] es mayor que el máximo [{3}] | El valor, “values”, si es un número no puede ser menor al valor mayor del atributo |
| El valor [{0}] del atributo [{1}] del producto [{2}] no es un booleano | El valor, “values”, si es un booleano debe ser “true” ó “false” |
Baja
Realiza el borrado físico del atributo en el sistema.
Es obligatorio informar todos los campos obligatorios.
- Gestión de errores
Si se intenta dar de baja un atributo que no existe en el sistema, se escribirá un error en la tabla de errores de carga.
| Mensaje | Descripción |
|---|---|
| El producto con código [{0}] no existe | El código del producto, “productCode”, no existe en BBDD |
| El atributo [{0}] del producto [{1}] no existe | El código del atributo, “code” no existe ó esta desactivado en BBDD |
| zona [{0}] no existe | La tienda preparadora, “zoneId”, no existe ó esta desactivada en BBDD. |
| Idioma [{0}] no soportado en el atributo [{1}] del producto [{2}] | El idioma,”lang”, no existe ó está desactivado. |
Nomenclatura del fichero
El archivo tendrá el siguiente nombre: “prefijo_Nombrefichero”, donde:
- Prefijo: Prefijo a definir en cada instalación. Por defecto es “producto_atributos”
- NombreFichero: A definir por el cliente en la instalación, p.ej . AAAAMMDDHHmmss
Adicionalmente, se puede definir que la carga del archivo se ejecute teniendo en cuenta la existencia de un archivo de semáforo para asegurar que el archivo de surtido está completo.
El archivo de semáforo tendrá el siguiente nombre “prefijosemaforoprefijo_AAAAMMDDHHmmss
- Prefijosemaforo: texto configurable en cada instalación
El fichero deberá estar en formato UTF-8 sin BOM
- Planificación del proceso
Normalmente, este proceso se ejecutará automáticamente al finalizar la carga de surtido, pero se podrá configurar según necesidad desde el gestor de cargas.
El proceso recogerá el archivo JSON desde una carpeta del servidor de archivos definido y una vez procesado lo moverá a una carpeta de archivos procesados
Las carpetas de lectura y de archivos procesados son configurables en cada instalación.
El proceso se puede lanzar de forma manual desde el back-office.
El proceso envía un email con el resultado de la ejecución a la cuenta de correo definida en la instalación.

Formato del archivo JSON
El archivo JSON tendrá la estructura siguiente:
| Campo “Nombre campo” | Descripción/Ejemplo | Formato | Oblig. |
|---|---|---|---|
| Producto atributos “products” | Lista con la información de los producto atributos | Lista del Tipo Producto Atributo | Sí |
Tipo Producto Atributo
| Campo “Nombre campo” | Descripción/Ejemplo | Formato | Oblig. |
|---|---|---|---|
| Acción “action” | Acción a realizar: A: Alta/Modificación/Borrar | Literal (1 Carácter): “A” ó “M” | No |
| Código “productCode” | Código interno del producto en los sistemas del cliente | Literal (10 caracteres máx.) | Sí |
| Tipo de atributo “code” | Código del atributo definido en la configuración | Literal (50 caracteres máx.) | Sí |
| Id de la zona “zoneId” | Id de la tienda preparadora del articulo Si no se informa (‘’) el atributo aplicara a todas las tiendas. | Literal (20 caracteres máx.) | No |
| Id del idioma “lang” | Idioma del atributo Si no se informa (‘’) el atributo aplicará a todos los idiomas. | Literal (2 caracteres máx.) | No |
| Listado de valores “values” | Listado de los valores del atributo. Si no es de tipo lista, tan solo hay que agregar un valor. | Lista de Tipo String | Sí |
ANEXOS. Ejemplos json
Alta/modificación con tienda preparadora e idioma por defecto
{
"products": [
{
"action": "A",
"productCode": "317784",
"code": "filter.text.wine-type",
"values": ["Generosos"]
},
{
"action": "A",
"productCode": "317784",
"code": "filter.text.wine-pairing",
"values": ["Aperitivos"]
}
]
}
Alta/modificación con tienda preparadora e idioma
{
"products": [
{
"action": "A",
"productCode": "317784",
"code": "filter.text.wine-type",
"lang": "en",
"values": ["General"]
},
{
"action": "A",
"productCode": "317784",
"code": "filter.text.wine-pairing",
"lang": "es",
"values": ["Aperitivos"]
},
{
"action": "A",
"productCode": "317784",
"code": "filter.text.wine-pairing",
"lang": "es",
"zoneId": "174",
"values": ["Aperitivos de la Tierra"]
}
]
}
Baja de atributos
{
"products": [
{
"action": "B",
"productCode": "317784",
"code": "filter.id.eco",
"values": [""]
},
{
"action": "B",
"productCode": "317784",
"code": "filter.id.eco",
"lang": "es",
"values": [""]
},
{
"action": "B",
"productCode": "317784",
"code": "filter.id.eco",
"zoneId": "",
"values": [""]
},
{
"action": "B",
"productCode": "317784",
"code": "filter.id.eco",
"zoneId": "174",
"values": [""]
},
{
"action": "B",
"productCode": "317784",
"code": "filter.id.eco",
"lang": "es",
"zoneId": "174",
"values": [""]
}
]
}
Atributos reconocidos por la plataforma
Además de los atributos que cada instalación pueda definir en el back-office, la plataforma reconoce los siguientes códigos de atributo (code) con un significado específico:
Código (code) |
Tipo de valor | Descripción |
|---|---|---|
filter.id.eco |
Booleano (true/false) |
Marca el producto como ecológico. |
filter.id.brand.distributor |
Booleano | Marca el producto como marca propia del distribuidor. |
filter.id.glutenFree |
Booleano | Indica que el producto es sin gluten. |
filter.id.localMarket |
Booleano | Marca el producto como producto de mercado/local. |
filter.id.novelty |
Booleano | Marca el producto como novedad. |
filter.id.nutriscore |
Texto (A–E) |
Valor Nutriscore del producto. |
product.gross.weight |
Número (kg) | Peso bruto del producto. Se utiliza para el cálculo del coste de envío por peso. |
product.net.weight |
Número (kg) | Peso neto del producto. Informativo. |
Gestión de versiones
| Versión | Cambios |
|---|---|
| 25.0 | Importación inicial |
| 25.3 | Eliminación versionJ |