#InterSystems IRIS for Health

10 Followers · 2.5K 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.

Announcement Steven LeBlanc · Feb 19, 2020

AWS launched their first generation of Amazon EC2 A1 instances last year, powered by Arm-based AWS Graviton processors. At AWS re:Invent 2019, Amazon announced the second-generation AWS Graviton2 processors and associated Amazon EC2 M6g instance type, boasting up to 40% better price performance over current generation Intel Xeon based M5 instances.

The AWS Graviton2-based M6g instances are currently in preview, and InterSystems jumped on the opportunity to measure their performance with the InterSystems IRIS Data Platform.

9
0 3422
InterSystems Official Pete Greskoff · Mar 23, 2021

March 23, 2021 – Alert: Potential Data Integrity Issue with Mirror Dejournaling

InterSystems has corrected a defect that can cause data inconsistency issues on non-primary mirror members in extremely rare circumstances. This defect affects all released versions of InterSystems products.

If the defect occurs, it happens silently during normal operation on a mirrored system. The result of this defect is that a mirror member fails to dejournal a subset of journal records, which then leads to data inconsistency across mirror members. This affects both failover and async members.

0
0 402
Article Mark Bolinsky · Mar 6, 2020 7m read

Introduction

InterSystems has recently completed a performance and scalability benchmark of IRIS for Health 2020.1, focusing on HL7 version 2 interoperability. This article describes the observed throughput for various workloads, and also provides general configuration and sizing guidelines for systems where IRIS for Health is used as an interoperability engine for HL7v2 messaging.

3
4 2045
Question Ravi Akkiraju · Mar 14, 2021

One of the REST APIs we need to call takes one of request parameter as a byte array. I am trying to create a message class and couldnt figure out which is equivalent type that corresponds to Byte[]. I need to read from a jpg file and then convert it to byte[] before i invoke this webservice. Appreciate if anyone can point me in the right direction. I can use %Stream.FileBinary class to store the jpg file after loading from a file. trying to figure out how to convert that to byte[].

Thank you,

Ravi

4
0 733
Article Tomohiro Iwamoto · Mar 15, 2021 13m read

Purpose

Most CloudFormation articles are Linux-based (no wonder), but there seems to be a demand for automation for Windows as well. Based on this original article by Anton, I implemented an example of deploying a mirror cluster to Windows servers using CloudFormation.I also added a simple walk through.
The complete source code can be found here.

Update: 2021 March 1 I added a way to connect to Windows shell by public key authentication via a bastion host as a one-liner.

0
0 721
Article Dmitry Maslennikov · Mar 3, 2021 4m read

What do you think If I will say you, that very soon you will be able to connect to IRIS from the application written in Rust.

What is Rust

Rust is a multi-paradigm programming language designed for performance and safety, especially safe concurrency. Rust is syntactically similar to C++, but can guarantee memory safety by using a borrow checker to validate references. Rust achieves memory safety without garbage collection, and reference counting is optional. (c) Wikipedia

Most loved language for the last five years by the time of StackOverflow survey 2020.

What is possible right now.

5
2 797
Article Mihoko Iijima · Mar 5, 2021 3m read

This article is a continuation of this post.

The purpose of this article is to explain how the Interoperability menu works for system integration.

image

The left side of the figure is the window for accepting information sent from external systems.

There are various ways to receive information, such as monitoring the specified directory at regular intervals to read files, periodically querying the database, waiting for input, or directly calling and having it passed from applications in other systems.

1
0 1255
Article Mihoko Iijima · Mar 5, 2021 6m read

This article is a continuation of this post.

In the previous article, how the Interoperability menu works for system integration was explained.

In this article, I would like to explain how to develop a system integration using the Interoperability menu.

To begin with, what kind of process do you want to create? While thinking about this, make the following content.

0
0 808
Article Mihoko Iijima · Mar 5, 2021 4m read

This article is a follow-up to this post.

In the previous article, [What is a Production?], we checked the production contents. We ran the sample code and checked the flowing messages' contents into the production on the Visual Trace page.

This article will review the concept and the definition of the messages used to send and receive data between components from the required development content for system integration.

Before creating a message, let's review the case study.

0
0 703
Article Mihoko Iijima · Mar 5, 2021 10m read

This article is a continuation of this post.

In the previous article, we reviewed how to create and define messages used to send and receive data between components.

In this article, I will explain how to create a business operation from the component creation methods.

We will quickly check the code by referring to the sample.。

image

Component Name Role
Start.FileBS
0
0 1117
Article Mihoko Iijima · Mar 5, 2021 7m read

This article is a continuation of this post.

In the previous article, we discussed business operations' creation from the components required for system integration.

In this article, you will learn how to create a business process that calls the two business operations you have defined in the sequence order.

The business process acts as the coordinator (command center) of the process.

0
0 650
Article Mihoko Iijima · Mar 5, 2021 9m read

This article is a continuation of this post.

In the previous article, we discussed the development of business processes, which are part of the components required for system integration and serve as a production coordinator.

This article will discuss creating a business service, which is the information input window for production.

And finally, the last component of “Let's Use Interoperability!

0
0 810
Article Shintaro Kaminaka · Mar 4, 2021 11m read

Hello, developers!

In this article, we will focus on OAuth2, a protocol that is increasingly being used in combination with FHIR to perform authorization.

In this part 1, we will start up the Docker container for IRIS for Health and Apache, configure the OAuth2 authorization server function on IRIS for Health, access it from the REST development tool Postman, and obtain an access token. Besides, in Part 2 and beyond, we will add FHIR repository functionality to IRIS for Health, add OAuth2 resource server configuration, and explain how to execute FHIR requests with access tokens from Postman.

0
2 1784
Question Lee Cascio · Feb 5, 2021

I was having trouble with some dimension based calculated members defined in Analyzer.  They would work and then not work.   At one point I had two identical calculated measures, same code, same specification and one would work and one would not.  I was trying to set them up in "shared storage", that checkbox in the calculated member dialog that should allow the measures to be used across multiple pivots.

2
0 285
Question Matthew Baron · Feb 23, 2021

Today we had an issue where a couple of our IRIS "processes" had a status of "Dead".  

How do I configure IRIS so that, when that happens, IRIS will log an event to messages.log or alerts.log?

We are forwarding the contents of both of those logs to Splunk for analysis, and I'd like to be able to see those events in there as well.

7
0 504
Question Nicole Febres · Nov 12, 2020

Hi, I am trying to filter transactions based on a value within OBX 3.1 and OBX 5.1 within the same repeating segment.  The segment looks like this

OBX|60|ST|RADONCPT||Y|

I originally tried this within a routing rule

(HL7.{OBX():3.1} Contains "<RADONCPT>")&&(HL7.{OBX():5.1} Contains "<Y>"))
This didn't work because if the RADONCPT was present and another OBX segment contained Y, it would still pass.  I am now looking to do this via a DTL, but I am stuck.  Is there a way to skip transforming a message based on if a value matches both OBX 3.1 and OBX 5.1 within the same segment?
5
0 733
Question Menno Voerman · Feb 11, 2021

Hi All,

I hope someone can help me with the following, it's about the usage of the class EnsLib.HL7.Service.HTTPService.

Working situation right know.

In IIS we've got a site configured who is dealing with the client certificate, etc and redirect the full request to http://localhost/csp/healthshare/NAMEPSACE/EnsLib.HL7.Service.HTTPServi… and the web gateway redirects the request to Business Service 'EnsLib.HL7.Service.HTTPService.cls'.

Preferred situation:

We would like to have multiple available endpoints per namespace. According the documentation of the class 'EnsLib.HL7.Service.

2
0 662
InterSystems Official Pete Greskoff · Dec 8, 2020

InterSystems has identified an issue with product distributions containing Certificate Authority certificates that expire at the end of 2020. This issue does not affect system operation or system security in any way, although it does generate alerts about expiring certificates in the cconsole.log or messages.log files. The messages may be ignored and there are instructions below to eliminate them.

The issue affects the following versions:

  • Caché and Ensemble 2017.1, 2017.2, and 2018.
2
3 899
Article Alberto Fuentes · Feb 18, 2021 2m read

Hi Community! 

I'm sharing a little tool (REST service) to download interoperability messages from your browser.

You only need to:

  1. Create a web application in Management Portal (e.g. /downloadmsg) and set DispatchClass=Util.DownloadMsg.
  2. Call the tool using your browser passing the namespace and the message header id to download. http://localhost:52773/downloadmsg/ns/mydev/msgid/17441
/// 
/// Util to download messages given a message header id
/// 
/// Setup:
/// 1. Create a webapplication (e.g. /downloadmsg) and set DispatchClass=Util.DownloadMsg
/// 2. Go to http://localhost:52773/downloadmsg/ns/user/msgid/19 to download the message reference by header 19 in namespace user
Class Util.DownloadMsg Extends %CSP.REST
{

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
    <Route Url="/ns/:ns/msgid/:msgId" Method="GET" Call="DownloadMessage"/>
</Routes>
}

/// Download a message given a Ens.MessageHeader id
ClassMethod DownloadMessage(ns As %String, msgId As %String = "") As %Status
{
    set ret = $$$OK
    set currentNs = $namespace

    try {
        set $namespace = ns
        $$$ThrowOnError(..ExportMsgToStream(msgId, .stream, .filename))

        // set headers to download stream as filename
        do %response.SetHeader("Content-Type", "application/octet-stream")
        do %response.SetHeader("Content-Disposition", "attachment; filename="""_filename_"""")
        do %response.SetHeader("Content-Length", stream.Size)
        do stream.Rewind()
        do stream.OutputToDevice()

    } catch ex {
        set ret = ex.AsStatus()
    }

    // restore namespace
    set $namespace = currentNs

    quit ret
}

/// Export a message to stream given a Ens.MessageHeader id
ClassMethod ExportMsgToStream(msgId As %String, Output stream As %Stream.Object, Output filename As %String) As %Status
{
    set ret = $$$OK
    try {
        // stream
        set stream = ##class(%Stream.GlobalCharacter).%New()
        set filename = ""

        // message header
        set headerObj = ##class(Ens.MessageHeader).%OpenId(msgId,,.sc)
        $$$ThrowOnError(sc)

        // message body
        set obj = $classmethod(headerObj.MessageBodyClassName, "%OpenId", headerObj.MessageBodyId)
        set classname = $classname(obj) 

        // output to stream
		if classname="EnsLib.HL7.Message" {
			set sc = $method(obj, "OutputToLibraryStream", .stream)
			$$$ThrowOnError(sc)
			set filename = msgId_".hl7"
		}
		else {
			set writer = ##class(%XML.Writer).%New()
			set writer.Indent=1
			set writer.NoXMLDeclaration=1
			$$$ThrowOnError(writer.OutputToStream(.stream))
			$$$ThrowOnError(writer.RootObject(obj))
			set filename = msgId_".xml"
		}
    } catch ex {
        set ret = ex.AsStatus()
    }
    quit ret
}

}
0
0 525
Question Matthew Baron · Feb 17, 2021

Is there an API that can be used to remotely fetch the state of an IRIS instance similar to what is reported with "iris list"?  Specifically, I'm looking to be able to remotely detect when an IRIS instance is in "hung" state.

I know there is the "iris_system_state" metric that I can consume in Grafana, but I found that when our system was in a "hung" state, there was just no data for that metric and I'd think if you alert on that, you cannot be sure if the IRIS system is down or hung or there's just an issue with prometheus fetching stats from IRIS.

1
0 569
Question Rick Prichett · Feb 10, 2021

Hi everyone, I am trying to return a cloned version of my ADT that I have made changes to in a Business Process.  So far I have the following in my process.  

&sql(Select MemberId INTO :pMemberIDval from CDSM_MemberAPI.MemberInfo where MemDOB = :ptDOB and MemLname = :ptLname and MemFname = :ptFname)

set newrequest = pRequest.%ConstructClone()

set MemberIDPID4 = newrequest.SetValueAt(pMemberIDval, "PID:4.1")

The following does return the value I am populating the clone with to the log

  set newrequestPID4 = newrequest.GetValueAt("PID:4.

3
0 402
Announcement Anastasia Dyubaylo · Feb 3, 2021

Hi Developers,

We're pleased to invite all the developers to the upcoming InterSystems Grand Prix contest kick-off webinar!

The topic of this webinar is dedicated to our mega Grand Prix contest. We invite to use IntegratedML, Native API, multi-model, Analytics and NLP, Open API and Interoperability, IKO.

In this webinar, we'll talk about the topics to expect from participants and show you how to develop, build and deploy applications on InterSystems IRIS data platform.

Date & Time: Monday, Febraury 8 — 10:00 AM EDT

Speakers:  
🗣 @Evgeny Shvarov, InterSystems Developer Ecosystem Manager

🗣 @Thomas Dyar,  InterSystems Product Specialist - Machine Learning


2
0 346
InterSystems Official Pete Greskoff · Feb 11, 2021

February 11, 2021 – Alert: Incomplete Query Results with ‘ORDER BY <row ID field> DESC’

InterSystems has corrected a defect that can cause incomplete query results. This defect affects:

  • InterSystems IRIS and InterSystems IRIS for Health 2019.1.0, 2019.1.1, 2019.2, 2019.3, 2019.4, 2020.1.0, 2020.2, and 2020.3
  • HealthShare Health Connect 2019.1.0, 2019.1.1, 2020.1.0
  • HealthShare Products 2019.2, 2020.1 and 2020.2

(In HealthShare and HealthShare Health Connect, this defect only affects Personal Community with 64,000 patient proxies and possibly customer-built custom queries.

0
0 301