Version fonctionnelle
This commit is contained in:
642
DOCUMENTATION/DOCUMENTATION_36_GUIDE_FRANCAIS.md
Normal file
642
DOCUMENTATION/DOCUMENTATION_36_GUIDE_FRANCAIS.md
Normal file
@@ -0,0 +1,642 @@
|
||||
# 📋 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**
|
||||
Reference in New Issue
Block a user