# Diagnostic Interface Web TIM - Problème d'Affichage ## Date: 2026-02-12 ## Problème Rapporté L'utilisateur rapporte que "Rien ne s'affiche, l'interface ne fonctionne toujours pas" malgré que l'API fonctionne correctement. ## Diagnostic Effectué ### 1. ✅ Serveur API Fonctionnel ```bash # Test de l'API curl http://localhost:8001/stays/15_23096332/coding-proposal # Résultat: ✅ L'API retourne correctement les données JSON # - DP: F05.0 (Délirium) # - DR: K80 (Cholélithiase) # - 25 DAS # - 29 CCAM ``` ### 2. ✅ Architecture JavaScript Modulaire L'interface utilise une architecture modulaire avec: - `EventEmitter` - Système d'événements - `StateManager` - Gestion d'état centralisée - `CodesPanel` - Affichage des codes - `PatientHeader` - En-tête patient - `DocumentsPanel` - Affichage des documents - `DetailsPanel` - Détails des codes ### 3. 🔍 Problèmes Identifiés #### A. Serveur non démarré automatiquement - L'utilisateur doit démarrer manuellement le serveur avec: ```bash python -m uvicorn pipeline_mco_pmsi.api.tim_api:app --host 0.0.0.0 --port 8001 ``` #### B. Possible erreur JavaScript dans la console - Les composants s'abonnent aux événements du `StateManager` - Si une erreur se produit lors de l'initialisation, rien ne s'affiche - L'utilisateur doit ouvrir la console du navigateur (F12) pour voir les erreurs #### C. Structure de données attendue vs reçue - Le code `loadStay()` crée un objet `stay` avec la structure: ```javascript { stay_id: "15_23096332", age: null, patient: { id, birthDate, sex, weight, height }, admission: { date, mode, specialty }, discharge: { date, mode }, codes: { dp, dr, das, ccam }, documents: [] } ``` - Cette structure est correcte et devrait fonctionner ## Solutions Proposées ### Solution 1: Démarrer le serveur API ```bash # Méthode 1: Démarrage manuel python -m uvicorn pipeline_mco_pmsi.api.tim_api:app --host 0.0.0.0 --port 8001 # Méthode 2: Utiliser le script fourni ./start_api_server.sh ``` ### Solution 2: Vérifier la console du navigateur 1. Ouvrir l'interface: http://localhost:8001 2. Appuyer sur F12 pour ouvrir les outils de développement 3. Aller dans l'onglet "Console" 4. Chercher les erreurs JavaScript (en rouge) 5. Chercher les logs de diagnostic: - "Application initialized, filters reset" - "CodesPanel.render() called with stay:" - "Stay codes:" ### Solution 3: Tester avec l'interface de diagnostic Ouvrir le fichier `test_interface.html` dans un navigateur pour vérifier que l'API fonctionne: ```bash # Ouvrir dans le navigateur firefox test_interface.html # ou google-chrome test_interface.html ``` ### Solution 4: Vérifier les filtres du StateManager Le `StateManager` peut avoir des filtres actifs qui cachent tous les codes. Vérifier dans la console: ```javascript // Dans la console du navigateur console.log(stateManager.getFilters()); // Devrait afficher: { codeType: [], confidenceLevel: [], withoutEvidence: false } // Si les filtres sont incorrects, les réinitialiser: stateManager.setFilters({ codeType: [], confidenceLevel: [], withoutEvidence: false }); ``` ## Prochaines Étapes 1. **Démarrer le serveur API** (si ce n'est pas déjà fait) 2. **Ouvrir l'interface** dans le navigateur: http://localhost:8001 3. **Entrer l'ID du séjour**: 15_23096332 4. **Cliquer sur "Charger le séjour"** 5. **Ouvrir la console** (F12) pour voir les logs et erreurs 6. **Rapporter les erreurs** si l'interface ne fonctionne toujours pas ## Commandes Utiles ```bash # Vérifier si le serveur est démarré curl http://localhost:8001/ # Tester l'endpoint de codage curl http://localhost:8001/stays/15_23096332/coding-proposal | python3 -m json.tool # Voir les logs du serveur tail -f api_server.log # Arrêter le serveur pkill -f "uvicorn pipeline_mco_pmsi.api.tim_api" # Redémarrer le serveur python -m uvicorn pipeline_mco_pmsi.api.tim_api:app --host 0.0.0.0 --port 8001 --reload ``` ## Notes Techniques ### Architecture de l'Interface ``` index.html ├── EventEmitter (base pour tous les composants) ├── StateManager (gestion d'état centralisée) │ ├── currentStay │ ├── selectedCode │ ├── activeDocument │ └── filters ├── PatientHeader (s'abonne à 'stayChanged') ├── CodesPanel (s'abonne à 'stayChanged', 'filtersChanged') ├── DocumentsPanel (s'abonne à 'stayChanged', 'documentChanged') └── DetailsPanel (s'abonne à 'codeSelected') ``` ### Flux de Données 1. Utilisateur entre l'ID du séjour et clique sur "Charger" 2. `loadStay()` appelle l'API `/stays/{stay_id}/coding-proposal` 3. Les données sont transformées en objet `stay` 4. `stateManager.setCurrentStay(stay)` est appelé 5. L'événement `stayChanged` est émis 6. Tous les composants abonnés se mettent à jour: - `PatientHeader.render(stay)` affiche les infos patient - `CodesPanel.render(stay)` affiche les codes - `DocumentsPanel` charge les documents 7. L'interface passe de l'écran de recherche au layout 3 panneaux ### Points de Défaillance Possibles 1. **Erreur réseau**: L'API ne répond pas (serveur non démarré) 2. **Erreur CORS**: Le navigateur bloque les requêtes cross-origin 3. **Erreur JavaScript**: Une exception empêche l'initialisation des composants 4. **Filtres actifs**: Les filtres du StateManager cachent tous les codes 5. **Structure de données**: Les données de l'API ne correspondent pas à la structure attendue ## Conclusion Le problème le plus probable est que **le serveur API n'est pas démarré**. Une fois démarré, l'interface devrait fonctionner correctement. Si ce n'est pas le cas, il faut vérifier la console du navigateur pour identifier l'erreur JavaScript spécifique.