Recherche

Effacer le filtre
Article
Irène Mykhailova · Mars 26, 2023

Hacking Health Camp 2023 (jour 3)

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

Le serveur FHIR fait fonctionner le projet Vulcain au cours du HL7 FHIR Connectathon

![image](/sites/default/files/inline/images/vulcan-logo-full.png) 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 : ![image](/sites/default/files/inline/images/associate.png) Ensuite, réindexez les rendez-vous dans le référentiel : ![image](/sites/default/files/inline/images/reindexing.png) Le paramètre de recherche/bundle devrait maintenant être téléchargé à votre point de terminaison : ![image](/sites/default/files/inline/images/encounter.png) 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

iOS, FHIR et IRIS for Health

# Swift-FHIR-Iris Application iOS pour exporter les données HealthKit vers InterSystems IRIS for Health (ou n'importe quel référentiel FHIR) ![main](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/FHIR.png) # 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. ![xcode](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/xcode_and_simulator.gif) ## Configuration du simulateur Accéder à Santé Cliquez sur Étapes Ajouter des données ![simulateur](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/configuration_simulator.gif) ## 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 ![portail](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/portal_default.png) 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 ![authoriser](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/ios_authorize.gif) 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. ![savepatient](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/save_patient.gif) 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. ![patient portal](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/patient_toto.png) 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. ![envoie ios](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/ios_send.gif) Consultez les nouvelles activités sur le portail : Nous pouvons voir maintenant que Toto a deux nouvelles observations et activités. ![portail d'activités](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/portal_activities.gif) Vous pouvez éventuellement cliquer sur le bouton de graphique pour l'afficher comme un graphique. ![graphiques de portail](https://raw.githubusercontent.com/grongierisc/Swift-FHIR-Iris/main/img/gif/portal_chart.gif) # 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

SantExpo démarre demain !

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

Сodespaces GitHub avec IRIS

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. ![](/sites/default/files/inline/images/images/image(2535).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. ![](/sites/default/files/inline/images/images/image(2537).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. ![](/sites/default/files/inline/images/images/image(2538).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. ![](/sites/default/files/inline/images/images/image(2539).png) Après cela, nous pouvons maintenant nous connecter au terminal IRIS et compiler le code. ![](/sites/default/files/inline/images/images/image(2540).png)![](/sites/default/files/inline/images/images/image(2541).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. ![](/sites/default/files/inline/images/images/image(2543).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. ![](/sites/default/files/inline/images/images/image(2544).png) Et quand il a démarré, aucune autre action n'est nécessaire, il est prêt pour le développement. ![](/sites/default/files/inline/images/images/image(2545).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é. ![](/sites/default/files/inline/images/images/image(2546).png) Et le frontend est également disponible ![](/sites/default/files/inline/images/images/image(2547).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). ![](/sites/default/files/inline/images/images/image(2548).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. ![](/sites/default/files/inline/images/images/image(2549).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`` ![](/sites/default/files/inline/images/images/image(2550).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. ![](/sites/default/files/inline/images/images/image(2551).png)  
Annonce
Irène Mykhailova · Mars 30, 2022

Rencontrez Lorenzo Scalese - nouveau modérateur de la communauté des développeurs !

Salut la communauté, Veuillez accueillir @Lorenzo.Scalese en tant que nouveau modérateur français dans l'équipe de la Communauté des Développeurs ! 🎉 Saluons Lorenzo avec de grands applaudissements et regardons de plus près sa bio !! @Lorenzo.Scalese est architecte de solutions chez Zorgi. > Zorgi est une entreprise spécialisée et leader du marché belge des solutions informatiques pour le secteur de la santé. Quelques mots sur Lorenzo : Il a débuté sa carrière en 2007 en tant que développeur et a travaillé sur de nombreux projets liés à l'industrie de la santé : logiciel d'enregistrement médical électronique (DME), logiciel de radiologie, connectivité avec RIS\PACS et modalités ionisantes, hub national d'échange de données médicales,... Il travaille avec les technologies d'InterSystems depuis le début de sa carrière. De Caché 5.2 à IRIS aujourd'hui. Aujourd'hui, son travail consiste principalement à définir l'architecture générale d'un logiciel EMR, à créer des outils de développement, des scripts de déploiement et à migrer des applications basées sur Caché\HealthShare vers IRIS à l'aide de conteneurs. Quelques autres faits sur Lorenzo Il est né en Belgique en 1984, ses parents sont italiens. Il vit dans un village de campagne, marié et père de 2 garçons (11 ans et 8 ans). Ses passe-temps sont les technologies, le codage, les balades en VTT, le bricolage et les jeux vidéo. BIENVENU! Merci et félicitations @Lorenzo.Scalese👏🏼 Que la force DC Moderator soit avec toi ;) Bienvenue dans la Team @Lorenzo.Scalese
Article
Robert Bira · Déc 30, 2022

Comment s'inscrire à un Early Access Program (EAP)?

Early Access Program (EAP) est un moyen de fournir rapidement des fonctionnalités spécifiques à un groupe de personnes qui testeront et fourniront des commentaires sur cette fonctionnalité. InterSystems a publié différentes versions (ou parties) de logiciels au cours des dernières années et amélioré les fonctionnalités avant leur sortie. Quelques exemples jusqu'ici : Columnar Storage, Python intégré, FHIRSQL et d'autres. Mais l'une des caractéristiques de l'EAP est qu'il ne sont peut-être pas accessibles à tous. Vous devez vous inscrire au programme. Dans le cas de l'arrêt de l'installation du serveur Web Apache (alias NoPWS), la manière de s'inscrire consiste à envoyer un e-mail à nopws@intersystems.com. Utilisez ce même e-mail pour les commentaires. Une fois que vous aurez reçu un e-mail de confirmation, vous verrez les PAE auxquels vous avez accès sur le site Web des services d'évaluation. Vous devez vous connecter pour voir le contenu. Ainsi, après connexion : 1) EAPs se trouvent dans la partie droite de l'écran : Cliquez sur "Télécharger les programmes d'accès anticipé" et passez à l'écran suivant. 2) Sélectionnez l'EAP auquel vous êtes inscrit. En utilisant NoPWS comme exemple ici : N'oubliez pas que vous ne pouvez voir que les EAPs auxquels vous avez accès. 3) Après avoir sélectionné un EAP, vous pourrez voir tous les documents et logiciels disponibles pour celui-ci : Oui, vous devez accepter les conditions d'utilisation. Ensuite, le bouton Télécharger sera activé pour vous. Et une dernière chose... S'il vous plaît, donnez votre avis !
Article
Lorenzo Scalese · Mars 24

Comment installer un cluster de nœuds IRIS en sharding en 1 minute

Je vais vous montrer comment vous pouvez installer très rapidement sur votre ordinateur un cluster de nœuds InterSystems IRIS en sharding. Dans cet article, mon objectif n'est pas de parler du sharding en détail, ni de définir une architecture de déploiement pour un cas réel, mais de vous montrer comment vous pouvez rapidement installer sur votre machine un cluster d'instances d'IRIS en sharding avec lequel vous pouvez jouer et faire des tests. Si vous souhaitez en savoir plus sur le sharding dans IRIS, vous pouvez consulter la documentation en cliquant ici: clicking here. Disons dès le départ que la technologie de sharding d'IRIS va nous permettre de faire deux choses: Définir, charger et consulter des tables fragmentées ou des shards, dont les données seront réparties de manière transparente entre les nœuds du cluster Définir des tables fédérées, qui offrent une vue globale et composite des données appartenant à des tables différentes et qui, physiquement, sont stockées sur différents nœuds distribués Donc, comme je l'ai dit, nous laissons le sujet du jeu avec des shards ou des tableaux fédérés pour d'autres articles, et nous nous concentrons maintenant sur l'étape précédente, c'est-à-dire sur la mise en place du cluster de nœuds en sharding. Pour notre exemple, nous allons utiliser Docker Desktop (for Windows or MacOS) et nous appuyer sur la fonctionnalité d'IRIS: CPF Merge; ou fusion de fichier de configuration; qui nous permet d'utiliser un fichier texte brut dans lequel nous inclurons les sections et propriétés de configuration d'IRIS que nous voulons appliquer pour modifier la configuration actuelle de l'instance d'IRIS. Cette fichier se superpose au fichier iris.cpf qui définit la configuration par défaut de l'instance. Ce merge est automatiquement « activé » lors de l'ajout de la variable d'environnement: ISC_CPF_MERGE_FILE à laquelle nous devons avoir attribué un chemin valide vers un fichier contenant les sections du fichier cpf que nous voulons modifier. Au démarrage, IRIS vérifie si on lui a demandé de faire une fusion (merge) (en gros, si cette variable d'environnement existe et pointe vers un fichier valide). Si c'est le cas, vous pouvez procéder à la fusion et démarrer. Je ne fais pas plus de détours et je vous inclus le fichier docker-compose.yml qui fera la magie: docker-compose.yml services: # iris container irisnode1: init: true hostname: irishost1 image: shardnode:latest container_name: irisnode1 build: context: ./cluster dockerfile: Dockerfile ports: - "9991:1972" environment: - ISC_DATA_DIRECTORY=/durable/irishost1 - ISC_CPF_MERGE_FILE=/iris-shared/merge_first_data-node.cpf command: --check-caps false --ISCAgent false --key /iris-shared/iris.key -a /iris-shared/configure_first_data-node.sh volumes: - ./cluster/iris-instance:/iris-shared:delegated - ./DDBBs:/durable:delegated irisnode2: init: true hostname: irishost2 image: shardnode:latest container_name: irisnode2 build: context: ./cluster dockerfile: Dockerfile ports: - "9992:1972" environment: - ISC_DATA_DIRECTORY=/durable/irishost2 - ISC_CPF_MERGE_FILE=/iris-shared/merge_data-node.cpf command: --check-caps false --ISCAgent false --key /iris-shared/iris.key -a /iris-shared/configure_data-node.sh volumes: - ./cluster/iris-instance:/iris-shared - ./DDBBs:/durable depends_on: irisnode1: condition: service_healthy # conteneur de passerelle web webgateway: image: containers.intersystems.com/intersystems/webgateway:latest-em init: true container_name: webgateway hostname: webgateway ports: - 7772:80 - 7773:443 environment: - ISC_CSP_CONF_FILE=/webgateway-shared/CSP.conf - ISC_CSP_INI_FILE=/webgateway-shared/CSP.ini volumes: - ./webgateway/CSP.conf:/webgateway-shared/CSP.conf - ./webgateway/CSP.ini:/webgateway-shared/CSP.ini Dans ce cas, nous créons 3 services: irisnode1 - Premier nœud du cluster, qui a un rôle spécial, et c'est pourquoi nous l'appelons spécifiquement node1 irisnode2 - Nœud de données supplémentaire du cluster, dont le rôle est data (nous pouvons en avoir autant que nous le voulons) webgateway - Serveur web préconfiguré pour accéder aux instances IRIS (Apache + Webgateway) Pour créer l'image shardnode:latest, j'ai utilisé le dockerfile suivant: Dockerfile FROM containers.intersystems.com/intersystems/irishealth:2024.3 #FROM containers.intersystems.com/intersystems/iris-community:latest-em #FROM containers.intersystems.com/intersystems/irishealth-arm64:2024.3 USER root WORKDIR /opt/irisapp RUN chown -R irisowner:irisowner /opt/irisapp USER irisowner WORKDIR /opt/irisapp COPY --chown=irisowner:irisowner src src COPY --chown=irisowner:irisowner iris.script iris.script RUN iris start IRIS \ && iris session IRIS < iris.script \ && iris stop IRIS quietly Les fichiers utilisés pour effectuer la fusion (merge) pour nodo1 et d'autre cluster IRIS data nodes sont les suivants: merge_first_data-node.cpf # Premier nœud du cluster # 2 GB 8k / 204 MB gmpheap / 64 nodos max [config] globals=0,0,2048,0,0,0 gmheap=204800 MaxServerConn=64 MaxServers=64 # Configuration du premier nœud du cluster de sharding. Création d'un point de terminaison REST de test [Actions] ConfigShardedCluster:ClusterURL=IRIS://irishost1:1972/IRISCLUSTER,Role=node1 CreateApplication:Name=/rest/testapp,MatchRoles=:%ALL,NameSpace=USER,DispatchClass=Test.RESTserver,AutheEnabled=64 merge_data-node.cpf # Noeud de données supplémentaires # 2 GB 8k / 204 MB gmpheap / 64 nodos max [config] globals=0,0,2048,0,0,0 gmheap=204800 MaxServerConn=64 MaxServers=64 # Définition d'un nœud de données et son ajout au cluster. Création d'un point de terminaison REST de test (optionnel) [Actions] ConfigShardedCluster:ClusterURL=IRIS://irishost1:1972/IRISCLUSTER,Role=data # CreateApplication:Name=/rest/testapp,MatchRoles=:%ALL,NameSpace=USER,DispatchClass=Test.RESTserver,AutheEnabled=64 On pourrait avoir plus de nœuds de type data dans le cluster en ajoutant simplement plus de services avec la même définition que l' irisnode2 (en changeant le nom bien sûr) D'autre part, pour que l'acheminement fonctionne correctement sur notre serveur web et que nous puissions accéder aux portails d'administration de chacune des instances, nous devons modifier le paramètre CSPConfigName dans chacune d'entre elles, et nous le faisons avec les fichiers: configure_first_data-node.sh y configure_data-node.sh; qui sont identiques dans cet exemple, mais que j'ai laissés différents car, à un moment donné, nous pourrions vouloir effectuer des actions différentes au démarrage de chaque instance d'IRIS, selon qu'il s'agit du node1 ou d'un nœud de type data du cluster. configure_data-node.sh cat << EOF | iris session iris do ##class(%SYSTEM.CSP).SetConfig("CSPConfigName","$HOSTNAME") halt EOF Je pense que c'est à peu près tout. Les nœuds pourraient être définis à l'aide de l'API disponible dans la classe %SYSTEM.Cluster mais la possibilité d'introduire des actions conjointement avec la fonctionnalité CPF Merge simplifie grandement la tâche. Je vous recommande de consulter ce lien, en particulier la section relative à la rubrique the section [Actions]. Pour construire les images et déployer le cluster, nous pourrions construire notre image sharnode:latest et lancer le docker-compose from depuis VS Code. Alternativement, nous pourrions le faire dans notre ligne de commande, à partir du dossier dans lequel nous avons le fichier: docker-compose.yml, en exécutant ces commandes: docker compose build docker compose up Cela prendra un peu de temps la première fois car l'instance marquée comme node1 doit être instanciée avant que tout autre nœud de type data du cluster ne démarre pour la première fois. Mais tout devrait fonctionner et être prêt en une minute ou moins. Si tout s'est bien passé, vous devriez pouvoir accéder aux portail de gestion de chaque instance avec les URL ci-dessous: Portail de gestion du nœud de cluster 1 node1: http://localhost:7772/irishost1/csp/sys/UtilHome.cspPortail de gestion du nœud de données data : http://localhost:7772/irishost2/csp/sys/UtilHome.cspAccès à la passerelle WebGateway: http://localhost:7772/csp/bin/Systems/Module.cxw Et voilà! À partir de là, la limite en termes de volume de stockage de bases de données et de taille de tables est déjà fixée par votre hardware. Vous auriez un cluster de nœuds IRIS prêt à définir des tables en sharding ou des tables fédérées. J'espère que cela vous sera utile!! À bientôt...
Article
Lorenzo Scalese · Sept 21, 2022

Client FHIR pour se connecter à n'importe quel serveur FHIR public en utilisant Embedded Python

Bonjour la communauté, Ce post est une introduction de mon application de messagerie pour iris-fhir-client iris-fhir-client . ![](/sites/default/files/inline/images/images/170888223-51e31519-92af-446f-acae-0633df885dbe.gif)  iris-fhir-client peut se connecter à n'importe quel serveur FHIR public en utilisant Python intégré avec l'aide de la bibliothèque fhirpy. Obtenez des informations sur les ressources via le terminal et l'application web CSP. ## Affichage et activation des serveurs enregistrés  Connexion au terminal IRIS docker-compose exec iris iris session iris L'application enregistrera le service d'accélérateur FHIR d'InterSystems Accelerator Service et le serveur public FHIR de SmartHealthIT par défaut et les deux sont prêts à être utilisés.  Utilisez la commande suivante pour obtenir la liste des serveurs enregistrés  do ##class(dc.FhirClient).ServerList() ![image](https://user-images.githubusercontent.com/18219467/170888825-7d655866-3a8b-4322-9b64-1ccf0b1ffbf4.png) Le service InterSystems FHIR Accelerator est actif. Afin de sélectionner le serveur public FHIR de SmartHealthIT, utilisez la fonction SetFhirServer de la classe dc.FhirClient en indiquant l'ID du serveur   do ##class(dc.FhirClient).SetFhirServer(2)   ## Serveurs FHIR enregistrés Pour enregistrer un nouveau serveur, utilisez la fonction RegisterServer() de la classe dc.FhirClient class(dc.FhirClient).RegsterServer("Nom du serveur", "Point de terminaison", "ApiKey" [facultatif], "EndpointOAuth" [facultatif]) exécutez ##class(dc.FhirClient).RegisterServer("Serveur FHIR INTERSYSTEMS", "http://localhost:52773/csp/healthshare/samples/fhir/r4/","","") ![image](https://user-images.githubusercontent.com/18219467/171025900-e973c396-52da-4e24-8083-c7f5f701919c.png) ## Obtention de ressources à partir des serveurs FHIR Pour récupérer toutes les ressources du serveur actuel, utilisez la méthode ListResources() de la classe dc.FhirClient exécutez ##class(dc.FhirClient).ListResources() ![](https://user-images.githubusercontent.com/18219467/170890855-891bf5eb-a724-4297-8bcb-821637a146f5.png) Afin d'afficher le nombre d'enregistrements de n'importe quelle ressource, utilisez la méthode CountResource() en passant la ressource de dc.FhirClient. La commande ci-dessous permet d'obtenir le compteur de ressources patient par rapport au serveur FHIR actif Définissez le nombre = ##class(dc.FhirClient).CountResource("Patient") écrivez le nombre Pour récupérer toutes les ressources créées avec leur nombre, il suffit de passer 1 à la fonction ListResource() exécutez ##class(dc.FhirClient).ListResources(1) ##![](https://user-images.githubusercontent.com/18219467/170890718-1dacba2c-4d2d-4830-8606-be0542230afb.png) Pour obtenir les détails de la ressource, utilisez GetResource() en passant la ressource de la classe dc.FhirClient La commande ci-dessous récupère tous les patients du serveur FHIR actif exécutez ##class(dc.FhirClient).GetResource("Patient") ##![image](https://user-images.githubusercontent.com/18219467/170890728-7fb7d8a3-4c33-4084-8f54-6ca772b60a41.png) #### La commande ci-dessous récupère toutes les observations du serveur FHIR actif exécutez ##class(dc.FhirClient).GetResource("Observation") ##![image](https://user-images.githubusercontent.com/18219467/170890999-9548988e-40e7-49c1-ad7f-f95d45f62b50.png) ##   ## Obtention des ressources pour un patient particulier à partir des serveurs FHIR La commande ci-dessous permet de récupérer les détails des observations pour l'identifiant Patinet ID 1 à partir du serveur FHIR actif exécutez ##class(dc.FhirClient).GetPatientResources("Observation","1") ![image](https://user-images.githubusercontent.com/18219467/170956427-4b46797d-45ce-49af-996d-465a2239d73c.png) Affichez des informations du serveur FHIR à partir de l'application Web CSP Naviguer vers http://localhost:55037/csp/fhirclient/index.cspLa page d'index affiche le nombre de patients, d'observations, de praticiens et de rencontres sur le serveur actif, ainsi que les détails sur les patients et les serveurs enregistrés   ### La page d'index affichera la liste des serveurs FHIR avec le serveur actif sélectionné. Sélectionnez un autre serveur dans la liste pour afficher les détails du serveur sélectionné ![image](https://user-images.githubusercontent.com/18219467/170976217-70b63f48-981a-4b76-9f9a-282f5f86ff59.png) ### Passez la souris sur l'ID du Patient et sélectionnez pour obtenir des détails sur les Ressources Patient ![image](https://user-images.githubusercontent.com/18219467/170976661-290c9f44-e11b-4fec-9cdb-bccb069de4ed.png) ### Cette page affichera le nombre de Ressources Patient ainsi que les détails des Observations des Patients ![170881340-a9cd0c77-bf24-4e8e-85f7-84e04b527b49](https://user-images.githubusercontent.com/18219467/170976982-66eeb068-248f-474f-ad8c-e39c8cd2faea.png) Si vous avez trouvé cette application utile, merci de voter pour mon application. Merci!
Article
Sylvain Guilbaud · Mai 19, 2023

Apache Superset désormais avec IRIS

[Apache Superset](https://superset.apache.org/) est une plate-forme moderne d'exploration et de visualisation des données. Superset peut remplacer ou augmenter les outils de business intelligence propriétaires pour de nombreuses équipes. Superset s'intègre bien à une variété de sources de données. Désormais, il est également possible de l'utiliser avec InterSystems IRIS. Une [démo en ligne est disponible](https://superset.demo.community.intersystems.com/superset/dashboard/world_health/) et elle utilise SQL d'IRIS Cloud comme source de données. ![](/sites/default/files/inline/images/images/image(6046).png) Apache Superset fournit un certain nombre d'exemples, qui ont été chargés avec succès dans IRIS sans aucun problème, et affichés sur des tableaux de bord d'exemple. Le support d'IRIS est implémenté avec un paquetage Python nommé [superset-iris](https://pypi.org/project/superset-iris/), qui peut être installé manuellement dans Superset. Superset utilise SQLAlchemy comme moteur de base de données, tandis que le paquet superset-iris utilise [sqlalchemy-iris](https://pypi.org/project/sqlalchemy-iris/). Lorsque le paquet est installé dans l'environnement Superset, il devient possible de sélectionner InterSystems IRIS dans la liste des bases de données prises en charge. ![](/sites/default/files/inline/images/images/image(6050).png)![](/sites/default/files/inline/images/images/image(6049).png) Pour se connecter à la base de données IRIS, il faut un URI SQLAlchemy sous la forme suivante: `iris://{login}:{password}@{hostname}:{port}/{namespace}` La connexion de test doit vérifier la disponibilité du serveur. Cliquez ensuite sur Connecter pour terminer l'ajout de la base de données. > Dans le même formulaire d'édition de base de données, dans l'onglet avancé Advanced Tab, et dans le bloc de sécurité Security, l'option nommée `Autoriser le téléchargement de fichiers vers la base de données`, qui permettra de télécharger des fichiers CSV et de construire des tableaux avec des données dans IRIS en se basant sur ces derniers. Le Labo SQL, qui permet d'effectuer des requêtes SQL ![](/sites/default/files/inline/images/images/image(6051).png) Il permet également de collecter et d'afficher des renseignements sur les schémas et les tableaux existants, de prévisualiser ces tableaux et de proposer la construction d'une simple requête SQL avec toutes les colonnes. ![](/sites/default/files/inline/images/images/image(6052).png) Pour l'essayer localement, clonez le dépôt git clone https://github.com/caretdev/superset-iris.git superset-iris cd superset-iris Lancez Superset avec Docker-Compose docker-compose pull docker-compose up -d Lancez Superset avec Docker-Compose Pendant le démarrage, il importe les données d'exemple dans la base de données IRIS, cela prendra un certain temps, pour attendre que ce soit fait, exécutez la commande suivante docker-compose logs -f superset-init Lorsque la commande ci-dessus a fini de fonctionner, allez à http://localhost:8088/dashboard/list/. Les panneaux de bord sont disponibles sans autorisation. Pour accéder au Labo SQL, utilisez admin/admin comme login et mot de passe. Veuillez voter sur [le concours](https://openexchange.intersystems.com/contest/current)
Article
Lorenzo Scalese · Oct 10, 2022

Création et validation de n'importe quelle ressource HL7 FHIR en utilisant le schéma FHIR à l'aide d'IntelliSense et de la fonctionnalité de complétion automatique dans VS Code

L'interopérabilité des soins de santé permet d'améliorer les soins aux patients, de réduire les coûts des prestataires de soins et de fournir une image plus précise aux prestataires. Cependant, avec un si grand nombre de systèmes différents, les données sont formatées de nombreuses manières différentes. De nombreuses normes ont été créées pour tenter de résoudre ce problème, notamment HL7v2, HL7v3 et CDA, mais toutes présentent des inconvénients. FHIR (Fast Healthcare Interoperability Resources), ou Ressources rapides d'interopérabilité des soins de santé, est un nouveau format pour les échanges des informations médicales qui vise à résoudre ces problèmes. Il est développé par Health Level Seven International (HL7), une organisation qui a également développé HL7v2, HL7v3 et CDA. Aujourd'hui nous allons explorer comment créer et valider une ressource FHIR en utilisant le schéma FHIR à l'aide d'IntelliSense et de la fonctionnalité de complétion automatique dans VS Code. **Etape 1** : Téléchargement du fichier de schéma JSON pour la validation des ressources sur le site officiel de FHIR https://www.hl7.org/fhir/. ![](/sites/default/files/inline/images/images/image(2432).png) ![](/sites/default/files/inline/images/images/image(2433).png) **Étape 2:** Création d'un dossier (dans cet exemple, j'utilise le dossier Patient et la ressource Patient) et copiage du fichier fhir.schema.json extrait dans le même dossier, puis ouverture du dossier à partir du code VS.  ![](/sites/default/files/inline/images/images/image(2434).png)   **Étape 3:** Configurez le code VS pour reconnaître le schéma FHIR en modifiant le fichier setting.json. Appuyez sur CTRL+SHIFT+P et tapez les paramètres de l'espace de travail JSON ![](/sites/default/files/inline/images/images/image(2435).png)   **Étape 4:** Création d'un nouveau fichier patient.fhir.json dans le même dossier. Appuyez sur Ctrl+Espace et vous obtiendrez tous les attributs des ressources FHIR à travers IntelliSense #![](/sites/default/files/inline/images/images/image(2436).png) Ajoutez le type de ressource Patient et tous les attributs liés à la ressource Patient vont apparaître dans l'IntelliSense. ![](/sites/default/files/inline/images/images/image(2437).png) **VS Code validera automatiquement la structure et la syntaxe de la ressource.** ![](/sites/default/files/inline/images/images/image(2438).png)   Avec l'aide d'IntelliSense et de la fonction de complétion automatique, nous avons créé et validé notre ressource patient. ![](/sites/default/files/inline/images/images/image(2439).png) Step 5: Affichez la ressource créée dans le serveur FHIR d'InterSystems en utilisant l'API Rest à partir de postman ![](/sites/default/files/inline/images/images/image(2440).png) Récupérer la ressource patient créée en utilisant la méthode "Get" ![](/sites/default/files/inline/images/images/image(2441).png) Félicitations, nous avons créé, validé notre ressource patient et réussi à l'envoyer et la récupérer sur le serveur FHIR d'InterSystems en utilisant postman. De cette façon, nous pouvons facilement créer et valider n'importe quelle ressource FHIR.      
Article
Lorenzo Scalese · Déc 9, 2022

FHIRDrop, FHIRBox - le transfert de fichiers géré vers FHIR®

Une production simple qui permet de charger des paquets de transactions FHIR dans le serveur FHIR® d'InterSystems® via Box et Dropbox.  ; En utilisant les composants de connexion MFT inclus et un processus personnalisé Custom Business Process de 14 lignes, cette production traitera vos paquets de transactions vers les ressources FHIR pour une consommation immédiate à la manière magique digne d'Harry Potter. Idéal pour les Hackathons, la recherche et les cocktails FHIR®. Tout d'abord, je vous propose une brève visite vidéo de la production, des connexions MFT et de la configuration de l'application Oauth2 pour Box et Dropbox sur IRIS. Ensuite, je vous propose quelques étapes pour vous aider à utiliser le Fournisseur de MFT de votre choix et le flux de travail de votre choix (Desktop, API ou Web Console glisser-déposer). Quelques gaffes : Les rappels OAUTH2 Call Backs nécessitent des Points d'extrémité SSL pour qu'IRIS fournisse la redirection... le mieux est de tenter le coup sur Health Connect Cloud ! Dropbox pour les entreprises a des difficultés avec les jetons basés sur l'équipe, mais Dropbox personnel fonctionne bien. Ce n'est pas un problème, mais cela demande un peu plus. Faites attention au "/" de l'URL de base de Dropbox lorsque vous configurez les connexions MFT (assurez-vous qu'il existe). Les adaptateurs MFT sortants doivent avoir un "/" de fin de ligne pour les chemins d'accès à Box et DropBox. Maintenant, étant donné que la performance exceptionnelle du contenu alimenté par OBS n'a peut-être pas été à la hauteur, voici les étapes à suivre si la Documentation d'InterSytems ne suffit pas. Présentation des étapes : Créez l'application FHIRDrop ou FHIRBox à un point, puis STOP ! (Collaborez et écoutez) Configurez les connexions MFT sur votre serveur FHIR InterSystems, HealthConnect ou I4H. Complétez votre application FHIRDrop ou FHIRBox, en fournissant l'url de redirection de la connexion MFT. Autorisez vos connexions MFT. Créez votre production. Lâchez-la comme si c'était chaud ! Création de l'application FHIRDrop ou FHIRBox L'idée ici est de "démarrer" la configuration de votre application dans chacune des consoles Box et Dropbox Developer, ce qui vous permet de révéler l'identifiant et le secret du client, puis de laisser l'onglet en suspens et de passer aux connexions IRIS MFT. (Collaborez et écoutez)Rassemblez votre identifiant et votre secret client, fermez l'onglet du navigateur et passez à la suite :Configurez la ou les connexions MFT L'URL de base : https://api.box.com/2.0 L'URL de base : https://api.dropboxapi.com/2/ (attention à la barre de fraction de fin) L'enregistrement complet de l'application Maintenant, retournez à l'enregistrement de l'application et complétez l'App.  ; Assurez-vous de brancher l'URL de redirection de l'étape ci-dessus, et ajoutez les paramètres qui ont quelque chose à faire avec file.read, file.write. Autorisation de vos connexions de transfert de fichiers gérées Revenez à vos connexions de transfert de fichiers gérées et "autorisez" vos connexions en invoquant "Get Access Token". Création de votre production Production La source pour les processus opérationnels personnalisés, la production est ici : https://gitlab.com/isc_cloud/fhir-drop-fhir-box-mft-2-fhir Lâchez-la comme si c'était chaud ! Et maintenant, obtenez FHIR ! ![image](/sites/default/files/inline/images/gar.png)
Article
Irène Mykhailova · Juin 5, 2023

Global Summit 2023, le début

Salut la Communauté ! Comme vous le savez, le Global Summit a ouvert ses portes hier soir avec une grande soirée ! Cette année il se passe à Hollywood ensoleillé qui se trouve en Floride. Et il y a beaucoup d'énormes reptiles qui courent partout Mais votre fidèle équipe de la communauté française n'est pas là uniquement pour admirer la nature, mais pour faire de notre mieux pour attirer plus de membres pour notre communauté. On a enfin réunis après une journée bien remplie lors d'une fête en soirée (@Lorenzo.Scalese, @Irène.Mykhailova et @Guillaume.Rongier7183) Et si vous n'avez pas fait attention, sur le signe il y a des dates: 1978 et 2023. Ça signifie, qu'InterSystems a 45 ans cette année ! Bonne aniversaire ! Mais c'est pas tout ! Ce Global Summit et le 30me Summit ! Encore une anniversaire ! Cependant revenons-nous à la communauté. On a notre propre stand au Summit ou on peut se reunir et discuter de choses MISE À JOUR 19H00 C'était une journée très chargée ! Elle a commencé par les keynotes dédié au healthcare réalisés par @Donald.Woodlock. Après les keynotes, tout le monde s'est rendu aux ateliers, réunions et formations qu'ils avaient planifiés pour eux-mêmes. Et le choix était stupéfiant ! Sur le stand de la Communauté de Develppeurs il y avait toujurs qulque'un. Les moderateurs d'autres Communautés regionales sont venus. Par exemple (@Irène.Mykhailova, @Lorenzo.Scalese, @Dmitry.Maslennikov, @Francisco.López1549) : Bien sûr, les sessions du Tech Exchange avaient lieu. Et @Guillaume.Rongier7183 était à côté en train de discuter avec les participants. A la fin de cette journée riche en communications intéressantes et utiles, on a eu un dîner avec des démos de projets et des divertissements C'est tout pour aujourd'hui. A demain !
Article
Irène Mykhailova · Juin 2, 2022

Comment SELECT ... FOR UPDATE peut être utilisé

Étant donné que SELECT ... FOR UPDATE est implémenté dans de nombreux RDBMS en tant que méthode d'acquisition de lock de ligne explicite, vous utilisez probablement cette fonctionnalité dans de nombreux cas. Cette syntaxe n'entraîne pas d'erreur dans les produits InterSystems, mais elle n'acquiert pas les locks de ligne attendus. Cet article vous montrera comment obtenir la même fonctionnalité. DECLARE CURSOR C1 IS SELECT Name FROM Person WHERE Name LIKE 'A%' FOR UPDATE OPEN C1 LOOP FETCH C1 INTO name  ...afficher le nom... ...sortir de loop lorsque vous avez terminé... END LOOP CLOSE C1 L'instruction SQL ci-dessus peut être remplacée par l'instruction SQL suivante. &SQL(START TRANSACTION ISOLATION LEVEL READ COMMITTED) &SQL(UPDATE Person SET ID=ID Where Name like 'A%') &SQL(DECLARE C1 CURSOR FOR SELECT ID,Name into :id,:name FROM Person Where Name like 'A%') &SQL(OPEN C1) &SQL(FETCH C1) While (SQLCODE = 0) { Write id, ": ", name,! &SQL(FETCH C1) } &SQL(CLOSE C1)&SQL(COMMIT) Remarque : &SQL() est appelé Embedded SQL et est une méthode de description qui peut être utilisée lorsque vous souhaitez incorporer des instructions SQL dans la logique côté serveur. Veuillez vous référer au document pour plus de détails.
Article
Irène Mykhailova · Oct 31, 2022

Quelques exemples d'adaptateurs d'interopérabilité FHIR

Bonjour aux développeurs ! Il est possible que vous ayez à mettre en œuvre des scénarios qui ne nécessitent pas de référentiel FHIR, mais qui transmettent des demandes FHIR, gèrent les réponses et, éventuellement, exécutent des transformations ou extraient certaines valeurs entre les deux. Je vous propose ici quelques exemples qui peuvent être mis en œuvre en utilisant les systèmes *InterSystems IRIS For Health* et *HealthShare Health Connect*. Dans les exemples suivants, j'ai utilisé des productions d'interopérabilité avec l'adaptateur d'interopérabilité [FHIR Interoperability Adapter](https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=HXFHIR_fhir_adapter) et les messages `HS.FHIRServer.Interop.Request`. Le premier scénario consiste à créer une demande FHIR à partir de zéro (à partir d'un fichier ou d'une requête SQL), puis à l'envoyer à un service FHIR externe. ![image](/sites/default/files/inline/images/scenario-fhirclient-file-simple.png) Le scénario suivant est une sorte de l'accès direct à FHIR pour les demandes et les réponses à un référentiel FHIR externe, gérant également les jetons OAuth. ![image](/sites/default/files/inline/images/scenario-fhirserver-passthrough.png) Enfin, le dernier scénario consiste à recevoir des demandes FHIR pour les transmettre ensuite à un service FHIR externe, mais en extrayant des informations ou en modifiant certains champs entre les deux. ![image](/sites/default/files/inline/images/scenario-fhirservice-handler.png) Vous trouverez les détails de mise en œuvre dans l'application Open Exchange :) J'espère que cela vous sera utile !