HealthNorth — Épreuve E6
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
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).
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 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