# Guía: Migrar todo el ERP a MercadoLibre (incl. variantes talle/color)

Esta guía explica cómo migrar productos del ERP a MercadoLibre, incluyendo variantes (talle, color, etc.).

---

## 1. Requisitos previos

### 1.1 Configuración MercadoLibre
- **Ajustes → MercadoLibre**: Conectar con OAuth (Client ID + Secret).
- **Token activo**: Debe haber `access_token` válido.
- **Site**: MLC (Chile) por defecto.

### 1.2 Categorías MELI
Cada categoría del ERP debe tener asociada una categoría de MercadoLibre:

1. Ir a **Categorías de productos**.
2. Editar cada categoría.
3. En "Categoría MercadoLibre", buscar y seleccionar la categoría correcta (ej: `Música > Vinilos`, `Ropa y Accesorios > Poleras`).
4. Guardar.

Sin esto, MELI usará una categoría por defecto y puede rechazar publicaciones.

### 1.3 Guía de talles (productos con talles) — **automático**
Si vendés ropa, calzado o gorros con talles, el sistema **crea las guías automáticamente** vía API cuando publicás:

1. **Automático (recomendado)**: Al publicar un producto con variantes de talle, el sistema detecta el dominio (MLC-SNEAKERS, MLC-T_SHIRTS, MLC-PANTS, etc.), crea la guía en MELI si no existe y la guarda en `configuracion_adicional.size_grids`.

2. **Crear guías por adelantado** (opcional):
   ```bash
   php artisan meli:crear-guias-talles
   php artisan meli:crear-guias-talles --dominios=MLC-SNEAKERS,MLC-T_SHIRTS,MLC-PANTS
   php artisan meli:crear-guias-talles --todos
   ```

3. **Manual**: Crear guía en Seller Center y agregar en `configuracion_adicional`:
   ```json
   { "size_grid_id": "TU_ID_DE_GUIA", "listing_type_id": "bronze" }
   ```

---

## 2. Estructura de datos en el ERP

### 2.1 Productos con variantes
- **Producto padre**: `idPadre_producto` = null. Tiene nombre, descripción, categoría, imágenes.
- **Variantes**: registros en `productos` con `idPadre_producto` = ID del padre. Cada variante tiene precio, stock, SKU.

### 2.2 Atributos de variante (Color, Talle, etc.)
El ERP usa:

| Tabla | Uso |
|-------|-----|
| `variante_atributos` | Define los atributos (ej: Color, Talle). |
| `variante_atributo_valores` | Valores posibles (Negro, M, XL, etc.). |
| `producto_variante_atributos` | Qué atributos usa cada producto padre. |
| `producto_variante_valores` | Qué valor tiene cada variante (ej: variante 1 = Negro + M). |

### 2.3 Dos formas de tener los atributos

**A) Con `producto_variante_valores` poblado (recomendado)**  
Cada variante tiene filas en `producto_variante_valores` que vinculan `id_producto` (variante) con `id_variante_atributo_valor`.  
El sistema usa `valoresVariante` y mapea automáticamente a COLOR/SIZE de MELI.

**B) Sin `producto_variante_valores` (parsing del nombre)**  
Si la tabla está vacía (ej: productos importados de Shopify), el sistema usa el **nombre de la variante** con formato:

- `PADRE - Color / Talle`  → ej: `POLERA OVA - Negro / M`
- `PADRE - Color`          → ej: `POLERA OVA - Rojo`
- `PADRE - Talle`          → ej: `GORRO OVA - M`

**Recomendación**: Poblar `producto_variante_valores` para tener mapeo más preciso y evitar errores.

---

## 3. Cómo poblar los atributos de variante

Si tus variantes vienen de Shopify o tenés solo nombres sin estructura:

1. Ir a **Productos** → editar un producto con variantes.
2. En la sección de variantes, configurar:
   - **Opciones del producto**: Color, Talle (o los que uses).
   - **Valores por variante**: asignar Color y Talle a cada variante.

El frontend guarda en `producto_variante_atributos` y `producto_variante_valores`.

Si preferís hacerlo por SQL (ej: para muchos productos):

```sql
-- Ejemplo: variante id_producto=123 con Color Negro (id_valor=1) y Talle M (id_valor=2)
INSERT INTO producto_variante_valores (id_producto, id_variante_atributo, id_variante_atributo_valor)
VALUES (123, 1, 1), (123, 2, 2);
```

---

## 4. Mapeo de nombres a MELI

El sistema mapea:

| ERP | MELI |
|-----|------|
| Color, Talla, Calce, Size | COLOR |
| Talle, Tamaño | SIZE |

Los **valores** (Negro, M, XL) se buscan en los valores de MELI por nombre o similitud. Si no coinciden, la variante puede omitirse o fallar.

---

## 5. Comandos para migrar

### 5.0 Revisar qué productos están listos (antes de publicar)
```bash
php artisan meli:revisar-productos
# Con más detalle:
php artisan meli:revisar-productos --limit=50 --verbose
```

### 5.1 Probar con pocos productos
```bash
# 10 productos al azar (solo con categoría MELI preseleccionada)
php artisan meli:publicar-productos --sync --limit=10
```

### 5.2 Ver qué haría sin ejecutar (dry-run)
```bash
php artisan meli:publicar-productos --sync --limit=5 --dry-run
```

### 5.3 Migrar todos
```bash
php artisan meli:publicar-productos --sync
```

### 5.4 Solo activar productos ya publicados (pausados)
```bash
php artisan meli:publicar-productos --solo-activar
```

---

## 6. Checklist antes de migrar

- [ ] MercadoLibre conectado (token válido).
- [ ] Categorías ERP con `categoria_ml_id` asignado.
- [ ] Productos con variantes: `producto_variante_valores` poblado (o nombres con formato `PADRE - Color / Talle`).
- [ ] Productos con variantes de ropa/calzado: `size_grid_id` en config si la categoría lo exige.
- [ ] Imágenes: cada producto tiene al menos una imagen (en el padre o en variantes).
- [ ] Stock: productos con stock > 0 (MELI requiere stock para activar).

---

## 7. Errores frecuentes y soluciones

| Error | Causa | Solución |
|-------|-------|----------|
| `SIZE_GRID_ID is missing` | Categoría con talles exige guía de talles | Crear guía en MELI y agregar `size_grid_id` en config |
| `AGE_GROUP to be added` | Ropa/calzado sin edad | Ya resuelto (Adultos por defecto) |
| `MUSIC_ARTIST_NAME required` | CD/Vinilo sin artista/álbum | El nombre debe permitir extraer artista y álbum (ej: `ARTIST - ALBUM`) |
| `Attribute [SIZE] required` | Variante sin talle mapeado | Revisar `producto_variante_valores` o formato del nombre |
| `sin combinations` | Variante sin Color/Talle mapeable | Revisar que los valores existan en MELI (ej: "Negro", "M") |
| `Item has pictures download pending` | Imágenes aún procesándose | Esperar unos minutos y reintentar |
| `Is not possible to activate without stock` | Stock = 0 | Cargar stock en producto_sucursal |

---

## 8. Flujo de datos

```
ERP (productos)                    MercadoLibre
─────────────────────────────────────────────────────────────────
Producto padre + variantes   →    Una publicación con variations[]
  - nombre, precio, imágenes       - attribute_combinations (COLOR, SIZE)
  - producto_variante_valores      - price, available_quantity por variante
  - stock por sucursal             - picture_ids
  - categoria_ml_id                - category_id
```

---

## 9. Resumen rápido

1. **Configurar MELI**: conexión, token, categorías.
2. **Revisar variantes**: que tengan Color/Talle en `producto_variante_valores` o en el nombre.
3. **Probar**: `php artisan meli:publicar-productos --sync --limit=10`.
4. **Revisar logs**: `storage/logs/laravel.log` si hay errores.
5. **Migrar todo**: `php artisan meli:publicar-productos --sync`.
