Notes de version
Ce changelog présente l'évolution de l'application Mistral à travers ses différentes versions.
Mistral est une application destinée à la gestion des audiences, permettant aux greffiers de gérer efficacement les informations relatives aux audiences, aux parties, aux décisions et aux documents associés.
Les versions de Mistral pénal
Date de lancement : 28 avril 2023
Date de décommissionnement : 21 novembre 2024
La version 1.0 de Mistral a constitué le Produit minimum viable (PMV) de l'application, posant les premiers tests et fondations techniques et fonctionnelles du système. Cette version, bien que désormais décommissionnée, a permis de valider les premiers retours utilisateurs, et d'établir l'impact de l'outil numérique.
Architecture Technique
La version 1.0 reposait sur une architecture PHP Symfony pour le back-end et le front-end.
L'approche technique principale consistait en un scraper utilisant Selenium WebDriver pour automatiser la récupération des données depuis le bureau d'ordre pénal numérique. Selenium permettait de piloter un navigateur web réel (Chrome ou Firefox) pour naviguer dans l'interface de KSP, simuler les actions d'un utilisateur humain, et extraire les informations d'audience. Cette solution de scraping avec navigateur automatisé permettait d'extraire les informations directement depuis l'interface web du bureau d'ordre pénal numérique, sans nécessiter d'API dédiée. L'équipe était autonome dans la réalisation de ses travaux.
Infrastructure et Architecture
La structuration de la base de données Mistral a été réalisée pour organiser les données d'audience récupérées depuis KSP. Un robot d'import RPA (Robotic Process Automation) basé sur Selenium a été développé pour automatiser la récupération des données depuis Cassiopée vers Mistral. Ce robot simulait les interactions humaines avec l'interface web de Cassiopée, permettant de récupérer les audiences, les parties, et toutes les informations nécessaires au fonctionnement de Mistral.
Connexion et Authentification
L'authentification des utilisateurs s'effectuait via les identifiants du bureau d'ordre pénal numérique, permettant aux greffiers et magistrats de se connecter avec leurs comptes existants et effectuer les opérations de récupération de données.
Gestion du Calendrier et des Audiences
Le module de calendrier des audiences permettait de visualiser et de rechercher les audiences issues de KSP. Les utilisateurs pouvaient importer la composition de l'audience et accéder à un espace d'audience dédié pour chaque dossier.
Édition des Informations
Dans chaque audience importée, l'interface d'édition permettait de modifier les informations des parties (prévenus, victimes, parties civiles), incluant les représentants légaux. Le système gérait les NATINF (Nature d'Infraction) avec une liste récupérée depuis les référentiels officiels (SRJ). Les greffiers pouvaient éditer les champs relatifs à l'audience et gérer la composition du tribunal, facilitant la préparation et le suivi de leurs audiences.
Export et Documents
La fonctionnalité d'export de notes d'audience au format ODT (OpenDocument Text) a été implémentée, permettant de générer des documents éditable pour les besoins de l'audience.
Corrections et Optimisations
De nombreux bugs ont été corrigés durant cette version, notamment concernant l'import des audiences, l'affichage du calendrier, la sauvegarde des informations, la composition du tribunal dans le rôle d'audience, et divers problèmes d'affichage et de formatage. Des optimisations ont été apportées en fin de version.
Limites de la V1
L'approche par scraping avec Selenium WebDriver, bien que fonctionnelle, présentait des limitations significatives en termes de performance, de maintenabilité et de robustesse. Le pilotage d'un navigateur réel consommait beaucoup de ressources, ralentissait les opérations de synchronisation, et rendait l'application fragile face aux évolutions de l'interface de KSP.
Chaque modification de l'interface web de Cassiopée pouvait potentiellement casser les scripts de scraping, nécessitant des interventions de maintenance fréquentes. Ces contraintes ont motivé la refonte technique entreprise dans la version 2.0.
La version 2.0 a marqué un tournant majeur dans l'évolution de Mistral avec une refonte technologique complète de l'application.
Cette version a introduit un virage architectural en adoptant Angular pour le front-end, tout en conservant PHP Symfony pour le back-end, et en modernisant radicalement l'approche de communication avec KSP.
Refonte Technique
Le passage à une architecture découplée avec Angular en front-end et PHP Symfony en back-end a permis de moderniser l'application. Cette séparation claire entre le front-end et le back-end offre plusieurs avantages : une meilleure maintenabilité du code grâce à la modularité, une interface utilisateur plus réactive et moderne grâce aux capacités d'Angular, et une architecture plus évolutive permettant de faire évoluer indépendamment les deux composants.
Modernisation du Scraping
La version 2.0 n'a pas abandonné le scraping, mais l'a modernisé en profondeur. L'équipe a remplacé Selenium WebDriver par une approche plus performante utilisant les composants natifs de Symfony. Le nouveau système repose sur Symfony HttpBrowser et DomCrawler, deux composants qui permettent de simuler un navigateur HTTP sans avoir besoin de piloter un navigateur réel.
Cette approche présente de nombreux avantages par rapport à Selenium :
Le Symfony HttpBrowser simule les requêtes HTTP d'un navigateur web, gère automatiquement les cookies pour maintenir les sessions, et suit les redirections HTTP.
Le DomCrawler permet de parser le HTML reçu et d'extraire les données via des sélecteurs CSS, similairement à ce que fait jQuery dans un navigateur.
Cette combinaison permet d'effectuer les mêmes opérations que Selenium, mais de manière beaucoup plus légère et rapide, car il n'y a pas de navigateur réel à lancer, pas de JavaScript à exécuter, et pas de CSS à charger.
L'architecture mise en place dans la V2 utilise un client HTTP personnalisé basé sur AmpHttpClient, permettant des requêtes HTTP asynchrones pour améliorer les performances.
Des services spécialisés ont été développés pour chaque domaine fonctionnel : AudienceService pour la récupération des audiences, PersonneService pour la gestion des parties, AffaireService pour les dossiers, NatinfService pour les infractions, et InsertOrUpdateService pour la synchronisation des données vers Cassiopée. Cette architecture modulaire facilite grandement la maintenance et l'évolution du code.
Avantages de la Nouvelle Approche
Le passage de Selenium à HttpBrowser/DomCrawler a apporté des gains importants. Les performances ont été considérablement améliorées car il n'y a plus besoin de lancer un navigateur Chrome ou Firefox, ce qui réduit drastiquement la consommation de mémoire et de CPU.
Les opérations de scraping sont beaucoup plus rapides car seul le HTML est téléchargé et parsé, sans exécution de JavaScript ni chargement de ressources CSS/images. La stabilité est également meilleure car l'approche est moins sensible aux changements d'interface de Cassiopée, et les timeouts et erreurs réseau sont mieux gérés grâce aux stratégies de retry automatiques.
Enfin, la maintenabilité est grandement facilitée par l'utilisation de composants Symfony natifs bien documentés et maintenus, et par une architecture de code plus claire et modulaire.
Améliorations du Calendrier
Des corrections importantes ont été apportées au module de calendrier, notamment pour gérer correctement la déconnexion des sessions Cassiopée/Mistral. Auparavant, le calendrier ne détectait pas l'expiration de la session, ce qui causait des erreurs pour les utilisateurs. La nouvelle architecture permet une meilleure détection et gestion des sessions expirées.
Analyse Technique de Mistral V2
Structure du Projet
- Monorepo avec séparation claire front/back
- /api/ : Backend Symfony 7.3
- /client/ : Frontend Angular
- /public/ : Document root avec lien symbolique vers l'API
Backend (API)
Stack Technique
- PHP 8.3+
- Symfony 7.3 (Framework)
- Doctrine ORM pour la base de données
- PostgreSQL
Approche de Communication avec Cassiopée
Pas de Selenium - La V2 utilise une approche différente :
- Symfony HttpBrowser (symfony/browser-kit) :
- Composant Symfony pour simuler un navigateur HTTP
- Permet de faire des requêtes HTTP et de parser les réponses HTML
- Plus léger et plus rapide que Selenium
2. DomCrawler (symfony/css-selector) :
- Parsing et navigation dans le DOM HTML
- Sélection d'éléments via CSS selectors
- Extraction de données depuis les pages HTML
3. HTTP Client Personnalisé :
- CassiopeeHttpClient basé sur AmpHttpClient (HTTP asynchrone)
- Support de proxy et DNS personnalisé
- Gestion des cookies pour maintenir la session
- Retry automatique en cas de timeout
4. Architecture des Services Cassiopée :
- AbstractCassiopeeService : Classe de base avec gestion du browser et HTTP client
- Services spécialisés : AudienceService, PersonneService, AffaireService, NatinfService, etc.
- LoginService : Gestion de l'authentification
- InsertOrUpdateService : Synchronisation des données
Différence avec Selenium (V1)
V1 (Selenium) :
- Navigateur réel (Chrome/Firefox) piloté automatiquement
- Lourd en ressources (mémoire, CPU)
- Lent (chargement complet des pages, JavaScript, CSS)
- Fragile face aux changements d'interfaceV2 (HttpBrowser + DomCrawler) :
- Simulation HTTP pure (pas de navigateur réel)
- Léger et rapide
- Parsing HTML direct sans exécution JavaScript
- Plus stable et maintenable
Frontend (Client)
- Angular (version moderne)
- Build de production via script ./scripts/build_front_prod.sh
Autres Composants
Messaging
- ActiveMQ (via stomp-php) pour la communication asynchrone
- Symfony Messenger pour la gestion des messages
Sécurité
- Halite (paragonie/halite) pour le chiffrement
- Service CryptologyHelper et Encryption
Documents
- PHPWord (phpoffice/phpword) pour la génération de documents Word
La version 2.2 a apporté des améliorations majeures en matière de sécurité et d'authentification, ainsi que des fonctionnalités supplémentaires pour l'édition des informations.
Single Sign-On (SSO)
L'implémentation du SSO via Cassiopée LDAP a simplifié l'authentification des utilisateurs. Le changement d'identification sur KSP permet désormais une connexion unique et sécurisée via le SSO, éliminant le besoin de gérer des identifiants séparés pour Mistral.
Les utilisateurs se connectent une seule fois avec leurs identifiants Cassiopée, et peuvent ensuite accéder à Mistral sans nouvelle authentification. L'UX Greffier a été optimisée pour faciliter l'utilisation du SSO et rendre l'expérience de connexion plus fluide, avec des messages d'erreur plus clairs et un processus de connexion simplifié.
Édition des Informations
De nouvelles fonctionnalités d'édition ont été ajoutées, notamment la récupération et l'édition des informations des requérants et la gestion des valeurs du champ "mode de convocation" pour les prévenus, avec retranscription automatique dans la note d'audience.
Ces améliorations permettent aux greffiers de saisir plus précisément les informations relatives aux parties, tout en garantissant que ces informations sont correctement reflétées dans les documents générés (rôle et note d'audience)
Corrections de Bugs
Plusieurs bugs importants ont été corrigés.
Version 2.2.5 - Enrichissement Fonctionnel
La version 2.2.5 a enrichi l'application avec de nouvelles fonctionnalités liées à la gestion des parties et des NATINF.
Gestion des NATINF
Le module NATINF a été considérablement amélioré avec l'ajout de fonctionnalités de disqualification/requalification (Disqual/Requal) et de modification des qualifications (Modqi). Les greffiers peuvent désormais choisir le prévenu concerné lors de la modification d'une NATINF.
Les modifications sont automatiquement retranscrites dans la note d'audience, garantissant la cohérence des informations entre l'interface de saisie et les documents générés.
Gestion des Parties
La fonctionnalité de suppression d'une victime a été ajoutée dans l'interface. La retranscription des informations du représentant légal dans la note et le rôle d'audience a été implémentée, permettant une meilleure traçabilité des informations et une génération automatique des documents plus complète. Cette fonctionnalité est particulièrement importante pour les affaires impliquant des mineurs ou des personnes sous tutelle.
Finalisation du SSO
Le SSO côté back-end a été finalisé, assurant une intégration complète et sécurisée avec le système d'authentification Cassiopée. Cette finalisation garantit une expérience utilisateur cohérente et sécurisée sur l'ensemble de l'application, avec une gestion robuste des tokens d'authentification et des sessions.
Version 2.2.6 - Optimisations Documentaires
Cette version mineure s'est concentrée sur l'amélioration du formatage des documents générés.
Ajustements de Format
Des ajustements du format des notes d'audience et des rôles WORD ont été effectués pour garantir une meilleure conformité avec les standards documentaires des tribunaux et améliorer la lisibilité des documents générés. Ces ajustements incluent des corrections de mise en page, d'espacement et de formatage des différentes sections des documents, ainsi que des améliorations typographiques pour faciliter la lecture.
Version 2.3.x – améliorations sur les notes et le rôle d’audience
Release 2.3.12 – mise en production ce matin
- Correction de l’incohérence du numéro de parquet dans la note
- Ajout de la mention « (Min) » dans la note et le rôle pour les mineurs
- Correction de l’affichage du déroulement des débats selon certains caractères particuliers
- Correction d’un problème d’encodage dans les noms des cours d’appel et tribunaux
Release 2.3.14 – mise en production à l’instant
- Réduction des pertes de connexion à Mistral
- Correction de fautes dans le référentiel des tribunaux et cours d’appel (Cayenne et Caen)
Release 2.3.16
- Suppression du service worker
Release 2.4.1
✅ Correctifs (bugfix)
- Client :
- Le numéro de minute est maintenant bien conservé en mémoire
- Correction de l’environnement mal configuré en développement
- Le débat s’enregistre correctement même lorsque l’utilisateur écrit
- Corrige un problème empêchant la validation d’une relaxe
- La connexion affiche à nouveau les erreurs dans tous les cas
- API :
- La nature du jugement est désormais affichée pour les victimes
- Ajout d’une ligne entre les paragraphes du débat pour améliorer la lisibilité
- Back :
- L’heure du renvoi prend en compte la timezone
✨ Nouvelles fonctionnalités (feature)
- Client :
- Type Uuid rendu plus strict
- Type Url rendu plus strict
- Accès à la tenue d'audience
- Mise à jour du design system (DSFR)
- Retrait complet du service worker (client + sw + api)