e-Santé Bénin — Document technique
Plateforme collaborative et inclusive de suivi des patients Challenge e-Santé Bénin · Version 1.0 · septembre 2026
| Plateforme en ligne | https://sante.cafti-group.com |
| Code source | https://github.com/ssid32-kg/sante-mtdi |
| Comptes de démonstration | page /connexion (connexion en un clic) · mot de passe commun Demo2026! |
| Données | 100 % fictives (personnes, NPI, IFU, numéros d'Ordre, AMM) |
1. Résumé
e-Santé Bénin relie autour d'un dossier patient unique, identifié par le NPI, tous les acteurs du parcours de soins : patients et aidants, soignants, établissements, pharmacies, Ministère et agences. La plateforme a été conçue à partir de trois contraintes du terrain :
- Une part importante des patients ne lit pas, ou mal, le français, et certains vivent avec un handicap visuel ou auditif. Tout se lit à voix haute, les ordonnances sont dessinées en pictogrammes, les patients peuvent envoyer des messages vocaux, et aucune information ne passe uniquement par le son.
- La connectivité est faible et beaucoup de téléphones ne sont pas des smartphones. Les pages sont rendues côté serveur (environ 4 Ko compressés par page), la PWA fonctionne hors ligne, et l'essentiel reste accessible par SMS et USSD
*789#. - La confiance conditionne l'adoption. Le patient accorde et retire les accès, et voit qui a consulté son dossier. Les accès d'urgence sont justifiés, limités à 24 h et notifiés. Administrateurs et autorités n'accèdent jamais à un dossier individuel.
La plateforme est connectée (en simulation) à l'ANIP (NPI), à la DGI (IFU), aux Ordres professionnels, à l'ABMed, à l'ANPS (ARCH), au Mobile Money, à une passerelle SMS et à DHIS2 (SNIGS), via des connecteurs isolés et journalisés.
2. Analyse des usages
2.1 Problèmes du terrain et réponses apportées
| Problème constaté | Conséquence | Réponse de la plateforme |
|---|---|---|
| Carnets papier perdus, dossiers propres à chaque structure | Examens refaits, allergies ignorées, erreurs de prescription | Dossier unique indexé par le NPI (identifiant pivot national), identité pré-remplie par l'ANIP, contrôle automatique des allergies à la prescription |
| Référence / contre-référence rarement bouclée | Le patient arrive sans courrier au CHU, le centre d'origine n'a jamais de retour | Module Références : urgence, résumé clinique, accès transmis au spécialiste (30 j), statuts, contre-référence obligatoire pour clôturer, délai d'acceptation mesuré |
| Perdus de vue (CPN, vaccination, hypertension, diabète, drépanocytose) | Complications évitables | Rappel SMS la veille, rendez-vous manqué détecté automatiquement avec relance du patient et du soignant, liste « À relancer », rappels de prise, alerte de vaccin en retard |
| Analphabétisme, langues nationales | Mauvaise observance | Posologie en pictogrammes (matin, midi, soir, coucher, avec un point par comprimé), lecture vocale partout, messages vocaux, mode images, compte aidant |
| Handicap visuel | Exclusion numérique | HTML sémantique, texte jusqu'à 150 %, contraste élevé, bouton « Écouter », commandes vocales |
| Handicap auditif | Consultations et appels téléphoniques inaccessibles | Tout est écrit, messagerie écrite avec le soignant, alertes visuelles, handicap signalé au soignant (« écrire, face à face ») |
| Réseau faible, téléphones basiques | Service inutilisable | Pages SSR très légères, PWA hors ligne, file d'envoi des messages, mode économie, USSD *789#, SMS |
| Faux médicaments (marchés informels) | Intoxications, résistances | Vérification AMM + lot auprès de l'ABMed (web et USSD), signalement de pharmacovigilance, délivrance tracée par code d'ordonnance |
| Ruptures de médicaments essentiels | Traitements interrompus | Stocks des officines, seuils d'alerte, carte des ruptures pour le Ministère |
| Paiement direct, couverture ARCH mal connue au guichet | Renoncement aux soins | Taux de prise en charge lu auprès de l'ANPS, tiers payant calculé en pharmacie, paiement Mobile Money du reste à charge |
| Remontée statistique lente (rapports papier) | Décisions tardives, épidémies détectées trop tard | Observatoire temps réel anonymisé et export DHIS2 (SNIGS) |
| Stigmatisation, confidentialité | Refus de partager ses données | Consentement granulaire, journal des accès visible par le patient, bris de glace tracé, secret statistique |
2.2 Personas
| Persona | Contexte | Ce que la plateforme change pour elle / lui |
|---|---|---|
| Afiavi, 35 ans, Abomey-Calavi | Enceinte (29 SA), tension limite ; maman d'Ifè (19 mois, vaccin en retard) | Un seul compte pour la famille, alertes, CPN rappelées, messagerie avec la sage-femme |
| Koffi, 69 ans, Porto-Novo | Diabétique et hypertendu, malvoyant, lit peu, couvert ARCH 100 % | Ordonnance lue à voix haute, rappels SMS de prise, rien à avancer en pharmacie |
| Bio, 28 ans, Parakou | Drépanocytaire, sourd | Échanges écrits avec le médecin, aucune information uniquement sonore |
| Mariam, 39 ans, Djougou | Ne lit pas, téléphone basique, a manqué un rendez-vous | Suivie par SMS et USSD, relancée automatiquement, ordonnance dessinée |
| Dr Hounkpatin, CS de Godomey | Centre de santé périurbain saturé | Historique immédiat, prescription rapide et sûre, références suivies |
| Clarisse, Ministère de la Santé | Planification | Indicateurs à jour, ruptures, perdus de vue, export DHIS2 |
2.3 Parcours clés
- Inscription vérifiée : NPI → identité lue auprès de l'ANIP → code SMS envoyé au numéro connu de l'ANIP → préférences (canal, lecture, handicap) → carnet créé, couverture ARCH lue auprès de l'ANPS. Si un centre de santé avait déjà créé le dossier, il est rattaché au compte.
- Enrôlement en consultation (patient sans smartphone) : le soignant saisit le NPI, le patient reçoit un code SMS et le lui dicte, ce qui prouve son accord.
- Consentement : demande à distance (le patient accepte ou refuse dans l'application), accord en présence (code SMS), accès d'urgence (justification, 24 h, SMS au patient).
- Prescription → pharmacie : ordonnance avec code dictable
ORD-XXXXXXet QR, contrôle des allergies, SMS au patient. Le pharmacien ne voit que l'ordonnance, décrémente son stock et le tiers payant ARCH est calculé. - Référence : envoi (établissement et spécialiste), accès transmis au spécialiste, acceptation, prise en charge, contre-référence renvoyée au centre d'origine et au patient.
- Surveillance : chaque consultation codée CIM-10 alimente l'observatoire ; l'export DHIS2 transmet des agrégats par département.
3. Fonctionnalités par espace
| Espace | Fonctionnalités |
|---|---|
| Public | Accueil en tuiles, annuaire (établissements vérifiés par IFU, lits libres, urgences, maternités ; pharmacies de garde), conseils et alertes écoutables, vérification de médicament (ABMed) et signalement anonyme, simulateur USSD, pages Accessibilité / Projet / Documentation |
| Patient / aidant | Tableau de bord vocal (« Écouter mon résumé »), médicaments du jour en pictogrammes, carnet (consultations, examens, vaccins, orientations), ordonnances avec QR, rendez-vous (demande, annulation, rappel), messagerie écrite et vocale, « Qui voit mon dossier » (accès, demandes, journal), paiements Mobile Money avec part ARCH déduite, carte d'urgence hors ligne imprimable avec QR, vue famille (personnes à charge) |
| Soignant | Tableau de bord (rendez-vous du jour, références, perdus de vue, demandes de rendez-vous), recherche par NPI, trois modes d'accès (distance, code SMS, urgence), enrôlement ANIP, dossier complet ou résumé selon le consentement, consultation (constantes, CIM-10), e-ordonnance avec contrôle d'allergies, examens, vaccins, rendez-vous, références / contre-références, agenda, messagerie ; profil d'accessibilité du patient affiché |
| Pharmacie | Délivrance par code ou QR (minimisation), délivrance partielle, stock (ruptures, seuils), tiers payant ARCH, garde (visible dans l'annuaire et sur *789#), pharmacovigilance |
| Établissement | Lits disponibles, équipe (ajout après vérification ANIP + Ordre, refus si inscription suspendue), vérification de l'IFU auprès de la DGI, indicateurs (rendez-vous manqués, taux de contre-référence), circuit des références avec délais |
| Autorité sanitaire | Observatoire (paludisme hebdomadaire, diagnostics, activité et perdus de vue par département, ruptures, circuit de référence), filtre par département, export DHIS2, transmission des signalements à l'ABMed, publication d'alertes avec diffusion SMS ciblée par département |
| Administration | Comptes, supervision de l'interopérabilité (sondes, latences, erreurs, journal), journal SMS, réinitialisation de la démo |
| Canaux hors ligne | USSD *789# (rendez-vous, médicaments du jour, pharmacies de garde, vérification de médicament, urgences) et SMS (OTP, rappels, relances, ordonnances, alertes) |
4. Inclusion et accessibilité
Référentiel visé : WCAG 2.1 AA.
- Visuel : structure sémantique (titres, régions, listes, tableaux avec en-têtes), lien d'évitement, focus orange très visible, texte à 4 niveaux (jusqu'à 150 %) sans perte de contenu, contraste élevé, icônes décoratives masquées (
aria-hidden), pictogrammes de posologie accompagnés d'une description vocale (role="img"+aria-label), bouton Écouter (Web Speech API, voix française du téléphone, souvent disponible hors ligne), commandes vocales (« rendez-vous », « médicaments », « messages », « urgence »), régionaria-livepour les annonces. - Auditif : aucune information uniquement sonore ; les messages vocaux sont une option en plus de l'écrit. Messagerie écrite avec le soignant, badges et bandeaux visuels, rendez-vous et consignes toujours écrits, profil « sourd : écrire » affiché dans l'agenda et le dossier.
- Lecture : mode images (tuiles agrandies, textes secondaires masqués), posologie dessinée, lecture vocale, messages vocaux, compte aidant. L'inscription règle automatiquement l'affichage (texte agrandi pour « je vois mal », mode images pour « je ne lis pas »).
- Moteur : cibles tactiles de 44 à 56 px, navigation complète au clavier.
- Langues nationales : la synthèse vocale en fon, yoruba, bariba ou dendi n'est pas fiable aujourd'hui. Les messages vocaux permettent déjà l'échange oral dans n'importe quelle langue. La suite du projet prévoit des fiches audio enregistrées par des relais communautaires (voir § 12).
- Sans JavaScript : tous les parcours fonctionnent avec des formulaires classiques ; le JavaScript ne fait qu'enrichir l'expérience (amélioration progressive).
5. Architecture technique
5.1 Vue d'ensemble
Navigateur / PWA (HTML rendu serveur + ~5 Ko de JS optionnel)
Téléphone basique ──► Agrégateur USSD ──► POST /api/ussd
│
HTTPS (Let's Encrypt) nginx du VPS
│ 127.0.0.1:3300
┌───────────────────────────────────▼───────────────────────────────────┐
│ Conteneur « app » — Node.js 22 / Express │
│ │
│ routes/ public · auth · patient · soignant · pharmacie · │
│ etablissement · observatoire · contenus · admin · api │
│ middleware/ sessions · CSRF · rôles · helpers de vues │
│ services/ access (consentement) · audit · notify (SMS) · otp · │
│ records · messaging · posology · ussd · scheduler │
│ connectors/ anip · dgi · ordres · abmed · anps · momo · sms · dhis2│
│ │ HTTP + clé API, délai max, nouvelle tentative, journalisation │
│ sandbox/ API partenaires SIMULÉES (même contrat que la cible) │
└───────────────┬────────────────────────────────────────────────────────┘
│ pg (pool)
┌───────────────▼──────────────┐ ┌──────────────────────────┐
│ Conteneur « db » PostgreSQL 16│ │ Volume « uploads » │
│ volume db-data │ │ messages vocaux │
└───────────────────────────────┘ └──────────────────────────┘
5.2 Choix techniques et justification
| Choix | Pourquoi |
|---|---|
| Rendu serveur (Express + EJS), pas de SPA | Première page utile en un aller-retour sur un réseau 2G/3G ; pas de bundle de framework à télécharger ; accessibilité native ; fonctionne sans JS |
| JavaScript vanilla (~5 Ko compressés) | Amélioration progressive uniquement : voix, micro, file hors ligne, USSD |
| Polices système, icônes SVG en sprite unique | 0 police téléchargée ; un seul fichier d'icônes mis en cache 30 jours |
| PostgreSQL | Intégrité référentielle, transactions (délivrance, enrôlement), tableaux et JSONB, agrégats pour l'observatoire |
| SQL paramétré sans ORM | Requêtes lisibles et optimisables, aucune injection possible ($1, $2…) |
| Connecteurs derrière un client HTTP commun | Le reste du code ignore URL et formats ; passer en production revient à changer SANDBOX_URL et adapter l'adaptateur concerné |
| Bac à sable intégré | Démonstration réaliste des échanges (latence, erreurs 404, clé API) sans dépendre de partenaires |
| Docker Compose | Déploiement reproductible, isolé des autres services du VPS |
5.3 Arborescence
src/
app.js, server.js, config.js
db/ pool.js · migrate.js · migrations/001_schema.sql · seed.js
middleware/ auth.js · security.js (CSRF, flash, limites) · locals.js
connectors/ http.js (client commun) · index.js (8 partenaires + catalogue)
sandbox/ registry.js (référentiels fictifs) · router.js (API simulées)
services/ access · audit · catalog · codes · messaging · notify · otp ·
posology · records · scheduler · ussd · validators
routes/ un fichier par espace
views/ layout + une vue par écran (EJS)
public/ css/app.css · js/app.js · js/sw.js · icons.svg · manifest
tests/ domain.test.js · ussd.test.js (node:test)
deploy/ nginx-sante.conf · deploy.sh
5.4 Tâches de fond (services/scheduler.js, toutes les 5 min)
- Rappel SMS et notification 24 h avant chaque rendez-vous.
- Rendez-vous non honoré depuis 6 h → statut manqué, relance SMS du patient, notification du soignant.
- Rappels de prise à 7 h, 12 h, 19 h et 21 h (heure du Bénin) pour les patients qui les ont activés, sans doublon grâce à
reminder_log.
6. Modèle de données
| Table | Rôle |
|---|---|
users |
Comptes (6 rôles), NPI, Ordre, rattachement établissement ou pharmacie |
patients |
Dossier, indépendant d'un compte (un patient sans smartphone a un dossier) ; ARCH, handicaps, niveau de lecture, canal préféré, aidant |
consents |
Qui peut voir quel dossier : portée complet / resume / urgence, statut, motif, expiration |
encounters |
Consultations, constantes (JSONB), diagnostic CIM-10 |
prescriptions, prescription_items |
E-ordonnance, code court, posologie par moment, quantités délivrées |
medications, pharmacy_stock, dispensations |
Référentiel AMM, stocks, délivrances avec part ARCH |
appointments |
Rendez-vous (demandé, prévu, honoré, manqué, annulé), rappel envoyé |
lab_results, vaccinations |
Examens (anormal), vaccins (prochaine dose) |
referrals |
Référence, urgence, statut, contre-référence, horodatages |
threads, messages |
Messagerie texte ou vocale, accusé de lecture |
notifications, sms_outbox, otp_codes, reminder_log |
Notifications, SMS, OTP hachés, anti-doublon des rappels |
payments |
Mobile Money, part couverte |
articles |
Gestion de contenu (catégorie, pictogramme, département ciblé) |
product_reports |
Pharmacovigilance |
audit_log |
Traçabilité des accès et actions, affichée au patient |
interop_log |
Journal des appels aux partenaires |
Migrations SQL versionnées (schema_migrations), appliquées au démarrage dans une transaction.
7. Interopérabilité
Chaque partenaire a un adaptateur dans src/connectors/index.js. Tous passent par src/connectors/http.js :
- clé API dans l'en-tête
X-Api-Key; - délai maximal de 6 s (
AbortSignal.timeout) et une nouvelle tentative sur erreur réseau ; - journalisation de chaque appel (partenaire, opération, statut HTTP, latence) dans
interop_log, visible dans Administration → Interopérabilité avec des sondes de santé ; - erreurs typées
ConnectorError, avec un message clair pour l'usager. Un partenaire en panne n'empêche jamais un parcours non dépendant : l'ARCH est relue plus tard, un SMS en échec est journalisé.
| Partenaire (simulé) | Contrat du bac à sable | Utilisé pour |
|---|---|---|
| ANIP | GET /anip/v1/personnes/{npi} |
Inscription, enrôlement, ajout de soignant (identité + téléphone) ; cache mémoire de 10 min |
| DGI | GET /dgi/v1/ifu/{ifu} |
Authentification des établissements et pharmacies |
| Ordres (ONMB, sages-femmes, infirmiers, ONPB) | GET /ordres/v1/professionnels/{numero} |
Création des comptes soignants (refus si suspendu ou si le NPI ne correspond pas) |
| ABMed | GET /abmed/v1/produits?q=&lot= · POST /abmed/v1/signalements |
Vérification AMM/lot, transmission de la pharmacovigilance |
| ANPS — ARCH | GET /anps/v1/arch/assures/{npi} |
Taux de prise en charge, tiers payant |
| Mobile Money | POST /momo/v1/requesttopay · GET …/{ref} |
Paiement du reste à charge (confirmation asynchrone) |
| Passerelle SMS | POST /sms/v1/messages |
OTP, rappels, relances, alertes |
| DHIS2 (SNIGS) | POST /dhis2/api/dataValueSets |
Export d'agrégats CONSULT_<CIM10> × département × mois |
| Agrégateur USSD (entrant) | POST /api/ussd (sessionId, phoneNumber, text → CON … / END …) |
Menu *789# |
Passage en production : remplacer SANDBOX_URL par l'URL du partenaire (ou une URL par partenaire), signer les conventions d'échange, et adapter les formats dans l'adaptateur concerné. Aucun autre fichier n'est touché.
8. Sécurité et protection des données
8.1 Contrôle d'accès (src/services/access.js)
Une fonction pure et testée, decide(user, patient, consents), prend toutes les décisions :
- patient : son dossier (titulaire) et ceux dont il est aidant ;
- soignant : uniquement avec un consentement actif non expiré ; la portée
resumen'autorise ni la lecture des notes ni l'écriture ; - accès d'urgence : motif obligatoire, 24 h, tracé en rouge, SMS immédiat au patient ;
- pharmacien : jamais le dossier, seulement l'ordonnance présentée (code) et les allergies ;
- administrateur, autorité, établissement : aucun dossier individuel.
8.2 Traçabilité
Chaque consultation de dossier (une trace par heure au plus), création, délivrance, accès d'urgence et décision de consentement est écrite dans audit_log et affichée au patient (« Journal des accès »).
8.3 Mesures techniques
| Menace | Mesure |
|---|---|
| Injection SQL | Requêtes 100 % paramétrées |
| XSS | Échappement EJS par défaut, Markdown des contenus sans HTML brut, CSP stricte (script-src 'self', aucun script inline) |
| CSRF | Jeton de synchronisation en session (champ caché ou en-tête X-CSRF-Token), comparaison à temps constant |
| Vol de session | Cookie HttpOnly, Secure, SameSite=Lax, régénération à la connexion, expiration 8 h glissante, sessions en base |
| Force brute | Limitation (30 tentatives / 15 min) sur connexion, OTP et inscription ; OTP bloqué après 5 essais |
| OTP | 6 chiffres aléatoires cryptographiques, stocké haché (HMAC-SHA256), 5 min, usage unique, jamais archivé en clair hors démo |
| Mots de passe (facultatifs) | bcrypt |
| Fichiers audio | Taille limitée (2 Mo), type contrôlé, noms aléatoires, servis uniquement aux membres de la conversation |
| En-têtes | Helmet (HSTS, nosniff, frame-ancestors 'none', Referrer-Policy), Permissions-Policy (micro seulement) |
| Redirections | Seulement vers des chemins internes |
| Ré-identification statistique | Secret statistique : effectifs < 5 affichés « <5 » ; export DHIS2 sans donnée nominative |
| Données en cache sur le téléphone | Le service worker efface les pages en cache à la déconnexion |
8.4 Cadre légal
Le traitement est conçu pour respecter le Code du numérique (loi n° 2017-20) : finalité déterminée, minimisation (pharmacie), consentement explicite, droit d'accès (journal), sécurité. La mise en production supposera une autorisation de l'APDP pour les données de santé et un hébergement national agréé.
9. Performance et connectivité limitée
Mesures sur la plateforme en ligne (octets transférés, compression gzip) :
| Ressource | Poids |
|---|---|
| Page d'accueil (HTML) | ~4,0 Ko |
| Feuille de style (unique, cache 30 j) | ~6,5 Ko |
| JavaScript (optionnel, cache 30 j) | ~5,2 Ko |
| Sprite d'icônes (cache 30 j) | ~2,9 Ko |
| Première visite complète | ≈ 19 Ko |
| Pages suivantes | ≈ 3 à 5 Ko |
- PWA : service worker « réseau d'abord, copie en cache » pour les pages (carnet, ordonnances, carte d'urgence consultables hors ligne) et « cache d'abord » pour les ressources statiques versionnées.
- File d'envoi hors ligne : un message écrit sans réseau est conservé et envoyé au retour de la connexion.
- Mode Économie : désactive toute requête automatique (rafraîchissement de la messagerie).
- Messages vocaux en Opus 24 kbit/s : environ 180 Ko par minute.
- USSD et SMS : aucune donnée mobile requise pour l'essentiel.
10. Qualité du code
- Tests (
npm test,node:test) : 15 tests sur le cœur métier (validation NPI, IFU, téléphone, dates ; posologie et phrases vocales ; règles de consentement ; codes ; détection d'allergies ; menu USSD complet). Ils sont exécutés pendant le build Docker : un test en échec bloque le déploiement. - Intégration continue : GitHub Actions (
.github/workflows/ci.yml). - Logique métier en fonctions pures (accès, posologie, USSD) avec dépendances injectées, donc testable sans base.
- Validation systématique des entrées (
services/validators.js), transactions pour les opérations multi-tables, gestion d'erreurs centralisée. - Code et commentaires en français, alignés sur le vocabulaire métier (CPN, ARCH, contre-référence…).
11. Déploiement
git clone https://github.com/ssid32-kg/sante-mtdi.git && cd sante-mtdi
cp .env.example .env # ou laisser deploy.sh générer des secrets aléatoires
sh deploy/deploy.sh # build + tests + démarrage + vhost nginx + certificat TLS
| Variable | Rôle |
|---|---|
POSTGRES_PASSWORD |
Mot de passe de la base |
SESSION_SECRET |
Secret des sessions et de l'OTP (32 caractères min. en production) |
SANDBOX_API_KEY / SANDBOX_URL |
Clé et URL des partenaires |
PUBLIC_URL |
URL publique (QR codes) |
DEMO_MODE |
true : comptes en un clic, téléphone simulé, SMS lisibles |
APP_PORT |
Port local exposé à nginx (3300) |
Au démarrage, l'application attend PostgreSQL, applique les migrations et charge les données de démonstration si la base est vide. Supervision : GET /healthz, HEALTHCHECK Docker, journal des connecteurs. Sur le VPS, l'application tourne derrière le nginx existant (terminaison TLS Let's Encrypt) et n'écoute que sur 127.0.0.1.
Développement local : docker compose up --build, puis http://localhost:3300.
12. Démonstration
| Compte (NPI) | Profil |
|---|---|
1000000001 Afiavi ADJOVI |
Patiente enceinte, maman d'Ifè (aidante) — demande d'accès en attente |
1000000002 Koffi DOSSOU |
Malvoyant, diabétique, ARCH 100 % |
1000000003 Bio SANNI |
Sourd, drépanocytaire, ARCH 70 % |
2000000001 Dr HOUNKPATIN |
Médecin, CS de Godomey — agenda du jour, perdus de vue |
2000000002 Estelle GBAGUIDI |
Sage-femme, HZ Abomey-Calavi |
2000000003 Dr CHABI |
Cardiologue, CNHU — référence urgente reçue |
3000000001 Dr TOSSOU |
Pharmacienne, Godomey |
4000000001 J.-B. AKPOVI |
Directeur, HZ Abomey-Calavi |
5000000001 Clarisse ZINSOU |
Ministère de la Santé |
9000000001 Administrateur |
Contenus, interopérabilité, réinitialisation |
Données utiles pour tester : ordonnances ORD-K7F3QA, ORD-B9SX4M, ORD-M3PX7C ; NPI non inscrits 1098765432, 1098765433 ; lots sous alerte LOT-FK2291, LOT-PX0457, LOT-AM7781 ; soignant suspendu 2000009999 / ONMB-2009-0999 ; numéro Mobile Money finissant par 0000 pour simuler un échec ; USSD avec le numéro 01 97 00 00 05 (Mariam).
13. Limites et feuille de route
Limites assumées : partenaires simulés ; synthèse vocale dépendante des voix installées ; pas encore de téléconsultation vidéo ; notifications push non implémentées (SMS et notifications internes à la place).
Feuille de route :
- Conventions d'échange et raccordement réel : ANIP, ANPS, ABMed, agrégateur SMS/USSD, DHIS2 national.
- Fiches audio en langues nationales (fon, yoruba, bariba, dendi, goun…) enregistrées par des relais communautaires, et vidéos en langue des signes pour les conseils clés.
- Serveur vocal interactif (appel gratuit) pour les personnes qui ne lisent pas.
- Interopérabilité clinique HL7 FHIR (Patient, Encounter, MedicationRequest) pour les logiciels hospitaliers.
- Synchronisation hors ligne complète pour les agents de santé communautaires en zone blanche.
- Hébergement souverain, autorisation APDP, audit de sécurité indépendant.