# 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:**
```json
{
  "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:**
```json
{
  "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:**
```json
{
  "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:**
```json
{
  "stay_id": "string",
  "validation_status": "accepted|rejected|needs_review",
  "comment": "string"
}
```

### POST /stays/{stay_id}/export-pdf
Exporte le codage en PDF.

**Requête:**
```json
{
  "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
```bash
# 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
```bash
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
```bash
pytest tests/test_tim_api.py
```

### Tests d'intégration
```bash
pytest tests/test_tim_integration.py
```

### Couverture de code
```bash
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
```bash
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
