Coach DrépanoCoach DrépanoTraitements et questionnaires
Transparence des algorithmes

Traitements et questionnaires

La régularité des traitements, les scores des questionnaires et les rappels fondés sur des règles.

Chaque algorithme est décrit avec ce qu’il lit, ses étapes, les valeurs qu’il utilise (avec leur emplacement dans le code), ce qu’il affiche et ses limites.

Associations personnelles (« Mes associations »)Calendrier personnalisé de dépistagesCharge de stress et ressources (« balance »)Dépistages courts : stress post-traumatique, TDAH, autismeDépression et anxiété : PHQ-9, GAD-7 et échelle d'ÉdimbourgRappel de l'analyse de suivi de l'hydroxyuréeL'hydroxyurée dans le risque de criseRégularité de l'hydroxyurée (jours couverts)Signal « à discuter avec ton équipe » (HbF ou crises)Comment un jour est classé « crise »Rappel la veille de ton jour à crisesPoint douleur après un antalgique de secoursPrises « par défaut » et taux de régularité des traitementsQuestions à poser à ton médecinScores des questionnaires : confiance en soi, qualité de vie, utilité perçueStock de médicaments et rappel de commandeStress perçu : échelle PSS-10 et ressenti du jour« Comment ça va ? » espacé et valeurs supposéesSuivi de prévention, vaccins et rappels d'examensEnseignements sur tes crises et ta régularité

← Tous les algorithmes

Associations personnelles (« Mes associations »)

Trévor cherche, dans tes propres données, des liens prudents entre ce que tu fais ou ce qui t'entoure (sommeil, météo, traitements, gestes) et ta douleur, ton humeur, ta forme, ta fatigue ou tes crises. Un lien affiché n'est pas une cause.

Où tu le vois : Tableau de bord du navigateur personnel, section des associations.

Ce que l’algorithme lit

Le calcul, étape par étape

Choisir les couplesRésultats : douleur, humeur, forme, fatigue, criseExpositions : tout le reste, sauf l'antalgique de secours et lesdoses manquéesDouleur et forme ne sont jamais croisées entre ellesCorrélation de rangPour chaque couple et chaque décalage de 0 à 3 jours : corrélationde Spearman entre l'exposition du jour J − décalage et le résultatdu jour JAu moins 24 jours appariésLe meilleur décalage est gardé, sa valeur p est multipliée par 4(Bonferroni), plafonnée à 1Taux de fausses découvertesBenjamini-Hochberg sur l'ensemble des couples testésq ≤ 0,10 ET |rho| ≥ 0,25 ?ouinonAssociation retenue, avecintervalle de confiance à 95%ÉcartéeLimiterLes plus marquées d'abord ; au plus 2 par résultat et 5 au totalÉchelle de la semaineMoyennes hebdomadaires de l'exposition face aux scores desquestionnaires : au moins 8 semaines, |rho| ≥ 0,5, même contrôle q≤ 0,10 ; 5 au plus
Logigramme : Associations personnelles (« Mes associations »)

Les valeurs utilisées

Nom dans le codeValeurRôleOù
LAGS(0, 1, 2, 3)Décalages testés en jourssrc/trevor/navigator/findings.py:20
MIN_PAIRS24Jours appariés minimauxsrc/trevor/navigator/findings.py:21
MIN_ABS_RHO0.25|rho| minimal (jour)src/trevor/navigator/findings.py:22
MAX_Q0.10Taux de fausses découvertes maximalsrc/trevor/navigator/findings.py:23
MAX_FINDINGS5Associations au totalsrc/trevor/navigator/findings.py:24
MAX_PER_OUTCOME2Associations par résultatsrc/trevor/navigator/findings.py:25
MIN_WEEKS8Semaines minimales (échelle hebdomadaire)src/trevor/navigator/findings.py:26
MIN_ABS_RHO_WEEKLY0.5|rho| minimal (semaine)src/trevor/navigator/findings.py:27

Ce qui est affiché

Au plus 5 associations quotidiennes puis hebdomadaires (calculées seulement à partir de 21 jours de données, navigator/api.py:11), chacune avec décalage, rho, n, valeurs p et q, intervalle de confiance.

Un exemple chiffré

Aucun exemple chiffré exécuté (le calcul demande des séries réelles).

Ce que cet algorithme ne sait pas faire

Validation. Méthode statistique standard (Spearman, Bonferroni, Benjamini-Hochberg), seuils posés par l'équipe du projet. Aucune validation clinique ni étude de performance dans le dépôt.

Code : src/trevor/navigator/findings.py (daily_findings, weekly_findings, compute), src/trevor/navigator/stats.py, src/trevor/navigator/series.py (build)

Calendrier personnalisé de dépistages

Trévor lit une table de règles (âge, génotype, traitement) pour te dire quels examens de surveillance reviennent à quel rythme, et quand le prochain est dû d'après la dernière date que tu notes. Il organise ton suivi, n'interprète aucun résultat et ne remplace pas ton équipe de soins.

Où tu le vois : Écran « Calendrier de dépistages » (derrière le suivi de prévention), pour les maladies de type drépanocytose ; un enfant suivi par un proche a son propre calendrier.

Ce que l’algorithme lit

Le calcul, étape par étape

Porteur du trait AS ?ouinonAucun calendrierOn continueÂgeAvec la date de naissance : âge exactAvec seulement l'année : une fourchette de deux âges (n − 1 et n)Sans l'un ni l'autre : âge inconnuRègle de chaque examenLes règles de l'examen sont lues dans l'ordre : la première quicorrespond au génotype, au traitement et à l'âge décideÂge inconnu et règle dépendant de l'âge : « il faut l'âge »Âge minimal pas atteint : « pas encore »Aucune règle : « non applicable »Rythme « tous lesn mois »Échéance = dernierexamen + n moisJamais noté : «jamais »Aujourd'hui ≥échéance : « enretard » ; ilreste 60 jours oumoins : « bientôt» ; sinon « à jour»Rythme « une fois»Fait : « fait » ;sinon « jamais »Seul « jamais »est rappelableAutres rythmes« non recommandé», « l'équipedécide », «génotype àconnaître » :aucun rappelTon équipe a un autre rythmeSi tu as indiqué un autre rythme : l'examen n'est plus rappeléRappelRappelables : règle applicable, échéance dépassée ou proche (60jours), pas déjà rappelée pour cette échéanceUn « jamais noté » est rappelé par le plan de prévention, pas parcette liste
Logigramme : Calendrier personnalisé de dépistages

Les valeurs utilisées

Nom dans le codeValeurRôleOù
SOON_DAYS60Préavis : « bientôt » quand il reste 60 jours ou moinssrc/trevor/lifecourse/screening.py:26
doppler cérébral12 mois, SS et Sβ0, 2 à 16 ansSeul rythme chiffré pour ces génotypesdata/screening_rules.json (exam doppler)
IRM cérébraleune fois, SS et Sβ0, dès 5 ansRythme « une fois »data/screening_rules.json (exam irm_cerebrale)
fond d'œil, albuminurie12 mois, dès 10 ansTous génotypesdata/screening_rules.json
échographie cardiaque36 mois, dès 18 ansRythme selon les HUG ; divergence avec l'ASH 2019 signalée dans la note du fichierdata/screening_rules.json
ferritine3 mois si transfusion, sinon 12 moisDeux règles dans l'ordredata/screening_rules.json
ONCE_MONTHS1200Un examen « une fois » compte un siècle dans le plan de préventionsrc/trevor/lifecourse/screening.py:25

Ce qui est affiché

Une ligne par examen avec son rythme, son état (à jour, bientôt, en retard, jamais, fait, non recommandé, pas encore, équipe décide…), la date due et le dernier résultat noté. Le plan de prévention reçoit des consignes : exclure, resserrer le rythme ou suspendre les rappels.

Un exemple chiffré

Profil SS, 20 ans, hydroxyurée, fond d'œil noté le 20.12.2025 : échéance 20.12.2026, il reste 44 jours le 06.11.2026, donc « bientôt » (calendrier exécuté). Le doppler n'est pas applicable à 20 ans, l'échographie cardiaque et l'albuminurie sont « jamais ».

Ce que cet algorithme ne sait pas faire

Validation. Table de règles du projet, déclarée « à valider par le service d'hématologie des HUG » (data/screening_rules.json, status a_valider_hug, version 2026-10-21 ; docs/RELECTURES_A_FAIRE.md M-B1-1). Chaque règle porte des références internes (R6, R25, R28, W9…) renvoyant à docs/ETAT_DE_L_ART_MODIFICATION_MALADIE.md.

Code : src/trevor/lifecourse/screening.py (rule_for, calendar, remindable, prevention_directives, age_range), src/trevor/lifecourse/screening_store.py (profile_for, calendar_for, directives), src/trevor/conversation/screening_reminders.py, data/screening_rules.json

Charge de stress et ressources (« balance »)

Trévor additionne des points de charge (stress, moral, PHQ-9, GAD-7, événements de vie) et des points de ressources (bonnes choses notées, appuis, humeur, calme) sur 30 jours, et les met en regard sous forme de deux pourcentages. C'est un indice du projet, sans validation clinique.

Où tu le vois : « Ma santé mentale » > Aller plus loin > Tendances.

Ce que l’algorithme lit

Le calcul, étape par étape

Points de charge (maximum 8)Stress moyen ≥ 7 : +2 ; de 4 à 6,99 : +1Humeur moyenne ≤ 4 : +2 ; de 4,01 à 6 : +1PHQ-9 ≥ 10 : +2 ; de 5 à 9 : +1GAD-7 ≥ 10 : +2 ; de 5 à 9 : +1Plus d'événements de vie pathogènes que salutogènes : +1Points de ressources (maximum 6)Au moins 3 notes de bonnes choses : +2 ; 1 ou 2 : +1Au moins 3 appuis : +1Événements de vie présents avec salutogènes ≥ pathogènes : +1Humeur moyenne ≥ 7 : +1Stress moyen ≤ 3 : +1PourcentagesCharge = 100 × points ÷ 8, arrondiRessources = 100 × points ÷ 6, arrondiNiveauxCharge : 60 et plus élevée ; 30 à 59 modérée ; sous 30 faibleRessources : 60 et plus solides ; 30 à 59 présentes ; sous 30 àconstruireCharge ≥ ressources ?ouinonConseil : alléger la chargeConseil : renforcer lesappuis
Logigramme : Charge de stress et ressources (« balance »)

Les valeurs utilisées

Nom dans le codeValeurRôleOù
maximum de charge8Dénominateur du pourcentage de chargesrc/trevor/conversation/mental_health.py:755
maximum de ressources6Dénominateur du pourcentage de ressourcessrc/trevor/conversation/mental_health.py:756
seuils de niveau60 et 30Limites des niveaux de charge et de ressourcessrc/trevor/conversation/mental_health.py:757-758
fenêtre30 joursPériode des moyennes et des notessrc/trevor/conversation/mental_health.py:702

Ce qui est affiché

Deux niveaux et deux pourcentages, la liste des facteurs qui pèsent et de ceux qui protègent, et un conseil. Sans aucune donnée, un message dit qu'il n'y a pas assez de données.

Un exemple chiffré

Stress moyen 5 (+1), humeur moyenne 4 (+2), PHQ-9 de 12 (+2), GAD-7 de 3 (0), pas d'événement : charge 5 points sur 8, soit 62 % (62,5 arrondi à 62), niveau élevé (vérifié par le calcul).

Ce que cet algorithme ne sait pas faire

Validation. Indice « transparent » inventé par le projet, inspiré de l'idée de charge allostatique et de l'approche salutogénique (Antonovsky, cité dans le code). Les poids et seuils n'ont pas de source dans le code et n'ont pas été validés.

Code : src/trevor/conversation/mental_health.py (allostatic_balance, _balance_block, finish_mh_mood)

Dépistages courts : stress post-traumatique, TDAH, autisme

Trévor compte tes réponses à trois questionnaires courts (PC-PTSD-5, ASRS v1.1 partie A, AQ-10) et dit si le dépistage est « positif », ce qui veut dire qu'un avis professionnel est suggéré. Ce n'est pas un diagnostic ni un dispositif médical validé : le résultat t'oriente vers un professionnel.

Où tu le vois : « Ma santé mentale » > Faire le point.

Ce que l’algorithme lit

Le calcul, étape par étape

PC-PTSD-5Si tu n'as déclaré aucune exposition à un événement : pas descore, message dédiéSinon : nombre de « Oui » parmi les 5 itemsPC-PTSD-5 : au moins 3 « Oui» ?ouinonDépistage positif, aveclignes d'écouteDépistage négatifASRSChaque item compte s'il atteint sa zone : items 1 à 3 à partir de« Parfois », items 4 à 6 à partir de « Souvent »ASRS : au moins 4 items sur6 dans la zone ?ouinonDépistage positifDépistage négatifAQ-10Un point par item « d'accord » (items 1, 7, 8, 10 : Tout à fait ouPlutôt d'accord) et par item « en désaccord » (items 2, 3, 4, 5,6, 9 : Plutôt pas ou Pas du tout d'accord)AQ-10 : 6 points ou plus ?ouinonDépistage positifDépistage négatif
Logigramme : Dépistages courts : stress post-traumatique, TDAH, autisme

Les valeurs utilisées

Nom dans le codeValeurRôleOù
ASRS_THRESHOLD{0: 2, 1: 2, 2: 2, 3: 3, 4: 3, 5: 3}Position minimale de la réponse pour que l'item comptesrc/trevor/conversation/mental_health.py:58
seuil ASRS4 sur 6Dépistage positif à partir de 4 itemssrc/trevor/conversation/mental_health.py:191-195
AQ_AGREE_ITEMS / AQ_DISAGREE_ITEMS{0,6,7,9} / {1,2,3,4,5,8}Items cotés quand tu es d'accord, ou en désaccord (clé Allison 2012 selon le code)src/trevor/conversation/mental_health.py:60-61
seuil AQ-106Dépistage positif à partir de 6 pointssrc/trevor/conversation/mental_health.py:688
seuil PC-PTSD-53Dépistage positif à partir de 3 « Oui »src/trevor/conversation/mental_health.py:662

Ce qui est affiché

Un score (PC-PTSD-5 sur 5, ASRS sur 6, AQ-10 sur 10) et un message « positif » ou « négatif » avec une explication. Ce n'est pas un diagnostic ni un dispositif médical validé : le résultat t'oriente vers un professionnel.

Un exemple chiffré

Aucun exemple chiffré exécuté pour cette fiche.

Ce que cet algorithme ne sait pas faire

Validation. Seuils et clés des instruments publiés tels que le code les mentionne (ASRS selon l'OMS, AQ-10 clé Allison 2012). Le dépôt ne contient pas de validation locale ni de relecture clinique de ces conseils.

Code : src/trevor/conversation/mental_health.py (pcptsd_count, asrs_positive, aq10_score, _finish_pcptsd, _finish_asrs, _finish_aq10)

Dépression et anxiété : PHQ-9, GAD-7 et échelle d'Édimbourg

Trévor additionne tes réponses aux questionnaires PHQ-9 (moral), GAD-7 (anxiété) et, pendant le post-partum, à l'échelle d'Édimbourg (EPDS). Il donne un score, un niveau et un conseil, et traite toujours en premier une réponse qui évoque des idées de se faire du mal. Ce n'est pas un diagnostic ni un dispositif médical validé : le résultat t'oriente vers un professionnel.

Où tu le vois : « Ma santé mentale » > Faire le point (auto-évaluations). L'EPDS vient en tête si tu es en post-partum.

Ce que l’algorithme lit

Le calcul, étape par étape

Points par réponsePHQ-9 et GAD-7 : Jamais 0, Plusieurs jours 1, Plus de la moitiédes jours 2, Presque tous les jours 3Une réponse manquante ou inconnue : pas de score, message «incomplet »SommePHQ-9 : somme des 9 réponses, de 0 à 27GAD-7 : somme des 7 réponses, de 0 à 21EPDS : somme des 10 items cotés de 0 à 3, de 0 à 30 ; les items 3et 5 à 10 sont inversés (ordre d'affichage du plus grave au plusléger)PHQ-9 : question 9différente de « Jamais » ?ouinonMessage de soutien et lignesd'écoute AVANT le résultatPas de message de sécuritéEPDS : question 10différente de « Jamais » ?ouinonMême message de soutien,avant le résultatPas de message de sécuritéNiveau (PHQ-9)0 à 4 minimal ; 5 à 9 léger ; 10 à 14 modéré ; 15 à 19 modérémentsévère ; 20 et plus sévèreNiveau (GAD-7)0 à 4 minimal ; 5 à 9 léger ; 10 à 14 modéré ; 15 et plus sévèreNiveau (EPDS)Moins de 10 : faible ; 10 à 12 : dépression possible ; 13 et plus: dépression probableConseilPHQ-9, GAD-7 et EPDS : à partir de 15 (EPDS : 13) conseil deconsulter un professionnel ; de 10 à 14 (EPDS : 10 à 12) conseilintermédiaire ; en dessous, conseil légerLe score et la phrase résumée sont enregistrés avec ta réponse
Logigramme : Dépression et anxiété : PHQ-9, GAD-7 et échelle d'Édimbourg

Les valeurs utilisées

Nom dans le codeValeurRôleOù
FREQ_SCALE[Jamais, Plusieurs jours, Plus de la moitié des jours, Presque tous les jours]Échelle de réponses du PHQ-9 et du GAD-7 (0 à 3)src/trevor/conversation/mental_health.py:53
EPDS_REVERSED_ITEMS{2, 4, 5, 6, 7, 8, 9}Items EPDS inversés (indices à partir de 0)src/trevor/conversation/mental_health.py:64
EPDS_POSSIBLE, EPDS_PROBABLE10, 13Seuils de l'EPDSsrc/trevor/conversation/mental_health.py:65
seuils PHQ-94 / 9 / 14 / 19Limites hautes des niveaux minimal, léger, modéré, modérément sévèresrc/trevor/conversation/mental_health.py:169-178
seuils GAD-74 / 9 / 14Limites hautes des niveaux minimal, léger, modérésrc/trevor/conversation/mental_health.py:181-188
seuils de conseil15 et 10Conseil « voir un professionnel » à partir de 15, conseil intermédiaire à partir de 10src/trevor/conversation/mental_health.py:605-609

Ce qui est affiché

Un score (PHQ-9 sur 27, GAD-7 sur 21, EPDS sur 30), son niveau en mots et un conseil. Les réponses d'idées suicidaires déclenchent un message de soutien avec les lignes d'écoute du pays avant tout autre contenu. Ce n'est pas un diagnostic ni un dispositif médical validé : le résultat t'oriente vers un professionnel.

Un exemple chiffré

PHQ-9 avec « Plusieurs jours » à chacune des 9 questions : 9, niveau léger ; avec 5 réponses « Plus de la moitié des jours » et 4 « Plusieurs jours » : 14, niveau modéré (vérifié en exécutant phq9_score). GAD-7 avec « Plusieurs jours » partout : 7, niveau léger. EPDS : score 11 → « dépression possible ».

Ce que cet algorithme ne sait pas faire

Validation. Les barèmes sont ceux des instruments connus (le code les dit « fondés sur les instruments validés » et cite Cox 1987 et Guedeney 1998 pour l'EPDS, HAS 2014 et NICE CG192 pour son usage dans le post-partum). Le dépôt ne montre pas de validation de la version française des libellés ni des conseils par un clinicien.

Code : src/trevor/conversation/mental_health.py (phq9_score, gad7_score, phq9_band, gad7_band, epds_item_scores, epds_band, _finish_phq9, _finish_gad7, _finish_epds)

Rappel de l'analyse de suivi de l'hydroxyurée

Trévor calcule la date de ta prochaine analyse de suivi en ajoutant le rythme que ton médecin t'a indiqué à la date de la dernière analyse connue. Il ne propose jamais de rythme lui-même et n'envoie aucun rappel tant que tu n'en as pas indiqué un.

Où tu le vois : Écran « Régularité et analyses de suivi » (ligne sur l'analyse), et message de rappel joint au rappel doux de prévention.

Ce que l’algorithme lit

Le calcul, étape par étape

Un rythme est indiqué ?ouinonOn cherche la dernièreanalyseÉtat « non réglé » : aucuneéchéance, aucun rappelDernière analyse connueLa plus récente entre la date notée à la main et la mesure la plusrécente d'HbF ou d'hémoglobine au dossierUne date est connue ?ouinonÉchéance = dernière analyse +rythme (en mois, jour ramenéà la fin du mois si besoin)État « aucune date » : unrappel unique te demande denoter la dateAujourd'hui dépassel'échéance ?ouinonÉtat « en retard »Il reste 30 jours ou moins ?Oui : « bientôt » ; non : « àjour »RappelSeuls « aucune date », « bientôt » et « en retard » produisent unrappelUn seul rappel par échéance (repère = date d'échéance), joint aumessage de prévention
Logigramme : Rappel de l'analyse de suivi de l'hydroxyurée

Les valeurs utilisées

Nom dans le codeValeurRôleOù
rhythm_months[1, 2, 3, 4, 6]Rythmes acceptés ; tout autre nombre est refusédata/hydroxyurea.json:12
soon_days30Préavis : « bientôt » quand il reste 30 jours ou moinsdata/hydroxyurea.json:13
kinds["hbf", "hb"]Types de mesures du dossier qui comptent comme analysedata/hydroxyurea.json:14
limite de date5 ansUne analyse notée ne peut pas être dans le futur ni dater de plus de 5 anssrc/trevor/hydroxyurea.py:135

Ce qui est affiché

Cinq états : non réglé, aucune date, à jour, bientôt (30 jours ou moins), en retard. Chacun a sa phrase. Les trois derniers sauf « à jour » déclenchent un rappel unique par échéance.

Un exemple chiffré

Rythme 3 mois, dernière analyse le 15.08.2026 : échéance le 15.11.2026 ; le 06.11.2026 il reste 9 jours, donc « bientôt » (calculé à la main à partir de add_months et du seuil de 30 jours).

Ce que cet algorithme ne sait pas faire

Validation. Règle d'organisation du projet, sans seuil clinique : le rythme est celui de ton médecin. Liste de rythmes et préavis de 30 jours : « à valider par les HUG » (docs/RELECTURES_A_FAIRE.md, M-B2.1 et M-B2.2).

Code : src/trevor/hydroxyurea.py (labs_status, last_lab_date, add_months, reminder_text, reminder_pending, mark_labs_done, set_rhythm), src/trevor/conversation/reminders.py (prevention_due_reminders), data/hydroxyurea.json

L'hydroxyurée dans le risque de crise

Quand tu prends l'hydroxyurée, ta régularité des 84 derniers jours devient deux traits du modèle de risque : un trait protecteur et un trait « prise irrégulière ». Cette fiche décrit seulement cette entrée, pas le calcul complet du risque, qui a sa propre fiche.

Où tu le vois : Indirectement : dans les raisons affichées avec le risque de crise (par exemple « Hydroxyurée suivie de façon irrégulière »).

Ce que l’algorithme lit

Le calcul, étape par étape

Tu as l'hydroxyurée ?ouinonOn lit la régularitéhu_protect = 0 et hu_gap = 0Régularité inconnue ou ≥ 80% ?ouinonhu_protect = 1, hu_gap = 0On regarde la tranchesuivanteRégularité de 60 à 79 % ?ouinonhu_protect = 0,6 et hu_gap =0,4Sous 60 % : hu_protect = 0 ethu_gap = 1Entrée dans le modèlePoids a priori : hu_protect −0,55 ; hu_gap +0,45Ces deux poids ne sont pas multipliés par le gain de 1,6 appliquéaux facteurs de risqueUn modèle personnel entraîné peut remplacer ces poids
Logigramme : L'hydroxyurée dans le risque de crise

Les valeurs utilisées

Nom dans le codeValeurRôleOù
seuil bon80À partir de 80 % : protection pleinesrc/trevor/wearables/crisis.py:297
seuil moyen60De 60 à 79 % : protection de 0,6 et écart de 0,4src/trevor/wearables/crisis.py:299
RISK_GAIN1.6Gain appliqué aux autres facteurs de risquesrc/trevor/wearables/crisis.py:493
GAIN_EXEMPThu_protect, dmt_other, tx_recent, tx_protectTraits protecteurs qui ne sont pas amplifiéssrc/trevor/wearables/crisis.py:495

Les poids

Un poids positif augmente le résultat, un poids négatif le diminue.

SignalPoidsOù
Hydroxyurée suivie régulièrement (≥ 80 % ou inconnue)−0,55src/trevor/wearables/crisis.py:78
Hydroxyurée suivie de façon irrégulière+0,45src/trevor/wearables/crisis.py:78

Ce qui est affiché

Deux nombres entre 0 et 1 (hu_protect et hu_gap) qui entrent dans la somme du modèle. Un trait « hydroxyurée » apparaît dans les raisons du risque s'il pèse assez.

Un exemple chiffré

Régularité 79 % : hu_protect 0,6, hu_gap 0,4 ; 59 % : 0 et 1 ; 80 % : 1 et 0 (vérifié en exécutant treatment_features).

Ce que cet algorithme ne sait pas faire

Validation. Les poids sont des a priori du code, commentés comme issus de la littérature sur l'hydroxyurée (Charache 1995, étude MSH ; Ware 2016, citées dans le commentaire de src/trevor/wearables/crisis.py:70-77) mais « remplacés par ceux appris sur la personne et la cohorte » et non validés. Les tranches 60 % et 80 % n'ont pas de source dans le code.

Code : src/trevor/wearables/crisis.py (treatment_features, PRIOR_WEIGHTS, GAIN_EXEMPT), src/trevor/wearables/service.py (treatment_context, training_rows), src/trevor/hydroxyurea.py (pdc, pdc_from_days)

Régularité de l'hydroxyurée (jours couverts)

Trévor compte, sur les 12 dernières semaines, la part des jours notés où tu as pris ton hydroxyurée. Ce pourcentage t'aide à voir ta régularité et alimente d'autres repères (signal de crises, risque de crise). Ce n'est pas un dispositif médical validé et il ne juge pas ta façon de prendre ton traitement.

Où tu le vois : Écran « 💊 Régularité et analyses de suivi » du bot et route /api/phone/hydroxyurea de l'application, pour les personnes qui ont l'hydroxyurée dans leurs traitements.

Ce que l’algorithme lit

Le calcul, étape par étape

Retrouver ton hydroxyuréeLe suivi se nomme « hydroxyuree », ou c'est un médicament saisiqui porte ce nomSeuls les comptes de rôle « patient » sont concernésUn suivi quotidien existe ?ouinonLes jours notés des 84derniers jours sont lus,prises supposées comprisesSi le médicament n'est quedans ta pharmacie, la pageexiste mais la régularitéreste videCompternotés = jours de la fenêtre qui ont une ligne (pris ou manqué),jusqu'à aujourd'huicouverts = parmi eux, les jours « pris »Un jour sans ligne n'est ni pris ni manqué : il ne compte pasAu moins 14 jours notés ?ouinonRégularité = couverts ÷ notés× 100, arrondie à l'entierAucun pourcentage : Trévordit combien de jours sontnotés et qu'il en faut 14Compter les gestes« déclarés » = jours notés par un geste de ta part (sans lesprises supposées)Si déclarés < notés, une ligne précise qu'un jour « pris pardéfaut » compte comme pris tant que tu ne signales pas de dosemanquéeRégularité ≥ 80 % ?ouinon« bonne » = vrai (ce drapeausert au signal de crises)« bonne » = fauxAfficher« Sur les 84 derniers jours, ton traitement est noté comme pris Xjours sur Y (Z %) »Les motifs de doses manquées (seulement tes gestes) servent à lapréparation de consultation
Logigramme : Régularité de l'hydroxyurée (jours couverts)

Les valeurs utilisées

Nom dans le codeValeurRôleOù
window_days84Fenêtre de calcul : 12 semaines, jour courant comprisdata/hydroxyurea.json:7
min_logged_days14Nombre minimal de jours notés pour afficher un pourcentagedata/hydroxyurea.json:8
good_from_percent80Seuil à partir duquel la régularité est dite « bonne »data/hydroxyurea.json:9
a_validertrueLe fichier de paramètres se déclare lui-même « à valider par les HUG »data/hydroxyurea.json:4

Ce qui est affiché

Un pourcentage entier de 0 à 100 (ou rien sous 14 jours notés), le nombre de jours couverts, notés et déclarés, et un drapeau « bonne » à partir de 80 %. Le seuil de 60 % n'existe pas ici : il apparaît seulement dans le calcul du risque de crise (fiche « L'hydroxyurée dans le risque de crise »).

Un exemple chiffré

Sur 30 jours notés dont 22 pris (un jour sur quatre manqué), régularité = 22 ÷ 30 = 73 % (vérifié en exécutant pdc_from_days). Avec seulement 10 jours notés, tous pris, le résultat est « aucun pourcentage » car 10 < 14.

Ce que cet algorithme ne sait pas faire

Validation. Valeurs posées par l'équipe du projet et marquées « à valider par les HUG » (data/hydroxyurea.json:3-4 ; docs/RELECTURES_A_FAIRE.md, ligne M-B2.3, statut « à valider par les HUG »). Aucune référence n'est citée dans le code pour la fenêtre, le minimum de 14 jours ni le seuil de 80 %. Le principe « jours couverts sur jours observés » est une façon courante de mesurer l'observance, mais ce dépôt ne l'établit pas.

Code : src/trevor/hydroxyurea.py (pdc_from_days, pdc, hu_key, missed_reasons, lines), data/hydroxyurea.json, src/trevor/navigator/doses.py (fill_defaults), src/trevor/storage/database.py (adherence_days)

Signal « à discuter avec ton équipe » (HbF ou crises)

Trévor repère deux situations qui méritent d'en parler à ton équipe de soins : une HbF qui reste sous ton meilleur taux sur trois mesures, ou au moins trois crises en six mois malgré une prise régulière. Il ne conclut jamais que le traitement ne marche pas et ne propose aucun changement.

Où tu le vois : Écran « Régularité et analyses de suivi » et questions pour la consultation. Le signal ne part jamais en notification.

Ce que l’algorithme lit

Le calcul, étape par étape

Trier les mesures d'HbFDe la plus ancienne à la plus récenteAu moins 3 mesures ?ouinonOn comparePas de signal HbFDeux conditionsPlus bas que le meilleur : la dernière valeur (arrondie à 0,1) eststrictement sous la plus haute des précédentesQui ne remonte pas : sur les trois dernières, chacune estinférieure ou égale à la précédenteLes deux conditions sontvraies ?ouinonSignal « hbf »Pas de signal HbFCompter les crisesÉpisodes de crise dont le jour de début est dans les 180 derniersjoursAu moins 3 crises ETrégularité ≥ 80 % sur ≥ 28jours notés ?ouinonSignal « crises »Pas de signal crisesAfficherLes raisons du signal, puis toujours la formule « à discuter avecton équipe de soins »Aucun signal ne sort sans cette formule
Logigramme : Signal « à discuter avec ton équipe » (HbF ou crises)

Les valeurs utilisées

Nom dans le codeValeurRôleOù
min_hbf_measures3Mesures d'HbF minimalesdata/hydroxyurea.json:17
min_logged_days_for_adherence28Jours notés minimaux pour juger la régularité dans ce signaldata/hydroxyurea.json:18
crises_min3Nombre de crises qui déclenche le signaldata/hydroxyurea.json:19
crises_window_days180Fenêtre de comptage des crises (affichée « 6 mois »)data/hydroxyurea.json:20
good_from_percent80Même seuil de régularité que la fiche « Régularité »data/hydroxyurea.json:9

Ce qui est affiché

Une liste de signaux (« hbf », « crises », les deux ou aucun). Chaque signal affiche sa raison (le nombre de crises est cité) puis la phrase de pied « à discuter avec ton équipe de soins ». Une question de consultation est ajoutée si un signal existe.

Un exemple chiffré

HbF notée 8, 12, 10, 9,5 : dernière 9,5 < meilleure 12 et 12 → 10 → 9,5 ne remonte pas, donc signal (vérifié avec hbf_vs_best). Avec seulement 8 et 12, count = 2, aucun signal.

Ce que cet algorithme ne sait pas faire

Validation. Règles posées par l'équipe du projet et « à valider par les HUG » (docs/RELECTURES_A_FAIRE.md, M-B2.4 et M-B2.5, qui demandent justement si 3 crises en 6 mois, 80 % et une baisse stricte sont adaptés). Aucune étude n'est citée dans le code.

Code : src/trevor/hydroxyurea.py (non_response, signal_lines, consult_questions), src/trevor/royal/labs.py (hbf_series, hbf_vs_best), data/hydroxyurea.json

Comment un jour est classé « crise »

Trévor décide si un jour compte comme jour de crise à partir de ce que tu as noté : douleur forte, hospitalisation, épisode de crise déclaré. Cette étiquette sert ensuite à entraîner le modèle de risque, à repérer des tendances et à tester des associations. Les règles ne sont pas identiques dans tous les modules.

Où tu le vois : Pas affiché tel quel : l'étiquette alimente le risque de crise, les tendances (« Mes repères »), les graphiques et les associations. Le journal des crises te montre les épisodes que tu déclares.

Ce que l’algorithme lit

Le calcul, étape par étape

Suivi du jourDouleur ≥ 7 sur10, ou réponse «hospitalisé(e) » :jour de criseDouleur horsquestionnaireIntensité ≥ 7 ETtexte ou catégoriecontenant crise,urgence, hospital,cvo ou vaso : jourde criseJournal des crisesChaque jour del'épisode, dudébut à la fin (oujusqu'àaujourd'hui si lacrise est encours) : jour decriseDouleur du jourSi tu réponds « pas de douleur », la douleur du jour vaut 0(donnée connue, pas manquante)Plusieurs sources le même jour : la valeur la plus haute estgardéeJour de crise dans le modèlede risque : criseaujourd'hui ou dans les 2jours suivants ?ouinonÉtiquette d'entraînement = 1Étiquette d'entraînement = 0Autres usagesGraphiques et associations (series.py) : 1 pour les joursd'épisode et les jours de douleur ≥ 7, 0 pour les autres jours oùtu as noté douleur, humeur ou fatigueTendances (insights.py) : seulement les jours d'épisodes dujournalJours « tout va bien » supposés : exclus les jours de crise etd'hospitalisationAlerte du cercleÀ l'enregistrement d'un épisode : douleur maximale ≥ 7 ou soins «urgences » ou « hospitalisation » → Trévor propose d'alerter toncercle de soutien
Logigramme : Comment un jour est classé « crise »

Les valeurs utilisées

Nom dans le codeValeurRôleOù
seuil de douleur7Douleur de 0 à 10 qui fait classer le jour comme crisesrc/trevor/wearables/service.py:553
CRISIS_OBS_WORDS("crise", "urgence", "hospital", "cvo", "vaso")Mots qui, avec une douleur ≥ 7 notée hors questionnaire, font classer le jour en crisesrc/trevor/wearables/service.py:513
HORIZON_DAYS2L'étiquette d'entraînement vaut 1 si une crise a lieu aujourd'hui ou dans les 2 jours suivantssrc/trevor/wearables/crisis.py:123
seuil de douleur (graphiques)7Même seuil dans les séries des graphiques et associationssrc/trevor/navigator/series.py:157
seuil d'alerte du cercle7Douleur maximale à partir de laquelle l'alerte du cercle est proposéesrc/trevor/conversation/crisis_diary.py:178

Ce qui est affiché

Pour chaque jour : crise oui/non, avec la douleur maximale du jour. L'étiquette d'entraînement du risque regarde aussi les 2 jours suivants.

Un exemple chiffré

Un jour où tu notes une douleur de 7/10 : jour de crise (7 ≥ 7). Le jour d'avant et celui d'avant encore reçoivent l'étiquette d'entraînement 1 si les signaux de ces jours-là sont appris. Une douleur de 6/10 sans hospitalisation ni épisode n'est pas un jour de crise.

Ce que cet algorithme ne sait pas faire

Validation. Seuil de 7 sur 10 posé par l'équipe du projet comme repère de douleur forte ; le code ne cite pas d'étude pour ce choix. L'horizon de 2 jours est un choix de conception du modèle de risque, non validé.

Code : src/trevor/wearables/service.py (day_records), src/trevor/wearables/crisis.py (training label), src/trevor/navigator/series.py (build), src/trevor/conversation/insights.py (_crisis_days), src/trevor/conversation/crisis_diary.py, src/trevor/dashboard/data.py (daily_series)

Rappel la veille de ton jour à crises

Si au moins 5 de tes crises des 120 derniers jours se concentrent un même jour de la semaine, Trévor repère ce jour pour t'envoyer un rappel d'auto-soin la veille. Il s'appuie seulement sur ton propre journal.

Où tu le vois : Message de rappel d'auto-soin la veille du jour dominant. Réservé aux patients dont la maladie a la prédiction de crise et qui ont activé les alertes de crise ; au plus un message tous les 7 jours (reminders.py:1416-1450).

Ce que l’algorithme lit

Le calcul, étape par étape

CompterDébut de chaque crise des 120 derniers jours rangé par jour de lasemaineAu moins 5 crises ?ouinonOn cherche le jour le plusfréquentAucun jour dominantCe jour a au moins max(3 ;1,5 × crises ÷ 7) crises ?ouinonJour dominant (0 = lundi)Aucun jour dominantRappel la veilleSi demain est le jour dominant, que la maladie a la prédiction decrise, que les alertes de crise sont activées et que le dernierrappel date d'au moins 7 jours : un message d'auto-soin nomme lejour
Logigramme : Rappel la veille de ton jour à crises

Les valeurs utilisées

Nom dans le codeValeurRôleOù
MIN_CRISES5Crises minimalessrc/trevor/conversation/prevention.py:16
WINDOW_DAYS120Fenêtresrc/trevor/conversation/prevention.py:17
DOMINANCE1.5Part du jour dominant en multiples de l'attendu uniforme (1/7)src/trevor/conversation/prevention.py:18

Ce qui est affiché

Un jour de la semaine, ou aucun.

Un exemple chiffré

Avec 7 crises, le jour dominant doit en avoir au moins max(3 ; 1,5 × 7 ÷ 7) = 3. Avec 14 crises, au moins max(3 ; 3) = 3 ; avec 21 crises, au moins 4,5 donc 5 (calculé à la main).

Ce que cet algorithme ne sait pas faire

Validation. Motif « n-of-1 » posé par l'équipe du projet ; seuils non étudiés dans le dépôt. Les mêmes règles (5 crises, 1,5) existent dans insights.py (élément 3).

Code : src/trevor/conversation/prevention.py (dominant_crisis_weekday), src/trevor/conversation/insights.py

Point douleur après un antalgique de secours

45 minutes après que tu notes une prise d'antalgique de secours, Trévor te demande comment va la douleur et applique un protocole d'escalade en trois niveaux : appeler le numéro d'urgence (144 en Suisse), aller aux urgences, ou avis médical dans les 24 heures. Les seuils restent à valider par l'hématologie. Ce n'est pas un dispositif médical validé.

Où tu le vois : Notification neutre sans mention de douleur (écran verrouillé), puis question avec quatre réponses : mieux, pareil, pire, signe de gravité.

Ce que l’algorithme lit

Le calcul, étape par étape

ProgrammerAprès chaque prise : premier point dans 45 minutesUn épisode commencé il y a moins de 24 heures garde son débutSigne de gravité ?ouinonAppel du numéro d'urgence(144 en Suisse) tout desuite, sans attendre l'effetde l'antalgique (niveau 1)On regarde la réponsePire ?ouinonUrgences maintenant (unedouleur qui monte malgré letraitement est un critèred'escalade)On continuePareil ?ouinonSi 1 heure ou plus depuis ledébut de l'épisode, oucomplication à risque (AVC,hypertension pulmonaire,rein) : urgences (niveau 2) ;sinon nouveau point dans 30minutesMieux : on continueMieux : 20 heures ou plusdepuis le début ?ouinonNiveau 3 : avis médical dansles 24 heures au plusNouveau point dans 3 heuresAutres réponses« Plus de douleur » termine le suivi« Ne plus me le demander » coupe la fonction ; elle se rallumedepuis l'écran de l'antalgique de secours
Logigramme : Point douleur après un antalgique de secours

Les valeurs utilisées

Nom dans le codeValeurRôleOù
FIRST_CHECK45 minPremier point après la prisesrc/trevor/conversation/pain_check.py:35
SAME_RECHECK30 minNouveau point après « pareil »src/trevor/conversation/pain_check.py:36
BETTER_RECHECK3 hNouveau point après « mieux »src/trevor/conversation/pain_check.py:37
ESCALATE_AFTER1 hDouleur inchangée après une heure : niveau 2src/trevor/conversation/pain_check.py:38
DAY_CEILING20 hDouleur encore là : niveau 3src/trevor/conversation/pain_check.py:39
EPISODE24 hDurée d'un épisodesrc/trevor/conversation/pain_check.py:40
HIGH_RISK(avc, hypertension pulmonaire, rénale)Complications qui font passer aux urgences dès le premier « pareil »src/trevor/conversation/pain_check.py:41

Ce qui est affiché

Un message parmi : signe de gravité, pire, escalade, nouveau point, mieux, plafond de 20 heures, douleur disparue, fonction coupée. Le numéro d'urgence de ton pays est inséré. Rien n'est envoyé à un soignant.

Un exemple chiffré

Prise à 14 h, point à 14 h 45 : « pareil » avec 45 minutes écoulées et sans complication → nouveau point à 15 h 15 ; « pareil » à 15 h 15 (1 h 15 écoulée) → urgences (lu dans decide).

Ce que cet algorithme ne sait pas faire

Validation. Le code décrit le protocole comme « le protocole des urgences en trois niveaux » et ses seuils comme « à valider par l'hématologie » : posés par le projet, non validés.

Code : src/trevor/conversation/pain_check.py (arm, due, decide, _pain_high_risk), src/trevor/conversation/rescue.py (arm after a dose), src/trevor/conversation/reminders.py (pain_check_tick)

Prises « par défaut » et taux de régularité des traitements

Quand tu es en mode « exception », Trévor affiche tes traitements comme pris tant que tu ne signales pas de dose manquée, et il écrit la nuit une ligne « pris » marquée supposée. Le taux de régularité de chaque traitement se calcule ensuite sur les jours notés.

Où tu le vois : Écran des traitements (« pris », « fait » pour un pansement), « Mes repères », bilan de consultation, vue du soignant.

Ce que l’algorithme lit

Le calcul, étape par étape

Tu es en mode « exception »pour les traitements ?ouinonUn traitement quotidien sansligne ce jour-là s'affiche «pris par défaut »Le geste explicite d'avantreste nécessaireChaque nuitPour les 2 derniers jours écoulés, une ligne « pris » supposée estécrite pour chaque traitement quotidien sans ligneJamais avant le premier passage (le premier soir fixe le début)Un rythme espacé (déféroxamine, injection) n'est jamais supposéprisTes gestes gagnent« pris » ou « dose manquée » remplace toujours la ligne supposée« Annuler » revient à la prise par défautRaisons possibles : oubli, pas bien, plus de stock, effetsgênants, absence, autreLe traitement est quotidien?ouinonTaux = jours « pris » ÷ joursnotés sur la fenêtre (30jours en général), en %, etsérie = jours consécutifspris jusqu'à aujourd'huiTaux = prises ÷ prisesattendues (au moins 5 soirspar semaine pour ladéféroxamine ; une injectiontoutes les n semaines),plafonné à 100, sans sérieOù les prises supposées comptentComptées : affichages pour toi, bilan de consultation, vue dusoignant, régularité de l'hydroxyuréeÉcartées par défaut : corrélations, associations, tendancesadhésion/crises, points
Logigramme : Prises « par défaut » et taux de régularité des traitements

Les valeurs utilisées

Nom dans le codeValeurRôleOù
CATCHUP_DAYS2Jours écoulés complétés chaque nuitsrc/trevor/navigator/doses.py:24
REASONS(forgot, unwell, no_supply, side_effects, away, other)Raisons d'une dose manquéesrc/trevor/navigator/doses.py:23
fenêtre du taux30 jours (par défaut)Fenêtre par défaut du taux d'adhésionsrc/trevor/storage/database.py:6241
seuil de consultation80Question de consultation si le taux est sous 80 % avec au moins 7 jours notéssrc/trevor/conversation/consultation.py:42

Ce qui est affiché

Un état par jour et par traitement (pris, supposé, manqué avec raison), un taux en pourcentage, une série de jours consécutifs et le nombre de jours supposés.

Un exemple chiffré

Aucun exemple chiffré exécuté pour cette fiche (le calcul demande une base de données).

Ce que cet algorithme ne sait pas faire

Validation. Règles d'organisation posées par l'équipe du projet. Le seuil de 80 % pour la question de consultation n'est pas justifié dans le code.

Code : src/trevor/navigator/doses.py (state, fill_defaults, declare_missed), src/trevor/storage/database.py (adherence_days, adherence_summary), src/trevor/navigator/checkin.py (inferred_taken)

Questions à poser à ton médecin

Trévor prépare jusqu'à cinq questions pour ta consultation à partir de tes données récentes : crises, régularité, signal de l'hydroxyurée, transfusion en retard, plaie, examens en retard. Chaque question désigne un sujet à aborder, jamais un diagnostic.

Où tu le vois : Préparation de consultation et trois points repris dans les tâches d'équipe (team_care.py:596-598).

Ce que l’algorithme lit

Le calcul, étape par étape

Au moins 2 crises en 30jours ?ouinonQuestion sur la fréquence descrisesRienAu moins une crise soignéeaux urgences ou à l'hôpital?ouinonQuestion sur la façond'anticiper la prochaineRienUn traitement quotidien : aumoins 7 jours notés et tauxsous 80 % ?ouinonQuestion sur ce traitementRienRythme espacéSi le taux (prises ÷ attendues) est sous 80 % : question sur lerythmeHydroxyuréeMotif le plus fréquent des doses manquées s'il apparaît au moins 2foisInvitation à faire le point si un signal existeDernière transfusion : jours÷ 7 − intervalle ≥ 1 semaine?ouinonQuestion sur le prochainrendez-vous (intervalle pardéfaut 4 semaines)RienOrganes et plaieExamens en retard ou jamais faits : jusqu'à 3 nommésPlaie qui ne diminue pas : question sur le pansement ou la causeCompléterTant qu'il y a moins de 5 questions, ajout de 3 questionsgénérales (vaccins et bilan, dépistages, qui appeler)
Logigramme : Questions à poser à ton médecin

Les valeurs utilisées

Nom dans le codeValeurRôleOù
crises2Seuil de la question sur la fréquencesrc/trevor/conversation/consultation.py:29
jours notés / taux7 / 80Seuils de la question sur un traitement quotidiensrc/trevor/conversation/consultation.py:42
retard de transfusion1 semaineRetard à partir duquel la question est poséesrc/trevor/conversation/consultation.py:58
maximum5Nombre maximal de questions après complétionsrc/trevor/conversation/consultation.py:85

Ce qui est affiché

Une liste de questions rédigées en français, de 1 à 5 questions au moins complétées par les questions générales.

Un exemple chiffré

Aucun exemple chiffré exécuté.

Ce que cet algorithme ne sait pas faire

Validation. Règles de bon sens posées par l'équipe du projet, sans seuil clinique validé.

Code : src/trevor/conversation/consultation.py (suggested_questions), src/trevor/hydroxyurea.py (consult_questions)

Scores des questionnaires : confiance en soi, qualité de vie, utilité perçue

Trévor calcule le score de plusieurs questionnaires : confiance pour gérer ta maladie (9 à 45), qualité de vie EQ-5D-5L, qualité de vie PedsQL (0 à 100) et utilité perçue de Trévor (échelle USE ou courts questionnaires de 3 questions). Chaque score est enregistré avec ta réponse. Ce ne sont pas des dispositifs médicaux validés.

Où tu le vois : Résultat à la fin du questionnaire de gestion de la maladie (avec la comparaison à la moyenne des personnes), questionnaire de qualité de vie, radar par catégories.

Ce que l’algorithme lit

Le calcul, étape par étape

Le questionnaire a un barème?ouinonLe type de barème choisit lecalculAucun scoreConfiance en soi (sum_map)9 questions, de « Pas du tout confiant(e) » 1 à « Tout à faitconfiant(e) » 5 ; une réponse inconnue vaut 0Somme de 9 à 45Niveau de confiance42 et plus : très élevé ; 36 à 41 : élevé ; 27 à 35 : moyen ;moins de 27 : faiblePar catégorie (1 à 5) : 5 très élevé ; 4 élevé ; 3 moyen ; 1 ou 2faibleComparé à la moyenne des personnes du botEQ-5D-5L5 dimensions (mobilité, autonomie, activités, douleur, anxiété),chacune de 1 (aucun problème) à 5 selon la position du choixSi une dimension n'a pas de réponse lisible : pas de scoreScore d'index avec le jeu de valeurs national si le fichierexiste, sinon score simplifié = 100 − 5 × (somme des niveauxau-delà de 1), de 0 à 100 (25 si tout est au niveau 5)PedsQLChaque réponse de l'échelle (Jamais … Presque toujours) vaut 100,75, 50, 25, 0 selon sa positionTotal = moyenne des items répondus, une décimale ; aucun score siaucune réponseUtilité perçueSomme des items chiffrés (USE : 8 items de 1 à 7, 8 à 56 ; courtsquestionnaires : 3 items de 1 à 7, 3 à 21)Aucun score si un item manque, n'est pas un entier ou sort de 1 à7
Logigramme : Scores des questionnaires : confiance en soi, qualité de vie, utilité perçue

Les valeurs utilisées

Nom dans le codeValeurRôleOù
bandes de confiance[[42,très élevé],[36,élevé],[27,moyen],[0,faible]]Niveaux du score de confiance (sur 45)data/questionnaires/diseaseManagement.json (scoring.bands)
formule simplifiée EQ-5D-5L100 − 5 × somme(niveau − 1)Score de repli quand le jeu de valeurs national est absentsrc/trevor/conversation/questionnaires/scoring.py:61-63
jeu de valeursdata/scoring/eq5d5l_value_set.csv (absent du dépôt)Fichier sous licence EuroQol à fournir ; le dépôt ne contient que le READMEdata/scoring/README.md
PedsQL100 − position × 25Conversion d'une réponse en pointssrc/trevor/conversation/questionnaires/scoring.py:74
min_item / max_item1 / 7Bornes des items d'utilité perçuedata/questionnaires/useUtilite.json (scoring)

Ce qui est affiché

Un nombre par questionnaire. EQ-5D-5L est étiqueté « simplifié » en l'absence du jeu de valeurs.

Un exemple chiffré

EQ-5D-5L avec les niveaux 1, 2, 3, 1, 4 : pénalité 0 + 1 + 2 + 0 + 3 = 6, score simplifié 100 − 30 = 70 (vérifié en exécutant eq5d5l_score).

Ce que cet algorithme ne sait pas faire

Validation. Les barèmes reprennent ceux d'instruments publiés (PedsQL : instrument de Varni sous licence Mapi, textes non modifiés ; USE : Lund 2001, traduction « à valider »). Les bandes de confiance (42, 36, 27) sont posées dans les données sans source citée ; le code parle d'un ancien calcul de catégories. Le jeu de valeurs EQ-5D-5L n'est pas inclus.

Code : src/trevor/conversation/questionnaires/scoring.py (compute_score, sum_map_score, band_label, category_label, eq5d5l_score, eq5d5l_levels, choice_level, pedsql_score, sum_numeric_score), src/trevor/conversation/display.py (format_self_efficacy_score), data/questionnaires/*.json (scoring)

Stock de médicaments et rappel de commande

Trévor estime combien de jours de traitement il te reste pour chaque médicament et te propose de préparer la commande quand le stock devient bas. Il n'envoie rien à la pharmacie sans ton accord.

Où tu le vois : « Mes médicaments » (« à commander », « bientôt », « ok »), et message de rappel de commande.

Ce que l’algorithme lit

Le calcul, étape par étape

Durée d'une boîte et date deretrait connues ?ouinonJours restants = durée ×boîtes − jours écoulés depuisle retrait (minimum 0, aumoins une boîte)Niveau « inconnu »Niveau7 jours ou moins : à commander ; 8 à 14 jours : bientôt ; plus :okUn médicament est àcommander et aucun rappelrécent ?ouinonUn message propose depréparer la commandeRienCadence du rappelPas de rappel dans les 2 jours après une commande envoyéeAu plus un rappel par médicament tous les 5 joursGarde-fousL'aperçu complet précède toujours l'envoi et un second gestel'autoriseLe courriel ne contient que l'identité, le médicament et lescoordonnées de réponseAu plus un envoi par médicament, destinataire et jour
Logigramme : Stock de médicaments et rappel de commande

Les valeurs utilisées

Nom dans le codeValeurRôleOù
LOW_DAYS7À commander à partir de 7 jours ou moinssrc/trevor/conversation/pharmacy.py:52
SOON_DAYS14Bientôt à partir de 14 jours ou moinssrc/trevor/conversation/pharmacy.py:53
rappel5 jours / 2 joursÉcart entre deux rappels / pause après une commandesrc/trevor/conversation/reminders.py:1470-1472
MAX_BOX_DAYS / MAX_BOXES365 / 99Bornes de saisiesrc/trevor/conversation/pharmacy.py:54-55

Ce qui est affiché

Un nombre de jours restants, un niveau (à commander, bientôt, ok, inconnu) et un message de rappel qui nomme le médicament et le nombre de jours.

Un exemple chiffré

Boîte de 30 jours, 2 boîtes, retrait il y a 55 jours : 30 × 2 − 55 = 5 jours restants, niveau « à commander » (calcul de days_left lu dans le code).

Ce que cet algorithme ne sait pas faire

Validation. Seuils de 7 et 14 jours posés par l'équipe du projet comme marge pour commander ; aucune validation clinique, sans enjeu thérapeutique direct.

Code : src/trevor/conversation/pharmacy.py (days_left, level, to_order, public), src/trevor/conversation/reminders.py (pharmacy_nudges)

Stress perçu : échelle PSS-10 et ressenti du jour

Trévor calcule ton score à l'échelle de stress perçu PSS-10 (de 0 à 40) et lui donne un niveau, puis réagit à ton ressenti du jour (0 à 10) par un conseil. Le questionnaire ne peut pas être refait avant 14 jours. Ce n'est pas un diagnostic ni un dispositif médical validé : le résultat t'oriente vers un professionnel.

Où tu le vois : « Mon stress » : ressenti du jour, PSS-10, tendances.

Ce que l’algorithme lit

Le calcul, étape par étape

Points par réponseJamais 0, Presque jamais 1, Parfois 2, Assez souvent 3, Trèssouvent 4Items 4, 5, 7, 8 inversés (4 moins le point)10 réponses lisibles ?ouinonScore = somme, de 0 à 40Pas de score : message «incomplet »Niveau0 à 13 : faible ; 14 à 26 : modéré ; 27 et plus : élevéScore ≥ 27 ?ouinonConseil fort et lignesd'écouteDe 14 à 26 : conseil modéré ;sous 14 : conseil légerRessenti du jourNiveau ≥ 8 : message de soutien et lignes d'écouteConseil : un texte généré par le modèle de langage s'il estdisponible et sans chiffre de santé inventé, sinon règle simple :0 à 3 conseil léger, 4 à 7 intermédiaire, 8 à 10 fort
Logigramme : Stress perçu : échelle PSS-10 et ressenti du jour

Les valeurs utilisées

Nom dans le codeValeurRôleOù
PSS_SCALEJamais 0 … Très souvent 4Points par réponsesrc/trevor/conversation/stress.py:45
PSS_REVERSED{3, 4, 6, 7}Items inversés (indices à partir de 0)src/trevor/conversation/stress.py:46
seuils PSS-1013 et 26Limites hautes des niveaux faible et modérésrc/trevor/conversation/stress.py:82-87
délai minimal14 joursUne nouvelle passation est refusée avant 14 jourssrc/trevor/conversation/stress.py:141

Ce qui est affiché

Un score sur 40, un niveau et un conseil. Le ressenti du jour donne un conseil et, à partir de 8 sur 10, les lignes d'écoute. Ce n'est pas un diagnostic ni un dispositif médical validé : le résultat t'oriente vers un professionnel.

Un exemple chiffré

Toutes les réponses « Parfois » : chaque item vaut 2, inversé 4 − 2 = 2, donc 20 sur 40, niveau modéré (vérifié en exécutant pss_score).

Ce que cet algorithme ne sait pas faire

Validation. Le PSS-10 est un instrument publié ; l'inversion des items 4, 5, 7 et 8 correspond à sa clé usuelle. Les niveaux faible, modéré et élevé et les conseils n'ont pas de source citée dans le code ni de relecture clinique visible.

Code : src/trevor/conversation/stress.py (pss_score, pss_band, finish_pss10, finish_stress_checkin, _stress_recommendation)

« Comment ça va ? » espacé et valeurs supposées

Trévor ne te demande pas chaque jour comment tu vas. Par défaut, il suppose que tout va bien tant que tu ne dis rien, et il te pose une question brève de temps en temps, plus espacée quand tu réponds « bien ». Les jours supposés ne servent jamais de preuve.

Où tu le vois : Message « comment ça va ? » avec trois réponses (bien, moyen, pas bien) ; jours supposés marqués « supposé » dans les graphiques et le suivi.

Ce que l’algorithme lit

Le calcul, étape par étape

Mode par domaineSi tu as choisi : ton choixSinon « quotidien » pour qui avait déjà un rappel quotidien(douleur, humeur, eau), « exception » pour les autresLes traitements restent en « exception » par défautFaut-il poser la questionaujourd'hui ?ouinonOui si : patient avec profilterminé et non bloqué,douleur ou humeur en «exception », moins de 3rappels ignorés, pasd'hospitalisation en cours,date d'échéance atteinte,dernier envoi il y a au moinsl'écart prévu, et rien notédepuis 7 joursPas de question aujourd'huiTu réponds « bien » ?ouinonLa série de « bien » augmenteet l'écart passe à 10, 14, 21puis 28 joursLa série repasse à 0 etl'écart à 10 joursTu réponds « pas bien » ?ouinonNouvelle question dans 3jours et le suivi habituelpeut s'ouvrirProchaine question aprèsl'écart prévuEnregistrer l'humeurbien = 8, moyen = 5, pas bien = 3, enregistré comme une humeur sur10 (« en un appui »)Jours supposésChaque domaine en « exception » : du premier jour supposé jusqu'àhier, hors jours que tu as notés, de crise ou d'hospitalisationValeurs : douleur 0, humeur 8, eau = ton objectif (8 verres pardéfaut, de 1 à 20)Rien n'est écrit dans ton dossier ; ces jours ne servent à aucunepreuve
Logigramme : « Comment ça va ? » espacé et valeurs supposées

Les valeurs utilisées

Nom dans le codeValeurRôleOù
CHECKIN_EVERY_DAYS10Écart de départ entre deux questionssrc/trevor/navigator/checkin.py:26
CHECKIN_MAX_EVERY_DAYS28Écart maximalsrc/trevor/navigator/checkin.py:27
CHECKIN_SCHEDULE(10, 14, 21, 28)Écart après 1, 2, 3, 4 réponses « bien » d'affiléesrc/trevor/navigator/checkin.py:28
CHECKIN_AFTER_BAD_DAYS3Délai avant la prochaine question après « pas bien »src/trevor/navigator/checkin.py:29
SILENCE_DAYS7Aucune question si tu as noté quelque chose dans ces jourssrc/trevor/navigator/checkin.py:30
LEVELS{good: 8, mid: 5, bad: 3}Humeur sur 10 enregistrée pour chaque réponsesrc/trevor/navigator/checkin.py:31
reminder_misses3Au moins 3 rappels ignorés : plus de questionsrc/trevor/navigator/checkin.py:181

Ce qui est affiché

Une question « comment ça va ? » espacée, une humeur sur 10 enregistrée, et des jours supposés « tout va bien » (douleur 0, humeur 8, eau à l'objectif) affichés comme supposés.

Un exemple chiffré

Premier « bien » : écart de 10 jours ; deuxième « bien » d'affilée : 14 jours ; quatrième et plus : 28 jours. Un « pas bien » ramène la prochaine question à 3 jours (lu dans record_level).

Ce que cet algorithme ne sait pas faire

Validation. Choix de conception, motivé dans l'en-tête du module par des observations de la littérature sur la baisse d'observance (chiffres 85,7 % puis 57,9 % cités dans le code, source dans docs/NAVIGATEUR_PERSONNEL.md). Les écarts et les valeurs supposées n'ont pas été testés sur des patients dans le dépôt.

Code : src/trevor/navigator/checkin.py (mode, checkin_due, record_level, assumed_days, assumed_values), src/trevor/navigator/series.py (build)

Suivi de prévention, vaccins et rappels d'examens

Pour chaque examen de surveillance ou vaccin que tu suis, Trévor calcule la date due (dernière date + intervalle) et un état : à jour, bientôt, en retard ou jamais noté. Il t'envoie un rappel doux, un seul par échéance.

Où tu le vois : Suivi de prévention (✅ 🟡 🔴 ⬜), résumé « Mes vaccins », message de rappel.

Ce que l’algorithme lit

Le calcul, étape par étape

Intervalle de départIntervalle du plan de prévention : 12 mois par défaut si nonpréciséExemples du plan : bilan 12, fond d'œil 12, reins 12, cerveau 60,cœur-poumons 36, vésicule 24, pneumocoque 60, méningocoque 60,grippe 12, ferritine (thalassémie) 3ResserrerUne complication connue peut imposer un rythme plus serré ; leplus petit gagneRein : max(3 ; 12 ÷ contrôles par an de la grille KDIGO) moisquand le stade est connuCalendrier de dépistagesSi ton génotype et ton âge sont connus, l'intervalle du calendrier(le plus serré) remplace celui du plan, et un examen nonrecommandé ou pas encore concerné disparaîtUne date de dernier examenexiste ?ouinonÉchéance = dernier examen +intervalleÉtat « jamais noté »Aujourd'hui ≥ échéance ?ouinon« en retard »60 jours ou moins : « bientôt» ; sinon « à jour »Rappel douxExamens « bientôt » ou « en retard » dont l'échéance n'a pas déjàété rappelée : un seul message par personne, joint à l'éventuelrappel d'analyse de l'hydroxyuréePersonnes en pause excluesVaccins notés avec « Ajouter un vaccin » : même règle ; rappel de12, 60 ou 120 mois au choix
Logigramme : Suivi de prévention, vaccins et rappels d'examens

Les valeurs utilisées

Nom dans le codeValeurRôleOù
PREVENTION_SOON_DAYS60Préavis du suivi de préventionsrc/trevor/conversation/engine.py:2737
SOON_DAYS (vaccins)60Même préavis pour les vaccinssrc/trevor/lifecourse/vaccine_log.py:40
PLAN_MONTHSgrippe 12 ; pneumocoque 60 ; méningocoque 60Rythme usuel des trois vaccins du plansrc/trevor/lifecourse/vaccine_log.py:38
REMINDER_MONTHS(12, 60, 120)Rappels possibles d'un vaccin que tu ajoutessrc/trevor/lifecourse/vaccine_log.py:39
_KDIGO_VISITSG1 (1,1,2) … G5 (4,4,4)Contrôles par an selon le DFG et l'albuminuriesrc/trevor/lifecourse/complications.py:110

Ce qui est affiché

Une ligne par examen ou vaccin : dernière date, échéance, état (à jour, bientôt, en retard, jamais), et le rappel texte « en retard » ou « à refaire vers JJ.MM.AAAA ».

Un exemple chiffré

Dernier vaccin de la grippe le 15.10.2025, intervalle 12 mois : échéance le 15.10.2026, le 06.11.2026 il est « en retard » (calculé à la main avec la règle aujourd'hui ≥ échéance).

Ce que cet algorithme ne sait pas faire

Validation. Repères généraux tirés de recommandations de suivi, selon l'en-tête de data/prevention.json (« à confirmer avec l'équipe ») ; la grille rénale cite KDIGO 2012 dans le code. Les fréquences des vaccins ne sont pas sourcées individuellement dans le code.

Code : src/trevor/conversation/engine.py (_prevention_rows_compute), src/trevor/lifecourse/vaccine_log.py (custom_rows), src/trevor/lifecourse/complications.py (exam_intervals, kdigo_visits_per_year), src/trevor/conversation/reminders.py (prevention_due_reminders), data/prevention.json

Enseignements sur tes crises et ta régularité

Trévor compare, sur 120 jours, le nombre de tes crises ce mois-ci et le mois précédent, ton sommeil avant les crises, le jour de la semaine le plus fréquent, ta régularité par traitement et les semaines bien ou mal suivies. Ce sont des observations descriptives, jamais une preuve de cause.

Où tu le vois : Écran de progression et récapitulatif mensuel envoyé au plus une fois par mois et par personne si au moins un enseignement ressort (reminders.py:1380-1410). Les comparaisons de crises demandent que la maladie ait la prédiction de crise.

Ce que l’algorithme lit

Le calcul, étape par étape

Fenêtre120 jours se terminant aujourd'hui (jour de Genève par défaut)Au moins 2 crises ?ouinonComparer les 30 derniersjours et les 30 précédents :moins = « diminuent », plus =« augmentent », égal = «stables »Pas de tendanceAu moins 15 nuits mesurées,4 crises, 3 nuits avantcrise et 7 nuits deréférence ?ouinonÉcart moyen de sommeil entrenuits de référence et les 2nuits avant le début d'unecrise ; si ≥ 40 min : messageRienAu moins 5 crises ?ouinonJour de semaine le plusfréquent s'il a au moinsmax(3 ; 1,5 × crises ÷ 7)crisesRienRégularité par traitementAvec au moins 10 jours notés sur 30 : ≥ 90 % → « belle régularité» ; < 70 % → « un rappel quotidien peut t'aider »Entre 70 et 89 % : aucun messageAu moins 3 semaines biensuivies ET 3 mal suivies ?ouinonSemaines complètes d'au moins5 jours notés : bien ≥ 80 %,mal < 50 % ; si les jours decrise par semaine diffèrentd'au moins 0,5 en faveur dessemaines bien suivies :message encourageantRien
Logigramme : Enseignements sur tes crises et ta régularité

Les valeurs utilisées

Nom dans le codeValeurRôleOù
WINDOW_DAYS120Fenêtre d'analysesrc/trevor/conversation/insights.py:24
MIN_CRISES_TREND2Crises minimales pour une tendancesrc/trevor/conversation/insights.py:25
MIN_CRISES_PATTERN4Crises minimales pour chercher un motif de sommeilsrc/trevor/conversation/insights.py:26
MIN_SLEEP_DAYS15Nuits mesurées minimalessrc/trevor/conversation/insights.py:27
SLEEP_GAP_MINUTES40Écart de sommeil jugé notablesrc/trevor/conversation/insights.py:28
MIN_WEEKS_COMPARE3Semaines minimales de chaque groupesrc/trevor/conversation/insights.py:29
CRISIS_GAP_DAYS0.5Écart de jours de crise par semaine jugé notablesrc/trevor/conversation/insights.py:30
seuils de régularité90 et 70Messages « belle régularité » et « un rappel peut t'aider »src/trevor/conversation/insights.py:137-140

Ce qui est affiché

Une liste de messages avec un ton (bon, info, à surveiller). Vide si rien n'est fiable. Le message sur les semaines bien suivies rappelle que c'est une piste à confirmer avec ton équipe, pas une certitude.

Un exemple chiffré

Aucun exemple chiffré exécuté (le calcul demande une base de données).

Ce que cet algorithme ne sait pas faire

Validation. Seuils posés par l'équipe du projet, sans étude citée dans le code ; les messages se présentent comme des pistes à discuter.

Code : src/trevor/conversation/insights.py (compute_insights, _weekly_adherence_and_crises)

Important. Ces calculs orientent, ils ne posent aucun diagnostic et ne remplacent pas l'avis de l'équipe soignante. En cas de douleur forte, de fièvre ou d'essoufflement, il faut appeler le 144 sans attendre.