Qué lleva cada fila
Esta página es el detalle campo por campo, pensada para el equipo técnico. Si usted va a armar las planillas a mano, con Qué le pedimos y Cómo enviarlo ya tiene todo lo que necesita.
Hay dos envíos distintos, cada uno con su archivo: ventas y stock. El grano es diario: cada fila de ventas corresponde a un día cerrado.
Lo que cambia según por dónde envíe:
| Por archivo | Por API | |
|---|---|---|
| Ventas | Un envío por semana, con los siete días cerrados abiertos por día | Un envío por día, con un solo date |
| Stock | Sólo la foto del domingo, en la misma entrega semanal y en su propio archivo | Una foto por día, con un solo as_of |
| Grano de ventas | Día × banner × tienda × SKU (modelo-color-talle) | Día × banner × tienda × SKU (modelo-color-talle) |
| Grano de stock | Domingo × depósito × SKU (modelo-color-talle) | Día × depósito × SKU (modelo-color-talle) |
Los campos son los mismos por los dos caminos. Lo que cambia es cada cuánto se envía y cuántas fotos de stock se piden. Por API es un ciclo por día: cada día se envían la venta del día cerrado y la foto de stock de ese mismo cierre, así que date y as_of coinciden.
El inventario de la tienda se debe reflejar en un depósito que coincida en el nombre con la tienda. Un artículo puede tener stock sin haber vendido. Ese caso sólo aparece en el envío de stock.
Cómo se reconoce una fila
No hay identificadores. Las filas se reconocen por su contenido.
| Envío | Clave |
|---|---|
| Ventas | date + banner.name + point_of_sale.name + product.sku |
| Stock | as_of + warehouse.name + product.sku |
Reenviar la misma clave actualiza la fila.
Los nombres son la clave. Yupana Sport y YUPANA SPORT son dos banners distintos. Escríbalos siempre igual.
Campos del envío de ventas
| Campo | Obl. | Descripción |
|---|---|---|
date | Sí | El día al que corresponde la venta, en YYYY-MM-DD. Una fila por día |
banner | Sí | Marca comercial que vendió. Ver abajo |
point_of_sale | Sí | Local donde ocurrió la venta |
warehouse | No | Depósito desde el que se despachó |
product | Sí | Artículo vendido |
currency | Sí | ARS, USD o EUR |
quantity | Sí | Unidades vendidas, netas de devoluciones |
total_amount_at_sale_price_excl_vat | Sí | Lo que se cobró por esas unidades, sin IVA |
total_amount_at_list_price_excl_vat | Sí | Esas mismas unidades a precio de lista, sin IVA |
total_amount_at_cost_excl_vat | No | Esas mismas unidades a costo, sin IVA |
date es la fecha local del punto de venta en la que se cerró la operación. Para una venta de ecommerce, la de la orden, no la del despacho. Una venta de las 23:50 va al día que termina, no al siguiente. Suele ser la fecha del ticket.
Campos del envío de stock
| Campo | Obl. | Descripción |
|---|---|---|
as_of | Sí | Fecha de la foto. El domingo en el archivo; en la API, el día cerrado que se informa, el mismo que el date de las ventas de ese envío |
warehouse | Sí | Depósito |
product | Sí | Artículo |
on_hand | Sí | Unidades disponibles |
on_transit | No | Unidades pedidas y no recibidas |
unit_list_price_excl_vat | No | Precio de lista unitario a esa fecha, sin IVA |
unit_cost_excl_vat | No | Costo unitario a esa fecha, sin IVA |
banner | No | Vacío si el depósito abastece a varios banners |
banner
La marca comercial que vende. Un grupo opera varias y cada una se reporta por separado.
| Campo | Obl. | Ejemplo |
|---|---|---|
name | Sí | Yupana Sport |
market_seller | No | yupanasport |
market_seller es el slug del ecommerce de ese banner en nuestro catálogo público. Sirve para comparar lo que vendió contra el precio al que lo publica.
El banner va en todas las filas de venta, igual que el punto de venta: son las dos dimensiones por las que se abre la venta.
point_of_sale y warehouse
Son cosas distintas. El punto de venta es dónde se hizo la operación; el depósito es de dónde salió la mercadería. En un local coinciden; en una venta de ecommerce no.
point_of_sale | Obl. | warehouse | Obl. | |
|---|---|---|---|---|
name | Sí | name | Sí | |
type (physical | ecommerce) | Sí | is_central | Sí | |
address | No | address | No | |
is_active | No | |||
closed_at | No |
is_central separa el stock que está en una tienda del que está en un depósito que abastece a varias.
| Valor | Qué es |
|---|---|
false | El stock de un punto de venta: la trastienda de un local |
true | No es el stock de ninguna tienda, sino el de un depósito que abastece a varias |
Es una propiedad del depósito, no de la fila: el mismo warehouse_name tiene que llevar siempre el mismo valor en todos los envíos.
Si el depósito es la trastienda de un local, que el nombre lo diga: sin identificadores es la única forma de relacionarlos.
product
| Campo | Obl. | Ejemplo |
|---|---|---|
sku.model | Sí | FI310882 |
sku.variation | No | NEGRO |
sku.size | No | 42 |
sku.size_scale | No | AR, US, EU o UK |
sku.retail_number | No | MB-4471 |
brand | Sí | Fila |
name | No | Memory Speedchaser |
ean | No | 7791234567890 |
supplier_code | No | Código del proveedor |
model + variation identifican el producto; sumando size se llega al artículo físico.
Variación y talle pueden faltar los dos. Una mochila o una pelota se identifican sólo con el modelo, y ahí el sku es el modelo a secas. En ese caso retail_number suele ser lo único que separa un artículo de otro dentro del mismo modelo, así que mándelo si lo tiene.
retail_number es texto, no número. Puede llevar ceros a la izquierda, letras o guiones, y 007 no es lo mismo que 7.
brand es la marca del producto: Fila, Asics o Umbro. No confundir con banner, que es la marca del retailer.
Los importes
Dentro de un mismo día el mismo artículo se vende a precios distintos: promociones por medio de pago, una liquidación que arranca a media tarde, dos locales del mismo banner que no tienen el mismo cartel. Por eso no pedimos precio unitario, sino las mismas unidades valorizadas: a lo que cobró, a precio de lista y —si lo tiene— a costo.
descuento = 1 - (total_a_precio_de_venta / total_a_precio_de_lista)
margen = 1 - (total_a_costo / total_a_precio_de_venta)En el ejemplo de abajo, el Fila 42 del miércoles: 1 - 141308.54 / 163333.33 = 13% de descuento y 1 - 84000 / 141308.54 = 41% de margen.
El costo es el que calcula su sistema —promedio ponderado, última compra, lo que tenga—, sin IVA. Es opcional: sin él seguimos viendo el descuento, pero no si ese descuento se comió el margen.
Devoluciones
No se informan aparte: ya vienen descontadas. quantity y los importes van netos. Vendió 5, le devolvieron 2, informa 3.
Si en el día hubo devoluciones y ninguna venta de ese artículo, el neto queda negativo. Es válido. Lo que no vale es que la cantidad y los importes tengan signos distintos.
Ejemplo
Una semana con las tres marcas, abierta por día. El mismo Fila 42 aparece dos veces —el lunes y el miércoles, a precios distintos— y la última fila es una mochila: sin variación ni talle.
[
{
"date": "2026-08-03",
"banner": { "name": "Yupana Sport", "market_seller": "yupanasport" },
"point_of_sale": { "name": "Yupana Sport Palermo", "type": "physical" },
"warehouse": { "name": "Trastienda Palermo", "is_central": false },
"product": {
"sku": { "model": "FI310882", "variation": "NEGRO", "size": "42", "size_scale": "AR" },
"brand": "Fila",
"name": "Memory Speedchaser",
"ean": "7791234567890"
},
"currency": "ARS",
"quantity": 1,
"total_amount_at_sale_price_excl_vat": 81666.67,
"total_amount_at_list_price_excl_vat": 81666.67,
"total_amount_at_cost_excl_vat": 42000.00
},
{
"date": "2026-08-04",
"banner": { "name": "Yupana Sport", "market_seller": "yupanasport" },
"point_of_sale": { "name": "Yupana Sport Palermo", "type": "physical" },
"warehouse": { "name": "Trastienda Palermo", "is_central": false },
"product": {
"sku": { "model": "AS740119", "variation": "AZUL", "size": "41", "size_scale": "AR" },
"brand": "Asics",
"name": "Gel-Contend"
},
"currency": "ARS",
"quantity": 1,
"total_amount_at_sale_price_excl_vat": 103305.79,
"total_amount_at_list_price_excl_vat": 103305.79,
"total_amount_at_cost_excl_vat": 53000.00
},
{
"date": "2026-08-05",
"banner": { "name": "Yupana Sport", "market_seller": "yupanasport" },
"point_of_sale": { "name": "Yupana Sport Palermo", "type": "physical" },
"warehouse": { "name": "Trastienda Palermo", "is_central": false },
"product": {
"sku": { "model": "FI310882", "variation": "NEGRO", "size": "42", "size_scale": "AR" },
"brand": "Fila",
"name": "Memory Speedchaser",
"ean": "7791234567890"
},
"currency": "ARS",
"quantity": 2,
"total_amount_at_sale_price_excl_vat": 141308.54,
"total_amount_at_list_price_excl_vat": 163333.33,
"total_amount_at_cost_excl_vat": 84000.00
},
{
"date": "2026-08-07",
"banner": { "name": "Yupana Outlet", "market_seller": "yupanaoutlet" },
"point_of_sale": { "name": "Yupana Outlet Online", "type": "ecommerce" },
"warehouse": { "name": "Depósito Central", "is_central": true },
"product": {
"sku": { "model": "UM220145", "variation": "BLANCO", "size": "M" },
"brand": "Umbro",
"name": "Neo Training"
},
"currency": "ARS",
"quantity": 2,
"total_amount_at_sale_price_excl_vat": 90743.80,
"total_amount_at_list_price_excl_vat": 123800.00,
"total_amount_at_cost_excl_vat": 62000.00
},
{
"date": "2026-08-08",
"banner": { "name": "Yupana Outlet", "market_seller": "yupanaoutlet" },
"point_of_sale": { "name": "Yupana Outlet Online", "type": "ecommerce" },
"warehouse": { "name": "Depósito Central", "is_central": true },
"product": {
"sku": { "model": "UM905512", "retail_number": "MB-4471" },
"brand": "Umbro",
"name": "Mochila Neo 25L"
},
"currency": "ARS",
"quantity": 4,
"total_amount_at_sale_price_excl_vat": 148760.33,
"total_amount_at_list_price_excl_vat": 148760.33,
"total_amount_at_cost_excl_vat": 76000.00
}
]Y el stock del domingo de esa misma semana, que es el que va en el archivo:
[
{
"as_of": "2026-08-09",
"banner": { "name": "Yupana Sport" },
"warehouse": { "name": "Trastienda Palermo", "is_central": false },
"product": {
"sku": { "model": "FI310882", "variation": "NEGRO", "size": "42", "size_scale": "AR" },
"brand": "Fila"
},
"on_hand": 7,
"on_transit": 12,
"unit_list_price_excl_vat": 81666.67,
"unit_cost_excl_vat": 42000.00
},
{
"as_of": "2026-08-09",
"banner": { "name": "Yupana Sport" },
"warehouse": { "name": "Trastienda Palermo", "is_central": false },
"product": {
"sku": { "model": "FI310882", "variation": "NEGRO", "size": "44", "size_scale": "AR" },
"brand": "Fila"
},
"on_hand": 5,
"on_transit": 0,
"unit_list_price_excl_vat": 81666.67,
"unit_cost_excl_vat": 42000.00
},
{
"as_of": "2026-08-09",
"warehouse": { "name": "Depósito Central", "is_central": true },
"product": {
"sku": { "model": "UM220145", "variation": "BLANCO", "size": "M" },
"brand": "Umbro"
},
"on_hand": 44
}
]Qué dice: el Fila 42 vendió una unidad el lunes a precio lleno, con 49% de margen, y dos el miércoles con 13% de descuento, que le baja el margen al 41% — la misma semana agregada mostraría 9% de descuento y 43% de margen, sin decir cuándo cambió el precio. Del Fila 42 le quedan 7 en el local.
El jueves y el domingo no tienen ninguna fila: esos dos días no vendió nada de Dass. Que un artículo no aparezca un día en el que sí hay otras filas significa lo mismo: ese día no vendió.
El Fila 44 tiene 5 unidades y no vendió ninguna en toda la semana. El Asics vendió 1 el martes a precio lleno; el Umbro, 2 online el viernes con 27% de descuento, que le baja el margen al 32%, y quedan 44 en el centro de distribución, que no lleva banner porque abastece a los dos ni costo porque ahí no lo tenían; y la mochila vendió 4 el sábado a precio lleno, identificada sólo por modelo y número de artículo.