# Migración de panel.pandora.farm a Pandora CRM

## Estrategia

Mientras se construye el CRM, MySQL sigue cambiando. El dump usado en desarrollo es solamente una fotografía. La migración real se hace contra una fuente actualizada, idealmente directamente contra la base MySQL de `panel.pandora.farm` usando una cuenta de solo lectura.

## Configuración

En `.env`:

```env
LEGACY_DB_HOST=localhost
LEGACY_DB_PORT=3306
LEGACY_DB_DATABASE=pandgkzr_pandora
LEGACY_DB_USERNAME=USUARIO_SOLO_LECTURA
LEGACY_DB_PASSWORD="PASSWORD"
LEGACY_ASSETS_PATH=/home/pandgkzr/panel.pandora.farm/public/assets
```

PHP debe tener `pdo_mysql` además de `pdo_pgsql`.

## Prueba sin escritura

```bash
php artisan crm:import-legacy --dry-run
```

Valida conexión, existencia de tablas, conteos, usuarios duplicados, órdenes sin cliente, items huérfanos y stock negativo. No modifica PostgreSQL.

## Importación

```bash
php artisan crm:import-legacy
```

Orden de transformación:

1. Usuarios.
2. Clientes y direcciones.
3. Catálogo, variantes, servicios y combos.
4. Saldos de inventario y movimientos de apertura.
5. Órdenes e items.
6. Registros de faena e hígados.
7. Leads WhatsApp.
8. Ajustes.
9. Assets legacy.

Al finalizar compara conteos relevantes y el total monetario de órdenes entre MySQL y PostgreSQL.

## Repetición durante desarrollo

Puede ejecutarse varias veces. Cada entidad importada tiene `legacy_id` y se actualiza en lugar de duplicarse. Esto permite volver a importar mañana o dentro de varias semanas con datos más recientes.

## Corte definitivo recomendado

1. Backup de MySQL y PostgreSQL.
2. Confirmar `crm:import-legacy --dry-run` sin errores.
3. Colocar temporalmente `panel.pandora.farm` en mantenimiento / solo lectura.
4. Usar una base CRM limpia para evitar registros que hubieran sido eliminados físicamente en el legacy durante el desarrollo.
5. Ejecutar migrations.
6. Ejecutar `crm:import-legacy`.
7. Revisar la tabla de verificación del comando y probar login, clientes, órdenes, catálogo e inventario.
8. Abrir `crm.pandora.farm` para operación.
9. Mantener el viejo panel sin escritura durante un período de contingencia antes de retirarlo.

Nunca ejecutar un reset sobre la base que ya sea la fuente productiva sin un backup verificado.
