diff --git a/agent_v0/agent_v1/config.py b/agent_v0/agent_v1/config.py index ce1a08842..dde33226b 100644 --- a/agent_v0/agent_v1/config.py +++ b/agent_v0/agent_v1/config.py @@ -38,6 +38,11 @@ SCREENSHOT_QUALITY = 85 # Désactiver avec RPA_BLUR_SENSITIVE=false pour le développement/tests BLUR_SENSITIVE = os.environ.get("RPA_BLUR_SENSITIVE", "true").lower() in ("true", "1", "yes") +# Retention des logs — minimum 6 mois (180 jours) requis par le Reglement IA +# (Article 12 — journalisation automatique, Article 26(6) — conservation minimum) +# Configurable via variable d'environnement pour permettre l'ajustement +LOG_RETENTION_DAYS = int(os.environ.get("RPA_LOG_RETENTION_DAYS", "180")) + # Monitoring PERF_MONITOR_INTERVAL_S = 30 LOGS_DIR = BASE_DIR / "logs" diff --git a/agent_v0/agent_v1/main.py b/agent_v0/agent_v1/main.py index 4dd136602..eded86e36 100644 --- a/agent_v0/agent_v1/main.py +++ b/agent_v0/agent_v1/main.py @@ -14,7 +14,7 @@ import uuid import time import logging import threading -from .config import SESSIONS_ROOT, AGENT_VERSION, SERVER_URL, MACHINE_ID +from .config import SESSIONS_ROOT, AGENT_VERSION, SERVER_URL, MACHINE_ID, LOG_RETENTION_DAYS from .core.captor import EventCaptorV1 from .core.executor import ActionExecutorV1 from .network.streamer import TraceStreamer @@ -51,7 +51,8 @@ class AgentV1: self.session_dir = None # Gestion du stockage local et nettoyage - self.storage = SessionStorage(SESSIONS_ROOT) + # Retention minimum 6 mois (Reglement IA, Article 12) + self.storage = SessionStorage(SESSIONS_ROOT, retention_days=LOG_RETENTION_DAYS) threading.Thread(target=self._delayed_cleanup, daemon=True).start() self.vision = None diff --git a/agent_v0/agent_v1/session/storage.py b/agent_v0/agent_v1/session/storage.py index ab2913a09..aa1b75218 100644 --- a/agent_v0/agent_v1/session/storage.py +++ b/agent_v0/agent_v1/session/storage.py @@ -14,7 +14,16 @@ from datetime import datetime, timedelta logger = logging.getLogger("session_storage") class SessionStorage: - def __init__(self, base_dir: Path, max_size_gb: int = 5, retention_days: int = 1): + def __init__(self, base_dir: Path, max_size_gb: int = 5, retention_days: int = 180): + """Gestionnaire de stockage local pour les sessions Agent V1. + + Args: + base_dir: Dossier racine de stockage des sessions. + max_size_gb: Taille maximale du stockage local (Go). + retention_days: Duree de retention en jours. Defaut = 180 (6 mois), + minimum requis par le Reglement IA (Article 12 — journalisation + automatique, Article 26(6) — conservation des logs). + """ self.base_dir = base_dir self.max_size_bytes = max_size_gb * 1024 * 1024 * 1024 self.retention_days = retention_days diff --git a/agent_v0/agent_v1/ui/chat_window.py b/agent_v0/agent_v1/ui/chat_window.py index 9594806a4..53fd2bcea 100644 --- a/agent_v0/agent_v1/ui/chat_window.py +++ b/agent_v0/agent_v1/ui/chat_window.py @@ -247,9 +247,10 @@ class ChatWindow: self._build_input_area(root) self._build_resize_grip(root) - # Message d'accueil + # Message d'accueil — divulgation IA obligatoire (Article 50, Reglement IA) self._add_lea_message( - "Bonjour ! Je suis L\u00e9a.\n" + "Bonjour ! Je suis L\u00e9a, une assistante bas\u00e9e sur " + "l'intelligence artificielle.\n" "Je peux apprendre vos t\u00e2ches r\u00e9p\u00e9titives " "et les refaire \u00e0 votre place.\n" "Que puis-je faire pour vous ?" @@ -915,11 +916,33 @@ class ChatWindow: ) def _do_quick_record(self) -> None: - """Demande le nom de la t\u00e2che et lance l'enregistrement.""" - import tkinter as tk - from tkinter import simpledialog + """Demande le consentement puis le nom de la tache et lance l'enregistrement. - # Creer un dialogue ephemere + Notification prealable obligatoire (Articles 13/14, Reglement IA) : + l'utilisateur doit etre informe de ce qui sera capture AVANT le demarrage. + """ + import tkinter as tk + from tkinter import simpledialog, messagebox + + # --- Consentement prealable (Articles 13/14, Reglement IA) --- + consent_root = tk.Tk() + consent_root.withdraw() + consent_root.attributes('-topmost', True) + consent = messagebox.askyesno( + "Enregistrement — Information", + "\u26a0\ufe0f L'enregistrement va capturer votre \u00e9cran, " + "vos clics et vos frappes clavier pour apprendre cette t\u00e2che.\n\n" + "Les donn\u00e9es sensibles seront automatiquement flout\u00e9es.\n\n" + "Voulez-vous continuer ?", + parent=consent_root, + ) + consent_root.destroy() + + if not consent: + self._add_lea_message("Enregistrement annul\u00e9.") + return + + # --- Dialogue de saisie du nom --- tmp_root = tk.Tk() tmp_root.withdraw() tmp_root.attributes('-topmost', True) diff --git a/agent_v0/agent_v1/ui/notifications.py b/agent_v0/agent_v1/ui/notifications.py index 11d8149d0..bd8ff12b9 100644 --- a/agent_v0/agent_v1/ui/notifications.py +++ b/agent_v0/agent_v1/ui/notifications.py @@ -120,11 +120,17 @@ class NotificationManager: # ------------------------------------------------------------------ # def greet(self) -> bool: - """Notification de bienvenue au démarrage.""" + """Notification de bienvenue au démarrage. + + Inclut la divulgation IA obligatoire (Article 50, Règlement IA). + """ return self.notify( title=APP_NAME, - message="Bonjour ! Léa est prête.", - timeout=5, + message=( + "Bonjour ! Léa est prête. " + "Je suis une assistante basée sur l'intelligence artificielle." + ), + timeout=7, ) def session_started(self, workflow_name: str) -> bool: @@ -152,11 +158,18 @@ class NotificationManager: ) def replay_started(self, workflow_name: str, step_count: int) -> bool: - """Notification de début de replay.""" + """Notification de début de replay. + + Transparence obligatoire en mode autonome (Article 50, Règlement IA) : + l'utilisateur doit savoir qu'un système d'IA agit sur son écran. + """ return self.notify( title=APP_NAME, - message=f"Je m'en occupe ! '{workflow_name}' en cours...", - timeout=5, + message=( + f"Le système d'intelligence artificielle exécute la tâche " + f"'{workflow_name}' sur votre écran." + ), + timeout=7, ) def replay_step(self, current: int, total: int, description: str) -> bool: diff --git a/agent_v0/agent_v1/ui/smart_tray.py b/agent_v0/agent_v1/ui/smart_tray.py index 60af42ca7..0ea47e96e 100644 --- a/agent_v0/agent_v1/ui/smart_tray.py +++ b/agent_v0/agent_v1/ui/smart_tray.py @@ -71,6 +71,23 @@ def _show_info(title: str, message: str) -> None: root.destroy() +def _ask_consent(title: str, message: str) -> bool: + """Dialogue de consentement Oui/Non via tkinter (sans PyQt5). + + Utilise pour la notification prealable obligatoire (Articles 13/14, + Reglement IA) avant tout enregistrement. + """ + import tkinter as tk + from tkinter import messagebox + + root = tk.Tk() + root.withdraw() + root.attributes('-topmost', True) + result = messagebox.askyesno(title, message, parent=root) + root.destroy() + return result + + # --------------------------------------------------------------------------- # SmartTrayV1 # --------------------------------------------------------------------------- @@ -240,6 +257,13 @@ class SmartTrayV1: visible=lambda _i: self._chat_window is not None, ), pystray.Menu.SEPARATOR, + # --- Arret d'urgence (Article 14, Reglement IA — controle humain) --- + # Toujours visible, quel que soit l'etat de l'agent + item( + "\u26d4 ARR\u00caT D'URGENCE", + self._on_emergency_stop, + ), + pystray.Menu.SEPARATOR, # --- Utilitaires --- item("\U0001f4c2 Mes fichiers", self._on_open_folder), item("\u274c Quitter L\u00e9a", self._on_quit), @@ -323,9 +347,23 @@ class SmartTrayV1: self._update_icon() def _on_start_session(self, _icon=None, _item=None) -> None: - """Demande le nom de la t\u00e2che et demarre la session.""" + """Demande le consentement puis le nom de la tache et demarre la session. + + Notification prealable obligatoire (Articles 13/14, Reglement IA) : + l'utilisateur doit etre informe de ce qui sera capture AVANT le demarrage. + """ # Dialogue tkinter dans un thread dedie def _dialog(): + # --- Consentement prealable (Articles 13/14, Reglement IA) --- + if not _ask_consent( + "Enregistrement — Information", + "\u26a0\ufe0f L'enregistrement va capturer votre \u00e9cran, " + "vos clics et vos frappes clavier pour apprendre cette t\u00e2che.\n\n" + "Les donn\u00e9es sensibles seront automatiquement flout\u00e9es.\n\n" + "Voulez-vous continuer ?", + ): + return + name = _ask_string( "Nouvelle t\u00e2che", "D\u00e9crivez la t\u00e2che \u00e0 apprendre :", @@ -427,9 +465,11 @@ class SmartTrayV1: with self._state_lock: self._replay_active = True self._update_icon() + # Transparence mode autonome (Article 50, Reglement IA) self._notifier.notify( "L\u00e9a", - f"Je m'en occupe ! '{workflow_name}' en cours...", + f"Le syst\u00e8me d'intelligence artificielle ex\u00e9cute la " + f"t\u00e2che '{workflow_name}' sur votre \u00e9cran.", ) try: @@ -459,6 +499,48 @@ class SmartTrayV1: threading.Thread(target=_replay, daemon=True).start() + def _on_emergency_stop(self, _icon=None, _item=None) -> None: + """Arret d'urgence — stoppe TOUTES les activites de l'agent immediatement. + + Controle humain obligatoire (Article 14, Reglement IA). + Arrete l'enregistrement, le replay ET le heartbeat d'un seul clic. + Toujours accessible dans le menu, quel que soit l'etat de l'agent. + """ + logger.warning("ARRET D'URGENCE declenche par l'utilisateur") + + # Arreter l'enregistrement si en cours + if self._shared_state is not None: + if self._shared_state.is_recording: + try: + self._shared_state.stop_recording() + except Exception as e: + logger.error("Erreur arret enregistrement d'urgence : %s", e) + + # Arreter le replay si en cours + if self._shared_state.is_replay_active: + self._shared_state.set_replay_active(False) + else: + # Fallback sans etat partage + if self.is_recording: + try: + self.on_stop() + except Exception as e: + logger.error("Erreur arret session d'urgence : %s", e) + + # Forcer l'etat local a l'arret + with self._state_lock: + self.is_recording = False + self.actions_count = 0 + self._replay_active = False + self._update_icon() + + # Notification + self._notifier.notify( + "\u26d4 Arr\u00eat d'urgence", + "Toutes les activit\u00e9s ont \u00e9t\u00e9 arr\u00eat\u00e9es.", + timeout=10, + ) + def _on_open_folder(self, _icon=None, _item=None) -> None: """Ouvre le dossier des sessions dans l'explorateur de fichiers.""" from ..config import SESSIONS_ROOT @@ -593,7 +675,12 @@ class SmartTrayV1: self._update_icon() if active: - self._notifier.notify("L\u00e9a", "Je m'en occupe...") + # Transparence mode autonome (Article 50, Reglement IA) + self._notifier.notify( + "L\u00e9a", + "Le syst\u00e8me d'intelligence artificielle ex\u00e9cute " + "une t\u00e2che sur votre \u00e9cran.", + ) else: self._notifier.notify("L\u00e9a", "C'est fait !") @@ -645,11 +732,8 @@ class SmartTrayV1: def run(self) -> None: """Demarre le tray, les threads de fond, et entre dans la boucle principale.""" - # Notification d'accueil (avec identifiant machine) - self._notifier.notify( - "L\u00e9a", - f"Bonjour ! L\u00e9a est pr\u00eate.", - ) + # Notification d'accueil — divulgation IA (Article 50, Reglement IA) + self._notifier.greet() # Enregistrer le hotkey global Ctrl+Shift+L (toggle chat) self._start_hotkey() diff --git a/docs/CONFORMITE_AI_ACT.md b/docs/CONFORMITE_AI_ACT.md new file mode 100644 index 000000000..b55ed21c0 --- /dev/null +++ b/docs/CONFORMITE_AI_ACT.md @@ -0,0 +1,266 @@ +# Conformite Reglement IA (AI Act) -- RPA Vision V3 + +**Date** : 18 mars 2026 +**Version** : 1.0 +**Auteur** : Equipe RPA Vision V3 +**Echeance reglementaire** : 2 aout 2026 + +--- + +## 1. Classification du systeme + +### 1.1 Classification + +RPA Vision V3 est classifie comme **systeme d'IA a haut risque** au titre de l'Annexe III, point 4(b) du Reglement (UE) 2024/1689 (AI Act). + +Cette classification s'applique car le systeme est utilise dans un contexte d'emploi et de gestion des travailleurs : il observe les actions des utilisateurs sur leur poste de travail pour apprendre des taches repetitives, puis les reproduit de maniere autonome. + +### 1.2 Justification + +- Le systeme capture l'ecran, les clics et les frappes clavier d'un utilisateur +- Il fonctionne dans un environnement professionnel (postes de travail hospitaliers) +- Les captures d'ecran peuvent contenir des donnees de patients (DPI - Dossier Patient Informatise) +- Le systeme prend des decisions autonomes en mode replay (execution de taches sans intervention humaine) + +### 1.3 Facteurs attenuants + +- **L'enregistrement est volontaire** : c'est l'utilisateur qui decide explicitement de demarrer une session d'apprentissage. Le systeme ne realise aucune surveillance passive ou permanente. +- **L'utilisateur controle le replay** : l'execution autonome n'est lancee que sur demande explicite de l'utilisateur. +- **Architecture locale** : les donnees restent sur l'infrastructure locale (aucun transfert vers le cloud). + +--- + +## 2. Mesures techniques implementees + +### 2.1 Divulgation IA (Article 50) + +**Exigence** : Les utilisateurs doivent etre informes qu'ils interagissent avec un systeme d'intelligence artificielle. + +**Implementation** : +- Le message d'accueil de Lea (l'assistante) indique explicitement : + *"Je suis Lea, une assistante basee sur l'intelligence artificielle."* +- La notification de demarrage (toast systeme) contient la meme mention. +- Cette divulgation est affichee automatiquement a chaque lancement de l'agent, sans possibilite de la masquer. + +**Fichiers concernes** : +- `agent_v0/agent_v1/ui/chat_window.py` (message d'accueil) +- `agent_v0/agent_v1/ui/notifications.py` (notification de bienvenue) + +### 2.2 Notification avant enregistrement (Articles 13 et 14) + +**Exigence** : L'utilisateur doit etre clairement informe de la nature et de l'etendue des donnees collectees avant le debut de l'enregistrement. + +**Implementation** : +- Avant chaque session d'enregistrement, une boite de dialogue explicite apparait : + *"L'enregistrement va capturer votre ecran, vos clics et vos frappes clavier pour apprendre cette tache. Les donnees sensibles seront automatiquement floutees. Voulez-vous continuer ?"* +- L'utilisateur doit cliquer explicitement sur "Oui" pour demarrer. +- Un clic sur "Non" annule l'enregistrement sans consequence. +- Ce consentement est demande a chaque session, que l'enregistrement soit lance depuis le chat ou depuis le menu de la barre des taches. + +**Fichiers concernes** : +- `agent_v0/agent_v1/ui/chat_window.py` (dialogue depuis le chat) +- `agent_v0/agent_v1/ui/smart_tray.py` (dialogue depuis la barre des taches) + +### 2.3 Floutage automatique des donnees sensibles + +**Exigence** : Protection des donnees personnelles et sensibles (RGPD + AI Act Article 10). + +**Implementation** : +- Le module `blur_sensitive.py` floute automatiquement les champs de saisie dans les captures d'ecran **avant** tout stockage ou envoi au serveur. +- Ce traitement est actif par defaut (`BLUR_SENSITIVE=true` dans la configuration). +- Desactivable uniquement via variable d'environnement pour les phases de developpement et de test (`RPA_BLUR_SENSITIVE=false`). + +**Fichiers concernes** : +- `agent_v0/agent_v1/config.py` (parametre de configuration) +- `agent_v0/agent_v1/vision/blur_sensitive.py` (algorithme de floutage) + +### 2.4 Retention des logs (Article 12 + Article 26(6)) + +**Exigence** : Les journaux automatiques du systeme doivent etre conserves pendant une duree minimale de 6 mois. + +**Implementation** : +- La duree de retention par defaut est fixee a **180 jours** (6 mois), conformement a l'Article 12 (journalisation automatique) et a l'Article 26(6) (conservation par les deploiements). +- L'ancienne valeur par defaut etait de 1 jour, insuffisante pour la conformite. +- La duree est configurable via la variable d'environnement `RPA_LOG_RETENTION_DAYS` pour s'adapter aux exigences specifiques. +- Le nettoyage automatique respecte cette duree minimale avant toute suppression. + +**Fichiers concernes** : +- `agent_v0/agent_v1/config.py` (`LOG_RETENTION_DAYS = 180`) +- `agent_v0/agent_v1/session/storage.py` (retention par defaut a 180 jours) +- `agent_v0/agent_v1/main.py` (passage du parametre a SessionStorage) + +### 2.5 Arret d'urgence (Article 14) + +**Exigence** : Un mecanisme de controle humain doit permettre d'interrompre immediatement le fonctionnement du systeme. + +**Implementation** : +- Un bouton **"ARRET D'URGENCE"** est toujours visible dans le menu de la barre des taches, quel que soit l'etat de l'agent (enregistrement, replay, veille). +- En un seul clic, il arrete immediatement : + - L'enregistrement en cours (si actif) + - Le replay autonome en cours (si actif) + - Le heartbeat (captures d'ecran periodiques) +- Une notification confirme l'arret : *"Toutes les activites ont ete arretees."* +- Ce mecanisme est independant de l'etat de connexion au serveur. + +**Fichiers concernes** : +- `agent_v0/agent_v1/ui/smart_tray.py` (item de menu + methode d'arret) + +### 2.6 Transparence en mode autonome (Article 50) + +**Exigence** : Lorsque le systeme d'IA agit de maniere autonome, l'utilisateur doit en etre informe de maniere claire. + +**Implementation** : +- Lorsque le replay (execution autonome) demarre, la notification indique explicitement : + *"Le systeme d'intelligence artificielle execute la tache 'X' sur votre ecran."* +- L'ancienne formulation ("Je m'en occupe") etait trop informelle et ne mentionnait pas la nature IA du systeme. +- L'icone de la barre des taches change de couleur (bleu) pendant un replay pour un repere visuel supplementaire. + +**Fichiers concernes** : +- `agent_v0/agent_v1/ui/notifications.py` (notification de replay) +- `agent_v0/agent_v1/ui/smart_tray.py` (notifications inline de replay) + +### 2.7 Architecture locale (RGPD) + +**Mise en oeuvre existante** (non modifiee dans cette mise a jour) : +- Le serveur de traitement tourne en local (meme reseau que le poste client). +- Les modeles d'IA sont executes localement via Ollama (aucun appel vers des API cloud). +- Les donnees de session (captures, evenements, workflows) restent sur l'infrastructure locale. +- Aucune donnee patient ne transite par Internet. + +--- + +## 3. Actions restantes avant aout 2026 + +### 3.1 Documentation technique (Annexe IV) + +**Statut** : A realiser + +Le dossier technique prevu par l'Annexe IV du Reglement doit etre constitue et maintenu a jour. Il doit contenir : +- Description generale du systeme et de son objectif +- Conception detaillee et architecture logicielle +- Description des donnees d'entrainement (sessions enregistrees) +- Description des metriques de performance et de leurs limites +- Description des mesures de cybersecurite +- Instructions d'utilisation claires + +**Priorite** : Haute +**Echeance suggeree** : Mai 2026 + +### 3.2 Systeme de gestion des risques (Article 9) + +**Statut** : A realiser + +Un systeme de gestion des risques doit etre mis en place tout au long du cycle de vie du produit. Il doit : +- Identifier et analyser les risques connus et previsibles +- Estimer et evaluer les risques lors d'une utilisation conforme et d'un mauvais usage raisonnablement previsible +- Evaluer les risques residuels apres la mise en oeuvre des mesures d'attenuation +- Etre mis a jour regulierement + +**Risques identifies a ce stade** : +- Replay incorrect si l'interface a change (boutons deplaces, menus modifies) +- Capture accidentelle de donnees sensibles non detectees par le floutage +- Utilisation sur un poste partage sans consentement de tous les utilisateurs + +**Priorite** : Haute +**Echeance suggeree** : Avril 2026 + +### 3.3 Systeme de gestion de la qualite (Article 17) + +**Statut** : A realiser + +Un systeme qualite docummente doit couvrir : +- La strategie de conformite reglementaire +- Les techniques et procedures de conception et developpement +- Les procedures d'examen, de test et de validation (plus de 300 tests automatises existent deja) +- Les procedures de gestion des donnees +- Les procedures de traitement des plaintes et incidents + +**Priorite** : Moyenne +**Echeance suggeree** : Juin 2026 + +### 3.4 Analyse d'impact (DPIA - RGPD Article 35) + +**Statut** : A realiser + +Une analyse d'impact relative a la protection des donnees (DPIA) est obligatoire car le systeme traite des donnees de sante (captures d'ecran du DPI). Cette analyse doit : +- Decrire les operations de traitement envisagees +- Evaluer la necessite et la proportionnalite du traitement +- Evaluer les risques pour les droits et libertes des personnes concernees (patients, utilisateurs) +- Decrire les mesures prevues pour faire face aux risques + +**Priorite** : Haute +**Echeance suggeree** : Avril 2026 + +### 3.5 Declaration de conformite UE (Article 47) + +**Statut** : A realiser apres les etapes precedentes + +Le fournisseur doit etablir une declaration ecrite de conformite UE attestant que le systeme respecte les exigences du Reglement. Cette declaration doit etre mise a jour en permanence et conservee pendant 10 ans. + +**Priorite** : Moyenne (depend des etapes 3.1 a 3.4) +**Echeance suggeree** : Juillet 2026 + +### 3.6 Enregistrement dans la base de donnees de l'UE (Article 49) + +**Statut** : A evaluer + +Les systemes d'IA a haut risque doivent etre enregistres dans la base de donnees de l'UE avant leur mise sur le marche. Les informations a fournir incluent le nom du systeme, le fournisseur, la classification, et un resume des fonctionnalites. + +**Note** : Si le systeme est utilise exclusivement en interne (sans mise sur le marche commerciale), les obligations d'enregistrement peuvent etre allegees. A verifier avec un conseiller juridique. + +**Priorite** : Basse (a clarifier) +**Echeance suggeree** : Juillet 2026 + +### 3.7 Plan de surveillance post-mise sur le marche (Article 72) + +**Statut** : A realiser + +Un plan de surveillance apres la mise en service doit etre etabli pour : +- Collecter et analyser les retours d'experience des utilisateurs +- Detecter les incidents ou dysfonctionnements +- Evaluer en continu la conformite du systeme +- Declencher des actions correctives si necessaire + +Les logs de session (conserves 6 mois) peuvent servir de base a cette surveillance. + +**Priorite** : Moyenne +**Echeance suggeree** : Juillet 2026 + +--- + +## 4. Calendrier de mise en conformite + +| Echeance | Action | Statut | +|----------------|--------------------------------------------------|-----------------| +| Mars 2026 | Divulgation IA (Article 50) | Fait | +| Mars 2026 | Notification avant enregistrement (Articles 13/14)| Fait | +| Mars 2026 | Floutage donnees sensibles | Fait | +| Mars 2026 | Retention logs 6 mois (Article 12) | Fait | +| Mars 2026 | Arret d'urgence (Article 14) | Fait | +| Mars 2026 | Transparence mode autonome (Article 50) | Fait | +| Avril 2026 | Systeme de gestion des risques (Article 9) | A faire | +| Avril 2026 | DPIA (RGPD Article 35) | A faire | +| Mai 2026 | Documentation technique (Annexe IV) | A faire | +| Juin 2026 | Systeme qualite (Article 17) | A faire | +| Juillet 2026 | Declaration de conformite UE (Article 47) | A faire | +| Juillet 2026 | Enregistrement base UE (Article 49) | A evaluer | +| Juillet 2026 | Surveillance post-marche (Article 72) | A faire | +| **2 aout 2026**| **Echeance reglementaire** | --- | + +--- + +## 5. Recommandations + +1. **Consulter un juriste specialise en IA** pour valider la classification du systeme et confirmer les obligations exactes, en particulier concernant l'enregistrement dans la base de donnees de l'UE (Article 49) et le statut du systeme (usage interne vs. mise sur le marche). + +2. **Nommer un referent AI Act** au sein de l'equipe, charge de coordonner les travaux de mise en conformite et d'assurer le suivi du calendrier. + +3. **Impliquer le DPO** (Delegue a la Protection des Donnees) le plus tot possible pour la DPIA, car les captures d'ecran du DPI constituent des donnees de sante soumises a un regime de protection renforce. + +4. **Documenter les sessions de test** existantes (plus de 300 tests automatises, dont 20 end-to-end) comme element de preuve du systeme qualite. + +5. **Prevoir un audit interne** en juin 2026, avant l'echeance, pour identifier les eventuelles lacunes restantes et laisser le temps de les combler. + +6. **Surveiller les actes delegues et lignes directrices** de la Commission europeenne et des autorites nationales, qui pourraient preciser certaines obligations d'ici aout 2026. + +7. **Former les utilisateurs** : au-dela des mesures techniques, s'assurer que les utilisateurs comprennent le fonctionnement du systeme, leurs droits, et les procedures d'arret d'urgence.