Effacer le filtre
Question
William Glover · Déc 9, 2022
J'essaie d'installer les packages requis pour utiliser .Net avec HealthShare comme ci-dessous.
Mais je ne peux pas utiliser Nuget pour le faire, et la documentation semble assez vague, doit-elle être configurée sur la même machine que l'instance InterSystems ? Je n'ai jamais utilisé Nuget mais en général IRISClient.dll, XEP.dll et au minimum IRIS client doit être sur la même machine que le projet. Les versions client d'IRIS/ HealthShare sont fournis avec l'installation du Serveur dans le dossier suivant :
<dossier d'install>/dev
example sous linux :
/usr/irissys/dev/dotnet/
`-- bin
|-- InterSystems.Data.Bindings.2.0.0.nupkg
|-- InterSystems.Data.IRISClient.2.0.0.nupkg
|-- InterSystems.Data.Utils.2.0.0.nupkg
|-- InterSystems.Data.XEP.2.0.0.nupkg
|-- net5.0
| |-- InterSystems.Data.Gateway.pdb
| |-- InterSystems.Data.Gateway.xml
| |-- InterSystems.Data.GatewayArm
| |-- InterSystems.Data.GatewayLinux
| |-- InterSystems.Data.GatewayOSX
| |-- InterSystems.Data.IRISClient.dll
| |-- InterSystems.Data.IRISClient.xml
| |-- InterSystems.Data.Utils.dll
| |-- InterSystems.Data.Utils.xml
| `-- Newtonsoft.Json.dll
`-- net6.0
|-- InterSystems.Data.Gateway.pdb
|-- InterSystems.Data.Gateway.xml
|-- InterSystems.Data.GatewayArm
|-- InterSystems.Data.GatewayLinux
|-- InterSystems.Data.GatewayOSX
|-- InterSystems.Data.IRISClient.dll
|-- InterSystems.Data.IRISClient.xml
|-- InterSystems.Data.Utils.dll
|-- InterSystems.Data.Utils.xml
`-- Newtonsoft.Json.dll
Toutes ces libraires peuvent etre utilisées sur une autre machine, elles ouvreront une socket TCP pour effectuer la connection sur le superserver port (1972 par default, 51773 pour HealthShare, enfin je crois).
Question
Cécile Heuillet · Mai 26
Bonjour,
je me suis rendue compte que j'avais cette erreur qui est survenue sur une interop qui tournait depuis quelques mois :
"BP completion cleanup error deleting BP instance Id: 1133, ERREUR #5540: SQLCODE : Message -106 : Échec de suppression de la ligne de la table « xxx.Context » avec %rowid=« 1012 », la ligne avec cet ID n'a pas été trouvée."
Nous n'avons pas fait de modification à ce moment là et je ne trouve pas d'où vient l'erreur. Nous avions fait plus tôt un changement de namespace mais c'était bien plus tôt.
Et par ailleurs cela ne met pas le système en erreur.
Avez vous une idée svp d'où cela pourrait provenir ou de ce que je pourrais tester ?
En vous remerciant par avance pour votre aide.
Bien cordialement,
Cécile Bonjour Cécile,
L'erreur "BP completion cleanup error deleting BP instance" dans InterSystems IRIS survient généralement lors de la suppression d'une instance de Business Process (BP) après son exécution.Si le BP est configuré avec PoolSize=0, l'action de suppression des instances peut échouer car le système ne peut pas contrôler tous les threads simultanés.
As-tu plus d'informations dans l'Event Log : Interoperability > Event Log ?
Article
Irène Mykhailova · Avr 12, 2023
Cet article est le deuxième d'une série expliquant comment créer un système d'apprentissage automatique de bout en bout.
### Exploration des données
L'Intersystème IRIS dispose déjà de ce dont nous avons besoin pour explorer les données : un moteur SQL ! Pour les personnes qui ont l'habitude
d'explorer des données dans des fichiers
csv ou des fichiers texte, cela pourrait aider à accélérer cette étape. Fondamentalement, nous explorons toutes les données pour comprendre l'intersection
(jointures), ce qui devrait permettre de créer un jeu de données préparé pour être utilisé par un algorithme d'apprentissage automatique.
##### Tableau d'articles ( Fourni par l'équipe Intersystems )

##### Tableaude balises ( Fourni par l'équipe Intersystems )

Notre défi consiste à classer un **article** avec les bonnes **balises**. Et nous avons un tas d'articles et toutes les balises avec
description.
Il existe plusieurs techniques de classification, mais les cas les plus courants de classification utilisent des données structurées ! Un article,
un long texte n'est pas exactement structuré de ce point de vue.
### L'apprentissage automatique fonctionne la plupart du temps avec des NOMBRES - Faites avec !
Oui ! Même le modèle de données le plus normalisé contient du **texte**, mais lorsque nous devons utiliser des algorithmes de ML, nous devons trouver une solution
pour convertir tous les textes en nombres. Mais n'oubliez pas que les **données non structurées* ne prendront pas les nombres prêts à être utilisés
dans un modèle de classification. Il est temps de...
### Ingénierie des caractéristiques
Dans cette étape, nous convertissons le texte, les nombres, les éléments non structurés et le chaos dans une **matrice** (la plupart du temps)...
oui, cet élément de vos cours d'algèbre d'autrefois. Si nous avons un tableau qui ressemble déjà à une matrice, vous aurez probablement moins
de travail que nous ! Nous avons un grand texte avec des tailles, des formes et des mots différents...
### Sac de mots
L'une des façons de transformer un texte long en une matrice est le sac de mots :
|expression|
|------------|
|Nicole devrait acheter une voiture|
|Jack devrait vendre son bateau|
```
[Nicole, Jack, devrait, acheter, vendre, une, son, voiture, bateau]
[1 , 0, 1, 1, 0, 1, 0, 1, 0]
[0 , 1, 1, 0, 1, 0, 1, 0, 1]
```
Ce n'est qu'un petit exemple. Mais vous pouvez constater que plus il y a de mots, plus la matrice est grande. Heureusement, nous disposons de nombreux
composants pour vous aider à créer des sacs de mots. Dans ce cas, j'ai utilisé les composants de Sklearn pour le faire.
```
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.preprocessing import MultiLabelBinarizer
ml_bin = MultiLabelBinarizer(classes=all_tags)
matrix_y = ml_bin.fit_transform(a_dataframe)
count_vec = CountVectorizer(ngram_range=(1,1), tokenizer=tokenize, strip_accents='unicode', stop_words=stop_words)
matrix_x = count_vec.fit_transform(a_dataframe)
```
Après avoir exécuté les méthodes ci-dessus, nous disposons d'un vectoriseur que nous devrons conserver tout le temps que nous voulons prédire.
Si nous changeons le vectoriseur, nous risquons de perturber les matrices et rien ne devrait fonctionner par la suite.
### Est-ce que je vous ai déjà dit que nous ne devions utiliser que des chiffres ?
Il y a un autre problème ! Pour certains algorithmes, la taille du nombre peut perturber vos intentions. En bref, si un élément de la matrice a
une valeur de 1 et qu'un autre élément a une valeur de 987, certains algorithmes pourraient interpréter cela
comme l'importance de l'élément et prendre la mauvaise direction.
### Algorithmes de classification ML
Il existe de nombreux documents à lire sur les algorithmes de classification, vous pouvez commencer par cet article :
[https://machinelearningmastery.com/types-of-classification-in-machine-learning/](here)
### Article suivant : stratégie de formation (pour les données, oubliez les GIMS)
J'espère que vous appréciez. Si vous aimez le texte et mon application, votez sur
[https://openexchange.intersystems.com/contest/current](https://openexchange.intersystems.com/contest/current) dans mon application **iris-ml-suite**
Article
Lorenzo Scalese · Fév 1, 2023
# Ajout de VSCode dans votre conteneur IRIS
L'une des façons les plus simples de mettre en place des environnements de développement reproductibles est de créer des conteneurs pour ces environnements. Je trouve que lors d'itérations rapides, il est très pratique d'héberger une instance de vscode dans mon conteneur de développement. Ainsi, j'ai créé un rapide script de conteneur pour ajouter un vscode basé sur un navigateur dans un conteneur IRIS. Cela devrait fonctionner pour la plupart des conteneurs 2021.1+. [Mon référentiel de code est disponible ici](https://github.com/nickmitchko/Hosting-vscode-in-a-container)
> Conteneur InterSystems IRIS avec vscode et pré-connecté
| Réf. | Valeur |
|--------------|:--------:|
| Utilisateur | _SYSTEM |
| Mot de passe | SYS |

## Aperçu
Ce projet crée un conteneur IRIS avec une version hébergée (basée sur le web) de vscode disponible dans le même conteneur IRIS. Ceci fournit :
* Modification du code du même conteneur
* Pré-connexion à l'instance IRIS du conteneur
* Liens à partir du Portail de gestion
* Démarrage automatique de l'IDE avec le conteneur
# Démarrage rapide
1. [Téléchargez](https://github.com/nickmitchko/Hosting-vscode-in-a-container/archive/refs/heads/master.zip) ou `git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git`
2. A la racine du projet, lancez `docker build . -t vscode-irishealth-ml:latest --no-cache`
3. Lancez `docker-compose up`
* Vous n'utilisez pas docker compose ? Voir [ici](#No-Docker-Compose)
4. Naviguez vers [Management Portal](http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen)
5. Connectez-vous avec l'utilisateur et le mot de passe figurant en haut de ce guide
6. Cliquez sur VSCODE Link dans la fenêtre Favoris
7. Lorsque vous y êtes invité, utilisez le même mot de passe dans le vscode pour vous connecter à l'instance IRIS.
```bash
# Nouveau dossier pour le projet
mkdir vscode-iris
cd vscode-iris
# Clonez le référentiel ici
git clone https://github.com/nickmitchko/Hosting-vscode-in-a-container.git .
# Créez une image
docker build . -t vscode-irishealth-ml:latest --no-cache
# Exécution (A) ou (B) uniquement
#
# (A) Exécution du fichier de composition
docker-compose up
# OU (B) si vous préférez un démon
docker-compose up -d
```
## Ajoutez la persistance
Si vous cherchez une instance iris persistante, il faut commenter les lignes 16-20 du fichier docker-compose.yml. Cela permet d'ajouter un montage de stockage persistant au conteneur.
```yml
volumes:
- "./durable/:/durable/"
environnement:
- ISC_DATA_DIRECTORY=/durable/iconfig
```
## Modification de l'image de base
Cette image est construite à partir des images zpm de la communauté des développeurs d'InterSystems ([disponible ici](https://hub.docker.com/r/intersystemsdc/iris-community/tags)). Ces images incluent la commande zpm qui nous permet d'installer facilement à partir du référentiel de paquets, mais la licence communautaire n'est que de 90 jours.
La balise d'image utilisée pour les constructions est la suivante :
```dockerfile
FROM intersystemsdc/irishealth-ml-community:latest
```
Si vous voulez remplacer l'image, remplacez la première ligne du fichier docker par l'étiquette de l'image souhaitée (soit une instance IRIS personnalisée, soit une instance [prise en charge](https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_containerregistry#PAGE_containerregistry_public)). Par exemple :
```dockerfile
FROM containers.intersystems.com/intersystems/irishealth-community:2021.2.0.651.0
```
# Pas de Docker-Compose
Si vous n'utilisez pas docker compose, vous pouvez toujours exécuter le conteneur comme suit :
```bash
# Après avoir créé le conteneur
# --après la commande est nécessaire
docker run --name vscode -d \
--publish 1972:1972 \
--publish 52773:52773 \
--publish 51773:51773 \
--publish 53773:53773 \
--publish 8080:8080 \
--publish 8888:8888 \
vscode-irishealth-ml:latest \
--after "/bin/bash /install/boot.sh"
```
Article
Sylvain Guilbaud · Avr 22
Rubrique FAQ InterSystems
Les variables globales temporaires stockées dans les bases de données IRISTEMP/CACHETEMP sont utilisées lorsqu'un processus n'a pas besoin de stocker des données indéfiniment, mais requiert les performances élevées des variables globales. Les bases de données IRISTEMP/CACHETEMP ne sont pas journalisées ; leur utilisation ne crée donc pas de fichiers journaux.
Le système utilise les bases de données IRISTEMP/CACHETEMP pour le stockage temporaire et les utilisateurs peuvent y accéder à cette fin.
Pour plus d'informations sur les variables globales temporaires et la base de données IRISTEMP, consultez le document suivant :
Globals temporaires et la base de données IRISTEMP
Les globales utilisées comme temporaires sont :
1. Variables globales temporaires du système (^IRIS.Temp*, ^%cspSession, ^CacheTemp*, ^mtemp*, etc.)2. Variables globales temporaires mappées à IRISTEMP/CACHETEMP par l'utilisateur3. Process private globals (^||name, ^|"^"|name, ^["^"]name, ^["^",""]name, etc. )4. Table de GLOBALE TEMPORAIRE -> La définition de la table est persistante (disponible pour tous les processus) et les données de la table sont stockées dans les données globales privées du processus (ne durent que pendant la durée du processus).
Les tailles 1 et 2 peuvent être vérifiées à l'aide de l'utilitaire ^%GSIZE:
USER>do ^%GSIZEDirectory name: c:\intersystems\iris\mgr\user\ => c:\intersystems\iris\mgr\iristemp\ // Specify the iristemp database folderAll Globals? No => yes // Yes to show all globals: 34 items selected34 available globalsShow details?? No => No // No to not show detailed information Device:Right margin: 80 =>:
3,4 Les globales privées des processus peuvent être visualisées à l'aide de l'utilitaire ^GETPPGINFO
Pour plus d'informations sur l'utilitaire ^GETPPGINFO, consultez le document suivant :About the ^GETPPGINFO utility [IRIS]About the ^GETPPGINFO utility
L'exemple suivant répertorie les variables globales privées de tous les processus actuels
set ^||flintstones(1)="Fred"
set ^||flintstones(2)="Wilma"
znspace "%SYS"
do ^GETPPGINFO("*")
Une autre méthode consiste à afficher le contenu de processus individuels utilisant des blocs globaux privés en grande quantité.
L'exemple suivant affiche le nombre de blocs globaux privés par processus supérieur ou égal à 20.
set ns=$namespace
znspace "%SYS"
// Only processes with more PPG blocks than the total number of processes are included
set st=##class(%SQL.Statement).%New()
set status=st.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
set rs=st.%Execute()
while rs.%Next() {
set pid=rs.%Get("Pid") // Process ID
set cnt=rs.%Get("PrivateGlobalBlockCount") // Number of PPG blocks
// When the number of PPG blocks per process is 0 or more, the contents are output (the following example shows 20 or more blocks).
if cnt > 20 {
set rs2=##class(%ResultSet).%New("%SYS.ProcessQuery:PPG")
// "N" Do not return subscripts of a PPG, just return the root name
// "B" Return the number of blocks used by the PPG (needs the "N" option)
do rs2.Execute("*",pid,"NB")
for {
quit:'rs2.Next()
write cnt_" PID:"_pid_", PPG name "_rs2.GetData(1)_" is using "_rs2.GetData(3)_" disc blocks",!
}
}
}
znspace ns
Article
Guillaume Rongier · Oct 19, 2022
Bonjour, chers développeurs !
Dans cet article, nous allons nous concentrer sur OAuth2, un protocole qui est de plus en plus utilisé en combinaison avec FHIR pour effectuer des autorisations.
Dans cette partie 1, nous allons démarrer le conteneur Docker pour IRIS for Health et Apache, configurer la fonction de serveur d'autorisation OAuth2 sur IRIS for Health, y accéder depuis l'outil de développement REST Postman, et obtenir un jeton d'accès.
En outre, dans la deuxième partie et au-delà, nous ajouterons la fonctionnalité de référentiel FHIR à IRIS for Health, nous ajouterons la configuration du serveur de ressources OAuth2 et nous expliquerons comment exécuter des requêtes FHIR avec des jetons d'accès depuis Postman.
Plusieurs excellents articles ont déjà été publiés au sein de la communauté des développeurs pour expliquer la fonctionnalité OAuth2 des produits d'InterSystems ; cependant, je voudrais expliquer à nouveau comment configurer la dernière version.
[Mise en œuvre d'InterSystems IRIS Open Authorization Framework (OAuth 2.0) - partie 1](https://community.intersystems.com/post/intersystems-iris-open-authorization-framework-oauth-20-implementation-part-1)
Dans cet article, nous utiliserons la dernière version d'InterSystems IRIS for Health 2020.3 Preview Edition. Si vous envisagez de créer un environnement basé sur cet article, veillez à utiliser cette version ou une version ultérieure du kit. Certaines fonctionnalités ne sont pas incluses dans les produits antérieurs à cette version.
## Préparatifs préliminaires
La première étape consiste à effectuer des préparatifs préliminaires. Il y a beaucoup de choses à préparer pour construire un environnement sécurisé.
IRIS for Health 2020.3 Preview Edition est uniquement disponible en version conteneur Docker. ([InterSystems Docker Hub/IRIS for Health](https://hub.docker.com/_/intersystems-iris-for-health/))
Pour effectuer la configuration d'OAuth2, vous devrez également effectuer la configuration du serveur web et de SSL. Dans cet article, nous utiliserons Apache.
Lors de la configuration SSL sur Apache, le certificat de configuration SSL doit correspondre au nom d'hôte du serveur. Veuillez tenir compte de ce point.
### Obtenir des fichiers d'exemple à partir du dépôt GitHub d'intersystems-jp
Le fichier docker-compose.yml/Dockerfile et d'autres exemples de fichiers utilisés dans cette configuration sont disponibles dans le dépôt GitHub réservé à la communauté des développeurs InterSystems.
Tout d'abord, décompressez ce fichier dans votre environnement à l'aide de la commande suivante. (Vous pouvez également le faire à partir de la pièce jointe à cet article).
Ce fichier docker-compose.yml/Dockerfile et d'autres fichiers sont créés en se référant à l' [application iris-webgateway-example](https://openexchange.intersystems.com/package/iris-webgateway-example) published on OpenExchange.
```console
git clone https://github.com/Intersystems-jp/IRIS4H-OAuth2-handson.git
```
### Modification de la configuration en fonction du kit utilisé
Dans ce fichier docker-compose.yml, deux conteneurs sont configurés pour être démarrés : le conteneur IRIS for Health et le conteneur Apache (httpd) seront créés par la commande docker build.
Le fichier docker-compose.yml, disponible sur GitHub, fait référence à IRIS for Health Community Edition Preview Edition (2020.3.200.0).
L'édition communautaire peut être utilisée pour l'évaluation des produits InterSystems.
```docker
iris:
image: store/intersystems/irishealth-community:2020.3.0.200.0
```
Si vous utilisez une version différente (version officielle ou version plus récente), veuillez modifier cette partie de la spécification.
Le conteneur Apache sera construit avec le contenu du Dockerfile, qui nécessite un kit [WebGateway](https://docs.intersystems.com/irisforhealth20201/csp/docbook/DocBook.UI.Page.cls?KEY=GCGI) pour se connecter à IRIS depuis Apache.
Pour savoir comment obtenir ce kit, les partenaires d'InterSystems peuvent consulter le site de téléchargement du kit WRC ou contacter le centre de support WRC.
Pour toute autre question, veuillez nous contacter à [cet adresse](mailto:jpcommunity@intersystems.com?subject=howtogetWebGatewayKit).
Modifiez les parties suivantes du Dockerfile en fonction du produit que vous avez obtenu. Quel que soit le système d'exploitation de la machine hôte (Windows/Ubuntu/CentOS), la plate-forme sera lnxubuntux64 car le système d'exploitation du conteneur httpd de base est Debian.
```docker
ARG version=2020.3.0.200.0
ARG platform=lnxubuntux64
ADD WebGateway-${version}-${platform}.tar.gz /tmp/
```
### Préparation d'un certificat SSL
À l'étape suivante, un certificat SSL est préparé. Lorsque l'on accède à l'autorisation OAuth2, le certificat SSL défini dans le serveur Web est vérifié pour voir s'il correspond à l'URL à laquelle on accède.
Il n'est pas nécessaire d'utiliser un certificat officiel ; il est possible d'utiliser OpenSSL, etc. Saisissez le nom d'hôte dans le champ "Nom commun" lors de la création du certificat.
De plus, comme le certificat que vous avez créé sera chargé automatiquement au moment du lancement, vous devez modifier le fichier pour qu'il ne nécessite pas de mot de passe. Veuillez vous référer à la commande suivante.
```console
$ openssl rsa -in cert.key.org -out cert.key
```
Placez les fichiers CRT et KEY créés dans le même répertoire que le Dockerfile, avec les noms de fichiers **server.crt / server.key** respectivement.
En plus de l'utiliser avec le serveur web Apache, vous aurez besoin d'un certificat SSL pour la configuration d'OAuth2. Il n'est pas nécessaire d'entrer un nom d'hôte, etc., mais vous devez créer trois ensembles. (Dans les configurations suivantes, ils apparaissent sous la forme auth.cer/auth.key , client.cer/client.key , resserver.cer/resserver.key)
### Construction de docker et démarrage d'un conteneur docker
Maintenant, vous êtes enfin prêt ! En plus des quatre fichiers que vous avez téléchargés, vous avez maintenant un ensemble d'installation de la passerelle Web et deux certificats SSL dans votre répertoire. Faites attention aux autorisations d'accès et d'exécution de chaque fichier. (Par exemple, j'ai ajouté la permission d'exécution à webgateway-entrypoint.sh).
```docker
docker-compose build
docker-compose up -d
```
Une fois lancé, utilisez la commande docker ps pour vérifier que les deux conteneurs fonctionnent.
```
Nom du conteneur Apache:_web
Nom du conteneur IRIS for Health:store/intersystems/irishealth-community:2020.3.0.200.0(ou autre nom en fonction de l'ensemble)
```
Essayez maintenant d'accéder au portail de gestion selon les trois méthodes suivantes. Si la troisième méthode fonctionne, votre configuration SSL via le serveur web Apache est un succès !
http://[hostname]**:52773**/csp/sys/UtilHome.csp :L'accès à cette URL se fait par le biais de Private Apache dans le conteneur IRIS. Elle ne passe pas par l'Apache configuré.
http://[hostname]/csp/sys/UtilHome.csp : Cette URL permet d'accéder au portail de gestion via l'Apache configuré.
http**s**://[hostname]/csp/sys/UtilHome.csp : Cette URL permet d'accéder au portail de gestion en utilisant une connexion SSL via Apache, que vous avez configurée.
### Création d'une configuration SSL
Maintenant que IRIS for Health est opérationnel et que nous avons accès au portail de gestion, créons la configuration SSL pour les derniers préparatifs.
Allez sur le Portail de gestion -> Administration du système -> Sécurité -> Configuration SSL/TLS et créez trois configurations SSL en utilisant les trois paires de clés de certificat que vous avez préparées.
Vous pouvez choisir le nom que vous voulez, mais dans cet article, nous utiliserons SSL4AUTH/SSL4CLIENT/SSL4RESSERVER, conformément aux articles précédents sur OAuth2.

*À propos du partage de répertoire entre les hôtes et les conteneurs
La spécification des volumes suivants dans le fichier docker-compose indique l'emplacement actuel du répertoire hôte = /ISC dans le conteneur.
Veuillez utiliser ce répertoire lorsque vous spécifiez le fichier de certificat dans les paramètres ci-dessus, etc.
```docker
volumes:
- .:/ISC
```
Ce répertoire contiendra non seulement des fichiers mais aussi des fichiers de base de données IRIS et des fichiers de configuration.
Consultez le document “[Persistant %SYS pour le stockage des données d'instance persistantes](https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=ADOCK#ADOCK_iris_durable)” pour plus d'information.
## Configuration de OAuth2 dans IRIS for Health
Il est maintenant temps d'entrer dans les détails de l'accès à IRIS for Health en utilisant OAuth2 !
### Configuration du serveur d'autorisation OAuth2
Tout d'abord, configurons le serveur d'autorisation OAuth2 !
Allez dans Portail de gestion → Administration du système → Sécurité → OAuth 2.0 → Serveur.
Suivez les instructions ci-dessous pour configurer les paramètres.
|Paramètres dans l'onglet "Général"||
|---|---|
|Point de terminaison de l'émetteur : Nom d'hôte|Saisissez le nom d'hôte réel.|
|Point de terminaison de l'émetteur : Prefix |Vous pouvez saisir la valeur de votre choix, mais ici nous l'avons fixée à "authserver".|
|Types de subventions pris en charge|Dans cet article, nous n'utiliserons que le "Code d'autorisation", mais si vous souhaitez tester d'autres "Types de subventions", veuillez ajouter une coche. Ajoutez également une coche à "Autorisation JWT"|
|Configuration SSL/TLS|Spécifiez la configuration SSL que vous venez d'ajouter.|

Dans l'onglet "Scopes", cliquez sur " Ajouter un Scope supporté " pour les ajouter.
Plus tard, l'écran de connexion du code d'autorisation affichera la "description" que vous avez écrite ici.

Ne modifiez pas l'onglet "Intervalles" par rapport à la valeur par défaut.
Dans l'onglet " Paramètres JWT ", sélectionnons " RS512 " comme algorithme de signature.

Dans le denier onglet "Personnalisation", changez la spécification "Génération de classe de jeton" en %OAuth2.Server.JWT.

Une fois que vous avez saisi les informations, cliquez sur le bouton "Enregistrer" pour sauvegarder la configuration.
Maintenant que vous avez la configuration nécessaire pour qu'IRIS for Health fonctionne comme un serveur d'autorisation OAuth2, vous êtes prêt à l'essayer ! Essayons d'y accéder à partir de Postman et voyons si nous pouvons obtenir un jeton d'accès !
Cependant, avant de faire cela, nous devons effectuer deux autres configurations.
### Ajout d'une description du client
Tout d'abord, ajoutez les informations de Postman auxquelles vous souhaitez accéder en tant que client OAuth2. L'enregistrement du client OAuth2 peut être ajouté par le biais d'un enregistrement dynamique ou d'autres méthodes.
Cliquez sur "Description du client" sur la page de configuration du serveur pour continuer.

Cliquez sur "Créer une description du client" pour ajouter une entrée.
Suivez les instructions ci-dessous pour créer une souscription du client.
| Paramètres dans l'onglet "Général" | |
|---|---|
| Nom | Entrez un nom de votre choix. Dans ce cas, nous avons choisi " postman ". |
| Type du Client | Selectionnez “Confidentiel” |
| Redirection d'URLs | Cliquez sur le bouton "Add URL" pour ajouter une URL de redirection pour Postman. https://www.getpostman.com/oauth2/callback comme URL de redirection pour Postman. |
| Types de subventions pris en charge | Spécifiez le même "Code d'autorisation" (Authorization Code) qui a été configuré dans les paramètres du serveur d'autorisation OAuth2. (Par défaut) Ajoutez un contrôle si vous souhaitez également tester d'autres types de subventions. Cependant, les paramètres doivent être les mêmes que la configuration du serveur d'autorisation. Cochez également la case "Autorisation JWT". Précisez ici |
| Authenticated Signing Algorithm | Vérifiez "JWT authorization" sous Supported grant Types (Types de subventions pris en charge) pour pouvoir le sélectionner. Sélectionnez "RS512". |
| | |

Une fois que vous avez saisi les informations, cliquez sur le bouton "Enregistrer" pour sauvegarder la description du client.
Cliquez sur l'onglet " Références du client " pour voir l'ID du client et la clé privée du client pour cette entrée.
Vous aurez besoin de cet ID et de cette clé privée lorsque vous effectuerez des tests à partir de POSTMAN.

### Ajout d'une application Web
Un autre paramètre important doit être ajouté avant d'y accéder à partir de POSTMAN.
L'écran de configuration du serveur d'autorisation OAuth2 a déterminé que le point de terminaison pour cette configuration est https:///authserver/oauth2.
Pour que l'accès à ce point de terminaison soit traité correctement par IRIS, nous devons ajouter une application Web pour cette route URL.
Allez dans Administration système→Sécurité→Applications→Applications Web, et cliquez sur "Créer une nouvelle application Web".

Un modèle d'application web OAuth2 est fourni, il faut donc d'abord sélectionner "/oauth2" dans " Copier à partir de ".
| Paramètres "Editer l'application Web" | |
|---|---|
| Copie à partir de | “/oauth2” : Sélectionnez toujours celui-ci en premier dans la liste déroulante. |
| Nom | /authserver/oauth2 |
| Activation | Cochez la case d'option "REST". |
| | |
Après avoir saisi chaque valeur, enregistrez-la.

## Test d'OAuth2 à partir de POSTMAN
Testons-le à partir de POSTMAN.
Les tests peuvent également être effectués à partir d'autres outils ou du programme lui-même.
L'explication détaillée de POSTMAN dépasse le cadre de cet article, mais un point à noter est que la vérification du certificat SSL doit être changée en OFF dans les paramètres de POSTMAN.
Après avoir créé une nouvelle demande dans POSTMAN, sélectionnez "OAuth 2.0" dans l'onglet TYPE d'autorisation et cliquez sur "Obtenir un nouveau jeton d'accès".
.png)
Dans l'écran suivant, saisissez les valeurs selon les indications suivantes.
| Paramètres「GET NEW ACCESS TOKEN」 | |
|---|---|
| Nom du jeton | Entrez un nom de votre choix. |
| Type de subvention | Choisissez "Code d'autorisation". |
| Callback URL | |
| Auth URL | https:///authserver/oauth2/authorize Saisissez la valeur du point de terminaison +/authorize. En ajoutant ?ui_locales=ja, vous pouvez afficher l'écran de connexion en japonais. |
| Auth Token URL | https:///authserver/oauth2/token. Saisissez la valeur du point de terminaison +/token. |
| Client ID | Saisissez l'ID du client affiché dans l'onglet Références du client après l'enregistrement de la description du client.|
| Clé Secrète du client | Saisissez la clé privée du client, affichée dans l'onglet Références du client après l'enregistrement de la description du client. |
| Champ | Entrez le champ d'application enregistré dans la configuration du serveur d'autorisation, par exemple "scope1". Vous pouvez également spécifier plusieurs champs séparés par des espaces. |
| État | Entrez le paramètre d'état "State", qui est utilisé pour les contre-mesures contre CSRF. Il n'est pas explicitement utilisé mais ne peut pas être laissé vide, donc nous entrons une chaîne arbitraire. |
| | |
.png)
Après avoir entré les paramètres et cliqué sur le bouton " Demande de jeton ", vous voyez l'écran de connexion comme indiqué ci-dessous.

Essayez de vous connecter avec les informations de l'utilisateur (par exemple, _SYSTEM) ayant accès au portail de gestion.
Sur l'écran suivant après la connexion, vous pouvez décider d'accorder des permissions à cette application.
Après avoir cliqué sur " Autoriser ", si le jeton d'accès s'affiche sur l'écran suivant, comme indiqué ci-dessous, le test d'acquisition du jeton d'accès est réussi !
.png)
### Test d'OpenID Connect
IRIS for Health peut effectuer un traitement d'autorisation OAuth2 ainsi qu'un traitement d'authentification conforme à OpenID Connect.
Pour plus de détails consultez [ce document](https://docs.intersystems.com/irisforhealth20201/csp/docbook/DocBook.UI.Page.cls?KEY=GOAUTH).
Dans cette configuration, OpenID Connect est activé, alors testons si nous pouvons également obtenir le jeton d'identification OpenID Connect !
C'est facile à mettre en œuvre. Dans l'écran GET NEW ACCESS TOKEN, ajoutez "openid" à son champ d'application et faites une demande.
.png)
OpenID Connect sera également affiché sur la page de demande d'autorisation. Après avoir ouvert une session et donné vos autorisations, assurez-vous que vous obtenez également un jeton d'identification (id_token) lorsque vous voyez l'écran suivant. (Vous devrez peut-être faire défiler l'écran).
.png)
Avez-vous réussi à obtenir le jeton d'accès et l'id_token ?
Bien que certains préparatifs, tels que les certificats, nécessitent un peu de temps et d'efforts, nous pourrions construire un serveur d'autorisation OAuth2 avec une telle simplicité en utilisant IRIS for Health, une plateforme de base de données.
Dans la prochaine partie de cette série, je vous montrerai enfin comment construire un référentiel FHIR, enregistrer le référentiel FHIR en tant que serveur de ressources OAuth2 et vous montrer comment accéder par REST au référentiel FHIR en utilisant un jeton d'accès OAuth2 depuis POSTMAN.
Article
Irène Mykhailova · Mai 23, 2023
Salut la Communauté !
SantExpo a déjà ouvert ses portes et nous sommes là et prêts à vous rencontrer ! Nos équipes sont déjà sur place, au stand F43 (Hall 1, Porte de Versailles) et sont prêtes à discuter avec les acteurs majeurs de la santé.
Voici notre emploi du temps pour la première partie de la journée :
MISE À JOUR 12H00
Nous avons eu une présentation super positive et fructueuse à propos d'emélioration de la coordination Ville-Hôpital avec InterSystems & Docteur Smart ! Il est essentiel de bâtir un système de santé connectée pour faciliter l'échange sécurisé d'informations médicales et assurer une meilleure coordination des soins.
Voici notre emploi du temps pour la deuxième partie de la journée :
MISE À JOUR 17H00
La première discussions d'après-midi on a parlé comment prévenir les risques et améliorer la santé d'un territoire avec une prise en charge ciblée pour chaque patient. L'analyse populationnelle couplée à l'IA et au partage de données à grande échelle est une force pour prédire les risques de demain.
Après @Guillaume.Rongier7183 a parlé d'un de son sujets aimé - FHIR et comment il facilitent l'accès aux données pour les cliniciens.
C'est tout pour ce court récit du déroulement de la première journée de SantExpo. À demain! Reste en contact.
Annonce
Irène Mykhailova · Juin 5
Bonjour la communauté,
Nous sommes heureux de vous inviter à une webconférence
🎤 Orchestrez votre Supply Chain de bout en bout sans refonte de votre SI 🎤
Date : 10 juin 2025Heure : 11h00 CEST
Une supply chain repose souvent sur une multitude de logiciels métiers – ERP, APS, WMS, TMS… – conçus pour répondre à des besoins spécifiques. Mais cette superposition d’outils crée des silos et complique l’obtention d’une vision fluide et cohérente de bout en bout. Jusqu’ici, la transformation digitale passait par le remplacement d’outils ou la quête d’une solution intégrée capable de tout faire.
Aujourd’hui, un nouveau paradigme s’impose : et si vos outils actuels étaient, paradoxalement, vos meilleurs alliés pour une transformation plus rapide et plus sûre de votre supply chain ?
Dans ce webinar, découvrez comment tirer parti de votre SI existant pour connecter, harmoniser et orchestrer votre supply chain sans refonte lourde. Nos experts vous partageront des stratégies concrètes pour améliorer la visibilité, fluidifier vos opérations et accélérer la prise de décision grâce à une orchestration intelligente des données.
Intervenants:🗣 Gilles Alais, Directeur Général, SUPPLAÏ🗣 @Sylvain.Guilbaud, Sales Engineer, InterSystems
Ne manquez pas cette occasion !
>> INSCRIVEZ-VOUS ICI <<
Article
Irène Mykhailova · Nov 15, 2022
Salut la communauté,
Nous sommes heureux de partager avec vous ce qui se passe au salon Supply Chain Event où nous sommes actuellement présents! Nos experts @Sylvain.Guilbaud, @Robert.Bira, @Adeline.Icard, Bertrand Cayzac, Mark S. Holmes et @Ming.Zhou sont prêts à vous accueillir et vous présenter nos solutions pour une Supply Chain étendue digitale et intelligente.
Vous nous trouverez au stand F22
Le programme d'aujourd'hui est très chargé
Nous vous rencontrerons aujourd’hui à 14 h en salle 3 pour notre atelier sur "la conception d'une nouvelle tour de contrôle plus intelligente pour votre supply chain", présenté par David Haverlant (Directeur Senior Retail, CPG, Luxe Talan), Benoit Hollebecq (Responsable Transformation Numerique, Voies navigables de France) et @Sylvain.Guilbaud (Expert InterSystems IRIS Data Platform, InterSystems France). Restez à l'écoute pour les mises à jour!
Ce matin a commencé par les Digital Supply Chain Awards. Le jury attend avec impatience d'écouter tous les pitchs des finalistes:
Start-Up Digital Supply Chain Award
klareo Magma TechnologyEasy Truck InRMAN SyncMonstock
Digital Supply Chain Award
SAP France SiemensB2wiseDashdocDCBrainDDS LogisticsLocus RoboticsMapotempoMytowerProject44
Restez à l'écoute pour les prochaines mises à jour!
MIS A JOUR 14h00
Les finalistes ont terminé leurs présentations.
Voici quelques citations intéressantes de candidats:
Siemens Supply chain du chaos car le contexte est changeant.Retard de digitalisation en France => plateforme sas pour héberger toutes les applications SC Siemens.
Mapotempo Orchestration des flux du dernier km grace à un outil de DMS unifié.Lancement de la solution au niveau européen.
MytowerExperience des controls douaniers 👉 Collecter la donnée 👉 Archiver les documents 👉 Analyser les informations et les risques Plateforme de collecte de données pour une vision globale et un accès rapide aux informations
Project44Plateforme de Collaboration instantanée pour une visibilité multimodale de la chaîne de transport.
Annonce des lauréats et Remise des prix auront lieu aujurd'hui à partir de 18h15. On attend!
Mais pour l'instant, nous allons dans le hall 3 où notre présentation doit débuter prochainement ! On se voit là-bas!
MIS A JOUR 15h30
Notre présentation au hall 3 a eu un grand succès!
Beaucoup de monde est venu écouter notre discours: “Construire une tour de contrôle nouvelle génération à la fois collaborative, résiliente, prescriptive et descriptive”.
Pour ceux qui l'ont raté, voici les points principaux:
Les obstacles ont été nombreux pour les acteurs de la supply chain en 2022 et ils continuent à persister : crise sanitaire, pénurie de composants, difficultés d’approvisionnement, tensions politiques, énergétiques et maintenant risque de récession. Autant de paramètres qui ont un impact sur l’agilité et la résilience de votre chaîne d’approvisionnement.Dans ce contexte, la capacité à adapter vos modèles pour intégrer ces informations provenant de sources variées est vitale pour conserver une longueur d’avance dans cet environnement très concurrentiel et incertain.Pour réussir sur le long terme, il est indispensable d’avoir une vue d’ensemble de la chaîne d’approvisionnement afin de pouvoir identifier les dysfonctionnements, les opportunités, les analyser rapidement à l’aide de méthodologies prédictives et prescriptives et de les traiter dans les meilleurs délais.
Passer d’une gestion Just in Time au Just in Case ✅
MIS A JOUR 17h00
Venez nous rejoindre sur notre stand F22 pour vous faire prendre une photo et recevoir une surprise. Animation sur le stand InterSystems : ICI ON SOURIT ♥️
@Adeline.Icard et @Ming.Zhou. N'est-ce pas mignon ?
MIS A JOUR 19h00
Après des débats houleux, les lauréats ont été annoncés !
Le StartUp Digital Supply Chain Award est attribué à Monstock !Plateforme de gestion et pilotage d’entrepôts« Dans un monde complexe, la simplicité et adaptabilité de la solution a séduit le jury »
Le Digital Supply Chain Award est attribué à DCBrain Optimisation des plans de transports pour aller chercher des économies d’énergie En partenariat avec Lidl« Une solution verte qui nous a particulièrement touchée et une équipe particulièrement persévérante et dynamique »
Nos meilleurs voeux pour les gagnants !
Mais n'oubliez pas tous les participants.
Donc c'est tout pour aujourd'hui. À demain !
Annonce
Robert Bira · Nov 14, 2022
InterSystems a le plaisir d'annoncer la sortie de la version 2.0 de System Alerting & Monitoring (SAM).
Qu'est-ce que SAM ?
SAM combine l'API de surveillance et Log Monitor avec des outils standard familiers de l'industrie tels que Grafana et Prometheus pour créer une solution de surveillance et d'alerte de base pour les clusters IRIS.
Pour en savoir plus sur SAM, consultez le Guide d'alerte et de surveillance du système.
Quoi de neuf dans SAM 2.0 ?
Les outils standard de l'industrie sur lesquels SAM s'appuie ont tous été mis à niveau.
Exportation et importation de configuration – Vous pouvez désormais exporter votre configuration SAM et la réimporter dans une autre instance SAM. Cela facilite le passage d'un environnement à un autre.
Plusieurs tableaux de bord Grafana - Vous pouvez désormais créer plusieurs tableaux de bord dans Grafana et choisir celui que vous souhaitez afficher par défaut pour chaque instance IRIS.
HTTPS et préfixes d'URL – SAM peut désormais utiliser HTTPS pour collecter des données d'observabilité à partir de vos instances IRIS. De plus, vous avez la possibilité de spécifier un "préfixe de chemin d'URL" qui permet à SAM de surveiller plusieurs instances IRIS exécutées sur le même hôte.
Consultez la documentation pour plus d'informations sur SAM 2.0.
Article
Irène Mykhailova · Mars 26, 2023
Salut la Communauté !
Le troisième jour se déroule super bien. Tout le monde bosse ! Les équipes peaufinent leurs projets. Les coaches leur donnent les derniers conseils. Nous sommes bien sûr présents pour répondre à toutes les questions et accompagner les équipes dans l'utilisations des technologies InterSystems. Par exemple ici, avec l'équipe du projet Salvia.
Tout le monde attend avec impatience le début de la présentation des prototypes !
MISE À JOUR 16H30
La présentation des prototypes a commencé. Mais avant, prenons le temps d'une photo de l'équipe qui oeuvre lors de ce Hacking Health Camp 2023 : Nathalie Decoudu, @Irène.Mykhailova, @Adeline.Icard, @Guillaume.Rongier7183, @Lorenzo.Scalese, @Evgeny.Shvarov. Merci la team 😁
Le début de la partie la plus émouvante du Hacking Health Camp 2023 - La présantation !
Q&R dans le cadre de la présentation par DeepDocs :
Remerciements des coaches et notamment parmi eux @Lorenzo.Scalese et @Irène.Mykhailova
Et maintenant, la partie la plus difficile commence - l'attente. Les équipes ont présenté leurs projets et les juges vont choisir les meilleurs d'entre eux. Notamment notre juge @Guillaume.Rongier7183 doit choisir l'équipe qui a le mieux utilisé la technologie InterSystems FHIR pour mener à bien son projet.
MISE À JOUR 19H00
Guillaume est prêt à annoncer le gagnant de notre Challenge. Qui seront les heureux élus ?
C'est le projet DeepDocs ! Félicitations !
DeepDocs simplifie le traitement manuel fastidieux et sujet aux erreurs des données médicales en utilisant des algorithmes de NLP. La plateforme permet d'extraire, pseudonymiser et structurer les données médicales à partir de textes en garantissant la confidentialité et la sécurité des données. DeepDocs améliore l'efficacité du traitement des données médicales et la qualité des soins de santé en réduisant le temps et les efforts nécessaires pour traiter manuellement ces données.
Plus d'info sur le projet
Quel problème essayez-vous de résoudre ?
Les professionnels de santé doivent consacrer un temps énorme à la rédaction, la lecture et la fouille de documents médicaux, que ce soit pour des études cliniques, de la recherche pharmaceutique, ou simplement pour le traitement de leurs patients. Le volume de données médicales est en constante augmentation, et il devient de plus en plus difficile de les analyser et de les exploiter efficacement. Il y a du temps, de l’argent, et des vies en jeu. Beaucoup, beaucoup de temps, d’argent et de vies.
Comment allez-vous le résoudre ?
Notre objectif est de faciliter la communication et la collaboration entre ces deux communautés afin de permettre une analyse plus efficace des données médicales. Deux communautés qui ont énormément à s’apporter. Les modèles de structuration de textes médicaux que vous développerez seront utilisés pour améliorer les soins de santé, la recherche médicale et l'efficacité des traitements.
La dixième édition du Hacking Health Camp est maintenant terminée. Vous pouvez tenter de repérer nos collègues (j'ai trouvé Guillaume et moi) sur cette photographie
Et le clap de fin avec notre équipe gagnante - DeepDocs ! Nous les rencontrerons à SantExpo - c'est l'un des prix de notre Challenge !
Malheureusement, c'est tout. Nous retournons maintenant à notre vie ordinaire - 50 heures de hacking pour faire avancer la santé appartiennent à l'histoire ! À l'année prochaine ! Et merci à tous les contributeurs du Hacking Health Camp 2023 !
Article
Lorenzo Scalese · Oct 28, 2022

Lancement du serveur FHIR d'InterSystems lors du[ HL7 FHIR Connectathon à Baltimore](https://www.hl7.org/events/working_group_meeting/2022/09/) le week-end dernier, avec affichage de bundles, utilisation de toutes les RESTy avec les ressources et interrogation du Guide de mise en œuvre de Vulcan [Vulcan Implementation Guide](http://www.hl7.org/vulcan/). Nous avons chevauché les projets Real World Data (RWD) et Schedule of Activity (SoA) pour Vulcan IG, qui font avancer la connexion des données de recherche clinique et de santé. Nous avons utilisé une approche assez décente pour répondre aux exigences,
MMoi-même, ainsi que les collègues d'InterSystems (Huy, Russell, Regilo), nous étions chargés de soutenir le serveur FHIR et l'appropriation des données pour l'événement. Si vous avez déjà été chargé de rédiger des Bundles FHIR pour un cas d'utilisation spécifique, je pense que vous pouvez apprécier à quel point la difficulté peut être insurmontable.
Nous avons provisionné deux serveurs InterSystems FHIR de la taille d'un radiocassette "ghetto blaster", 16 cœurs/128 Go, un pour chaque projet et nous nous sommes mis au travail pour chaque équipe. Les équipes sont arrivées préparées avec leurs Python Notebooks sur nos points de terminaison, avec l'intention d'écrire une histoire FHIR pour ACS avec un script de test procédural qui valide les appels retournés avec les résultats attendus.
La cible de cohorte pour RWD me semble assez simple dans l'exemple des requêtes pour le[ syndrome coronarien aigu](https://build.fhir.org/ig/HL7/vulcan-rwd/acs.html) :
**N'est-ce pas ?**
```
/Patient?birthdate=le2002-09-01&gender=male,female
/Encounter?reason-code:below=I20,I21,I22,I23,I24,I25&date=ge2020-09-01&date=le2021-09-31&status=finished&dischargeDisposition:not=exp
/MedicationAdministration?status=completed&effective-time=ge[Encounter-Start-Date]&
code=http://www.nlm.nih.gov/research/umls/rxnorm|1116632,http://www.nlm.nih.gov/research/umls/rxnorm|613391,http://www.nlm.nih.gov/research/umls/rxnorm|32968,http://www.nlm.nih.gov/research/umls/rxnorm|687667,http://www.nlm.nih.gov/research/umls/rxnorm|153658
```
**Mais oui...**
**Échecs**
*Bombe de sous-module Synthea*
Bien que plein d'espoir, notre premier essai a consisté à générer 2 millions de ressources et des milliers de bundles Synthea (en utilisant ce super[ InterSystems repo](https://github.com/intersystems-community/irisdemo-base-synthea) pour le faire) vers le point de terminaison des transactions et l'installation de téléchargement de la Gestion des données, y compris un tas de submodules centrés sur le cœur, et des commutateurs sophistiqués...
```
docker run --rm -v $PWD/output:/output -v $PWD/modules:/modules --name synthea-docker intersystemsdc/irisdemo-base-synthea:version-$VERSION --exporter.practitioner.fhir.export true --exporter.hospital.fhir.export true --exporter.fhir.use_us_core_ig true -p 500 -s 21 -d /modules
```
Cela n'a pas marché, ce qui n'est pas surprenant, mais j'espérais qu'on s'en rapprocherait au moins. Nous n'avons pas réussi.
**Gains**
*Le processus de génération des données*
Ainsi [Geoff Low](https://github.com/glow-mdsol) nous a mis au courant de son processus, nous l'avons repris et nous nous sommes mis au travail..... Voici comment le processus fonctionne.
1. Voici un bundle de départ, en particulier celui qui est pertinent pour la recherche et qui comporte au moins des patients et des rendez-vous. Utilisez le bundle SDTM ici sur [sourceforge](https://sourceforge.net/projects/fhirloinc2sdtm/files/LZZT_Study_Bundle/):
2. Maintenant, exécutez une [étape de correction](https://github.com/sween/soa-bridge-match/blob/feature/connectathon_31/upstream/patch_json.py), pour fixer le bundle en place, assurez-vous qu'il se charge avec succès sur le serveur FHIR, téléchargez ou déposez le bundle POST.
3. Une fois que nous avons un point de départ précis, [complétez les rendez-vous]( https://github.com/sween/soa-bridge-match/blob/feature/connectathon_31/src/soa_bridge_match/dataset.py) avec les codes de motif de rendez-vous anticipés ( I20,I21,I22,I23,I24,I25 ).
```
raisons = ["I21","I22","I23","I24","I25"]```
```
4. Ajoutez les médicaments aux rendez-vous, en incluant tous les médicaments prévus pour le rendez-vous pour le Sondage du SCA.
```
medchoices = [
{
"code": "1116632",
"affichage": "ticagrelor"
},
{
"code": "613391",
"affichage": "prasurgrel"
},
{
"code": "32968",
"affichage": "clopidogrel"
}
]
medchoice = random.choice(medchoices)
medconcept = CodeableConcept(
coding=[
Coding(
code=medchoice["code"],
display=medchoice["affichage"],
system="http://www.nlm.nih.gov/research/umls/rxnorm",
)
]
)
```
> AVIS IMPORTANT ! Assurez-vous que les médicaments correspondent aux dates/heures du rendez-vous
5. Ensuite, assurez-vous que les rendez-vous sont effectivement des hospitalisations et qu'ils incluent tous les types applicables.
```
statuts = ["en cours", "achevé"]
dischargeCodes =
{
"code": "home",
"affichage": "Maison"
},
{
"code": "hosp",
"affichage": "Hospice"
},
{
"code": "exp",
"affichage": "Expiré"
},
{
"code": "long",
"affichage": "Soins à long terme"
},
{
"code": "alt-home",
"affichage": "Maison alternative"
},
]
```
**Encore un gain**
*Implémentation du paramètre de recherche IG*
Le Guide de mise en œuvre de Vulcan comprend un paramètre de recherche qui doit retourner les rendez-vous par disposition de sortie, nous avons abordé cela de deux façons :
a. Téléchargez l'ensemble de l'IG
b. Téléchargez le paramètre de recherche "Search Parameter"
Le chargement du paramètre de recherche par lui-même était le chemin le plus court et nous en portions l'entière responsabilité depuis assez longtemps, voici donc comment se déroule ce processu.
On crée un dossier `/tmp/mypackage`, on ajoute le paramètre de recherche de l'IG, et son propre fichier de paquetage.
```
[irisdeploy@ip-192-168-0-37 tmp]$ tree /tmp/mypackage
/tmp/mypackage
├── package.json
└── parameter.json
```
Votre fichier de paquetage peut avoir une forme similaire à celle-ci :
```
{
"nom":"ron.sweeney.r4",
"version":"0.0.1",
"dépendances": {
"hl7.fhir.r4.core":"4.0.1"
}
}
```
Ensuite, on télécharge le tout dans IRIS comme suit :
```
TL4:IRIS:FHIRDB>do ##class(HS.FHIRMeta.Load.NpmLoader).importPackages($lb("/tmp/mypackage"))
Saving ron.sweeney.r4@0.0.1
Load Resources: ron.sweeney.r4@0.0.1
```
L'étape suivante consiste à associer le bundle au point de terminaison :

Ensuite, réindexez les rendez-vous dans le référentiel :

Le paramètre de recherche/bundle devrait maintenant être téléchargé à votre point de terminaison :

Une fois le paramètre de recherche téléchargé, nous avons pu l'utiliser comme suit !
`curl https://fhir.ggyxlz8lbozu.workload-prod-fhiraas.isccloud.io/Encounter?dischargeDisposition=hosp`
Quoi qu'il en soit, le processus a fonctionné, et l'approche de la création de bundles par le biais de Python s'est avérée bien meilleure que celle de Synthea, notamment pour les ensembles de données précis.
L'ensemble de données que nous avons obtenu dimanche se trouve [ici](https://github.com/sween/soa-bridge-match/tree/feature/connectathon_31/upstream/subjects_35).
Je voulais juste partager cette expérience et remercier les équipes des projets pour avoir rendu cette expérience, que je pensais être un cauchemar, amusante et éducative !
Article
Guillaume Rongier · Oct 24, 2022
# Swift-FHIR-Iris
Application iOS pour exporter les données HealthKit vers InterSystems IRIS for Health (ou n'importe quel référentiel FHIR)

# Table des matières
* [Objectif de cette démo](#goal)
* [Comment lancer cette démo](#rundemo)
* [Préalables](#prerequisites)
* [Installation de Xcode](#installxcode)
* [Ouvrir le projet SwiftUi](#openswiftui)
* [Configuration du simulateur](#simulator)
* [Lancement du serveur FHIR d'InterSystems](#lunchfhir)
* [Jeu avec l'application iOS](#iosplay)
* [Comment ça marche](#howtos)
* [iOS](#howtosios)
* [Comment vérifier l'autorisation pour les travaux sur les données de santé](#authorisation)
* [Comment se connecter à un référentiel FHIR ?](#howtoFhir)
* [Comment enregistrer un patient dans le référentiel FHIR ?](#howtoPatientFhir)
* [Comment extraire les données de HealthKit ?](#queryHK)
* [Comment transformer les données de HealthKit en FHIR ?](#HKtoFHIR)
* [Logiciel de gestion (FHIR)](#backend)
* [Interface utilisateur](#frontend)
* [ToDos](#todo)
# Objectif de cette démo
L'objectif est de créer une démonstration de bout en bout du protocole FHIR.
Ce que j'entends par de bout en bout, à partir d'une source d'information telle qu'un iPhone.
Collectez vos données de santé au format Apple (HealthKit), transformez-les en FHIR, puis envoyez-les au référentiel IRIS for Health d'InterSystems.
Ces informations doivent être accessibles via une interface web.
**TL;DR**: iPhone -> InterSystems FHIR -> Page Web.
# Comment lancer cette démo
## Préalables
* Pour la partie client (iOS)
* Xcode 12
* Pour le serveur et l'application Web
* Docker
## Installation de Xcode
Pas grand chose à dire ici, ouvrez l'AppStore, cherchez Xcode, installez.
## Ouvrir le projet SwiftUi
Swift est la language de programmation d'Apple pour iOS, Mac, Apple TV et Apple Watch. Elle est le remplaçant d'objective-C.
Double-cliquez sur Swift-FHIR-Iris.xcodeproj.
Ouvrez le simulateur par un clic sur la flèche en haut à gauche.

## Configuration du simulateur
Accéder à Santé
Cliquez sur Étapes
Ajouter des données

## Lancement du serveur FHIR d'InterSystems
Dans le dossier racine de ce git, exécutez la commande suivante :
```sh
docker-compose up -d
```
À la fin du processus de construction, vous serez en mesure de vous connecter au référentiel FHIR :
http://localhost:32783/fhir/portal/patientlist.html

Ce portail a été réalisé par @diashenrique.
Avec quelques modifications pour gérer les pas d'activité d'Apple.
## Jeu avec l'application iOS
L'application vous demandera d'abord d'accepter de partager certaines informations.
Cliquez sur autoriser

Vous pouvez ensuite tester le serveur FHIR en cliquant sur "Sauvegarder et tester le serveur".
Les paramètres par défaut pointent vers la configuration docker.
En cas de succès, vous pouvez entrer les informations de votre patient.
Prénom, Nom de famille, Date de naissance, Genre.
Enregistrez le patient dans Fhir. Une fenêtre pop-up vous montrera votre ID Fhir unique.

Consultez ce patient sur le portail :
Accédez à: http://localhost:32783/fhir/portal/patientlist.html
Nous pouvons voir ici, qu'il y a un nouveau patient "toto" avec 0 activités.

Envoyez ses activités :
Retournez dans l'application iOS et cliquez sur Compteur de pas.
Ce panneau résume le nombre de pas de la semaine. Dans notre cas, il s'agit de 2 entrées.
Maintenant vous pouvez les envoyer à InterSystems IRIS FHIR par un clic sur envoi.

Consultez les nouvelles activités sur le portail :
Nous pouvons voir maintenant que Toto a deux nouvelles observations et activités.

Vous pouvez éventuellement cliquer sur le bouton de graphique pour l'afficher comme un graphique.

# Comment ça marche
## iOS
La plupart de cette démo est construite sur SwiftUI.
https://developer.apple.com/xcode/swiftui/
Qui est le dernier framework pour iOS et co.
### Comment vérifier l'autorisation pour les travaux sur les données de santé
Il se trouve dans la classe SwiftFhirIrisManager.
Cette classe est un élément singleton et elle sera transportée tout autour de l'application avec l'annotation @EnvironmentObject.
Plus d'informations ici : https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views
La méthode requestAuthorization :
```swift
// Demander l'autorisation pour accéder à HealthKit.
func requestAuthorization() {
// Demande d'accès.
/// - Tag: RequestAuthorization
let writeDataTypes: Set = dataTypesToWrite()
let readDataTypes: Set = dataTypesToRead()
// demande d'accès
healthStore.requestAuthorization(toShare: writeDataTypes, read: readDataTypes) { (succès, erreur) dans
if !success {
// Traitez l'erreur ici.
} else {
DispatchQueue.main.async {
self.authorizedHK = true
}
}
}
}
```
Où healthStore est l'objet de HKHealthStore().
Le HKHealthStore est comme la base de données de santé dans iOS.
dataTypesToWrite et dataTypesToRead sont les objets que nous souhaitons interroger dans la base de données.
L'autorisation doit avoir un but et cela est fait dans le fichier xml Info.plist en ajoutant :
```xml
NSHealthClinicalHealthRecordsShareUsageDescription
Lisez les données pour IrisExporter
NSHealthShareUsageDescription
Envoyez les données à IRIS
NSHealthUpdateUsageDescription
Date d'inscription pour IrisExporter
```
### Comment se connecter à un référentiel FHIR ?
Pour cette partie, j'ai utilisé le paquet FHIR de Smart-On-FHIR : https://github.com/smart-on-fhir/Swift-FHIR.
La classe utilisée est le FHIROpenServer.
```swift
private func test() {
progress = true
let url = URL(string: self.url)
swiftIrisManager.fhirServer = FHIROpenServer(baseURL : url! , auth: nil)
swiftIrisManager.fhirServer.getCapabilityStatement() { FHIRError in
progress = false
showingPopup = true
if FHIRError == nil {
showingSuccess = true
textSuccess = "Connecté au référentiel fhir"
} else {
textError = FHIRError?.description ?? "Erreur inconnue"
showingSuccess = false
}
return
}
}
```
Cela permet de créer un nouvel objet fhirServer dans le singleton swiftIrisManager.
Ensuite, nous utilisons la fonction getCapabilityStatement().
Si nous pouvons récupérer le capabilityStatement du serveur FHIR, cela signifie que nous nous sommes connectés avec succès au référentiel FHIR.
Ce référentiel n'est pas en HTTPS, par défaut apple interdit ce type de communication.
Pour permettre le support HTTP, le fichier xml Info.plist est édité comme suit :
```xml
NSAppTransportSecurity
NSExceptionDomains
localhost
NSIncludesSubdomains
NSExceptionAllowsInsecureHTTPLoads
```
### Comment enregistrer un patient dans le référentiel FHIR ?
Opération de base en vérifiant d'abord si le patient existe déjà dans le référentiel.
```swift
Patient.search(["family": "\(self.lastName)"]).perform(fhirServer)
```
Cela permet de rechercher les patients ayant le même nom de famille.
Ici, nous pouvons imaginer d'autres scénarios comme avec Oauth2 et un jeton JWT pour joindre le patient et son jeton. Mais pour cette démo, nous gardons les choses simples.
Ensuite, si le patient existe, nous le récupérons, sinon nous le créons :
```swift
func createPatient(callback: @escaping (Patient?, Error?) -> Void) {
// Créer une nouvelle ressource pour le patient
let patient = Patient.createPatient(prénom: firstName, nom: lastName, date de naissance: birthDay, sex: gender)
patient?.create(fhirServer, callback: { (erreur) dans
callback(patient, erreur)
})
}
```
### Comment extraire les données de HealthKit ?
Cela se fait en interrogeant le magasin Healthkit (HKHealthStore()).
Ici, nous faisons une requête pour les pas.
Préparez la requête avec le prédicat.
```swift
//La semaine dernière
let startDate = swiftFhirIrisManager.startDate
//Now
let endDate = swiftFhirIrisManager.endDate
print("Collecte des séances d'entraînement entre \(startDate) et \(endDate)")
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions.strictEndDate)
```
Puis la requête elle-même avec son type de données (HKQuantityType.quantityType(forIdentifier : .stepCount)) et le prédicat.
```swift
func queryStepCount(){
//La semaine dernière
let startDate = swiftFhirIrisManager.startDate
//Maintenant
let endDate = swiftFhirIrisManager.endDate
print("Collecte des séances d'entraînement entre \(startDate) et \(endDate)")
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions.strictEndDate)
let query = HKSampleQuery(sampleType: HKQuantityType.quantityType(forIdentifier: .stepCount)!, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) { (requête, résultats, erreur) dans
guard let results = results as? [HKQuantitySample] else {
return
}
process(results, type: .stepCount)
}
healthStore.execute(query)
}
```
### Comment transformer les données de HealthKit en FHIR ?
Pour cette partie, nous utilisons le paquet Microsoft HealthKitToFHIR
https://github.com/microsoft/healthkit-to-fhir
Il s'agit d'un paquet utile qui offre des facteurs pour transformer HKQuantitySample en FHIR Observation
```swift
let observation = try! ObservationFactory().observation(from: item)
let patientReference = try! Reference(json: ["référence" : "Patient/\(patientId)"])
observation.category = try! [CodeableConcept(json: [
"coding": [
[
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "activité",
"display": "Activité"
]
]
])]
observation.subject = patientReference
observation.status = .final
print(observation)
observation.create(self.fhirServer,callback: { (erreur) dans
if error != nil {
completion(error)
}
})
```
Où élément est un HKQuantitySample, dans notre cas un type stepCount.
Le facteur fait le gros du travail en convertissant 'élément' et 'type' en FHIR codeableConcept et 'valeur' en FHIR valueQuantity.
La référence au patientId est faite manuellement en intégrant une référence json fhir.
```swift
let patientReference = try! Reference(json: ["référence" : "Patient/\(patientId)"])
```
On fait de même pour la catégorie :
```swift
observation.category = try! [CodeableConcept(json: [
"codage": [
[
"systèmem": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "activité",
"affichage": "Activité"
]
]
])]
```
Enfin, l'observation est créée dans le référentiel fhir :
```swift
observation.create(self.fhirServer,callback: { (erreur) in
if error != nil {
completion(error)
}
})
```
## Logiciel de gestion (FHIR)
Pas grand chose à dire, il est basé sur le modèle fhir de la communauté InterSystems :
https://openexchange.intersystems.com/package/iris-fhir-template
## Interface utilisateur
Il est basé sur les travaux de Henrique et est un joli interface utilisateur pour les dépôts FHIR fait en jquery.
https://openexchange.intersystems.com/package/iris-fhir-portal
Annonce
Adeline Icard · Mai 22, 2023
Salut la Communauté !
SANTEXPO 2023 démarre demain et nous vous y aimerons rencontrer ! On a le programme vraiment très chargé !
Et demain on cmmence par la conference Coordination Ville Hôpital : mise en place d’un portail de services pour optimiser la prise en charge des patients sur le territoire de la Mayenne.
Financé par l’Agence Régionale de Santé des Pays de la Loire, le projet est né d’un besoin conjoint des praticiens libéraux et des spécialistes hospitaliers de la Mayenne, formulé dans le cadre des États Généraux de la Santé, pour faciliter la gestion du parcours patient sur le territoire.
Le portail May Ville-Hôp offre une porte d’entrée unique pour les professionnels de santé proposant de nombreux services tels que : vision 360 du patient, notifications temps réel, gestion des demandes semi-urgentes, télé-expertise, espace de discussion, annuaire des professionnels de santé …
Intervenants :
Dr Jean-François SALLARD, Conseiller Départemental de la MayenneVincent ERRERA, Directeur délégué du GHT de la Mayenne et du Haut-AnjouDr Dominique MORIN, Coordonnateur médical du projet parcours ordonnancement au GHT de la Mayenne et du Haut-AnjouDr Nathalie GAUME, Secrétaire général du Conseil Départemental de l’Ordre des Médecins de la Mayenne Florence CUREAU, Experte des plateformes de données, InterSystems
Mardi 23 mai de 14h15 à 15h00
Agora Numérique
Nous espérons vous voir sur notre stand F43 ! À bientôt !
Article
Lorenzo Scalese · Avr 17, 2023
Il y a quelque temps, GitHub a annoncé une nouvelle fonctionnalité, les Codespaces [GitHub Codespaces](https://github.com/features/codespaces). Elle permet d'exécuter VSCode dans le navigateur, avec presque la même puissance que s'il était exécuté localement sur votre machine, mais aussi avec la puissance des nuages, de sorte que vous pouvez choisir le type de machine avec jusqu'à 32 cœurs de CPU et 64 Go de RAM.
.png)
C'est impressionnant, n'est-ce pas ? Mais comment cela peut-il nous aider à travailler sur des projets pilotés par InterSystems IRIS ? Voyons comment le configurer pour nous.
### Démarrage simple pour tout référentiel
Grâce à cette fonctionnalité, vous pourrez modifier n'importe quel dépôt dans le nuage, par le bouton Code. Veuillez noter que cette fonctionnalité est encore en version bêta, et peut ne pas être disponible pour tout le monde. Après une période bêta, elle ne sera disponible que pour les comptes payants.
.png)
Ainsi, ce dépôt n'a pas été spécialement préparé pour les codespaces, mais seulement pour VSCode. Appuyez sur le bouton de nouveau codespace "New codespace", pour créer un environnement juste pour vous.
.png)
Dans mon cas, lors de l'utilisation précédente de codespaces, j'ai déjà installé l'extension ObjectScript et l'ai activée globalement par une invite de Codespaces. Ainsi, elle s'installe pour moi à chaque fois, et le code ObjectScript est déjà mis en évidence. Mais l'IRIS n'est pas encore disponible. Démarrons-le avec docker-compose.
.png)
Après cela, nous pouvons maintenant nous connecter au terminal IRIS et compiler le code.
.png).png)
Les ports de docker-compose sont automatiquement reconnus et peuvent être ouverts dans le navigateur. Il est donc également possible d'ouvrir le Portail de gestion du système.
.png)
### Utilisation avec un référentiel préparé
Nous avons réussi à faire fonctionner VSCode et IRIS dans le nuage, mais nous avons dû faire certaines choses manuellement, pour le rendre prêt. Cependant, il est également possible de rendre votre référentiel prêt pour le développement dès le début.
C'est possible, avec [devcontainer.json](https://docs.github.com/en/codespaces/customizing-your-codespace/configuring-codespaces-for-your-project). Je vais faire un exemple basé sur l'un de mes projets récents [Realworld](https://github.com/daimor/realworld-intersystems-iris). Ce projet est assez complexe, il a un backend et un frontend et utilise docker-compose pour démarrer tout cela ensemble.
devcontainer peut utiliser docker-compose également, donc, ma configuration est apparue comme ceci.
{
"name": "IRIS RealWorld example",
"dockerComposeFile": "docker-compose.yml",
"service": "server",
"extensions": [
"intersystems-community.vscode-objectscript"
],
"forwardPorts": [
80,
52773
],
"workspaceFolder": "/home/irisowner/conduit",
"remoteUser": "irisowner",
"postCreateCommand": "iris start iris",
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "bash",
"icon": "terminal-bash"
},
"iris": {
"path": "iris",
"args": ["session", "iris"]
}
},
"intersystems.servers": {
"/ignore": true
},
"objectscript.ignoreInstallServerManager": true,
"objectscript.ignoreInstallLanguageServer": true,
"objectscript.conn": {
"active": true,
"host": "localhost",
"port": 52773,
"ns": "CONDUIT",
"username": "demo",
"password": "demo",
"links": {
"Conduit APP": "http://localhost:80/",
"Conduit API": "http://${host}:${port}/conduit/"
}
}
}
}
Il y a beaucoup de choses configurées
* chemin vers le fichier docker-compose.yml personnalisé, en particulier pour Codespaces
* nom du service principal, où le développement est effectué
* liste des extensions installées par défaut dans VSCode
* Les ports qui doivent être publiés, dans ce cas, le port du serveur web pour IRIS et pour le frontend
* chemin du répertoire de travail
* utilisateur à l'intérieur du conteneur;; comme nous entrons dans le conteneur IRIS, nous avons besoin de l'utilisateur irisowner
* dans docker-compose, notre conteneur IRIS est configuré pour ne pas utiliser le point d'entrée par défaut iris-main, mais juste mettre en veille avec infinity, et après avoir démarré l'environnement, nous devons démarrer notre IRIS
* et enfin, les paramètres pour VSCode, peuvent également être configurés ici, c'est un niveau de paramètres de la machine. Qui, bien sûr, peuvent être remplacés ou ajoutés avec .vscode/settings.json
Le démarrage de Codespaces pour un tel référentiel prendra un peu plus de temps, car il faudra construire tous les conteneurs nécessaires et les démarrer. GitHub indique qu'il sera possible de pré-créer de telles images après chaque poussée au référentiel, de sorte que le démarrage sera plus rapide.
.png)
Et quand il a démarré, aucune autre action n'est nécessaire, il est prêt pour le développement.
.png)
Ce projet a une option pour tester l'API REST avec des tests Postman préparés, donc, j'ai installé npm et newman à l'intérieur du conteneur backend avec IRIS. Et il est possible d'y exécuter ces tests. Tout est passé, bien joué.
.png)
Et le frontend est également disponible
.png)
GitHub permet de se connecter à Codespaces, y compris depuis le VSCode local. Lorsque vous appuyez sur le bouton vert Codespaces dans le coin, vous pouvez choisir d'ouvrir dans VC Code (l'extension GitHub Codespaces doit être installée).
.png)
Et voici, c'est le même projet, ouvert avec votre VSCode local, mais fonctionnant dans le nuage, comme vous pouvez voir le résultat de ifconfig, je ne suis certainement pas à Singapour, en ce moment.
.png)
### Dans un navigateur mais sans Codespaces GitHub
Et si vous n'avez pas accès à la fonction Codespaces, ou si vous ne voulez pas l'utiliser de cette manière, mais que vous voulez quand même essayer VSCode dans le navigateur.
Eh bien, c'est possible avec un autre projet [code-server](https://github.com/cdr/code-server)
Vous pouvez simplement exécuter ce VSCode avec la commande suivante
`docker run -it -p 8080:8080 codercom/code-server --auth=none`
Il s'exécutera, la version par défaut de VSCode, sans dossiers mappés à l'intérieur, montez simplement n'importe quel dossier, et définissez-le comme répertoire de travail, et vous le verrez à l'intérieur.
``docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld codercom/code-server --auth=none``
.png)
C'est le VSCode par défaut, sans extension ObjectScript installée. Il a une limitation avec les extensions, il n'a pas accès au marché original de VSCode, au lieu de cela il utilise un autre endroit, open-vsx.org, et l'extension ObjectScript principale est [disponible](https://open-vsx.org/extension/intersystems-community/vscode-objectscript) là aussi.
Avec un tel fichier Docker, nous pouvons créer notre propre serveur de code, avec tout ce qui y est installé, ainsi que certaines extensions déjà installées.
FROM codercom/code-server
USER root
RUN curl -fsSL https://deb.nodesource.com/setup_15.x | bash - && \
apt-get install -y jq nodejs python3-pip python3-dev unixodbc-dev && \
rm -rf /var/lib/apt/lists/* && \
pip3 install pyodbc && \
npm install -g yarn && \
sudo chown -R 1000:1000 /home/coder
COPY extensions extensions
COPY settings.json /root/.local/share/code-server/User/settings.json
ENV SERVICE_URL=https://open-vsx.org/vscode/gallery
ENV ITEM_URL=https://open-vsx.org/vscode/item
RUN \
code-server --install-extension ms-python.python && \
code-server --install-extension intersystems-community.vscode-objectscript && \
find extensions -type f -exec code-server --install-extension {} \;
WORKDIR /opt/intersystems
CMD [ "--auth=none", "--disable-telemetry" ]
Vous pouvez définir des paramètres par défaut dans le fichier settings.json pour le niveau utilisateur et si certaines extensions dont vous avez besoin ne sont pas disponibles sur open-vsx, téléchargez-les manuellement, placez-les dans le dossier des extensions à côté du Dockerfile, et elles seront également installées.
Vous êtes maintenant en mesure de lancer un nouveau serveur de code avec toutes les extensions dont vous avez besoin installées.
docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld <strong>caretdev/code-server</strong> --auth=none
Et la coloration syntaxique est déjà là, il ne reste plus qu'à faire fonctionner IRIS lui-même, et cela peut être fait avec un docker-compose étendu, où le code-server sera juste un autre service à côté d'IRIS.
.png)