HealthNorth — Épreuve E6

4 min read Page Views

HealthNorth — Conception et développement d’applications

HealthNorth est une solution complète de gestion d’un cabinet médical, développée dans le cadre de l’épreuve E6 (option SLAM). Elle est composée de deux réalisations professionnelles complémentaires : une application web en PHP natif avec architecture MVC, et une API REST FastAPI couplée à une application mobile React Native/Expo.

Accès jury : samiaerrabite.com healthnorth


Dossier pro

Réalisation 1 — Application web PHP MVC

Contexte et objectif

Mise en place d’une application web permettant la gestion complète d’un cabinet médical : patients, médecins, rendez-vous, ordonnances et examens. Le projet a été développé en PHP 8 natif avec une architecture MVC, déployé en production sur AlwaysData.

Stack technique : PHP 8, MySQL 8, Bootstrap, Git/GitHub, phpMyAdmin, MAMP (développement local), AlwaysData (production).

Mon image Mon image

Architecture MVC

Le projet est structuré autour d’un dossier app/ contenant trois couches distinctes : Controllers/ pour la logique métier, Models/ pour l’accès aux données, et Views/ pour l’affichage. Le dossier Core/ centralise le routeur et la classe de connexion à la base de données.

Cette séparation garantit la maintenabilité du code et facilite l’évolution indépendante de chaque couche.


Modélisation des données — MCD

Avant de créer la base de données, j’ai modélisé les entités et leurs relations sous forme de MCD. Les relations principales :

  • Un patient prend plusieurs rendez-vous (1,n)
  • Un médecin assure les rendez-vous et prescrit des ordonnances
  • Une secrétaire gère les rendez-vous

Base de données MySQL : 7 tables administrées via phpMyAdmin (Patients, Medecins, Secretaires, Rendez-vous, Ordonnances, Laboratoires, Examens). La table users centralise l’authentification et les rôles.


Authentification et gestion des rôles

Le système d’authentification gère trois rôles distincts : patient, médecin et secrétaire. À l’inscription, chaque rôle fournit des informations spécifiques (numéro de sécurité sociale pour le patient, spécialité pour le médecin). La connexion redirige automatiquement chaque utilisateur vers son espace dédié.


Espaces utilisateurs par rôle

Espace patient : consultation des rendez-vous avec statut en temps réel (En attente / Confirmé), prise de rendez-vous avec choix du médecin, de la date et de l’heure.

Espace médecin : visualisation des rendez-vous du jour avec nom du patient, rédaction d’ordonnances directement depuis l’interface.

Espace médecin — rendez-vous et ordonnances

Espace médecin — rendez-vous et ordonnances

Espace secrétaire : vue globale sur tous les rendez-vous du cabinet, confirmation ou annulation de chaque rendez-vous avec mise à jour du statut en base de données en temps réel.


Réalisation 2 — API REST FastAPI + Application mobile React Native

Contexte et objectif

Extension de HealthNorth sous forme d’API REST développée avec FastAPI (Python) et d’une application mobile React Native/Expo. L’objectif était de rendre les fonctionnalités accessibles depuis un smartphone, avec l’API servant d’intermédiaire entre l’app mobile et la base de données MySQL.

Stack technique : Python, FastAPI, Uvicorn, SQLAlchemy, MySQL, React Native, Expo Go, Git/GitHub, AlwaysData (production).


Architecture du projet

Le projet est divisé en deux parties distinctes.

API FastAPI — organisée avec un dossier routers/ contenant un fichier par ressource, ce qui rend le code modulaire et facile à maintenir :

Application mobile Expo — structurée par écrans avec un dossier services/ centralisant tous les appels vers l’API :


Endpoints de l’API

L’API expose une vingtaine d’endpoints couvrant 4 ressources principales. Les opérations CRUD sont implémentées pour les patients et les médecins. La gestion des rendez-vous permet de créer, consulter et annuler un RDV. L’authentification est gérée via deux routes dédiées.

Méthode Endpoint Description
POST /auth/login Connexion
POST /auth/register Inscription
GET /patients/ Liste des patients
POST /rdv/ Créer un RDV
GET /rdv/patient/{id} RDV d’un patient
GET /rdv/medecin/{id} RDV d’un médecin
DELETE /rdv/{id_rdv} Annuler un RDV

La documentation complète a été générée automatiquement par FastAPI via Swagger UI.

Test de l’API : l’endpoint GET /rdv/patient/11 retourne les rendez-vous du patient en JSON avec un code 200, confirmant la bonne connexion entre l’API et la base de données.


Application mobile

Authentification : deux écrans de connexion et d’inscription communiquent avec les endpoints /auth/login et /auth/register. Une fois connecté, l’utilisateur est redirigé vers son tableau de bord.

Tableau de bord patient : accès rapide aux fonctionnalités principales (prendre un RDV, mes rendez-vous, mes ordonnances).

Rendez-vous : la page distingue les prochains RDV (statut “En attente”) des rendez-vous passés (statut “Confirmé”), en consommant les données de l’API en temps réel.

Prise de RDV : sélection du médecin, de la date et de l’heure avant confirmation, les données étant envoyées via un POST sur /rdv/.


Améliorations envisagées

  • Sécurisation de l’API avec JWT (JSON Web Tokens) pour remplacer l’authentification basique actuelle
  • Ajout de notifications push pour les confirmations de rendez-vous
  • Mise en place de tests unitaires avec PHPUnit côté application web
Last updated on 2026-04-04