Repository navigation
Releases: DorianGrousset/OPAL
Release list
v3.4.0
Faits marquants
🤖 Assistant IA de cohortes (cohort-llm) — opt-in
Décris une cohorte en langage naturel → brouillon (démographie + critères), chaque terme résolu en codes OMOP réels du CDM (RAG e5 sur source_value_cache).
Trois modes via COHORT_LLM_MODE (désactivé par défaut, onglet masqué) :
- embedded : LLM local (Ollama), modèle téléchargé au 1er run (plus baké dans l'image).
- on-premise : ton propre LLM via un endpoint OpenAI-compatible (vLLM, Ollama /v1, LocalAI, TGI…). Endpoint/modèle/clé configurés dans Réglages (admin) ; la clé API est optionnelle (seulement si l'endpoint exige une auth), chiffrée (Fernet) et jamais réaffichée.
Service opal-llm derrière le profil compose cohort-llm :
docker compose --profile cohort-llm up -d --build
Doc complète : docs/COHORT_LLM.md.
Sécurité
- Réglages LLM réservés aux admins ;
check_cdm_accesssur/draft. - En on-premise, prompt + libellés ne sortent que vers le LLM de l'établissement (donnée maîtrisée).
Migration
- Alembic
a7b8c9d0e1f2: tablecohort_llm_config(additive).
Corrections
requestsrestauré : la Gestion des utilisateurs (admin Keycloak) était cassée depuis v3.3.0 (dépendance perdue avec la suppression dedocker).
Détails : CHANGELOG.md.
v3.3.0
Faits marquants
Deux modifications majeures depuis v3.2.0 :
🗂️ Schémas OMOP par catégorie
Un CDM peut lire chaque catégorie de tables OMOP (clinical, vocabulary, derived, metadata…) depuis un schéma PostgreSQL différent. Helper SchemaMap/build_schema_map rétro-compatible (fallback sur omop_schema), colonnes schema_categories (JSON nullable) sur cdm_configs et analysis_settings, éditeur dédié dans Gestion CDM / Réglages. Domaines Quality, conformity et OHDSI résolvent le schéma par catégorie.
🐳 Runner OHDSI dédié — suppression du socket Docker
L'orchestration OHDSI par socket Docker est remplacée par un service opal-ohdsi-runner (FastAPI) qui exécute les outils R en sous-processus, piloté en HTTP. Le backend n'a plus aucun privilège Docker (correction de la vulnérabilité critique S01). Opt-in : OHDSI_MODE=off par défaut ; OHDSI_MODE=on + profil compose ohdsi pour activer. Annulation robuste (SIGTERM → SIGKILL).
Autres
- Export CSV de l'historique de mapping (
GET /api/mapping/history/{cdm}/export). - OHDSI honore désormais l'override de schéma des AnalysisSettings (revue Codex).
OHDSI_RUNNER_TOKENne casse plus les commandesdocker composehors profil.- Tests périmés corrigés — suite verte (672 backend + 8 runner).
⚠️ Migration / déploiement
- Migration Alembic
f6a7b8c9d0e1: colonnesschema_categories(additif, non destructif, auto-appliqué au démarrage). - OHDSI est maintenant désactivé par défaut. Pour l'activer :
OHDSI_MODE=on+OHDSI_RUNNER_TOKEN(openssl rand -hex 32) puisdocker compose --profile ohdsi up -d --build.
Détails complets dans CHANGELOG.md.
v3.2.0
✨ Cohort Builder restructure
Navigation à 2 niveaux
- Onglets principaux Cohort Builder / Analyse avec sous-navigation contextuelle
- Cohort Builder regroupe : Query Builder · Table 1 · SQL · Concept Sets
- Analyse regroupe : Compare · Pathways · Incidence · Estimation
Layout Query Builder
- CriteriaPanel (Inclusion/Exclusion + Concept Sets + Source Code + Concept Search) déplacé à gauche en encart fixe (420px)
- Top bar compacte sur une seule ligne horizontale :
[Cohort Name] [Description] [New] [Load] [Save] [CSV] [SQL] - Drawer Résultats repliable sur la droite (masqué par défaut), avec Échantillon de patients / Patient Count (et SQL preview) / Diagramme d'attrition (BarChart) empilés verticalement
- Page Cohort en hauteur fixée au viewport (
100vh - 84px) — plus de scroll sur la page principale
✨ Dashboard layout
- Page Home en
overflow-hiddenadaptée à la taille de l'écran (plus de scroll global) - Quick Actions en grille 2 colonnes (au lieu de la liste verticale scrollable)
- Favorites et Recent en grille 2 colonnes sur écrans XL, padding densifié
- Chaque card scrolle indépendamment uniquement si son contenu déborde
🧹 Cleanup
- Suppression de
ResultsPanel.tsx(component devenu orphelin, son contenu est inliné dans CohortPage) - README : licence corrigée Apache 2.0, counts à jour, modules récents documentés, prereq unaccent CDM
📦 Crédits
Restructure CohortPage portée depuis la branche ethan/cohort-page-restructure (commits 6bb6d23 + 4a4087e par @EthanAPHM ), avec adaptations layout par-dessus (077d439).
Full Changelog: v3.1.0...v3.2.0
v3.1.0
UX
- Multi-select in Mapping Manual tab (map N codes to one concept in one go)
- Pagination of Manual Mapping search results
- Pending mapping badges in Concept Explorer + Mapping (orange row tint)
- Reason tooltip in Mapping History flips above row when near viewport bottom
Search
- Case- AND accent-insensitive keyword search everywhere
("Meta" and "Méta" return the same results across the whole app) - Requires unaccent extension on app DB (auto-installed via Alembic
migration) and on each external CDM (manual admin step)
OPAL v3.0.0
Highlights
OPAL v3.0.0 transforme la plateforme en une release de livraison portable: Keycloak/LDAP intégré, scripts d'install autonomes, nettoyage de toutes les références APHM hardcodées, et un nouveau viewer de lineage ETL.
Authentification & sécurité
- Keycloak intégré dans docker-compose avec realm auto-importé (
opal-realm.json) - Fédération LDAP : script
setup_keycloak.example.shidempotent + auto-détection LDAP côté backend - Nouveau client
opal-cli(Direct Access Grants) pour permettre aux scripts admin de récupérer un token sans browser - Modale "mot de passe temporaire" pour gérer le premier login Keycloak
- AUTH_ENABLED=true par défaut, mode dev restreint à localhost
- Rate limiting sur 10+ endpoints sensibles, audits sécurité S01–S11 corrigés
Mapping
- Workflow per-user avec validation consensus : chaque utilisateur fait ses propres décisions, un admin valide
- Write to CDM (table
source_to_concept_map) avec log d'apply + rollback - Export Usagi CSV compatible OHDSI Usagi
- Historique avec colonnes triables, pagination serveur, badges "pending"
- Labels FR enrichis depuis les codebooks de référence
- Single-suggestion mode pour le mapping manuel
Cohort builder
- Pathways Analysis ATLAS-style : sunburst interactif des séquences de traitement
- Support des source codes dans les pathways
- Per-cohort state scoping, persistance DB
- Fix: inclusion des concept IDs sélectionnés lors de l'expansion des descendants
Concept Explorer
- Source value cache : recherche instantanée sur tous les domaines (pré-calculé en DB)
- Support ATC pour le domaine Drug (recherche par code ATC dans concepts, cohort, mapping, cache)
- Concept sets dual storage : OMOP concepts + source codes, sync live avec cohort builder
- Export CSV depuis les résultats affichés (cohérent avec ce que l'user voit)
OHDSI
- Tools vendored dans
ohdsi-tools/(Dockerfile + R scripts + JDBC) pour install autonome - Chemins host portables via
${PWD}, plus de hardcode - Per-CDM output folders
databaseId/authorsconfigurables via env vars
Data Lineage (nouveau)
- Viewer ETL : upload + parse + visualisation interactive des lineages
- Support des fichiers HTML sauvés par le navigateur (gestion
<br>vs<br/>)
Notifications
- Refonte temps-réel WebSocket : suppression complète du polling
- Nginx proxy WebSocket + CSP correctement configurés
- 71 tests dédiés
UI / UX
- Neumorphic Emerald Night : nouveau design system, remplacement complet d'Ant Design
- Crème Sauge light mode : palette beige/vert pâle, dark/light comparison
- Micro-animations, skeleton loaders, transitions de thème, empty/error states riches
- Toutes les pages responsive
- Indicateurs visuels de champs requis sur les formulaires
- Charts theme-aware, accessibilité améliorée
Data extraction & dashboard
- Nouveau paradigme d'extraction : CSV per-table dans un ZIP, schéma BDR fourni
- Homepage redesign : KPIs, mapping chart, actions par rôle
- Barres gradient par % de mapping, table d'overview des domaines
Install & bootstrap
reload_codebooks.shsimplifié : modes--referentiel/--mappingmutuellement exclusifs, token auto-récupéré viaOPAL_USER/OPAL_PASSWORD- Cleanup APHM : proxy IP, chemins
/data/Dorian, passwordAdmin@2026!, "Matricule APHM" → tous remplacés par des placeholders/env vars portables - Section proxy et tuning ajoutée à
.env.example
Tests
- 477 tests au total (couverture 60% → 75%+)
- Backend: 114 nouveaux tests
- Frontend: 84 tests UI/UX
- WebSocket, pagination, cache, csv_safety, thread_pool
Installation
# Recommandé : clone du tag
git clone --branch v3.0.0 --depth 1 https://github.com/Dorian-APHM/OPAL.git
cd OPAL
cp .env.example .env # éditer les valeurs
docker compose up -dOPAL v2.0.0
Mapping collaboratif avec validation par consensus
- Les décisions de mapping sont désormais individuelles par utilisateur
- Un mapping doit être validé par 2+ utilisateurs (consensus) avant d'être exportable
- Les mappings en attente de validation s'affichent comme "pending"
- Historique partagé avec indicateurs de consensus (✓) et conflit (⚠)
- Actions rapides depuis l'historique : approuver, rejeter, retirer sa décision
- Vue groupée par source value pour une meilleure lisibilité
Dashboard & Accueil
- Page d'accueil redessinée avec KPIs, graphique de progression du mapping, actions par rôle
- Barres de progression par domaine avec dégradé de couleur
Extraction de données
- Nouveau paradigme d'extraction : CSV par table dans des archives ZIP
- Support du schéma BDR
Cohort Builder
- Support des source codes dans les pathways
- Persistance en base par cohorte
- Expansion des descendants avec les concept IDs sélectionnés
Lineage ETL
- Visualiseur de lineage ETL : upload, parsing et visualisation interactive
Cache source values
- Recherche instantanée sur tous les domaines via cache des source values
Autres améliorations
- Dossiers de sortie OHDSI par CDM
- Requêtes source value optimisées pour les index
- Suivi de progression fiable pour l'analyse qualité
- Nettoyage des variables proxy dans l'image Docker backend
OPAL V1.0.0
OPAL V1.0.0 — OMOP Platform for Analytics & Lineage
Première release complète de la plateforme OPAL.
Fonctionnalités
- 18 modules : Quality, Cohort Builder, Mapping, Concept Explorer, Data Management, Incidence, Estimation, Concept Sets, OHDSI, et plus
- Interface Neumorphic Emerald Night : Design system custom avec composants UI dédiés
- Authentification Keycloak : OIDC/LDAP avec 4 rôles (admin, data-manager, chercheur, medecin)
- Cohort Builder avancé : Critères visuels, opérateurs AND/OR, same-visit, groupes, export CSV
- Mapping intelligent : 6 stratégies de suggestion (SapBERT, exact, relationship, keyword, fuzzy, contextual)
- Quality Analysis : Métriques type Achilles, snapshots versionnés, comparaison temporelle
- Data Management : Extraction de données avec preview et export CSV
- i18n : Français et Anglais
Stack technique
- Backend : Python / FastAPI / SQLAlchemy / psycopg2
- Frontend : React 18 / TypeScript / Tailwind CSS 4 / Vite
- Infrastructure : Docker Compose / Nginx / PostgreSQL 16 / Keycloak 24
Installation
git clone https://github.com/Dorian-APHM/OPAL.git
cd OPAL/opal
cp .env.example .env
# Éditer .env avec vos paramètres
docker compose build
docker compose up -d