Files
aivanov_CIM/INTERFACE_TIM_README.md
2026-03-05 01:20:14 +01:00

8.4 KiB

Interface TIM - Documentation Technique

Vue d'ensemble

L'interface TIM (Traitement Interactif Médical) est une interface web moderne multi-panneaux pour la révision et la validation du codage PMSI. Elle permet aux codeurs médicaux de visualiser les codes proposés, leurs justifications, et les documents sources dans une interface intuitive et efficace.

Architecture

Structure des fichiers

src/pipeline_mco_pmsi/api/static/
├── index.html                 # Page principale
├── css/
│   ├── main.css              # Styles principaux
│   ├── details.css           # Styles du panneau détails
│   ├── documents.css         # Styles du panneau documents
│   ├── keyboard.css          # Styles des raccourcis clavier
│   └── accessibility.css     # Améliorations d'accessibilité
├── js/
│   ├── utils/
│   │   ├── state-manager.js        # Gestion d'état centralisée
│   │   ├── api-client.js           # Client API
│   │   ├── event-emitter.js        # Système d'événements
│   │   ├── error-handler.js        # Gestion d'erreurs
│   │   ├── browser-detector.js     # Détection navigateur
│   │   └── performance-optimizer.js # Optimisations
│   └── components/
│       ├── panel-manager.js        # Gestionnaire de panneaux
│       ├── patient-header.js       # En-tête patient
│       ├── codes-panel.js          # Panneau des codes
│       ├── documents-panel.js      # Panneau des documents
│       ├── details-panel.js        # Panneau des détails
│       ├── highlight-manager.js    # Mise en évidence
│       ├── comparison-mode.js      # Mode comparaison
│       ├── keyboard-manager.js     # Raccourcis clavier
│       └── pdf-exporter.js         # Export PDF

Composants principaux

StateManager

Gestion d'état centralisée avec persistance dans localStorage.

Responsabilités:

  • Stocker l'état global (séjour, code sélectionné, document actif, filtres)
  • Notifier les composants des changements via EventEmitter
  • Persister l'état dans localStorage
  • Maintenir la synchronisation entre panneaux

APIClient

Client API pour les communications avec le backend FastAPI.

Responsabilités:

  • Encapsuler toutes les communications avec l'API
  • Gérer les erreurs réseau avec retry et backoff exponentiel
  • Gérer le cache des documents dans localStorage
  • Fournir des méthodes pour tous les endpoints

PanelManager

Gestionnaire du layout multi-panneaux avec redimensionnement.

Responsabilités:

  • Gérer le layout CSS Grid 3 colonnes
  • Implémenter le redimensionnement par glisser-déposer
  • Sauvegarder/restaurer les dimensions dans localStorage
  • Gérer le mode responsive

CodesPanel

Panneau d'affichage des codes proposés.

Responsabilités:

  • Afficher les codes (DP, DR, DAS, CCAM)
  • Afficher les badges de confiance avec couleurs
  • Gérer la sélection de code
  • Implémenter les filtres

DocumentsPanel

Panneau d'affichage des documents sources.

Responsabilités:

  • Système d'onglets pour les documents
  • Affichage du contenu avec mise en évidence
  • Recherche textuelle
  • Navigation entre occurrences

DetailsPanel

Panneau d'affichage des détails d'un code.

Responsabilités:

  • Afficher les informations du code sélectionné
  • Afficher toutes les preuves avec liens vers documents
  • Afficher les faits cliniques liés
  • Afficher le raisonnement du système
  • Gérer les boutons d'action

Fonctionnalités

Layout multi-panneaux

  • 3 panneaux: codes, documents, détails
  • Redimensionnement par glisser-déposer
  • Persistance des dimensions
  • Mode responsive (< 768px)

Navigation et synchronisation

  • Cliquer sur un code affiche ses détails et met en évidence ses preuves
  • Cliquer sur une preuve ouvre le document et scroll vers la zone
  • Cliquer sur une zone mise en évidence sélectionne le code
  • Synchronisation maintenue lors de toute navigation

Filtres et recherche

  • Filtres par type de code, niveau de confiance, sans preuves
  • Recherche textuelle dans les documents
  • Navigation entre occurrences
  • Persistance des filtres

Mode comparaison

  • Affichage côte à côte des codes proposés et corrigés
  • Coloration (rouge pour différences, vert pour identiques)
  • Affichage des commentaires de correction

Raccourcis clavier

  • ↑/↓: Navigation entre codes
  • ←/→: Navigation entre preuves
  • Ctrl+Enter: Valider le séjour
  • Ctrl+E: Ouvrir le modal de correction
  • Ctrl+F: Activer la recherche
  • ?: Afficher l'aide des raccourcis

Export PDF

  • Génération PDF avec jsPDF
  • Inclut codes, preuves, documents, corrections
  • Nommage: codage_{stay_id}_{date}.pdf
  • Téléchargement automatique

Accessibilité

  • Contraste WCAG 2.1 AA
  • Focus visible pour tous les éléments
  • Labels ARIA
  • Navigation clavier complète
  • Taille de police minimale 14px

Sécurité

  • Validation entrées utilisateur
  • Échappement HTML
  • CSP headers
  • Rate limiting (10 req/min)
  • Chiffrement données sensibles

Performance

  • Lazy loading des documents
  • Debounce sur recherche (300ms)
  • Virtual scrolling pour grandes listes
  • Cache des documents
  • Minification CSS/JS

API Endpoints

GET /stays/{stay_id}/coding-proposal

Récupère la proposition de codage d'un séjour.

Réponse:

{
  "stay_id": "string",
  "dp": { "code": "string", "label": "string", "confidence": 0.95, "evidence": [...] },
  "dr": { "code": "string", "label": "string", "confidence": 0.90, "evidence": [...] },
  "das": [...],
  "ccam": [...],
  "reasoning": "string",
  "confidence_scores": {}
}

GET /stays/{stay_id}/clinical-facts

Récupère les faits cliniques d'un séjour.

Réponse:

{
  "stay_id": "string",
  "facts": [
    {
      "text": "string",
      "category": "symptoms|diagnoses|treatments|procedures|history|allergies|medications|lab_results",
      "document_id": "string",
      "span": [start, end],
      "confidence": 0.85,
      "linked_codes": ["code1", "code2"]
    }
  ]
}

POST /stays/{stay_id}/correct-code

Enregistre une correction de code.

Requête:

{
  "stay_id": "string",
  "original_code": "string",
  "corrected_code": "string",
  "corrected_label": "string",
  "comment": "string"
}

POST /stays/{stay_id}/validate

Valide un séjour.

Requête:

{
  "stay_id": "string",
  "validation_status": "accepted|rejected|needs_review",
  "comment": "string"
}

POST /stays/{stay_id}/export-pdf

Exporte le codage en PDF.

Requête:

{
  "include_documents": true,
  "include_evidence": true,
  "include_corrections": true
}

Installation

Prérequis

  • Python 3.9+
  • FastAPI
  • SQLAlchemy
  • Navigateur moderne (Chrome 90+, Firefox 88+, Safari 14+, Edge 90+)

Démarrage

# Installer les dépendances
pip install -r requirements.txt

# Démarrer le serveur
uvicorn pipeline_mco_pmsi.api.tim_api:app --reload

# Accéder à l'interface
http://localhost:8000

Configuration

Variables d'environnement

DATABASE_URL=postgresql://user:pass@localhost/db
ENCRYPTION_KEY=your-encryption-key
LOG_LEVEL=INFO

Configuration CORS

Modifier allow_origins dans tim_api.py pour spécifier les origines autorisées en production.

Tests

Tests unitaires

pytest tests/test_tim_api.py

Tests d'intégration

pytest tests/test_tim_integration.py

Couverture de code

pytest --cov=pipeline_mco_pmsi.api --cov-report=html

Déploiement

Production

  1. Configurer les variables d'environnement
  2. Spécifier les origines CORS autorisées
  3. Activer HTTPS
  4. Configurer le rate limiting
  5. Activer les logs d'audit

Docker

docker build -t tim-interface .
docker run -p 8000:8000 tim-interface

Maintenance

Logs

Les logs sont stockés dans logs/tim_api.log.

Monitoring

  • Utiliser les endpoints de health check
  • Surveiller les erreurs dans les logs
  • Vérifier les performances avec les métriques

Mises à jour

  1. Tester en environnement de développement
  2. Vérifier la compatibilité des navigateurs
  3. Exécuter les tests
  4. Déployer en production
  5. Vérifier les logs

Support

Pour toute question ou problème:

  • Consulter la documentation utilisateur (INTERFACE_TIM_USER_GUIDE.md)
  • Consulter le changelog (INTERFACE_TIM_CHANGELOG.md)
  • Contacter l'équipe de développement

Licence

Copyright © 2025 - Tous droits réservés