Aller au contenu

Santé — Analyse de cohorte pas-à-pas

Parcours personas : carol (analyste) → eve (steward) · Catalogues : postgres_oltp_publicsector (schéma healthcare) · Durée : ~25 min · Difficulté : étoile étoile

Cette démo montre comment une analyste clinique dimensionne une cohorte de patients en langage naturel. Les données sont synthétiques — générées via le même modèle probabiliste de style INSEE que la démo secteur public. Aucune donnée de santé réelle n'est utilisée.

Ce que la démo prouve

  • ADEN sait naviguer dans un domaine sensible quand le Catalogue le déclare correctement.
  • Les colonnes sensibles (patient_name, national_id) sont masquées par défaut pour les analystes.
  • Une requête cohorte produit un compte et une liste exportable d'IDs pseudonymisés.
  • La steward signe l'enrichissement avant tout usage aval.

Pré-requis

  • URL démo : https://demo.akko-ai.com
  • Catalogue postgres_oltp_publicsector déjà fédéré.
  • Schéma healthcare seedé avec 25 000 patients synthétiques (script scripts/seed-healthcare.sh).
  • 2 personas provisionnées : carol, eve.

Étape 1 — Carol se connecte

Ouvrir https://demo.akko-ai.com, cliquer Sign in, saisir :

  • Username : carol
  • Password : lu depuis le Secret kubectl get secret -n akko akko-demo-personas -o jsonpath='{.data.carol}' | base64 -d

Résultat attendu : Cockpit Home affiche 20/20 services en bonne santé et le badge analyst.

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/01-carol-home.png

Étape 2 — Carol explore le schéma santé dans le Catalogue

Cliquer Gouvernance puis Explorateur de catalogue. Naviguer vers postgres_oltp_publicsector → healthcare.

Tables attendues :

healthcare.patients         (25 000 lignes)
healthcare.encounters       (180 000 lignes)
healthcare.diagnoses        (240 000 lignes)
healthcare.prescriptions    (310 000 lignes)
healthcare.lab_results      (450 000 lignes)

Cliquer patients et vérifier le glossaire des colonnes :

  • patient_id — ULID pseudonyme
  • birth_year — entier
  • sexM ou F
  • region_insee_code — code département 2 caractères
  • patient_namePII.Sensitive (masqué pour akko-analyst)
  • national_idPII.Sensitive (masqué pour akko-analyst)

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/02-catalog-patients.png

Étape 3 — Carol ouvre ADEN

Cliquer l'onglet IA, puis ADEN — langage naturel vers SQL.

Régler :

  • Catalogue : postgres_oltp_publicsector
  • Périmètre schéma : healthcare
  • Modèle : qwen2.5-coder:7b

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/03-aden-scope.png

Étape 4 — Carol pose la question cohorte

Dans le prompt, saisir :

trouve les patients diabétiques âgés de 50 à 65 ans avec au moins deux comorbidités,
renvoie la taille de cohorte et la répartition par sexe et région

Cliquer Ask. Résultat attendu : ADEN propose un SQL multi-CTE similaire à :

WITH diabetes AS (
    SELECT DISTINCT d.patient_id
    FROM postgres_oltp_publicsector.healthcare.diagnoses d
    WHERE d.icd10_code LIKE 'E11%'
), comorbids AS (
    SELECT d.patient_id, count(DISTINCT d.icd10_code) AS n_comorbids
    FROM postgres_oltp_publicsector.healthcare.diagnoses d
    WHERE d.icd10_code NOT LIKE 'E11%'
    GROUP BY d.patient_id
    HAVING count(DISTINCT d.icd10_code) >= 2
), cohort AS (
    SELECT p.patient_id, p.sex, p.region_insee_code
    FROM postgres_oltp_publicsector.healthcare.patients p
    JOIN diabetes USING (patient_id)
    JOIN comorbids USING (patient_id)
    WHERE date_diff('year', date_from_parts(p.birth_year, 1, 1), current_date)
          BETWEEN 50 AND 65
)
SELECT sex, region_insee_code, count(*) AS n_patients
FROM cohort
GROUP BY sex, region_insee_code
ORDER BY n_patients DESC;

Panneau de synthèse attendu :

Taille de cohorte : 1 247 patients
Répartition sexe : F 651 / M 596
Top régions :      13 (87) / 75 (74) / 33 (61) / 59 (58) / 69 (54)

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/04-aden-cohort.png

Étape 5 — Carol exporte la liste pseudonymisée

Dans la barre d'outils du résultat ADEN, cliquer Export → IDs pseudonymes (CSV).

Résultat attendu : un CSV avec uniquement patient_id (ULID) et sex. Les colonnes patient_name, national_id et birth_year sont retirées par la couche Gouvernance car Carol est akko-analyst.

patient_id,sex
01HZW...A1,F
01HZW...B2,M
...

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/05-export-csv.png

Étape 6 — Carol promeut la cohorte en dashboard BI

Cliquer Promote to dashboard. Résultat attendu : 5 charts auto-construits :

  1. KPI — Taille de cohorte (1 247)
  2. Pie — Répartition par sexe
  3. Bar — Top 10 régions
  4. Histogram — Distribution des âges
  5. Table — Détail par sexe et région
+-------------------- AKKO Santé — Cohorte diabète --------------------+
| 1 247 patients | F 52 % / M 48 %                                     |
+----------------------------------------------------------------------+
| [ Pie sexe ]  [ Bar top régions ]  [ Histogram âges 50-65 ]          |
+----------------------------------------------------------------------+

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/06-bi-cohort.png

Étape 7 — Eve relit l'enrichissement catalogue

Se déconnecter, se connecter en Eve.

Ouvrir Gouvernance → NORA. Résultat attendu : NORA affiche des revues en attente sur healthcare.diagnoses.icd10_code et healthcare.patients.region_insee_code.

Approuver le terme glossaire suggéré Code CIM-10 et l'owner suggéré bob.engineer@akko-ai.com. Rejeter la description suggérée sur national_id si elle fuit des exemples ; réécrire en Identifiant national pseudonyme - synthétique uniquement.

Capture : tests/e2e/playwright/artefacts/demos/healthcare-cohort/07-nora-review.png

Nettoyage

  • Se déconnecter.
  • Optionnel : supprimer le CSV exporté de votre poste après la démo.

Ce que la démo prouve

  • Les colonnes sensibles restent masquées de bout en bout pour les analystes.
  • Les IDs pseudonymes sont les seules données quittant la couche Query pour les exports cohorte.
  • NORA donne à la steward une file d'approbation claire avec piste d'audit.
  • Le dashboard BI se crée en un clic une fois qu'ADEN converge sur le SQL.

Fichiers dans le repo

Fichier Rôle
scripts/seed-healthcare.sh Seed 25 000 patients synthétiques dans postgres_oltp_publicsector.healthcare
dbt/models/marts/healthcare/cohort_diabetes.sql Vue matérialisée adossée au dashboard
keycloak/realm-akko.json Personas carol et eve câblées aux rôles

Voir aussi