Étude de cas · Académique

Application de gestion des équipements et de la maintenance pour un hôpital de district au Rwanda

Remplace le suivi papier des équipements biomédicaux, informatiques et d’infrastructure de l’hôpital de district de Kabutare  signalements, interventions, maintenance préventive.

En bref

  • Module équipements et maintenance demandé par l’hôpital de district de Kabutare (Rwanda)  signalements, réparations, maintenance préventive et inventaire.
  • Développeur principal dans une équipe de 4  modèle de données, fonctionnalités clés et chaîne CI/CD  travail poursuivi pendant un stage de 10 semaines sur place.
  • Client Flutter web et Android, deux services Node.js, connexion Keycloak avec droits par rôle, Docker Compose derrière nginx, pipeline Jenkins en 10 étapes.

En résumé

Rôle
Développeur principal
Équipe
Équipe de 4
Période
–
Statut
Projet tutoré soutenu en avril 2026, poursuivi pendant le stage sur place (mai–juillet 2026)
Assistance IA
partielle Modélisation des données, fonctionnalités clés et CI/CD par moi  une partie du code écrite avec Claude Code.
Technologies
  • Flutter
  • Dart
  • Node.js
  • Express
  • SQLite
  • Keycloak
  • PostgreSQL
  • Docker Compose
  • nginx
  • Jenkins
  • Jest

Contexte

Projet tutoré d’école d’ingénieurs (ISIS, 2025–2026) commandé par l’hôpital de district de Kabutare, au Rwanda. L’application est le module 1 d’un système plus large de gestion hospitalière  les équipements et leur maintenance. Après la soutenance d’avril 2026, j’ai poursuivi le travail sur place, à l’hôpital, pendant un stage de 10 semaines (mai–juillet 2026).

Problème

Les équipements informatiques, biomédicaux et d’infrastructure étaient suivis sur papier dans les différents services de l’hôpital. Rien ne permettait de signaler une panne de façon structurée, de suivre une réparation de la demande à la clôture, ni de planifier la maintenance préventive et les remplacements.

Mon rôle, l’équipe et la part de l’IA

Équipe de 4 étudiants. J’étais le développeur principal  le rapport final du projet m’attribue le modèle de données, les fonctionnalités clés et la chaîne CI/CD. Une partie du code a été écrite avec Claude Code  les conventions de code et un journal de vérification des fonctionnalités sont conservés dans le dépôt.

Contraintes

  • Milieu hospitalier  plusieurs profils (personnel qui signale, superviseurs, techniciens spécialisés, administrateurs) aux droits différents.
  • Interface bilingue  français et anglais.
  • Déploiement local  l’application devait tourner sur un serveur de l’hôpital, en HTTPS, et s’installer sur les téléphones du personnel.
  • Traçabilité  chaque intervention et chaque étape de la vie d’un équipement doivent rester visibles.

Solution et architecture

  • Client  application Flutter, installable en PWA web et en APK Android, avec une interface français/anglais.
  • Services  deux services Node.js/Express. auth-service gère les comptes via l’API d’administration de Keycloak et stocke les permissions applicatives  db-service gère équipements, signalements, sessions et rapports d’intervention, protocoles de maintenance préventive, inventaire et journal d’audit, sur SQLite.
  • Identité  connexion par Keycloak  les services vérifient les jetons RS256 avec les clés publiées (JWKS), sans secret partagé. 17 permissions applicatives sont associées aux rôles.
  • Parcours de signalement  choix de la catégorie d’abord, jusqu’à 5 photos par signalement, 10 statuts et 4 niveaux d’urgence  une réparation peut compter plusieurs sessions d’intervention et se termine par un rapport d’intervention en PDF.
  • Cycle de vie des équipements  listes de contrôle de maintenance préventive, criticité ABC, plan de remplacement calculé à partir de la durée de vie prévue, et procédure de réforme qui conserve l’historique. L’inventaire physique est importé depuis un tableur.
  • Notifications  e-mails transactionnels, notifications push web et rapport mensuel d’indicateurs.
  • Déploiement  Docker Compose derrière nginx  un script de provisionnement installe une autorité de certification interne, le HTTPS, une page d’installation de la PWA avec affiche QR imprimable, les sauvegardes et les mises à jour.

Stack

Flutter et Dart, Node.js et Express, SQLite, Keycloak sur PostgreSQL, Docker Compose, nginx, Jenkins, Jest, push web.

Qualité et vérification

  • 26 fichiers de tests Jest (droits par rôle, rapports d’intervention, sauvegardes, import CSV, cycle de vie des équipements, pagination) et 7 fichiers de tests Flutter.
  • Un pipeline Jenkins en 10 étapes  analyse et tests de l’application Flutter, builds, publication des images, déploiement des environnements de production et de développement, contrôle de santé.
  • Une auto-évaluation au regard des Rwanda Hospital Accreditation Standards (11 standards passés en revue, avec preuves dans le code et actions rapides), ainsi que des audits de l’interface, des traductions et de la connexion.

Résultats et statut

Le projet tutoré a été soutenu en avril 2026, puis le développement s’est poursuivi pendant le stage à l’hôpital (mai–juillet 2026). Aucun chiffre d’usage à l’hôpital n’est publié ici.

Ce que je ferais autrement

  • Exclure du dépôt les fichiers générés et les dépendances dès le premier commit.
  • Lancer les suites de tests automatiquement à chaque modification, et pas seulement dans le pipeline de déploiement.
  • Séparer plus tôt les modèles de données des deux services, pour faire évoluer indépendamment les modules signalements et inventaire.

Liens

  • Code source  une copie publique nettoyée est en préparation.
  • Captures d’écran  à venir, sur des données de démonstration.