Files
EB_Dashboard/DOCUMENTATION/DOCUMENTATION_36_GUIDE_FRANCAIS.md

16 KiB
Raw Blame History

📋 Endobest Dashboard - Documentation Complète (Français)

Synthèse complète du système - Guide de référence


📌 À Propos du Projet

Le Dashboard Endobest est un système automatisé hautement performant de collecte et de traitement de données pour l'étude clinique Endobest. Il récupère les données d'inclusion des patients à partir de plusieurs centres hospitaliers via les APIs Ziwig (RC, GDD, IAM) et génère des rapports JSON et Excel avec validation complète de la qualité.

Caractéristiques Principales

Configuration 100% externalisée - Excel, zéro modification de code Performance optimisée - 4-5x plus rapide grâce aux appels API optimisés Multithreading avancé - 20+ workers parallèles Qualité assurée - Contrôles de cohérence + tests de non-régression Export flexible - JSON + Excel avec filtrage/tri/transformation Robustesse - Gestion d'erreurs, token refresh auto, retry automatiques


🏗️ Structure du Projet

Modules Python

eb_dashboard.py                    (57.5 KB) - Orchestrateur principal
└─ Coordonne l'authentification, la collecte, le traitement des données

eb_dashboard_utils.py              (6.4 KB) - Utilitaires
└─ Clients HTTP thread-safe, navigation JSON, résolution chemins

eb_dashboard_quality_checks.py     (58.5 KB) - Validation de qualité
└─ Tests de cohérence, non-régression, contrôles de régression

eb_dashboard_excel_export.py       (32 KB) - Export Excel
└─ Génération de classeurs configurables, filtrage, tri, remplissage

Configuration & Documentation

config/
├─ Endobest_Dashboard_Config.xlsx  - Configuration maître (5 feuilles)
│  ├─ Inclusions_Mapping: Définition des champs
│  ├─ Organizations_Mapping: Champs d'organisation
│  ├─ Excel_Workbooks: Métadonnées des classeurs
│  ├─ Excel_Sheets: Configuration des feuilles
│  └─ Regression_Check: Règles de validation
│
├─ eb_org_center_mapping.xlsx      - Enrichissement organisations (optionnel)
│
└─ templates/                      - Modèles Excel
   ├─ Endobest_Template.xlsx
   ├─ Statistics_Template.xlsx
   └─ (Autres modèles)

DOCUMENTATION_10_ARCHITECTURE.md   - Architecture système (43.7 KB)
DOCUMENTATION_11_FIELD_MAPPING.md  - Extraction et transformation (56.3 KB)
DOCUMENTATION_12_QUALITY_CHECKS.md - Validation et qualité (60.2 KB)
DOCUMENTATION_13_EXCEL_EXPORT.md   - Génération Excel (29.6 KB)
DOCUMENTATION_98_USER_GUIDE.md     - Guide utilisateur (8.4 KB)
DOCUMENTATION_99_CONFIG_GUIDE.md   - Guide configuration (24.8 KB)

🚀 Démarrage Rapide

Installation

# 1. Python 3.7+
python --version

# 2. Dépendances
pip install httpx openpyxl questionary tqdm rich

# Optionnel (pour recalcul formules Excel)
pip install pywin32
pip install pytz

Exécution Simple

# Mode 1: Collecte complète (recommandé)
python eb_dashboard.py
# → Collecte + Validation + Export JSON + Excel

# Mode 2: Export Excel rapide (5-15 sec)
python eb_dashboard.py --excel_only
# → Utilise données JSON existantes

# Mode 3: Validation uniquement
python eb_dashboard.py --check-only
# → Teste les données sans export

# Mode 4: Mode debug
python eb_dashboard.py --debug
# → Logs détaillés dans dashboard.log

Identifiants par Défaut

Login: ziwig-invest2@yopmail.com
Mot de passe: pbrrA765$bP3beiuyuiyhiuy!agx
Threads: 12 (ajustable 1-20)

📊 Flux de Données Principal

5 Phases d'Exécution

PHASE 1: INITIALISATION (2-3 sec)
│
├─ Authentification IAM
├─ Échange de token RC
├─ Chargement configuration
└─ Setup thread pools
│
PHASE 2: ORGANISATIONS & COMPTEURS (5-8 sec)
│
├─ GET /api/inclusions/getAllOrganizations
├─ POST /api/inclusions/inclusion-statistics (20 workers)
├─ Enrichissement centre optionnel
└─ Tri organisations
│
PHASE 3: COLLECTE INCLUSIONS (2-4 min)
│
├─ Boucle Orgs: 20 workers parallèles
├─ Pour chaque patient:
│  ├─ Récupération dossier clinique
│  ├─ Récupération questionnaires (⚡ 1 appel optimisé!)
│  ├─ Récupération requêtes lab (async)
│  └─ Traitement champs selon configuration
└─ Combinaison de toutes les inclusions
│
PHASE 4: CONTRÔLE QUALITÉ (10-15 sec)
│
├─ Cohérence: API stats vs données réelles
├─ Non-régression: comparaison avec exécution précédente
└─ Confirmation utilisateur si problèmes critiques
│
PHASE 5: EXPORT (3-20 sec)
│
├─ Sauvegarde fichiers JSON
├─ Génération classeurs Excel
└─ Logs + temps écoulé

⚙️ Configuration (Excel)

Fichier Principal: Endobest_Dashboard_Config.xlsx

Feuille 1: Inclusions_Mapping

Définit les champs patients à extraire

Colonne Type Exemple Usage
field_group Texte Patient_Identification Groupe logique
field_name Texte Patient_Id Nom interne
source_type Texte q_id / record / inclusion / request / calculated Où récupérer
source_value Texte questionnaire_uuid Valeur source
field_path JSON ["patient_id"] Chemin JSON
field_condition Texte Consent_Signed Condition d'exécution
value_labels JSON {...} Mappage valeurs
field_template Texte $value% Formatage
true_if_any JSON [...] Conversion booléenne

Feuille 2: Organizations_Mapping

Champs d'organisation (rarement modifié)

Feuille 3: Excel_Workbooks

Définit les fichiers Excel à créer

Colonne Exemple
workbook_name Endobest_Output
template_path templates/Endobest_Template.xlsx
output_filename {workbook_name}_{extract_date_time}.xlsx
output_exists_action Overwrite / Increment / Backup

Feuille 4: Excel_Sheets

Configure le contenu et les transformations

Colonne Exemple
workbook_name Endobest_Output
sheet_name Inclusions
source_type Inclusions / Organizations / Variable
target DataTable (named range)
column_mapping JSON: {"col_id": "patient_id", ...}
filter_condition JSON: {"status": "active"}
sort_keys JSON: [{"field": "date", "order": "desc"}]
value_replacement JSON: [{"type": "bool", ...}]

Feuille 5: Regression_Check

Règles de validation de qualité

Colonne Signification
rule_name Nom de la règle
field_selection Pipeline include/exclude
bloc_scope Organisations concernées
transitions Changements attendus
severity Warning / Critical

Fichier Optionnel: eb_org_center_mapping.xlsx

Enrichit organisations avec identifiants centres

Org_Center_Mapping sheet:
│
├─ Organization_Name | Center_Name
├─ Hospital A        | HOSP-A
├─ Hospital B        | HOSP-B
└─ ...

🔄 Cycle de Traitement des Champs

Pour chaque champ configuré:

1. SOURCE
   ├─ Questionnaire (q_id/q_name/q_category)
   ├─ Record (dossier clinique)
   ├─ Inclusion (données inclusion patient)
   ├─ Request (requête lab)
   └─ Calculated (fonction personnalisée)
   │
2. EXTRACTION
   ├─ Navigation JSON avec chemin
   ├─ Support wildcards (*)
   └─ Valeur brute ou "undefined"
   │
3. CONDITION
   ├─ Si condition = false → "N/A"
   ├─ Si condition = undefined → "undefined"
   └─ Sinon → continuer
   │
4. TRANSFORMATION
   ├─ true_if_any (booléen)
   ├─ value_labels (texte localisé)
   ├─ field_template (formatage)
   └─ List joining (aplatissement)
   │
5. STOCKAGE
   └─ output_inclusion[groupe][champ] = valeur_finale

🛡️ Gestion d'Erreurs

Stratégie de Récupération

APPEL API
  │
  ├─ Succès (200-299)
  │  └─→ Retour réponse
  │
  └─ Erreur
     ├─ HTTP 401 (Token expiré)
     │  └─→ Refresh token automatique + Retry
     ├─ Erreur réseau
     │  └─→ Retry après 0.5 sec
     ├─ Autre erreur HTTP
     │  └─→ Retry après 0.5 sec
     │
     └─ Max 10 tentatives (ERROR_MAX_RETRY)
        └─ Si écec: Erreur critique → Exit

Dégradation Gracieuse

  • Fichier org mapping manquant? → Ignoré silencieusement
  • Template Excel manquant? → Erreur claire avec chemin
  • Problèmes qualité critiques? → Confirmation utilisateur
  • Erreur thread? → Shutdown gracieux, conservation données partielles

📈 Performance & Optimisations

Impact Optimisation API Questionnaires

AVANT (Lent):
└─ 1,200 patients × 15 questionnaires
   = 18,000 appels API
   = 15-30 minutes

APRÈS (Optimisé):
└─ 1,200 patients × 1 appel
   = 1,200 appels API
   = 2-5 minutes
   = GAIN: 3-6x plus rapide ⚡

Temps Typiques

Étape Durée
Login + Config 2-3 sec
Compteurs (20 workers) 5-8 sec
Inclusions (avec APIs) 2-4 min
Checks qualité 10-15 sec
Export JSON 3-5 sec
Export Excel 5-15 sec
TOTAL 2.5-5 min

Contrôles de Qualité

1. Test de Cohérence

Vérifie que les compteurs API correspondent aux données réelles

Pour chaque organisation:
  API Count = statistiques fournies
  Actual Count = enregistrements collectés

  Δ ≤ 10%  → ⚠️  Avertissement
  Δ > 10%  → 🔴 Critique

2. Test de Non-Régression

Détecte changements inattendus vs exécution précédente

Règles configurables:
├─ Sélection champs (pipeline include/exclude)
├─ Patterns de transition (états attendus)
├─ Exceptions (organisations spécifiques)
└─ Sévérité (Warning/Critical)

Détections:
├─ Nouvelles inclusions
├─ Inclusions supprimées
├─ Changements champs
└─ Transitions d'état invalides

📁 Fichiers de Sortie

JSON Files

endobest_inclusions.json (~6-7 MB)

[
  {
    "Patient_Identification": {
      "Organisation_Id": "...",
      "Organisation_Name": "...",
      "Center_Name": "...",
      "Patient_Id": "...",
      "Pseudo": "...",
      "Patient_Name": "...",
      "Patient_Birthday": "...",
      "Patient_Age": ...
    },
    "Inclusion": { ... },
    "Extended_Fields": { ... },
    "Endotest": { ... }
  }
]

endobest_organizations.json (~17-20 KB)

[
  {
    "id": "org-uuid",
    "name": "Hospital A",
    "Center_Name": "HOSP-A",
    "patients_count": 45,
    "preincluded_count": 8,
    "included_count": 35,
    "prematurely_terminated_count": 2
  }
]

Excel Files

Générés selon configuration, avec:

  • Filtrage (conditions AND)
  • Tri (multi-clés avec datetime)
  • Remplacement valeurs (strict type matching)
  • Remplissage cellules/plages nommées
  • Recalcul formules (optionnel via win32com)

Log File

dashboard.log

  • Événements par exécution
  • Avertissements API
  • Erreurs avec contexte
  • Statistiques exécution

🎯 Fonctions Personnalisées

Fonctions Disponibles (Block 6)

1. search_in_fields_using_regex

Recherche pattern dans plusieurs champs

{
  "source_id": "search_in_fields_using_regex",
  "field_path": [".*surgery.*", "Indication", "Previous_Surgery"]
}

2. extract_parentheses_content

Extrait texte entre parenthèses

{
  "source_id": "extract_parentheses_content",
  "field_path": ["Status_Field"]
}

3. append_terminated_suffix

Ajoute suffixe si prématurément terminé

{
  "source_id": "append_terminated_suffix",
  "field_path": ["Inclusion_Status", "IsPrematurelyTerminated"]
}

4. if_then_else

Logique conditionnelle unifiée

{
  "source_id": "if_then_else",
  "field_path": ["is_defined", "Patient_Id", "$\"DEFINED\"", "$\"UNDEFINED\""]
}

Opérateurs: is_true, is_false, is_defined, is_undefined, all_true, all_defined, ==, !=


🔑 APIs Utilisées

Authentification (IAM)

POST https://api-auth.ziwig-connect.com/api/auth/ziwig-pro/login
Request: {username, password}
Response: {access_token, userId}

POST https://api-hcp.ziwig-connect.com/api/auth/config-token
Headers: Authorization: Bearer {master_token}
Response: {access_token, refresh_token}

Research Clinic (RC)

GET /api/inclusions/getAllOrganizations
POST /api/inclusions/inclusion-statistics
POST /api/inclusions/search?limit=1000&page=1
POST /api/records/byPatient
POST /api/surveys/filter/with-answers ⚡ OPTIMISÉE

Lab (GDD)

GET /api/requests/by-tube-id/{tubeId}

📚 Documentation Détaillée

Document Contenu
DOCUMENTATION_10_ARCHITECTURE.md Design système, APIs, multithreading
DOCUMENTATION_11_FIELD_MAPPING.md Extraction champs, fonctions, exemples
DOCUMENTATION_12_QUALITY_CHECKS.md Framework QA, règles régression
DOCUMENTATION_13_EXCEL_EXPORT.md Génération Excel, pipeline transformation
DOCUMENTATION_98_USER_GUIDE.md Instructions utilisateur, FAQ
DOCUMENTATION_99_CONFIG_GUIDE.md Référence configuration, tableaux Excel

🆘 Dépannage Courant

Problème Cause Solution
Login échoue Credentials invalides Vérifier identifiants
Template non trouvé Chemin incorrect Vérifier config/templates/
Pas de données Excel Filtre trop restrictif Vérifier filter_condition
Script lent Trop peu de threads Augmenter jusqu'à 20
Erreur configuration JSON invalide Valider JSON dans Excel

🎯 Cas d'Usage Typiques

1. Collecte Hebdomadaire

# Programmé chaque lundi 6h
python eb_dashboard.py

2. Reconfiguration Rapide

# Modification fichier Excel config
python eb_dashboard.py --excel_only
# Résultats en 5-15 secondes

3. Vérification Qualité

python eb_dashboard.py --check-only
# Validation avant distribution

4. Débogage

python eb_dashboard.py --debug
# Consulter dashboard.log

🔐 Sécurité

⚠️ Points Importants:

  • Fichiers JSON contiennent données patients
  • Stocker en lieu sûr
  • Gérer selon protocoles établis
  • Supprimer fichiers _old si inutiles
  • Logs peuvent contenir infos sensibles

💡 Bonnes Pratiques

  1. Première exécution: Toujours mode complet (collecte)
  2. Configurations: Tester avec --excel_only
  3. Programmation: Utiliser task scheduler ou cron
  4. Threads: Plus = plus rapide (mais utilisation réseau)
  5. Sauvegardes: Les fichiers _old sont automatiques

📞 Support

Vérifications

  1. Consulter ce document
  2. Consulter FAQ (DOCUMENTATION_98_USER_GUIDE.md)
  3. Consulter dashboard.log
  4. Exécuter avec --debug

Logs

# Dernières 50 lignes
tail -n 50 dashboard.log

# Erreurs uniquement
grep ERROR dashboard.log

# Exécution spécifique
grep "2025-01-15" dashboard.log

Points Forts

Configuration 100% Excel (zéro code) Performance 4-5x supérieure Gestion erreurs robuste Interface utilisateur conviviale Architecture maintenable Documentation complète Prêt production


📝 Résumé Technique

  • Langage: Python 3.7+
  • Modules: httpx, openpyxl, questionary, tqdm, rich
  • Architecture: Multi-threading, async I/O
  • Configuration: 100% Excel (5 feuilles)
  • Export: JSON + Excel
  • Validation: Cohérence + non-régression
  • Performance: 2.5-5 minutes (1,200+ patients)
  • Logging: dashboard.log complet

🎓 Prochaines Étapes

Démarrage:

  1. Installer Python 3.7+
  2. pip install httpx openpyxl questionary tqdm rich
  3. python eb_dashboard.py

Configuration:

  1. Consulter DOCUMENTATION_99_CONFIG_GUIDE.md
  2. Éditer config/Endobest_Dashboard_Config.xlsx
  3. Ajouter/modifier champs selon besoin

Avancé:

  1. DOCUMENTATION_11_FIELD_MAPPING.md (extraction)
  2. DOCUMENTATION_12_QUALITY_CHECKS.md (validation)
  3. DOCUMENTATION_13_EXCEL_EXPORT.md (export)

Version: 1.0 Date: 2025-11-08 Statut: Production Ready Langue: Français (avec documentation anglaise complète)

Pour plus de détails, consultez les fichiers DOCUMENTATION_*.md