#!/usr/bin/env python3 """ Script de test pour vérifier que l'interface web TIM fonctionne correctement. """ import requests import json import sys API_BASE = "http://localhost:8001" STAY_ID = "15_23096332" def test_api_connection(): """Test la connexion à l'API.""" print("🔍 Test 1: Connexion à l'API...") try: response = requests.get(f"{API_BASE}/", timeout=5) if response.status_code == 200: print("✅ API accessible") return True else: print(f"❌ API retourne le code {response.status_code}") return False except requests.exceptions.ConnectionError: print("❌ Impossible de se connecter à l'API") print(" Le serveur est-il démarré?") print(" Commande: python -m uvicorn pipeline_mco_pmsi.api.tim_api:app --host 0.0.0.0 --port 8001") return False except Exception as e: print(f"❌ Erreur: {e}") return False def test_coding_proposal(): """Test l'endpoint de proposition de codage.""" print(f"\n🔍 Test 2: Récupération de la proposition de codage pour {STAY_ID}...") try: response = requests.get(f"{API_BASE}/stays/{STAY_ID}/coding-proposal", timeout=10) if response.status_code == 404: print(f"❌ Séjour {STAY_ID} non trouvé") print(" Avez-vous traité ce séjour avec le pipeline?") return False if response.status_code != 200: print(f"❌ Erreur HTTP {response.status_code}") print(f" Réponse: {response.text}") return False data = response.json() print("✅ Données reçues avec succès") print(f" - Stay ID: {data.get('stay_id')}") print(f" - DP: {data.get('dp', {}).get('code')} - {data.get('dp', {}).get('label', 'N/A')[:50]}") print(f" - DR: {data.get('dr', {}).get('code')} - {data.get('dr', {}).get('label', 'N/A')[:50]}") print(f" - DAS: {len(data.get('das', []))} codes") print(f" - CCAM: {len(data.get('ccam', []))} actes") # Vérifier la structure des données if not data.get('dp'): print("⚠️ Attention: Pas de DP") if not data.get('dr'): print("⚠️ Attention: Pas de DR") if not data.get('das'): print("⚠️ Attention: Pas de DAS") if not data.get('ccam'): print("⚠️ Attention: Pas de CCAM") return True except Exception as e: print(f"❌ Erreur: {e}") return False def test_documents(): """Test la récupération des documents.""" print(f"\n🔍 Test 3: Récupération des documents...") try: # D'abord, récupérer la proposition de codage pour obtenir les IDs de documents response = requests.get(f"{API_BASE}/stays/{STAY_ID}/coding-proposal", timeout=10) if response.status_code != 200: print("❌ Impossible de récupérer la proposition de codage") return False data = response.json() # Extraire les IDs de documents depuis les preuves document_ids = set() for code in [data.get('dp'), data.get('dr')] + data.get('das', []) + data.get('ccam', []): if code and code.get('evidence'): for ev in code['evidence']: if ev.get('document_id'): document_ids.add(ev['document_id']) if not document_ids: print("⚠️ Aucun document trouvé dans les preuves") return True print(f" Documents trouvés: {len(document_ids)}") # Tester la récupération d'un document doc_id = list(document_ids)[0] response = requests.get(f"{API_BASE}/documents/{doc_id}", timeout=10) if response.status_code == 200: doc_data = response.json() print(f"✅ Document {doc_id} récupéré") print(f" - Type: {doc_data.get('document_type')}") print(f" - Taille: {len(doc_data.get('content', ''))} caractères") return True else: print(f"❌ Erreur lors de la récupération du document {doc_id}") return False except Exception as e: print(f"❌ Erreur: {e}") return False def main(): """Fonction principale.""" print("=" * 60) print("Test de l'Interface Web TIM") print("=" * 60) results = [] # Test 1: Connexion API results.append(test_api_connection()) if not results[0]: print("\n❌ Le serveur API n'est pas accessible. Arrêt des tests.") sys.exit(1) # Test 2: Proposition de codage results.append(test_coding_proposal()) # Test 3: Documents results.append(test_documents()) # Résumé print("\n" + "=" * 60) print("Résumé des tests") print("=" * 60) print(f"Tests réussis: {sum(results)}/{len(results)}") if all(results): print("\n✅ Tous les tests sont passés!") print("\n📝 Prochaines étapes:") print(" 1. Ouvrir http://localhost:8001 dans votre navigateur") print(f" 2. Entrer l'ID du séjour: {STAY_ID}") print(" 3. Cliquer sur 'Charger le séjour'") print(" 4. Si rien ne s'affiche, ouvrir la console (F12) pour voir les erreurs") sys.exit(0) else: print("\n❌ Certains tests ont échoué") print("\n📝 Actions recommandées:") print(" 1. Vérifier que le serveur API est démarré") print(" 2. Vérifier que le séjour a été traité par le pipeline") print(" 3. Consulter DIAGNOSTIC_INTERFACE_WEB.md pour plus de détails") sys.exit(1) if __name__ == "__main__": main()