BC 40616 B 31 F 40 Aeaefa 3
BC 40616 B 31 F 40 Aeaefa 3
BC 40616 B 31 F 40 Aeaefa 3
Rapport
d’activité
CHU de Toulouse
Emma Dupuy
Table des matières
Table des matières 1
Remerciements 2
Présentation de l’entreprise 3
Organisation de l’entreprise 6
Conclusion 22
Annexes 23
Annexe 1 : Activité 2 : Cahier de recettes 23
Annexe 1 : Activité 2 : Modification de la requête SQL 24
Annexe 1 : Activité 2 : Récupération du NIR 25
Annexe 2 : Activité 3 : Paramétrage des threads 26
Annexe 2 : Activité 3 : Premiers tests du flux 28
Annexe 2 : Activité 3 : Paramétrage de la connexion FTP 30
Annexe 2 : Activité 3 : Paramétrage et test du timer 31
Annexe 2 : Activité 3 : Mise en place des alertes et tests 32
Annexe 2 : Activité 3 : Ajout de la fonction noDeletionAfterFTP 34
Annexe 2 : Activité 3 : Création d’une box et copie sur le serveur de production 35
1
Remerciements
Avant toute chose, je tiens à remercier toutes les personnes qui ont
permis la réussite de mon stage.
Je souhaite également remercier Christian COUDER, pour le temps qu’il
m’a accordé, les conseils donnés, le travail qu’il m’a aidé à faire, et Sylvie
FELLOUS, pour m’avoir accueillie dans son service et pour sa participation
à la réussite de mon stage.
Enfin, je remercie l’ensemble des équipes informatiques que j’ai pu
rencontrer au CHU et avec lesquelles j’ai travaillé et échangé tout le long
de mon stage.
2
Présentation de l’entreprise
Logo de l’entreprise :
Le Centre Hospitalier Universitaire de Toulouse est constitué de plusieurs établissements
hospitaliers :
● hôpital La Grave ● hôpital de psychiatrie
● hôpital Purpan ● hôpital des enfants
● hôpital Pierre-Paul Riquet ● hôpital Paule de Viguier
● bâtiment URM ● hôpital Rangueil
(Urgences-Réanimation-Médecine) ● hôpital Larrey
● hôpital Garonne ● La Fontaine Salée
Ces établissements sont répartis sur quatre sites géographiques :
Le CHU de Toulouse est classé meilleur hôpital de France en 2018 par le magazine Le Point.
3
4
C’est dans cette établissement que j’ai effectué mon stage. J’ai évolué au sein de la section
interopérabilité de la DSIO (Direction des systèmes d'information et organisation).
L’équipe interopérabilité est chargée de s’occuper de la mise en oeuvre et du développement
de flux interapplicatifs, ainsi que de leur maintenance afin d’assurer la communication des
informations entre les différentes applications utilisées au CHU.
5
Organisation de l’entreprise
Le CHU s’organise de la façon suivante :
La DSIO :
6
Voici la composition du service que j’ai pu intégrer :
7
Les Activités réalisées
Activité 1
Titre : Découverte de l’EAI Cloverleaf
EAI signifie Enterprise Application Integration (intégration d’applications d’entreprise). c’est une
architecture intergicielle permettant à des applications hétérogènes de gérer leurs échanges.
Cloverleaf est une plateforme d’intégration conçue pour répondre spécifiquement aux enjeux de
l’intégration de systèmes dans le secteur de la santé.
● router des messages applicatifs, en assurant une compatibilité de format et de protocole
entre les différentes composantes internes et externes du SIH (Système d'Information
Hospitalier),
● transformer des messages non normalisés en messages reposant sur les standards en
vigueur dans le monde de la santé,
● mettre à disposition des outils facilitant la mise en œuvre (construction ou adaptation des
flux), le monitoring temps réel (processus de reprise sur erreur, de gestion des exceptions
et des alertes) et l’administration préventive de la solution.
J’ai donc été formée à l’utilisation de cet EAI et de ses principales fonctionnalités afin de pouvoir
travailler avec l’équipe interopérabilité.
8
Au CHU, les flux sont répartis sur plusieurs serveurs (serveur de test, serveur de prod) et sur
différents sites.
Un flux est composé au minimum de deux threads et d’une route :
Une route permet de lier un thread avec un autre. Un thread peut avoir plusieurs routes.
9
Voici à quoi peut ressembler un site :
10
Activité 2
Titre : Recette du flux rejet mutuelle
Autre exemple, il y avait un problème de récupération du NIR (N°Insee) entre la base de
données de l’application pastel, qui recense les patients, et un fichier CSV qui recense les
données des mutuelles. En effet, lorsque le NIR existe dans Pastel, il doit être récupéré depuis
la base Pastel pour être inséré dans la base MUTUELLE_REJETS, sinon, il est récupéré depuis
le fichier CSV. (Annexe 1 : Activité 2 : Récupération du NIR)
11
Activité 3
Titre : Création du flux PESLAR2 pour WINGET et mise en production
1 - Création du flux
Le but de ce flux est de s’assurer du transport des fichiers TITRES issus de la facturation :
Pour commencer, j’ai tout d’abord créé un répertoire d’entrée et trois répertoires de sortie en
local afin de commencer ce flux.
Ensuite, j’ai créé quatre threads, un pour l’entrée et trois pour la sortie, que j’ai paramétré afin
de permettre le transfert de fichiers d’un répertoire à l’autre. Les fichiers sont également triés
en fonction de leur nommage.
Il a fallu par la suite effectuer des tests pour vérifier le bon fonctionnement du flux. On teste
donc si les fichiers sont bien filtrés par leur nom et si ils sont bien transférés du dossier
d’entrée vers les dossiers de sortie.
Comme tout fonctionne après les tests, on peut ensuite changer les répertoires locaux vers
les répertoires de test. La connexion à ces répertoires sera faite via FTP.
Il faut donc paramétrer la connexion des threads aux répertoires via Cloverleaf.
Je mets ensuite en place un timer afin de répondre au cahier des charges qui demande à ce
que le flux soit lancé du lundi au vendredi, à 18h30, puis je le teste.
Puisque tout fonctionne, il faut ensuite mettre en place des alertes afin de signaler si l’un des
threads est arrêté ou si aucune donnée n’a été reçue depuis X temps. On teste ensuite ces
alertes pour vérifier qu'elles se déclenchent bien.
12
(Voir Annexe 2 : Activité 3 : Mise en place des alertes et tests)
J’ajoute également une fonction qui permet de ne pas supprimer les fichiers après le ftp.
Enfin, on reteste l’ensemble du flux avec l'ensemble des éléments pour vérifier que tout
fonctionne ensemble.
2 - Mise en production
Afin de mettre ce flux en production, il faut le migrer du serveur de test vers le serveur de
production. Pour cela, on crée une box. La box est un système de sauvegarde et d’import
d’une configuration de Cloverleaf.
Pour finir, après avoir créé la box, il faut la copier sur le serveur de production via WinSCP.
(Voir Annexe 2 : Activité 3 : Création d’une box et copie sur le serveur de production)
13
Activité 4
Titre : Cartographie des flux
Afin d’avoir une vision de l’ensemble des flux du CHU, mon tuteur m’a demandé de réaliser une
cartographie de ceux-ci. Les flux sont répertoriés dans un fichier Excel.
J’ai donc fait des recherches afin de mettre en place cette cartographie.
14
Avec un serveur http, nous pouvons ouvrir le fichier index.html (j’ai utilisé EasyPhp).
Une fois la page ouverte, il faut appuyer sur la touche F12 pour afficher le code de la page,
aller dans Console, puis rafraîchir la page :
15
Les données du fichier Test.xlsx sont transformées en données Json. Je ne sais pas
comment les utiliser par la suite.
16
2.Cartographie avec D3.js
Comme je n’arrivais pas à utiliser les données générées en Json, j’ai tapé un CSV à la main
pour faire comme dans ma source principale :
https://beta.observablehq.com/@mbostock/d3-radial-dendrogram
Le fichier CSV est écrit de façon à ce que le code reconnaisse les noeux parents et enfants
afin de bien apparaître lors de l'affichage. A partir du mot “flux” qui est le point de départ,
chaque nouveau mot séparé d’un “.” va créer une nouvelle ramification.
Avec un serveur http, nous pouvons ouvrir le fichier index.html (j’utilise EasyPhp).
17
Cela donne un arbre comme ceci :
Autres sources :
● Introduction à D3.js : https://d3js.org/#introduction
● Collapsible Tree (on clique sur les points foncés pour réduire ou agrandir)
○ https://beta.observablehq.com/@mbostock/d3-tidy-treefdf
● Tidy Tree (arbre déjà grand)
○ https://beta.observablehq.com/@mbostock/d3-tidy-treef
● Radial Tidy Tree (en cercle)
○ https://beta.observablehq.com/@mbostock/d3-radial-tidy-tree
○ https://gist.github.com/mbostock/4063550
○ https://bl.ocks.org/FrissAnalytics/974dc299c5bc79cc5fd7ee9fa1b0b366
18
Activité 5
Titre : Veille technologique sur la norme HL7 CDA R2
Health Level-7 ou HL7 renvoie à un ensemble de normes internationales pour le transfert de
données cliniques et administratives entre les applications logicielles utilisées par divers
fournisseurs de soins de santé. Ces normes se concentrent sur la couche d’application, qui
est la couche 7 dans le modèle OSI.
Modèle OSI
Un document CDA est défini comme une entité documentaire complète et autonome
(utilisable indépendamment de tout message).
Il doit pouvoir être consulté sans autre opération que d’utiliser une feuille de style.
Un document CDA s’appuie sur une syntaxe XML et doit être valide au regard du schéma
CDA.xsd, et conforme aux schématrons du volet concerné.
19
L'en-tête fournit le contexte destiné à être affiché au lecteur du document :
● Les personnes impliquées dans la réalisation du document (patients, auteurs,
rédacteurs, signataires, approbateurs, participants, destinataires...),
● Le type d'événement ayant motivé la création du document,
● Les caractéristiques du document (genre, titre, date de création, etc.),
● Les notions de sécurité (niveau de confidentialité),
● Une partie des données de l’en-tête alimente les métadonnées qui indexent le
document dans un système de partage ou d’échange.
L’en-tête est obligatoire pour tout document CDA et est toujours structuré.
Le corps présente les données médicales proprement dites. Son degré de structuration peut
varier en fonction des besoins. Le standard CDA R2 définit trois niveaux possibles de
structuration pour le corps du document :
Niveau 1 : document non structuré, c’est à dire qu’il contient autre chose que du XML (PDF,
TXT, Image)
Niveau 2 : document XML structuré pour le lecteur hiérarchisé en sections. A l’intérieur des
sections, le texte figure dans un bloc <text>, qui peut être organisé à l’aide de structures telles
que paragraphes, tableaux, notes, figures, références... Les sections annoncent leur contenu à
l’aide d’un code de section associé à un libellé et optionnellement à un titre. Les sections
peuvent si nécessaire s’emboiter les unes dans les autres.
Niveau 3 : document XML structuré pour le lecteur et pour le SIS (Système d’Information de
Santé) constitué de sections et d’entrées CDA. Le corps est organisé comme pour le niveau 2.
La différence ici est que chaque section peut comporter un ou plusieurs blocs (appelés
entrées ou entries) embarquant les données du SIS producteur dont dérive le texte de la
section. La vocation d’un bloc est de fournir le contenu sous une forme codée et structurée,
importable et intégrable dans la base de données du SIS du professionnel de santé qui
consulte le document.
20
Une entrée sera composée de:
sources :
● https://esante.gouv.fr/sites/default/files/media_entity/documents/CI-SIS_CONTENU_VOLET-M
ODELES-CONTENUS-CDA_20181227_V2.0.pdf
● http://www.interopsante.org/offres/file_inline_src/412/412_P_15660_1.pdf
● http://www.interopsante.org/offres/doc_inline_src/412/5_JDR_IS_Biologie.pdf
● https://docplayer.fr/12899222-Normalisation-dans-le-contexte-d-ihe-hl7-cda-et-dmp.html
● https://solidarites-sante.gouv.fr/fichiers/bo/2017/17-12/ste_20170012_0000_0094.pdf
● https://drive.google.com/open?id=10YnBFiCGkRBzfKTXLKq8S82B0o0PMThz
21
Conclusion
Avec ce stage, j’ai pu découvrir l’interopérabilité dans le milieu hospitalier et élargir mes
horizons sur l’importance de l’informatique et de son utilisation dans ce milieu.
J’ai gagné en autonomie et j’ai pu découvrir un nouveau logiciel. J’ai pu approcher d’autres
aspects de l’informatique qui ne sont pas au programme du BTS.
L’équipe qui m’a accueillie et les différentes activités réalisées m’ont permis de préciser mon
projet professionnel ainsi que mon projet de formation.
22
Annexes
23
Annexe 1 : Activité 2 : Modification de la requête SQL
24
Annexe 1 : Activité 2 : Récupération du NIR
Récupération du NIR depuis la table pastel
Récupération du NIR depuis le fichier CSV
25
Annexe 2 : Activité 3 : Paramétrage des threads
Pour le thread d’entrée, on indique dans le champs “Directory” le répertoire de récupération
des fichiers.
Toujours en entrée, on paramètre le champs “directory parse” afin d’ajouter une fonction qui
permet de filtrer les fichiers d'entrée en fonction de leur nom.
PATTERN => obligatoire, définit le nommage des fichiers à prélever
ACK => facultatif, ordonne le prélèvement des fichiers seulement si un fichier témoin est
présent (il n’y en a pas ici)
Explications du nommage : ^PESALR2-.*CTRESORERIE.*\.[xX][mM][lL]$
^ indique un début de ligne
PESALR2- correspond aux caractères PESALR2- littéralement (sensible à la casse)
.* prend en compte n’importe quel caractère (sauf les terminateurs de lignes)
CTRESORERIE correspond aux caractères CTRESORERIE littéralement (sensible à la casse)
.* prend en compte n’importe quel caractère (sauf les terminateurs de lignes)
\. correspond au caractère .
[xX] correspond à l’un des caractères de la liste (x OU X)
[mM] correspond à l’un des caractères de la liste (m OU M)
[lL] correspond à l’un des caractères de la liste (l OU L)
$ indique une fin de ligne
26
Sur le thread de sortie, on renseignent le répertoire de sortie du fichier.
27
Annexe 2 : Activité 3 : Premiers tests du flux
On teste la fonction de nommage avec des fichiers nommés :
● ffPESALR2-7CTRESORERIE7.xml
● PESALR2-77CTRESORERIE77.xml
● PESALR2-CTRESORERIE55plj.xml
● PESALR2-hghrfCTRESOERIE.xml
● PESALR2-testCTRESORERIEouioui.XML
● PESALR2-testCTRESORERIEtest.xMl
On démarre ensuite le flux
A la fin du process, il ne reste que 2 fichiers qui ne sont pas passés (1) :
La fonction de nommage fonctionne donc bien puisque les autres fichiers sont passés (2).
28
(1)
(2)
29
Annexe 2 : Activité 3 : Paramétrage de la connexion FTP
30
Annexe 2 : Activité 3 : Paramétrage et test du timer
Pour tester le timer, on met les fichiers dans le dossier d’entrée et on vérifie que le transfert se
fait bien à l’heure indiquée.
31
Annexe 2 : Activité 3 : Mise en place des alertes et tests
L’alerte (1) envoie un mail (2) pour prévenir que le thread est arrêté depuis x temps (ici 1sec)
et envoie également une notification (3) sur cloverleaf.
(1)
(2)
32
(3)
33
Annexe 2 : Activité 3 : Ajout de la fonction noDeletionAfterFTP
34
Annexe 2 : Activité 3 : Création d’une box et copie sur le serveur
de production
Pour créer une box il faut sélectionner le flux puis faire clic droit et sélectionner “Create
<BOX…”
On rentre ensuite les informations de la box.
35
La box est ensuite copiée sur le serveur de production pour déployer le flux.
36