- Backend API Express/Socket.IO (Auth, Rooms, Requests, Chat, IPTV) - Simulateur TV web (navigation D-Pad, QR pairing, HLS) - PWA Mobile (télécommande, demandes, chat, domotique) - Dashboard Admin (supervision temps réel, alertes sonores) - Docker Compose pour déploiement local - Documentation complète (Vision, Architecture, Roadmap, Sécurité)
11 KiB
11 KiB
Architecture Technique — CHU-IPTV
1. Vue d'Ensemble
┌─────────────────────────────────────────────────────────────────────┐
│ 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
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é)
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 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 :
- Cache IPTV : les flux HLS sont mis en cache localement pour réduire la bande passante WAN.
- Broker MQTT local : les commandes domotiques fonctionnent même si l'API centrale est indisponible.
- File d'attente : les demandes patients sont stockées localement et synchronisées dès que la connectivité est rétablie.
- 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)
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