# Guía de Migración — SKEEN Derma Experts **Versión:** 2.0 **Fecha:** 16 de julio de 2026 --- ## 1. Introducción Esta guía describe el proceso de migración de datos desde el sistema legacy de SKEEN (`https://sistema.skeenmx.app/`) hacia el nuevo sistema basado en Odoo 17. **Importante:** La migración requiere autorización documentada del cliente. No se ha realizado extracción masiva de datos sin permiso explícito. --- ## 2. Datos a Migrar | Entidad | Descripción | Prioridad | |---------|-------------|-----------| | Pacientes | Datos personales, contacto, historial médico | Alta | | Citas | Histórico de citas, fechas, servicios | Alta | | Servicios | Catálogo de tratamientos, precios, paquetes | Alta | | Ventas | Histórico de ventas, pagos, adeudos | Media | | Monedero | Puntos de fidelidad acumulados | Media | | Inventario | Productos y consumibles | Media | | Médicos | Personal de la clínica | Baja | --- ## 3. Formatos de Datos ### 3.1 CSV de Pacientes ```csv name,phone,email,birthdate,gender,blood_type,allergies,address,notes Juan Pérez,526641234567,juan@example.com,1990-01-15,male,O+,Penicilina,"Calle 123, Rosarito","Paciente frecuente" ``` **Campos:** - `name` (required): Nombre completo - `phone` (required): Teléfono (formato internacional sin +) - `email`: Email - `birthdate`: Fecha de nacimiento (YYYY-MM-DD) - `gender`: `male`, `female`, `other` - `blood_type`: Tipo de sangre - `allergies`: Alergias - `address`: Dirección - `notes`: Notas adicionales ### 3.2 CSV de Servicios ```csv name,code,category,price,duration_min,package_price,package_sessions,package_notes,description,service_group,color,is_favorite Consulta Dermatologica,CONS-DERM,consulta,800,30,0,0,,Evaluación completa,Consultas,#1abc9c,true Depilación Laser Full Body,LASER-FUL,tratamiento,2500,90,7000,3,Ahorro de $500,Depilación full body,Corporal,#e74c3c,false ``` **Campos:** - `name` (required): Nombre del servicio - `code` (required): Código único - `category`: `consulta`, `tratamiento`, `procedimiento`, `paquete` - `price` (required): Precio por sesión - `duration_min`: Duración en minutos - `package_price`: Precio del paquete (0 si no aplica) - `package_sessions`: Sesiones del paquete (0 si no aplica) - `package_notes`: Notas del paquete - `description`: Descripción - `service_group`: Grupo/categoría - `color`: Color hexadecimal - `is_favorite`: `true`/`false` ### 3.3 CSV de Inventario ```csv name,kind,sku,category,unit,qty,qty_optimal,qty_min,cost,expiry_date,notes Suero Vitamina C,producto,PRD-001,Skincare,pieza,24,30,5,320,2027-06-15,Suero antioxidante Guantes Estériles,consumible,CON-003,Instrumental,caja,8,15,3,95,,Caja de 100 unidades ``` **Campos:** - `name` (required): Nombre del item - `kind`: `producto` o `consumible` - `sku`: Código SKU - `category`: Categoría - `unit`: Unidad de medida - `qty`: Existencia actual - `qty_optimal`: Nivel óptimo - `qty_min`: Stock mínimo - `cost`: Costo unitario - `expiry_date`: Caducidad (YYYY-MM-DD) - `notes`: Notas ### 3.4 CSV de Citas ```csv patient_name,patient_phone,service_code,date,time,state,notes Juan Pérez,526641234567,CONS-DERM,2026-07-17,10:00,confirmed,Primera visita ``` ### 3.5 CSV de Ventas ```csv patient_phone,date,service_code,qty,price,payment_method,notes 526641234567,2026-07-17,CONS-DERM,1,800,cash,Pago en efectivo ``` --- ## 4. Proceso de Migración ### 4.1 Preparación 1. **Obtener autorización:** Documento firmado por SKEEN autorizando la extracción. 2. **Exportar datos:** Del sistema legacy (CSV, SQL dump, o API). 3. **Limpiar datos:** Verificar formatos, eliminar duplicados. 4. **Backup:** Respaldar base de datos actual de Odoo. ### 4.2 Ejecución ```bash # 1. Colocar CSVs en el directorio de migración cd /root/migracion mkdir -p datos cp /ruta/a/csvs/* datos/ # 2. Ejecutar migración principal (pacientes, servicios, citas, ventas) python3 importar_a_odoo.py # 3. Importar servicios e inventario específicos python3 importar_servicios_inventario.py \ --servicios datos/servicios.csv \ --inventario datos/inventario.csv \ --purge-citas \ --purge-sql \ --generar-hermes # 4. Verificar datos importados python3 -c " import xmlrpc.client url='http://localhost:8069' common=xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common') uid=common.authenticate('skeen_odoo','admin','skeen_admin_2026',{}) models=xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object') for m in ['res.partner','skeen.servicio','skeen.cita','skeen.inventario.item']: n=models.execute_kw('skeen_odoo',uid,'skeen_admin_2026',m,'search_count',[[]]) print(m,n) " ``` ### 4.3 Validación 1. **Conteo de registros:** Comparar totales origen vs destino. 2. **Muestra aleatoria:** Verificar 10-20 registros manualmente. 3. **Pruebas funcionales:** Agendar cita, consultar saldo, redimir puntos. 4. **Reporte de errores:** Documentar registros que fallaron. --- ## 5. Scripts de Migración ### 5.1 `importar_a_odoo.py` Script principal de migración. Importa: - Pacientes (res.partner) - Servicios (skeen.servicio) - Citas (skeen.cita) - Ventas (skeen.venta) - Pagos (skeen.pago) - Monederos (skeen.monedero) **Uso:** ```bash python3 importar_a_odoo.py ``` ### 5.2 `importar_servicios_inventario.py` Script especializado para servicios e inventario. **Uso:** ```bash python3 importar_servicios_inventario.py \ --servicios servicios.csv \ --inventario inventario.csv \ [--purge-citas] \ [--purge-sql] \ [--generar-hermes] ``` **Opciones:** - `--purge-citas`: Eliminar citas existentes antes de importar - `--purge-sql`: Usar TRUNCATE SQL para limpieza rápida - `--generar-hermes`: Generar catálogo JSON para skills de Hermes ### 5.3 `extraer_skeen.py` Script de extracción del sistema legacy. Requiere credenciales y autorización. **Nota:** Este script está disponible pero no se ha ejecutado por restricciones de autorización. --- ## 6. Limpieza de Datos Demo Antes de migrar datos reales, se recomienda limpiar datos demo: ```bash cd /root/migracion # Opción 1: Script de borrado python3 borrar_datos_demo.py # Opción 2: SQL directo (más rápido) python3 importar_servicios_inventario.py --purge-citas --purge-sql --servicios /dev/null --inventario /dev/null ``` --- ## 7. Sincronización Post-Migración Después de la migración, es necesario sincronizar con WACRM: ```bash # Desde el frontend o vía API curl -X POST http://localhost:8069/skeen/frontend/v1/wacrm/sync \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"sync_contacts":true,"sync_conversations":true,"sync_messages":true,"sync_deals":true}' ``` --- ## 8. Regeneración del Catálogo Hermes Después de importar servicios, regenerar el catálogo para Hermes: ```bash cd /root/migracion python3 importar_servicios_inventario.py --solo-hermes ``` Esto actualiza: - `/root/.hermes/skills/skeen-services.json` - `/root/skeen-roadmap-hermes/hermes/skills/skeen-services.json` --- ## 9. Problemas Comunes ### 9.1 Registros duplicados **Problema:** Al re-ejecutar la migración, se crean duplicados. **Solución:** Usar `--purge-citas --purge-sql` antes de importar. ### 9.2 Timeout en importación masiva **Problema:** Miles de registros tardan demasiado. **Solución:** Usar `--purge-sql` para limpieza rápida, y considerar dividir en lotes. ### 9.3 Campos faltantes en CSV **Problema:** Algunos CSVs no tienen todos los campos. **Solución:** Los scripts tienen valores por defecto. Revisar los warnings en la salida. ### 9.4 Teléfonos con formato incorrecto **Problema:** Números de teléfono con formato local. **Solución:** Normalizar a formato internacional sin `+` (ej. `526641234567`). --- ## 10. Checklist de Migración - [ ] Autorización documentada del cliente - [ ] Exportación de datos del sistema legacy - [ ] Backup de base de datos Odoo actual - [ ] Limpieza de datos demo - [ ] Ejecución de scripts de migración - [ ] Validación de conteos - [ ] Validación de muestra aleatoria - [ ] Pruebas funcionales - [ ] Sincronización WACRM - [ ] Regeneración catálogo Hermes - [ ] Reporte de errores y resolución - [ ] Aprobación final del cliente --- ## 11. Contacto Para dudas sobre migración: - **Email:** ialcarazsalazar@consultoria-as.com - **Gitea:** https://git.consultoria-as.com/consultoria-as/SKEEN-Proyecto