Como ya conoceréis todos sobradamente, Health Connect / IRIS for Health soporta mensajería DICOM de forma nativa y muchos de vosotros lo habreis usado en vuestro día a día. Pues bien, recientemente descubrí una pequeña incidencia de lo más insidiosa y a la que nuestro querido @Alberto Fuentes me dio la solución.
Puede que ya lo haya mencionado antes: creo que las Trazas Visuales, estos diagramas de secuencia con el contenido completo de cada paso, son una característica fantástica de la plataforma de datos IRIS. La información detallada sobre cómo funciona internamente la API, presentada como una traza visual, puede ser muy útil para proyectos en la plataforma IRIS. Por supuesto, esto se aplica cuando no estamos desarrollando una solución de alta carga, ya que en ese caso simplemente no tenemos tiempo para guardar o leer mensajes. Para todos los demás casos, ¡bienvenidos a este tutorial!
Hola:
La migración de datos a menudo suena como una simple “tarea de mover datos de A a B” hasta que te pones a ello. En realidad, es un proceso complejo que combina planificación, validación, pruebas y precisión técnica.
A lo largo de varios proyectos en los que gestioné la migración de datos a un HIS que funciona sobre IRIS (TrakCare), me di cuenta de que el éxito proviene de una mezcla de disciplina y automatización.
Aquí tenéis algunos puntos que quiero destacar.
1. Empezad con un formato de datos definido.
Antes incluso de abrir vuestro primer archivo, aseguraos de que todos, especialmente los proveedores de datos, entienden claramente el formato exacto de datos que esperáis. Definir plantillas desde el principio evita idas y venidas innecesarias y retrabajos más adelante.
Aunque los formatos Excel o CSV son comunes, personalmente considero que usar un archivo de texto delimitado por tabuladores (.txt) para la carga de datos es lo mejor. Es ligero, consistente y evita problemas con comas dentro de los campos de texto.
PatID DOB Gender AdmDate
10001 2000-01-02 M 2025-10-01
10002 1998-01-05 F 2025-10-05
10005 1980-08-23 M 2025-10-15Aseguraos de que los formatos de fecha que aparecen en el archivo son correctos y constantes en todo el documento, porque normalmente todos estos archivos se convierten desde un Excel y un usuario básico de Excel puede cometer errores al daros los formatos de fecha incorrectos. Los formatos de fecha erróneos pueden desesperaros al convertirlos a horolog.
¿Se te hiela la sangre al oír hablar de OpenEHR? ¿Te ponen los pelos de punta los arquetipos?
¡Supera tus miedos con este artículo y domina OpenEHR con las capacidades de InterSystems IRIS for Health!
¿Qué es openEHR?
openEHR es una especificación abierta e independiente del proveedor, diseñada para representar, almacenar e intercambiar información clínica de forma semánticamente rica y sostenible a largo plazo.
Embeddedpy-bridge: Un kit de herramientas para Embedded Python
Visión general
Embedded Python es un cambio radical para InterSystems IRIS, ya que ofrece acceso al vasto ecosistema de Python directamente dentro de la base de datos. Sin embargo, salvar la brecha entre ObjectScript y Python a veces puede parecer bastante complicado.
Para hacer que esta transición sea fluida, podéis usar embeddedpy-bridge
¿Cuantas veces habéis tenido que recibir o generar un JSON y habéis añorado el poder trabajar sobre él haciendo uso de DTLs y sin tener que ir manejando DynamicObjects intentando recordar cual era el nombre de cada campo?
¿Deseas trocear y hacer más digerible tu gigantesco JSON?

En mi caso, nunca, pero he pensado que a alguien le podría resultar de utilidad una funcionalidad que capture tu JSON y lo descomponga en una serie de clases de ObjectScript con las que puedas trabajar de forma más cómoda y sencilla.
Pues bien...¡contemplad el JSON2Class en toda su gloria!
Probablemente os suene esta situación:
Hace tiempo encontraste una función muy especial, $ZU, para un tipo de problema muy concreto. Como una especie de fórmula mística. Esta se popularizó y muchos desarrolladores la utilizaron en su código.
Tras varias versiones y actualizaciones, ISC informa de que vuestro mágico $ZU está obsoleto y ya no es soportado. Se os recomienda reemplazarlo por un nuevo $loquesea().
Entonces, ¿cómo podrías localizar y documentar el uso de este mágico $ZU? Puede estar en clases, en código MAC, INT o INC o incluso distribuido en múltiples namespaces.
¡Sí sí! ¡Adelante! No os habéis equivocado, estáis en vuestra querida Comunidad de Desarrolladores de InterSystems en español.
Os preguntaréis a qué viene el título de este artículo, pues muy sencillo, hoy estamos aquí reunidos para honrar al Inquisidor y elogiar la gran labor desempeñada por el mismo.
Y bien, ¿quién o qué es el Inquisidor?
Perfecto, ahora que he captado vuestra atención, es momento de explicar que es el Inquisidor.
Hola comunidad,
Quería compartir mi experiencia trabajando en proyectos con grandes volúmenes de datos. A lo largo de los años, he tenido la oportunidad de manejar enormes cantidades de datos de pacientes, datos de aseguradoras y registros transaccionales mientras trabajaba en la industria hospitalaria. He tenido la oportunidad de crear informes muy extensos que requerían usar lógicas avanzadas para obtener datos de múltiples tablas, cuyos índices no me ayudaban a escribir un código eficiente.
Esto es lo que he aprendido sobre cómo gestionar grandes volúmenes de datos de manera eficiente.
Elegir el método de acceso a datos adecuado
Como todos sabemos en esta comunidad, IRIS ofrece múltiples formas de acceder a los datos. Elegir el método correcto dependerá de lo que necesitemos.
- Acceso directo a los Globales: el más rápido para operaciones masivas de lectura/escritura. Por ejemplo, si tengo que recorrer índices y obtener datos de pacientes, puedo iterar sobre los globales para procesar millones de registros. Esto ahorra mucho tiempo.
Set ToDate=+H
Set FromDate=+$H-1 For Set FromDate=$O(^PatientD("Date",FromDate)) Quit:FromDate>ToDate Do
. Set PatId="" For Set PatId=$Order(^PatientD("Date",FromDate,PatID)) Quit:PatId="" Do
. . Write $Get(^PatientD("Date",FromDate,PatID)),!- Uso de SQL: útil para requisitos de generación de informes o análisis, aunque más lento para conjuntos de datos muy grandes.
¡Bienvenidos, estimados miembros de la Comunidad!
En este artículo vamos a presentar un ejemplo de un proyecto de implementación de una solución basada en FHIR. Este proyecto se basará en el proyecto nacional (nacional de España), conocido como ÚNICAS.
¿Qué es ÚNICAS?
.png)
Usando sus propias palabras:
Un proyecto cuyo objetivo es crear un ecosistema de alianzas para mejorar la atención sanitaria de pacientes pediátricos con enfermedades minoritarias (EEMM) complejas.
¡Hola a todos!
Es muy fácil importar datos CSV en IRIS. Pero, ¿qué pasa si queremos preservar los IDs originales del CSV?
Recientemente me encontré con la situación en la que necesitaba importar dos CSVs en IRIS que estaban vinculados por una columna que hacía referencia a la columna de otro CSV: una situación típica de clave primaria y clave externa, donde csv1 contiene esta columna como clave primaria, y csv2 como clave externa con IDs relacionados con csv1.

La imagen fue generada por ChatGPT, así que no lo culpéis: hizo lo mejor que pudo al generar países como claves primarias con una relación countries.csv–cities.csv :)
ObjectScript puede parecer solo otro lenguaje de programación, pero aquí está el giro:
Vuestro código aquí puede vivir para siempre (sí, incluso después de que os hayáis pasado a otro proyecto). Por eso es importante mantenerlo ordenado, fácil de leer y a salvo de errores misteriosos.
(Una guía para principiantes para mantener vuestro código ordenado, amigable y preparado para el futuro)
Bienvenidos a la jungla de ObjectScript, donde vuestro código puede tener un alcance global y ser persistente por naturaleza.
Mantengamos las cosas limpias, legibles y resistentes a errores.
¡Saludos estimados miembros de la comunidad!
Muchos recordaréis las capacidades NLP disponibles en IRIS con el nombre de iKnow y que fueron deprecadas hará no mucho tiempo. Pero...¿Deprecado todo? ¡NO! Una pequeña aldea resiste a la deprecación, ¡los índices iFind!
.png)
Y os preguntaréis, ¿para qué valen estos magníficos índices? Pues muy sencillo, sirven para indexar los textos presentes en las columnas de tipo String y Stream y acelerar dramáticamente la velocidad de consulta sobre las mismas.
Seguramente os hayais encontrado durante los últimos 10 - 15 años los términos Data Lake, Data Warehouse, Data Fabric hasta en la sopa, todo se arregla y soluciona con alguna de estas 3 cosas o con alguna combinación de las mismas (aquí y aquí tenéis un par de artículos de nuestra página oficial por si tenéis alguna duda de a qué corresponde cada uno de los términos).
Hola desarrolladores. Solo quería compartir con vosotros un hallazgo que podría ahorraros unos valiosos minutos de vida como desarrolladores con InterSystems IRIS.

¡Como así!
Debería funcionar. Desplegasteis la API REST correctamente y todo está en su lugar.
¿Qué puede estar saliendo mal?
¡Hola, estimados miembros de nuestra comunidad de desarrolladores!
En el artículo de hoy vamos a echar un vistazo a una de las últimas funcionalidades de telemonitorización de nuestras instancias de IRIS que se han añadido al producto. Estoy hablando de la compatibilidad con OpenTelemetry.
.png)
¿Qué es OpenTelemetry?
OpenTelemetry es un framework open source que proporciona las herramientas necesarias como SDKs y estándares para implementar la observabilidad en sistemas y aplicaciones.
.png)
Hola comunidad,
En este artículo, os voy a presentar mi aplicación iris-fhir-bridge.
IRIS-FHIR Bridge es una potente solución de interoperabilidad diseñada para facilitar un intercambio de datos fluido y confiable entre sistemas de salud. Actúa como un puente entre formatos de datos heredados y los estándares modernos FHIR, lo que permite a las organizaciones de atención médica intercambiar información de manera más eficiente.
Pregunta:
¿Cómo podéis crear, modificar, etc., configuraciones de seguridad como Usuarios y Roles programáticamente?
Respuesta:
Podéis usar las clases del paquete Security en el NAMESPACE %SYS. Por ejemplo Security.Roles o Security.Users.
Por supuesto, para llevar a cabo estas acciones, necesitaréis la autorización correspondiente.
Aquí tenéis un pequeño ejemplo usando Security.Roles:
// Create a Role
%SYS>Set status = ##class(Security.Roles).¿A quién no le ha pasado que está desarrollando un precioso ejemplo usando una imagen de IRIS de Docker y le ha fallado el proceso de generación de la imagen en el Dockerfile porque la licencia con la que se creo la imagen no contiene determinados privilegios?
En mi caso lo que estaba desplegando en Docker es una pequeña aplicación que utiliza el tipo de datos Vectorial.
Preguntas frecuentes de InterSystems
La configuración predeterminada para Stay Connected y Pool Size para los hosts de negocio (antiguamente, business service) que utilizan el adaptador TCP es la siguiente:
PoolSize = 1
Si un problema de red causa que se pierda la conexión con un host de negocio, el lado de la producción no podrá detectar esto y no aceptará nuevas conexiones. En esta situación, no se registrará ningún evento en el registro de eventos.
Al lío, que lo bueno, si breve, dos veces bueno.
Jornadas 30ª de Primera División y 34ª de Segunda.
.png)
Predicciones para Primera División:
.png)
Y para Segunda:
.png)
Esto nos da la siguiente Quiniela:
.png)
¡Suerte a todos!
¡Acabo de caer en la cuenta de que nunca terminé esta serie de artículos!

En el artículo de hoy vamos a echar un vistazo a la producción que se encarga de extraer los diagnósticos en CIE-10 más similares a nuestro texto, de tal forma que podamos seleccionar la opción más adecuada desde nuestro frontend.
Buscando similitudes de diagnósticos:
Desde la pantalla que nos muestra las solicitudes de diagnósticos recibidas en HL7 en nuestra aplicación podremos buscar cuales son los diagnósticos CIE-10 más próximos al texto introducido por el profesional.
.png)
Venga que se nos pasa la jornada de la Quiniela. Esta jornada vuelven los partidos de Primera y Segunda División tras el parón de selecciones 29ª jornada en primera y 33ª en Segunda.
.png)
Estas son las predicciones para Primera:
.png)
Y estos los de Segunda:
.png)
Quedando así la Quiniela:
.png)
¡Mucha suerte a todos!
Después de tantos años de espera, por fin tenemos un controlador oficial disponible en Pypi
.png)
Además, encontré el driver JDBC finalmente disponible en Maven desde hace ya 3 meses, y el driver .Net en Nuget desde hace más de un mes.
Como autor de multitud de implementaciones de librerías de Python con soporte de IRIS, quería probarlo. La implementación de DB-API significa que debe ser reemplazable e implementar las funciones definidas en el estándar. La única diferencia entre las diferentes bases de datos debería ser únicamente el SQL.
Y la belleza de usar librerías existentes que ya implementaron la conectividad con otras bases de datos usando el estándar DB-API, es que estas librerías deberían ser totalmente compatibles con el controlador.
Decidí probar el driver oficial de InterSystems implementando su soporte en la librería SQLAlchemy-iris.
Como bien sabréis se ha procedido a eliminar el denominado Private Web Server que venía con cada instalación de IRIS, lo que hace necesario un servidor web externo.
En el caso de los despliegues en docker lo más común es hacer uso de la imagen webgateway (disponible aquí) junto con la de IRIS para poder acceder sin problemas al portal de gestión. Esta imagen se puede configurar para acceder vía HTTPS sin ningún problema configurando los certificados.
¡Hola compañeros!
Otra vez más me he dado cuenta de que no hay una forma supersencilla de mostrar el error de la variable %Status, cosa que necesito con relativa frecuencia desde el terminal.
Sí, conozco las macros $$$, pero no son demasiado útiles en un terminal.
Habitualmente lo que hago es intentar recordar de memoria o copiar de algún sitio la fórmula:
USUARIO>w $System.State.DisplayError(st)Desde la introducción de Embedded Python siempre ha estado la duda sobre su rendimiento respecto a ObjectScript y en más de una ocasión lo he comentado con @Guillaume Rongier , pues bien, aprovechando que estaba haciendo una pequeña aplicación para capturar los datos de los concursos públicos en España y poder realizar búsquedas utilizando las capacidades de VectorSearch he visto la oportunidad de realizar una pequeña prueba.
Después de un más que inmerecido descanso que me tomé la pasada semana, ¡retornamos con nuestras predicciones quinielísticas! Jornadas 27 de Primera División y 30 de Segunda.
Veamos los partidos que entran esta jornada:
.png)
Predicciones para la Primera División:
.png)
Lo mismo para Segunda:
.png)
Veamos que Quiniela resulta de lo anterior:
.png)
Confiemos en que Bordalás esté levantando un tabique en las porterías del Getafe para ese empate.
Pues ya tenemos nueva jornada de Liga y de Quiniela, 25ª de Primera División y 28ª de Segunda. Veamos qué partidos entrarán esta jornada:
.png)
Aquí tenemos la predicción para Primera División:
.png)
Y aquí para Segunda División:
.png)
Esto nos da la siguiente Quiniela:
.png)
¡Mucha suerte esta jornada!
Es posible que hayáis notado que, para configurar un mirror en InterSystems IRIS for Health™ y HealthShare® Health Connect, hay un requisito especial. En este artículo, quiero guiaros paso a paso por el proceso.
Esto supone que ya habéis configurado el segundo miembro de conmutación por error y habéis confirmado un estado exitoso de dicho miembro en el monitor del mirror:
.png)
Paso 1: Activad el usuario HS_Services (en el servidor de respaldo y en el principal)..png)
Paso 2: Cambiad al espacio de nombres HSSYS y dirigíos a Interoperabilidad > Configurar > Credenciales.
