163 lines
5.8 KiB
Python
Executable File
163 lines
5.8 KiB
Python
Executable File
#!/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()
|