GitHub

PyPI version License: AGPL v3

đź“– 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

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 :

  1. Le patient remplit le questionnaire sur l'interface web
  2. Un PDF avec les réponses et résultats est généré instantanément
  3. Le patient vient en consultation avec ce PDF
  4. 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/ et survey_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/ et survey_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-data

Avec --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

Autres options utiles

"# Ouvrir automatiquement le navigateur au démarrage prevmed --survey-yaml --scoring-script

Read the original on github.com ↗