Manual integración producto precios
Introducción
Este documento describe la interfaz para la carga de precios de productos en el sistema TOL.
El precio de un producto está asociado a un canal y una tienda preparadora.
En esta integración, se contempla la posibilidad de establecer precios por volumen, así como la vigencia de los precios.
Definición
La interfaz permite altas, modificaciones y bajas de los precios de los productos ya existentes en el sistema.
Precio Base
Se entiende como precio base al precio que se define desde 0 unidades y con un intervalo de vigencia. Es el registro mínimo de precio para que se muestre en la Tienda.
Si un producto no tiene un registro de precio valido, se mostrará en la tienda, pero no podrá añadirse al carrito.
Precio por volumen
Es posible definir diferentes precios en función de las unidades de un producto
Para activar esta funcionalidad deberán cargarse registros con los diferentes tramos de precio y su correspondiente vigencia.
Ejemplo:
- Precio base: 1,00€
- Precio desde 4 unidades: 3,00€
- Precio desde 8 unidades: 2,50€

Prevalencia de precio
En el caso que se definan varios precios para las mismas unidades el precio valido para una fecha concreta se calculara de la siguiente forma:
- 1ª prioridad: registro con “fecha de validez hasta” más próxima a la fecha actual.
- 2ª prioridad: registro con “fecha de validez desde” más próxima a la fecha actual
- 3ª prioridad: registro con fecha de creación o modificación más reciente.
Validaciones por artículo
Para que se aplique alguna acción debe cumplir las siguientes condiciones:
- El artículo debe existir en la TOL.
- La tienda preparadora debe existir en la TOL.
Si no se cumplen alguna de estas condiciones el registro no se procesara y se registrará error en la tabla de logs.
Interfaz
Acción:
Alta/Modificación:
Realiza el alta/modificación del precio en el sistema.
- Gestión de errores
Si el producto
El parámetro incremental puede ser [0 ó 1]:
- 0 -> Desactivamos todos los tramos incluidos el base que tenga el producto e insertamos los nuevos que nos llega por la carga
- 1 -> Hace la acción de insertado si no existe y actualiza si existe el precio del artículo.
Baja:
La acción baja hace una baja lógica actualizando la “fechaHasta” con la fecha actual. De esta forma no será visible en la tienda para el cliente final.
Nomenclatura del fichero
El archivo tendrá el siguiente nombre: “prefijo_Nombrefichero”, donde:
- Prefijo: Prefijo a definir en cada instalación. Por defecto es “precios”
- 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 ftp 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.[M] | Oblig [B] |
|---|---|---|---|---|
| Surtido “surtido” | Lista con la información de producto y precios | Lista del Tipo Surtido | Sí | Sí |
Tipo Producto Surtido
| Campo “Nombre campo” | Descripción/Ejemplo | Formato | Oblig.[M] | Oblig. [B] |
|---|---|---|---|---|
| Zonas “zonas” | Lista de tiendas preparadoras a las que pertenece el surtido | Lista de Tipo Código Zona | Sí | Sí |
| Canal “canal” | Canal al que pertenece el producto | Numérico entero | Sí | Sí |
| Acción “accion” | baja o modificación | Literal (1 carácter) “B” o “M” | Sí | Sí |
| Código producto “codigo” | Código interno del producto en los sistemas del cliente | Literal (10 caracteres máx.) | Sí | Sí |
| Incremental “incremental” | Incremental influye en la acción [M]: “0” -> se ejecuta primero la baja y luego la inserción “1” -> se actualiza si existe en el sistema, en caso contrario, se insertará. | Número entero “0” o “1” | Sí | No |
| Precios “precios” | Precios del producto. | Lista de Tipo Moneda | Sí | No |
Tipo código zona
| Campo “Nombre campo” | Descripción/Ejemplo | Formato | Oblig.[M] | Oblig. [B] |
|---|---|---|---|---|
| Código “codigo” | Código que identifica distintivamente la tienda preparadora. | Numérico entero | Sí | Sí |
Lista de Tipo Moneda
| Campo “Nombre campo” | Descripción/Ejemplo | Formato | Oblig.[M] | Oblig. [B] |
|---|---|---|---|---|
| Divisa “divisa” | Código que identifica la divisa (ISO-4217) | Literal (3 caracteres máx.) | Sí | No |
| Precio “precio” | PVP del producto. Precio con IVA. | Decimal (10,5) | Sí | No |
| Precio Unitario “precioUnitario” | Precio unitario del producto. En función de la “Unidad de Medida Precio Unitario” Este dato es meramente informativo. | Decimal (10,5) | Sí | No |
| Desde unidades “desdeUnidades” | Unidades a partir de las que aplica el precio | Decimal (10,5) | Sí | No |
| Fecha desde “fechaDesde” | Fecha y hora inicio validez del precio | Fecha (dd/mm/aaaa HH:mm) | Sí | No |
| Fecha hasta “fechaHasta” | Fecha y hora fin de validez del precio | Fecha (dd/mm/aaaa HH:mm) | Sí | No |
ANEXOS
Listado de errores
Gestión de errores generales [M y B]
| Mensaje | Descripción |
|---|---|
| El producto con código {0} no existe/no habilitado. | El código del producto, “codigo”, existe/no habilitado en el sistema. |
| Error, El canal {0} no existe/no habilitado. | El canal informado no existe/no habilitado en el sistema. |
| Error, en el producto con código: {0} no tiene canal asignado. | No se ha informado el canal. |
| Acción desconocida para el producto con código {0}. | La acción informada no existe. debe ser [“M” o “B”] |
| Error, en el producto con código: {0} no tiene zonas asignadas. | No se ha informado la tienda preparadora. |
| La zona con código {0} no existe. | La zona con dicho código no existe. Debe existir en el sistema |
Gestión de errores de Modificación [M]
| Mensaje | Descripción |
|---|---|
| Error en el producto con código: {0} zona: {1} no tiene precios asignados. | No se ha informado del nodo precios dentro del articulo. |
| Warning en el producto con código: {0} zona: {1} no tiene precios asignados para esta divisa. | No se ha informado de la divisa. No se insertará este precio. |
| Warning en el producto con código: {0} tienda preparadora: {1} el precio es 0 o inexistente. | Debe informarse el precio mayor a 0. No se insertará este precio. |
| Warning en el producto con código: {0} tienda preparadora: {1} la fecha desde debe ser inferior a fecha hasta. | La “fechaDesde” debe ser inferior a “fechaHasta”. No se insertará este precio. |
| Warning en el producto con código: {0} tienda preparadora: {1} la fecha hasta debe ser superior a hoy. | La “fechaHasta” debe ser superior a ahora. No se insertará este precio. |
| Warning, el producto con código: {0} tienda preparadora: {1} las unidades desde no son correctas. | Si el tipo de producto es diferente 2 (al peso) y “desdeUnidades” tiene decimales no se insertará este precio. |
| Error, no se ha modificado del precio del producto con código: {0}, zona: {1}, desdeUnidades: {2}, fechaDesde: {3}, fechaDesde: {4}. | Error al insertar/modificar el precio del producto general. |
Gestión de errores de Baja [B]
Se aplican las generales y estas son las particulares:
| Mensaje | Descripción |
|---|---|
| Error, no se ha deshabilitado/actualizado los precios a "fecha hasta" con valor de ahora para el producto con código {0} tienda preparadora: {1}. | Error al actualizar la “fechaHasta” del precio del producto. Reportar de incidencia a soporte si fuera necesario. |
Ejemplos json
Alta/modificación de precio base
El archivo en formato JSON
{
"surtido": [
{
"zonas": [
{
"codigo": 1
},
{
"codigo": 2
}
],
"canal": 1,
"codigo": "111814061",
"accion": "M",
"incremental": 0,
"precios": [
{
"divisa": "EUR",
"precio": 99.99,
"precioUnitario": 99.99,
"desdeUnidades": 0,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
}
]
}
]
}
Alta/modificación con precios por volumen con incremental igual a 0
{
"surtido": [
{
"zonas": [
{
"codigo": 1
}
],
"canal": 1,
"codigo": "111814061",
"accion": "M",
"incremental": 0,
"precios": [
{
"divisa": "EUR",
"precio": 99.99,
"precioUnitario": 99.99,
"desdeUnidades": 0,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
},
{
"divisa": "EUR",
"precio": 77.77,
"precioUnitario": 77.77,
"desdeUnidades": 3,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
},
{
"divisa": "EUR",
"precio": 55.55,
"precioUnitario": 55.55,
"desdeUnidades": 5,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
},
{
"divisa": "EUR",
"precio": 33.33,
"precioUnitario": 33.33,
"desdeUnidades": 7,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
}
]
}
]
}
Alta/modificación con precios por volumen con incremental igual a 1
{
"surtido": [
{
"zonas": [
{
"codigo": 1
}
],
"canal": 1,
"codigo": "111814061",
"accion": "M",
"incremental": 1,
"precios": [
{
"divisa": "EUR",
"precio": 99.99,
"precioUnitario": 99.99,
"desdeUnidades": 0,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
},
{
"divisa": "EUR",
"precio": 77.77,
"precioUnitario": 77.77,
"desdeUnidades": 3,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
},
{
"divisa": "EUR",
"precio": 55.55,
"precioUnitario": 55.55,
"desdeUnidades": 5,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
},
{
"divisa": "EUR",
"precio": 33.33,
"precioUnitario": 33.33,
"desdeUnidades": 7,
"fechaDesde": "01/01/2024 00:00",
"fechaHasta": "31/12/2025 23:59"
}
]
}
]
}
Baja de precios
{
"surtido": [
{
"zonas": [
{
"codigo": 1
}
],
"canal": 1,
"codigo": "111814061",
"accion": "B"
}
]
}
Gestión de versiones
| Versión | Cambios |
|---|---|
| 25.0 | Importación inicial |
| 25.3 | Eliminación versionJ |