Ponemos una capa FHIR delante de los sistemas que ya operan —expediente, laboratorio, imágenes, sistemas heredados sin API— para que hablen el estándar sin ser reemplazados, con la conformidad verificada y la operación intacta.
Reemplazar el sistema no siempre es la respuesta. Dejarlo mudo, tampoco.
Los sistemas que sostienen la operación clínica rara vez se pueden apagar: tienen años de datos, procesos amarrados, contratos vigentes y usuarios que dependen de que funcionen mañana a las siete. Pero cada vez más se les pide participar en un intercambio para el que nunca fueron diseñados: exponer un resultado, notificar a una autoridad, alimentar una vista consolidada, conectarse a una red. Una capa FHIR resuelve esa tensión traduciendo entre lo que el sistema guarda y lo que el ecosistema exige, sin tocar su base de datos ni su operación. Bien diseñada, compra años de margen. Mal diseñada, se convierte en el sistema heredado siguiente: otra caja que nadie se anima a tocar.
Punto de partida
De qué se parte, en concreto
«Sistemas heredados» no dice nada. Lo que define el trabajo es la forma real del origen y lo que uno encuentra al abrirlo.
Base de datos del expediente
Acceso directo al esquema relacional del sistema clínico, casi siempre en solo lectura y contra una réplica, para no competir con la operación.
Con qué se topa uno
Tablas sin documentar, campos reutilizados para dos cosas distintas, banderas de estado que solo entiende quien las escribió y reglas de negocio que viven en la aplicación y no en el modelo.
HL7 v2 sobre MLLP
Mensajería de admisión, órdenes y resultados que ya circula entre sistemas y que puede aprovecharse como fuente en lugar de construir una extracción nueva.
Con qué se topa uno
Segmentos Z propios de cada instalación, campos opcionales usados de forma creativa, y el hecho de que un mensaje describe un evento, no el estado actual del paciente.
Archivos planos y lotes
CSV, posicionales o XML que el sistema ya genera para reportes o para otros consumidores, procesados por lote.
Con qué se topa uno
Ventanas de generación fijas, entregas parciales o repetidas, codificaciones de caracteres heredadas y ningún mecanismo para saber qué cambió desde el archivo anterior.
Servicios SOAP y APIs propietarias
Interfaces que el proveedor ya expone, pensadas para un consumidor específico y con un modelo de datos propio.
Con qué se topa uno
Granularidad que no coincide con la del recurso FHIR, límites de paginación y concurrencia no documentados, y cambios de contrato que llegan sin aviso.
PACS y DICOM
Estudios e informes de imagen, donde el metadato vive en el equipamiento y en el PACS antes que en el registro clínico.
Con qué se topa uno
Identificadores de paciente distintos a los del expediente, informes en texto libre dentro del estudio y volúmenes que hacen inviable materializar sin un criterio claro.
Hojas de cálculo y catálogos manuales
Los catálogos que sostienen procesos reales aunque no vivan en ningún sistema: servicios, profesionales, equivalencias de códigos.
Con qué se topa uno
Sin control de versiones, sin dueño formal y con la verdad repartida entre varias copias que no coinciden entre sí.
Modos de entrega
Traducir al vuelo o materializar: la decisión que define todo lo demás
Es la primera decisión de arquitectura y la que determina el costo, la latencia y a quién le duele una caída. Casi nunca es una elección pura.
Al vuelo
La capa traduce cada consulta contra el sistema origen, en el momento.
Materializado
Los datos se transforman y se cargan en un repositorio FHIR que atiende las consultas.
Frescura del dato
Al vueloSiempre el estado actual del origen. No hay ventana de desactualización que explicar ni que defender clínicamente.
MaterializadoTan fresco como el último ciclo de carga. Hay que definir esa ventana, comunicarla y confirmar que es aceptable para el uso clínico.
Carga sobre el origen
Al vueloCada consulta externa golpea al sistema que sostiene la operación. Un consumidor mal comportado se convierte en un incidente clínico.
MaterializadoLa extracción se programa en ventanas de baja demanda y las consultas externas no tocan el origen.
Acoplamiento a la disponibilidad
Al vueloSi el origen se cae o entra en mantenimiento, la API FHIR se cae con él: su ventana de mantenimiento pasa a ser la suya.
MaterializadoLa capa sigue respondiendo aunque el origen esté detenido. Su indisponibilidad se traduce en datos más viejos, no en un servicio caído.
Consulta y rendimiento
Al vueloCada búsqueda FHIR hay que traducirla a una consulta que el origen resuelva rápido. Lo que su esquema no indexa, no se puede ofrecer.
MaterializadoSe indexa según los parámetros de búsqueda que la guía exige, no según cómo quedó el esquema del origen hace quince años.
Histórico y reproceso
Al vueloSe ve lo que el origen conserva. Si sobrescribe en lugar de versionar, el histórico no existe y no hay forma de reconstruirlo.
MaterializadoSe puede conservar versión por versión y reprocesar el histórico completo cuando el mapeo cambia o aparece un error.
Escritura de vuelta
Al vueloEscribir hacia el origen exige respetar sus reglas de negocio y sus validaciones, que casi nunca están documentadas.
MaterializadoLa escritura se acepta en la capa y se propaga de forma diferida, lo que obliga a resolver conflictos y a declarar qué versión gana.
Gobierno de la copia
Al vueloNo hay copia: no hay que decidir quién es dueño del duplicado, cuánto se retiene ni cómo se suprime.
MaterializadoHay una copia de datos clínicos, con todo lo que implica: dueño, retención, control de acceso, auditoría y derecho de supresión.
Costo de operar
Al vueloPoca infraestructura, pero el rendimiento depende de un sistema que no se controla y cada consumidor nuevo cambia el perfil de carga.
MaterializadoInfraestructura y operación propias —almacenamiento, monitoreo, reproceso— a cambio de un comportamiento predecible.
Lo que se usa en la práctica
Los extremos puros son poco frecuentes. La mayoría de las capas que operan bien son combinaciones deliberadas de ambos.
Caché con vigencia declarada: se traduce al vuelo, pero la respuesta se conserva por un tiempo definido y documentado para el consumidor.
Captura de cambios por eventos: el origen avisa qué cambió —por mensajería, por disparadores o por CDC— y solo eso se transforma.
Lectura al vuelo con escritura diferida: las consultas van contra el origen y las escrituras se encolan y concilian, que es donde están los conflictos.
Materialización parcial: se materializa solo el dominio que lo necesita —resultados, notificaciones— y el resto se traduce al vuelo.
Índice aparte para lo que el origen no resuelve: las búsquedas que su esquema no soporta se sirven desde una estructura propia.
Metodología
Cómo construimos la capa
Seis etapas. La primera decide qué se puede sacar del origen sin arriesgar la operación clínica.
01
Análisis del origen
Antes de mapear nada, entendemos qué guarda el sistema realmente y qué se puede extraer sin poner en riesgo lo que ya funciona.
Esquema, interfaces y mecanismos de acceso disponibles
Perfilado de los datos y de su calidad
Ventanas operativas y límites de carga
Reglas de negocio que viven en la aplicación
02
Modelo y mapeo
Se decide qué recurso representa cada dato, qué perfil aplica y de dónde sale cada elemento — incluido el que el origen no tiene.
Mapeo elemento a elemento
Terminologías y ConceptMap para los códigos locales
Estrategia de identificadores y referencias
Qué se hace con el dato faltante
03
Diseño de la capa
Modo de entrega, alcance por dominio, seguridad y contrato con los consumidores. Aquí se fija lo que después resulta caro cambiar.
Al vuelo, materializado o híbrido
Autenticación, autorización y auditoría
CapabilityStatement objetivo
Política de versiones y compatibilidad
04
Construcción y transformación
Se implementan las transformaciones, la exposición y el manejo de errores, con los casos límite tratados como parte del alcance y no como sorpresas.
Pipelines de extracción y transformación
Endpoints y parámetros de búsqueda
Idempotencia y reintentos
Registro de lo que no se pudo transformar
05
Validación de conformidad
La capa se prueba contra los perfiles que debe cumplir, con ejemplos válidos y con ejemplos que deben ser rechazados.
Validación contra la guía aplicable
Pruebas de búsqueda y paginación
Comparación contra el origen
Pruebas de carga en ventana real
06
Operación y observabilidad
Una capa sin monitoreo falla en silencio y se descubre cuando alguien reclama un dato que nunca llegó.
Métricas de latencia, error y frescura
Alertas sobre datos no transformados
Trazabilidad de origen a recurso
Procedimiento ante un cambio del origen
Conformidad
Que sea FHIR de verdad, no JSON con nombres de FHIR
La diferencia entre una capa que pasa una demostración y una que aguanta un ecosistema está en detalles que solo aparecen cuando un tercero intenta consumirla.
Validación contra perfiles
El atajo habitual
Se arma el JSON a mano hasta que «se ve bien» y se prueba únicamente contra el cliente propio.
Lo que sostiene
Cada recurso se valida contra el perfil de la guía aplicable, en integración continua, con ejemplos que deben pasar y ejemplos que deben fallar.
Un CapabilityStatement honesto
El atajo habitual
Se publica un CapabilityStatement copiado que declara operaciones y búsquedas que nadie implementó.
Lo que sostiene
Se declara exactamente lo que la capa soporta. Un consumidor debe poder planear su integración leyéndolo, sin descubrir a golpes qué funciona.
Búsquedas que funcionan
El atajo habitual
Se implementan dos o tres parámetros y el resto se ignora en silencio, devolviendo todo como si el filtro no existiera.
Lo que sostiene
Los parámetros declarados se implementan o no se declaran. Y la paginación se prueba con los volúmenes reales del origen, no con datos de prueba.
Identificadores, referencias y códigos
El atajo habitual
Se usan claves internas como si fueran ids FHIR, se referencian recursos que la capa nunca expone y se mandan códigos locales sin decir de dónde vienen.
Lo que sostiene
Toda referencia se resuelve o se declara como lógica, los identificadores de negocio viajan en identifier con su system, y todo código lleva declarado el suyo.
Errores que se pueden depurar
El atajo habitual
Ante un problema se devuelve un 500 genérico o, peor, un 200 con el recurso incompleto.
Lo que sostiene
Los errores se devuelven como OperationOutcome, con severidad, código y una ubicación que le diga al consumidor qué corregir.
El dato que no existe
El atajo habitual
Se rellena con un valor por defecto, una fecha inventada o un código genérico para que el recurso valide.
Lo que sostiene
Lo ausente se representa como ausente. Cuando la guía exige el elemento, se usan los mecanismos previstos para datos desconocidos y se documenta la brecha, en vez de fabricar el dato.
Resultados
Qué recibe su organización
La capa en operación y todo lo necesario para consumirla, auditarla y hacerla evolucionar sin nosotros.
Capa FHIR en operación
El servicio desplegado, con sus endpoints, su seguridad y su configuración documentada.
Mapeos documentados
Correspondencia elemento a elemento entre el origen y los recursos, con las decisiones registradas.
ConceptMaps y catálogos
Equivalencias declaradas entre los códigos locales y las terminologías estándar.
CapabilityStatement
Lo que la capa soporta realmente: recursos, operaciones y parámetros de búsqueda.
Suite de validación
Ejemplos válidos, ejemplos que deben fallar y las pruebas que corren en cada cambio.
Monitoreo y alertas
Métricas de latencia, error y frescura, con alertas sobre lo que no se pudo transformar.
Guía para consumidores
Cómo autenticarse, qué buscar, qué esperar y qué límites tiene la capa.
Ruta de evolución
Qué se materializa después, qué dominios siguen y cuándo conviene revisar el modo de entrega.
Experiencia
Capas FHIR en operación
Infraestructura FHIR construida sobre sistemas y plataformas que ya existían y siguieron funcionando.
Qué resolvió la capaRecepción y validación de notificaciones
Primer servidor FHIR nacional — EDUS/CCSS
Meddyg implementó y desplegó a producción el primer servidor FHIR que recibiría las notificaciones de enfermedades de notificación obligatoria, vacunas y resultados de laboratorio del EDUS/CCSS, y posteriormente de otros establecimientos de salud.
Qué resolvió la capaPunto de entrada para notificación regional
Infraestructura receptora de ESAVI
Parte del equipo de Meddyg participó como consultor en el diseño e implementación de la infraestructura que recibiría las notificaciones regionales de ESAVI, junto con la guía que define su formato.
Qué resolvió la capaEl estándar sobre transporte nacional
Transacciones FHIR sobre X-Road
Pruebas de concepto junto a la Agencia Nacional de Gobierno Digital para validar transacciones de recursos FHIR sobre la plataforma nacional X-Road, dentro de la demostración funcional de interoperabilidad de Costa Rica.
Qué resolvió la capaNo repudio en la capa de intercambio
Firma digital de recursos FHIR — BCCR
Asistencia técnica para que los equipos del Banco Central de Costa Rica habilitaran el firmado de recursos FHIR con el formato JAdES dentro de GAUDI, su plataforma de firma digital y sellado.
Los casos anteriores son infraestructura FHIR construida sobre sistemas y plataformas que ya operaban. El mismo método —análisis del origen, mapeo, elección del modo de entrega y validación de conformidad— es el que aplicamos a una fachada sobre un expediente o un sistema departamental heredado.
Perfil
¿Para quién es este servicio?
Todos comparten la misma restricción: el sistema de origen no se puede detener ni reemplazar en el plazo en que hay que interoperar.
Hospitales con expediente heredado
Un sistema clínico que no se va a reemplazar y al que ahora le piden exponer datos, notificar o conectarse a una red.
Proveedores de software de salud
Productos que deben demostrar capacidad FHIR ante clientes y licitaciones sin rehacer su base de datos.
Laboratorios y centros de imágenes
Resultados e informes que deben salir hacia múltiples receptores externos con la misma estructura y los mismos códigos.
Instituciones públicas
Sistemas de misión crítica que deben participar en un ecosistema nacional sin abrir su base de datos ni detener su operación.
Redes de intercambio (HIE)
Ecosistemas que incorporan participantes cuyos sistemas no hablan el estándar y necesitan un patrón de conexión repetible.
Aseguradoras
Intercambio con prestadores cuyos sistemas exponen formatos propios y evolucionan a su propio ritmo.
Autodiagnóstico
¿Reconoce alguno de estos problemas?
Nos piden una API FHIR y nuestro sistema no tiene ninguna API.
Reemplazar el expediente no está sobre la mesa, pero interoperar sí.
Cada integración nueva termina siendo una exportación hecha a medida.
Exponemos JSON que llamamos FHIR y ningún validador lo acepta.
No sabemos si conviene traducir al vuelo o cargar a un repositorio.
La consulta externa golpea la misma base de datos que usa la operación clínica.
Cuando el sistema origen se cae, se cae también todo lo que expusimos.
Nuestro proveedor no expone lo que necesitamos y no está en su hoja de ruta.
Un consumidor nos avisó de un dato mal mapeado y no supimos desde cuándo lo estaba.
Publicamos un CapabilityStatement que no coincide con lo que la API hace.
No tenemos forma de saber qué registros no se lograron transformar.
Necesitamos conectarnos a una red nacional y nuestros datos no salen del sistema.
Si alguna de estas situaciones describe su organización, una capa FHIR puede resolver el intercambio sin poner en riesgo lo que ya funciona.
¿Le piden FHIR a un sistema que no lo habla?
Una capa bien diseñada deja a los sistemas actuales participando del ecosistema, sin tocar su operación ni hipotecar la ruta de modernización.