Eofferix acepta archivos JSON y respuestas JSON. Puede cargar un archivo una sola vez, recibirlo automáticamente desde un adjunto de email, tomarlo por un enlace directo, por un enlace con autorización, por FTP/FTPS/SFTP o desde la API del proveedor.
Después de recibir los datos, JSON puede convertirse en XML, tablas CSV/XLSX, otro JSON con parámetros y valores editados, o importarse en aplicaciones compatibles con el servicio.

Cómo funciona el snapshot
El servicio analiza el archivo y lo convierte en un snapshot corto con nodos únicos. Si un array contiene mil productos, el snapshot muestra la estructura de un elemento típico y el conjunto de campos encontrados, no mil repeticiones.
En el snapshot puede renombrar nodos, cambiar la estructura, quitar campos innecesarios, crear nodos nuevos y configurar reglas de transformación. En la siguiente ejecución, esas reglas se aplican a todo el JSON recibido de la fuente.
Qué se puede transformar
- Renombrar campos. Por ejemplo, convertir
idenexternal_id,nameentitleyprices.baseenprice. - Filtrar registros. Dejar solo productos donde
flags.active = true, o exportar solo productos con stock mayor que cero. - Cambiar anidación. Expandir
stock[]en una lista de almacenes, reunirattributes[]como propiedades y mover imágenes a un nodomedia. - Calcular valores. Crear una ruta de categoría, calcular precio con descuento, normalizar moneda o llenar la fecha de importación.
- Transformar imágenes. Convertir imágenes a
jpg,pngowebp, cambiar su tamaño y aplicar una marca de agua. - Importar en una aplicación. Vincular nodos JSON a campos de catálogo, CRM, CMS u otro destino compatible.

Ejemplos de transformaciones
Las reglas de transformación permiten cambiar profundamente la exportación final: filtrar elementos, renombrar nodos, crear una estructura nueva, calcular valores, rellenar campos nuevos desde otras partes del documento y preparar el resultado para un marketplace, sitio web, PIM o sistema interno.
Qué hace el ejemplo de precio
Abajo se muestran las mismas reglas por pasos. Cada captura muestra solo la fila de regla responsable del paso actual.
1. Primero se eliminan los espacios del valor del precio. Es útil cuando el proveedor envía el precio como una cadena, por ejemplo 12 990.

2. Si el precio no está vacío, el servicio lo aumenta un 15%. Así se añade margen sin cambiar el JSON de origen.

3. Después, la regla comprueba otro nodo del documento: /catalog/items/stock/qty. Si el stock es menor que 5, el precio se reemplaza por 0.

4. Otra regla usa /catalog/items/brand: para TestBrand, el precio se multiplica además por 1,5.

5. Al final, el resultado se redondea a un decimal con reglas estándar.

Ejemplo simple: renombrar campos y dejar productos activos
Este ejemplo toma elementos de catalog.items[], deja solo productos activos y adapta los nombres de campos al formato de destino.
{
"id": "A-100",
"sku": "ITEM-100",
"name": "Nordic armchair",
"prices": {
"base": 129.90,
"discount": 119.90
},
"flags": {
"active": true
}
}{
"external_id": "A-100",
"sku": "ITEM-100",
"title": "Nordic armchair",
"price": 119.90,
"old_price": 129.90
}Reglas:
- En el JSON de origen hay un producto con
id = A-100. Los demás productos tienen la misma estructura, pero el snapshot muestra un elemento representante del arreglo repetidocatalog.items[]. Haz clic en el valortruedentro del objetoflags, en el campoactive, y en Condiciones de exportación elige Condición para todo el elemento. Así se exportan solo elementos contrue, o se excluyen elementos confalse.
La condición se aplica al elemento completo: el producto se exporta si flags.active es igual a true; la segunda regla puede usarse como comprobación inversa para false. - Renombra el nodo
idaexternal_id: haz clic en el nombre del nodo e introduce el nombre nuevo.
Ajustes del nodo: external_id se introduce en el campo Nombre del nodo. - Renombra
nameatitledel mismo modo. No hace falta otra captura: la acción es igual que paraid. - Hay dos escenarios válidos para los precios. Si el contenedor
pricessirve, renombraprices.discountapriceyprices.baseaold_price. Sipriceyold_pricedeben estar al nivel del producto, crea nodos nuevos junto aidyname, rellénalos desde/catalog/items/prices/discounty/catalog/items/prices/base, y luego no exportes el contenedor antiguoprices.
Para el campo nuevo price se usa la acción reemplazar: el valor se toma de otro nodo del documento.
Nodos nuevos
Un nodo nuevo es necesario cuando el resultado debe contener un campo que no existe en el JSON de origen, o cuando los datos de origen deben reorganizarse.

Un nodo se puede rellenar con:
- un valor de otra parte del archivo de origen, por ejemplo el nombre, SKU, marca, o varios valores unidos en un solo campo como
Nombre SKU Marca; - un valor del sistema, como la fecha de ejecución o el nombre de la fuente;
- una expresión, por ejemplo unir la ruta de categoría o calcular el porcentaje de descuento;
- también se puede convertir en variable.
Variables: por qué son necesarias
Una variable guarda un resultado intermedio. Es práctica cuando un valor debe usarse en varios campos o condiciones.
Importante: las variables no aparecen en la exportación final. Solo ayudan a otras transformaciones: puedes guardar un resultado intermedio y usarlo después en reglas, condiciones o cálculos.

Por ejemplo, final_price se calcula una vez:
final_price = prices.discount si prices.discount está lleno; si no, prices.base
Después se puede usar en varias reglas:
product.prices.price = final_price;product.prices.old_price = prices.base, sifinal_pricees menor que el precio base;product.prices.discount_percentse calcula desdeprices.baseyfinal_price;- la condición de exportación comprueba que
final_pricesea mayor que cero.
Así las reglas son más cortas y el precio no se desincroniza en distintas partes del resultado por cálculos manuales repetidos.