> ## Documentation Index
> Fetch the complete documentation index at: https://docs.retailgrid.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Datos producto-tienda

> El conjunto de datos Product Store-Level te permite aportar información de productos a nivel de tienda, mercado o canal de venta.

El conjunto de datos **Product Store-Level** (nivel producto-tienda) te permite aportar información de productos a nivel de tienda, mercado o canal de venta.

Este conjunto de datos es necesario si:

* Operas varias tiendas físicas
* Vendes en distintos mercados (países)
* Gestionas varios canales de venta (Online / Marketplace / Mayorista)
* Los precios, costos, tipos impositivos o el stock difieren por tienda

Cada fila representa:

> **Un producto en una tienda concreta (o mercado / canal)**

***

## Cuándo usar datos a nivel de tienda

Usa este conjunto de datos si:

* Los precios varían por tienda
* El costo unitario difiere por almacén o región
* El stock se gestiona por tienda
* Los tipos impositivos varían por país
* Algunos productos están activos solo en ciertas tiendas

Si todas las tiendas comparten datos de producto idénticos, puedes usar únicamente el conjunto de datos Products.

***

## Esquema de datos

| Nombre del campo | Obligatorio | Tipo | Formato | Descripción | Nombres alternativos | Ejemplo |
| :- | :- | :- | :- | :- | :- | :- |
| `item_id` | ✅ Sí | string | Texto | Identificador único a nivel de SKU (debe coincidir con `item_id` en el conjunto de datos Products) | itemId, sku\_id | SKU-1001 |
| `store_id` | ✅ Sí | string | Texto | Identificador de tienda / mercado / canal de venta | storeId, store\_code, market\_id, channel\_id, location\_id | FI-HELSINKI |
| `price` | ✅ Sí | float | Separador de punto | Precio de venta actual | selling\_price, current\_price | 119.99 |
| `unit_cost` | ⬜ No | float | Separador de punto | Costo por unidad | cost, purchase\_cost, landed\_cost | 75 |
| `status` | ⬜ No | string | Texto | Estado del producto en esta tienda (active / discontinued / out\_of\_stock) | availability\_status, lifecycle\_status | active |
| `stock` | ⬜ No | float | Numérico | Unidades de inventario disponibles | inventory, stock\_qty, quantity\_available | 42 |
| `regular_price` | ⬜ No | float | Separador de punto | Precio base sin descuento | list\_price, base\_price | 129.99 |
| `tax_rate` | ⬜ No | float | Porcentaje (0 a 1 o 0 a 100) | Tipo de IVA o impuesto sobre ventas | vat, vat\_rate, tax | 24 |
| `currency` | ⬜ No | string | ISO 4217 | Código de moneda | currency\_code | EUR |
| `price_effective_date` | ⬜ No | datetime | YYYY-MM-DD | Fecha en que el precio entra en vigor | effective\_from, valid\_from | 2026-02-01 |

Puedes incluir atributos adicionales como columnas aparte (solo en cargas CSV / XLSX; la API JSON rechaza los campos desconocidos).

***

## Lógica de emparejamiento

* `item_id` debe coincidir con el conjunto de datos Products
* `store_id` debe coincidir con una tienda definida en [Gestión de tiendas](https://docs.retailgrid.io/es/stores/manage-stores.md)

El emparejamiento se puede configurar con:

* Coincidencia exacta
* Claves compuestas (item\_id + store\_id)
* Identificadores personalizados

***

## Cargar por CSV o por API

Los datos a nivel de tienda se pueden cargar de dos formas:

* **Carga CSV / XLSX**: desde la página Datasets, siguiendo los requisitos de formato indicados más abajo.
* **API pública**: envía registros producto-tienda de forma programática (`POST /v1/product_store/bulk` para registros JSON, `POST /v1/imports/product_store` para importación de CSV), un registro por combinación producto-tienda. La clave de upsert es `(item_id, store_id)`; `store_id` es obligatorio en las cargas producto-tienda. Los registros a nivel de producto se gestionan en cambio con los endpoints de Products. Consulta las [novedades de la API](https://docs.retailgrid.io/es/api-reference/changelog.md) para más detalles.

Las cargas por API difieren del esquema CSV en algunos puntos:

* Campos obligatorios en las cargas por API: `item_id`, `sku`, `store_id`, `current_price`. Ten en cuenta que `sku` es obligatorio en las cargas por API aunque no sea una columna del CSV, y que la columna `price` del CSV se llama `current_price` en la API.
* `stock` se llama `stock_on_hand` en la API.
* Campos opcionales solo de la API: `store_name`, `country_code`.

> [!WARNING]
>
> Los atributos adicionales como columnas extra solo se admiten en cargas CSV / XLSX. La API JSON rechaza los campos desconocidos: las cargas que contengan campos fuera del esquema no superan la validación.

***

## Lógica de interpretación de precios

Retailgrid aplica la siguiente lógica:

* Si existe `regular_price` y `price` \< `regular_price` → el producto se considera en promoción
* El margen se calcula como:

  ```
  Margin = price - unit_cost
  Margin % = (price - unit_cost) / price
  ```
* Si se proporciona `tax_rate`, se admiten cálculos brutos/netos

***

## Flexibilidad de tienda / mercado / canal

`store_id` puede representar:

* Tienda física
* País
* Almacén
* Tienda online
* Marketplace (Amazon, Zalando, etc.)
* Canal B2B frente a B2C

Retailgrid lo trata como una **dimensión de ubicación**.

***

## Gestión de monedas

Si varias tiendas usan monedas distintas:

* La moneda debe indicarse
* Deben configurarse las reglas de conversión de divisas

Recomendación:\
Mantén el precio y el costo en la misma moneda dentro de cada fila.

***

## Gestión del tiempo

Este conjunto de datos suele ser una **instantánea actual**, no una serie temporal.

Si se proporciona `price_effective_date`:

* Se hacen posibles las simulaciones de precios futuros
* Se pueden modelar cambios de precio programados

***

## Requisitos de formato de datos

Formatos admitidos:

* CSV (recomendado)
* XLSX

Codificación:

* UTF-8
* Punto (.) como separador decimal

Reglas:

* Una fila = un producto × una tienda
* No dupliques combinaciones producto-tienda idénticas
* Usa un formato de store\_id consistente

***

## Reglas de validación

La carga fallará si:

* Falta `item_id`
* Falta `store_id`
* Falta `price` o no es numérico
* Falla el emparejamiento con el conjunto de datos Products

***

## Fila de ejemplo

| item\_id | store\_id | price | unit\_cost | status | stock | regular\_price | tax\_rate | currency | price\_effective\_date |
| :- | :- | :- | :- | :- | :- | :- | :- | :- | :- |
| SKU-1001 | FI-HELSINKI | 119.99 | 75 | active | 42 | 129.99 | 24 | EUR | 2026-02-01 |

***

## Cómo usa Retailgrid los datos a nivel de tienda

Este conjunto de datos alimenta:

### Análisis de margen por tienda

* Rentabilidad a nivel de tienda
* Detección de fugas de margen

### Optimización de precios local

* Precios dinámicos por tienda
* Precios basados en el mercado

### Estrategia de surtido

* Disponibilidad específica por tienda
* Decisiones de precio basadas en el stock

### Estrategia de promociones

* Activación de promociones locales
* Comparativa de descuentos por región

***

## Recomendaciones avanzadas

Para obtener los mejores resultados:

* Proporciona siempre `unit_cost` para la optimización de margen
* Mantén los identificadores de tienda consistentes
* Proporciona el stock para las señales de reposición impulsadas por IA
* Incluye tax\_rate para operaciones en varios países

***

## Relacionado

* [Gestionar tiendas](https://docs.retailgrid.io/es/stores/manage-stores.md)
* [Vistas de Grid de producto y SKU-Store](https://docs.retailgrid.io/es/grids/sku-store-view.md)
* [Conjuntos de datos](https://docs.retailgrid.io/es/data-requirements/datasets.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.