caso de uso: Connected Health, Modernización, Single View
Industrias: Atención médica, Ciencias de la vida
Productos: MongoDB Atlas, MongoDB Atlas Charts, MongoDB serie de tiempo, MongoDB Queryable Encryption
Descripción general de la solución
Los proveedores de atención médica operan bajo estrictos requisitos de calidad. Las agencias federales y las aseguradoras, incluidas la CMS y los principales planes de salud, exigen a los proveedores que midan, rastreen e informen la calidad de la atención que brindan a los pacientes. El cumplimiento de estos mandatos conlleva consecuencias financieras, como mayores reembolsos para las organizaciones que cumplen estas normas y sanciones para las que no lo hacen.
HEDIS define los requisitos de calidad. Este conjunto de mediciones especifica las actividades clínicas que los proveedores deben completar para cada paciente, por ejemplo, un HbA1c, una evaluación renal y un examen ocular diabético para pacientes diabéticos. Cuando un paciente no recibe una actividad requerida dentro del período de medición, se abre una brecha de atención.
Las brechas de atención no son solo un problema de cumplimiento. Si no se detectan, provocan peores resultados para los pacientes, mayores tasas de reingreso hospitalario, progresión de la enfermedad y complicaciones prevenibles. También dan como resultado calificaciones de estrellas de CMS más bajas y pérdida de reembolsos en virtud de contratos en los que a los proveedores se les paga en función de los resultados de los pacientes, en lugar del volumen de servicios prestados.
La mayoría de las organizaciones saben que existen lagunas en la atención. Sin embargo, se enfrentan a un desafío operativo. Si bien los almacenes de datos de FHIR permiten que el software médico y los sistemas de EHR se comuniquen y compartan datos de forma segura, no están optimizados para queries clínicas operativas en tiempo real. Bajo cargas de trabajo en vivo, encuentran cuellos de botella predecibles, como alta latencia de queries, bajo rendimiento en agregaciones de recursos anidados, falta de soporte nativo de series de tiempo y costos crecientes con el aumento del volumen de queries. Como resultado, los coordinadores de atención no pueden obtener datos de estos sistemas lo suficientemente rápido como para rastrear el cumplimiento de HEDIS, cerrar las brechas de los pacientes e intervenir a tiempo.
Para superar estos cuellos de botella de rendimiento, esta solución presenta un sistema CDS compilado sobre una base de datos FHIR e impulsado por MongoDB Atlas como capa operativa. En esta arquitectura, FHIR gestiona la interoperabilidad y el intercambio de datos, mientras que MongoDB Atlas impulsa la supervisión de signos vitales en tiempo real, el cálculo de brechas de atención HEDIS y los flujos de trabajo clínicos. Con este marco, los coordinadores de atención obtienen acceso a los datos de baja latencia y soporte de decisiones en tiempo real en el punto de atención.
Figura 1. Ventajas de la compatibilidad con decisiones clínicas en tiempo real con MongoDB
Arquitecturas de Referencia
Esta solución ingiere datos clínicos de dispositivos portátiles y sistemas de atención médica, los enruta a través de un almacén de datos y una capa operativa, y ofrece soporte de decisiones en tiempo real a los coordinadores de atención, como se muestra en el diagrama de arquitectura a continuación.
Figura 2. Arquitectura de alto nivel
La capa de almacenamiento de datos de FHIR contiene los recursos FHIR R4 sin procesar, que incluyen:
PatientConditionMedicationRequestObservationEncounterAllergyIntolerance
Esta capa gestiona la validación de conformidad y la normalización R4, sirviendo como fuente canónica de verdad para la interoperabilidad según los requisitos de cumplimiento de HIPAA y HITRUST.
MongoDB Atlas proporciona la capa operativa. Almacena documentos desnormalizados y datos de series de tiempo optimizados para las query, agregaciones y flujos de trabajo en tiempo real necesarios para la compatibilidad con decisiones clínicas.
Para convertir estos datos clínicos almacenados en acciones en tiempo real, la plataforma organiza los siguientes componentes:
MongoDB Atlas sirve como base operativa para almacenar todos los datos clínicos en un esquema polimórfico flexible.
El pipeline de generación de datos lee del almacén de datos FHIR y rellena MongoDB Atlas con registros de pacientes, signos vitales y reglas de CDS.
El sistema incorpora los módulos de Python
AlertEngineyQualityEnginepara respaldar las decisiones clínicas. ElAlertEnginesupervisa los signos vitales en vivo para detectar riesgos clínicos inmediatos, y elQualityEngineevalúa el historial clínico para detectar lagunas en el cumplimiento de HEDIS. Ambos motores guardan sus resultados en el documentopatient_360en MongoDB Atlas.Por último, el flujo de trabajo de brechas de atención entrega los resultados del motor directamente a los coordinadores de atención. Por ejemplo, cuando el
AlertEngineactiva una alerta crítica, el flujo de trabajo de brechas de atención prioriza las brechas abiertas para que los coordinadores puedan ver primero los casos urgentes.
Las siguientes secciones describen cada parte de este flujo.
MongoDB Atlas: capacidades clave
Diseñado para cargas de trabajo complejas de atención médica, MongoDB Atlas reemplaza los sistemas heredados con un ecosistema de datos nativo y altamente optimizado. A continuación se presenta una descripción general de las capacidades principales que permiten a la plataforma proporcionar soporte de decisiones en tiempo real.
Figura 3. Capacidades clave de Atlas
Modelo orientado a documentos flexible: El patient_360 collection almacena un registro completo del paciente en un solo documento, incluidos datos demográficos, afecciones, medicamentos, análisis, resúmenes de signos vitales, brechas de atención, alertas, umbrales personalizados y procedencia de los datos. Un solo documento responde a preguntas que requerirían uniones de varios recursos en un almacén FHIR.
Colección de series de tiempo: la colección synthetic_vitals almacena datos de dispositivos portátiles mediante las colecciones de series de tiempo nativas de MongoDB. Estas colecciones proporcionan agrupación automática de datos, query de rango eficientes y almacenamiento especialmente diseñado para datos de alta frecuencia y ordenados por tiempo.
Cambiar transmisiones: la plataforma utiliza transmisiones de cambio para reaccionar a nuevas constantes vitales en tiempo real. Cuando llega una lectura, el sistema evalúa las reglas de CDS y genera alertas clínicas sin sondeo.
Queryable Encryption: MongoDB Queryable Encryption protege los campos confidenciales de los pacientes en reposo. La aplicación consulta los campos PHI cifrados sin exponer texto sin formato, lo que cumple los requisitos de HIPAA y elimina la necesidad de una capa de cifrado independiente.
Pipeline de agregación: este framework gestiona las agregaciones del tablero, el cálculo de la brecha de atención, el análisis de tendencias de signos vitales y la puntuación HEDIS, resolviendo query clínicas complejas en milisegundos.
Estructura para IA y análisis: El documento patient_360 entrega hechos clínicos normalizados, evidencia estructurada y procedencia de metadatos a los pipelines de IA y análisis posteriores sin transformación adicional.
El pipeline de generación de datos
Tras la inicialización, esta solución utiliza un pipeline de varios pasos para sembrar y activar el sistema CDS, como se ilustra a continuación.
Figura 4. Pipeline de generación de datos
El pipeline de generación de datos impulsa la secuencia de inicialización que crea datos clínicos sintéticos y materializados, calcula umbrales personalizados y brechas de atención, e inicia la supervisión en tiempo real. El pipeline funciona de la siguiente manera:
Genera paquetes de pacientes FHIR: crea paquetes de transacciones FHIR R4 que incluyen afecciones, medicamentos, observaciones de laboratorio, encuentros y alergias. Almacena estos paquetes en el almacén de datos FHIR, que sirve como capa de interoperabilidad.
Genera historiales de signos vitales: produce una serie temporal de 24horas de signos vitales por paciente, que representa patrones fisiológicos normales, deteriorados o agudos. Almacena los datos en la colección de series de tiempo
synthetic_vitals.Materializa documentos patient_360: transforma cada paquete FHIR en un documento
patient_360desnormalizado en MongoDB Atlas. La transformación incluye un bloquedata_provenanceque enlaza con el registro FHIR de origen.Reglas de CDS de semillas: inserta definiciones de reglas de soporte de decisiones clínicas en la colección
cds_rules.Calcula umbrales personalizados: calcula los umbrales de signos vitales por paciente en función de los medicamentos y las afecciones activas. Almacena estos resultados en el documento
patient_360.Evalúa las reglas de CDS: ejecuta el
AlertEnginecon los signos vitales actuales y guarda las alertas generadas en la colecciónalerts.Calcula las carencias de atención de HEDIS: ejecuta el
QualityEngineen el historial clínico de cada paciente y guarda los resultados estructurados de las carencias de atención en el documentopatient_360.Atribuciones del proveedor de semillas: genera relaciones de atribución proveedor-paciente en la colección
attributions, determinando qué proveedores reciben resultados y alertas de brechas.Inicia la supervisión en tiempo real: activa el trabajador de simulación de constantes vitales y comienza la transmisión de datos de constantes vitales en vivo a la plataforma clínica a través de eventos enviados por el servidor.
Los motores CDS
Los motores de CDS analizan los datos de los pacientes para proporcionar perspectivas procesables a los equipos de atención. Esta solución separa la supervisión clínica del cálculo de medidas de calidad en dos motores independientes. Este patrón arquitectónico se adhiere a la iniciativa Da Vinci, un programa acelerador HL7 FHIR para la interoperabilidad de la atención, que recomienda desacoplar las alertas en tiempo real y la lógica de brechas de HEDIS.
AlertEngine: supervisión de umbrales en tiempo real
El AlertEngine evalúa los signos vitales entrantes con respecto a las reglas de CDS y genera alertas clínicas. Verifica las siguientes reglas de CDS:
Taquicardia detectada por betabloqueantes: Evalúa la frecuencia cardíaca por encima del umbral personalizado.
Hipoglucemia multifactorial: comprueba las condiciones agregadas de aumento de la frecuencia cardíaca, diabetes tipo 2, insulina, edad 65 o más y actividad baja.
Acidosis metabólica de la enfermedad renal crónica: Supervisa la frecuencia respiratoria por encima de 22 sostenida durante 30 minutos.
Advertencia de sepsis: controla la presencia de tres o más de los criterios SIRS modificados, con la diabetes como amplificador de riesgo.
Contexto comparativo: evalúa el perfil de medicamentos y afecciones del paciente para producir diferentes advertencias de gravedad.
El AlertEngine comprueba las infracciones sostenidas, no las lecturas individuales. Utiliza una ventana de referencia de 2horas para la detección de picos y una ventana de tendencia de 4horas para el deterioro. El motor aplica el contexto a cada alerta, lo que significa que la misma lectura de frecuencia cardíaca genera una alerta crítica para un paciente con betabloqueantes y una señal de baja gravedad para un paciente sano.
QualityEngine: Cálculo de la brecha de atención de HEDIS
El QualityEngine determina si cada paciente ha recibido la atención clínica requerida dentro de un período de medición HEDIS. El motor se dirige a pacientes con diabetes tipo 2 y ERC, y evalúa sus historias clínicas con respecto a las medidas HEDIS designadas.
La siguiente tabla muestra estas medidas HEDIS:
medir | Código | Evidencia requerida |
|---|---|---|
Atención integral de la diabetes: pruebas de HbA1c | CDC-HBA | Resultado de laboratorio de HbA1c |
Evaluación de la salud renal para la diabetes | KED | Resultados de laboratorio de eGFR y uACR |
Control de la presión arterial alta | CBP | Encuentro de calificación |
Terapia con estatinas para pacientes con diabetes | SPD | Resultado de laboratorio de colesterol total |
Examen ocular para pacientes con diabetes | EED | Encuentro de calificación |
Los coordinadores de atención utilizan los resultados de QualityEngine para identificar qué pacientes necesitan intervención y priorizar la divulgación antes de que las brechas afecten las puntuaciones de calidad y los reembolsos. Cada resultado incluye el estado de la brecha, la evidencia encontrada, la evidencia faltante, la acción recomendada, la puntuación de prioridad y una fecha de recálculo. Además, el motor expone un punto final compatible con FHIR que devuelve un paquete MeasureReport para garantizar la interoperabilidad con los sistemas de pago.
Flujo de trabajo de carencias de atención
El flujo de trabajo de brecha de atención sirve como el proceso sistemático que las organizaciones de atención médica utilizan para identificar, rastrear y resolver las discrepancias entre la atención clínica real de un paciente y las pautas médicas establecidas. La detección de brechas de atención sigue una ruta estructurada desde la identificación hasta el cierre que consta de estas acciones:
Evaluar: El
QualityEngineevalúa el historial clínico de cada paciente según los criterios de medición de HEDIS.Guardar: el sistema guarda las brechas abiertas en el documento
patient_360, junto con sus pruebas de respaldo, la acción recomendada y la prioridad.Revisión: Los coordinadores de atención revisan las brechas abiertas en la plataforma clínica, clasificadas por prioridad y período de vencimiento.
Intervenir: Para brechas procesables como KED y CDC-HBA, la plataforma abre un espacio de trabajo de intervención estructurado donde el coordinador ordena laboratorios, registra la finalización o programa el seguimiento.
Cerrar: Cuando finaliza la intervención, el estado de la brecha se actualiza en el documento
patient_360y elQualityEnginese vuelve a evaluar en el siguiente ciclo.Escalar: cuando el
AlertEnginedetecta una alerta clínica, eleva la prioridad de las brechas abiertas relacionadas y notifica al equipo de atención. Las alertas sin una brecha relacionada, como una advertencia de sepsis, se dirigen directamente al equipo de atención como notificaciones clínicas independientes.
Enfoque de modelo de datos
Un paquete de transacciones FHIR R4 para un solo paciente contiene más de 20 recursos individuales. Para determinar si un paciente mayor de 65 con diabetes tipo 2 que toma insulina está en riesgo de hipoglucemia, el sistema debe:
Query el almacén de FHIR para recuperar un recurso
Patient.Correlacione ese recurso con varios recursos
ConditionyMedicationRequest.Aplicar la lógica de reglas en el resultado combinado.
Bajo cargas de trabajo de producción en vivo, este recorrido agrega latencia y produce tiempos de query impredecibles. Por ejemplo, los pacientes en esta solución pueden tener hasta cinco afecciones activas, seis recursos de medicamentos, ocho recursos de observación de laboratorio, un encuentro y una nota clínica, todo lo cual debe evaluar una regla de CDS.
Para evitar estos gastos en general, el documento patient_360 consolida estos datos fragmentados en un solo documento, eliminando por completo el recorrido. Todos los datos clínicos de un solo paciente se encuentran en un documento estructurado de la siguiente manera:
patient_id: Identificador único de paciente vinculado al registro FHIR de origen.demographics: Edad, género y campos PHI cifrados (nombre, MRN, fecha de nacimiento).conditions: Diagnósticos activos con códigos SNOMED y fechas de inicio.medications: Prescripciones activas con dosis, vía y frecuencia.labs: Resultados con valores, unidades y rangos de referencia.flagsBooleano calculado a partir de las condiciones y los medicamentos.personalized_thresholds: Límites de signos vitales por paciente basados en medicamentos activos.vitals_summaryÚltimas lecturas, promedios de 4horas y tendencias de 24horas.active_alerts: Alertas de CDS generadas por elAlertEngine.care_gaps: Resultados de las medidas HEDIS calculados por elQualityEngine.data_provenance: colección de FHIR de origen, ID de paciente y metadatos de materialización.
Datos clínicos como arreglos de documentos
En el documento patient_360, cada condición representa una entrada en el arreglo conditions, mientras que cada medicamento representa una entrada en el arreglo medications. Como se muestra a continuación, el documento almacena las entidades clínicas en la forma en que se utilizan, en lugar de dividirlas en tablas separadas:
{ "conditions": [ { "code": "44054006", "display": "Type 2 diabetes mellitus", "clinical_status": "active", "onset_date": "2017-10-21T21:29:59.716351+00:00" }, { "code": "433144002", "display": "Chronic kidney disease stage 3", "clinical_status": "active", "onset_date": "2023-09-12T21:29:59.716372+00:00" } ], "medications": [ { "display": "Insulin glargine 100 units/mL injection", "dose": "20.0 units", "route": "subcutaneous", "frequency": "once daily at bedtime", "status": "active" }, { "display": "Atenolol 50 mg oral tablet", "dose": "50.0 mg", "route": "oral", "frequency": "once daily", "status": "active" } ] }
Campos operativos calculados
El paquete FHIR contiene datos de interoperabilidad estándar, mientras que el documento patient_360 incorpora campos operativos que FHIR no define, incluidas marcas clínicas, resultados de brechas de atención, umbrales personalizados y alertas activas.
Por ejemplo, el pipeline de materialización, incrustado en el pipeline de generación de datos más amplio, calcula las marcas clínicas del paquete FHIR y las guarda directamente en el documento patient_360. El AlertEngine lee estas marcas para determinar qué reglas de CDS se aplican a un paciente, incluidas:
flags.has_beta_blockerActiva la regla de frecuencia cardíaca del betabloqueante.flags.has_insulin: activa la regla de hipoglucemia multifactorial.flags.has_ckd: Activa las reglas de acidosis metabólica y respiratoria de la CKD.flags.condition_codes: códigos SNOMED para todas las condiciones activas.
Los resultados de la brecha de atención utilizan el mismo enfoque. El pipeline de materialización calcula los resultados de la brecha de atención y los agrega directamente al documento patient_360. Cada medida HEDIS calculada se almacena dentro del arreglo care_gaps junto con su status, priority, evidence y recommended_action asociados. A diferencia de FHIR estándar, el modelo orientado a documentos almacena esta información junto con el registro clínico del paciente. A continuación se muestra un ejemplo de esta estructura:
{ "care_gaps": [ { "hedis_measure": "CDC-HBA", "measure_name": "Comprehensive Diabetes Care — HbA1c Testing", "status": "open", "days_overdue": 34, "priority": "high", "evidence": { "found": ["HbA1c 5.13% (2025-10-07)"], "missing": [] }, "recommended_action": "Schedule or order an HbA1c follow-up" } ] }
Este enfoque ofrece flexibilidad adicional; cuando cambian los requisitos clínicos, puede extender el documento. Las nuevas reglas de CDS guardan nuevos campos en el mismo documento sin afectar a los existentes.
Trazabilidad al registro de origen
El documento patient_360 constituye una vista operativa derivada, no un reemplazo del registro FHIR. El pipeline de materialización produce esta vista a partir de los recursos FHIR. Para auditar cualquier decisión clínica o resultado de brecha de atención, cada documento incluye un bloque data_provenance:
{ "data_provenance": { "layer": "cds_operational", "source_fhir_collection": "synthetic_patients", "source_patient_id": "1b3bbaec-def8-4b55-8e87-9d04b55d6890", "materialization_version": "1.0", "last_materialized_at": "2026-05-09T21:30:04.873754+00:00", "fhir_resource_count": 22 } }
El almacén de datos de FHIR sigue siendo la fuente canónica de información para la interoperabilidad, mientras que MongoDB Atlas contiene la vista operativa, manteniendo un vínculo directo con sus datos de origen.
Campos cifrados dentro del modelo orientado a documentos
Las regulaciones sanitarias exigen que las aplicaciones cifren la PHI. Un enfoque común consiste en almacenar la PHI cifrada en un sistema separado y recuperarla solo cuando sea necesario. Sin embargo, este marco introduce un segundo almacén de datos, una capa de gestión de claves independiente y una mayor latencia para cada recuperación de registros de pacientes.
MongoDB Queryable Encryption elimina esta sobrecarga manteniendo la PHI en el mismo documento. Protege campos altamente confidenciales, como el nombre del paciente, el MRN y la fecha de nacimiento, haciéndolos legibles solo para las aplicaciones cliente autorizadas con la llave de cifrado. El resto del documento sigue siendo consultable para uso operativo:
{ "demographics": { "name": { "$binary": { "base64": "EAXZmoXjO0re...", "subType": "06" } }, "given": { "$binary": { "base64": "EF1RChFVFEJC...", "subType": "06" } }, "family": { "$binary": { "base64": "EK18iT8qVki8...", "subType": "06" } }, "birth_date": { "$binary": { "base64": "EJOsqgLJPEjI...", "subType": "06" } }, "gender": "female", "age": 77 } }
Por ejemplo, los microservicios como AlertEngine y QualityEngine leen indicadores, umbrales y campos de brechas de atención, ninguno lee los campos demográficos cifrados.
Compilar la solución
Encuentre instrucciones detalladas de instalación en el repositorio de GitHub. El repositorio incluye pasos para obtener una cadena de conexión de MongoDB Atlas, configuraciones de Docker para la implementación en contenedores e instrucciones para la implementación local.
Configure los requisitos previos y la configuración
Instale Docker Desktop para ejecutar la plataforma como contenedores.
Cree un clúster MongoDB Atlas M10 y configure el acceso a la red.
Conéctese a su clúster de Atlas y copie la cadena de conexión.
[Opcional] Cree una cuenta de Amazon Web Services con acceso al servicio
HealthLakesi desea almacenar paquetes FHIR en un almacén de datos FHIR externo.
Inicie la plataforma y la siembra de datos
Abra http://localhost:8080 en su navegador. Al iniciar sesión, elija la persona que coincida con su escenario de demostración:
Frida (modo de simulación): seleccione Frida para configurar los ajustes de simulación antes de la siembra. La plataforma ejecuta un pipeline de varios pasos que genera y carga todos los datos automáticamente. Utilice este modo para una demostración en vivo con transmisión de signos vitales en tiempo real.
Diego (modo de datos existentes): seleccione Diego para conectarse a un conjunto de datos previamente sembrado sin simulación en ejecución. Utilice esta opción cuando desee demostrar la plataforma con datos estables o cuando la pipeline de siembra ya se haya ejecutado.
Explore el tablero del paciente, revise las brechas de atención abiertas y supervise los signos vitales en tiempo real.
Lecciones clave
Utilice MongoDB Atlas como capa operativa para los flujos de trabajo de FHIR: amplíe la base de datos FHIR de la aplicación con una capa operativa desnormalizada en MongoDB Atlas para impulsar las consultas clínicas en tiempo real, el cálculo de brechas de atención y la supervisión de signos vitales.
Modele los datos del paciente como un solo documento: almacene las afecciones, los medicamentos, los análisis de laboratorio, las alertas, las brechas de atención y los umbrales de signos vitales en un solo documento, lo que permite que su aplicación recupere todo lo que necesita en una sola lectura, sin unir varios recursos.
Precalcule las marcas y los umbrales clínicos en la ingestión de datos: extraiga los hechos clínicos clave de los paquetes FHIR y almacénelos como campos calculados en MongoDB Atlas en el momento de la ingestión, lo que permite a los motores CDS evaluar las reglas sin volver a leer los registros de origen.
Guarde las brechas de atención y los resultados de las alertas directamente en el documento del paciente: Utilice campos de arreglo como
care_gapsyactive_alertspara almacenar los resultados de las medidas HEDIS y las alertas clínicas junto con el registro clínico, lo que proporciona a los coordinadores de atención información completa y procesable en una sola query.Proteja la PHI con Queryable Encryption de MongoDB: aplique Queryable Encryption a los campos sensibles del paciente para proteger la PHI y evitar la exposición de texto sin formato, cumpliendo los requisitos de HIPAA sin una capa de cifrado independiente.
Autores
Giovanni Rodríguez Fragoso, MongoDB
Francesc Mateu Amengual, MongoDB
Diego Canales, MongoDB