💎 ¿Qué tenemos?
17 años de práctica médica (mayo 2008 → febrero 2026), un archivo de 28 MB, 27 cuartos con datos.
📖 La metáfora que vamos a usar
La base de datos es como una casa. Cada tabla es un cuarto. En cada cuarto hay muchas cosas guardadas (las filas) y cada cosa tiene varias etiquetas (las columnas). Las puertas entre cuartos son los joins: cómo se conectan los datos. Hay dos casas: la Casa Vieja del Dr. Arteaga (sistema PowerBuilder + SQL Anywhere 5.0 de 1996) y la Casa Nueva CIMA (Cloudflare D1, 2026). Hay que mudar todo de una a la otra.
📦 Lo que destapamos
- ✅ Identificamos el formato: SQL Anywhere 5.0 (Watcom 1994), no encriptada
- ✅ Encontramos el motor original en
F:\proyecto hcc223\sqlany50\— coincidencia exacta de versión - ✅ Default password
DBA/SQLfuncionó al primer intento - ✅ Extraídas las 27 tablas con datos → 86,259 filas
- ✅ SQL completo generado:
02-export/otorrino-arteaga.sql(15 MB) - ✅ Base SQLite navegable:
02-export/otorrino-arteaga.sqlite(14.6 MB) - 📌 La DB es de hace ~1.5 meses → faltan ~40 pacientes recientes (a sincronizar después)
🏘️ Las Dos Casas
Vista de planta de cada casa. Cada cuarto tiene tamaño proporcional a cuántas cosas guarda. Pasa el mouse para ver el nombre.
🏚️ Casa Vieja — Sistema del Dr. Arteaga
SQL Anywhere 5.0 · 27 cuartos con datos · 86,259 cosas guardadas
🏢 Casa Nueva — CIMA
Cloudflare D1 · 24+ cuartos · cuartos vacíos esperando a mudarse
🚪 Cuarto por Cuarto
Cada tarjeta es una tabla del sistema viejo. Haz click para ver todas sus columnas, una muestra real, y a qué tabla CIMA mapea.
🌉 Los Puentes — Mapeo Casa Vieja → Casa Nueva
Cada fila es una tabla del Dr. Arteaga y a qué tabla(s) de CIMA va. El color de la flecha dice qué tan fácil es el traslado.
⚖️ FODA — ¿Vale la pena agrandar CIMA?
Análisis estratégico de mudarse ahora (CIMA solo tiene <20 pacientes — momento ideal para cambios).
💪 Fortalezas
Lo que YA tenemos a favor
- 17 años de data real validada — no es un dataset hipotético, son 7,804 pacientes reales con 16,494 consultas reales
- CIMA aún es joven (<20 pacientes) — costo de cambios al schema es bajo, no hay deuda técnica acumulada
- El schema CIMA cubre 95% del modelo viejo sin cambios
- Cero encriptación en el .db viejo — exportación limpia
- Texto libre en sub-tablas clínicas de CIMA (consultation_*) → migración 1:1 del texto plano del viejo
- Modelo ORL específico (s001) en CIMA ya está alineado con la especialidad del Dr.
🚀 Oportunidades
Lo que ganamos haciéndolo
- Validar CIMA con un caso real complejo — un consultorio activo de 17 años descubre todos los edge cases
- Tener un primer cliente "Plan Piloto" con data masiva → testimonio + caso de uso
- Enriquecer catálogos CIMA con 1,291 dx + 1,067 motivos + 823 medicamentos validados por un especialista activo
- Activar features financieras con 15,246 cobros reales históricos → reportes con peso
- Banco de docs reales (4,380 informes) para diseñar mejor plantillas y export PDF
- Definir un workflow de migración estándar que sirva para futuros clientes con sistemas viejos
⚠️ Debilidades
Limitaciones que tenemos que aceptar
- Examen de oídos sin lateralidad — el sistema viejo no separa oído derecho/izquierdo. Hay que mapear texto único a las dos regiones de CIMA
- Encoding cp1252 con caracteres torcidos —
sueñño,D'SOUSAaparecen comosueòo,DµSOUSA. Limpiables con regex pero hay edge cases - 3 fechas de nacimiento basura (años 3016, 9009, 9730) — typos viejos, limpiables a null
- 132 doctores referentes sin tabla en CIMA — hay que crear
referring_doctortable - Sin acceso a las imágenes endoscópicas (en disco del PC viejo del Dr., no en el .db)
- Faltan los ~40 pacientes del último mes y medio (DB de hace 1.5 meses)
🔥 Amenazas
Riesgos a vigilar durante la migración
- Volumen 4000× mayor que CIMA actual — 7,804 pacientes vs <20. Performance D1 en queries cross-table puede degradarse
- R2 storage costs si generamos 4,380 PDFs + imágenes endoscópicas → calcular antes
- 4 cambios al schema CIMA tocan código del Worker y la SPA — riesgo de regresión si no se hace ordenado
- Rollback complejo si algo sale mal con 86,259 filas insertadas → backup obligatorio del D1 antes
- Dependencia del PC viejo si necesitamos re-extraer (la DB no está en cloud, sólo USB)
- Curva de aprendizaje del Dr. al pasar a un nuevo sistema con su data familiar — UX tiene que sentirse natural
📊 Veredicto del FODA
Fortalezas + Oportunidades dominan claramente. Las Debilidades son técnicas y resolubles. Las Amenazas son operacionales (mitigables con backups, fases, y verificación).
Recomendación FODA: sí extender CIMA. El momento es óptimo (poco tráfico real) y la ganancia (caso piloto validado + cliente real) supera el costo.
🛠️ Plan de Extensión CIMA
4 cambios mínimos al schema CIMA D1 para que toda la data del Dr. quepa sin perder nada. Son aditivos: no rompen nada existente.
1 Nueva tabla referring_doctor
El Dr. tiene 132 referentes con clínica, consultorio, teléfono, especialidad. Hoy CIMA solo guarda patient.referred_by como texto libre — pierde estructura.
CREATE TABLE referring_doctor (
id TEXT PRIMARY KEY, -- rd_NNNNNNNN
tenant_id TEXT NOT NULL,
firstname TEXT,
lastname TEXT,
institution TEXT, -- HCC, etc.
office TEXT, -- "PISO 4 CONS 410"
phone TEXT,
city TEXT,
specialty TEXT,
legacy_id TEXT, -- id en sistema viejo
notes TEXT,
created_at TEXT,
updated_at TEXT
);
ALTER TABLE patient ADD COLUMN referring_doctor_id TEXT;
2 Nueva región cavidad_oral en el modelo s001
El Dr. examina cavidad oral aparte de orofaringe (prótesis dentales, edéntula, etc.). Es estándar ORL. CIMA tiene 6 regiones: cara, oido_der, oido_izq, nariz, orofaringe, cuello. Agregamos una.
-- No requiere cambio de schema (region es un valor en columna existente).
-- Solo poblar el catálogo de chips:
INSERT INTO model_chip_category (id, model_id, section, code, name, order_num)
VALUES ('mc_s001_exam_cavoral', 's001', 'exam', 'cavidad_oral', 'Cavidad Oral', 6);
-- Y actualizar app/modules/consultation/exam.js para incluir la nueva pestaña.
3 Columnas legacy_id + legacy_source para trazabilidad
Para saber qué viene de dónde y poder rollback selectivo. Aplicar a las 3 tablas que reciben mucha data migrada.
ALTER TABLE patient ADD COLUMN legacy_source TEXT; -- 'otorrino_arteaga' ALTER TABLE patient ADD COLUMN legacy_id TEXT; -- id_paciente original ALTER TABLE consultation ADD COLUMN legacy_source TEXT; ALTER TABLE consultation ADD COLUMN legacy_id TEXT; -- "id_pac:N_consulta" ALTER TABLE planner ADD COLUMN legacy_source TEXT; ALTER TABLE planner ADD COLUMN legacy_id TEXT;
4 Poblar catálogos del tenant del Dr.
Las tablas ya existen en CIMA. Solo insertamos data del Dr. bajo su tenant_id para que use SUS catálogos al consultar.
-- model_chip ← motivos_consulta (1067 motivos) -- diagnosis ← diagnosticos (1291 dx) -- medication + medication_dosage ← vademecum (823 meds) -- study_type + study_option ← radiologias (85) + examenes (58) -- service ← motivo_factura (33) + intervension (5) -- Total filas a insertar en catálogos: ~3,400 -- Tamaño D1 esperado: insignificante (D1 free tier soporta 5GB)
✅ Tamaño total de los cambios
1 tabla nueva · 1 columna nueva en patient · 6 columnas legacy_* en 3 tablas · ~3,400 filas de catálogos
Ningún cambio rompe código existente. Todos son aditivos. Tiempo estimado de implementación: 1 sesión de 2-3 horas incluyendo testing.
🎯 Conclusión y Recomendación
Síntesis de todo el análisis. Para decidir cuándo, cómo y si proceder.
📋 Mi recomendación
Sí extender CIMA y migrar todo. La cobertura del schema actual es del 95%, los 4 cambios propuestos son aditivos (nada se rompe), y el momento es ideal (poca data viva en CIMA).
Orden propuesto:
- Backup D1 completo antes de tocar nada (5 min)
- Aplicar los 4 cambios al schema CIMA via wrangler d1 execute (30 min)
- Fase 1: Migrar 7,804 pacientes + 7,802 historias (30 min)
- Validar en la SPA con el Dr. — ver pacientes, abrir fichas (1 sesión con él)
- Fase 2: Cargar catálogos del tenant (motivos, dx, meds, estudios — 30 min)
- Fase 3: Migrar 15,246 citas + montos (45 min)
- Fase 4: Migrar 16,494 consultas a consultation_* (2-3 horas — el grande)
- Fase 5: Generar 4,380 PDFs de informes + subir a R2 (1-2 horas)
- Fase 6 (opcional): Si se accede al PC viejo, subir imágenes endoscópicas
- Sincronizar los ~40 pacientes faltantes del último mes y medio (manual o nuevo dump)
⏱️ Tiempo total estimado
~10h
divididas en 6 fases, con validación entre cada una.
💰 Costo Cloudflare extra
< $2/mes
7,804 pacientes + 4,380 PDFs cabe holgado en planes Paid existentes.
📉 Riesgo
BAJO
cambios aditivos, backup previo, fases con verificación. La data original sigue intacta en el .db.
🎬 Próximo paso sugerido
Cuando me digas "Adelante", ejecuto en orden:
- Crear el script de migración del schema CIMA (4 cambios) — primero genero el SQL, lo revisas, luego ejecuto contra D1 remoto.
- Verificar con consultas que el schema queda como esperamos.
- Ejecutar Fase 1 (pacientes) y parar para validar contigo en la SPA.
Mientras tanto la data del Dr. sigue en D:\AI\cima_recover\arteaga\ y CIMA producción no se toca.