---
name: shopify-corregir-direccion
description: "Cambia la dirección de envío de un pedido que todavía no se ha preparado para el envío. Úsala cuando un cliente te avise de un error en su dirección (calle, ciudad o código postal) antes de que el pedido salga."
---

## Propósito
Corrige la dirección de envío de un pedido sin preparar, sin tener que entrar al admin de Shopify. Sirve cuando el cliente manda una corrección después de hacer el pedido, por ejemplo un error de digitación en la calle o un código postal equivocado. Reemplaza la edición manual de la dirección en el admin de Shopify y aplica el cambio directamente con la Admin API. La actualización debe hacerse antes de preparar el pedido; esta skill se detiene con un error si el pedido ya está preparado total o parcialmente. Una vez que empieza la preparación del pedido, esta skill ya no puede actualizar el registro del pedido en Shopify.

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

## 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 las mutaciones |
| order_id | string | sí | — | GID del pedido (p. ej., `gid://shopify/Order/12345`) |
| new_address | object | sí | — | Nueva dirección de envío: `address1`, `address2` (opcional), `city`, `province`, `country`, `zip`, `phone` (opcional), `first_name`, `last_name` |

## Seguridad

> ⚠️ El paso 2 ejecuta `orderUpdate`, que cambia de inmediato la dirección de envío registrada. Si el pedido ya está en manos de un operador logístico, avísale por aparte: esta skill solo actualiza el registro en Shopify. La skill se detiene con un error si `displayFulfillmentStatus` no es `UNFULFILLED`. No se puede cambiar la dirección de pedidos preparados total o parcialmente.

## Pasos

1. **OPERACIÓN:** `order` — consulta
   **Entradas:** `id: <order_id>`
   **Resultado esperado:** Nombre del pedido, `displayFulfillmentStatus` y `shippingAddress` actual; si `displayFulfillmentStatus != "UNFULFILLED"`, detente con el mensaje: «No se puede actualizar la dirección: el pedido ya fue preparado.»

2. **OPERACIÓN:** `orderUpdate` — mutación
   **Entradas:** `input.id: <order_id>`, `input.shippingAddress: <objeto new_address>`
   **Resultado esperado:** `shippingAddress` actualizada en el pedido, `userErrors`

## Operaciones GraphQL

```graphql
# order:query — validada con api_version 2025-01
query OrderForAddressCheck($id: ID!) {
  order(id: $id) {
    id
    name
    displayFulfillmentStatus
    shippingAddress {
      address1
      address2
      city
      province
      country
      zip
      phone
      firstName
      lastName
    }
  }
}
```

```graphql
# orderUpdate:mutation — validada con api_version 2025-01
mutation OrderUpdate($input: OrderInput!) {
  orderUpdate(input: $input) {
    order {
      id
      shippingAddress {
        address1
        address2
        city
        province
        country
        zip
        phone
      }
    }
    userErrors {
      field
      message
    }
  }
}
```

## Seguimiento de la sesión

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

**Al iniciar**, muestra:
```
╔══════════════════════════════════════════════╗
║  SKILL: shopify-corregir-direccion           ║
║  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>
```

Si `dry_run: true`, antepón `[SIMULACIÓN]` a cada paso de mutación y no lo ejecutes.

**Al terminar**, muestra:

Para `format: human` (predeterminado):
```
══════════════════════════════════════════════
RESUMEN DEL RESULTADO
  Pedido:                 <nombre>
  Dirección actualizada:  sí
  Errores:                0
  Archivo:                ninguno
══════════════════════════════════════════════
```

Para `format: json`, muestra:
```json
{
  "skill": "shopify-corregir-direccion",
  "store": "<dominio>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": false,
  "steps": [
    { "step": 1, "operation": "OrderForAddressCheck", "type": "query", "params_summary": "order_id: <id>", "result_summary": "UNFULFILLED, dirección confirmada", "skipped": false },
    { "step": 2, "operation": "OrderUpdate", "type": "mutation", "params_summary": "order_id: <id>, new_address: <resumen>", "result_summary": "dirección actualizada", "skipped": false }
  ],
  "outcome": {
    "order_name": "<nombre>",
    "address_updated": true,
    "errors": 0,
    "output_file": null
  }
}
```

## Formato de salida
No genera CSV. La skill informa la dirección actualizada en el resumen final de la sesión. La nueva dirección aparece en la salida del paso `[2/2]`.

## Manejo de errores
| Error | Causa | Solución |
|-------|-------|----------|
| `displayFulfillmentStatus != UNFULFILLED` | El pedido ya está preparado total o parcialmente | No se puede cambiar la dirección; comunícate directamente con la transportadora |
| `userErrors` de orderUpdate | Campos de dirección inválidos (p. ej., código de país inválido) | Verifica el código ISO del país y el formato del departamento, provincia o estado |
| Pedido no encontrado | GID de pedido inválido | Usa la skill `shopify-buscar-pedido` para encontrar el ID correcto del pedido |

## Buenas prácticas
1. Ejecuta siempre primero con `dry_run: true`: el paso 1 muestra la dirección actual para que la confirmes antes de que el paso 2 aplique el cambio.
2. El país debe ir como código ISO 3166-1 alfa-2 (p. ej., `CO`, `MX`, `US`), no con el nombre completo.
3. Esta skill solo actualiza el registro del pedido en Shopify. Si trabajas con un operador logístico externo, actualiza también la dirección en su sistema.
4. Para el teléfono, usa el formato E.164 (p. ej., `+573001234567`).
5. Después de actualizar, usa la skill `shopify-buscar-pedido` para confirmar que el cambio de dirección quedó aplicado.
