Académique Documents
Professionnel Documents
Culture Documents
0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Interconnexion entre
RapidPro et DHIS2
Etude de faisabilité technique
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Introduction 4
3. Resultats 19
3.1. Exporter les données vers le DHIS2 19
3.1.1. Envoyer des données avec webhook 19
3.1.2. Ajout de données sur DHIS2 par l’application tierce 19
3.1.3. Stockage des données épidémiologiques dans DHIS2 Error! Bookmark not
defined.
3.2. Extraction de données de DHIS2 vers RapidPro 22
3.2.1. Transmission de la requête par le webhook 22
3.2.1. Exécution de la requête dans l’application tierce vers DHIS2 23
3.2.3. Extraction des données DHIS2 via la WebAPI DHIS2 Error! Bookmark not
defined.
3.2.4. Recuperation des donnees DHIS2 sur SMS via RapidPro 26
4. Recommandations 27
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Sigles
Introduction
1.1. DHIS2
DHIS2 (District Health Information Software 2) est une application open source utilisée dans
plus de 51 pays dans le monde, principalement pour la gestion des systèmes d'information
sur la santé. Il s'agit d'une application de serveur client basée sur le Web et elle est
principalement destinée au reporting, à l'analyse et à la diffusion de données pour tous les
programmes de santé. Il s'agit également d'un entrepôt de données partagé et intégré pour
les données essentielles sur la santé. Il s'agit d'une plate-forme assez souple et prend en
charge un large éventail d'utilisations aussi au-delà du secteur de la santé, ce qui signifie
qu'il peut être utilisé à d'autres fins telles que l'éducation, l'agriculture, l'eau et
l'assainissement, etc. DHIS2 n'est pas un produit « clé en main » ce qui veut dire qu’il est
très configurable. Il est convivial, il a une configuration et une personnalisation flexibles pour
une gamme d'organisations et de cas d'utilisation et a évolué au fil des ans afin de répondre
aux demandes de ses différents utilisateurs. Il permet l'innovation distribuée dans un réseau
étendu et permet de nouvelles fonctionnalités via des API et le développement
d'applications. Le logiciel est développé par l'Université d'Oslo et a une forte communauté de
développeurs et d'utilisateurs. Il est utilisé par divers pays africains dont le Sénégal et des
organisations comme PEPFAR, PSI, MSF, etc.
Pour héberger une instance DHIS2, nous avons trois options possibles :
● L'hébergement sur un serveur physique localement ;
● L'hébergement dans le cloud.
Le Sénégal utilise la technologie DHIS2 depuis 2014 comme plateforme de gestion des
données sanitaires nationales. Cette plateforme est fonctionnelle dans tous les 76 districts
du pays. Elle est à la version 2.24.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
1.2. RapidPro
Ainsi, à travers des messages simples et intelligents, RapidPro fournit aujourd’hui des
services digitaux en matière de santé tant dans la coordination aux crises sanitaire, le suivi
épidémiologique, la surveillance de la malnutrition, l’accompagnement les femmes durant
leur grossesse et durant le jeune âge de leur enfant ou encore l'accélération de la prise en
charge de maladies transmissibles. Fonctionnant sur près de 15 pays dont le Sénégal,
RapidPro représente une opportunité d'améliorer la transmission d’information sanitaire et
de l’Etat Civil ainsi qu’assurer le suivi des patients. Fonctionnant avec une grande flexibilité
de développement, RapidPro offre également un potentiel important pour répondre aux
futurs besoins du Ministère de la Santé et de l’Action Sociale et de ses partenaires.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Pour permettre ces échanges de données entre DHIS2 et RapidPro, nous nous sommes
basés sur ce modèle d’interconnexion s’articulant autour de :
● Application tierce : faire un “pont” entre les webhooks de RapidPro et la WebAPI de
DHIS2 ;
● RapidPro : possibilité d’envoyer et de recevoir des données via téléphone vers
l’application tierce en utilisant la fonction webhook ;
● DHIS2 : Réception et stockage des données pour la visualisation des informations ;
● Métadonnées
Données Données
envoyée ou envoyées ou
reçue via le reçues via le
2.2.1. Objectifs
Dans le but de moderniser le système d'État Civil, le Centre National d’État-Civil a initié une
démarche visant d’une part, à mettre en place un système d’information pour la gestion des
faits d'État-Civil (Système HERA) et d’autre part, accélérer la remontée d’information et
l'échange entre les agents de l’État-Civil et ceux du secteur santé (RapidPro État-Civil).
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Objectifs :
1) Transmettre annuellement aux agents d'État Civil et au système RapidPro Etat-Civil,
le nombre de naissances attendues par commune (agrégation des centres de santé
par commune) à partir des données de projection de la DSIS/DHIS2 ;
2) A partir d’un flux de messages destinés aux agents de Santé, transmettre le nombre
de naissances/décès observées en structure et à domicile connus ;
3) Capturer au sein de DHIS2 le nombre de naissances et de décès par sexe et centre
de santé ;
4) A partir d’un flux de messages adressés aux agent de l'État-Civil, transmettre le
nombre de déclaration de naissance, de décès et de mariage au CNEC et l'État-Civil.
Le Webhook est un module qui offre de nombreuses possibilités pour étendre les
fonctionnalités d'un site web ou d’une application web. L'idée est simple : quand quelque
chose de particulier se passe sur notre application, on envoie une requête HTTP avec le
verbe POST vers une URL donnée. Le webhook sert donc à notifier des scripts externes à
une application web qu'un événement a eu lieu. Ainsi, dans notre cas, lorsqu’un flux sms
intègre la fonction webhook, celui-ci redirige les informations contenues dans le flux de
messages vers une base de données externe à RapidPro.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Exemple :
http://51.255.36.50/rdhis/index_get.php?site=@contact.nom_du_centre&commune=@conta
ct.commune&district=@contact.district_sanitaire®ion=@contact.region&periode=@date.t
oday
Descriptif de l’url :
● [URL_Serveur] : adresse url du serveur ou se trouve le script d’interprétation des
données;
● [Localisation_Script] : répertoire du serveur ou se trouve le script d’interprétation des
données ;
● [Fichier_Script] : Nom du fichier php permettant d'interpréter les données transmises
par le webhook (ne pas oublier l’extension .php) ;
● [Variable_exterieur1] : Nom de la variable utilisée dans votre script php;
● [VariableRapidPro1] : Nom de la variable utilisée dans le flux RapidPro. Utiliser la
syntaxe RapidPro (@flow.nom_variable ou @contact.nom_variable).
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Pour tester les fonctionnalités, nous avons mis en place une instance staging dans DHIS2
Sénégal afin de ne pas impacter la version production du DHIS2.
Tout d’abord, afin de restreindre les droits d'écriture sur DHIS2, nous avons créé un
utilisateur unique permettant ainsi à l’application d’interagir avec la base de données DHIS2.
Les droits de cet utilisateur seront ainsi :
● Ajouter des données ;
● Suppression de données.
Afin de paramétrer le stockage des données transmises par RapidPro, nous devons :
1. Créer les éléments de données contenant l’ensemble des variables que nous
voulons collecter par RapidPro.
2. Créer le formulaire :
a. Lister ces éléments
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Formulaire créé dans DHIS2 pour collecter les données Etat Civil
Arrondissement - - Non
Ainsi compte tenu de l’organisation actuelle des données, l'interopérabilité actuelle ne peut
se faire qu’au niveau régional ce qui est insuffisant pour permettre une prise de décision
adéquat tant dans le secteur Santé que dans le secteur Etat Civil.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Cette méthode presentera des biais notamment sur le fait que des enfants peuvent naître
dans un centre de santé différent de leur commune d’origine. Cependant, étant donné que le
lieu de naissance est juridiquement le lieu de la déclaration. De plus, ceci permettra le degré
d'attractivité des unités sanitaires dans leur communauté également de rendre possible
l'intégration de données socio-économiques fournies par l’ANSD.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Pour interconnecter l’application RapidPro et DHIS2, nous avons mis en place une
application tierce qui se chargera de traiter les informations reçues de RapidPro, les
transformer sous le format d’importation vers le DHIS2. Cette application tierce est
développée sous PHP avec une connexion à un serveur de base de donnée sous MySQL.
● site_mapping pour définir les correspondances entre les sites rapidpro et les unité
d’organisation de DHIS2.
● dataset_values pour la sauvegarde des données de RapidPro sur une base externe
autre que DHIS2 (optionnel).
Les scripts sont écrits sous le langage PHP et se basent sur la technologie cURL et le
WebAPI pour l’extraire ou envoyer les données au DHIS2.
a. Paramètre de connexion
Dans le script, nous faisons appel à un utilisateur qui nous permet de nous connecter
au serveur dhis2. Cet utilisateur doit avoir le moins de droits possibles. Nous
pouvons juste utiliser l’utilisateur rpro précédemment créé qui n’a le droit que
d’ajouter ou de modifier les valeurs.
Script de connexion
<?php
// DHIS2 url et credentials
$dhisUrl = “http://<server>:8080/dhis”;
$dhisUser = “rpro”;
$dhisPass= “xxxx”;
b. WebAPI DHIS2
Par exemple pour accéder à la liste des unités d’organisations sur DHIS2 via le
webAPI, il suffit d’ajouter /api/organisationUnits/ à l’URL de la plateforme.
c. cURL
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
d. Matching métadonnées
Pour garantir la cohérence des données DHIS2 avec RapidPro, il est nécessaire de
procéder à un matching des données notamment sur la nomenclature des structures
de santé.
Par exemple, des noms des sites de collectes des données diffèrent (Poste de santé
Thiara dans RapidPro et PS Thiara dans DHIS2) mais désigne le même lieu de
collecte. Dans ce cas, nous avons besoin de prédéfinir une table de correspondance
(site_mapping).
Dans le script, nous exécutons une requête SQL qui récupère la valeur DHIS2
correspondante à celle où l’information a été collectée avant que les données ne
soient envoyées au DHIS2.
$sql->setFetchMode(PDO::FETCH_OBJ);
while ($reponse = $sql->fetch())
{
$orgunit= $reponse->dhis_org_uid;
}
$sql->closeCursor();
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
3. Resultats
● Créer une série questions / réponses pour collecter les données et les déclarer dans
des variables temporaires de type @flow.fille_structure;
● Ajouter un webhook utilisant la fonction POST afin de transférer les données ;
● Ajouter dans l’URL du webhook, l’adresse du serveur externe ou se situe
l’application tierce et les variables que l’on souhaite transférer sous la syntaxe
suivante :
Exemple d’URL transférée par le webhook
http://51.255.36.50/rdhis/index_etatcivil.php?param1=@flow.garcon_structu
re¶m2=@flow.fille_structure¶m3=@flow.fille_domicile_vue¶m4=@f
low.garcon_domicile_vue¶m5=@flow.decesf_structure¶m6=@flow.deces_
h¶m7=@flow.decesf_hors_structure¶m8=@flow.decesm_hors_structure&s
ite=@contact.nom_du_centre&commune=@contact.commune&district=@contact.dis
trict_sanitaire®ion=@contact.region&periode=@date.today
Ainsi, à la fin du flux, l’action webhook récupère les valeurs relatives à certaines variables
puis l’envoie à l’URL de l’application tierce ou sera faite le traitement de ces informations.
L’objectif de ce script est de pouvoir transférer les données de RapidPro vers DHIS2. Dans
cette étude, nous sommes basés sur les données agrégées. Ce script nécessite :
➔ config.php : contenant les éléments de connexion à la base de données MySQL et
au DHIS2
➔ rpro_dhis_as.php contenant le corps du traitement des données (récupération des
données, maching des métadonnées , transformation et envoi des données au
DHIS2).
Nous récupérons les données en faisant du GET sur les variables contenues dans
l’URL Webhook comme illustré sur l’image suivante :
$filleStructure = $_GET["param1"];
$garconStructure = $_GET["param2"];
$filleDomicileVue = $_GET["param3"];
$garconDomicileVue = $_GET["param4"];
$decesFilleStructure = $_GET["param5"];
$deceGarconStructure = $_GET["param6"];
$decesFilleHorsStructure = $_GET["param7"];
$decesGarconHorsStructure = $_GET["param8"];
$site = $_GET[“site”];
$commune = $_GET[“commune”];
$district = $_GET[“district”];
$region = $_GET[“region”];
$periode = $_GET[“periode”];
// Fin de récupération
Pour s’assurer d’envoyer les données au bon site dans DHIS2, nous faisons un
contrôle de correspondance du site RapidPro d’où la donnée a été collectée par
rapport à celle qui doit recevoir la donnée dans DHIS2. Nous exécutons cette requête
SQL suivant qui recherche dans la table site_mapping la correspondance puis
renvoie l’identifiant du site concernée.
En exécutant les flux de rapportage mensuel de RapidPro Etat Civil adresses aux agents de
Santé et de l'État Civil, RapidPro appelle les fonctions de l’application tierce pour stocker les
données dans DHIS2.
L’objectif de cette fonction est de pouvoir transférer les données de DHIS2 vers RapidPro.
Pour ce faire, nous voulons qu’un agent d’Etat Civil puisse recevoir le nombre de naissances
attendues au cours d’une période (exemple le mois en cours) pour la commune de cet agent
via RapidPro.
Dans ce cas de figure, la donnée se trouve déjà dans le DHIS2. Nous allons donc exécuter
un script pour récupérer cette information.
A partir d’un flux RapidPro nous allons procéder à la transmission d’une requête pour
interroger la base de données DHIS2. Le flux sera envoyé périodiquement aux agents d'État
Civil afin qu’ils reçoivent l’information.
● Le flux sera initie par une campagne basée sur la date du dernier rapport.
Ainsi, à la fin du flux, RapidPro appelle la donnees transmise par le Webhook en réponse à
la requête. Nous pouvons alors afficher le nombre de naissance attendues pour la période.
Flux RapidPro pour récupérer les valeurs DHIS2
Pour exécuter l’application tierce, nous avons besoin des scripts suivant :
➔ config.php : contenant les éléments de connexion à la base de données Mysql et au
DHIS2
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Pour extraire les données du DHIS2, nous avons besoin de traduire la requête
envoyée par RapidPro avec les variables DHIS2. Pour cela, il faut déclarer les
variables qui permettront de faire la selection des donnees :
$naissanceAttendues = $_GET["param1"];
$site = $_GET[“site”];
$commune = $_GET[“commune”];
$district = $_GET[“district”];
$region = $_GET[“region”];
$periode = $_GET[“periode”];
// Fin de récupération
Afin d’associer les données des structures de santé au centre d'État Civil, nous
avons besoin de récupérer tous les identifiants DHIS2 (dhis_org_uid) des structures
qui sont rattachées géographiquement à la même commune que le centre d’Etat Civil
envoyant la requête. Ceci nous permettra de cumuler les valeurs du DHIS2 par
centre d’Etat Civil.
Maintenant que nous avons extrait les données de DHIS2, il faudra préparer la
réponse que le webhook va transmettre à RapidPro. Pour ce faire nous avons besoin
que l’application tierce envoie en sortie une réponse formatée en JSON avec le nom
de variable correspondant à celle présente dans le flux RapidPro et sa valeur. Dans
notre cas d’utilisation , nous avons défini dans l’application tiers que le nom variable
à envoyer e
Dans le flux RapidPro, après la fonction WebHook, nous envoyons un message à l’initiateur
du flux afin de lui transmettre le résultat de sa requête. Pour appeler la valeur retournée par
le WebHook, nous appelons cette variable par la syntaxe @extra.naiss_attend.
4. Recommandations
Prochaines étapes :
Au niveau de Rapidpro :
● Ajouter un champs Uid aux niveaux des sites de collectes dans rapidpro pour
ignorer l’étape matching des sites de collectes
● Recommandation : utiliser ce script dès l’enregistrement de contacts dans
RapidPro afin d’obtenir la même nomenclature dans RapidPro et DHIS2.
Au niveau de DHIS2 :
● Ajouter si possible un attribut commune au niveau des unités d’organisation