- 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é)
181 lines
11 KiB
Markdown
181 lines
11 KiB
Markdown
# 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
|
|
```
|