Plateforme santé — réseau de laboratoires
Laboratoire SION · UNILAB
Une plateforme pour un réseau de huit laboratoires d'analyses médicales qui fonctionnaient chacun sur une copie isolée d'un logiciel historique, couvrant quatre systèmes distincts construits par un seul ingénieur : le site vitrine, une couche de synchronisation, un outil de pilotage commercial et comptable, et un service des opérations de laboratoire aujourd'hui en pilote sur un site.
- Client
- Laboratoires SION — Cameroun
- Rôle
- Responsable du département informatique — unique ingénieur de la plateforme
- Période
- Septembre 2025 – aujourd'hui
- Statut
- En production (déploiement site par site)
Mission confidentielleLe problème
Laboratoires SION exploite huit sites de laboratoire à Yaoundé, Douala et Bafoussam. Chaque site tournait sur sa propre copie d'un logiciel de laboratoire historique écrit en Django, adossé à une base SQLite locale, sans possibilité de modifier le logiciel et sans aucun lien entre les sites. La direction ne disposait d'aucune vue consolidée du chiffre d'affaires, des prescripteurs ou des patients à l'échelle du réseau : chaque chiffre devait être reconstitué à la main à partir d'exports.
Les huit bases avaient été dérivées d'un même tronc en novembre 2023 et continuaient d'attribuer leurs identifiants depuis le même compteur. En septembre 2026, 72 % des identifiants d'ordonnances, 69 % des identifiants de patients et 42 % des identifiants de prescripteurs entraient en collision d'un site à l'autre, ce qui rendait toute fusion naïve impossible. Les sauvegardes étaient manuelles, effectuées sur des postes Windows exposés aux coupures de courant, et personne ne gérait de façon centrale qui avait le droit de faire quoi.
La commande était donc double : donner à la direction une image fiable de l'activité dès maintenant, sans toucher au logiciel historique, puis le remplacer site par site sans jamais interrompre les guichets d'accueil, dont certains peuvent rester hors ligne jusqu'à 72 heures.
Le produit
Quatre systèmes, chacun répondant à une partie de cette commande — voir les onglets ci-dessous pour ce que fait réellement chacun d'eux et le problème précis qu'il a dû résoudre : le site vitrine (patients et prescripteurs), Bridge (la couche de synchronisation des données qui rend tout le reste possible), Pilot (l'outil de pilotage que la direction ouvre chaque jour) et Home (le service cible qui remplacera à terme le logiciel historique, aujourd'hui en pilote sur un site).
L'ensemble est conçu, codé, testé, déployé et exploité par un seul ingénieur, avec un document d'architecture qui cadre 13 décisions structurantes et 38 arbitrages documentés, et un guide de déploiement de 40 pages utilisé par les équipes du client.
Mon rôle
J'ai rejoint Laboratoires SION en septembre 2025 comme responsable du département informatique. Sur cette plateforme, je suis le seul ingénieur sur les quatre systèmes : j'ai rédigé le document d'architecture, puis conçu, codé, testé et déployé chaque composant, des agents de synchronisation Bun au poste Flutter, et écrit les procédures d'exploitation utilisées par les équipes du client.
Le travail s'organise en jalons datés : site vitrine en octobre 2025, l'outil de pilotage Pilot sur les bases historiques à partir de mars 2026, Bridge (synchronisation multi-sites) à partir de juin 2026, puis les services fédérés de Home, le poste de travail et le portail de livraison en septembre 2026. Les jalons suivants de l'architecture cible de Home (orchestration des tâches, notifications, passerelle temps réel) sont spécifiés mais pas encore développés.
Les systèmes
Site vitrine
En productionlaboratoiresion.org — site vitrine bilingue
Le point d'entrée public unique du réseau, servant six publics différents depuis un même site Next.js bilingue (FR/EN) : un patient qui cherche un examen et son tarif, des prescripteurs, des assureurs, des partenaires de recherche et des candidats à l'embauche ont chacun leur section (Espace Patient, Espace Pro, Nos Agences, Recherche Scientifique, Blog), avec un catalogue d'examens public qui publie à la fois le tarif standard et le tarif assurance pour chaque analyse, de la biochimie sanguine courante aux marqueurs tumoraux.
- Next.js
- next-intl
- Tailwind CSS
- Vercel
Un seul site public, six visiteurs différents
Le problème
Le site d'un réseau de laboratoires doit servir un patient qui vérifie un tarif, un prescripteur qui cherche un laboratoire partenaire, un assureur qui vérifie des conditions de prise en charge et un chercheur qui cherche un site partenaire — depuis la même navigation, sans devenir ni une plaquette institutionnelle qui ignore les patients, ni une appli de prise de rendez-vous qui ignore tout le reste.
Ce que j'ai construit
Le site s'organise autour de parcours clairement identifiés pour chaque public plutôt qu'un menu générique unique, le catalogue d'examens — la page la plus utile pour un patient — restant à un clic de l'accueil dans les deux langues, avec des tarifs publiés ouvertement plutôt que cachés derrière un formulaire de contact.
Le résultat
- Sites de laboratoire
- 8document d'architecture, 2 sept. 2026
- Postes de travail
- 42document d'architecture, 2 sept. 2026
- Ordonnances par jour
- ~90document d'architecture, 2 sept. 2026
- Tests automatisés
- 2 000+suites Jest, Flutter et Bun
- Rôles / permissions / portées
- 13 / 68 / 6
- Lignes de code
- ~230 kTypeScript et Dart
- Modèles de données
- 102Prisma : 43 référentiel, 41 activité, 18 identité
- Durcissement du VPS
- Lynis 82/100
au 25 septembre 2026
La direction dispose désormais d'une vue unique, consolidée et cloisonnée par rôle, du chiffre d'affaires, des prescripteurs et des patients sur les huit sites, calculée à partir de bases sauvegardées automatiquement et non plus à la main. Le site vitrine, Bridge et Pilot sont pleinement en production ; les services fédérés et le poste Flutter de Home sont installés sur un site pilote et se déploient site par site.
La plateforme est livrée avec un kit d'exploitation plutôt qu'avec une poignée de scripts : une image par service construite en intégration continue et épinglée par empreinte, des déploiements déclenchés par webhook, un retour arrière vers l'empreinte précédente, des sauvegardes hors site dont la restauration a été répétée, et un VPS durci jusqu'à un score Lynis de 82/100. L'ensemble du code, environ 230 000 lignes de TypeScript et de Dart, est couvert par plus de 2 000 tests automatisés et a été écrit par un seul développeur en quelque 437 commits.
Stack technique
- Web
- Next.js (App Router)
- React 19
- Tailwind CSS 4
- next-auth v5
- next-intl
- Poste de travail
- Flutter 3 / Dart
- drift + sqlite3 (stockage hors ligne)
- Riverpod
- go_router
- impression PDF
- Services
- NestJS 11
- Apollo Federation 2 (supergraphe composé et vérifié en intégration continue)
- Prisma 7 sur PostgreSQL
- TypeORM (API de synchronisation)
- Agents Bun compilés en binaires natifs
- better-sqlite3
- Données
- PostgreSQL 16
- SQLite + API Online Backup
- Redis (révocation des jetons)
- Exploitation
- Docker Compose, une image par service, déployée par empreinte
- Traefik avec ForwardAuth
- GitHub Actions (CI, vérification du supergraphe, images, builds Flutter et Bun)
- pgbackrest + restic, secrets chiffrés avec SOPS/age
- Vercel (site vitrine)
- Qualité
- Jest (unitaires et bout en bout)
- flutter test
- bun test
- husky + lint-staged + Prettier


