183 lines
5.7 KiB
Markdown
183 lines
5.7 KiB
Markdown
# 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.
|