HormoneTrack/README.md
Siphonight d9471cadaf v1.2.1 : calibration par période d'ester, édition des labs, tap accueil→Graphiques, auto-cal fusionnée E2+T, lab T en unité aberrante neutralisé
- computeEsterScaleFactors : chaque lab est attribué à la période d'injection
  dans laquelle il tombe (dernière dose E2 <= lab → son ester) ; facteur final
  par ester = médiane des ratios de cette période. Corrige le mélange des
  périodes valerate/enanthate qui gonflait les courbes (250-375 pg/mL)
- e2At/computeCurve : paramètre scalePerEster (chaque dose scalée par le facteur
  de SON ester, fallback = scaleFactor stocké du traitement)
- autoCalibrated : renvoie esterScales + tConfig recalibré, traitements inchangés
- convertTToNgMl : conversion défensive pg/mL et µg/L (un lab T « 38 pg/mL »
  écrasait l'axe T et rendait la courbe T invisible — remonté utilisateur)
- LabDialog create/edit : tap sur une ligne de l'écran Analyses → édition
  pré-remplie (formatLabValue préserve les décimales)
- Home : tap sur le mini-graphique → écran Graphiques + mini-légende E2/T
- Settings : UNE seule option « Calibration automatique (E2 + T) » (E2 par
  période d'ester + modèle T), placée au-dessus des réglages T manuels
- RegressionUserCase2Test : 2e export réel épinglé (9 doses EEn/TFS, 8 labs,
  fréquence 6 j) — vérifie l'état d'équilibre EEn (~270 pg/mL calibré, cohérent
  labs 306/248 ; non calibré ≈ 367 = les « 375 » rapportés)
- V120FeaturesTest : attribution des labs par période d'ester + scalePerEster
- 44 tests verts ; versionCode 4, versionName 1.2.1
- Docs : CHANGELOG, DEVELOPPEMENT (§7.6 réécrit), GUIDE, README
2026-09-05 17:38:08 +02:00

8.0 KiB
Raw Blame History

HormoneTrack

Suivi de thérapie hormonale (THS) sur Android, avec courbes estimées heure par heure d'estradiol (E2) et de testostérone (T), calibration sur les prises de sang, rappels affichés sur smartwatch (Huawei Watch GT 3 via Gadgetbridge ou Huawei Health) et sauvegarde JSON. 100 % local, aucun compte, aucun serveur.

⚠️ Avertissement médical : les courbes sont des estimations pharmacocinétiques à titre informatif — ce ne sont pas des mesures. Fie-toi toujours à tes analyses de sang et aux consignes de ton endocrinologue.

Fonctionnalités

  • Courbes estimées heure par heure : E2 (pg/mL) et T (ng/mL), vue 24 h / 7 j / 30 j, panoramique (glisser pour remonter dans le passé)
  • Deux modèles PK au choix, superposables (issus de la feuille Estrogen.ods) : Estrannaise (EstraNase) et Transfem Science pour les injections EV / EU / EEn, affichés côte à côte avec toggles indépendants
  • Modèle Bateman paramétrable (temps au pic, demi-vie, biodisponibilité) pour gel, patch et voie orale
  • Simulation prévisionnelle : configurer la fréquence d'injection (jours) sur un traitement → projection des doses à venir sur le graphique (jamais sauvegardées)
  • Log des doses avec date/heure exacte, dose en mg, ester par injection (switch EV↔EU↔EEn comme dans le tableur), éditable (tap sur une ligne dans Doses), intervalle en jours entre dosages affiché
  • Analyses de sang (E2, T, PRL…) tracées sur les courbes comme points de calibration, éditables (tap sur une ligne dans Analyses) ; unités T : ng/mL, ng/dL, ng/L, nmol/L
  • Calibration : facteur d'échelle par traitement = médiane(lab ÷ prédiction du modèle), calculé automatiquement (« Scale factor » du .ods, automatisé) — ou calibration automatique permanente (option, désactivée par défaut) qui calibre chaque ester avec les labs de sa période (labs valerate → doses valerate, labs enanthate → doses enanthate) et recalibre le modèle T
  • Estimation T empirique T = plancher + (base − plancher) ÷ (1 + k·E2), calibrable avec tes résultats T (unités ng/mL, ng/dL, ng/L, nmol/L acceptées)
  • Rappels quotidiens avec actions « Pris » / « Reporter 1 h » dans la notification ; les notifications remontent sur la Watch GT 3 (Gadgetbridge ou Huawei Health)
  • Sauvegarde/Restauration JSON complète (traitements + doses + analyses + réglages T)
  • FR + EN (langue par app, indépendante du système)
  • UI Jetpack Compose récente (BOM 2026.08, Material You) ; 100 % local, aucun compte

Démarrage rapide (build depuis les sources)

Prérequis : JDK 17+ (Java 21 OK), Android SDK (la plateforme 37 sera auto-téléchargée par AGP si les licences sont signées). Le wrapper télécharge Gradle 9.7.1.

git clone <repo> && cd HormoneTrack
echo "sdk.dir=/chemin/vers/android-sdk" > local.properties   # ou ANDROID_HOME
./gradlew assembleDebug            # APK : app/build/outputs/apk/debug/app-debug.apk
./gradlew testDebugUnitTest        # 36 tests (moteur PK, profils, backup, régression)

Installation sur un téléphone : mode développeur + Débogage USB, puis Android Studio (Run ▶️) ou adb install -r app/build/outputs/apk/debug/app-debug.apk. Pas de Play Store : l'app est sideloadée. Détails pas-à-pas : docs/GUIDE_INSTALLATION.md.

Git

Dépôt initialisé avec des releases taguées (v1.1.0, v1.2.0, …) :

git tag            # lister les releases
git log --oneline  # historique par couches (toolchain / moteur / UI / docs)
git push -u origin main --tags   # après ajout d'un remote

Chaque commit de release passe ./gradlew testDebugUnitTest (vert obligatoire) et est taggué annoté. Voir docs/DEVELOPPEMENT.md §16.

Les modèles en bref

Chaque injection contribue dose_mg × profil(dt) où profil est la réponse normalisée (pg/mL par mg) issue des tables horaires d'Estrannaise / Transfem Science (8001 h) ; les contributions se superposent. Pics de référence :

Profil Modèle Pic (pg/mL/mg) Tmax
EV Estrannaise 61,1 ~45 h
EU Estrannaise 3,4 ~55 h (plateau long)
EEn Estrannaise 31,4 ~152 h
EV Transfem Science 59,0 ~51 h
EU Transfem Science 10,1 ~198 h
EEn Transfem Science 32,0 ~156 h

La calibration (facteur d'échelle par traitement, calibré par tes labs) ajuste le modèle à ton corps, exactement comme la colonne « Scale factor » de la feuille d'origine.

Vie privée

  • Base de données Room locale sur le téléphone ; aucune télémétrie, aucun réseau
  • Sauvegarde = fichier JSON que tu stockes où tu veux (Owncloud, etc.)
  • allowBackup=false (données sensibles) ; verrou biométrique prévu en Phase 2
  • Compat Gadgetbridge (FOSS) : aucune dépendance à Huawei Health ni aux services Huawei

Structure du dépôt

HormoneTrack/
├── README.md                     ← ce fichier
├── docs/
│   ├── GUIDE_INSTALLATION.md     guide utilisateur (téléphone + montre)
│   ├── DEVELOPPEMENT.md          doc de dev complète (architecture, maths, bugs, tests)
│   └── MONTRE-GADGETBRIDGE.md    montre Huawei GT 3 : options + limites
├── build.gradle.kts              config Gradle racine (AGP/Kotlin/KSP épinglés)
├── settings.gradle.kts
├── gradle.properties
├── gradle/wrapper/               wrapper Gradle 8.9 (jar + properties)
├── gradlew / gradlew.bat
└── app/
    ├── build.gradle.kts          dépendances (Compose, Room, DataStore, Gson…)
    ├── proguard-rules.pro
    └── src/
        ├── main/
        │   ├── AndroidManifest.xml
        │   ├── assets/pk_profiles.json          ← tables horaires (Estrannaise/TFS)
        │   ├── java/com/hormonetrack/
        │   │   ├── data/         (Room : models, DAOs, repository, backup)
        │   │   ├── pk/           (moteur pharmacocinétique + profils)
        │   │   ├── reminder/     (alarmes exactes, notifs + actions, boot)
        │   │   ├── settings/     (DataStore : TConfig, langue)
        │   │   ├── ui/           (Compose : screens, components, theme)
        │   │   ├── HormoneTrackApp.kt
        │   │   └── MainActivity.kt
        │   └── res/              (strings FR/EN, thème, icônes)
        └── test/java/com/hormonetrack/          ← tests unitaires JVM
            ├── pk/               (moteur + profils)
            └── data/backup/      (round-trip Gson)

Feuille de route

  • v1 : courbes E2/T, log doses, labs + calibration, rappels, backup JSON, FR/EN
  • Tests UI Compose + compilation release signée
  • Verrou biométrique, widget, export CSV
  • Phase 2 montre : watchface personnalisée et/ou mini-app Lite Wearable (voir docs/MONTRE-GADGETBRIDGE.md)

Licence

À définir avant le premier push public (suggestion : GPL-3.0, cohérent avec l'écosystème Gadgetbridge). Les modèles PK appartiennent à leurs autrices respectives (Estrannaise, Transfem Science).