# Architecture Technique — CHU-IPTV ## 1. Vue d'Ensemble ```text ┌─────────────────────────────────────────────────────────────────────┐ │ RÉSEAU HOSPITALIER │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ Android TV │ │ Smartphone │ │ Poste Soignant │ │ │ │ (Chambre) │ │ (Patient) │ │ (Admin Web) │ │ │ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │ │ │ WebSocket │ HTTPS/WS │ HTTPS/WS │ │ └──────────┬────────┴───────────────────────┘ │ │ │ │ │ ┌──────────▼──────────┐ │ │ │ EDGE NODE LOCAL │ ← Docker / Mini-serveur étage │ │ │ (Cache + MQTT + │ │ │ │ Domotique local) │ │ │ └──────────┬──────────┘ │ │ │ gRPC / HTTPS │ │ ┌──────────▼──────────┐ │ │ │ API CENTRALE │ ← NestJS + PostgreSQL + Redis │ │ │ │ │ │ │ ├─ Auth/Sessions │ │ │ │ ├─ Catalogue IPTV │ │ │ │ ├─ Demandes Patient│ │ │ │ ├─ Chat/Visio │ │ │ │ ├─ Domotique │ │ │ │ └─ Audit Log │ │ │ └──────────┬──────────┘ │ │ │ HL7/FHIR │ │ ┌──────────▼──────────┐ │ │ │ SIH (Système │ ← Système existant de l'hôpital │ │ │ d'Information │ │ │ │ Hospitalier) │ │ │ └─────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ``` ## 2. Modules Applicatifs ```text iptv-cosmolan/ ├── apps/ │ ├── android-tv/ # APK Android TV native │ │ ├── app/src/main/ # Kotlin + Compose for TV + Media3 │ │ └── build.gradle.kts │ ├── mobile-web/ # PWA smartphone (React + Vite) │ │ ├── src/ │ │ └── vite.config.ts │ └── admin-web/ # Console soignant (React + Vite) │ ├── src/ │ └── vite.config.ts ├── services/ │ ├── api/ # API centrale NestJS │ │ ├── src/ │ │ │ ├── modules/ │ │ │ │ ├── auth/ # Sessions QR, JWT éphémère │ │ │ │ ├── rooms/ # Gestion chambres/lits │ │ │ │ ├── iptv/ # Catalogue, playlists M3U │ │ │ │ ├── requests/ # Demandes patient (eau, douleur...) │ │ │ │ ├── chat/ # Messagerie temps réel │ │ │ │ ├── domotics/ # Contrôle IoT chambre │ │ │ │ ├── education/ # Contenus thérapeutiques │ │ │ │ └── audit/ # Logs et traçabilité │ │ │ ├── gateways/ # WebSocket Gateway (Socket.IO) │ │ │ └── main.ts │ │ └── prisma/schema.prisma │ ├── stream/ # Service de streaming │ │ ├── src/ │ │ │ ├── m3u-parser.ts # Import/parsing playlists M3U │ │ │ ├── hls-proxy.ts # Proxy HLS pour contrôle d'accès │ │ │ └── epg-sync.ts # Synchronisation guide programmes │ │ └── Dockerfile │ └── mqtt-broker/ # Broker MQTT (Mosquitto) │ ├── mosquitto.conf │ └── acl.conf # Contrôle d'accès par chambre ├── deploy/ │ ├── local/ # Docker Compose dev │ │ └── docker-compose.yml │ ├── android-tv/ # Scripts packaging APK + MDM │ ├── windows-kiosk/ # Config Assigned Access │ └── edge-node/ # Config nœud Edge local │ ├── docker-compose.yml │ └── traefik.yml ├── docs/ │ ├── ARCHITECTURE.md # Ce fichier │ ├── ROADMAP.md # Feuille de route │ ├── SECURITY.md # Politique de sécurité │ └── API.md # Documentation API (OpenAPI) └── tests/ └── scenarios/ # Tests E2E par parcours ├── pairing.spec.ts ├── request-flow.spec.ts ├── chat.spec.ts └── wipe-on-discharge.spec.ts ``` ## 3. Protocoles de Communication | Canal | Protocole | Usage | Justification | | :--- | :--- | :--- | :--- | | TV ↔ API | WebSocket (Socket.IO) | Contrôle temps réel, changement de chaîne, notifications | Bidirectionnel, faible latence, compatible navigateur | | Smartphone ↔ API | HTTPS + WebSocket | REST pour les actions, WS pour les mises à jour live | Standard PWA, fonctionne derrière proxy hospitalier | | Admin ↔ API | HTTPS + WebSocket | Dashboard temps réel, alertes push | Même stack que mobile | | API ↔ Stream | gRPC | Requêtes catalogue, statut flux | Typage fort (Protobuf), performances inter-services | | API ↔ Edge Node | gRPC + MQTT | Synchronisation état, commandes domotique | Résilience si coupure réseau principal | | Edge ↔ Capteurs IoT | MQTT | Domotique (lumières, stores, température) | Léger, publish/subscribe, standard IoT | | API ↔ SIH | HL7 v2 / FHIR REST | Admission, sortie, éducation thérapeutique | Standards d'interopérabilité santé France | ## 4. Modèle de Données (Simplifié) ```text ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Service │────<│ Room │────<│ Device │ │ (Cardio, │ │ (101, 102) │ │ (TV, Sensor)│ │ Ortho...) │ │ │ │ │ └─────────────┘ └──────┬──────┘ └─────────────┘ │ ┌──────▼──────┐ │ Session │ ← Liée au séjour, pas au patient │ (QR token, │ │ expires_at)│ └──────┬──────┘ │ ┌────────────┼────────────┐ │ │ │ ┌──────▼──────┐ ┌──▼────┐ ┌────▼─────┐ │ Request │ │ Chat │ │ AuditLog │ │ (eau, doul.)│ │ Msg │ │ (event) │ └─────────────┘ └───────┘ └──────────┘ ``` ## 5. Sécurité et Conformité ### 5.1 Principes - **Privacy by Design** : aucune donnée nominative patient dans le système IPTV. - **Session éphémère** : le QR code génère un JWT avec TTL court (8h max), lié au lit. - **Wipe automatique** : à réception de l'événement ADT^A03 (sortie patient) via HL7, le système purge toutes les données de session. - **Chiffrement** : TLS 1.3 pour tous les transports, AES-256 pour les logs au repos. - **Audit trail** : chaque action (demande, alerte, changement de chaîne) est journalisée avec horodatage et identifiant de session. ### 5.2 Conformité HDS Si le système est hébergé hors de l'infrastructure locale de l'hôpital : - Le fournisseur cloud DOIT être certifié **HDS** (Hébergeur de Données de Santé). - Les données de session (même pseudonymisées) sont considérées comme données de santé par extension. - Recommandation : privilégier un déploiement **on-premise** (Edge Node + serveur local) pour le MVP. ## 6. Edge Computing : Résilience Locale Le nœud Edge (mini-serveur par étage ou par service) assure : 1. **Cache IPTV** : les flux HLS sont mis en cache localement pour réduire la bande passante WAN. 2. **Broker MQTT local** : les commandes domotiques fonctionnent même si l'API centrale est indisponible. 3. **File d'attente** : les demandes patients sont stockées localement et synchronisées dès que la connectivité est rétablie. 4. **Latence** : les actions critiques (appel, domotique) sont traitées en < 50ms localement vs 200ms+ via le cloud. ## 7. Intégration SIH (Système d'Information Hospitalier) ```text SIH (Epic, Cerner, Meditech, HM, Orbis...) │ │ HL7 v2 (ADT messages) │ ou FHIR REST API ▼ ┌─────────────────────┐ │ Connecteur HL7 │ ← Service dédié │ (Mirth Connect / │ │ HAPI FHIR) │ └──────────┬──────────┘ │ ▼ API Centrale IPTV ├─ Admission (ADT^A01) → Création session chambre ├─ Sortie (ADT^A03) → Wipe automatique ├─ Transfert (ADT^A02) → Migration session └─ Éducation → Push contenus ciblés ```