Système de Gestion des Urgences Hospitalières

Une plateforme moderne pour une coordination efficace entre patients et personnel médical

Découvrir

Introduction

Contexte du Projet

Le système de gestion des urgences hospitalières a été développé pour répondre aux besoins croissants de coordination entre les différents acteurs du milieu médical et les patients.

Dans un environnement hospitalier, la rapidité de communication et la précision des informations sont cruciales pour assurer des soins efficaces, surtout dans des situations d'urgence.

Cette application web permet une communication fluide entre patients, médecins, infirmiers, sécurité et pompiers, avec des fonctionnalités adaptées à chaque rôle.

Objectifs Principaux

  • Faciliter la communication entre patients et personnel médical
  • Permettre l'envoi rapide d'alertes en cas d'urgence
  • Centraliser les informations médicales importantes
  • Fournir des tableaux de bord personnalisés pour chaque type d'utilisateur
  • Améliorer le temps de réponse aux urgences
  • Assurer la sécurité et la confidentialité des données
Schéma du système hospitalier

Technologies Utilisées

Stack Technologique

PHP

Langage côté serveur pour le traitement des données et la logique métier

PHP 8+

MySQL

Base de données relationnelle pour le stockage des informations

MySQL

HTML/CSS/JS

Technologies front-end pour l'interface utilisateur

HTML5 CSS3 JavaScript

Bibliothèques et Frameworks

  • Bootstrap 5 - Framework CSS pour le design responsive
  • Bootstrap Icons - Bibliothèque d'icônes
  • PDO - Interface pour l'accès aux bases de données
  • Animate.css - Pour les animations

Fonctionnalités Techniques

  • Programmation Orientée Objet avec PHP
  • Système de routage personnalisé
  • Gestion des sessions utilisateurs
  • Hachage sécurisé des mots de passe
  • Upload sécurisé de fichiers
  • Requêtes AJAX pour certaines fonctionnalités

Pourquoi ces choix technologiques ?

Le choix de PHP et MySQL s'est imposé naturellement pour un projet web nécessitant une forte interaction avec une base de données et une logique métier complexe. Ces technologies sont largement supportées par la plupart des hébergements web et offrent un excellent rapport performance/facilité de développement.

Bootstrap a été choisi pour sa capacité à créer des interfaces responsive rapidement, ce qui était crucial pour une application qui doit être accessible sur différents appareils (ordinateurs, tablettes, smartphones).

Architecture du Système

Structure du Projet

L'application suit une architecture MVC (Modèle-Vue-Contrôleur) simplifiée, même si elle n'utilise pas un framework MVC complet.

Les principales composantes sont :

  • Modèle : La base de données MySQL et les requêtes PDO
  • Vue : Les templates HTML avec intégration PHP
  • Contrôleur : La logique de routage et de traitement des requêtes

Base de Données

La base de données est constituée de plusieurs tables principales :

  • utilisateurs : Stocke les informations des utilisateurs
  • roles : Définit les différents rôles dans le système
  • alertes : Enregistre toutes les alertes envoyées
  • recommandations : Stocke les recommandations entre professionnels
  • parametres : Configuration du système
Diagramme de base de données
Diagramme simplifié de la base de données

Flux de Données

1. Requête Utilisateur

L'utilisateur effectue une action (clic, soumission de formulaire)

2. Routage

Le système détermine quelle action exécuter en fonction de l'URL

3. Traitement

Le contrôleur traite la requête, interagit avec la base de données si nécessaire

4. Affichage

La vue appropriée est générée et renvoyée à l'utilisateur

Sécurité

Plusieurs mesures de sécurité ont été implémentées :

Protections
  • Hachage des mots de passe avec BCRYPT
  • Protection contre les injections SQL avec PDO
  • Validation et nettoyage des entrées utilisateur
  • Gestion des sessions sécurisées
Contrôle d'Accès
  • Système de rôles et permissions
  • Vérification des droits avant chaque action
  • Journalisation des connexions
  • Déconnexion automatique après inactivité

Fonctionnalités Principales

Gestion des Utilisateurs

Système complet de gestion des utilisateurs avec différents rôles et permissions

Interface utilisateurs

Système d'Alertes

Envoi et gestion des alertes avec différents niveaux d'urgence

Interface alertes

Recommandations

Communication entre professionnels de santé via des recommandations

Interface recommandations

Détail des Rôles

Patient
  • Création de compte
  • Envoi d'alertes aux professionnels
  • Visualisation de l'historique des alertes
  • Gestion du profil
Médecin/Docteur
  • Réception des alertes patients
  • Envoi de recommandations aux infirmiers
  • Alerte de la sécurité ou des pompiers
  • Marquage des alertes comme résolues
Infirmier
  • Réception des recommandations
  • Visualisation des alertes
  • Alerte de la sécurité ou des pompiers
  • Gestion du profil
Sécurité/Pompier
  • Réception des alertes urgentes
  • Visualisation des détails des alertes
  • Marquage des alertes comme traitées

Fonctionnalités Administrateur

  • Gestion complète des utilisateurs
  • Visualisation de toutes les alertes
  • Modification des paramètres système
  • Statistiques d'utilisation
  • Journal des connexions
  • Configuration des rôles

Processus d'Envoi d'Alerte

Processus d'envoi d'alerte

Explications du Code

Structure du Code

Le code est organisé de manière modulaire avec une séparation claire entre :

  • La configuration (connexion base de données, constantes)
  • Les fonctions utilitaires (sécurité, upload, etc.)
  • Le routage et contrôleur principal
  • Les vues (templates HTML)

Exemple de Fonction Utilitaire

La fonction sanitize() est utilisée pour nettoyer toutes les entrées utilisateur :

function sanitize($data) {
    return htmlspecialchars(strip_tags(trim($data)));
}

Cette fonction :

  1. Supprime les espaces inutiles avec trim()
  2. Enlève les balises HTML avec strip_tags()
  3. Convertit les caractères spéciaux en entités HTML avec htmlspecialchars()

Système de Routage

Le système de routage est basé sur un paramètre GET action :

$action = isset($_GET['action']) ? sanitize($_GET['action']) : 'home';

switch ($action) {
    case 'login':
        handleLogin();
        break;
    case 'register':
        handleRegister();
        break;
    // ... autres actions
    default:
        showHome();
}

Gestion de la Base de Données

Connexion sécurisée avec PDO :

try {
    $pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, 
                  DB_USER, DB_PASS);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("SET NAMES utf8mb4");
} catch (PDOException $e) {
    die("Erreur de connexion: " . $e->getMessage());
}

Requête Paramétrée

Exemple de requête sécurisée :

$stmt = $pdo->prepare("SELECT * FROM utilisateurs WHERE id = ?");
$stmt->execute([$user_id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

Système d'Authentification

Le système utilise des sessions PHP et le hachage sécurisé des mots de passe :

function hashPassword($password) {
    return password_hash($password, PASSWORD_BCRYPT);
}

function verifyPassword($password, $hash) {
    return password_verify($password, $hash);
}

// Dans le processus de connexion
if ($user && verifyPassword($password, $user['password'])) {
    $_SESSION['user_id'] = $user['id'];
    $_SESSION['role'] = $role;
    // ... autres données de session
}

Upload Sécurisé de Fichiers

La fonction uploadPhoto() valide et sécurise l'upload des photos de profil :

function uploadPhoto($file) {
    $target_dir = "uploads/profiles/";
    // Vérification du type de fichier
    $check = getimagesize($file["tmp_name"]);
    if ($check === false) {
        return ['success' => false, 'message' => 'Le fichier n\'est pas une image.'];
    }
    // Vérification de la taille
    if ($file["size"] > 2000000) {
        return ['success' => false, 'message' => 'L\'image est trop volumineuse (max 2MB).'];
    }
    // ... autres vérifications
    // Déplacement sécurisé du fichier
    if (move_uploaded_file($file["tmp_name"], $target_file)) {
        return ['success' => true, 'filename' => $new_filename];
    }
}

Questions Fréquentes

Pourquoi avoir choisi PHP plutôt qu'un framework comme Laravel ou Symfony ?

Le choix de PHP natique plutôt qu'un framework complet a été fait pour plusieurs raisons :

  • Simplicité de déploiement sur la plupart des hébergements partagés
  • Meilleure performance pour une application de taille moyenne
  • Plus grande flexibilité dans l'architecture
  • Courbe d'apprentissage plus douce pour la maintenance

Comment gérez-vous la sécurité des données médicales ?

Plusieurs mesures ont été mises en place :

  • Toutes les communications se font en HTTPS
  • Les mots de passe sont hachés avec BCRYPT
  • Protection contre les injections SQL avec PDO
  • Validation rigoureuse de toutes les entrées utilisateur
  • Limitation des accès selon les rôles

Comment l'application gère-t-elle les pics de charge ?

L'architecture a été conçue pour être scalable :

  • Optimisation des requêtes SQL
  • Mise en cache des données fréquemment accédées
  • Possibilité de déployer sur plusieurs serveurs
  • Utilisation de techniques asynchrones pour les opérations longues

Quelles sont les possibilités d'évolution du système ?

Plusieurs axes d'amélioration sont prévus :

  • Intégration avec des systèmes externes (laboratoires, pharmacies)
  • Application mobile native
  • Notifications en temps réel avec WebSockets
  • Tableau de bord avec statistiques avancées
  • Export des données pour analyse

Comment tester l'application ?

Pour tester le système :

  1. Créez un compte patient
  2. Connectez-vous en tant que patient et envoyez une alerte
  3. Connectez-vous ensuite avec un compte médecin pour voir l'alerte
  4. Testez l'envoi de recommandations aux infirmiers
  5. Explorez le tableau de bord administrateur