#InterSystems IRIS for Health

0 Followers · 2.3K Posts

InterSystems IRIS for Health™ is the world’s first and only data platform engineered specifically for the rapid development of healthcare applications to manage the world’s most critical data. It includes powerful out-of-the-box features: transaction processing and analytics, an extensible healthcare data model, FHIR-based solution development, support for healthcare interoperability standards, and more. All enabling developers to realize value and build breakthrough applications, fast. Learn more.

Question Vincent Caede · Aug 8, 2024

Hi,

I created a property in a Business Process class and added that property to the "settings" parameter to display it as a field in production settings.

Property ServerName As %String(MAXLEN = "");

Parameter SETTINGS = "ServerName:Server Config";

Property names cannot contain characters such as underscore or whitespace. Is there any way to change the display name in production so that I can show this setting as "Server Name" and not "ServerName"?
 

  

Thank you in advance.

3
0 180
Question Ashok Kumar T · Aug 4, 2024

Hello Community,

How to convert the IRIS %DynamicArray into python list. I got "<THROW>TestDyncArray+1^MyLearn.Pyth.NewClass1.1 *%Exception.PythonException <PYTHON EXCEPTION> 246 <class 'AttributeError'>: <unknown exception data>" error when passing array values to python class.

ClassMethod TestDyncArray()
{
	Do..DyncArrayInPy([1,2,3,4])
}

ClassMethod DyncArrayInPy(numbers) [ Language = python ]
{
	import iris
	print(type(numbers)) ;<class 'iris.%Library.DynamicArray'> need to be a <class 'list'>for num in numbers:
		print(num)
}

Thanks!

3
0 218
Question Scott Roth · Jul 5, 2024

I have a question about using OnInit() within a Ens.BusinessOperation.

When you include OnInit(), does OnInit() only execute when you start a Business Operation? Or does it execute OnInit () every time you send a REST request to the operation. I am trying to pinpoint when the best time is to execute the POST command to get the Token

I am needing to get a Bearer Token from a REST POST call and return the Authorization key prior to making the rest of the REST calls to pull down data.

When not using OAuth, what have you done to get the Token prior to executing any Requests?

Thanks

Scott

13
0 280
Question Guy Gelin · Aug 2, 2024

I'm fairly new to InterSystems and I've been tasked with building a portal that can show DataCheck States among other details, the GetStateBySystem seems to be fit the bill but I don't see a why to call directly from the .Net SDK. I tried sql and can get data from the table but does include "state" information ("starting, stopping, running etc..."). I did find github example around .Net but none fit the bill. If anyone can point me to the right example or documentation it would be greatly appreciated.

Thank you,

0
0 76
Question Mark OReilly · Jul 31, 2024

Hi:

I have been adapting the IRIS WHIZ addon as part of the contest. I will soon fork the code on github so the changes are available. 

The next phase is I am storing the date from and to time for a more complete search cache 

zenPage.getComponent(36).value

it works in the chrome console ok 

I'm not sure in external JS how to set the page it is on as a zenpage to use the zenpage functions

3
0 142
Question Scott Roth · Aug 1, 2024

As I begin our adventure into using an External FHIR Repository, I wanted to see what opinions people have about a design Idea I was working on. 

I want to create a way that my Team has the ability to send a Message Type, and the system knows from that Message Type which FHIR queries to execute and return the Response back to the user, sort of like a FHIR Query Hub. Does this sound reasonable?

0
0 89
InterSystems Official Bob Kuszewski · Jul 31, 2024

The 2024.1.1 extended maintenance release of InterSystems IRISInterSystems IRIS for Health, and HealthShare Health Connect is now available. It provides bug fixes for the previous 2024.1.0 release.

You can find the detailed change lists / upgrade checklists on these pages:

How to get the software

The software is available as both classic installation packages and container images.  For the complete list of available installers and container images, please refer to the Supported Platforms webpage.

0
0 306
Article Luis Angel Pérez Ramos · Jul 31, 2024 4m read

In the previous article we presented the d[IA]gnosis application developed to support the coding of diagnoses in ICD-10. In this article we will see how InterSystems IRIS for Health provides us with the necessary tools for the generation of vectors from the ICD-10 code list using a pre-trained language model, its storage and the subsequent search for similarities on all these generated vectors.

Introduction

1
1 356
Question Heloisa Paiva · Jul 29, 2024

Does anyone know what this task does exactly? And what problems would I have if I didn't use an SSL certificate?

I got the error: "SSL/TLS error in SSL_connect(), SSL_ERROR_SSL: protocol error, error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed"

Has anyone encountered this problem before?

4
0 160
Question Adam Raszkiewicz · Jul 26, 2024

I was watching this video about IRIS and GitHub and all is clear to me how it works and how code from each branch is getting deployed to each IRIS environment but the process to deploy is manual. My question is how can I, if possible, to utilize gti-source-control from GitLab CICD pipeline to deploy code automaticaly after PR approval instead going to the Git UI?

Thanks

2
0 476
Article Tomoko Furuzono · Jul 25, 2024 1m read

InterSystems FAQ rubric

To compile class routines including the mapped modifier, specify the compiler modifier "/mapped=1" or "/mapped". For example, do the following:

[Example 1] Get the class list and compile 

do$System.OBJ.GetClassList(.list,"/mapped")
 // build your classes starting from .listdo$System.OBJ.Compile(.list) 

[Example 2] Compile all classes 

do$system.OBJ.CompileAll("/mapped") 
1
0 210
Article Theo Stolker · Feb 16, 2024 5m read

Since my initial question on ordering json properties a few things have happened.

Let me recap the issue at hand:

  • In the FHIR specification, properties are listed in a certain order, for example, see https://www.hl7.org/fhir/patient.html#resource
  • When you serialize resources to XML, the resulting document elements are ordered as defined in the specification.
  • On the other hand, json objects returned from the IRIS for Health FHIR Repository will for example normally have the "id" as the last property, given that new properties are appended.

For me as a developer, this is annoying, even though I know json has no concept of order. When I read through received resources in e.g. Postman, I now need to look for "id" and "extension" properties at the end of the resource, instead of in the location that you would expect them based on the specification...

The most thorough but more expensive solution for ordering resource properties is to convert the FHIR resource to XML and back to json, like this:

/// Order FHIR resource properties according to the spec
/// With modifyOriginalObject = 1, also the original resource is re-ordered 
/// This is implemented by converting to XML and back so orders also deeper levels
/// This is 40-50 times slower than the shallow method, it takes 1.5 - 2 milliseconds 
/// With modifyOriginalObject = 1 it is "only" 20 times slower than the shallow method
ClassMethod FHIROrderResourcePropertiesDeep(schema As HS.FHIRServer.Schema, resource As %DynamicObject, modifyOriginalObject As %Boolean = 0) As %DynamicObject
{
    do ##class(HS.FHIRServer.Util.JSONToXML).JSONToXML(resource, .pOutStream, schema)
    set newresource = ##class(HS.FHIRServer.Util.XMLToJSON).XMLToJSON(.pOutStream, schema)

    if (modifyOriginalObject)
    {
        do ..CopyFromResource(resource, newresource) 
    }

    return newresource
}

This will properly order all properties in the object hierarchy based on the FHIR Schema.

I also have a more "shallow" method, where we just re-order each resource to start with "resourceType", "id", "meta", "text" and "extension", and we do not touch lower levels of the object hierarchy:

/// Order FHIR resource properties according to the spec
/// With modifyOriginalObject = 1, also the original resource is re-ordered 
/// This is a "shallow" method as it only looks at a few common attributes, and only orders the outer level of the object
/// This is however 40-50 times faster than the deep method, it only takes around 0.04 milliseconds
/// With modifyOriginalObject = 1 it takes around twice as much and so is "only" 20 times faster than the deep method
ClassMethod FHIROrderResourceProperties(resource As %DynamicObject, modifyOriginalObject As %Boolean = 0) As %DynamicObject
{
    set newresource = ..JsonOrderProperties(resource, [ "resourceType", "id", "meta", "text", "extension" ])

    if (modifyOriginalObject)
    {
        do ..CopyFromResource(resource, newresource) 
    }

    return newresource
}

/// Create a new json object with its properties in the specified order
ClassMethod JsonOrderProperties(object As %DynamicObject, order As %DynamicArray) As %DynamicObject
{
    #dim newObject as %DynamicObject = {}

    // First set the ordered properties in the new object 

    for index = 0:1:order.%Size() - 1
    {
        set name = order.%Get(index)
        set done(name) = 1
        set type = object.%GetTypeOf(name)

        if $EXTRACT(type, 1, 2) '= "un" // unassigned
        {
            do newObject.%Set(name, object.%Get(name)) 
        }
    }
    
    // Now copy remaining attributes not specified
    #dim iterator As %Iterator.Object = object.%GetIterator()

    while iterator.%GetNext(.name, .value, .type)
    {
        if '$DATA(done(name))
        {
            set type = object.%GetTypeOf(name)

            if (type = "boolean") || (type = "number") || (type = "null")
            {
                do newObject.%Set(name, value, type)
            }
            else
            {
                do newObject.%Set(name, value)
            }
        }
    }

    return newObject
}

I also wanted to be able to return a properly ordered FHIR resource from the Add() and Update() interaction methods in my IRIS for Health FHIR repository strategy. This is implemented through the modifyOriginalObject parameter you will find in both code samples above:

    if (modifyOriginalObject)
    {
        do ..CopyFromResource(resource, newresource) 
    }

Goal for the CopyFromResource(resource, newresource) method is to remove all properties from the original resource, and too re-insert the properties from the new resource in the proper order. Surprise, surprise, I ended up with the resource properties being perfectly reversed order. :)

What I learned from this is that the %Set() adds new properties in the last know empty spot. After reversing the order before adding I ended up with the perfectly ordered resource:

/// Copy one json object and replace properties in the other
ClassMethod CopyFromResource(object As %DynamicObject, newobject As %DynamicObject)
{
    // First remove all original properties
    #dim iterator As %Iterator.Object = object.%GetIterator()
    while iterator.%GetNext(.name1, .value, .type)
    {
        do object.%Remove(name1)
    }

    // Properties are added back in at the last known empty slot in the object, so we end up with everything in reverse order
    // That is why we explicitly reverse that
    #dim reversedorder as %ListOfDataTypes = ##Class(%ListOfDataTypes).%New()
    #dim newiterator As %Iterator.Object = newobject.%GetIterator()
    while newiterator.%GetNext(.name, .value, .type)
    {
        do reversedorder.Insert(name)
    }

    // Now add back all properties from the new object in reverse order!!
    for index = reversedorder.Count():-1:1
    {
        set name = reversedorder.GetAt(index)
        set value = newobject.%Get(name)
        set type = newobject.%GetTypeOf(name)

        if (type = "boolean") || (type = "number") || (type = "null")
        {
            do object.%Set(name, value, type)
        }
        else
        {
            do object.%Set(name, value)
        }
    }
}

Yesterday I tried using the %Clear() method available in 2023.3 on %DynamicAbstractObject, to simplify the code. Unfortunately this throws an UNIMPLEMENTED error.

To be continued!

1
1 438
Article Laurel James (GJS) · Jul 25, 2024 4m read

An effective source control solution allows organizations to manage complex codebases, facilitate seamless collaboration within development teams, and streamline deployment processes.

Sonic Healthcare, a leading provider of pathology, radiology, general practice, and corporate medical services, has significantly enhanced visibility and control over its complex environment by implementing Deltanji source control. The tight integration Deltanji provides with InterSystems IRIS and IRIS for Health has been central in achieving these improvements.
 

Sonic Healthcare's Set Up 

0
0 233
Question Javier Lorenzo Mesa · Jul 24, 2024

Hi,

I'm making a request to an API that works perfectly with Postman, you can see it here:

The URL is https://testcds.esriguide.org/v2/session/3189981 where the last part is the ID's session I want to get back.

When I try to make the same request in IRIS I always get a "Bad request" error.
I'm creating the request which all the information needed (or at least that I know):

Method TornaRequestGET() As %Net.HttpRequest

2
0 181