Una de las tareas más pesadas en e-commerce siempre es la misma: enlazar el catálogo de un proveedor con tu tienda. Los ficheros suelen llegar en CSV, cada uno con sus propias reglas: columnas con nombres distintos, el stock en un archivo separado, categorías jerárquicas que no encajan a la primera… un pequeño laberinto.

En este artículo te muestro cómo hacerlo con Lovecherry. Da igual si usas ShopinCloud, Prestashop o cualquier otra plataforma: lo que verás es la lógica básica para poner orden y no perderte en el intento.

1. Categorías: ordenar el árbol

Lovecherry entrega un CSV con las categorías, pero las columnas vienen con nombres como id categoria o id padre . Lo primero es renombrarlas a algo claro, tipo id y parent_id. Con eso puedes reconstruir fácilmente el árbol jerárquico con una función sencilla.

El resultado: un diccionario en el que cada categoría sabe quién es su madre y cuál es su nombre. Así, cuando cargues los productos, tu cliente verá que un Body encaje está en Lencería > Bodies y no perdido en un listado de números.

2. Productos y stock: unir piezas

Aquí viene otra parte clave. Los productos van en un CSV y el stock en otro. Para complicarlo un poco más, el stock puede depender de combinaciones de talla o color.

Si no unes bien esos dos ficheros, te encontrarás con productos sin stock o stock que no sabes a qué variante pertenece.

La solución es clara: haz un join por idProducto y idCombinacion. Así cada producto se enriquece con el stock real que le corresponde.

3. Dar sentido al producto

Cuando ya tienes producto + stock, toca añadir la categoría principal. Lovecherry mete varias en un campo separado por #. Lo práctico es quedarte con la primera como principal y después añadirle el nombre de esa categoría para que tu sistema lo entienda.

Al final tendrás un JSON ordenado con campos básicos: idProducto, nombre, precio, stock, category_id y category.

4. Ejemplo de salida

[
  {
    "idProducto": "12345",
    "nombre": "Body encaje Luna",
    "precio": 29.95,
    "stock": 14,
    "category_id": "12",
    "category": "Lencería > Bodies"
  },
  {
    "idProducto": "12346",
    "nombre": "Lubricante Aloe 100ml",
    "precio": 7.90,
    "stock": 120,
    "category_id": "22",
    "category": "Bienestar > Lubricantes"
  }
]

No es el JSON real, pero sirve para visualizar lo que deberías conseguir.

5. Errores típicos y cómo evitarlos

  • Encoding: a veces los acentos se rompen. Forza UTF-8.
  • Columnas que cambian de nombre: hoy es “Id producto”, mañana “id producto”. Ten un mapa de alias preparado.
  • Categorías vacías: pon una por defecto (Uncategorized) y evitas errores.
  • Stock nulo: si no hay datos, decide si lo interpretas como 0 o lo dejas vacío.
  • Archivos enormes: procesa por partes o usa caché.

6. Checklist rápido

  • Variables de entorno para las URLs de Lovecherry (nunca hardcodees).
  • Cachear los CSV para no descargarlos una y otra vez.
  • Validar precios y stocks (que sean números reales).
  • Guardar logs: cuántos productos entran y cuántos se descartan.

7. ¿Y ahora qué?

Con el JSON limpio ya puedes:

  • Importar productos en tu tienda.
  • Pasarlos a una cola de procesos en segundo plano.
  • Filtrar categorías que no te interesen.
  • Aplicar reglas de márgenes o impuestos.

Lo bueno es que este patrón no se limita a Lovecherry. Con pequeños ajustes (URLs y nombres de columna) sirve para cualquier otro proveedor que use CSV.

Para terminar

Trabajar con proveedores externos siempre pasa por lo mismo: normalizar datos, unir CSV y acabar con una estructura limpia. Si controlas esos tres pasos, tu tienda —sea ShopinCloud o cualquier otra— funcionará sin sobresaltos.

Ejemplo en código con ShopinCloud

{% set file = 'URL_CATEGORIAS' %}
{% set csvCategories = sh().read_csv(file) %}
{% set csvCategories = sh().arrays_replace_key("id categoria","id",csvCategories) %}
{% set csvCategories = sh().arrays_replace_key("id padre","parent_id",csvCategories) %}

{% set categoriesPaths = sh().buildTreeInOneLevel(csvCategories, 2, 'parent_id', 'id', 'nombre') %}

{% set file = 'URL_PRODUCTOS' %}
{% set csvProducts = sh().read_csv(file) %}

{% set file = 'URL_STOCK' %}
{% set csvStocks = sh().read_csv(file) %}
{% set csvStocks = sh().arrays_replace_key("Id producto","idProducto",csvStocks) %}
{% set csvStocks = sh().arrays_replace_key("Id combinacion","idCombinacion",csvStocks) %}

{% set csvProducts = sh().unionArraysByKeys(csvProducts, csvStocks, ['idProducto','idCombinacion']) %}
{% set newData = [] %}
{% for row in csvProducts%}
    {% set categoryID = row.categorias|split('#')|first%}
    {% set newItem = row|merge({'category_id':categoryID,'category': categoriesPaths[categoryID]['nombre'] }) %}
    {% set newData = newData|merge([newItem]) %}
{% endfor %}

{{ newData|json_encode }}

Conecta Lovecherry a tu tienda online sin complicaciones y empieza a vender más.