# 📋 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 ```bash # 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 ```bash # 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) ```json [ { "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) ```json [ { "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 ```json { "source_id": "search_in_fields_using_regex", "field_path": [".*surgery.*", "Indication", "Previous_Surgery"] } ``` #### 2. extract_parentheses_content Extrait texte entre parenthĂšses ```json { "source_id": "extract_parentheses_content", "field_path": ["Status_Field"] } ``` #### 3. append_terminated_suffix Ajoute suffixe si prĂ©maturĂ©ment terminĂ© ```json { "source_id": "append_terminated_suffix", "field_path": ["Inclusion_Status", "IsPrematurelyTerminated"] } ``` #### 4. if_then_else Logique conditionnelle unifiĂ©e ```json { "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 ```bash # ProgrammĂ© chaque lundi 6h python eb_dashboard.py ``` ### 2. Reconfiguration Rapide ```bash # Modification fichier Excel config python eb_dashboard.py --excel_only # RĂ©sultats en 5-15 secondes ``` ### 3. VĂ©rification QualitĂ© ```bash python eb_dashboard.py --check-only # Validation avant distribution ``` ### 4. DĂ©bogage ```bash 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 ```bash # 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**