Initial commit
This commit is contained in:
173
test_sejour_15.py
Normal file
173
test_sejour_15.py
Normal file
@@ -0,0 +1,173 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test rapide du séjour 15_23096332
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
from pipeline_mco_pmsi.database.base import get_engine, get_session
|
||||
from pipeline_mco_pmsi.database.models import StayDB, ClinicalDocumentDB
|
||||
from pipeline_mco_pmsi.models.clinical import ClinicalDocument
|
||||
from pipeline_mco_pmsi.models.metadata import StayMetadata
|
||||
from pipeline_mco_pmsi.rag.rag_engine import RAGEngine
|
||||
from pipeline_mco_pmsi.rag.referentiels_manager import ReferentielsManager
|
||||
from pipeline_mco_pmsi.extractors.clinical_facts_extractor import ClinicalFactsExtractor
|
||||
from pipeline_mco_pmsi.coders.codeur import Codeur
|
||||
|
||||
print("=" * 60)
|
||||
print("TEST DU SÉJOUR 15_23096332")
|
||||
print("=" * 60)
|
||||
|
||||
# 1. Charger le séjour depuis la base
|
||||
print("\n1️⃣ Chargement du séjour depuis la base...")
|
||||
engine = get_engine('sqlite:///pipeline_mco_pmsi.db')
|
||||
|
||||
with get_session(engine) as session:
|
||||
stay = session.query(StayDB).filter(StayDB.stay_id == '15_23096332').first()
|
||||
|
||||
if not stay:
|
||||
print("❌ Séjour non trouvé")
|
||||
exit(1)
|
||||
|
||||
print(f"✅ Séjour trouvé: {stay.stay_id}")
|
||||
print(f" Spécialité: {stay.specialty}")
|
||||
|
||||
# Récupérer les documents
|
||||
docs_db = session.query(ClinicalDocumentDB).filter(
|
||||
ClinicalDocumentDB.stay_id == stay.id
|
||||
).order_by(ClinicalDocumentDB.priority).all()
|
||||
|
||||
print(f" Documents: {len(docs_db)}")
|
||||
|
||||
# Créer les métadonnées du séjour (nécessaire pour process_documents)
|
||||
stay_metadata = StayMetadata(
|
||||
stay_id=stay.stay_id,
|
||||
admission_date=stay.admission_date,
|
||||
discharge_date=stay.discharge_date,
|
||||
specialty=stay.specialty
|
||||
)
|
||||
|
||||
# Convertir en modèles Pydantic
|
||||
documents = []
|
||||
for doc_db in docs_db:
|
||||
doc = ClinicalDocument(
|
||||
document_id=doc_db.document_id,
|
||||
document_type=doc_db.document_type,
|
||||
content=doc_db.content,
|
||||
creation_date=doc_db.creation_date,
|
||||
author=doc_db.author or 'Inconnu',
|
||||
priority=doc_db.priority
|
||||
)
|
||||
documents.append(doc)
|
||||
print(f" - {doc.document_id}: {doc.document_type} ({len(doc.content)} car.)")
|
||||
|
||||
# 2. Initialiser le RAG Engine
|
||||
print("\n2️⃣ Initialisation du moteur RAG...")
|
||||
referentiels_manager = ReferentielsManager(data_dir=Path('data/referentiels'))
|
||||
rag_engine = RAGEngine(referentiels_manager=referentiels_manager)
|
||||
print("✅ RAG Engine initialisé")
|
||||
|
||||
# 3. Segmentation des documents en sections
|
||||
print("\n3️⃣ Segmentation des documents en sections...")
|
||||
|
||||
from pipeline_mco_pmsi.processors.document_processor import DocumentProcessor
|
||||
|
||||
processor = DocumentProcessor()
|
||||
|
||||
try:
|
||||
structured_stay = processor.process_documents(
|
||||
documents=documents,
|
||||
stay_metadata=stay_metadata
|
||||
)
|
||||
print(f"✅ {len(structured_stay.sections)} sections créées")
|
||||
|
||||
# Afficher quelques sections
|
||||
for i, section in enumerate(structured_stay.sections[:3], 1):
|
||||
print(f" {i}. {section.section_type}: {section.content[:80]}...")
|
||||
|
||||
if len(structured_stay.sections) > 3:
|
||||
print(f" ... et {len(structured_stay.sections) - 3} autres sections")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur lors de la segmentation: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
exit(1)
|
||||
|
||||
# 4. Extraction des faits cliniques
|
||||
print("\n4️⃣ Extraction des faits cliniques...")
|
||||
print(" ⏳ Cela peut prendre 1-2 minutes...")
|
||||
|
||||
extractor = ClinicalFactsExtractor()
|
||||
|
||||
try:
|
||||
facts = extractor.extract_facts(structured_stay)
|
||||
print(f"✅ {len(facts)} faits extraits")
|
||||
|
||||
# Afficher quelques faits
|
||||
for i, fact in enumerate(facts[:5], 1):
|
||||
print(f" {i}. [{fact.type}] {fact.text[:80]}...")
|
||||
print(f" Certitude: {fact.qualifier.certainty}, Temporalité: {fact.temporality}")
|
||||
|
||||
if len(facts) > 5:
|
||||
print(f" ... et {len(facts) - 5} autres faits")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur lors de l'extraction: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
exit(1)
|
||||
|
||||
# 5. Codage
|
||||
print("\n5️⃣ Proposition de codes CIM-10 et CCAM...")
|
||||
print(" ⏳ Cela peut prendre 2-3 minutes...")
|
||||
|
||||
codeur = Codeur(rag_engine=rag_engine)
|
||||
|
||||
try:
|
||||
coding_proposal = codeur.propose_codes(
|
||||
facts=facts,
|
||||
stay_metadata=stay_metadata
|
||||
)
|
||||
|
||||
print("✅ Codage terminé")
|
||||
print(f"\n📊 RÉSULTATS:")
|
||||
print(f"\n DP (Diagnostic Principal):")
|
||||
if coding_proposal.dp:
|
||||
print(f" {coding_proposal.dp.code} - {coding_proposal.dp.label}")
|
||||
print(f" Confiance: {coding_proposal.dp.confidence:.2%}")
|
||||
print(f" Justification: {coding_proposal.dp.reasoning[:150]}...")
|
||||
else:
|
||||
print(" Non proposé")
|
||||
|
||||
print(f"\n DR (Diagnostic Relié):")
|
||||
if coding_proposal.dr:
|
||||
print(f" {coding_proposal.dr.code} - {coding_proposal.dr.label}")
|
||||
print(f" Confiance: {coding_proposal.dr.confidence:.2%}")
|
||||
else:
|
||||
print(" Non proposé")
|
||||
|
||||
print(f"\n DAS (Diagnostics Associés Significatifs): {len(coding_proposal.das)}")
|
||||
for i, das in enumerate(coding_proposal.das[:5], 1):
|
||||
print(f" {i}. {das.code} - {das.label}")
|
||||
print(f" Confiance: {das.confidence:.2%}")
|
||||
|
||||
if len(coding_proposal.das) > 5:
|
||||
print(f" ... et {len(coding_proposal.das) - 5} autres DAS")
|
||||
|
||||
print(f"\n CCAM (Actes): {len(coding_proposal.ccam)}")
|
||||
for i, ccam in enumerate(coding_proposal.ccam[:5], 1):
|
||||
print(f" {i}. {ccam.code} - {ccam.label}")
|
||||
print(f" Confiance: {ccam.confidence:.2%}")
|
||||
|
||||
if len(coding_proposal.ccam) > 5:
|
||||
print(f" ... et {len(coding_proposal.ccam) - 5} autres actes")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur lors du codage: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
exit(1)
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("✅ TEST TERMINÉ AVEC SUCCÈS")
|
||||
print("=" * 60)
|
||||
Reference in New Issue
Block a user