发布新帖

查找

公告
· 二月 4

[Video] Taking the Fear out of FHIR - Fast Tracking Organizational FHIR Readiness

Hey Community!

We're happy to share a new video from our InterSystems Developers YouTube:

⏯  Taking the Fear out of FHIR - Fast Tracking Organizational FHIR Readiness @ Ready 2025

FHIR evangelists have been hyping the standard for over a decade - but what does it take to turn hype into reality? This session explores the specific use cases and needs of different organizations, highlighting key success factors and lessons learned. Discover how use-case-based training can help you effectively leverage FHIR product features in InterSystems IRIS for Health and HealthShare Unified Care Record.

🗣 Presenter: @Chi Nguyen-Rettig, LEAD North

Curious about best practices? Watch this and subscribe for more!

讨论 (0)1
登录或注册以继续
文章
· 二月 4 阅读大约需 11 分钟

AI Agents from Scratch Part 2: Giving the Brain a Body

cover

In Part 1, we laid the technical foundation of MAIS (Multi-Agent Interoperability Systems). We have successfully wired up the 'Brain', built a robust Adapter using LiteLLM, locked down our API keys with IRIS Credentials, and finally cracked the trick code on the Python interoperability puzzle.

讨论 (0)0
登录或注册以继续
文章
· 二月 4 阅读大约需 2 分钟

Highlights from Two Inspiring Days at France & Benelux READY 2026

France & Benelux READY 2026 has just come to an end, and once again, these two days demonstrated how dynamic, curious, and engaged the Developer Community truly is. Here is a look back in words and images at this great edition.

The event kicked off with welcome remarks from @Adeline Icard and @Geoffroy Vitoux, setting the tone for the days ahead: innovation, sharing, and collaboration.

@Don Woodlock then delivered an inspiring presentation on InterSystems values and culture - a standout moment that strongly resonated with the audience.

The first sessions immediately immersed participants in concrete and inspiring topics, with rich discussions around InterSystems technologies and their real-world use cases.

Throughout READY, we had the pleasure of meeting many participants during the sessions.

The questions, discussions, and experience sharing highlighted a strong interest in practical, hands-on topics, whether from a developer, architect, or manager perspective. I was also lucky to capture a moment with @Adeline Icard, one of the event’s organizers.

The gala dinner provided an opportunity to continue conversations in a more relaxed setting. Michel Amous opened the evening with a wonderful speech.

The setting was simply exceptional: the Les Ombres restaurant by chef Alain Ducasse, offering a spectacular view of the Eiffel Tower.

With @Anastasia Dyubaylo and @Evgeny Shvarov.

Later in the evening, @Adeline Icard introduced soprano Laure Poissonnier, who delighted us with her performance.

As is tradition at these events, we also enjoyed a visit to the permanent collection of the Musée du quai Branly, discovering particularly fascinating works.

The following day began with sessions, and after lunch, participants split into different groups. The Startup & Partner Pavilion, led by @Evgeny Shvarov, was a highlight, showcasing the InterSystems ecosystem. Great discussions, innovative ideas, and new connections emerged throughout these exchanges, with the President and Vice President of InterSystems present, along with many other speakers and participants.

Another highlight of READY for the Developer Community was the workshop I had the pleasure of leading: “Full Stack with InterSystems IRIS – building an end-to-end IT architecture.” Through a hands-on tutorial, participants explored how InterSystems IRIS can serve as the backbone of a complete, end-to-end IT architecture.

The session sparked many questions, discussions, and exchanges, before concluding in a friendly atmosphere with a Kahoot game. I was delighted to see that one of the winners was discovering InterSystems IRIS for the very first time during this workshop, alongside @Ward De Backer and @Lorenzo Scalese, who also won prizes.

And that’s a wrap for this READY. A huge thank you to all the participants, speakers, partners, and, of course, the organizers for making this edition such a success!

讨论 (0)1
登录或注册以继续
文章
· 二月 4 阅读大约需 3 分钟

Le retour sur France & Benelux READY 2026

Le France & Benelux READY 2026 vient de s’achever, et ces deux journées ont une nouvelle fois démontré à quel point la Communauté des Développeurs est dynamique, curieuse et engagée. Voici un retour en images et en mots sur cette belle édition.

L’événement a débuté par les welcome remarks de @Adeline Icard et @Geoffroy Vitoux, donnant le ton pour les journées à venir : innovation, partage et collaboration.

@Don Woodlock est ensuite intervenu pour une présentation inspirante sur les valeurs et la culture d’InterSystems, un moment fort qui a particulièrement résonné auprès des participants.

Les premières sessions ont immédiatement plongé les participants dans des sujets concrets et inspirants, avec des échanges riches autour des technologies InterSystems et de leurs usages.

Tout au long du READY, nous avons eu le plaisir de retrouver de nombreux participants pendant les sessions.

Les questions, discussions et retours d’expérience ont mis en évidence un fort intérêt pour des sujets pratiques et orientés terrain, que ce soit du point de vue du développeur, de l’architecte ou du manager. J’ai eu la chance de capturer un moment avec @Adeline Icard, l’une des organisatrices de l’événement.

Le dîner de gala a été l’occasion de prolonger les échanges dans un cadre plus détendu. Michel Amous a ouvert la soirée avec un très beau discours.

Le cadre était tout simplement exceptionnel : le restaurant Les Ombres du chef Alain Ducasse, offrant une vue spectaculaire sur la tour Eiffel.

Avec @Anastasia Dyubaylo et @Evgeny Shvarov.

Plus tard dans la soirée, @Adeline Icard a présenté la soprano Laure Poissonnier, qui nous a enchantés par sa performance.

Comme c’est la tradition lors de ces événements, nous avons également profité d’une visite de la collection permanente du musée du quai Branly, et découvert des œuvres particulièrement intéressantes.

La journée suivante a commencé par des sessions, puis après le déjeuner, les participants se sont répartis en différents groupes. Le Startup & Partner Pavilion, animé par @Evgeny Shvarov, a été un moment fort, mettant en lumière l’écosystème autour d’InterSystems. De belles discussions, des idées innovantes et de nouvelles connexions se sont nouées tout au long de ces échanges, en présence du Président et du Vice-Président d’InterSystems, parmi d'autres intervenants et participants.

Un autre temps fort du READY pour la Communauté des Développeurs a été le workshop que j’ai eu le plaisir d’animer: “Full Stack with InterSystems IRIS – building an end-to-end IT architecture”. À travers un tutoriel pratique, les participants ont exploré comment InterSystems IRIS peut servir de socle à une architecture IT complète, de bout en bout.

La session a donné lieu à de nombreuses questions, discussions et échanges à la fin, avant de se conclure dans une ambiance conviviale par un Kahoot. J’ai eu le plaisir de constater que l’un des gagnants découvrait InterSystems IRIS pour la toute première fois lors de ce workshop, aux côtés de @Ward De Backer et @Lorenzo Scalese, qui ont également remporté des lots.

Et voilà pour ce READY. Un grand merci à tous les participants, les speakers, les partenaires et, bien sûr, aux organisateurs pour cette édition réussie!

讨论 (0)1
登录或注册以继续
文章
· 二月 4 阅读大约需 5 分钟

JSON2Class, o conversor de JSON para ObjectScript que você sempre quis

Quantas vezes você teve que receber ou gerar um JSON e desejou poder trabalhar nele usando DTLs sem ter que lidar com DynamicObjects tentando lembrar o nome de cada campo? Você quer dividir e tornar seu arquivo JSON gigante mais digerível?

No meu caso, nunca, mas pensei que alguém poderia achar útil ter um recurso que captura seu JSON e o divide em uma série de classes ObjectScript com as quais você pode trabalhar de forma mais fácil e conveniente.

Pois bem... contemplem o JSON2Class em toda a sua glória!

Como o JSON2Class funciona?

É muito simples: ele aproveita os recursos do Embedded Python para fatiar e analisar seu JSON e gerar as classes associadas. Essas classes geradas serão de dois tipos:

  • %Persistent: para a classe principal ou raiz.
  • %SerialObject: para todas as subclasses que serão anexadas à principal.

Para fazer isso, ele leva em consideração os seguintes pontos:

Palavras reservadas

Nem todo nome de propriedade que vem no seu JSON é aceitável, então ele será modificado adicionando ao final do nome JSON, de modo que " language" se tornará " languageJSON".

Caracteres especiais

Caracteres especiais como "_" também são  removidos, então "patient_name" passará a ser chamado de "patientname".

%JSONFIELDNAME

Para evitar que a classe mude de nome quando for convertida de volta para JSON, o atributo %JSONFIELDNAME foi adicionado às propriedades cujos nomes são modificados, permitindo manter o rótulo original ao exportá-lo para JSON.

Gerando as classes

Toda a funcionalidade está contida na classe Utils.JSON2Class  , e para invocar o processo de geração temos o seguinte método:

ClassMethod Convert(
    json As %String,
    basePackage As %String = "App.Model",
    rootClassName As %String = "Root",
    outDir As %String = "/shared/generated"
) As %String

Vamos analisar os atributos do ClassMethod:

  • json: Este será nosso JSON modelo que queremos gerar.
  • basePackage: O pacote no qual todas as classes serão implementadas.
  • rootClassName: O nome da classe persistente que atuará como a raiz.
  • outDir: O diretório local onde os arquivos de classe serão gerados.

Exemplo:

Começamos com um JSON típico, como um recurso FHIR do tipo patient:

{
	"resourceType": "Patient",
	"id": "example",
	"identifier": [
		{
			"use": "usual",
			"type": {
				"coding": [
					{
						"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
						"code": "MR"
					}
				]
			},
			"system": "urn:oid:1.2.36.146.595.217.0.1",
			"value": "12345",
			"period": {
				"start": "2001-05-06"
			},
			"assigner": {
				"display": "Acme Healthcare"
			}
		}
	],
	"active": true,
	"name": [
		{
			"use": "official",
			"family": "Chalmers",
			"given": [
				"Peter",
				"James"
			]
		},
		{
			"use": "usual",
			"given": [
				"Jim"
			]
		},
		{
			"use": "maiden",
			"family": "Windsor",
			"given": [
				"Peter",
				"James"
			],
			"period": {
				"end": "2002"
			}
		}
	],
	"telecom": [
		{
			"use": "home"
		},
		{
			"system": "phone",
			"value": "(03) 5555 6473",
			"use": "work",
			"rank": 1
		},
		{
			"system": "phone",
			"value": "(03) 3410 5613",
			"use": "mobile",
			"rank": 2
		},
		{
			"system": "phone",
			"value": "(03) 5555 8834",
			"use": "old",
			"period": {
				"end": "2014"
			}
		}
	],
	"gender": "male",
	"birthDate": "1974-12-25",
	"_birthDate": {
		"extension": [
			{
				"url": "http://hl7.org/fhir/StructureDefinition/patient-birthTime",
				"valueDateTime": "1974-12-25T14:35:45-05:00"
			}
		]
	},
	"deceasedBoolean": false,
	"address": [
		{
			"use": "home",
			"type": "both",
			"text": "534 Erewhon St\nPeasantVille, Rainbow, Vic3999",
			"line": [
				"534 Erewhon St"
			],
			"city": "PleasantVille",
			"district": "Rainbow",
			"state": "Vic",
			"postalCode": "3999",
			"period": {
				"start": "1974-12-25"
			}
		}
	],
	"contact": [
		{
			"relationship": [
				{
					"coding": [
						{
							"system": "http://terminology.hl7.org/CodeSystem/v2-0131",
							"code": "N"
						}
					]
				}
			],
			"name": {
				"family": "du Marché",
				"_family": {
					"extension": [
						{
							"url": "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix",
							"valueString": "VV"
						}
					]
				},
				"given": [
					"Bénédicte"
				]
			},
			"additionalName": [
				{
					"use": "nickname",
					"given": [
						"Béné"
					]
				}
			],
			"telecom": [
				{
					"system": "phone",
					"value": "+33 (237) 998327"
				}
			],
			"address": {
				"use": "home",
				"type": "both",
				"line": [
					"534 Erewhon St"
				],
				"city": "PleasantVille",
				"district": "Rainbow",
				"state": "Vic",
				"postalCode": "3999",
				"period": {
					"start": "1974-12-25"
				}
			},
			"additionalAddress": [
				{
					"use": "work",
					"line": [
						"123 Smart St"
					],
					"city": "PleasantVille",
					"state": "Vic",
					"postalCode": "3999"
				}
			],
			"gender": "female",
			"period": {
				"start": "2012"
			}
		}
	],
	"managingOrganization": {
		"reference": "Organization/1"
	}
}

Vamos agora olhar para o objeto Root, que será nossa classe principal de paciente:

Vamos agora olhar para o objeto Root, que será nossa classe principal de paciente:

Class App.Model.Root Extends (%Persistent, %JSON.Adaptor)
{

Property resourceType As %String;
Property idJSON As %String(%JSONFIELDNAME = "id");
Property identifier As list Of App.Model.Root.Identifier;
Property active As %Boolean;
Property name As list Of App.Model.Root.Name;
Property telecom As list Of App.Model.Root.Telecom;
Property gender As %String;
Property birthDate As %String;
Property deceasedBoolean As %Boolean;
Property address As list Of App.Model.Root.Address;
Property contact As list Of App.Model.Root.Contact;
Property managingOrganization As App.Model.Root.ManagingOrganization;
}

Et voilà! Agora podemos armazenar nosso JSON como um objeto regular.

Próximos passos

Não é ruim poder gerar automaticamente as classes, mas seria interessante poder transformar automaticamente o JSON em uma instância das classes que criamos, levando em conta as particularidades dos nomes das propriedades.

1 条新评论
讨论 (1)2
登录或注册以继续