---
name: shopify-reabastecer-stock-bajo
description: "Busca todas las variantes con inventario controlado que están por debajo de un umbral de stock y exporta una lista de reabastecimiento agrupada por proveedor. Úsala cuando quieras saber qué pedirle a cada proveedor antes de quedarte sin existencias."
---

## Propósito
Consulta todas las variantes de producto con inventario controlado que están en un umbral de stock configurable o por debajo, y exporta un CSV de reabastecimiento agrupado por proveedor. Como trae las cantidades de inventario en vivo directamente de la Admin API de Shopify y ordena los resultados por nombre de proveedor, esta skill le entrega al equipo de compras una lista de pedidos lista para usar, sin exportar a mano desde la vista de Inventario del admin de Shopify.

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

## Parámetros

| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|-----------|------|-------------|----------------|-------------|
| store | string | sí | — | Dominio de la tienda (p. ej., tu-tienda.myshopify.com) |
| format | string | no | human | Formato de salida: `human` o `json` |
| dry_run | bool | no | false | Muestra las operaciones sin ejecutar mutaciones |
| threshold | integer | no | 10 | Se incluyen las variantes con esta cantidad o menos |
| location_id | string | no | — | GID de una ubicación específica para filtrar (opcional; si se omite, usa `inventoryQuantity` sumando todas las ubicaciones) |
| include_zero_stock | bool | no | true | Incluye las variantes con cantidad 0 |

## Pasos

1. **OPERACIÓN:** `productVariants` — consulta
   **Entradas:** `first: 250`, `query: "inventory_quantity:<= <threshold>"`, cursor de paginación
   **Resultado esperado:** Lista de variantes con inventoryQuantity, título del producto, proveedor y SKU; pagina hasta `hasNextPage: false`

## Operaciones GraphQL

```graphql
# productVariants:query — validada con api_version 2025-01
query LowInventoryVariants($first: Int!, $after: String, $query: String) {
  productVariants(first: $first, after: $after, query: $query) {
    edges {
      node {
        id
        title
        sku
        inventoryQuantity
        product {
          id
          title
          vendor
        }
        inventoryItem {
          id
          tracked
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
```

## Seguimiento de la sesión

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

**Al iniciar**, muestra:
```
╔══════════════════════════════════════════════╗
║  SKILL: shopify-reabastecer-stock-bajo       ║
║  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):
```
══════════════════════════════════════════════
RESUMEN DEL RESULTADO
  Variantes bajo el umbral:   <n>
  Productos únicos:           <n>
  Proveedores:                <n>
  Errores:                    0
  Archivo:                    restock_list_<fecha>.csv
══════════════════════════════════════════════
```

Para `format: json`, muestra:
```json
{
  "skill": "shopify-reabastecer-stock-bajo",
  "store": "<dominio>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": false,
  "steps": [
    { "step": 1, "operation": "LowInventoryVariants", "type": "query", "params_summary": "threshold <= 10, todas las ubicaciones", "result_summary": "<n> variantes", "skipped": false }
  ],
  "outcome": {
    "variants_below_threshold": 0,
    "unique_products": 0,
    "vendors": 0,
    "errors": 0,
    "output_file": "restock_list_<fecha>.csv"
  }
}
```

## Formato de salida
Archivo CSV `restock_list_<AAAA-MM-DD>.csv` agrupado por proveedor, ordenado por nombre del proveedor y luego por título del producto. Columnas: `vendor`, `product_title`, `variant_title`, `sku`, `current_stock`.

## Manejo de errores
| Error | Causa | Solución |
|-------|-------|----------|
| No se devuelven variantes | Todas las variantes están por encima del umbral o el inventario no se controla | Baja el umbral o verifica que `inventoryItem.tracked: true` |
| No se encuentra `location_id` | GID de ubicación inválido | Consulta los ID de ubicación válidos en el admin de Shopify |
| Límite de solicitudes (429) | Demasiadas solicitudes paginadas | Baja `first` a 100 y reintenta |

## Buenas prácticas
1. Ejecútala primero sin `location_id` para ver el stock bajo de toda la tienda; luego filtra por ubicación si manejas varias bodegas.
2. Solo las variantes con `inventoryItem.tracked: true` tienen cantidades de stock confiables; las variantes sin control de inventario siempre aparecen en 0.
3. El CSV de reabastecimiento viene ordenado por proveedor: compártelo tal cual con tu equipo de compras, sin reformatearlo.
4. Usa `include_zero_stock: false` para saltarte las variantes que ya están en pedido pendiente y concentrarte en los artículos a punto de agotarse.
5. Programa esta skill para que corra cada semana con cron y envía el CSV a tu flujo de compras.
