BC 40616 B 31 F 40 Aeaefa 3

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 37

 

 
 
 
 
  
 
 

 
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 

Les Activités réalisées 8 


Activité 1 8 
Activité 2 11 
Activité 3 12 
Activité 4 14 
1.Récupérer les données du document Excel en JSON 14 
2.Cartographie avec D3.js 17 
Activité 5 19 

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  remercie  vivement  mon  tuteur  de  stage,  Mathieu BOURQUIN, pour son 


accueil  et  le  temps  qu’il  m’a  accordé  pour  m’accompagner  lors  de  cette 
expérience professionnelle. 

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 :  

● Hôtel-Dieu Saint-Jacques/La Grave 


● Purpan 
● Rangueil-Larrey  
● La Fontaine Salée 

Les  deux  principaux  sites  géographiques  sont  le  site  hospitalier de Purpan (Toulouse nord) et 


le site hospitalier de Rangueil-Larrey (Toulouse sud). 

Le CHU de Toulouse est classé meilleur hôpital de France en 2018 par le magazine Le Point. 

Chaque  année,  plus  de  3  900  médecins  et  11 600 personnels hospitaliers accueillent 280 000 


malades et 820 000 consultants. 

Le centre administratif du CHU de Toulouse est situé à Hôtel-Dieu Saint-Jacques. 

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 

Environnement technique :​ 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é.  

Cet EAI permet de : 

● 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 :  

Un thread représente l'exécution d'une ou plusieurs instructions 

Une route permet de lier un thread avec un autre. Un thread peut avoir plusieurs routes. 

   

9
Voici à quoi peut ressembler un site : 

Les paramètres des threads peuvent être modifiés dans le NetConfig : 

10
Activité 2  
Titre  :​ Recette du flux rejet mutuelle 

Environnement technique  :​ Cloverleaf, DBeaver 

J’ai  pu  dans  cette  activité  participer  à  des  réunions afin de mettre en place la recette d’un flux 


qui  permet  de  récupérer  des  données  auprès  des  mutuelles  et  de les importer dans une base 
de  données.  Une  recette  (ou  test  d'acceptation)  est  une phase de développement des projets, 
visant à assurer formellement que le produit est conforme aux spécifications (réponse donnée 
à un instant « t » aux attentes formulées). 

(voir Annexe 1 : Activité 2 : Cahier de recette) 

Suite à ces réunions, plusieurs choses ont dû être corrigées. 

Par  exemple,  lors  de l'insertion des lignes dans la base de donnée, il en manquait 6 à cause du 


format  du champ ETABLISSEMENT qui ne prenait que 30 caractères. Il a donc fallu modifier la 
requête SQL afin de couper les noms d’établissement trop long.  

(Annexe 1 : Activité 2 : Modification de la requête SQL). 

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 

Environnement technique :​ Cloverleaf, WinSCP, cahier des charges 

1 - Création du flux 
Le but de ce flux est de s’assurer du transport des fichiers TITRES issus de la facturation :  

● Vers le serveur WINGET 


● Copie des fichiers sur le « quai » EAI 
● Dépôt des fichiers sur un répertoire de sauvegarde 

J’ai du suivre un cahier des charges afin de réaliser cette activité. 

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. 

(Voir Annexe 2 : Activité 3 : Paramétrage des threads) 

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. 

(Voir Annexe 2 : Activité 3 : Premiers tests du flux) 

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. 

(Voir Annexe 2 : Activité 3 :Paramétrage de la connexion FTP) 

On effectue ensuite des tests afin de vérifier que tout fonctionne.  

(Voir Annexe 2 : Activité 3 : Tests de la connexion FTP) 

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. 

(Voir Annexe 2 : Activité 3 : Paramétrage et test du timer) 

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. 

(Voir Annexe 2 : Activité 3 : Ajout de la fonction noDeletionAfterFTP 

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 

Environnement technique :​ javascript, D3.js, Visual Code, navigateurs, EasyPHP 

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. 

1.Récupérer les données du document Excel en JSON 


J’ai utilisé cette source pour convertir les données :  
https://myclassbook.org/convert-excel-json-using-javascript-code/ 
 
Les fichiers sont dans le dossier : xls_vers_json 
(​https://drive.google.com/open?id=1S_jNvZQGzIuCMZJSU1gccLmV796hG6Es​) 
 
On met le chemin de notre fichier index.html ligne 13 

 
 

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 

Les fichiers sont dans le dossier : D3.js 


(​https://drive.google.com/open?id=1gsUXKiwPlIAxeUYCUU3cK089FKaNN8Jn​) 

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. 

  

Je mets ligne 47 du fichier index.html le nom de mon fichier csv. 

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-tree​fdf 
● Tidy Tree (arbre déjà grand) 
○ https://beta.observablehq.com/@mbostock/d3-tidy-tree​f 
● 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 

Environnement technique :​ Navigateur 

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 

CDA R2 est un standard défini par HL7. 

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é. 

Tout document CDA possède un en-tête et un corps. 

   

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: 

Référence de système de codage utilisé 


Exemple: codeSystem = "2.16.840.1.113883.6.1“ 
Nom du système de codage 
Exemple: codeSystemName= "CISP“ (section “Problèmes ou Antécédents) 
Code 
Exemple: code="HNN.8“ 
Libellé de l'entrée 
Exemple: displayName= "Méningite Bactérienne“ 

 
 
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  

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 
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) : 

● ffPESALR2-7CTRESORERIE7.xml  =>  la  chaine  commence  par  autre  chose  que 


PESALR2- 
● PESALR2-hghrfCTRESOERIE.xml  =>  il  manque  des  caractères  (R  et  E)  dans 
TRESORERIE  

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

Vous aimerez peut-être aussi