Vous êtes sur la page 1sur 27

Interconnexion entre RapidPro et DHIS2 Version: 1.

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

Table des matières

Table des matières 2

Sigles Error! Bookmark not defined.

Introduction 4

1. Revue des technologies et des applications 5


1.1. DHIS2 5
1.2. RapidPro 6

2. Dispositif d'interopérabilité entre DHIS2 et RapidPro 8


2.1. Modèle de transfert de données 8
2.2. RapidPro Etat Civil 8
2.2.1. Objectifs 8
2.1.2. Utilisation des webhooks 10
2.3. Configuration de DHIS2 Error! Bookmark not defined.
2.4. Configuration de l’Application tierce 15
2.4.1. Spécifications techniques requises 15
2.4.2. Configuration de la base de données 15
2.4.4. Préparation de l’application tierce 17

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

API Application Programming Interface

CNEC Centre National d’Etat Civil

CURL Client URL Request Library

DHIS2 District Health Information Software

DSIS Division de la Statistique et de l’Information Sanitaire

HTTP HyperText Transfer Protocol

MGDAT Ministère de la Gouvernance et de l'Aménagement du Territoire

MSAS Ministère de la Santé et de l’Action Sociale

MSF Medecin Sans Frontiere

MySQL My Structured Query Language

PEPFAR President's Emergency Plan for AIDS Relief

PHP PHP: Hypertext Preprocessor

PSI Population Services International

SMS Short Message Service

UNICEF United Nations Children’s Fund

URL Uniform Resource Locator

USSD Unstructured Supplementary Service Data


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

Introduction

Engagé depuis 2014 dans un processus de digitalisation de l’information sanitaire, le


Ministère de la Santé et de l’Action Sociale (MSAS) a mis en place une plateforme
technologique Open Source, DHIS2 (www.dhis2.org) , pour soutenir son système
d’information sanitaire. En 2016, cet outil de suivi a été officiellement lancé au niveau des 14
régions du Sénégal permettant ainsi la remontée d'information depuis les centres de Santé
jusqu’au niveau central.

Sur la base de ce déploiement technologique et dans un soucis d'accroître l’utilisation et la


performance du DHIS2, le MSAS avec l’appui de l'Université d’Oslo et de l'UNICEF ont
identifié la RapidPro, plateforme d'échanges de données par SMS pour :

● d’une part, d'accroître le niveau de digitalisation de l’information sanitaire au niveau


le plus décentralisé et ;
● d’autre part, de permettre l'échange d’information sanitaire avec des services
techniques de l’Etat tel que l'État Civil.
S’appuyant sur les initiatives portees par le Centre d'Opération d’Urgences Sanitaires et du
Centre National d’Etat Civil qui disposent chacun d’une application RapidPro dédiée, la
Direction de l’Information Sanitaire a donc mené une étude de faisabilité technique
d’interconnexion entre DHIS2 et RapidPro autour de trois objectifs :

1. Décrire les technologies RapidPro et DHIS2 ;


2. Décrire le dispositif d'interopérabilité ;
3. Collecter des données avec RapidPro et transférer au DHIS2 depuis les structures
de santé et les centres d’Etat Civil ;
4. Interroger depuis RapidPro, la base de données DHIS2 pour obtenir une information
sur les naissances attendues.
Ces axes de travail permettront ainsi d'évaluer la faisabilité d’exploiter RapidPro au sein de
la pyramide sanitaire pour consolider DHIS2 mais également pour veiller à l'interopérabilité
des données entre les services sanitaires et ceux de l'État Civil.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

1. Revue des technologies et des applications

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.

Certaines des caractéristiques pertinentes de DHIS2 sont :


● Saisie de données hors ligne ;
● Module qualité des données ;
● API Web (pour un développement d'applications additionnelles) ;
● Outils d'analyse et de diffusion des données conviviales ;
● Importation de données ;
● Stockage de fichiers (y compris audio et vidéo) ;
● et surtout le Tableau de bord très dynamique.

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

Tableau de bord du DHIS2 du Ministère de la Santé et de l’Action Sociale du Sénégal

1.2. RapidPro

RapidPro (http://rapidpro.io) est une plateforme open-source de messagerie multi-canaux


(SMS, Instant Messengers, Vocal, USSD) permettant aux gouvernements et partenaires au
développement d'accélérer et d'accroître les échanges d’informations et de données entre
les ministères, les services gouvernementaux, les agents directement et les citoyens en
général. Utilisé dans le domaine de la santé, RapidPro favorise à la fois la collecte
d’information sanitaire jusqu’au niveau communautaire et offre également une liaison
individuelle et personnalisée avec chaque agent de santé et ses patients. Fonctionnant avec
une interface web dédiée aux non-développeurs, RapidPro permet à tout instant et de
manière intuitive de développer une application SMS ou Messenger complexe. La pluralité
des canaux de connexion proposent également une forte adaptation par rapport au type de
téléphone et mode de communication des destinataires. L’utilisation de la webAPI offre enfin
des fonctions d'échanges avec divers systèmes d’information ou de gestion de données.

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

Certaines des caractéristiques pertinentes de RapidPro pour ce projet sont :

● Envoi et réception de messages ;


● Automatisation des envois et interactions spécifiques selon les messages
reçus ;
● Encodage, décodage et classification des informations contenues dans les
messages ;
● Déclenchement d’alertes et dispatching intelligent des messages vers de
nouveaux destinataires ;
● Traduction des messages intuitif ;
● Interconnexion avec d’autres services RapidPro type Etat-Civil ;
● Outils d'analyse et de diffusion des données conviviales ;
● Importation de données et mise à jour des données contact par les
utilisateurs ;
● Transmission des données par API Web vers des serveurs externes.

Workflow RapidPro pour le rapportage mensuel de données

Pour héberger une instance RapidPro, nous avons 2 options possibles :

● L'hébergement sur un serveur physique localement ;


● L'hébergement dans le cloud via des fournisseurs de services
(https://community.rapidpro.io/marketplace/) ;
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

2. Dispositif d'interopérabilité entre DHIS2 et RapidPro

2.1. Modèle de transfert de données

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

Modèle de transfert de données entre RapidPro et DHIS2

Données Données
envoyée ou envoyées ou
reçue via le reçues via le

2.2. RapidPro Etat Civil

2.2.1. Objectifs

Afin d'améliorer la performance des services de l’État-Civil et de renforcer le rôle des


structures de santé dans l’enregistrement des naissances et des décès, le Ministère de la
Gouvernance Locale, du Développement et de l'Aménagement du Territoire (MGDAT) et le
Ministère de la Santé et de l’Action Sociale (MSAS) ont entrepris un travail d'interopérabilité
des services conférant d’une part une responsabilité aux structures de santé dans le
processus de déclaration des naissances et d’autre part, signalant l’importance de
transmettre des informations entre les services sanitaires et les services d'État-Civil.

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

Extrait du Workflow RapidPro pour la transmission des données d'État-Civil

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.

Tableau des données collectées par RapidPro pour l'État Civil

Variable Désagrégation/Agrégation Fréquence Source

Nombre de naissances attendues Genre Annuelle MSAS/DHIS2


Centre Sante
Centre Etat-Civil*

Nombre de naissances en structure Genre Mensuelle MSAS/DHIS2


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

Centre Sante (ou RapidPro)


Centre Etat-Civil*

Nombre de naissances a domicile Genre Mensuelle MSAS/DHIS2


connues Centre Sante (ou RapidPro)
Centre Etat-Civil*

Nombre de naissances à domicile non Genre Mensuelle Calcul


connue Centre Sante RapidPro
Centre Etat-Civil*

Nombre de décès attendus ** Genre / Tranche d'âge Annuelle Non


Centre Sante disponible
Centre Etat-Civil*

Nombre de décès en structure Genre / Tranche d'âge Mensuelle MSAS/DHIS2


Centre Sante (ou RapidPro)
Centre Etat-Civil*

Nombre de décès à domicile connues Genre / Tranche d'âge Mensuelle MSAS/DHIS2


Centre Sante (ou RapidPro)
Centre Etat-Civil*

Nombre de décès à domicile non Genre Mensuelle Non


connue ** Centre Sante disponible
Centre Etat-Civil*

Nombre de déclaration des naissances Genre Mensuelle MSAS/Rapid


dans la structure Centre Sante Pro
Centre Etat-Civil*

Nombre de naissances déclarées dans Genre Mensuelle CNEC/Rapid


le délais légal Centre Etat-Civil Pro

Nombre de naissances déclarées Genre Mensuelle CNEC/Rapid


après le délais légal Centre Etat-Civil Pro

Nombre de décès déclarés Genre Mensuelle CNEC/Rapid


Centre Etat-Civil Pro

Nombre de mariages Centre Etat-Civil Mensuelle CNEC/Rapid


Pro

Nombre de divorces Centre Etat-Civil Mensuelle CNEC/Rapid


Pro
* Les données transmises par les centres de santé doivent être agrégées par commune afin d'être interopérable
avec chaque centre d’Etat Civil (Centre principal)
** Données non disponible dans DHIS2 au Sénégal

2.1.2. Utilisation des webhooks

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

Le webhook permet également de déclencher une action au sein de RapidPro (exemple,


envoie d’un sms) lorsqu’un événement se produit dans une application externe. Dans ce cas
on envoie une requête HTTP avec le verbe GET d’une URL relative.

Pour transférer des données de RapidPro vers un serveur externe, il faut :


● Collecter les données temporairement dans le flux RapidPro ;
● Utiliser la fonction webhook dans RapidPro ;
● Sélectionner le type d’appel POST (pour envoyer) et GET (pour récupérer) ;
● Envoyer les variables temporaires dans l’URL du webhook sous la syntaxe suivante :
http://[URL_Serveur]/[Localisation_Script]/[Fichier_Script]?[Variable_exterieur1]=[VariableRa
pidPro1]&[Variable_exterieur2]=[VariableRapidPro2]

Exemple :
http://51.255.36.50/rdhis/index_get.php?site=@contact.nom_du_centre&commune=@conta
ct.commune&district=@contact.district_sanitaire&region=@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

2.3. Configuration de DHIS2

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.

2.3.1. Paramétrage de l’utilisateur RapidPro

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.

Dans l’exemple, nous avons nommé cet utilisateur : rpro.

Paramétrage d’un utilisateur RapidPro dans DHIS2


Rôle utilisateur Intégration (image1) puis assignation de ce rôle à l’utilisateur rpro (image2)

2.3.2. Éléments de données et formulaire

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

b. Définir une période de collecte de données


c. Assigner ce formulaire à l’utilisateur rpro.

Formulaire créé dans DHIS2 pour collecter les données Etat Civil

Notons qu’il faudra définir les règles de validation au besoin.

2.3.3. Définir l'interopérabilité des jeux de données sanitaires et de l'État Civil

Au Sénégal, l’organisation du secteur de la santé diffère sensiblement du système de l'État


Civil.

Table de correspondance entre les jeux de données sanitaire et de l'État Civil

Niveau Santé Etat Civil Correspondance

National Central Central Oui

Region Région Médicale Service régional Oui

Departement District sanitaire Service départemental Non

Arrondissement - - Non

Commune - Centre principal Non

- Poste de Santé Centre secondaire Non

- Case Santé - Non

Village - Village 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

Toutefois en tenant compte de la dimension géographique des structures de santé, une


agrégation est possible suivant le raisonnement suivant :
● Une commune est l'unité principale de l'État Civil ;
● Juridiquement, le lieu de déclaration est considéré comme lieu de naissance ;
● Chaque commune dispose d’au moins une structure sanitaire (Poste de Santé ou
Case de santé) ;
● Chaque structure de santé peuvent être rattaché géographiquement à une
Commune ;
● Plusieurs structures de santé peuvent être rattachées à la même commune.

Ainsi, en ajoutant un champs obligatoire correspondant au nom de la Commune (via le code


ANSD) à chaque poste de santé et hôpitaux (et le cas échéant, chaque case de santé),
nous pouvons cumuler les données sanitaires de chaque structure par commune afin de
permettre un échange entre les données sanitaire et Etat Civil.

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

2.4. Configuration de l’Application tierce

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.

2.4.1. Spécifications techniques requises


L'architecture nécessaire pour héberger cette application est la suivante :
- Server Apache 2.4 ;
- MySQL version 5 minimum ;
- Php version 5 et plus.

L’application se constitue ainsi de :


● Base de données mySQL ;
● Script Php de connexion ;
● Script Php matching des sites ;
● Scripts Php pour ajouter des données au DHIS2 via RapidPro :
○ Pour les agents d'État Civil ;
○ Pour les agents de Santé ;
● Script Php pour collecter des données du DHIS2 vers RapidPro;
○ Indicateurs disponibles dans DHIS2 par période et par commune ;
● Script Php pour sauvegarder les données RapidPro sur une base mysql. Ceci est un
script optionnel mais permet d’une part de sauvegarder localement les données
RapidPro et d’autre part, permettre la mise en place d’un dashboard de suivi
spécifique à l'État Civil.

2.4.2. Configuration de la base de données

Pour des besoins de sauvegarde des données recueillies à partir de RapidPro ou de


correspondance des métadonnées de RapidPro et DHIS2, nous avons créé une base de
donnée nommée db_Rpro.
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

Extrait de la base de données db_Rpro

La bas de donnees db_Rpro comprends deux tables :

● site_mapping pour définir les correspondances entre les sites rapidpro et les unité
d’organisation de DHIS2.

Extrait de la table site_mapping dans db_Rpro

La base de données se structure avec les variables :


- dhis_org_name : nom de la structure de sante dans DHIS2
- dhis_org_uid : identifiant unique de la structure de sante dans DHIS2
- dhis_org_parent : nom de l’organisation parent dans DHIS2
- rpro_org_name : nom de la structure de sante dans RapidPro
- rpro_org_id : identifiant de la structure de sante dans RapidPro
- rpro_org_parent : nom de l’organisation parent dans RapidPro
- commune : nom de la commune de rattachement (DHIS2)
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

● dataset_values pour la sauvegarde des données de RapidPro sur une base externe
autre que DHIS2 (optionnel).

2.4.4. Préparation de l’application tierce

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”;

// Paramètre de connexion MySQL


\
$t_usr = ‘root’;
$pass = ‘xxxx’;
$dsn = ‘mysql:host=127.0.0.1;dbname=rhis’’;

// Connexion à la base de données


try {
$dbh = new PDO($dsn, $t_user, $pass);
$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,1);
}
catch(PDOException $e) {
die (“Erreur de connexion au serveur de la base de donn&eacute;es”);
}
?>

b. WebAPI DHIS2

Le WebAPI de DHIS2 permet d’externaliser le DHIS2 vers d’autres applications. Ceci


dans de le but de permettre les échanges d’informations (métadonnées et données)
avec d’autres plateformes.
Documentation : https://docs.dhis2.org/2.22/en/developer/html/ch01.html

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

cURL est une interface en ligne de commande, destinée à récupérer le contenu


d'une ressource accessible par un réseau informatique. Cette récupération de
contenu se base sur les Urls comme illustré ci dessous :

curl -H "Accept: application/xml" -u admin:district


"https://play.dhis2.org/demo/api/organisationUnits"

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.

Script pour vérifier la correspondance des noms de structures de santé et retourner


la valeur du DHIS2
// Requête pour vérifier le matching entre RapidPro et DHIS2
$sql=$dbh->query("SELECT * FROM site_mapping WHERE rpro_org_name =
'$site' and rpro_org_parent ='$district'");

// Récupération de l'Uid du site dans 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

3.1. Exporter les données vers le DHIS2


Cette fonction sera utilisée pour transférer les données Etat Civil vers le DHIS2. Elle pourrait
être utilisée pour permettre de collecter des données avec RapidPro vers DHIS2 d’une
manière générale.

3.1.1. Envoyer des données avec webhook


A partir d’un flux permettant de collecter des données sur l'État Civil auprès des agents de
santé, nous avons procédé à 3 étapes comme suit :

● 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&param2=@flow.fille_structure&param3=@flow.fille_domicile_vue&param4=@f
low.garcon_domicile_vue&param5=@flow.decesf_structure&param6=@flow.deces_
h&param7=@flow.decesf_hors_structure&param8=@flow.decesm_hors_structure&s
ite=@contact.nom_du_centre&commune=@contact.commune&district=@contact.dis
trict_sanitaire&region=@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.

Insertion d’une action webhook et paramétrage dans RapidPro

3.1.2. Ajout de données sur DHIS2 par l’application tierce


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

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

a. Récupération des données RapidPro

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 :

Fonction de récupération des variables transmises par le webhook


include ’config.php’;
// Récupération des données du lien webhook

$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

b. Matching des métadonnées

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.

Fonction de vérification de la correspondance des noms de structures de santé et


retourner la valeur du DHIS2
$query= $this->mysqli->query(“SELECT * FROM rdhis_mapping WHERE
rpro_org_name = ‘“.$site.”’”);

while ($row = $query->fetch_assoc()) {


$orgunit=$$row[‘dhis_org_Uid’]; // DHIS2 orgUnit id
}

c. Envoi des données au Serveur DHIS2


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

Après le traitement de la correspondance, nous appelons cette fonction avec en


paramètre l'élément de donnée, le site, la période et la valeur collectée. Cette
fonction se charge d’envoyer la donnée sur DHIS2.

Fonction d’envoi des données vers le DHIS2


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
$dhisUrl.”api/dataValues?de=$de&pe=$pe&ou=$orgunit”);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, $dhisUserLogin.”:”$dhisUserPass);
curl_setopt($ch, CURLOPT_POSTFIELDS, ”value$value”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$server_output = curl_exec ($ch);
curl_close ($ch);
return $server_output

3.1.3. Stockage des données dans DHIS2

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.

Fonction d’envoi des données vers le DHIS2


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

3.2. Extraction de données de DHIS2 vers RapidPro

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.

3.2.1. Transmission de la requête par RapidPro

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.

● Ajouter un webhook au début du flux pour paramètre la requête en choisissant la


fonction GET pour récupérer les variables vers l’application tierce.

● 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 :
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

URL transférée par le webhook


http://51.255.36.50/rdhis/index_get.php?site=@contact.nom_du_centre&commu
ne=@contact.commune&district=@contact.district_sanitaire&region=@contact.
region&periode=@date.today

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

A la fin du flux, nous mettons à jour automatiquement la date du rapport afin


d’amorcer le prochain envoi.

3.2.2. Exécution de la requête dans l’application tierce vers 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

➔ dhis_rpro_ec.php contenant le corps du traitement des données (récupération des


données, maching des métadonnées , réception des données de DHIS2).

a. Récupération de variables RapidPro

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 :

Fonction de récupération des variables transmises par le webhook


include ’config.php’;

// Récupération des données du lien webhook

$naissanceAttendues = $_GET["param1"];

$site = $_GET[“site”];
$commune = $_GET[“commune”];
$district = $_GET[“district”];
$region = $_GET[“region”];
$periode = $_GET[“periode”];
// Fin de récupération

b. Matching des métadonnées

Pour s’assurer de récupérer les données des structures de santé de DHIS2


correspondantes au centre d'État Civil (RapidPro), il faut un contrôle de
correspondance du site RapidPro de collecte rapport à celle de DHIS2. Nous
exécutons cette requête SQL suivante qui recherche dans la table site_mapping, la
correspondance puis renvoie l’identifiant de la structure concernée.

Fonction de récupération des structures de santé associés au centre d'État Civil


$sql=$dbh->query(“SELECT * FROM site_mapping WHERE commune =
‘$commune’”);
$sql->setFetchMode(PDO::FETCH_OBJ);
While ($response = $sql->fetch())
{
$orgunitIDS= $reponse->dhis_org_uid;
}
$sql->closeCursor();

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.

c. Extraction des données via la WebAPI DHIS2


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

Après le traitement de la correspondance, nous exécutons une fonction qui envoie


une requête d’extraction de données de DHIS2 à l’aide de la WebAPI DHIS2.

Fonction d’extraction des donnees du DHIS2 via la webAPI DHIS2


function DataExtracting($Url,$User,$Pass,$ds,$pe,$ou){
try {
$headers = array(“Content-type:application/xml”,);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$Url.”/ap/dataValueSets.json?dataSet=$ds&period=$pe&orgUnit=$ou”);
curl_setopt($ch,CURLOPT_USERPWD,”$User::$Pass”);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_FAILONERROR,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
$server_output = curl_exec ($ch);
return $server_output;
} catch (Exception $e) {
echo ‘Sorry! Caught exception: ‘, $e->getMessage(), “\n”;
}
}

d. Transmission de la réponse via le Webhook

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

Formatage de la réponse en JSON


// Send the JSON
$json->send();

/** Réponse Sent to WebHook


{
“naiss_attend”:”6054”
}
**/

3.2.3. Récupération des données DHIS2 via RapidPro

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.

Résultat de la requête vers DHIS2 envoyé sur RapidPro


Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017
Interconnexion entre RapidPro et DHIS2 Version: 1.0
Authors: Sakibou Alassani (HISP); Vincent Turmine Date: 20.04.2017

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 l’Application tiers :


● Créer une table Error_log pour retracer les erreurs lors de l’envoi des
données de l’application tiers vers DHIS2. Ceci dans le but de pouvoir
relancer les envoies échoués.
● Avoir une interface utilisateur pour mieux gérer les erreurs et aussi avoir
quelques statistiques.

Au niveau de DHIS2 :
● Ajouter si possible un attribut commune au niveau des unités d’organisation

Vous aimerez peut-être aussi