chu-iptv/docs/ARCHITECTURE.md
William MERI 7311dd52d5 feat: initialisation CHU-IPTV — Smart Room Hub
- 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é)
2026-06-12 21:56:09 +00:00

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 :

  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)

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