đź“– English version available: See README_english.md.
PrevMed (Prévention Médicale)
Plateforme minimaliste permettant Ă des personnes non techniques de produire des questionnaires cliniques ne stockant aucune information personnelle.
Table des matières
- Objectif Principal
- Description Technique
- Installation
- Utilisation
- Analytics (Optionnel)
- Configuration du questionnaire (YAML)
- Scripts de scoring
- Génération de rapports PDF
- Stockage des données structurées (si activé)
- Structure du projet
- Logs
- Exemple ProbaLYNCH
- Développement
- Licence
- Références et Crédits
Objectif Principal
PrevMed est conçu pour permettre aux professionnels de santé possédant quelques compétences minimales en informatique de créer facilement des questionnaires d'aide à la décision clinique avec un script (R ou Python) et un fichier .yaml.
Fonctionnement :
- Le patient remplit le questionnaire sur l'interface web
- Un PDF avec les réponses et résultats est généré instantanément
- Le patient vient en consultation avec ce PDF
- Aucune donnée personnelle n'est stockée sur le serveur
Ce système fait gagner du temps à tout le monde : le patient prépare ses réponses en amont et le clinicien dispose immédiatement d'informations structurées, voire de scores calculés automatiquement, comme dans l’application ProbaLynch, exemple d’application de PrevMed.
Description Technique
PrevMed permet de créer des questionnaires cliniques interactifs à partir de fichiers de configuration YAML. Le système génère automatiquement une interface web avec Gradio, gère la logique conditionnelle des questions, exécute des scripts de scoring (R ou Python) et produit des rapports PDF.
Caractéristiques principales :
- ✨ Configuration déclarative via YAML
- 🔀 Questions conditionnelles (affichage dynamique basé sur les réponses précédentes)
- 📊 Support de scripts de scoring en R (via rpy2) ou Python
- 🖥️ Interface web intuitive avec Gradio
- 📄 Génération automatique de rapports PDF
- 📝 Logging détaillé avec loguru
- 🎯 Type hints et documentation NumPy style
- 🔒 Polices système uniquement — aucune requête vers Google Fonts ou tout autre serveur externe (respect de la vie privée)
Installation
PrevMed peut être installé de plusieurs façons selon vos besoins :
Méthode 1 : Installation depuis PyPI (Recommandée pour les utilisateurs finaux)
La méthode la plus simple pour une utilisation en production :
# Installer PrevMed depuis PyPI uv pip install PrevMed # Ou avec pip traditionnel pip install PrevMed
Prérequis :
- Python 3.13.5 (ou version compatible)
- R et rpy2 si vous utilisez des scripts de scoring en R :
sudo apt install r-base - Sur Ubuntu 22.04, vous pourriez avoir besoin de :
sudo apt-get install libtirpc-dev(source)
Note : Vous devrez toujours cloner le dépôt ou télécharger les exemples séparément pour accéder aux fichiers YAML d'exemple et aux scripts de scoring.
Méthode 2 : Installation depuis les sources (Recommandée pour le développement)
Pour le développement ou la personnalisation :
# Cloner le dépôt git clone https://github.com/PrevMedOrg/PrevMed cd PrevMed # Créer et activer un environnement virtuel uv venv source .venv/bin/activate # Sur Windows : .venv\Scripts\activate # Installer en mode éditable uv pip install -e .
Prérequis : Identiques à la Méthode 1
Méthode 3 : Docker depuis PyPI (Déploiement en production)
Pour un déploiement en production conteneurisé sans code source local :
# Cloner le dépôt (seulement nécessaire pour docker-compose.yml et les exemples) git clone https://github.com/PrevMedOrg/PrevMed cd PrevMed # Accéder au répertoire docker cd docker # Modifier docker-compose.yml pour définir INSTALL_MODE à "pypi" # Changer la ligne: INSTALL_MODE: local # En: INSTALL_MODE: pypi # Optionnellement modifier la section 'command' pour spécifier les arguments souhaités # Par exemple: --survey-yaml, --scoring-script, --save-user-data, etc. # Lancer le conteneur en mode détaché (construit et installe depuis PyPI) sudo docker compose up --build -d
Note : Le répertoire examples sera monté depuis votre clone local. Vous pouvez également fournir vos propres fichiers YAML et scripts de scoring en modifiant les montages de volumes dans docker-compose.yml.
Méthode 4 : Docker depuis les sources (Développement)
Pour un développement conteneurisé avec le code source local :
# Cloner le dépôt git clone https://github.com/PrevMedOrg/PrevMed cd PrevMed # Accéder au répertoire docker cd docker # S'assurer que INSTALL_MODE est défini à "local" dans docker-compose.yml (c'est la valeur par défaut) # Optionnellement modifier la section 'command' pour spécifier les arguments souhaités # Par exemple: --survey-yaml, --scoring-script, --save-user-data, etc. # Lancer le conteneur en mode détaché (construit depuis les sources locales) sudo docker compose up --build -d
Gestion des volumes :
- Les dossiers
logs/etsurvey_data/sont montés comme volumes pour persister les données entre redémarrages - Le dossier
files/est montĂ© en lecture seule pour servir des fichiers statiques via--files-dir /app/files(les fichiers sont accessibles Ăhttp://<host>:<port>/gradio_api/file=/app/files/<nom-du-fichier>) - Les PDFs sont gĂ©nĂ©rĂ©s en mĂ©moire par dĂ©faut (pas de fichiers sur disque), assurant une confidentialitĂ© maximale
Sécurité du conteneur Docker :
- Le conteneur s'exécute avec l'utilisateur non privilégié
nobody(pas de root) - Le système de fichiers du conteneur est en lecture seule (
read_only: true), sauf pour les volumes montés (logs/etsurvey_data/) - Ces mesures suivent les bonnes pratiques de sécurité Docker et réduisent la surface d'attaque
Cette configuration permet de bénéficier de l'isolation Docker tout en conservant les logs et données importantes, sans créer de fichiers temporaires sur le disque.
Utilisation
Lancement basique
prevmed --survey-yaml <chemin_yaml> --scoring-script <chemin_script>
Exemple avec ProbaLYNCH
Le projet inclut un exemple complet du questionnaire ProbaLYNCH (cf Références et Crédits) pour l'évaluation du risque de syndrome de Lynch :
prevmed --survey-yaml examples/ProbaLYNCH/ProbaLYNCH.yaml --scoring-script examples/ProbaLYNCH/ProbaLYNCH.R
Ceci lancera une interface Gradio accessible via votre navigateur web.
Options de ligne de commande
PrevMed supporte plusieurs options pour personnaliser le comportement de l'application :
Sauvegarde des données utilisateur
Par défaut, aucune donnée utilisateur n'est sauvegardée. Les rapports PDF sont générés en mémoire et brièvement écrits dans /dev/shm (RAM, chmod 600) uniquement pour le téléchargement par le patient — aucun fichier n'est jamais écrit sur disque, aucune réponse ni résultat n'est loggé.
Pour sauvegarder les données utilisateur de manière permanente (dans le répertoire survey_data/), utilisez l'option --save-user-data :
prevmed --survey-yaml examples/ProbaLYNCH/ProbaLYNCH.yaml \
--scoring-script examples/ProbaLYNCH/ProbaLYNCH.R \
--save-user-dataAvec --save-user-data activé, les données suivantes sont sauvegardées :
- Fichiers JSON compressés (
.json.gz) contenant toutes les réponses et résultats - Logs CSV centralisés pour analyse rapide
- Rapports PDF stockés de manière permanente dans
survey_data/
Sans cette option (comportement par défaut) :
- Les PDFs sont générés en mémoire et brièvement écrits dans
/dev/shm(RAM, chmod 600) pour le téléchargement — aucun fichier écrit sur disque - Aucune donnée n'est loggée dans les fichiers CSV
- Aucun fichier JSON n'est sauvegardé
- Respect maximal de la vie privée des patients - empreinte disque nulle