#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 Jose-Tomas Salvador · sep 30, 2024 3m read

Existen muchas aplicaciones para trabajar con mensajes HL7 V2, pero las herramientas para trabajar con XML en el Portal de Gestión o los IDE de IRIS son limitadas. Aunque hay muchas utilidades externas e IDEs que funcionan con mensajes XML e incluso documentos C-CDA, hay una razón convincente para poder hacer pruebas directamente en el marco de trabajo C-CDA de IRIS.

Hacer pruebas dentro del entorno de IRIS os proporciona el contexto necesario:

0
0 78
Artículo Luis Angel Pérez Ramos · sep 24, 2024 1m read

Basado en una gran muestra y el taller construido por @Luis Angel Pérez Ramos (ver artículos relacionados y relacionados con Open Exchange app), que incluía un contenedor local de InterSystems IRIS for Health (y la configuración deseada), esta muestra presentada aquí, adaptó el taller para usar el Servidor FHIR en la Nube de InterSystems, y su configuración relacionada.
 

0
0 64
Artículo Luis Angel Pérez Ramos · sep 16, 2024 1m read

Digamos que quiero desinstalar el IKO - todo lo que tengo que hacer es:

> helm uninstall intersystems

Lo que ocurre entre bastidores es que helm desinstalará lo que estaba instalado cuando ejecutó :

> helm install intersystems <relative/path/to/iris-operator>

En cierto sentido esto es simétrico a cuando ejecutamos install pero con una imagen diferente.

Verás que cuando lo instalas, sabe qué imagen utilizar:

operator:
  registry: containers.intersystems.com
  repository: intersystems/iris-operator-amd
  tag: 3.7.13.100

Para desinstalar la imagen a tener en cuenta es:

0
0 63
Anuncio Sergio Farago · sep 16, 2024

Hola Comunidad,

El equipo de certificación de InterSystems Learning Services se complace en anunciar el lanzamiento de nuestro nuevo examen InterSystems IRIS SQL Specialist. Ahora está disponible para su compra y programación en el catálogo de exámenes de InterSystems. Los candidatos potenciales pueden revisar los temas del examen y las preguntas de práctica para orientarse sobre los enfoques y el contenido de las preguntas del examen. Los candidatos que aprueben con éxito el examen recibirán una insignia de certificación digital que puede compartirse en redes sociales como LinkedIn.

0
0 65
Artículo Ricardo Paiva · sep 10, 2024 3m read

Rúbrica de preguntas frecuentes de InterSystems

Los globales temporales almacenados en las bases de datos IRISTEMP/CACHETEMP se utilizan cuando un proceso no necesita almacenar datos de manera indefinida, pero requiere el potente rendimiento de los globales. Las bases de datos IRISTEMP/CACHETEMP no se registran en el diario, por lo que el uso de globales temporales no genera archivos de diario.

El sistema utiliza las bases de datos IRISTEMP/CACHETEMP para almacenamiento temporal y están disponibles para vosotros para el mismo fin.

0
0 95
Artículo Ricardo Paiva · sep 6, 2024 5m read

En la sección anterior, exploramos el proceso de instalación y comenzamos a escribir el IRIS en Python nativo. Ahora procederemos a examinar el recorrido global y a interactuar con los objetos de la clase IRIS.

get: esta función se utiliza para obtener valores del nodo de recorrido

deftraversal_firstlevel_subscript():"""
    ^mygbl(235)="test66,62" and ^mygbl(912)="test118,78"
    """for  i in irispy.node('^mygbl'):
        print(i, gbl_node.get(i,''))
0
0 80
Artículo Alberto Fuentes · sep 4, 2024 2m read

Hola Comunidad,

Este artículo tiene como objetivo guiaros a través del proceso de configuración y utilización de la Funcionalidad de Entorno de Ejecución Flexible de Python para Python embebido. Antes de la versión 2024.2, el instalador de Intersystems IRIS para Windows incluía una versión pre-instalada de Python. Podíais encontrar las bibliotecas de Python y los archivos de la aplicación ubicados en el directorio \lib\python dentro de la carpeta de instalación de IRIS (por ejemplo, C:\InterSystems\IRIS20242\lib\python).

0
0 78
Artículo Ricardo Paiva · sep 2, 2024 4m read

Hola Comunidad

Anteriormente he experimentado con Python embebido en IRIS; sin embargo, aún no he tenido la oportunidad de implementar IRIS usando Python nativo. En este artículo, mi objetivo es esbozar los pasos que tomé para comenzar a aprender e implementar IRIS dentro de la fuente de Python. También me gustaría agradecer a @Guillaume Rongier y @Luis Angel Pérez Ramos su ayuda para resolver los problemas que encontré durante mi reciente instalación PIP de IRIS en Python, lo que finalmente permitió que funcionara correctamente.

Empecemos a escribir IRIS en python.

0
0 107
Pregunta Luis Angel Pérez Ramos · ago 12, 2024

¡Hola estimados miembros de la comunidad!

En esta ocasión no vengo con ningún artículo sino con un problema que me he encontrado al definir una conexión a una tabla ubicada en una base de datos externa en MySQL.

Estoy haciendo algunas pruebas con la funcionalidad de las Foreign Tables incluidas en IRIS que permite incluir tablas externas en modo consulta como si fueran propias de IRIS y he visto que funciona perfectamente con una tabla ubicada en PostgreSQL, el problema ha sido al intentar hacer lo mismo con una tabla de MySQL, he seguido los siguiente pasos como indica la documentación:

1
0 66
Artículo Luis Angel Pérez Ramos · sep 2, 2024 1m read

[FAQ] Preguntas frecuentes de InterSystems

El siguiente código descarga https://www.intersystems.com/assets/intersystems-logo.png y guarda el archivo como c:\temp\test.png.

Es necesario definir una configuración SSL llamada SSLTEST antes de ejecutar este código.

0
0 66
Artículo Jose-Tomas Salvador · ago 27, 2024 4m read

Acceder a un almacenamiento en la nube de Azure para cargar/descargar blobs es bastante fácil usando los métodos API designados de la clase %Net.Cloud.Storage.Client, o usando los adaptadores de entrada/salida EnsLib.CloudStorage.*

Tened en cuenta que necesitaréis tener el Servidor de Lenguaje Externo %JavaServer en funcionamiento para usar tanto la API de almacenamiento en la nube como los adaptadores, ya que ambos usan el marco PEX usando el Servidor Java.

He aquí un breve resumen:

El acceso a Azure Blob Storage se realiza mediante una cadena de conexión similar a esta:

0
0 121
Artículo Alberto Fuentes · ago 26, 2024 1m read

Una buena característica que se ha añadido recientemente a la versión 2.12.6 de la extensión ObjectScript de VS Code está controlada por esta nueva configuración:

objectscript.serverSourceControl.respectEditableStatus

Cuando se establece true en JSON, o se marca en el Settings Editor (o Editor de Configuración), un documento del lado del servidor será de sólo lectura si la clase de control de código fuente para el namespace informa que no es editable.

0
0 55
InterSystems Official Luis Angel Pérez Ramos · ago 26, 2024

La versión 2024.1.3 de InterSystems IRIS Adaptive Analytics ya está disponible en la página de distribución de software de InterSystems.  Esta versión incluye AtScale 2024.1.3 y un archivo actualizado de funciones agregadas definidas por el usuario (UDAF).  Esta versión incluye las siguientes nuevas funciones de modelado y BI:

0
0 57
InterSystems Official Mario Sanchez Macias · ago 16, 2024

La vista previa para desarrolladores de InterSystems IRIS 2024.3 e InterSystems IRIS for Health 2024.3 ha sido publicada en el WRC developer preview siteLos contenedores están disponibles en nuestro container registry están etiquetados como latest-preview.

Esta es una versión muy temprana en el ciclo de lanzamiento y no hay características destacadas que estén completas. Estas comenzarán a aparecer en futuras versiones de vista previa.

La documentación inicial se puede encontrar en los siguientes enlaces.

Disponibilidad e Información de Paquetes

0
0 54
InterSystems Official Luis Angel Pérez Ramos · ago 16, 2024

Alerta: Corrupción de Base de Datos en Bases de Datos de Múltiples Volúmenes después de Truncamiento

InterSystems ha corregido un defecto que puede causar corrupción de base de datos o errores <DISKHARD> en bases de datos de múltiples volúmenes en circunstancias extremadamente raras. Solo las bases de datos que han sidotruncated (truncadas) están en peligro.

El defecto existe en los siguientes productos y en cualquier producto de InterSystems basados en ellos:

0
0 66
Artículo Ricardo Paiva · ago 12, 2024 4m read

Una solución de control de versiones eficaz permite a las organizaciones gestionar bases de código complejas, facilitar una colaboración sin fisuras dentro de los equipos de desarrollo y agilizar los procesos de despliegue.

0
0 82
Artículo Ricardo Paiva · ago 6, 2024 11m read

         

Hola Comunidad,
En este artículo voy a enseñar diferentes usos de InterSystems Embedded Python. Vamos a cubrir los siguientes temas:

  • 1-Visión general de Embedded Python
  • 2-Uso de Embedded Python
    • 2.1 - Uso de una biblioteca Python desde ObjectScript
    • 2.2 - Llamando a las API de InterSystems desde Python
    • 2.3 - Uso conjunto de ObjectScript y Python
  • 3-Uso de las funciones incorporadas de python
  • 4-Módulos o bibliotecas de Python 
  • 5-Casos de uso de Embedded Python
  • 6-Resumen

Empecemos con un resumen

 

1-Resumen de Embedded Python

Embedded Python es una característica de la plataforma de datos de InterSystems IRIS que permite a los desarrolladores de Python obtener un acceso completo y directo a los datos y a la funcionalidad de InterSystems IRIS.

InterSystems IRIS incluye con un potente lenguaje de programación incorporado llamado ObjectScript que se interpreta, compila y ejecuta dentro de la plataforma de datos.

Dado que ObjectScript se ejecuta dentro del contexto de InterSystems IRIS, tiene acceso directo a la memoria y a las llamadas a procedimientos de la plataforma de datos.

Embedded Python es una extensión del lenguaje de programación Python que permite la ejecución de código Python dentro del contexto del proceso InterSystems IRIS.

Dado que tanto ObjectScript como Python operan sobre la misma memoria de objetos, puede decirse que los objetos Python no sólo emulan objetos ObjectScript, sino que son objetos ObjectScript.

La coigualdad de estos lenguajes permite que podáis elegir el lenguaje más apropiado para el trabajo, o el lenguaje con el que os sintáis más cómodos para escribir aplicaciones.

 

2-Uso de Embedded Python

Al utilizar Embedded Python, podéis escribir código en tres modalidades diferentes.

2.1 - Uso de una biblioteca Python desde ObjectScript

En primer lugar, podéis escribir un archivo .py ordinario y llamarlo desde el contexto InterSystems IRIS. En este caso, la plataforma de datos lanzará el proceso de Python y os permitirá importar un módulo llamado IRIS, que asocia automáticamente el proceso de Python al núcleo de IRIS y os proporciona acceso a toda la funcionalidad de ObjectScript desde el contexto de vuestro código Python.

2.2 - Llamando a las API de InterSystems desde Python

En segundo lugar, podéis escribir un código ObjectScript ordinario e instanciar un objeto Python utilizando el paquete %SYS.Python. Este paquete ObjectScript os permite importar módulos y bibliotecas de Python y, a continuación, trabajar con esa base de código utilizando la sintaxis ObjectScript.
El paquete %SYS.Python permite a los desarrolladores de ObjectScript sin ningún conocimiento de Python utilizar el rico ecosistema de bibliotecas Python en su código ObjectScript.

2.3 - Uso conjunto de ObjectScript y Python

En tercer lugar, podéis crear una definición de clase de InterSystems y escribir métodos en Python. Cualquier llamada a ese método lanzará el intérprete de Python. Este método tiene la ventaja de poblar la palabra clave self de ese bloque de código Python con una referencia a la instancia de la clase contenedora. Además, al utilizar Python para escribir métodos de clase en las clases de InterSystems, podéis implementar fácilmente métodos que administren diferentes eventos de entrada de datos en SQL, como la adición de una nueva fila a una tabla.
También permite desarrollar rápidamente procedimientos almacenados personalizados en Python.

Como podéis ver, Embedded Python os permite elegir el lenguaje de programación más adecuado para el trabajo sin sacrificar el rendimiento.

3-Uso de las funciones incorporadas de Python

El intérprete de Python tiene una serie de funciones y tipos incorporados que están siempre disponibles. Se enumeran aquí por orden alfabético.

Funciones incorporadas

A

abs()

aiter()

all()

any()

anext()

ascii()

 

B

bin()

bool()

breakpoint()

bytearray()

bytes()

 

C

callable()

chr()

classmethod()

compile()

complex()

 

D

delattr()

dict()

dir()

divmod()

 

E

enumerate()

eval()

exec()

 

F

filter()

float()

format()

frozenset()

 

G

getattr()

globals()

 

H

hasattr()

hash()

help()

hex()

 

I

id()

input()

int()

isinstance()

issubclass()

iter()

L

len()

list()

locals()

 

M

map()

max()

memoryview()

min()

 

N

next()

 

O

object()

oct()

open()

ord()

 

P

pow()

print()

property()

 

 

 

 

R

range()

repr()

reversed()

round()

 

S

set()

setattr()

slice()

sorted()

staticmethod()

str()

sum()

super()

 

T

tuple()

type()

 

V

vars()

 

Z

zip()

 

_

__import__()

Uso de las funciones incorporadas de python

Para utilizar una función incorporada de python tenemos que importar "builtins" y después podremos llamar a la función

set builtins = ##class(%SYS.Python).Import("builtins")

La función print() de python es en realidad un método del módulo incorporado, por lo que ahora podéis utilizar esta función desde ObjectScript:

USER>do builtins.print("hello world!")
hello world!
USER>set list = builtins.list()
 
USER>zwrite list
list=5@%SYS.Python  ; []  ; 

Del mismo modo, podéis utilizar el método help() para obtener ayuda sobre el objeto lista.

USER>do builtins.help(list)
Help on list object:
class list(object)
 |  list(iterable=(), /)
 |
 |  Built-in mutable sequence.
 |
 |  If no argument is given, the constructor creates a new empty list.
 |  The argument must be an iterable if specified.
 |
 |  Methods defined here:
 |
 |  __add__(self, value, /)
 |      Return self+value.
 |
 |  __contains__(self, key, /)
 |      Return key in self.
 |
 |  __delitem__(self, key, /)
 |      Delete self[key].

 

4-Módulos o bibliotecas python

Algunos módulos o bibliotecas de Python se instalan de forma predeterminada y ya están disponibles para su uso. Utilizando la función help("module" podemos ver estos módulos:
Python libraries list output 1

Instalación de un módulo o biblioteca de Python

Además de estos módulos en Python existen cientos de módulos o bibliotecas, que se pueden consultar en pypi.org(The Python Package Index (PyPI) es un repositorio de software para el lenguaje de programación Python)

Si necesitamos algunas otras bibliotecas, entonces necesitamos instalar las bibliotecas usando el comando intersystems irispip

Por ejemplo, Pandas es una biblioteca de análisis de datos de Python. El siguiente comando utiliza el instalador de paquetes irispip para instalar pandas en un sistema Windows:

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas

Tened en cuenta que C:\InterSystems será sustituido por el directorio de instalación de Intersystems

5-Casos de uso de Embedded Python

5.1-Imprimir PDF utilizando la biblioteca Reportlab de python

Necesitamos instalar la biblioteca Reportlab usando el comando irispip, luego simplemente crear la función objectcript.

Dada una ubicación del archivo, el siguiente método ObjectScript, CreateSamplePDF(), crea un archivo PDF de muestra y lo guarda en esa ubicación.

Class Demo.PDF
{

ClassMethod CreateSamplePDF(fileloc As%String) As%Status
{
    set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
    set canvas = canvaslib.Canvas(fileloc)
    do canvas.drawImage("C:\Sample\isc.png", 150, 600)
    do canvas.drawImage("C:\Sample\python.png", 150, 200)
    do canvas.setFont("Helvetica-Bold", 24)
    do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
    do canvas.save()
}

}

La primera línea del método importa el archivo canvas.py del subpaquete pdfgen de ReportLab. La segunda línea del código instancia un objeto Canvas y procede a llamar a sus métodos, de forma muy similar a como llamaría a los métodos de cualquier objeto InterSystems IRIS.

A continuación, podéis llamar al método de la forma habitual:.

do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")

Se genera el siguiente PDF y se guarda en la ubicación especificada:
PDF de una página con el logotipo de InterSystems, el logotipo de Python y el texto: InterSystems IRIS y Python. Juntos somos perfectos.

 

5.2-Generar código QR utilizando la librería Qrcode de Python

Para generar un código QR, necesitamos instalar la librería Qrcode usando el comando irispip, luego usando el siguiente código podemos generar el Código QR:

** 

5.3-Obtener la geolocalización utilizando la biblioteca Folium de Python

Para obtener los datos geográficos, necesitamos instalar la biblioteca Folium utilizando el comando irispip, luego crear la siguiente función de script del objeto:

Class dc.IrisGeoMap.Folium Extends%SwizzleObject
{

// Function to print Latitude, Longitude and address details ClassMethod GetGeoDetails(addr As%String) [ Language = python ]
{
    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="IrisGeoApp")
    try:
    	location = geolocator.geocode(addr)
    	print("Location:",location.point)
    	print("Address:",location.address)
    	point = location.point
    	print("Latitude:", point.latitude)
    	print("Longitude:", point.longitude)
    except:
    	print("Not able to find location")
}
}

Conectaos a la Terminal IRIS y ejecutad el siguiente código

do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142")

A continuación se muestra el resultado:

image

 

5.4-Generar y marcar localizaciones en un Mapa interactivo utilizando la Biblioteca de Python Folium

Utilizaremos la misma biblioteca Folium de Python para generar y marcar localizaciones en un Mapa interactivo, Abajo la función de script objeto hará lo deseado :

ClassMethod MarkGeoDetails(addr As%String, filepath As%String) As%Status [ Language = python ]
{
    import folium
    from geopy.geocoders import Nominatim
    
    geolocator = Nominatim(user_agent="IrisGeoMap")
    #split address in order to mark on the map
    locs = addr.split(",")
    if len(locs) == 0:
    	print("Please enter address")
    elif len(locs) == 1:
    	location = geolocator.geocode(locs[0])
    	point = location.point
    	m = folium.Map(location=[point.latitude,point.longitude], tiles="OpenStreetMap", zoom_start=10)
    else:
    	m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=3)
    
    for loc in locs:
    	try:
    		location = geolocator.geocode(loc)
    		point = location.point
    		folium.Marker(
	    			location=[point.latitude,point.longitude],
	    	  		popup=addr,
	    		).add_to(m)    		
    	except:
    		print("Not able to find location : ",loc) 
    		  
    map_html = m._repr_html_()
    iframe = m.get_root()._repr_html_()
    fullHtml = """
      	     <!DOCTYPE html>
        	    <html>
        	        <head></head>
        	        <body> """
    fullHtml = fullHtml + iframe            
    fullHtml = fullHtml + """                                             
       	        </body>
        	    </html>
    """try:
    	f = open(filepath, "w")
    	f.write(fullHtml)
    	f.close()
    except:
    	print("Not able to write to a file")
}

Conectaos a la Terminal IRIS y llamad a la función MarkGeoDetails

Llamaremos a la función MarkGeoDetails() de la clase dc.IrisGeoMap.Folium.
Esta función requiere dos parámetros:

  1. ubicación/ubicaciones(Podemos pasar varias ubicaciones añadiendo "," entre ellas)
  2. ruta del archivo HTML

Ejecutemos el siguiente comando para marcar Cambridge MA 02142, NY, Londres, EAU, Jeddah, Lahore y Glasgow en el Mapa y guardémoslo como archivo "irisgeomap_locations.html

do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html")

El código anterior generará el siguiente archivo HTML interactivo:

image

 

5.5-Analítica de datos mediante el uso de la biblioteca Pandas de Python

Necesitamos instalar la biblioteca Pandas usando el comando irispip, entonces podemos usar el siguiente código para ver los datos

 

6-Resumen

InterSystems Embedded Python (IEP) es una potente función que os permite integrar el código Python a la perfección con vuestras aplicaciones de InterSystems. Con IEP, podéis aprovechar las amplias bibliotecas y estructuras disponibles en Python para mejorar la funcionalidad de sus aplicaciones de InterSystems. En este artículo, exploraremos las principales características y ventajas de IEP.

IEP se implementa como un conjunto de bibliotecas que os permiten interactuar con objetos Python y ejecutar código Python desde dentro de las aplicaciones de InterSystems. Esto proporciona una forma sencilla y eficaz de integrar el código Python en vuestras aplicaciones de InterSystems, permitiéndoos realizar análisis de datos, aprendizaje automático, procesamiento del lenguaje natural y otras tareas que pueden resultar difíciles de implementar en InterSystems ObjectScript.

Una de las principales ventajas de utilizar IEP es que proporciona una forma de tender puentes entre los mundos de Python e InterSystems. Esto facilita el uso de los puntos fuertes de ambos lenguajes para crear aplicaciones potentes que combinen lo mejor de ambos mundos.

IEP también proporciona una forma de ampliar la funcionalidad de sus aplicaciones InterSystems aprovechando las capacidades de Python. Esto significa que podéis aprovechar el gran número de bibliotecas y estructura de trabajo disponibles en Python para realizar tareas que pueden resultar difíciles de implementar en InterSystems ObjectScript.

InterSystems Embedded Python proporciona una potente forma de ampliar la funcionalidad de sus aplicaciones de InterSystems aprovechando las capacidades de Python. Al integrar el código Python en sus aplicaciones de InterSystems, podéis aprovechar el gran número de bibliotecas y estructura de trabajo disponibles en Python para realizar tareas complejas que pueden resultar difíciles de implementar en InterSystems ObjectScript.

¡Gracias!

0
0 112
Artículo Sergio Farago · ago 5, 2024 3m read

Actualizado 2/27/25

Hola Comunidad,

Podéis liberar todo el potencial de InterSystems IRIS—y ayudar a vuestro equipo a incorporarse—con toda la gama de recursos de aprendizaje de InterSystems que se ofrecen en línea y en persona, para cada función de vuestra organización. Desarrolladores, administradores de sistemas, analistas de datos e integradores pueden ponerse al día rápidamente.

Recursos de incorporación para cada función

Desarrolladores

Administradores de sistemas

Data Analysts

Integradores

Implementadores

Project managers

Otros Recursos de los Servicios de Aprendizaje

  • 💻 Aprendizaje online: Registraos gratis en learning.intersystems.com para acceder a cursos a vuestro propio ritmo, videos y ejercicios. También podéis completar rutas de aprendizaje basadas en tareas o programas basados en roles para avanzar en vuestra carrera.
  • 👩‍🏫 Formación presencial: Consultad el calendario de formación en vivo, presencial o virtual, o solicitad un curso privado para vuestro equipo. Encontrad más detalles en classroom.intersystems.com.
  • 📘 Documentación InterSystems IRIS: Materiales de referencia completos, guías y artículos prácticos. Explorad la documentación.
  • 📧 Apoyo: para apoyo técnico, enviad un mail a support@intersystems.com.

Oportunidades de certificación

certification badge Una vez que vosotros y los miembros de vuestro equipo hayan adquirido suficiente formación y experiencia, podréis obtener la certificación para validar vuestros conocimientos y experiencia en la tecnología de InterSystems.

Comunidad de Desarrolladores

Interactuad con otros desarrolladores, publicad preguntas, leed artículos y manteneos al día con los últimos anuncios. Empezad con este post que contiene consejos sobre cómo aprender en la Comunidad de Desarrolladores.

Con estos recursos de aprendizaje, vuestro equipo estará bien equipado para maximizar las capacidades de InterSystems IRIS, impulsando el crecimiento y el éxito de la organización. Si necesitáis ayuda adicional, no dudéis en publicar vuestras preguntas aquí o consultad a vuestro Sales Engineer especializado.

0
0 124
InterSystems Official Jose-Tomas Salvador · ago 2, 2024

Ya está disponible la versión de mantenimiento ampliada 2024.1.1 de InterSystems IRIS, InterSystems IRIS for Health y HealthShare Health Connect. Contiene correcciones de errores de la versión anterior 2024.1.0.

Encontraréis listas detalladas de cambios y listas de comprobación de actualizaciones en estas páginas:

Cómo conseguir el software

0
0 61
Artículo Luis Angel Pérez Ramos · jul 24, 2024 4m read

Con la introducción de los tipos de datos vectoriales y la funcionalidad de Vector Search en IRIS se nos abre todo un mundo de posibilidades para el desarrollo de aplicaciones y un ejemplo de estas aplicaciones es la que vi reciéntemente publicada un concurso público de la Consejería de Sanidad de Valencia en la que solicitaban una herramienta para ayudar en la codificación CIE-10 utilizando modelos de IA.

¿Cómo podríamos implementar una aplicación similar a la solicitada? Veamos que necesitaríamos:

6
0 211
Artículo Luis Angel Pérez Ramos · jul 31, 2024 5m read

En el artículo anterior presentábamos la aplicación d[IA]gnosis desarrollada para el soporte a la codificación de diagnósticos en CIE-10. En este veremos como InterSystems IRIS for Health nos proporciona las herramientas necesarias para la generación de vectores a partir de la lista de códigos CIE-10 mediante un modelo pre-entrenado de lenguaje, su almacenamiento y la posterior búsqueda de similitudes sobre todos estos vectores generados.

Introducción

0
0 146
Artículo Ricardo Paiva · jul 26, 2024 2m read

Me encontré en la incómoda situación de trabajar con un sistema Linux en el que alguien había deshabilitado accidentalmente el acceso de los usuarios al shell de Linux. HealthConnect estaba en funcionamiento, atendiendo a cientos de interfaces. Sin embargo, para resolver el problema de acceso, necesitábamos apagar el host para aplicar una solución.

Sin el shell, el comando iris no está disponible para controlar la instancia, por lo que nos enfrentábamos a la posibilidad de apagar el servidor de manera abrupta. Queríamos evitar eso si era posible...

0
0 97
Artículo Luis Angel Pérez Ramos · jul 25, 2024 7m read

Visualización gráfica de tablas

Aquí documentaremos cómo podéis obtener los resultados de vuestra Data Collection para que se muestren gráficamente. La salida de vuestro proyecto se verá así:

image

Tened en cuenta que estoy trabajando en una máquina local. Si vosotros estáis haciendo esto en un servidor, aseguraos de usar la dirección IP correcta.

Primero, importaremos las tres clases que vamos a necesitar (tened en cuenta que las editaremos más tarde):

Podéis tomar el xml e importarlo en vuestro sistema.

La especificación en realidad creará la clase de despacho y la plantilla de implementación. Si estáis interesados en aprender más sobre este proceso, echad un vistazo al excelente artículo de mi colega, Eduard Lebedyuk.

Configurar las APIs

Tened en cuenta que en esta demostración utilizaremos Autorización Básica. También asumimos que ya hay datos en las tablas Sample_DBExpansion_Data.DBAnalysisInfo y Sample_DBExpansion_Data.GlobalAnalysisInfo. Si no los hay, volved a la Colección de Datos y obtened algunos datos.

  1. Primero, vamos a crear un endpoint que nos dará acceso a nuestros datos: image

Rellenad los mismos nombres a menos que planeéis personalizar el código para la aplicación React por vuestra cuenta.

  1. Haced clic en guardar y probemos nuestras APIs. Abrid Postman y enviad la siguiente solicitud (aseguraos de usar la autorización adecuada): image

Nuestra salida debería verse algo así:

{
    "data": [
        {
            "Name": "c:\\intersystems\\irishealth\\mgr\\training\\",
            "Date": "2023-04-30 15:23:58",
            "DBUsedSize": 2010,
            "DBAllocSize": 2060
        },
        {
            "Name": "c:\\intersystems\\irishealth\\mgr\\training\\",
            "Date": "2023-05-01 09:01:42",
            "DBUsedSize": 2010,
            "DBAllocSize": 2060
        },
        {
            "Name": "c:\\intersystems\\irishealth\\mgr\\training\\",
            "Date": "2023-05-03 13:57:40",
            "DBUsedSize": 150,
            "DBAllocSize": 2060
        }
    ]
}

A continuación, enviemos una solicitud GET a http://localhost:52776/Sample/dbAnalysis/globals/all. Comprobad que vuestra respuesta os da una lista de globals cuya información se vea así: (date cuenta de que el nombre se establecerá por defecto al nombre de la clase si el global tiene uno)

        {
            "Name": "someName.cls",
            "UsedMB": 4.2,
            "AllocatedMB": 5.7
        }

Ahora probemos con un global específico, digamos "Errors". Enviad una solicitud GET a http://localhost:52776/Sample/dbAnalysis/global/Errors. Comprobad que vuestra salida es similar a esta:

        {
            "Name": "ERRORS",
            "UsedMB": 0.4,
            "Date": "2023-04-30 15:23:58",
            "AllocatedMB": 0.45
        },
        {
            "Name": "ERRORS",
            "UsedMB": 0.43,
            "Date": "2023-05-01 09:01:42",
            "AllocatedMB": 0.49
        },
        {
            "Name": "ERRORS",
            "UsedMB": 0.1,
            "Date": "2023-05-03 13:57:40",
            "AllocatedMB": 0.13
        }

Y finalmente, enviemos una solicitud GET a http://localhost:52776/Sample/dbAnalysis/globals/table/1000. Esto nos dará el crecimiento de globals, cuya salida canalizaremos en la sección 'Datos Tabulados' de la aplicación React. Tened en cuenta que los 1000 días solo se refieren a cuántos días hacia atrás deberíamos ir. Esto depende completamente de vosotros. Sentíos libres de personalizar esto en el archivo src/components/TableInputBar.js. Buscad la línea <Table timeBack={1000} numGlobals={searchInput}/>. Poned aquí la cantidad de días que deseéis ver hacia atrás en la aplicación React.

Deberíais obtener una respuesta que sea una lista de objetos como esta:

       {
            "Name": "nameOfGlobal",
            "ClassName": "AriTesting.DemoTableElad.cls",
            "OldMB": 0.14,
            "OldDate": "2023-04-30 15:23:58",
            "NewMB": 0.14,
            "NewDate": "2023-05-03 13:57:40",
            "Change": "0"
        }

Dado que todas vuestras solicitudes estaban en orden, ahora podemos crear nuestra aplicación web. Recordad que si no estáis recibiendo las respuestas que esperabais, deberíais retroceder y verificar qué está mal antes de avanzar y crear la aplicación que depende de ellas.

Pasos para crear la aplicación web

  1. Lo primero que haréis es crear una aplicación React genérica. Recordad que necesitaréis tener Node (por lo menos la versión 14) instalado en la máquina local de desarrollo, pero no será necesario en el servidor. Si no lo tenéis instalado, hacedlo aquí. Si no estáis seguros de si lo tenéis instalado, podéis ejecutar este comando desde vuestro terminal:
node --version
  1. Ahora instalaremos una aplicación React genérica y cambiaremos las partes que necesitemos. Esto es tan simple como ejecutar:
npx create-react-app data-collection-graphs
  1. Si es la primera vez que hacéis esto, puede tomar unos minutos. Una vez que esté hecho, tendremos una carpeta que se verá de la siguiente manera: image

  2. Vuestra aplicación React genérica (que personalizaremos) ahora está funcionando. Comprobadlo:

npm start

Deberíais ser redirigidos automáticamente a una pestaña que os muestra lo siguiente (si no, id a http://localhost:3000/): image

  1. Ahora personalicemos según nuestras necesidades. Detened vuestra aplicación desde el terminal con ^C. Descargad la carpeta src desde este repositorio y reemplazad la que se encuentra en vuestro directorio, la cual fue creada automáticamente por nuestros comandos anteriores. Desde el directorio data-collection-graphs, instalad chart.js y react-chartjs-2 de la siguiente manera:
npm install --save chart.js
npm install --save react-chartjs-2

En la carpeta src/components se encuentra el código JavaScript que llama a los puntos finales de la API para obtener datos para el gráfico. Si vuestro servidor no está ejecutándose en localhost:80, entonces debéis cambiar la variable baseUrl (y la autorización básica codificada en base64, si ese es el método de autorización que habéis elegido) en los archivos BarChart.js, DBChart.js, SingleGlobalHistoryChart.js, y TableData.js.

  1. Utilizad npm start para cargar vuestra página, y ahora deberíais obtener la página con vuestros análisis de base de datos.

Nota: Es posible que veáis una página en blanco y, al abrir las herramientas de desarrollo web, veáis un error como este: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:52775/Sample/dbAnalysis/globals/all. (Reason: CORS preflight response did not succeed). Status code: 404.

Si este es el caso, añadid el siguiente método de clase en vuestro archivo generado Sample.DBExpansion.Util.REST.disp.cls:

ClassMethod OnHandleCorsRequest(pUrl As %String) As %Status
{
     //s ^CORS("OnHandleCorsRequest")="Handled"
     #; Get the origin
     Set tOrigin=$Get(%request.CgiEnvs("HTTP_ORIGIN"))
     #; Allow requested origin
     Do ..SetResponseHeaderIfEmpty("Access-Control-Allow-Origin",tOrigin)
     #; Set allow credentials to be true
     Do ..SetResponseHeaderIfEmpty("Access-Control-Allow-Credentials","true")
     #; Allow requested headers
     Set tHeaders=$Get(%request.CgiEnvs("HTTP_ACCESS_CONTROL_REQUEST_HEADERS"))
     Do ..SetResponseHeaderIfEmpty("Access-Control-Allow-Headers",tHeaders)
     #; Allow requested method
     Set tMethod=$Get(%request.CgiEnvs("HTTP_ACCESS_CONTROL_REQUEST_METHOD"))
     Do ..SetResponseHeaderIfEmpty("Access-Control-Allow-Method",tMethod)
     Return $$$OK
}

Como no estamos utilizando autenticación delegada aquí, la solicitud será realizada por el usuario CSPSystem. Esto significa que debemos otorgar al usuario CSPSystem los roles apropiados para las consultas que estamos realizando. Podéis leer más al respecto aquí (o simplemente dar al usuario CSPSystem el rol necesario para leer datos de vuestro espacio de nombres/base de datos).

Con Cross-Origin Resource Sharing (CORS) configurado, después de refrescar la página, deberíais ver cómo los gráficos comienzan a poblarse y verse como lo que vemos en la parte superior de esta página.

Sentíos libres de explorar el código y hacer mejoras o personalizaciones que se adapten mejor a vuestra organización.

Si tenéis alguna sugerencia sobre cómo puedo mejorar esto desde nuestro lado, por favor hacedmelo saber también.

Continuad con el repositorio de análisis de datos aquí.

0
0 112
Artículo Ricardo Paiva · jul 18, 2024 8m read

image

Hola Comunidad,

En este artículo, os demostraré los siguientes pasos para crear vuestro propio chatbot utilizando spaCy (spaCy es una biblioteca de software de código abierto para el procesamiento avanzado del lenguaje natural, escrita en los lenguajes de programación Python y Cython):

  • Paso 1: Instalar las librerías necesarias

  • Paso2: Crear el archivo de patrones y respuestas

  • Paso 3: Entrenar el modelo

  • Paso 4: Crear una aplicación ChatBot basada en el modelo entrenado

Empecemos

0
0 406
InterSystems Official Jose-Tomas Salvador · jul 11, 2024

La versión 24.1 de InterSystems Reports ya está disponible en el sitio de Distribución de Software de InterSystems en la sección de Componentes. El software está etiquetado como InterSystems Reports Designer e InterSystems Reports Server y está disponible para los sistemas operativos Mac OSX, Windows y Linux.

Esta nueva versión trae grandes mejoras de nuestro socio, insightsoftware. InterSystems Reports 24.1 está impulsado por Logi Report Versión 24.1SP2 e incluye:

0
0 124
Artículo Alberto Fuentes · jul 11, 2024 2m read

Por razones prácticas, muchas veces necesitamos que tras un reinicio de un servidor Linux, la instancia IRIS que tengamos instalada se inicie automáticamente. 

A continuación encontraréis los pasos a seguir para automatizar el arranque de IRIS durante un reinicio de Linux, a través de systemd :

1. Cread un archivo iris.service en /etc/systemd/system/iris.service que contenga la siguiente información

0
0 189
Artículo Jose-Tomas Salvador · jul 8, 2024 1m read

¿Alguna vez habéis importado un esquema XML desde un archivo XSD? Es posible que queráis volver a consultar el archivo original algún tiempo después, pero habéis olvidado dónde lo pusisteis.

No os preocupéis, esa información se guarda como parte del proceso de importación.

Todo el esquema XSD importado se guarda en el global ^EnsEDI.XML.Schema. Ese global contiene todos los XSDs importados en vuestro espacio de nombres. El primer subíndice es el nombre del esquema que se ve en el portal.

Para buscar la ubicación del archivo XSD de origen, basta con mirar en el siguiente lugar:

0
0 199
Pregunta Enric Moya Sánchez · jun 14, 2024
Buenos dias
Cuando ejecuto algun comando en el webterminal que tiene mucha salida (por ejemplo zw ^IRIS.Msg), el comando se ejecuta bien pero el webterminal se queda en negro durante mucho rato (15 minutos) hasta que me da la salida.
Supongo que es algo de que le cuesta dar todo el texto a traves de la web, ya que el comando en sí tarda muy poco en ejecutarse.

¿Alguien más con este problema, alguna solucion?

Gracias

4
0 238
Artículo Luis Angel Pérez Ramos · jun 18, 2024 6m read

Recogida de datos

Esta es una guía de instrucciones paso a paso para crear una tarea que recopile datos sobre la base de datos InterSystems y los globales que contiene (como se ve en la Open Exchange App asociada - encontrad todo el código asociado allí).

Descargo de responsabilidad: Este software es meramente para fines de PRUEBA/DEMO. Este código no está soportado por InterSystems como parte de ningún producto. InterSystems lo suministra como herramienta de demostración/prueba para un producto y versión específicos. El usuario o cliente es totalmente responsable del mantenimiento y prueba de este software después de la entrega, e InterSystems no tendrá ninguna responsabilidad por errores o mal uso de este código.

  1. En primer lugar, importad el archivo «DataCollection.xml» a través del portal de gestión y aseguraos de que no hay errores. Si los hubiera, podría tratarse de una cuestión de versiones. Poneos en contacto con Ari Glikman en ari.glikman@intersystems.com para que os ayude a obtener una versión adecuada para vosotros. Además, aseguraos de que importáis los datos en el espacio de nombres cuyos datos internos queréis recopilar para su posterior inspección.

  2. Una vez finalizada la importación, deberíais ver el paquete Sample/Muestra con varios subpaquetes también

image

Si un paquete de Sample/Muestra ya está presente en vuestro servidor, entonces todavía debéis ver los nuevos subpaquetes junto con cualquier otra carpeta que estaban previamente allí.

  1. Ahora es el momento de ejecutar las pruebas unitarias para asegurarse de que todo funciona correctamente.

a. Cread una carpeta llamada Unit Tests que pueda ser leída por vuestro Terminal InterSystems, por ejemplo, como yo tengo una instalación local, haré una carpeta en mi disco C.

FolderStructure

b. En esta carpeta exportaremos ahora la clase Sample.DBExpansion.Test.CaptureTest como un fichero xml.

image

c. En el terminal estableced el global ^UnitTestRoot = “<< carpeta en la que está Unit Tests>>”.. Según el ejemplo anterior, sería (tened en cuenta que debe estar en el mismo espacio de nombres donde importasteis el paquete) C:\ (a tener en cuenta que no es “C:\Unit Tests” !)

set ^UnitTestRoot = "C:\"

d. Por último, ejecutamos las pruebas unitarias. Hacedlo ejecutando la siguiente línea de código desde el terminal:

do ##class(Sample.DBExpansion.Test.TestManager).RunTest("Unit Tests", "/noload/nodelete")

Esencialmente le estamos diciendo al programa que ejecute todas las pruebas que se encuentran en la carpeta C:\Unit Tests. Por el momento sólo tenemos un archivo allí, el creado en 3.b.

La salida debería ser la siguiente

UnitTestOutput

Si las pruebas unitarias no pasan, entonces el programa no está listo para ejecutarse. No continuéis con los siguientes pasos hasta que obtengáis una salida que diga que todas las pruebas han pasado.

  1. ¡Felicidades! Ahora es el momento de construir la tarea. Para ello

a. Abrid el portal de gestión e id a Operación del Sistema > Gestor de Tareas > Nueva Tarea

*Tened en cuenta que vuestro usuario debe tener acceso al espacio de nombres %SYS, de lo contrario la tarea se ejecutará pero no recopilará ningún dato.

NewTask

Ahora se os darán varios campos para rellenar en cuanto a la tarea que queréis crear. Deberéis elegir el espacio de nombres en el que importasteis el paquete y dar un nombre a la tarea. Deberéis dar una descripción para futuras referencias. Lo ideal es dejar la casilla de verificación rápida sin marcar, esto significa que la tarea se ejecutará más lentamente pero recogerá datos más completos. Si tarda demasiado en ejecutarse (depende de lo grande que sea la base de datos y sus globales) entonces quizás sea mejor marcar aquí y optar por una tarea más rápida. HowManyGlobals indica cuántos datos globales deben recopilarse: -1 indica todos los datos globales y es la opción recomendada. Seleccionad Siguiente, elegid con qué frecuencia debe ejecutarse la tarea y pulsad Finalizar.

Recording 2023-05-10 at 7 10 32 PM

b. Aparecerá el Calendario de Tareas, donde podréis ver cuándo están programadas todas las tareas, incluida la recién creada. Si además deseáis ejecutarla ahora, seleccionad Ejecutar en la parte derecha.

Seleccionad el Historial de Tareas para asegurar que se ha creado correctamente. Después de ejecutar la tarea deberíais ver que también se ha ejecutado correctamente. En caso contrario, aparecerá un error.

Esta tarea creará dos tablas:

Sample_DBExpansion_Data.DBAnalysisInfo.

Esta tabla va a almacenar datos sobre la propia base de datos. Nos referimos a esto como «metadatos». La información que almacena se puede ver en la siguiente imagen. La Bandera Rápida indicará la selección elegida en 4.a.

DBTable

Sample_DBExpansion_Data.GlobalAnalysisInfo

Esto contendrá la información relativa a los globales en la base de datos. Observad que si hay un nombre de clase asociado al global, lo veremos aquí junto con su tamaño. Por último, observad que el campo MetaDataID corresponde al campo ID de la tabla Sample_DBExpansion_Data.DBAnalysisInfo. Esto quiere decir que en el momento en que se capturó la información de la base de datos, se capturó su correspondiente información global y comparten este número identificativo (son los globales de la base de datos en ese momento). Es una forma de ver cómo evolucionan en el tiempo los globales de una base de datos y la propia base de datos.

GLOBALTABLE

  1. A continuación, la interfaz de usuario es un poco más bonita.

Recording_2023-05-23_at_2_03_45_PM_AdobeExpress

Muestra información sobre el global y la base de datos que aparecen en la tabla de una manera más digerible. Hay 3 gráficos: uno que muestra la historia de los datos, el segundo que muestra los tamaños históricos de un global elegido, ya sea a través del desplegable o de una búsqueda, y por último hay una visión general de todos los tamaños globales. En la parte inferior hay una tabla donde se introduce cuántos globales se quieren mostrar y los presenta ordenados por tamaño. La columna %Change está resaltada en amarillo para un cambio mínimo de tamaño, en verde para una disminución de tamaño y en rojo para un aumento significativo de tamaño.

Encontraréis instrucciones paso a paso sobre cómo configurarlo aquí.

Si no os interesan los gráficos, continuad con el análisis de datos aquí.

Docker

Prerrequisitos

Aseguraos de tener git y Docker desktop instalados.

Instalación

Clone/git pull el repo en cualquier directorio local

$ git clone https://github.com/rcemper/PR_DataCollection.git
$ docker compose up -d && docker compose logs -f

Inicio del contenedor
cread el directorio apropiado «/home/irisowner/dev/Unit Tests»
estableced ^UnitTestRoot = «/home/irisowner/dev/»

Para abrir el Terminal IRIS:

$ docker-compose exec iris iris session iris
USER>

o utilizando WebTerminal.
http://localhost:42773/terminal/

Para acceder al portal de gestión del sistema IRIS
http://localhost:42773/csp/sys/UtilHome.csp

Para acceder a UnitTestPortal http://localhost:42773/csp/sys/%25UnitTest.Portal.Indices.cls?$NAMESPACE=USUARIO

0
0 199