---
name: shopify-elasticidad-precio
description: "Analiza cómo se relacionan el precio y la velocidad de venta de tus productos para encontrar cuáles son sensibles al precio y dónde hay margen para subirlo o bajarlo. Úsala antes de cambiar precios o de lanzar promociones. Solo lee, no cambia nada."
---

## Propósito
Analiza la relación entre precio y velocidad de venta en todo el catálogo para identificar qué productos son sensibles al precio y dónde podría haber puntos de precio óptimos. Compara productos de la misma categoría o del mismo proveedor en distintos rangos de precio, y examina cómo se desempeñan los productos con precio de comparación (en oferta) frente a los que están a precio completo. Solo lectura: no ejecuta mutaciones.

## Requisitos
- Sesión autenticada de Shopify CLI: `shopify store auth --store <tu-tienda>.myshopify.com --scopes read_orders,read_products`
- Las consultas se ejecutan con `shopify store execute`.
- Permisos (scopes) de API: `read_orders`, `read_products`

## Parámetros

| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|-----------|------|-------------|----------------|-------------|
| store | string | sí | — | Dominio de la tienda |
| days_back | integer | no | 90 | Ventana de días de ventas a analizar |
| group_by | string | no | product_type | Cómo agrupar la comparación: `product_type`, `vendor` o `collection` |
| format | string | no | human | Formato de salida: `human` o `json` |

## Seguridad

> ℹ️ Skill de solo lectura: no ejecuta mutaciones. Puedes ejecutarla en cualquier momento sin riesgo.

## Pasos

1. **OPERACIÓN:** `products` — consulta
   **Entradas:** `first: 250`, `status: ACTIVE`, selecciona `id`, `title`, `productType`, `vendor`, `variants { price, compareAtPrice, inventoryQuantity }` y el cursor de paginación
   **Resultado esperado:** Todos los productos activos con sus datos de precio

2. **OPERACIÓN:** `orders` — consulta
   **Entradas:** `query: "created_at:>='<NOW - days_back days>'"`, `first: 250`, selecciona `lineItems { variant { id, price }, quantity }` y el cursor de paginación
   **Resultado esperado:** Los datos de venta por variante para calcular la velocidad

3. Para cada producto o variante, calcula:
   - **Unidades vendidas por día** (velocidad)
   - **Ingresos por día**
   - **Precio actual**
   - **¿Tiene precio de comparación?** (indica si está en oferta)
   - **% de descuento de la oferta** = (compareAtPrice - price) / compareAtPrice × 100

4. Dentro de cada grupo (product_type o vendor):
   - Ordena por precio, de menor a mayor
   - Calcula la velocidad en cada rango de precio
   - Identifica la correlación entre precio y velocidad (negativa = sensible al precio, plana = poco sensible al precio)
   - Compara la velocidad de los productos en oferta con la de los que están a precio completo
   - Marca los productos en los que un cambio pequeño de precio podría cambiar mucho el volumen de ventas

5. **OPERACIÓN:** `productVariants` — consulta (enriquecimiento para las variantes con precio de comparación)
   **Entradas:** Los ID de las variantes que tienen compareAtPrice
   **Resultado esperado:** Contexto histórico de precios

## Operaciones GraphQL

```graphql
# products:query — validado con api_version 2025-01
query ActiveProductsWithPricing($after: String) {
  products(first: 250, after: $after, query: "status:active") {
    edges {
      node {
        id
        title
        productType
        vendor
        variants(first: 100) {
          edges {
            node {
              id
              price
              compareAtPrice
              sku
              inventoryQuantity
            }
          }
        }
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}
```

```graphql
# orders:query — validado con api_version 2025-01
query SalesVelocityData($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        createdAt
        lineItems(first: 50) {
          edges {
            node {
              variant { id price }
              quantity
            }
          }
        }
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}
```

```graphql
# productVariants:query — validado con api_version 2025-01
query VariantsOnSale($query: String, $after: String) {
  productVariants(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        price
        compareAtPrice
        product { id title productType vendor }
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}
```

## Seguimiento de la sesión

**Claude DEBE mostrar lo siguiente en cada etapa. Es obligatorio.**

**Al iniciar**, muestra:
```
╔═════════════════════════════════════════════════╗
║  SKILL: ¿Cómo reaccionan tus ventas al precio?  ║
║  Tienda: <dominio de la tienda>                 ║
║  Inicio: <AAAA-MM-DD HH:MM UTC>                 ║
╚═════════════════════════════════════════════════╝
```

**Después de cada paso**, muestra:
```
[N/TOTAL] <CONSULTA|MUTACIÓN>  <OperationName>
          → Parámetros: <resumen breve de las entradas clave>
          → Resultado: <cantidad o desenlace>
```

**Al terminar**, muestra:

Para `format: human` (predeterminado):
```
══════════════════════════════════════════════
ANÁLISIS DE ELASTICIDAD DE PRECIO  (<days_back> días)
  Productos analizados:            <n>
  Grupos de productos comparados:  <n>
  ─────────────────────────────
  SENSIBLES AL PRECIO (elasticidad alta):
    "<tipo de producto>" — la velocidad cae <pct>% por cada 10 <moneda> de aumento en el precio
    Mejor candidato: "<producto>" a <precio> — considera probar <precio más bajo>

  POCO SENSIBLES AL PRECIO (elasticidad baja):
    "<tipo de producto>" — velocidad estable en el rango de precios <mínimo>-<máximo>
    Mejor candidato: "<producto>" a <precio> — hay margen para subirlo

  EFECTIVIDAD DE LAS OFERTAS:
    Productos en oferta: <n>  Descuento promedio: <pct>%
    Aumento de velocidad por la oferta: +<pct>% frente a productos similares a precio completo

  Archivo: price_elasticity_<fecha>.csv
══════════════════════════════════════════════
```

## Formato de salida
Archivo CSV `price_elasticity_<AAAA-MM-DD>.csv` con las columnas:
`product_id`, `product_title`, `product_type`, `vendor`, `current_price`, `compare_at_price`, `daily_velocity`, `revenue_per_day`, `group_avg_velocity`, `price_rank_in_group`, `elasticity_indicator`, `recommendation`

## Manejo de errores
| Error | Causa | Solución |
|-------|-------|----------|
| `THROTTLED` | Se superó el límite de solicitudes de la API | Espera 2 segundos y reintenta hasta 3 veces |
| Grupos pequeños | Solo hay 1 o 2 productos de un tipo | Omite el grupo: no hay datos suficientes para comparar |
| Sin ventas | El producto no tuvo ventas en la ventana | Inclúyelo con velocity=0 en la comparación |

## Buenas prácticas
- Para que la comparación tenga sentido, se necesitan al menos 5 productos por grupo.
- Los productos poco sensibles al precio son candidatos para subirles el precio: pruébalo con `shopify-ajuste-masivo-precios`.
- Los productos sensibles al precio pueden beneficiarse de precios promocionales: pruébalo con `shopify-comparar-codigos-descuento`.
- Los productos en oferta que casi no aumentan su velocidad están desperdiciando margen: quítales el precio de comparación.
- Ejecútala cada trimestre para ver cómo cambia la sensibilidad al precio con las temporadas.
