#Interoperabilidad

0 Seguidores · 127 Publicaciones

En los servicios médicos, la compatibilidad  operativa es la capacidad que tienen los diferentes sistemas en tecnología de la información y aplicaciones de software para comunicarse, intercambiar datos y utilizar la información que se intercambió.

Pregunta Abel Magana · mayo 29, 2024

Tengo un sistema Scada iFIX que soporta VBA comunicando con IRIS mediante sockets. En el entorno VBA del iFIX empleo el control MSWINSCK.OCX que funciona perfectamente con la versión antigua del iFIX. Al querer pasar a la nueva versión de iFIX este control ya no me funciona, es por eso que quiero intentar solucionar el problema comunicando directamente con el OPC que está debajo del iFIX. La idea es mandarle un bit 1 desde IRIS cuando actualizo unos datos, el OPC debería recibirlo en un TAG y el iFIX podría leer del OPC ese bit.

2
0 138
Artículo Jose-Tomas Salvador · jun 3, 2024 1m read

Añadid una credencial para iniciar sesión en la interfaz REST de FHIR - en este caso considerad sólo una autenticación básica

 

Añadid Registro de Servicios - en este caso considerad sólo una autenticación básica

- Configurad un servicio HTTP

- Introducid la ruta al servidor FHIR

- Introducid la URL del servicio FHIR

- Usad la credencial añadida previamente 

 

Añadid una "HS.FHIRServer.Interop.HTTPOperation"

Elegid el Nombre del Servicio

Probad el cliente FHIR

Rastread/seguid el resultado de la prueba

0
1 121
Artículo Carlos Castro · mayo 19, 2024 10m read

Buenas a todos,

en capítulos anteriores, vimos como "Como controlar el acceso a tus recursos con OAuth2". En este primer artículo explicábamos como preparar un acceso seguro a nuestros recursos utilizando la potente herramienta que nos ofrece Intersytems del servidor de Autenticación. Al finalizar el mismo, comentábamos que si quisiéramos podríamos aplicar un control extra a este acceso y esto nos lleva a este artículo, por lo que seguiremos el siguiente índice:

1.- Introducción

   1.1..- De donde venimos

2.- Problema

   2.1.- ¿Cómo funciona la llave (Token)?

3
0 224
Artículo Alberto Fuentes · mayo 20, 2024 4m read

La especificación OpenAPI (OAS) define una interfaz estándar e independiente del lenguaje para las API HTTP que permite tanto a humanos como a ordenadores descubrir y comprender las capacidades del servicio sin acceso al código fuente, la documentación o mediante la inspección del tráfico de red. Cuando se define correctamente, un consumidor puede entender e interactuar con el servicio remoto con una cantidad mínima de lógica de implementación. Aunque para las API basadas en SOAP existe un asistente especial en InterSystems IRIS que reduce el tiempo de desarrollo de las orquestaciones, no todas las API utilizadas en las integraciones son SOAP. Por eso @Jaime Lerga sugirió añadir un asistente similar al de SOAP para generar un cliente REST a partir de la especificación OpenAPI. La implementación de esta idea reduce el tiempo de desarrollo de las orquestaciones REST API con InterSystems IRIS. Esta idea es una de las más populares en las ideas de InterSystems. Este artículo, el tercero de la serie "Ideas implementadas", se centra en la solución OpenAPI Suite desarrollada por @Lorenzo.Scalese.
 

0
0 122
Artículo Ricardo Paiva · mayo 15, 2024 3m read

Configuración de producción

Esta demostración tiene una producción de interoperabilidad con 16 elementos.

Configuración de producción HL7 + Kafka Producer

La primera parte de esta demostración consiste en enviar un archivo HL7 SIU que será transmitido a los otros 2 flujos HL7 (HTTP y TCP), y transformado y transmitido al servidor Kafka. Los flujos HTTP y TCP transformarán los mensajes HL7 del mismo modo antes de enviarlos también a Kafka.

  • 3 Servicios HL7
  • 1 Enrutador HL7
  • 2 Operaciones HL7
  • 1 Operación de Negocio que envía los mensajes transformados a Kafka

Reglas de negocio

0
0 147
Artículo Ricardo Paiva · mar 4, 2022 11m read

Este artículo es una continuación de esta publicación.

En ese artículo revisamos cómo crear y definir mensajes que se utilizan para enviar y recibir datos entre componentes.

En este artículo, explicaré cómo crear una business operation a partir de los métodos para crear componentes.

Revisaremos rápidamente el código al referirnos a la muestra.。

imagen

Nombre del componenteFunción
Start.FileBSUn servicio (BS) que utiliza el adaptador para la entrada de archivos para leer los archivos ubicados en un directorio específico a intervalos regulares.
Start.NonAdapterBSServicios (BS) que permiten a las aplicaciones y a los usuarios introducir información directamente sin utilizar un adaptador.
Start.WS.WebServiceBSServicios (BS) que permiten introducir información mediante servicios web.
Start.WeatherCheckProcessUn proceso (BP) que controla el procedimiento para adquirir información meteorológica y después registrarla en una base de datos.
Start.GetKionOperationLa operación (BO) para transmitir del nombre de la ciudad al servicio web que proporciona la información meteorológica y la devuelve.
Start.SQLInsertOperationOperaciones (BO) que utilizan adaptadores de salida SQL para solicitar el registro de la información meteorológica y de la compra en la base de datos.
Start.InsertOperationOperaciones (BO) que realizan actualizaciones en las tablas de InterSystems IRIS sin utilizar adaptadores.

Nota: BS significa "Business Service", BP significa "Business Process" y BO significa "Business Operation".

Hay que escribir ObjectScript en Business Services y Business Operations y se pueden crear en VSCode o en Studio. Los Business Processes también se pueden llevar a cabo en el Portal de Administración.

No hay un orden particular para crearlos, pero el sitio externo al que se conectará es un sitio público y puede utilizarse inmediatamente en este ejemplo. En este caso, es conveniente comenzar con la business operation para que las pruebas sean más fáciles.

Después de crear los componentes, hay una página de prueba en la producción para los business processes y las business operations. Sin embargo, las pruebas están desactivadas de forma predeterminada en la definición de la producción, para evitar pruebas aleatorias en el entorno de producción.

Para saber más sobre cómo permitir las "Pruebas activadas" en la producción, utiliza la siguiente configuración (la producción de muestra se ha configurado como "Pruebas activadas" de forma anticipada):

imagen

1) Business Operations

En el ejemplo, aparecen dos tipos de business operations.

Una de las operaciones consiste en transmitir el nombre de la ciudad a una API web externa mediante REST y solicitar que se obtenga la información meteorológica. La otra operación consiste en dar la información meteorológica y el nombre del producto comprado a la base de datos de InterSystems IRIS y solicitar el proceso actualizado.

1)-1 Business Operations de REST

Comencemos creando una operación que llame a una API web externa por medio de REST.

Esta operación inicia el método GetKion() cuando se introduce un mensaje Start.Request, consulta a un sitio externo y devuelve la información meteorológica en un mensaje Start.Response.

Consulta aquí los detalles del código.

Para crear una business operation para REST, deberá heredarla de EnsLib.REST.Operation.

Class Start.GetKionOperation Extends EnsLib.REST.Operation

La herencia de esta clase ofrece los siguientes métodos en IRIS que coinciden con los métodos de HTTP. Consulta la documentación para obtener más información.

  • GetURL(): se utiliza para las operaciones GET de HTTP.
  • PostURL(): se utiliza en las operaciones POST de HTTP.
  • PutURL(): se utiliza en las operaciones PUT de HTTP.
  • DeleteURL(): se utiliza en las operaciones DELETE de HTTP.

Para REST, utiliza el adaptador EnsLib.HTTP.OutboundAdapter. Establece el nombre del adaptador en el parámetro ADAPTER y la propiedad Adapter, como se muestra en el ejemplo.

El parámetro INVOCATION configura la Fila.

Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";

Property Adapter As EnsLib.HTTP.OutboundAdapter;

Parameter INVOCATION = "Queue";

Es necesario especificar la clave de la API OpenWeather que se obtendrá en el momento de la ejecución. Hay una forma de mostrar la configuración que varía según el entorno en la configuración de la producción.

El procedimiento es el siguiente:

  1. Define las propiedades
  2. Especifica el nombre de la propiedad que se creó en el parámetro SETTINGS (si hay varias propiedades, sepáralas con comas). De manera opcional, también se puede especificar una categoría (utilizando “property name: category name”).

A continuación se muestra un código de ejemplo.

/// APIキーを指定します
Property appid As %String;
/// specify lang option for OpenWeather API (default = ja = japanese)
Property lang As %String [ InitialExpression = "ja" ];

Parameter SETTINGS = "lang:OpenWeatherMap,appid:OpenWeatherMap";

La página de Configuración de la producción se muestra lo siguiente. La descripción que aparece en la línea inmediatamente anterior a la definición de la propiedad también se muestra en la página de configuración de la producción, como se muestra en la figura.

imagenDespués, revisaremos el mapa de mensajes, que es un escenario esencial para business operations.

La definición anterior permite que el método GetKion() funcione cuando se envíe el mensaje Start.Request.

En el método GetKion(), el nombre de la ciudad puede obtenerse a partir de la propiedad Area para solicitar mensajes transmitidos como información de entrada.

Estableciendo el nombre de la ciudad como parámetro de la URL publicada por la API web externa y llamándolo, se puede obtener la información meteorológica.

La configuración del servidor HTTP y de la URL se realiza en la página de Producción del Portal de Administración. Para obtener la configuración, utiliza la propiedad del Adapter que le proporciona el adaptador de salida de HTTP.

Ejemplo) para especificar una URL, utiliza ..Adapter.URL

Utiliza el método GetURL() que proporcionan las business operations de REST para llamar a un sitio externo. El primer parámetro es la URL que se ejecutará (es decir, la URL que se especifica en los parámetros requeridos como el nombre de la ciudad). El segundo parámetro es la respuesta de HTTP con parámetros transmitidos como referencia.

Como la información meteorológica se almacena en formato JSON en la respuesta HTTP, la operación se completa cuando los datos se registran en el mensaje de respuesta (=pResponse).

imagenEl nombre de la clase de los mensajes de respuesta se especifica en el segundo parámetro del método creado cuando se transmite la referencia.

Method GetKion(pRequest As Start.Request, Output pResponse As Start.Response) As %Status

Para devolver un mensaje de respuesta a la persona que lo llama, crea una instancia del mensaje de respuesta, almacénalo en la segunda variable del parámetro (pResponse), y establece la información necesaria en las propiedades.

set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description
set pResponse.KionMax=weatherinfo.main."temp_max"
set pResponse.KionMin=weatherinfo.main."temp_min"
set pResponse.Area=weatherinfo.name
// this code is fit to Japan time because weatherinfo.dt is UTC
set unixEpochFormat=weatherinfo.dt+32400
set dt=$system.SQL.Functions.DATEADD("s",unixEpochFormat,"1970-01-01 00:00:00")
set pResponse.AreaPublicTime=dt

Como las respuestas HTTP de los sitios externos se devuelven en formato JSON, el flujo que podría obtenerse de la respuesta HTTP se utiliza para convertirla en un objeto dinámico que sea cómodo para llevar a cabo operaciones JSON dentro de IRIS.

set weatherinfo={}.%FromJSON(tHttpResponse.Data)

El siguiente es un ejemplo de una cadena JSON de respuesta:

{
    "coord": {
        "lon": 135.5022,
        "lat": 34.6937
    },
    "weather": [
        {
            "id": 803,
            "main": "Clouds",
            "description": "broken clouds",
            "icon": "04d"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 11.38,
        "feels_like": 8.33,
        "temp_min": 11,
        "temp_max": 12.22,
        "pressure": 1007,
        "humidity": 62
    },
    "visibility": 10000,
    "wind": {
        "speed": 2.57,
        "deg": 220
    },
    "clouds": {
        "all": 75
    },
    "dt": 1611820991,
    "sys": {
        "type": 1,
        "id": 8032,
        "country": "JP",
        "sunrise": 1611784750,
        "sunset": 1611822143
    },
    "timezone": 32400,
    "id": 1853909,
    "name": "Osaka",
    "cod": 200
}

La temperatura máxima, mínima y el tiempo se pueden obtener de la siguiente manera:

set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description
set pResponse.KionMax=weatherinfo.main."temp_max"
set pResponse.KionMin=weatherinfo.main."temp_min"

Si quieres saber más sobre la manipulación de JSON en IRIS, consulta la documentación.

Ahora, utilizaremos la herramienta para realizar pruebas de producción para ver si podemos obtener la información meteorológica de forma correcta.

Abre la página de Producción (Management Portal> Interoperability> Configuration> Production), haz clic en Start.GetKionOperation y, a continuación, haga clic en el botón "Test" en la pestaña "Action".

Especifica un nombre de ciudad (Naha, Sapporo, Nagano, Shinjuku, etc.) en Area, y haz clic en el botón “Run Test Service”.

Aquí puedes ver los resultados de la prueba, con las temperaturas máximas y mínimas y el tiempo registrado.

imagenContinúa para saber cómo utilizar la página Trace.

imagenAl seleccionar un rectángulo horizontal como image en la pantalla izquierda hace que la información en la pantalla derecha, se modifique.

Los mensajes que se envían y reciben durante el proceso de integración del sistema se guardan automáticamente en la base de datos. Mediante la página de mensajes de Visual Trace, se puede ver en detalle qué mensajes se enviaron a qué componentes en orden cronológico y si hubo respuesta o no.

Además, si se produce un error

"Se produjo un error al enviar/recibir/recibir □ mensaje al componente de ○ a △".

aparecerá una marca roja donde se produjo el error para que se pueda ver. Por supuesto, además del seguimiento, también tenemos una página para registrar eventos. (Management Portal > [Interoperability] > [View] > [Event Log])

Seguimos. Vamos a revisar la operación para solicitar una actualización a la base de datos.

1)-2 Business Operations que solicitan actualizaciones a la base de datos

La muestra ofrece dos tipos de operaciones: Start.SQLInsertOperation y Start.InsertOperation.

Cada una de ellas es una operación para solicitar una actualización de la base de datos, pero Start.SQLInsertOperation utiliza el adaptador de salida de SQL, mientras que Start.InsertOperation no tiene ningún adaptador.

La diferencia entre ambos es

se asume que se accede mediante conexiones ODBC/JDBC a la operación que utiliza el adaptador de salida SQL, por lo que el destino de la conexión a la base de datos puede cambiarse en la configuración de la producción.

Para las operaciones que no utilizan adaptadores, se asume que el destino de la actualización de la BD es una base de datos dentro del rango de visibilidad de la configuración de producción y que no se produce ningún cambio en el destino de la conexión.

La base de datos IRIS puede utilizarse para almacenar datos arbitrarios durante la integración del sistema. Sin embargo, supongamos que la configuración del sistema cambia por cualquier razón unos años más tarde, y surge la necesidad de conectarse a una base de datos ubicada en un servidor diferente. En ese caso, la operación sin el adaptador no podrá continuar .

En cambio, las operaciones que utilizan el adaptador de salida SQL pueden funcionar si no hay cambios que procesen el contenido de las especificaciones del destino (si no hay ningún problema con la sentencia SQL que se ejecutará, puede conectarse con bases de datos de diferentes productos).

Durante la integración del sistema, puede haber casos en los que la información de la conexión cambia debido a razones externas al sistema. Por ello, es vital poseer un diseño que pueda responder con flexibilidad a los cambios. Por esta razón, se recomienda crear componentes que soporten conexiones externas de una forma libre de acoplamientos.

Sin embargo, supongamos que no hay ningún cambio en la configuración en el futuro. En ese caso, se podrá acceder a la base de datos en IRIS sin utilizar la conexión ODBC/JDBC, por lo que se podrá optar por utilizar el adaptador o no, dependiendo del tipo de uso.

Vamos a ver el código Start.SQLInsertOperation que utiliza el adaptador.

El adaptador que se utiliza en el ejemplo es un adaptador de salida SQL, que permite solicitar a la base de datos que ejecute sentencias SQL. Distintos adaptadores ofrecen diferentes métodos. Consulta la documentación para más detalles sobre los métodos que proporcionan los adaptadores.

imagenDespués, revisa el código de Start.InsertOperation, sin utilizar el adaptador.

Tanto si se utiliza un adaptador como si no, se requiere el mapa de mensajes y las definiciones de los métodos de la operación. Si no se utiliza un adaptador, no se necesita definir “Paramter” y “Property” para el adaptador.

Business Operations sin adaptadores: En Start.InsertOperation, SQL se ejecuta usando ObjectScript (el comentario de la afirmación es el proceso de actualización en las operaciones de objetos).

La implementación es satisfactoria si la base de datos que se actualiza no se separa de IRIS.

Descubrimos que las operaciones que utilizan adaptadores ofrecen un método fiable para solicitar el procesamiento desde el destino. También confirmamos que es posible crear operaciones sin utilizar adaptadores y escribir código de forma libre para ellas.

En el siguiente artículo, me gustaría explicar cómo crear un business process que llame a las operaciones para obtener información meteorológica y actualizar la base de datos en el orden correcto.

2
0 461
Artículo Ricardo Paiva · mar 15, 2024 5m read

En este artículo, compartiré el tema que presentamos @Rochael Ribeiro y yo en la Convención Anual (Global Summit) 2023, en la sala "Tech Exchange".

En esa ocasión hablamos de los siguientes temas:

  • Herramientas de Open Exchange para Fast APIs (APIs rápidas)
  • Especificación OpenAPI
  • Desarrollo tradicional vs. Fast API
  • APIs Compuestas (Interoperabilidad)
  • Enfoque Spec-First o Api-First 
  • Gobernanza y Monitorización de APIs
  • Demo (vídeo)

Herramientas de Open Exchange para Fast APIs

Como estamos hablando de desarrollo rápido de APIs modernas (Rest / json) utilizaremos dos herramientas de Open Exchange:

La primera es un framework para el desarrollo rápido de APIs, que explicaremos en este artículo.

https://openexchange.intersystems.com/package/IRIS-apiPub

La segunda es utilizar Swagger como interfaz de usuario para la especificación y documentación de las APIs Rest desarrolladas en la plataforma IRIS, así como su uso/ejecución. La base de su funcionamiento es la especificación OpenAPI (OAS) estándar, que se describe a continuación:

 https://openexchange.intersystems.com/package/iris-web-swagger-ui

 

¿Qué es la especificación OpenAPI (OAS)?

Es un estándar utilizado en todo el mundo para definir, documentar y consumir APIs. En la mayoría de los casos, las APIs se diseñan incluso antes de su implementación. Hablaré más de ello en los próximos apartados.

Es importante porque define y documenta las APIs Rest para su uso, tanto en el lado del proveedor como del consumidor. Pero este patrón también sirve para agilizar las pruebas y las llamadas a las API en las herramientas (Clientes de las APIs Rest) del mercado, como Swagger, Postman, Insomnia, etc…

 

Forma tradicional de publicar APIs utilizando IRIS

Imaginemos que tenemos que crear y publicar una API Rest a partir de un método IRIS existente (imagen inferior).

De la forma tradicional:

1: Tenemos que pensar cómo la llamarán los consumidores. Por ejemplo: Qué ruta y verbo se utilizará y cómo será la respuesta. Ya sea en un objeto JSON o como texto plano.

2: Crear un nuevo método en una clase %CSP.REST que administrará la solicitud http para llamarlo.

3: Gestionar la respuesta del método a la respuesta http prevista para el usuario final.

4: Pensar cómo vamos a proporcionar el código de respuesta y cómo vamos a gestionar las excepciones.

5: Mapear la ruta para nuestro nuevo método.

6: Proporcionar la documentación de la API al usuario final. Probablemente crearemos el contenido OAS manualmente.

7: Y si, por ejemplo, tenemos una carga útil (objeto) de solicitud o respuesta, el tiempo de implementación aumentará, porque también debe documentarse en OAS.

 

¿Cómo podemos ser más rápidos?

Simplemente etiquetando el método IRIS con el atributo [WebMethod]. Sea lo que sea, el framework se encargará de su publicación, utilizando el estándar OAS 3.x.

¿Por qué es tan importante el estándar OAS 3.x? 

Porque también documenta detalladamente todas las propiedades de las cargas útiles de entrada y salida.

De esta forma, cualquier herramienta Rest Client del mercado puede acoplarse instantáneamente a las API, como Insomnia, Postman, Swagger, etc. y ofrecer un contenido de muestra para llamarlas fácilmente.

Usando Swagger ya visualizaremos nuestra API (imagen superior) y la llamaremos. Esto también es muy útil para realizar pruebas.

Personalización de la API

Pero, ¿y si necesito personalizar mi API?

Por ejemplo: En vez del nombre del método, quiero que la ruta sea otra cosa. Y quiero que los parámetros de entrada estén en la ruta, no como un parámetro de consulta.

Definimos una notación específica en la parte superior del método, donde podemos complementar la metainformación que el propio método no proporciona.

En este ejemplo estamos definiendo otra ruta para nuestra API y complementando la información para que el usuario final tenga una experiencia más amigable.

Mapa de proyección para APIs Rest

Este framework soporta numerosos tipos de parámetros.

En este mapa podemos destacar los tipos complejos (los objetos). Se expondrán automáticamente como una carga útil JSON y cada propiedad estará debidamente documentada (OAS) para el usuario final .

 

Interoperabilidad (APIs compuestas)

Al admitir tipos complejos, también se pueden exponer servicios de interoperabilidad.

Es un escenario favorable para crear APIs compuestas, que utilizan la orquestación de múltiples componentes externos (salidas).

Esto significa que los objetos o mensajes utilizados como solicitud o respuesta serán publicados y leídos automáticamente por herramientas como swagger.

Y es una forma excelente de probar componentes de interoperabilidad, porque normalmente ya se sube una plantilla de carga útil para que el usuario sepa qué propiedades utiliza la API.

En primer lugar, el desarrollador puede centrarse en las pruebas y, a continuación, dar forma a la API mediante la personalización.

Enfoque Spec-first o Api-first

Otro concepto muy utilizado hoy en día es tener la API definida incluso antes de su implementación.

Con este framework es posible importar una especificación OpenAPI. Crea la estructura de los métodos (especificación) automáticamente, y faltaría sólo su implementación.

Gobernanza y monitorización de APIs

Para la gobernanza de las APIs, también se recomienda utilizar conjuntamente IAM.

Además de disponer de múltiples plugins, IAM puede acoplarse rápidamente a las APIs a través del estándar OAS.

apiPub ofrece trazabilidad adicional para las APIs (ver el video demostración)

Demostración

<iframe allowfullscreen="" frameborder="0" height="432" scrolling="no" src="https://www.youtube.com/embed/IdJ1PqmhH3c" width="768"></iframe>

Descarga y documentación

Intersystems Open Exchange: https://openexchange.intersystems.com/?search=apiPub

Documentación completa: https://github.com/devecchijr/apiPub

0
0 228
Artículo Kurro Lopez · ene 17, 2024 3m read

Hola comunidad,

Cuando utilizamos un Business Servicio de tipo SQL, puede suceder que necesitemos replicar ciertas filas de la tabla original.

Tomemos como ejemplo el Business Service  "from customer SQL" usando la clase genérica EnsLib.SQL.Service.GenericService

Surgen diferentes casos, dependiendo de la configuración utilizada en este Business Service.

Primer caso:

Si el Business Service solo usa un KeyFieldName

En este caso, para reprocesar los IDs 123,456 y 789, bastará con eliminarlos de la variable global ^Ens.AppData del Business Service correspondiente en la referencia "adaptor.sqlrow":

0
0 113
Artículo Ricardo Paiva · nov 9, 2023 3m read

El problema

En un entorno clínico acelerado, en el que la toma rápida de decisiones es crucial, la falta de sistemas eficientes de almacenamiento y acceso a los documentos plantea varios obstáculos. Aunque existen soluciones de almacenamiento de documentos (por ejemplo, FHIR), el acceso y la búsqueda eficaz de datos específicos de pacientes dentro de esos documentos puede suponer todo un reto.

La motivación

La IA ha hecho que la búsqueda de documentos sea extraordinariamente potente. Preguntar y responder sobre documentos nunca ha sido tan fácil con herramientas de código abierto como Chroma y Langchain para almacenar y utilizar incrustación de palabras (vector embeddings) para consultas a las APIs de IA generativa. Con un esfuerzo más dedicado, las organizaciones están indexando sus documentos existentes y construyendo versiones ajustadas de GPT con fines empresariales. La charla de Andrej Karpathy sobre el estado de GPT ofrece un excelente resumen general sobre este tema.

Este proyecto fue nuestro intento de reducir la fricción en todos los puntos de contacto en los que el personal médico tiene que interactuar con documentos. Desde la entrada y la gestión hasta el almacenamiento y la recuperación, hemos aprovechado IRIS FHIR y la IA para ayudarles a almacenar y encontrar la información que necesitan sin esfuerzo.

La solución

Hemos creado una aplicación web full-stack que permite a los médicos grabar notas de voz. A continuación, estas notas pueden transcribirse y resumirse mediante Open AI y almacenarse en servidores FHIR. Después, los documentos almacenados se indexan y están disponibles para la búsqueda semántica.  

Video de demostración

<iframe width="560" height="315" src="https://www.youtube.com/embed/3Th6bR4rw0w?si=Fc2dCaYuUte0ZCQ7" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

Características principales

  1. Aplicación web - Para ver información clínica sobre pacientes, observaciones y encuentros. Está construida utilizando Vue.js.
  2. Transcripción de voz - Open AI Whisper API se utiliza para transcribir con precisión las grabaciones de voz a texto.
  3. Resumen de texto - A continuación, el contenido transcrito puede resumirse y darle un título en el formato requerido. Por ejemplo, secciones específicas como síntomas, diagnóstico, etc. Esto se consigue mediante la API de completado de texto de Open AI utilizando el modelo text-da-vinci-003.
  4. Almacenamiento de documentos - A continuación, los documentos resumidos se almacenan en FHIR utilizando el recurso Document Reference.
  5. Búsqueda semántica de documentos - Los documentos almacenados se indexan y almacenan en Chroma como fragmentos. Esto se utiliza después para limitar el espacio de búsqueda y utilizar los tokens GPT con moderación para la búsqueda semántica mediante Langchain. Actualmente, cargamos los documentos en el momento de la búsqueda debido al menor número de documentos disponibles. Esto puede modificarse para indexar en segundo plano de forma asíncrona.
  6. Exportación de documentos - Por último, existe una opción para exportar documentos a Google Docs y otros datos a Google Sheets. Los usuarios pueden iniciar sesión con sus cuentas específicas mediante OAuth y exportar los documentos para facilitar la colaboración y la comunicación con otros médicos o pacientes.

Probadlo

Clonad el repositorio del proyecto desde este enlace de GitHub: https://github.com/ikram-shah/iris-fhir-transcribe-summarize-export. Seguid las instrucciones proporcionadas para configurar el proyecto localmente en vuestros equipos. Y hacednos saber si algo no funciona como se esperaba.

Reflexiones y comentarios

Los avanzados modelos de lenguaje disponibles actualmente, combinados con el enorme volumen de datos disponibles, encierran un inmenso potencial para revolucionar la atención sanitaria, especialmente en lo relativo a los documentos.

Dejadnos vuestros comentarios a continuación. Publicaremos más artículos con los detalles técnicos de este proyecto.

0
0 116
Artículo Luis Angel Pérez Ramos · nov 4, 2023 5m read

Recientemente me comentaron sobre la necesidad de monitorizar desde HealthConnect los registros presentes en una base de datos NoSQL en el Cloud, más en concreto Cloud Firestore, desplegada en Firebase. Con un rápido vistazo pude ver lo sencillo que resultaría crear un Adapter ad-hoc para realizar la conexión aprovechando las capacidades de Embedded Python, así que me puse manos a la obra.

Preparando el entorno

0
0 94
Artículo Ricardo Paiva · ago 7, 2023 2m read

Al crear componentes personalizados, a menudo es necesario agregar propiedades a la clase para configuraciones adicionales que se usarán en la inicialización o en la operación del componente. El nombre de la propiedad en sí no siempre es muy descriptivo, por lo que es una ventaja tener una pantalla de título personalizada con el campo.

En Caché, era bastante sencillo:

TEST> Set^CacheMsg("EnsColumns","en-us","<property name>") = "<caption>"

Pero implica un poco más de esfuerzo en IRIS...

0
0 87
Artículo Alberto Fuentes · ago 3, 2023 4m read

¡Hola Comunidad!

Como sabéis, las soluciones de Interoperabilidad de InterSystems IRIS contienen diferentes elementos de la solución, como: producciones, reglas de negocio, procesos, transformaciones de datos, mapeos de registros, etc. Y a veces podemos crear y modificar estos elementos con herramientas visuales en la UI. Y por supuesto necesitamos una forma práctica y sólida de controlar el código fuente con los cambios realizados con herramientas de UI.

Durante mucho tiempo, esto era un proceso de configuración manual (exportar clase, elemento, global, etc.) o engorroso, por lo que el tiempo ahorrado con la automatización del control de fuentes de la UI competía con el tiempo perdido en configurar y mantener la configuración.

Ahora ese problema ya no existe. Con dos enfoques: desarrollo "package first" y uso del paquete IPMgit-source-control, de @Timothy.Leavitt.

Os explico los detalles a continuación.

0
0 159
Artículo Alberto Fuentes · jul 28, 2023 7m read

¡Hola Comunidad!

Me alegra anunciar la nueva versión de iris-pex-embedded-python (v2.3.1) con una nueva interfaz de línea de comandos.

Esta línea de comandos se llama iop por Interoperability On Python.

Primero me gustaría presentar los principales cambios del proyecto desde la versión 1.

Breve historia del proyecto

La versión 1.0 fue una prueba de concepto para mostrar cómo el framework de interoperabilidad de IRIS se puede utilizar con un enfoque python first mientras sigue siendo compatible con cualquier código existente de ObjectScript.

¿Qué significa eso? Significa que cualquier desarrollador Python puede usar el framework de interoperabilidad de IRIS sin ningún conocimiento de ObjectScript.

Ejemplo:

from grongier.pex import BusinessOperation

class MyBusinessOperation(BusinessOperation):

    def on_message(self, request):
        self.log.info("Received request")

Genial, ¿cierto?

Con la versión 1.1, añadí la posibilidad de registrar esas clases de Python en IRIS con una función auxiliar.

from grongier.pex import Utils

Utils.register_file("/src/MyBusinessOperation.py")

La versión 2.0 fue una versión major porque podías instalar el proyecto directamente con pip.

pip install iris-pex-embedded-python

Novedades de la versión 2.3.1

La versión 2.3.1 es también una versión major porque introduce una nueva interfaz de línea de comandos.

Esta interfaz de línea de comandos se puede utilizar con este proyecto de Python basado en este módulo o quizá con proyectos que no utilicen este módulo.

Permitidme presentarla y explicar por qué se puede utilizar en proyectos que no son de Python.

La interfaz de línea de comandos

La línea de comandos forma parte de este proyecto. Para instalarla, solo hay que instalar el proyecto con pip.

pip install iris-pex-embedded-python

Después, se puede usar la línea de comandos iop para iniciar el framework de interoperabilidad.

iop

salida:

usage: iop [-h] [-d DEFAULT] [-l] [-s START] [-k] [-S] [-r] [-M MIGRATE] [-e EXPORT] [-x] [-v] [-L]
optional arguments:
  -h, --help            display help and default production name
  -d DEFAULT, --default DEFAULT
                        set the default production
  -l, --lists           list productions
  -s START, --start START
                        start a production
  -k, --kill            kill a production (force stop)
  -S, --stop            stop a production
  -r, --restart         restart a production
  -M MIGRATE, --migrate MIGRATE
                        migrate production and classes with settings file
  -e EXPORT, --export EXPORT
                        export a production
  -x, --status          status a production
  -v, --version         display version
  -L, --log             display log

default production: UnitTest.Production

Vamos a ver algunos ejemplos.

help

El comando help muestra la ayuda y el nombre de producción predeterminado.

iop -h

salida:

usage: python3 -m grongier.pex [-h] [-d DEFAULT] [-l] [-s START] [-k] [-S] [-r] [-M MIGRATE] [-e EXPORT] [-x] [-v] [-L]
...
default production: PEX.Production

default

El comando default especifica la producción predeterminada.

Sin parámetros, muestra la producción predeterminada.

iop -d

salida:

default production: PEX.Production

Con un parámetro, especifica la producción predeterminada.

iop -d PEX.Production

lists

El comando lists enumera las producciones.

iop -l

salida:

{
    "PEX.Production": {
        "Status": "Stopped",
        "LastStartTime": "2023-05-31 11:13:51.000",
        "LastStopTime": "2023-05-31 11:13:54.153",
        "AutoStart": 0
    }
}

start

El comando start inicia una producción.

Para salir del comando, hay que pulsar CTRL+C.

iop -s PEX.Production

Si no se da un parámetro, el comando start inicia la producción predeterminada.

iop -s

salida:

2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting production
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.FileOperation
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.EmailOperation
...

kill

El comando kill finaliza una producción (force stop).

El comando Kill es el mismo que el comando stop, pero con un force stop.

El comando Kill no utiliza parámetros porque sólo se puede estar ejecutando una producción.

iop -k 

stop

El comando stop detiene una producción.

El comando Stop no toma un parámetro porque solo se puede estar ejecutando una producción.

iop -S 

restart

El comando restart reinicia una producción.

El comando restart no utiliza parámetros porque solo se puede estar ejecutando una producción.

iop -r 

migrate

El comando migrate migra una producción y clases con el archivo de configuración.

El comando migrate debe tomar la ruta absoluta del archivo de configuración.

El archivo de configuración debe estar en la misma carpeta que el código Python.

iop -M /tmp/settings.py

export

El comando export exporta una producción.

Si no se da un parámetro, el comando export exporta la producción predeterminada.

iop -e

Si se da un parámetro, el comando export exporta la producción dada en el parámetro.

iop -e PEX.Production

salida:

{
    "Production": {
        "@Name": "PEX.Production",
        "@TestingEnabled": "true",
        "@LogGeneralTraceEvents": "false",
        "Description": "",
        "ActorPoolSize": "2",
        "Item": [
            {
                "@Name": "Python.FileOperation",
                "@Category": "",
                "@ClassName": "Python.FileOperation",
                "@PoolSize": "1",
                "@Enabled": "true",
                "@Foreground": "false",
                "@Comment": "",
                "@LogTraceEvents": "true",
                "@Schedule": "",
                "Setting": [
                    {
                        "@Target": "Adapter",
                        "@Name": "Charset",
                        "#text": "utf-8"
                    },
                    {
                        "@Target": "Adapter",
                        "@Name": "FilePath",
                        "#text": "/irisdev/app/output/"
                    },
                    {
                        "@Target": "Host",
                        "@Name": "%settings",
                        "#text": "path=/irisdev/app/output/"
                    }
                ]
            }
        ]
    }
}

status

El comando status muestra el estado de una producción.

El comando status no toma un parámetro porque solo se puede estar ejecutando una producción.

iop -x 

salida:

{
    "Production": "PEX.Production",
    "Status": "stopped"
}

Los estados pueden ser:

  • stopped (parado)
  • running (ejecutándose)
  • suspended (suspendido)
  • troubled (con problemas)

version

El comando version muestra la versión.

iop -v

salida:

2.3.0

log

El comando log muestra el log.

Para salir del comando hay que pulsar CTRL+C.

iop -L

salida:

2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting production
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.FileOperation
2021-08-30 15:13:51.000 [PEX.Production] INFO: Starting item Python.EmailOperation
...

¿Se puede utilizar fuera del proyecto iris-pex-embedded-python?

Esa es vuestra elección.

Pero me gustaría explicaros por qué creo que se puede utilizar fuera del proyecto iris-pex-embedded-python.

Primero, porque puede interactuar con producción sin la necesidad de usar un iris shell. Eso significa que es más fácil de usar en un script.

En segundo lugar, porque settings.py se puede utilizar para importar producción y clases con variables de entorno.

Este es un ejemplo de settings.py :

import os

PRODUCTIONS = [
        {
            'UnitTest.Production': {
                "Item": [
                    {
                        "@Name": "Python.FileOperation",
                        "@ClassName": "Python.FileOperation",
                        "Setting": {
                            "@Target": "Host",
                            "@Name": "%settings",
                            "#text": os.environ['SETTINGS']
                        }
                    }
                ]
            }
        } 
    ]

Prestad atención al valor #text. Es una variable de entorno. Genial, ¿verdad?

¿Os gustaría usar esta herramienta de línea de comandos? ¿Merece la pena seguir desarrollándola?

Gracias por leer el artículo y espero vuestros comentarios.

0
0 86
Artículo Alberto Fuentes · jul 4, 2023 2m read

Hoy en día es muy común que los datos que necesitas vengan de diferentes fuentes (e.g. aplicaciones externas e internas, distintas bases de datos y servicios, APIs, etc.). Además, seguro que tienes múltiples tipos de consumidores diferentes (e.g. usuarios finales, otras aplicaciones, servicios que publicas a terceros, etc.) y cada uno necesitará acceder a la información de forma diferente y para distintos objetivos. ¿Cómo construir una capa que de forma sencilla te permita gestionar estas necesidades? Hoy hablamos de Data Fabric 👈.

image

Un Enterprise Data Fabric realmente es una arquitectura que te ayuda a agilizar y simplificar el acceso a tus datos a lo largo de las distintas necesidades que tengas. Accede a datos de diferentes fuentes, los transforma y armoniza bajo demanda para hacerlos usables para diferentes patrones de consumo.

Es una arquitectura realmente interesante (¡y no lo digo sólo yo! 😄), de hecho en informes de Gartner aparece como "el futuro de la gestión de datos".

Smart Data Fabric sigue esta línea y añade además capacidades para incluir analytics, exploración de datos, explotación de algoritmos de machine learning directamente en esta capa y haciendo más fácil poder hacer análisis y construir aplicaciones. Y además es la visión que tenemos en InterSystems.

Comparto con vosotros un sencillo pero detallado ejemplo para que le echéis un vistazo directamente a algunas de las características de InterSystems IRIS que puede ayudaros a construir Smart Data Fabrics.

Si tenéis cualquier duda o aporte, por aquí estaré.

0
0 160
Artículo Jose-Tomas Salvador · jun 29, 2023 2m read

¡Hola Comunidad!

Me gustaría compartir con vosotros un ejercicio que he hecho para crear "mi propio" chat con ChatGPT en Telegram.

Ha sido posible gracias a dos componentes de Open Exchange: Telegram Adapter, de @Nikolay Solovyev e IRIS Open-AI, de @Kurro Lopez 

Así que con este ejemplo podréis configurar vuestro propio chat con ChatGPT en Telegram. 

¡Veamos cómo hacerlo funcionar!

0
0 313
Artículo Daniel Aguilar · jun 26, 2023 9m read

 

¡Hola Comunidad!

¿Habéis tenido que conectar alguna vez IRIS con un sistema SAP?

Tuve que enfrentarme al reto de conectar InterSystems IRIS con SAP, y una vez más pude comprobar el gran acierto que hizo InterSystems añadiendo la posibilidad de ejecutar código nativamente de Python desde IRIS.

Esto me hizo la integración muy fácil gracias a la librería pyrfc.

Con esta librería, fui capaz de realizar llamadas a RFC's de SAP (Remote Function Call) desde una clase de IRIS y recibir datos de la base de datos de SAP.

1
0 315
Pregunta Kurro Lopez · jun 1, 2023

Hola a todos,

Me pregunto si es posible llamar a un BO desde una enrutador HL7 de acuerdo con un parámetro del mensaje HL7

Quiero decir,

De acuerdo con la identidad del laboratorio, quiero llamar a otro proceso TCP para recuperar información sobre análisis de sangre.

Estamos creando el BO usando este patrón.

LAB.BO.TCP. + nombre del laboratorio.

El nombre del laboratorio se almacena en la tabla de consulta T_LABORATORIOS

Intenté asignar el nombre a una variable y ponerlo en la instrucción "send", pero no funciona.

1
0 144
Artículo Ricardo Paiva · mayo 25, 2023 1m read

Cuando se desarrollan producciones de interoperabilidad, puede ser útil tener configuraciones fuera de un Business Host. La razón principal es cuando necesitas una configuración que afecte a varios Business Hosts diferentes y quieres garantizar que el valor es el mismo. Aunque las Configuraciones Predeterminadas del Sistema (CPS) pueden ser usadas para propagar configuraciones para Business Hosts, pueden ser cambiadas al anular el valor a nivel de BH (aunque la ventaja de las configuraciones del Business Host definidas a través de las CPS es que no requieren código personalizado, que sí es requerido por nuestro enfoque actual).
Otra razón es cuando necesitas afectar partes no configuradas de la configuración del Business Host (PoolSize, Enabled, etc.)

Añadiremos una configuración env a una producción.

0
0 93
Artículo Luis Angel Pérez Ramos · abr 17, 2023 6m read

Comenzamos esta nueva entrega recordando que hicimos en los anteriores artículos de configuración del EMPI:

  • Instalado en modo Standalone el Patient Index sobre una instancia de HealthShare.
  • Configurado los parámetros básicos para empezar a trabajar con el EMPI.
  • Definido los índices y pesos particulares para nuestro proceso NICE.

Muy bien, estamos ya practicamente preparados para echar a rodar nuestro EMPI. Sólo nos queda un detalle, arrancar la producción creada por la instalación para poder empezar a trabajar.

0
1 198
Artículo Luis Angel Pérez Ramos · abr 5, 2023 10m read

Bienvenidos miembros de la comunidad a un nuevo artículo, en esta ocasión trataremos las capacidades de interoperabilidad que nos proporciona IRIS for Health para trabajar con ficheros DICOM.

Para ello vamos a montar un pequeño ejemplo haciendo uso de Docker. Al final del artículo podréis encontrar la URL de acceso a GitHub por si queréis verlo en acción en vuestros propios equipos.

Pero antes de empezar vamos a explicar que es DICOM:

0
0 672
Artículo Luis Angel Pérez Ramos · mar 7, 2023 12m read

Hemos visto como instalar nuestro EMPI en modo standalone y, parafraseando a Fray Luis de León, como decíamos ayer, procederemos a exponer como realizar una configuración básica, sin demasiadas pretensiones, de nuestro EMPI.

Primeramente deberemos realizar la configuración básica inicial, y para ello deberemos acceder a la opción del menú de Configuración de nuestro Registry.

Desde esta opción tendremos acceso a la tabla de configuración básica de nuestro Registry:

En este menú deberemos incluir los siguientes parámetros y actualizar el valor de los que ya estén presentes:

0
0 200
Artículo Luis Angel Pérez Ramos · mar 1, 2023 2m read

Hoy os voy a presentar como configurar uno de los productos disponibles en HealthShare, el Enterprise Master Patient Index o EMPI.

El EMPI proporcionará a cualquier organización un índice maestro de pacientes que permitirá identificar de forma unívoca a cada paciente de nuestra organización. Podéis encontrar más información al respecto en la siguiente url: https://www.intersystems.com/es/plataforma-de-interoperabilidad/patient…

0
0 150
Artículo Alberto Fuentes · mayo 20, 2022 3m read

Si estás desarrollando soluciones en IRIS y quieres utilizar Git, ¡es genial! Sólo tienes que utilizar VSCode con un repositorio git local y enviar los cambios al servidor, así de fácil.

Pero qué sucede si:

  • Colaboras con otros desarrolladores en un entorno de desarrollo remoto compartido y quieres evitar la edición simultánea del mismo archivo
  • Utilizas editores basados en el portal de administración para BPL, DTL, tablas dinámicas, cuadros de mando, etc. y quieres incluir esos elementos en el control de código de forma sencilla.
  • Aún utilizas Studio para realizar algunas cosas y/o ocasionalmente vuelves a usarlo desde VSCode. O tu equipo todavía no ha adoptado completamente VSCode y algunos miembros del equipo todavía quieren utilizar Studio
  • Trabajas en varios proyectos diferentes al mismo tiempo en el mismo namespace - digamos, en varios paquetes definidos mediante InterSystems Package Manager - y quieres trabajar con todos ellos desde una vista de edición de isfs (en vez de en varios proyectos distintos) con los cambios rastreados automáticamente en el repositorio de git apropiado

En ese caso no era tan sencillo... hasta finales del año pasado, cuando lanzamos Git para Entornos de Desarrollo Compartidos (Open Exchange / GitHub).

Puedes descargar esta extensión mediante InterSystems Package Manager:

zpm "install git-source-control"

Antes de esto, las opciones para controlar las fuentes con Git eran una antigua extensión de Git, principalmente para Windows, y sólo para entornos de desarrollo local y un proyecto más reciente de Open Exchange basado en él pero más sencillo. También está Port, que únicamente maneja archivos y es independiente del sistema de control de versiones.

¿Qué tiene git-source-control que no tienen estos paquetes?

  • Una integración sencilla con git, basada en un menú, que funciona en cualquier sistema operativo
  • Una interfaz de usuario de git para cubrir un conjunto de operaciones comunes de git, sin tener que conectarse con SSH al entorno remoto.
  • Control de concurrencia para múltiples usuarios que trabajan en el mismo entorno al mismo tiempo. Una vez que realizas cambios en una clase/rutina/etc., se vuelve tuya hasta que se descarten o se confirmen los cambios. (Sin embargo, tenemos formas de evitarlo cuando es necesario)
  • Integración con el administrador de paquetes: simplemente usa zpm mediante "load -dev /path/to/package" y si "/path/to/package/.git" existe, los cambios en los recursos de tu paquete se reflejarán automáticamente en el sitio correcto del sistema de archivos del servidor. La interfaz de usuario también funciona con esto, basada en la clase/etc. desde la que se ejecuta.

Todo esto funciona desde VSCode:

Spoiler

Y Studio:

 
Spoiler

Para que tengas el control y la visión de tu repositorio de git:

 
Spoiler

Esperamos que esto permita desarrollar con éxito las soluciones basadas en IRIS.

¡Agradecemos vuestros comentarios!

NOTA: Para ver la presentación del lanzamiento en el Global Summit de 2021, consultad este artículo: https://community.intersystems.com/post/video-git-gitlab-shared-development-environments

1
1 273
Artículo Alberto Fuentes · feb 28, 2023 2m read

¡Hola a todos!

Comparto con vosotros una herramienta para la ingestión de datos que hemos utilizado en varios proyectos.

DataPipe es un framework de interoperabilidad para la ingestión de datos de forma flexible con InterSystems IRIS. Te permite recibir datos desde el exterior, normalizar y validar la información y finalmente realizar cualquier operación sobre tus datos.

Modelo

Lo primero que necesitas es definir un modelo. Un modelo es una clase que extiende de DataPipe.Model donde necesitas implementar algunos métodos:

En el modelo defines cómo serializar / deserializar la información, cómo normalizar y validar la información y finalmente qué operación quieres ejecutar sobre tus datos una vez estén validados y normalizados.

Aquí tienes un ejemplo completo de un modelo de DataPipe.

Componentes de interoperabilidad

Después de definir el modelo, puedes incorporar los componentes necesarios a una producción de interoperabilidad.

Necesitarás implementar un proceso para la ingestión que especifique:

  • Transformación de Input > InboxAttributes donde defines cómo extraer atributos que describan la información de entrada. Estos atributos son importantes para después realizar búsquedas sobre tus datos.
  • Transformación de Input > Modelo donde se indica cómo transformar la información entrante a tu modelo de DataPipe.

El resto de componentes ya están pre-construidos por DataPipe. Tienes un ejemplo completo de una producción aquí.

DatapipeUI

Además del DataPipe, tienes la posibilidad de incorporar una interfaz gráfica para gestionar los datos que se ingieren en el sistema.

Despliegue

Todo lo anterior lo puedes desplegar con una instancia de InterSystems IRIS, donde instalas DataPipe (y RESTForms2 para las APIs REST) y una aplicación web aparte que se comunica con la instancia.

Si estáis interesados y queréis echarle un vistazo y probarlo, tenéis toda la información en la aplicación de Open Exchange.

0
0 234
InterSystems Official Jose-Tomas Salvador · feb 22, 2023

Comenzando este año 2023, hemos programado una serie de cursos oficiales sobre InterSystems IRIS que iremos realizando a lo largo del año. Los cursos se impartirán on-line y ya están abiertos para que os podáis registrar si estáis interesados (hasta un máximo de 10 personas por curso, quorum mínimo 5 asistentes). Toda la información está disponible en nuestro sitio web: Formación en el aula virtual | InterSystems

0
0 118
Artículo Pierre-Yves Duquesnoy · jun 16, 2020 26m read

Introducción

InterSystems IRIS 2020.1 incluye PEX (Production EXtension Framework), para facilitar el desarrollo de producciones de Interoperabilidad de IRIS con componentes escritos en Java o .NET.

Gracias a PEX, un desarrollador de integraciones con conocimientos Java o .NET puede beneficiarse de la potencia, escalabilidad y robustez del framework de Interoperabilidad de InterSystems IRIS, y ser productivo en muy poco tiempo.

1
0 595
Artículo Philipp Bonin · dic 30, 2022 2m read

El concepto de desarrollo "low code" es cada vez más importante en todas las industrias. Y todo el que empieza con el desarrollo low code, se acabará encontrando inevitablemente con Node-RED. InterSystems IRIS es reconocido por su interoperabilidad y por eso debería ser accessible a través de Node-RED.

Para aquellos que no habéis oído hablar de Node-RED todavía: Node-RED es una herramienta de desarrollo Low-Code, basada en los llamados "nodos", que se organizan en flujos. Los nodos procesan los mensajes entrantes y los envían al siguiente nodo conectado. Debido a su gran comunidad, Node-RED ofrece una gran variedad de nodos para todo tipo de aplicaciones.

Conocido esto, sería muy útil tener un nodo que pudiera interactuar con InterSystems IRIS, ¿verdad? ¡Y eso es exactamente lo que he hecho!

0
0 107
Artículo Ricardo Paiva · dic 28, 2022 4m read

  

Hace unos meses hablábamos Jose y yo sobre el vídeo Servicios de datos inteligentes (Visión & Demo), realizado por @Amir Samary y, durante la charla, empezamos a preguntarnos qué tipo de características sería bueno incluir en las futuras soluciones de IRIS. 

Una de las funcionalidades con las que sería bueno contar es una solución iPaaS para IRIS, como le pregunté a Amir en este comentario.

Estos últimos meses he tenido la oportunidad de trabajar con diferentes proyectos y tecnologías, así como familiarizarme con aplicaciones como Tray.io o Workato, y ahora puedo ver lo increíble que sería tener una solución iPaaS para IRIS.

La interoperabilidad que ofrece IRIS tiene mucho potencial, cuenta con un maravilloso motor oculto, y esto podría ser algo único que vale la pena analizar.

Pero esta funcionalidad conlleva una gran complejidad y requiere tener muchos conocimientos técnicos. ¿Qué pasaría si pudiéramos reducir dicha complejidad, ofreciendo al usuario una solución más sencilla, pero que mantenga la potente interoperabilidad de IRIS?  

Puede que te preguntes: ¡¿Dónde está la visión que mencionaba en el título de este artículo?! 

Bueno, para mí la Comunidad no es solo un lugar donde puedo encontrar respuestas a mis preguntas, o donde puedo conocer gente, es un sitio para ayudarnos mutuamente, para retarnos los unos a los otros, y quizás, un lugar donde podemos construir juntos algo mucho más grande que nosotros mismos. 

Para lograr esa visión, creo que necesitamos crear algo ASAP (As Simple As Possible, Lo más sencillo posible). Mientras usaba Tray.io vi algo realmente interesante, conectores prefabricados, pequeñas cajas que pueden ayudarte a hacer cualquier cosa, que se integran con una gran variedad de sistemas/aplicaciones, y lo hacen de una forma realmente sencilla.

Porque eliminar la complejidad de las soluciones debería ser nuestro objetivo principal. Aportar más ideas y contribuir a cada proyecto es parte de mi visión para conseguir una mejor aplicación.

@José Pereira y @Henry Pereira crearon el Editor de flujo, la nueva función que ofrecemos en el proyecto al que llamamos IRIS Megazord.

P.D.: Si no sabes lo que es un Megazord, puedes ver este video súper nostálgico (bueno, al menos para nosotros), de una serie de TV llamada Power Rangers.

Pero centrémonos en la parte más nueva de nuestro super increíble robot. 

Editor de flujo

 

El concepto que está detrás del Editor de flujo, como comentamos anteriormente, es tener un conjunto simple y muy útil de conectores (las cajas), que te permitan construir cosas como las que hace José en este video

Si quieres probar el mismo proceso que se muestra en el video, puedes seguir los siguientes pasos y configurar un bot de Telegram para utilizarlo en tu entorno.

Cómo configurar un bot de Telegram

Para utilizar un bot de Telegram, sigue estos pasos:

  • Crear un bot de Telegram
    • Accede al BotFather usando tu cuenta de Telegram (https://telegram.me/BotFather)
    • Introduce el comando /newbot
    • Elige un nombre para tu bot
    • Elige un nombre de usuario para tu bot
    • Después de esa información, el BotFather te dará un token personalizado para tu bot
  • Crear una credencial de Interoperabilidad de IRIS para almacenar el token de tu bot
    • Accede a la página Visualizador de credenciales
    • Elige un nombre para la credencial en el campo ID
    • Introduce el token de tu bot en el campo Contraseña
    • Guarda tu credencial
  • Configurar la producción
    • Accede a la página Configuración de la producción
    • Elige el business service FromTelegram
    • Busca el campo Credenciales en el panel de la derecha, en la pestaña Configuración, y selecciona las credenciales para tu bot de Telegram
    • Guarda los cambios haciendo clic en el botón "Aplicar"
  • Ahora puedes iniciar la producción. Accede a tu bot de Telegram y empieza a chatear. Si todos los pasos se hicieron correctamente, recibirás una respuesta del chatbot de producción después de unos pocos segundos.

    Agradecimientos

    Una vez más, queremos agradecer todo el apoyo que nos da la Comunidad para cada una de las aplicaciones que creamos.

    0
    0 85
    Artículo Yuri Marx · mar 7, 2022 4m read

    InterSystems IRIS es una gran plataforma de datos y posee las funcionalidades que demanda el mercado. En este artículo, recojo las 10 mejores:

    PuestoFuncionalidad¿Por qué?Más información
    1Análisis adaptativoAnalizar los datos empresariales actuales "TAL CUAL" y en tiempo real, con menos esfuerzo de modelado, mayor velocidad de ejecución y soporte para los principales visores analíticos (incluyendo Excel) es un factor clave para la estrategia corporativa de las empresas.

    Enlace

    2Administrador de APILos activos digitales se consumen mediante la API REST. Se requiere controlar la reutilización, seguridad, consumo, catálogo de activos, ecosistema de desarrolladores y otros aspectos en un punto central. El Administrador de API es la herramienta adecuada para hacerlo. Por ello, todas las empresas tienen o quieren tener un administrador de API.Enlace
    3Sharding de la base de datosLa cantidad total de datos creados, capturados, copiados y consumidos a nivel mundial aumenta rápidamente. Hasta 2025, se prevé que la creación de datos a nivel mundial crezca hasta más de 180 zettabytes. En este escenario, es crítico para las empresas poder procesar los datos de forma distribuida (en shards, como hadoop o mongodb), para aumentar y mantener el rendimiento. El otro aspecto importante es que IRIS es 3 veces más rápido que Caché y más rápido que las bases de datos de AWS, en la nube de AWS.

    Enlace 1

    Enlace 2

    4Soporte a PythonPython es el lenguaje más popular para hacer Inteligencia Artificial (IA). Y la IA está en el centro de la estrategia empresarial, porque permite obtener nuevos conocimientos, conseguir más productividad y reducir costes.

    Enlace 1

    Enlace 2

    Enlace 3

    5Las APIs nativas (Java, .NET, Node.js, Python) y PEXEn EE. UU. hay casi un millón de ofertas de puestos de trabajo en TI (fuente: https://www.forbes.com/sites/stuartanderson/2021/03/18/over-1-million-job-vacancy-postings-in-computer-occupations-in-us/). Es muy difícil encontrar un desarrollador de ObjectScript. Por eso, es importante ser capaz de utilizar las funcionalidades de IRIS, como la interoperabilidad, con el lenguaje de programación oficial del equipo de desarrolladores (Python, Java, .NET, etc.).

    Enlace 1

    Enlace 2

    Enlace 3

    Enlace 4

    Enlace 5

    Enlace 6

    6Interoperabilidad, FHIR y IoT

    Las empresas se conectan e intercambian datos constantemente. Los departamentos también deben trabajar conectados seguir procesos con mayor valor estratégico y menor coste. La mejor tecnología para ello son las herramientas de interoperabilidad, especialmente ESB, adaptadores de integración, motores de automatización de procesos empresariales (BPL), herramientas de transformación de datos (DTL) y la adopción de estándares de interoperabilidad del mercado, como FHIR y MQTT/IoT. La interoperabilidad de InterSystems soporta todo esto (para FHIR utiliza IRIS for Health).

    Enlace 1

    Enlace 2

    Enlace 3

    7Cloud, Docker y MicroserviciosAhora todo el mundo quiere una arquitectura de microservicios en la nube. Quieren romper los monolitos para crear proyectos más pequeños, menos complejos, menos acoplados, más escalables, reutilizables e independientes. IRIS permite implementar microservicios de datos, aplicaciones y análisis, gracias a la compatibilidad de IRIS con shards, docker, kubernetes, computación distribuida, herramientas DevOps y menor consumo de CPU/memoria (¡IRIS soporta incluso procesadores de ARM!). Pero los microservicios requieren que la gestión de las APIs de los microservicios, usando el Administrador de API, se utilice de forma alineada con las empresas.

    Enlace 1

    Enlace 2

    Enlace 3

    Enlace 4

    Enlace 5

    8Informes integradosLos informes son cruciales para las empresas. El personal operativo y los responsables de la toma de decisiones utilizan los informes para respaldar su trabajo. Además, se entregan muchos informes a los clientes. Pero, con las aplicaciones móviles, y las aplicaciones de microservicios, es necesario habilitar los informes integrados. IRIS Reports soporta todo esto.Enlace
    9Soporte para VSCodeVSCode es el IDE más popular e InterSystems IRIS tiene un buen conjunto de herramientas para usarlo.

    Enlace 1

    Enlace 2

    Enlace 3

    10Ciencia de DatosLa capacidad de aplicar la ciencia de datos a las solicitudes y respuestas de integración y transacción de datos, utilizando Python, R e IntegratedML (AutoML) permiten que la IA sea inteligente en este momento que requieren las empresas. InterSystems IRIS proporciona IA con Python, R e IntegratedML (AutoML)

    Enlace 1

    Enlace 2

    Enlace 3

    1
    0 576
    Artículo Ricardo Paiva · nov 2, 2022 4m read

    ¡Hola a todos!

    En una reciente actualización de MessageViewer @Henrique Dias y yo propusimos una nueva manera de visualizar mensajes en IRIS Interoperability. En esa actualización, intentamos dar a los usuarios una visualización basada en un diagrama de secuencia UML. Tenéis más information en el artículo anterior.

    Para conseguir los complicados cálculos geométricos necesarios para realizar ese diagrama, usamos mermaid, una extraordinaria librería JavaScript open source. Y lo que me gustaría compartir con vosotros en este artículo es cómo utilizar esa librería. Me centraré solo en el diagrama de secuencia, pero estad seguros de que la librería permite hacer mucho más.

    Mermaid utiliza una sintaxis inspirada en Markdown para definir los diagramas. Es super intuitivo, por eso es mejor mostraros un ejemplo en lugar de escribir un montón de texto aburrido:

    0
    0 490