I've seen that %JSON.Adaptor makes it easy to serialize and deserialize objects to JSON, but I've also seen people building custom serialization logic. Are there scenarios where %JSON.Adaptor falls short, such as handling nested objects, null values or custom field naming conventions? What has been your experience?
Sara is my entry for the InterSystems AI Agents for FHIR contest. Feel free to try out Sara and vote for Sara on the contest page.

https://youtu.be/UAjI9O848wU?si=BWTVk9gsV4xTOlUj
Physicians spend only 47% of their work time on direct patient care [1]. The rest goes to EHR administrative tasks: order entry, documentation, prior authorizations, with 43% of their time spent on a clinical computer [2]
Hi Developers!
Recently we are getting a lot of requests on how to become an active and helpful member of the InterSystems Developer Community.
The terms are very simple:
Introduction
In my previous article, I introduced the FHIR Data Explorer, a proof-of-concept application that connects InterSystems IRIS, Python, and Ollama to enable semantic search and visualization over healthcare data in FHIR format, a project currently participating in the InterSystems External Language Contest.
In this follow-up, we’ll see how I integrated Ollama for generating patient history summaries directly from structured FHIR data stored in IRIS, using lightweight local language models (LLMs) such as Llama 3.2:1B or Gemma 2:2B.
The goal was to build a completely local AI pipeline that can extract, format, and narrate patient histories while keeping data private and under full control.
All patient data used in this demo comes from FHIR bundles, which were parsed and loaded into IRIS via the IRIStool module. This approach makes it straightforward to query, transform, and vectorize healthcare data using familiar pandas operations in Python. If you’re curious about how I built this integration, check out my previous article Building a FHIR Vector Repository with InterSystems IRIS and Python through the IRIStool module.
Both IRIStool and FHIR Data Explorer are available on the InterSystems Open Exchange — and part of my contest submissions. If you find them useful, please consider voting for them!
The First Tool Call: The Hack That Sparked Agentic AI
Healthcare billing isn’t a pipeline. It’s a conversation about trust.
Every day, millions of clinical transactions flow from doctors’ keyboards to insurance ledgers. Standard health IT systems are built to count these transactions. They store them. They organize them.
They route them. But standard systems don't notice them.
We’ve built faster and faster databases to process claims, but we forgot to ask: Does this claim make sense?
Because we don’t ask in real-time, we’ve accepted a compromise. We pay first, wait six months, and then hire forensic auditors to find the mistakes.
I decided to write this down before time wiped out my memory
It's a very personal story as a partner, as a competitor, as an employee,
as a customer and finally as an external observer of InterSystems.
This is a rather personal view of the history before Caché.
It is in no sense meant to compete with the excellent books from Mike Kadow discussed in an earlier article.
We have different histories and so this is meant to create a different perspective of the past.
The whole story started in 1966 at MGH (Mass.General Hospital) on a PDP-7 Ser.#103
with 8K of memory (18-bit words) [today = 18K byte ] as a spare system.
"Serial Number 103 - was located in the basement of the now demolished Thayer Building,
currently [2014] the site of the Cox Cancer Center at MGH.
In .NET projects I usually rely on appsettings per environment. In IRIS Productions, settings are stored per component and seem tied to the namespace. What strategies do you use to manage different configurations across environments without manually changing settings every time you promote a Production?
Hi Community,
Enjoy the new video on InterSystems Developers YouTube:
⏯ Labcorp Biopharmas Journey to and with Intersystems IRIS For Health @ Ready 2025
Hi all,
It's me again 😁. In the pervious article Writing a REST api service for exporting the generated FHIR bundle in JSON, we actually generated a resource DocumentReference, with the content data encoded in Base64
.png)
Question!! Is it possible to write a REST service for decoding it? Because I am very curious what is the message data talking about🤔🤔🤔
OK, Let's start!
1. Create a new utility class datagen.utli.decodefhirjson.cls for decoding the data inside the DocumentReference
ClassExtends%RegisteredObject2. Write a Python function decodebase64docref to
a. loop through the FHIR bundle
b.
Any plans for ODBC 3.8 support?
Hi Community,
We're excited to invite you to the upcoming webinar:
👉 Can FHIR also serve as input for operational management? 👈
🗓️ Date & Time: Wednesday, June 10th, 10 am CEST

In the previous article, we used pyprod to create production components while relying on the UI for production configuration. That same production can now be defined entirely in Python:
from intersystems_pyprod import Production, ServiceItem, ProcessItem, OperationItem
iris_package_name = "HelloWorld"
class MyProduction(Production):
services = [
ServiceItem(
"MyServiceName",
"HelloWorld.MyService",
host_settings={"target": "MyProcessName"},
)
]
processes = [
ProcessItem(
"MyProcessName",
"HelloWorld.MyProcess",
host_settings={"target": "MyOperationName"},
)
]
operations = [
OperationItem("MyOperationName", "HelloWorld.MyOperation")
]
Hi Community,
Enjoy the new video on InterSystems Developers YouTube:
⏯ GO IKO - GOtchas GOvernance and GOLive Tips for Kubernetes in Your Enterprise @ Ready 2025
The problem
How many times have we migrated an IRIS Instance to another machine, maybe even another version, and after a few days realized we forgot that one SSL Configuration critical for a Business Operations to work? Or maybe a credential, or a lonely class in a package by itself?
The solution
The simple solution is to make a checklist¹. A checklist of the entities we have to move. But simple checklists on Word documents are often forgotten, or just ignored.
Hi,
It's me again😁, recently I am working on generating some fake patient data for testing purpose with the help of Chat-GPT by using Python. And, at the same time I would like to share my learning curve.😑
1st of all for building a custom REST api service is easy by extending the %CSP.REST
Creating a REST Service Manually
Let's Start !😂
1. Create a class datagen.restservice which extends %CSP.REST
ClassExtends%CSP.REST2. Add a function genpatientcsv() to generate the patient data, and package it into csv string
ExtendsAsyou may test the function in the terminal by typing
.png)
3. Add a function
Hello everyone,
The InterSystems Learning Services Certification Team is pleased to announce the release of the HealthShare Unified Care Record Deployment Specialist Certification exam. The exam is now available for purchase and scheduling in the InterSystems exam catalog.
Welcome to the monthly recap of updates and releases to VS Code and InterSystems-related extensions relevant to IRIS developers.
Don’t forget, if you’re migrating from InterSystems Studio to VS Code, or want to deepen your knowledge, check out the VS Code training courses from George James Software: georgejames.com/vscode-training.
This recap covers the four VS Code releases in May: v1.119, v1.120, v1.121, and v1.122.
Editor and navigation
Hi Community!
We’ve just added some 🎁 new rewards on Global Masters!
Take a moment to explore the Rewards section. Exciting Spring Rewards – Grab Yours now!
Please note that our prize selection varies by region and country. We kindly ask you to review the available options for your location.
Not a Global Masters member yet? Join here using your InterSystems SSO credentials.
Hi all,
I'm working on a DICOM router in InterSystems IRIS, based on the workshop-iris-dicom-interop (https://github.com/intersystems-ib/workshop-iris-dicom-interop) example on GitHub. I'm using EnsLib.DICOM.Process to route incoming images to different PACS destinations, where the target system is decided at runtime via a database lookup.
I've run into two issues I'd love some guidance on:
1. Dynamically changing the destination without disrupting transactions
Right now, if I want to send to a new PACS target, I'd need to add a new Business Operation and call

In the previous IoP article, I showed how IoP can expose Python messages to DTL by generating JSON schemas. That is useful when the message is primarily a Python object and we want the IRIS tooling to understand its structure.
This time, the direction is a little different.
Starting with IoP 3.7.1, a PersistentMessage can now be a native IRIS message body class. The Python class is still the source code you write, but the generated IRIS class extends Ens.MessageBody
READY is right around the corner, and this year the Application Services team from InterSystems will be hosting a IPM Users GroupMeeting during the conference!This will be held Wednesday, April 29th during lunch from 12:30 – 1:30 (lunch will be served at the meeting room).
IPM version 0.10.7 was released on May 29th, 2026. As usual, you can check it out on the GitHub page or through the Community Registry.
Highlighted Features
Utility Scripts iriscli and ipm
IPM is now bundled with two convenience scripts that are runnable from a standard terminal. iriscli launches an interactive IRIS terminal and runs IPM commands directly. These are automatically installed to both ~/.local/bin/ and , so they work inside and outside of containers (Unix/Linux only).
Examples:
I have several Business Operations that share similar behavior, like building HTTP headers or parsing a specific response format. In C# I would extract this into a service class or a base class. What is the recommended way to do this in IRIS? Should I use a utility class, a common superclass, or is there another pattern the community prefers?
I have a Business Process that needs to call an external API that may take several seconds to respond. I'm worried that keeping the BP blocked waiting for the response could affect the overall Production throughput. Is there a recommended pattern for handling async calls inside a BPL or custom BP class to avoid this kind of bottleneck?
Hey everyone.
My team and I have a rare opportunity to start from scratch, and I am keen to know what things others that have gone through a similar process did differently. Obviously there's the immediate benefit of losing any technical debt that has built up over 10+ years of an ever changing environment along with many organisational changes and merges, but I'm thinking about the things that we can do to make life a lot easier for the next 10+ years.
Hi, we are trying to adapt the solution to use the IKO but we have problems deploying the webgateway on our company clusters, our clusters requires to have a specific definition on the securityContext due security concerns, it's possible to set those values trough the IrisCluster CRD? or we cannot use it from it? Should I open a WRC to handle this?

create Pod iris-webgateway-0 in StatefulSet iris-webgateway failed error: pods "iris-webgateway-0" is forbidden: ValidatingAdmissionPolicy 'prevent-root-run' with binding 'prevent-root-run' denied request: Containers should run with securityContext.runAsNonRoot or securityContext.runAsUser != 0. To learn more, check out the documentation: https://build.roche.com...

