Skip to content

Releases: DorianGrousset/OPAL

v3.4.0

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 29 May 12:24

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_access sur /draft.
  • En on-premise, prompt + libellés ne sortent que vers le LLM de l'établissement (donnée maîtrisée).

Migration

  • Alembic a7b8c9d0e1f2 : table cohort_llm_config (additive).

Corrections

  • requests restauré : la Gestion des utilisateurs (admin Keycloak) était cassée depuis v3.3.0 (dépendance perdue avec la suppression de docker).

Détails : CHANGELOG.md.

v3.3.0

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 29 May 10:04

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_TOKEN ne casse plus les commandes docker compose hors profil.
  • Tests périmés corrigés — suite verte (672 backend + 8 runner).

⚠️ Migration / déploiement

  • Migration Alembic f6a7b8c9d0e1 : colonnes schema_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) puis docker compose --profile ohdsi up -d --build.

Détails complets dans CHANGELOG.md.

v3.2.0

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 23 May 00:35

✨ 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-hidden adapté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

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 22 May 14:37

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

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 21 May 14:27

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.sh idempotent + 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 / authors configurables 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.sh simplifié : modes --referentiel / --mapping mutuellement exclusifs, token auto-récupéré via OPAL_USER / OPAL_PASSWORD
  • Cleanup APHM : proxy IP, chemins /data/Dorian, password Admin@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 -d

OPAL v2.0.0

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 31 Mar 14:26

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

Choose a tag to compare

@Dorian-APHM Dorian-APHM released this 12 Mar 15:42

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