# Migración del histórico legacy (citas + ventas/pagos) — 2026-10-10 Reextracción completa de la plataforma legacy (`sistema.skeenmx.app`, solo lectura) e importación idempotente a `skeen_odoo`. Alimenta el reporte **Concentrado** (recreación fiel al legacy: una fila por venta, desglose por método de pago × moneda). ## Datasets extraídos (origen: `/root/migracion/extraccion/concentrado/`) | Archivo | Contenido | |---|---| | `citas_full.csv` | 57,030 citas 2022-11-07 → 2026-10-10, con `status` real del legacy (done 21,369 · cancelled 16,546 · pending 11,622 · confirmed 4,274 · no_show 3,219). Reanudable (`citas_full.progress`). | | `concentrado_full.csv` | 29,467 filas = 48 meses del reporte concentrado legacy (Excel mensual en `concentrado_mensual/`), verificado al centavo vs el HTML del legacy. | | `ventas_full.json` / `ventas_full.csv` | 19,278 ventas únicas con `expedientes_id` (join a pacientes vía `res.partner.legacy_id`) y desglose de pagos. | Scripts: `x_full_citas.py`, `x_full_ventas.py`, `x_full_concentrado.py` (extracción, reusan `extraer_skeen.login()`; correr con `/root/odoo-venv/bin/python`). ## Importación `importar_concentrado_full.py` — idempotente (upsert por `legacy_id`; re-ejecutable): ```bash /root/odoo-venv/bin/python /root/migracion/importar_concentrado_full.py --db skeen_odoo --permitir-produccion ``` Resultado en producción (2026-10-10): - Citas: 39,565 `legacy_id` retroados, 39,564 actualizadas con estado real, 9,009 creadas, 8,456 filas basura omitidas (NO CITAR / teléfonos inválidos). 7,351 doctores fantasma numéricos anulados; sin resolver (doctor NULL): id 34–39, 44, 51 (~8,350 citas históricas). - Ventas: 24,497 creadas (96.8% de folios con monto), 26,983 pagos. Cuadra **al centavo por mes, método y moneda** contra el legacy (48/48 meses). - Omitidos: 799 folios ($1.29M, 2.5% del dinero) cuyos pacientes (`expedientes_id`) nunca se migraron a Odoo; 139 filas todo-$0 (sesiones de paquete). - Las 20,127 ventas del pipeline de julio-2026 se eliminaron: eran duplicadas del mismo histórico, sin pagos y con montos corruptos (p. ej. cantidad 126 × $12,600). ## Requiere - Columna `legacy_id` en `skeen_cita` y `skeen_venta` (agregada 2026-10-10, v1.0.1). - Métodos de pago `saldo_favor` y `points` en `skeen.pago` (v1.0.2). - Backups previos en `/root/backups/skeen_odoo_pre_import_prod_20261010_100903.dump` (y `skeen_preimport_20261010_095311.dump`).