# Migración T_Usuarios_Session → users (1A + 2A)

**No ejecutar contra producción desde el agente.** Estos scripts los lanzas tú, en ventana de mantenimiento, contra un dump de prueba primero.

## Decisiones

| Clave | Valor |
|---|---|
| Niveles | 1 `super_admin`, 2 `admin`, 3 `user`, 4 `colaborador`, 5 `prescriptor`, 6 `comercializadora` |
| IDs | Se conservan los IDs de `T_Usuarios_Session` |
| Altas legacy | El CI ya no crea usuarios |

## Mapeo de IDs actuales de Laravel

| users.id hoy | email | id final |
|---|---|---|
| 14 | mastervictor2156@gmail.com | **1** |
| 11 | oscar@enerspain.es | **6** |
| 12 | alberto@enerspain.es | **7** |
| 13 | jorge@enerspain.es | **8** |
| 10 | admineneon@eneon.es (no existe en legacy) | **101** |
| 100 | admineneon2@eneon.es (tenant 2) | 100 (sin cambio) |

Los 15 usuarios legacy que faltan se insertan con su `id` original (9–14, 33–41).

## Heurística `created_by` / `updated_by`

Las tablas `T_*` históricas ya guardan IDs legacy. No se tocan filas anteriores a la alta Laravel del ID colisionante.

| Valor | Si la fecha de la fila es ≥ | Nuevo valor | Motivo |
|---|---|---|---|
| 10 | 2025-04-23 18:59:01 | 101 | `admineneon` |
| 11 | 2026-02-18 15:43:25 | 6 | Oscar (Laravel 11) |
| 12 | 2026-02-18 15:44:05 | 7 | Alberto (Laravel 12 ≠ Carlos legacy 12) |
| 13 | 2026-02-18 15:45:12 | 8 | Jorge (Laravel 13 ≠ María Sonia legacy 13) |
| 14 | 2026-04-16 12:43:31 | 1 | Víctor (Laravel 14 ≠ Audax legacy 14) |

Tablas nativas Laravel (`sessions`, `process_histories`, `integracion_eventos`, `error_logs`, `personal_access_tokens`) se remapean siempre.

Tablas CI con `huser` (`T_MenuUsers`, `tblauditorias`, `T_Session`, …) **no** se remapean: ya apuntan a `T_Usuarios_Session.id`.

## Contraseñas

Los 6 usuarios Laravel conservan su bcrypt actual.

Los insertados quedan con un hash placeholder. Tras el SQL hay que correr `02_hash_passwords.php` en el servidor: lee `contrasena_sin_cifrar` y escribe bcrypt. El script **no** imprime ni guarda el plaintext.

`MD5` de `contrasena` no es usable por Laravel.

## Orden de ejecución

1. Dump completo (rollback real).
2. `00_precheck.sql` — si falla, no sigas.
3. `01_migrate.sql` — una transacción de datos; el ALTER de enum hace commit implícito antes.
4. `php database/scripts/user-migration-legacy/02_hash_passwords.php`
5. Releer `00_precheck.sql` / consultas de `01` (bloque VERIFY).
6. Si hay que deshacer: restaurar el dump. `03_rollback.sql` solo recupera `users` y las 4 tablas Laravel desde `*_migbak_*`, no las filas `T_*` ya reescritas.

## `bloqueado`

Todos los legacy tienen `bloqueado = 1` y son cuentas reales. Se migra `is_active = 1`.
