Santé — Analyse de cohorte pas-à-pas¶
Parcours personas : carol (analyste) → eve (steward) · Catalogues :
postgres_oltp_publicsector(schémahealthcare) · 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_publicsectordéjà fédéré. - Schéma
healthcareseedé avec 25 000 patients synthétiques (scriptscripts/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 pseudonymebirth_year— entiersex—MouFregion_insee_code— code département 2 caractèrespatient_name—PII.Sensitive(masqué pourakko-analyst)national_id—PII.Sensitive(masqué pourakko-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.
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 :
- KPI — Taille de cohorte (1 247)
- Pie — Répartition par sexe
- Bar — Top 10 régions
- Histogram — Distribution des âges
- 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 |