📌 Actual en web
🎯 Propuesto
Movimientos propuestos
| Producto | Pos actual | Pos nueva | Δ | Uds 90d | Stock | Impacto | Motivo del movimiento |
|---|
| Producto | Pos actual | Pos nueva | Δ | Uds 90d | Stock | Impacto | Motivo del movimiento |
|---|
El dashboard analiza cada producto del catálogo, le asigna una acción y propone movimientos para que la grilla rinda más. Hay reglas compartidas entre Pampling y Wituka, pero también diferencias importantes según la fuente de datos disponible. Las marcas Pampling Wituka indican a qué tienda aplica cada bloque.
Cada producto puede tener una de estas etiquetas según su situación. La letra que ves en el badge de la card y en la columna "Tag" de la tabla de Movimientos viene de aquí.
| Letra | Significado | Aplica a |
|---|---|---|
| N · Novedad | Pampling: producto a 9,99 € hoy (xpresstee activo). Wituka: 2 primeras pos de la colección Novedades. Se queda fija, no se mueve. | Ambas |
| S · Rotura | Stock crítico (cubre menos del 50 % de la demanda). S total (health = 0): al final del grid. S crítico (0 < health < 0.5): a pág 3+. | Ambas Pampling solo detecta rotura total; Wituka detecta también rotura por talla (ver 3.b). |
| W · Stock parcial | Faltan tallas pero no las que mueven la mayoría de ventas (cobertura 50-85 %). Solo se etiqueta como aviso, no se mueve. | Solo Wituka Pampling no tiene desglose por talla en este pipeline. |
| A · Bajar | Está en pág 1-2 (pos 10-95) pero su score está por debajo del P30 del catálogo. Cede el slot premium. | Ambas |
| B · Subir | Está en pág 3+ y su score supera el P85 del catálogo. Best-seller escondido: candidato a entrar en pág 1-2. | Ambas |
| T · Bestseller actual | Ya está en la colección manual de bestsellers (Top8 en Pampling, BEST SELLERS 2026 en Wituka) y vendiendo bien. Mantener. | Ambas (pestaña Bestsellers) |
| P · Propuesto + | NO está en la colección de bestsellers pero vende por encima de la media. Añadir. | Ambas (pestaña Bestsellers) |
| D · Decae − | Está en la colección de bestsellers pero su score cae por debajo de la media del catálogo. Quitar. | Solo Wituka (pestaña Bestsellers Wituka) |
| O · Top en rotura | Vende por encima de la media pero está en rotura grave. NO se propone hoy — sublista para revisar al reponer. | Solo Wituka (pestaña Bestsellers Wituka) |
| R · Novedad (resto) | Producto del listado de novedades que no entra en H ni en N. Se ordena por velocidad/fecha igual que H. | Ambas (pestañas Novedades) |
| 🔥 H · Top velocidad | Las 10 novedades con mayor velocidad uds/día (ventana móvil 30 d). Las que más fuerte están entrando ahora mismo. | Ambas (pestañas Novedades) |
| Pampling | Wituka | |
|---|---|---|
| Origen del catálogo | BBDD MySQL Pampling (tabla app_productos). Orden = orden_web. |
Shopify Admin API. Orden = orden manual de la colección en el admin. |
| Origen de ventas (90 d) | BBDD app_compras_lineas (excluyendo estados anulados/devueltos). |
Shopify Orders REST · net_items_sold y net_sales (resta refunds, descuentos e IVA, igual que la pestaña de productos del dashboard Wituka). |
| Stock | Suma agregada de todas las tallas en app_productos_stock. No hay desglose por talla en este pipeline. |
Por talla, leyendo inventory_quantity de cada variante de Shopify. Permite calcular la salud de stock real. |
| Tráfico y conversión | GA4 item-level (views, ATC, compras, CVR %). Se usa solo para los percentiles, ya no clasifica. | No hay GA4 item-level para Wituka. Las decisiones se toman solo con ventas + stock. |
| Qué cuenta como Novedad (N) | Producto con precio_xpresstee = 9,99 € y ventana xpresstee activa hoy (xp_inicio ≤ hoy < xp_fin). La novedad puede estar en cualquier posición del grid. |
Las 2 primeras posiciones de la colección manual NEW IN 2026 = novedades semanales globales. Esos 2 productos se propagan a las pos 0-1 de cualquier colección donde estén presentes (All T-shirts, Regular Fit, etc.). Si una colección no contiene ninguna, sus pos 0-1 son las 2 primeras de su orden manual local. |
Mismo cálculo en las dos tiendas, solo cambia la fuente (BBDD Pampling vs Shopify Orders Wituka). El "score" que ves en los motivos no son las unidades vendidas a secas — es una versión ponderada para premiar productos en tendencia al alza:
Fórmula: score = (3·uds_30d + 2·uds_30_60 + 1·uds_60_90) / 2. La división por 2 deja el número en la misma escala que las unidades reales de 90 días — un producto con ventas planas tendrá un score ≈ a sus uds_90d. Uno que se dispara en las últimas 4 semanas tendrá un score más alto que sus uds_90d y será candidato a subir. Uno que se está apagando tendrá el score más bajo y bajará.
Se evalúa producto a producto y gana la primera regla que cumple (por orden de prioridad N → S → W → A → B):
health_score) Solo WitukaSolo aplica al catálogo Wituka, porque Shopify nos da el inventario por variante. En Pampling el pipeline actual solo lee el stock agregado, así que esta sub-regla no se activa allí.
Para cada producto miramos la distribución de ventas por talla en los últimos 90 días (datos reales del propio producto, no asumimos M y L como tallas core — depende de cada referencia).
peso_talla = uds_vendidas_talla_90d / uds_vendidas_totales_90d
health_score = Σ peso_talla (solo de las tallas con stock > 0)
Ejemplo: una camiseta con histórico S:5 % · M:30 % · L:40 % · XL:20 % · XXL:5 %.
Si el producto tiene menos de 5 uds vendidas en 90d (novedad reciente) caemos a peso uniforme entre todas las variantes. Si ninguna variante reporta inventario (datos desconocidos) el clasificador omite S/W y sigue con A/B normal.
En la tarjeta del producto ves un tooltip con el desglose por talla (stock + peso histórico) — las rotas aparecen tachadas. La tabla de Movimientos también lista qué tallas faltan.
Solo Pampling Los productos outlet=1 (Last Units) se excluyen por completo del grid Camisetas — tienen su propia pestaña y no influyen en percentiles ni en el cálculo de ventas totales.
Equivalente a Bestsellers (Top8) de Pampling, adaptada a Wituka. Compara la colección manual BEST SELLERS 2026 (/collections/best-sellers-1) con el universo unificado de las 5 colecciones principales y propone qué añadir y qué quitar.
Cálculo del corte: media de uds_score del universo unificado (productos de las 5 colecciones principales = camisetas + kids, sin sudaderas/gorras/calcetines). Solo así un producto compite con la categoría comparable.
Penalización de stock antes de cortar: score_efectivo = uds_score × multiplicador:
Así "Summer Vibes" con score 418 pero rotura total queda fuera de propuestos hasta que entre stock; aparece en la sublista O · Top en rotura para que merch lo recupere cuando reponga.
Cap duro de 100 propuestos para evitar listas inmanejables. Orden: actuales y propuestos por score efectivo DESC; decay y rotura al final.
Muestra los productos que deberían estar en la colección manual Top8 de la web (identificada por el tag Top8 en app_productos.tags). Sirve para detectar "bestsellers escondidos" que no están etiquetados.
Corte = media de Camisetas: la referencia es la media de uds_score de toda la categoría Camisetas (la principal). Un producto debe estar en Bestsellers si vende por encima de la media del catálogo completo. Proponemos añadir todos los productos sin Top8 que superen ese umbral. Se excluyen las novedades xpresstee (a 9,99 €) para no ensuciar la propuesta con productos temporales. Cap duro de 200 para evitar listas gigantes.
Orden del grid: Actual = orden_web de BBDD. Propuesto = score DESC con candidatos intercalados. La tabla de Movimientos muestra los productos que cambiarían de sitio.
Productos con el tag novedades en app_productos.tags — la colección manual del equipo de merchandising. El orden potencia las novedades que mejor están tirando según cuándo se activaron.
precio_xpresstee = 9,99 con ventana activa hoy. Misma regla que Camisetas: van primero manteniendo su orden_web relativo (intocable).Cálculo de la velocidad (uds/día con ventana móvil 30d):
portada_inicio / días activa. Aproximamos las uds con una fracción proporcional de uds_30d.uds_30d / 30. Usamos solo el ritmo de las últimas 4 semanas, no el histórico completo — así una novedad que funcionó al principio pero ahora está muerta no aparece falsamente alta.Ejemplo: una novedad activada hace 5 días con 35 uds (7,0/día) va por encima de otra activada hace 60 días con 150 uds totales pero solo 50 en los últimos 30d (1,7/día). Premia el ritmo reciente, no el total histórico.
Orden propuesto: fijas 9,99 € primero → resto por velocidad DESC → empate por fecha activación más reciente → sin fecha al final. La tabla de Movimientos muestra las diferencias respecto al orden_web actual.
Universo: la colección manual NEW IN 2026 (/collections/novedades) filtrada a productos con published_at ≥ hoy − 90 d y status = active. La idea es ver "qué se ha lanzado en los últimos 3 meses y cómo está rindiendo". Los drafts y los publicados antes de la ventana se descartan.
Orden propuesto: fijas (N) primero → resto por severidad de stock ASC → velocidad uds/día DESC → fecha de publicación DESC. Los productos en rotura caen al final aunque vendan mucho.
Categoría libre: pueden entrar camisetas, sudaderas, kids… cualquier cosa que merch haya metido en NEW IN 2026.
Productos con outlet = 1 en la BBDD — la colección de liquidación. Se separan del grid principal de Camisetas porque sus ventas están infladas por el precio promocional y distorsionarían los percentiles del catálogo a precio normal.
Útil para decidir qué productos de outlet conviene destacar, cuáles tienen sobrestock extremo y cuáles están a punto de romper stock.