#InterSystems IRIS for Health

0 Seguidores · 498 Publicaciones

InterSystems IRIS for Health™ es la primera y única plataforma de datos global diseñada específicamente para desarrollar aplicaciones que permitan a los servicios médicos administrar los datos más importantes del mundo. Incluye poderosas funciones listas para utilizarse: procesamiento y análisis de transacciones, un modelo flexible para la información de los servicios médicos, implementación de soluciones basadas en FHIR, soporte para las normas de compatibilidad operativa entre los servicios médicos, y mucho más. Todas estas funciones permiten que los desarrolladores realicen aplicaciones valiosas y novedosas rápidamente. Obtener más información.

Artículo Rodolfo Pscheidt Jr · mar 18, 2025 2m read

 

En este artículo, discutiré el uso de un LLM alternativo para la IA generativa. OpenAI es comúnmente utilizado, pero en este artículo os mostraré cómo usarlo y las ventajas de utilizar Ollama.

En el modelo de uso de IA generativa al que estamos acostumbrados, seguimos el siguiente flujo:

  • Tomamos textos de una fuente de datos (un archivo, por ejemplo) y los transformamos en vectores.
  • Almacenamos los vectores en una base de datos IRIS.
  • Llamamos a un LLM (Large Language Model) que accede a estos vectores como contexto para generar respuestas en lenguaje humano.
0
0 91
Anuncio Sergio Farago · mar 14, 2025

Hola, comunidad de IRIS,

InterSystems Certification está desarrollando un examen de certificación para profesionales desarrolladores de InterSystems IRIS, y si coincidís con la descripción del candidato al examen que se indica a continuación, nos gustaría que participéis en la prueba beta del examen.

0
0 42
Artículo Jose-Tomas Salvador · mar 13, 2025 1m read

¡Hola colegas!

A menudo, durante el desarrollo de una aplicación frontend o cualquier otro tipo de comunicación vs API REST, vale la pena tener una Swagger UI - una interfaz de usuario de prueba para la API REST que sigue la especificación Open API 2.0. Por lo general es de gran ayuda, ya que permite, todo en uno, hacer pruebas manuales rápidas vs API REST, con sus respuestas y todos los datos.

Recientemente he introducido el soporte Swagger en la plantilla InterSystems IRIS FHIR para la API FHIR R4:

¿Cómo hacerlo funcionar?

0
1 48
Artículo Luis Angel Pérez Ramos · mar 11, 2025 53m read

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.

Datos para la prueba

0
0 62
Artículo Ricardo Paiva · mar 6, 2025 1m read

Hola,

como me tomó algún tiempo para averiguar lo que está mal, me gustaría compartir esta experiencia, para que no caigáis en la misma trampa.

Acabo de darme cuenta de que si nombráis a vuestro paquete «code» (todo en minúsculas), en una clase que usa algo de python embebido usando [Language = python], os encontraréis con la <THROW> *%Exception.PythonException <PYTHON EXCEPTION> 246 <class 'ModuleNotFoundError'>: No module named 'code.basics'; 'code' is not a package

0
0 43
InterSystems Official Jose-Tomas Salvador · mar 5, 2025

A partir de la versión 2025.1 de la plataforma de datos IRIS® de InterSystems, InterSystems deja oficialmente de utilizar MultiValue y lo incluye en la lista de funciones obsoletas y descatalogadas. Aunque InterSystems seguirá dando soporte a los clientes actuales que utilicen MultiValue, no se recomienda para nuevas aplicaciones.

Qué significa esto para vosotros:

0
0 51
InterSystems Official Mario Sanchez Macias · feb 24, 2025

19 de febrero de 2025 – Alerta: Consultas SQL que están devolviendo resultados incorrectos

InterSystems ha corregido dos problemas que pueden hacer que un pequeño número de consultas SQL devuelvan resultados incorrectos. Además, ha solucionado una inconsistencia en el manejo de los tipos de datos de fecha y hora, lo que podría provocar que algunas aplicaciones existentes que dependían del comportamiento anterior e inconsistente obtengan resultados diferentes e inesperados, aunque correctos.

DP-436825: Algunas consultas SQL con Lateral Join pueden devolver resultados incorrectos

0
0 63
Artículo Luis Angel Pérez Ramos · feb 20, 2025 3m read

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:

Paso 1: Activad el usuario HS_Services (en el servidor de respaldo y en el principal).

2
1 91
Artículo Laura Blázquez García · feb 23, 2025 4m read

Cuando creamos un repositorio FHIR en IRIS, tenemos un endpoint para acceder a la información, crear nuevos recursos, etc. Pero hay algunos recursos en FHIR que probablemente no tengamos en nuestro repositorio, por ejemplo, un recurso Binary (este recurso devuelve un documento, como un PDF, por ejemplo).

He creado un ejemplo en el que cuando se solicita un recurso Binary, el endpoint de FHIR devuelve una respuesta, como si existiera en el repositorio.

0
0 82
InterSystems Official Jose-Tomas Salvador · feb 17, 2025

InterSystems IRIS for Health y HealthConnect son las plataformas tecnológicas líderes en interoperabilidad sanitaria. Si te dedicas a la implementación de soluciones para interconectar sistemas en el sector de la salud, te interesará este curso.

0
0 65
Anuncio Jose-Tomas Salvador · feb 17, 2025

Si eres administrador de sistemas y/o de base de datos y trabajas con InterSystems IRIS, este curso te puede ayudar a mantener tus instancias bien configuradas y con rendimiento óptimo. 

Con el curso de Fundamentos de Administración aprenderás la información esencial y necesaria para configurar la plataforma de datos de InterSystems, realizar tareas de mantenimiento como copias de seguridad, monitorización, resolución de problemas y control de acceso de usuario.

En nuestro portal de formaciónpuedes consultar todos los cursos oficiales programados

0
0 44
Artículo Luis Angel Pérez Ramos · feb 14, 2025 3m read

Es muy habitual en el día a día de los usuarios de IRIS o de Health Connect que sea necesario instalar nuevas instancias o bien actualizar las que ya tienen y en muchas ocasiones no son estos mismos usuarios los que realizan la instalación, si no personal de sistemas que en muchas ocasiones no tiene en consideración las particularidades de la asignación de permisos necesarios para la instalación.

2
0 96
Artículo Ashok Kumar T · feb 12, 2025 5m read

Podéis encontrar errores en cualquier punto de la ejecución del programa, y hay varias formas de generarlos y manejarlos en IRIS. En este artículo, exploraremos cómo gestionar excepciones de manera eficiente.

Uno de los tipos de retorno más utilizados es %Status, que los métodos emplean para indicar éxito o fallo. Vamos a empezar hablando de los valores de %Status.

Trabajando con %Status

0
0 58
InterSystems Official Jose-Tomas Salvador · feb 12, 2025

Nos han desbordado las previsiones. Así que, ante el éxito de asistencia y todos los comentarios recibidos, os anuncio una nueva convocatoria extraordinaria del curso: Desarrollo de asistentes virtuales con RAG. ¡Mantenemos el precio promocional reducido! (plazas limitadas).

1
0 69
Artículo Ricardo Paiva · feb 10, 2025 1m read

En un entorno con contenedores, podéis gestionar la hora de vuestro contenedor mediante la variable TZ o a través de los directorios /etc/timezone y /etc/localtime.

environment:
      - TZ=Europe/Paris
volumes:
    - "/etc/timezone:/etc/timezone:ro"
    - "/etc/localtime:/etc/localtime:ro"

Podéis encontrar ejemplos completos aquí:

IRIS Community

IRISHealth_Community

IRIS production

IRISHealth production

0
0 52
Artículo Joel Espinoza · feb 4, 2025 2m read

Estimada comunidad,

Quería comentarles que hoy publique en OpenExchange un acelerador de APIs muy simple de implementar (con algún parecido a Redis, pero más funcional) y con resultados bastante buenos, a continuación está la publicación del README, espero les sea de ayuda!

https://openexchange.intersystems.com/package/memoria

Memoria

Esta aplicación permite almacenar el resultado de una llamada a la API GET de forma permanente o por un periodo de tiempo, reduciendo los tiempos de respuesta al cliente final.

En el ejemplo a continuación se utiliza la API pública de Rick & Morty para realizar varias consultas al servidor. Cada consulta por sí sola y utilizando la conexión a internet del hogar demora alrededor de 300 ms. Al utilizar el acelerador el tiempo de respuesta es de alrededor de 7 ms.

Cliente

La clase memoria.client es la encargada de llamar al método MGet, este método ejecuta la llamada a la API externa pero primero valida si la información de esta API está cacheada en la tabla memoria.store, de ser así valida que esté dentro del Time to Live (TTL) configurado y retorna el dato, si el TTL ya expiró borra la información y genera la llamada, almacena el resultado y lo retorna al programa.

Código de prueba

Para una API estática, es decir, lista de países, nombre de ciudades, etc., recomiendo usar TTL=0 para mantener la lista en la tienda.

Resultado de la API

En la primera llamada (cuadrado rojo en la parte superior), el tiempo de la llamada fue de 722 ms y en todas las demás llamadas, el tiempo fue de aproximadamente 7 ms, en este caso solo un 1 % del tiempo original.

Después de 10 segundos (valor TTL), el tiempo aumentó a 220 ms

Resultado

Panel

El Panel es una pequeña aplicación que le permite administrar los datos almacenados en caché y eliminarlos si es necesario.

Vista del panel

1
0 61
Artículo Ariel Glikman · feb 4, 2025 3m read

Todos los pods reciben una asignación de Calidad de Servicio (QoS). Existen tres niveles de prioridad dentro de un nodo:

  1. Guaranteed: Alta prioridad
  2. Burstable: Prioridad media
  3. BestEffort: Baja prioridad

Es una forma de indicar al kubelet cuáles son vuestras prioridades en un nodo si es necesario recuperar recursos. Este fantástico GIF de Anvesh Muppeda lo explica.

0
0 71
Artículo Ricardo Paiva · ene 29, 2025 4m read

No estoy seguro de que haya muchos que se conecten a MS SQL para ejecutar consultas, procedimientos almacenados, etc., pero nuestro sistema de salud tiene muchas bases de datos diferentes basadas en MS SQL que usamos en el entorno de interoperabilidad por diversas razones.

Con el impulso de movernos de on-premises a la nube, nos encontramos con algunas dificultades con nuestras conexiones SQL Gateway y cómo configurarlas para usar Microsoft Entra para la autenticación de Active Directory.

0
0 77
InterSystems Official Jose-Tomas Salvador · ene 27, 2025

Ya están disponibles las últimas versiones de mantenimiento extendido de InterSystems IRIS, InterSystems IRIS for Health y HealthShare Health Connect.

✅ 2024.1.3

La versión 2024.1.3 proporciona correcciones de errores para cualquiera de las versiones anteriores 2024.1.x, incluida la corrección para la siguiente alerta recientemente emitida: Alerta: Datos inválidos introducidos en la base de datos y archivos de registro con condiciones específicas...

Podéis encontrar las listas detalladas de cambios y las listas de verificación para la actualización en estas páginas:

0
0 42
Artículo Sergio Farago · ene 27, 2025 3m read

Actualizado 02/27/25

Hola Comunidad,

¿Buscáis una forma de integrar a vuestro equipo con InterSystems IRIS® for Health? Descubrid todo el potencial de esta plataforma utilizando estos recursos de aprendizaje de InterSystems. Con una combinación de formación en línea y presencial, podréis apoyar a los distintos roles de vuestra organización y preparar a vuestro equipo para el éxito.

Recursos para la incorporación en cada rol

Desarrolladores

Administradores de sistemas

Analistas de datos

Integradores de sistemas

Project managers

Otros recursos de los servicios de aprendizaje

  • 💻 Formación online: Registraros gratis en learning.intersystems.com para acceder a cursos a vuestro ritmo, vídeos, ejercicios, rutas de aprendizaje basadas en tareas, programas según roles, ¡y mucho más!
  • 👩‍🏫 Formación presencial: Apuntaos a sesiones de formación en vivo, presenciales o virtuales, o solicitad un curso privado para vuestro equipo. Encontrad más detalles en classroom.intersystems.com.
  • 📘 Documentación de InterSystems IRIS: Materiales de referencia completos, guías y artículos prácticos. Explorad la documentación.
  • 📧 Soporte: Para soporte técnico, escribid a support@intersystems.com.

Oportunidades de certificación

certification badge Una vez que vosotros y vuestro equipo hayáis adquirido suficiente formación y experiencia, ¡obtened la certificación según vuestro rol!

Aprender de la Comunidad

💬 Participad en el aprendizaje en la Comunidad de Desarrolladores: chatead con otros desarrolladores, publicad preguntas, leed artículos y manteneos al día con los últimos anuncios. Consultad esta publicación para obtener consejos sobre cómo aprender en la Comunidad de Desarrolladores.

0
0 95
Artículo Alberto Fuentes · ene 27, 2025 5m read

Me alegra anunciar la nueva versión de IoP, que, por cierto, no es solo una línea de comandos. Lo digo porque el nuevo motor de búsqueda con IA aún cree que IoP es solo una línea de comandos. Pero no lo es. Es todo un framework para construir aplicaciones sobre las funcionalidades de interoperabilidad de IRIS con un enfoque Python.

La nueva versión de IoP: 3.2.0 viene con muchas características nuevas, pero la más importante es el soporte para DTL . 🥳

Tanto para mensajes de IoP como para jsonschema. 🎉

image

Soporte para DTL

A partir de la versión 3.2.0, IoP admite transformaciones DTL.

DTL es la Capa de Transformación de Datos (Data Transformation Layer) en interoperabilidad de IRIS.

Las transformaciones DTL se utilizan para convertir datos de un formato a otro mediante un editor gráfico.
También es compatible con estructuras de jsonschema.

Cómo usar DTL con Mensajes

Primero, tenéis que registrar vuestra clase de mensaje en un archivo settings.py.

Para hacerlo, debéis añadir la siguiente línea en el archivo settings.py:

settings.py

from msg import MyMessage

SCHEMAS = [MyMessage]

Luego, podéis usar el comando de migración de IoP para generar los archivos de esquema para vuestras clases de mensaje.

iop --migrate /path/to/your/project/settings.py

Ejemplo

msg.py

from iop import Message
from dataclasses import dataclass

@dataclass
class MyMessage(Message):
    name: str = None
    age: int = None

settings.py

from msg import MyMessage

SCHEMAS = [MyMessage]

Migrad los archivos de esquema

iop --migrate /path/to/your/project/settings.py

Construyendo una transformación DTL

Para construir una transformación DTL, tenéis que crear una nueva clase de transformación DTL.

Id al Portal de Gestión de Interoperabilidad de IRIS y cread una nueva transformación DTL.

image

Luego, seleccionad las clases de mensaje de origen y destino.

image

Y su esquema.

image

Luego, podéis comenzar a construir vuestra transformación.

image

Incluso podéis probar vuestra transformación.

image

Ejemplo de payload para probar como mensaje de origen:

<test>
  <Message>
    <json><![CDATA[
{
"list_str":["toto","titi"],
"post":{"Title":"foo","Selftext":"baz"},
"list_post":[{"Title":"bar","Selftext":"baz"},{"Title":"foo","Selftext":"foo"}]
}
]]></json>
  </Message>
</test>

Soporte para JsonSchema

A partir de la versión 3.2.0, IoP admite estructuras jsonschema para las transformaciones DTL.

Al igual que con las clases de mensaje, necesitáis registrar vuestro jsonschema.

Para hacerlo, debéis invocar este comando de Iris:

zw ##class(IOP.Message.JSONSchema).ImportFromFile("/irisdev/app/random_jsonschema.json","Demo","Demo")

Donde el primer argumento es la ruta al archivo jsonschema, el segundo argumento es el nombre del paquete y el tercer argumento es el nombre del esquema.

Luego, podéis usarlo en vuestra transformación DTL.

El esquema estará disponible con el nombre de Demo.

Ejemplo de archivo jsonschema:

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "title": "PostMessage",
    "properties": {
        "post": {
            "allOf": [
                {
                    "$ref": "#/$defs/PostClass"
                }
            ]
        },
        "to_email_address": {
            "type": "string",
            "default": null
        },
        "my_list": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "found": {
            "type": "string",
            "default": null
        },
        "list_of_post": {
            "type": "array",
            "items": {
                "allOf": [
                    {
                        "$ref": "#/$defs/PostClass"
                    }
                ]
            }
        }
    },
    "$defs": {
        "PostClass": {
            "type": "object",
            "title": "PostClass",
            "properties": {
                "title": {
                    "type": "string"
                },
                "selftext": {
                    "type": "string"
                },
                "author": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                },
                "created_utc": {
                    "type": "number"
                },
                "original_json": {
                    "type": "string",
                    "default": null
                }
            },
            "required": [
                "title",
                "selftext",
                "author",
                "url",
                "created_utc"
            ]
        }
    }
}

Ejemplo de Transformación DTL con JsonSchema o Clase de Mensaje

Muchos se pueden encontrar en el paquete UnitTest en el directorio ./src/tests/cls.

Class UnitTest.ComplexTransform Extends Ens.DataTransformDTL [ DependsOn = IOP.Message ]
{

Parameter IGNOREMISSINGSOURCE = 1;

Parameter REPORTERRORS = 1;

Parameter TREATEMPTYREPEATINGFIELDASNULL = 0;

XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]
{
<transform sourceClass='IOP.Message' targetClass='IOP.Message' sourceDocType='registerFilesIop.message.ComplexMessage' targetDocType='registerFilesIop.message.ComplexMessage' create='new' language='objectscript' >
<assign value='source.{post}' property='target.{post}' action='set' />
<foreach property='source.{list_str()}' key='k1' >
<assign value='source.{list_str(k1)}_"foo"' property='target.{list_str()}' action='append' />
</foreach>
<foreach property='source.{list_post()}' key='k2' >
<assign value='source.{list_post().Title}' property='target.{list_post(k2).Title}' action='append' />
</foreach>
</transform>
}

}

Nueva documentación

IoP viene con una nueva documentación, la cual está disponible en https://grongierisc.github.io/interoperability-embedded-python/.

Allí encontraréis toda la información que necesitáis para comenzar a usar IoP.

image

Espero que disfrutéis esta nueva versión de IoP. 🎉

0
0 71
InterSystems Official Jose-Tomas Salvador · ene 22, 2025

¡Tenemos un nuevo curso para ti!... pero sólo si te interesa estar a la última en el mundo de la interoperabilidad en entornos sanitarios. 

Igual no lo sabes, pero la familia de productos de InterSystems, con IRIS for Health y Health Connect a la cabeza, son la tecnología base para gestionar e integrar datos clínicos y administrativos de más de la mitad de la población de España... (por no hablar de EEUU, UK, Paises Bajos,...). Así que, teniendo en cuenta esto, si te dedicas al desarrollo de soluciones  o a la implementación de interfaces o integraciones en el sector salud, este es otro curso que no te puedes perder. Pincha y regístrate. ¡¡No lo dudes!!. Más que nada porque las plazas son limitadas... (ahí lo dejo, que luego me dicen que no lo aviso 😉).

1
0 89
Artículo Jose-Tomas Salvador · ene 22, 2025 1m read

En vuestra Producción de Interoperabilidad, siempre podíais tener una Business Operation (BO) que fuera un cliente HTTP y que utilizara OAuth 2.0 para la autenticación. Sin embargo, teníais que personalizar la BO para esta metodología de autenticación. Desde la versión 2024.3, que se lanzó recientemente, hay una nueva capacidad que proporciona nuevos ajustes para gestionar esto de forma más sencilla.

0
0 56
InterSystems Official Mario Sanchez Macias · ene 16, 2025

InterSystems ha corregido un defecto que provoca la introducción de registros no válidos en la base de datos y en los ficheros de journal al utilizar una sintaxis específica de $LIST. La probabilidad de encontrar este defecto es muy baja, pero los impactos operativos pueden ser significativos.

Productos afectados

0
0 58
Artículo Joel Espinoza · ene 9, 2025 2m read

Hola colegas,

Hace unos días me surgio el requerimiento de cargar un archivo parquet, tal y como viene a una tabla en IRIS, así que desarrolló este classmethod que gatilla la carga solo indicando la ruta y nombre del archivo y el nombre de la tabla destino (en el mismo espacio de nombres). Para esto, escribí un pequeño código en Python que requiere las librerías: Pandas, pyarrow y fastparquet, las cuales deben instalar en el directorio de instalación de IRIS según su instalación, en mi caso el comando es:

instalación de pip3 --target /usr/irissys/mgr/python/ pandas pyarrow fastparquet

Para cargar los datos se deberán entregar los siguientes parametros

archivo: ruta completa al archivo parquet a cargar /var/data/archivo.parquet tabla: tabla en la cual se cargaran los datos

desde el terminal: do ##class(testing.python).cargaParquet("/var/data/files/testing-ndoc.parquet","testing.ndoc")

Espero les sea de utilidad.

Class testing.python Extends %RegisteredObject
{

ClassMethod cargaParquet(parquet, tabla) [ Language = python ]
{
    try:
        import pandas as pd
        import iris

        parquet_file= parquet
        df = pd.read_parquet(parquet_file)
        i=0
        linea=""
        valores=""
        sql=""
        max_index = len(df)       
        for x in df.columns:
                linea = linea + x + ","

        linea = linea.replace("_","")[:-1]
        sql="insert into "+ tabla +" (" + linea  + ")"
        while i<max_index:
            for x in df.columns:
                    valores = valores + "'" + str(df.at[i,x]) + "',"
            valores = " values("+ valores[:-1] +")"
            tsc = iris.sql.exec(sql + valores)
            valores=""
            i+=1
    except:
        print("error de carga de registro " +i)
}
}
1
0 105