# HormoneTrack > **đŸ€– DĂ©veloppĂ© avec l'IA** : ce projet a Ă©tĂ© conçu et codĂ© avec un assistant IA. > La contribution humaine a Ă©tĂ© **essentielle** : feedback continu, retours > utilisateur (tests sur vrai tĂ©lĂ©phone, rapports de bugs accompagnĂ©s d'exports > rĂ©els), suggestions d'amĂ©liorations et validation de chaque release. Le > dĂ©tail session par session est documentĂ© dans > [docs/DEVELOPPEMENT.md §2](docs/DEVELOPPEMENT.md). 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. - **Statut** : v1.4.9 — build Android ✅, **lint vert** ✅, **168 tests unitaires** ✅ (146 sans les donnĂ©es de test locales ; 3 rĂ©gressions Ă©pinglĂ©es sur donnĂ©es rĂ©elles **non versionnĂ©es**), intĂ©gration montre = notifications ✅, **dĂ©pĂŽt Gitea privĂ© + releases avec APK** ✅ - **Journal des versions** : [docs/CHANGELOG.md](docs/CHANGELOG.md) - **Guide utilisateur** : [docs/GUIDE_INSTALLATION.md](docs/GUIDE_INSTALLATION.md) - **Doc de dĂ©veloppement** (architecture, maths, dĂ©cisions, bugs) : [docs/DEVELOPPEMENT.md](docs/DEVELOPPEMENT.md) - **Montre / Gadgetbridge** : [docs/MONTRE-GADGETBRIDGE.md](docs/MONTRE-GADGETBRIDGE.md) ## FonctionnalitĂ©s - **Courbes estimĂ©es heure par heure** : E2 (pg/mL) et T (ng/mL), vue 24 h / 7 j / 30 j, **doses marquĂ©es** (prĂ©visionnelles et rĂ©elles), **fuseau horaire du graphique configurable** (v1.4.5), **panoramique** (glisser pour remonter dans le passĂ©), **zoom** (pinch ou boutons − / +, 6 h → 300 j, Ă©chantillonnage adaptatif), **pics & creux** affichables avec leurs **valeurs estimĂ©es** (triangles â–Čâ–Œ aux extrema locaux, toggle) - **Deux modĂšles PK au choix, superposables** : **Estrannaise (EstraNase)** (tables horaires du `.ods`) et **Transfem Science** — depuis v1.4.0, le modĂšle TFS est la **mĂ©ta-analyse officielle Ă  3 compartiments** (forme close exacte, params du [simulateur TFS](https://transfemscience.org/misc/injectable-e2-simulator/), [article](https://transfemscience.org/articles/injectable-e2-meta-analysis/)), avec les **7 esters** (EV, EU, EEn, EB, EC huile, EC suspension, PEP) — et WHSAH en couvre 6 (sans PEP). AffichĂ©s cĂŽte Ă  cĂŽte avec toggles indĂ©pendants (3 couleurs) — **prĂ©-cochĂ©s selon les modĂšles de tes traitements** (v1.4.7) et **chaque modĂšle calibrĂ© sĂ©parĂ©ment** par tes labs (v1.4.8 — les facteurs s'adaptent Ă  chaque profil) - **ModĂšle Bateman** paramĂ©trable (temps au pic, demi-vie, biodisponibilitĂ©) pour gel, patch et voie orale - **Simulation prĂ©visionnelle** : configurer la **posologie** (intervalle en jours) sur un traitement → projection des doses Ă  venir sur le graphique (jamais sauvegardĂ©es) ; **l'activation ne dĂ©place pas le dĂ©but du graphique** mais ÉTEND la fenĂȘtre jusqu'Ă  la prochaine dose (v1.4.4) et la projection se parcourt en tirant vers la gauche, jusqu'Ă  **1 an** - **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Ă© - **Traitements inactifs** : un traitement archivĂ© n'apparaĂźt plus dans la saisie ni dans les rappels, mais **tout son historique reste simulĂ© et calibrĂ©** — utile pour une transition valerate → enanthate - **Analyses de sang** : **E2 + T en une seule entrĂ©e** (chacune optionnelle), affichĂ©es **cĂŽte Ă  cĂŽte** quand elles partagent la mĂȘme date/heure, Ă©ditables (tap → choix de l'entrĂ©e) ; 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)`, avec **k calibrĂ© par pĂ©riode d'ester** (la suppression T diffĂšre valerate vs enanthate), contre l'E2 dĂ©jĂ  calibrĂ©e — unitĂ©s T acceptĂ©es : ng/mL, ng/dL, ng/L, nmol/L - **Rappels quotidiens** avec actions **« Pris » / « Reporter 1 h »** dans la notification ; les notifications remontent sur la Watch GT 3 (Gadgetbridge ou Huawei Health) ; **les rappels suivent la Posologie** (v1.4.0) : un traitement injectĂ© tous les 7 jours ne sonne que le jour d'injection, pas tous les jours - **Seuils d'alerte configurables** (v1.4.2) : limites hautes/basses E2 (pg/mL) et T (ng/mL) dans ParamĂštres → carte d'avertissement sur l'accueil + **notification toutes les 15 min mĂȘme app fermĂ©e** (WorkManager, anti-spam, canal dĂ©diĂ©) — Ă©valuĂ©es sur le taux **estimĂ©**, opt-in - **Sauvegarde JSON complĂšte** : traitements + doses + analyses + rĂ©glages T **+ paramĂštres (langue, auto-calibration, seuils d'alerte)** (v1.4.2) - **NouveautĂ©s Ă  chaque mise Ă  jour** : dialog de changelog automatique (fermĂ© = ne rĂ©apparaĂźt pas avant la prochaine version) - **Temps sous THS** affichĂ© en haut de la page Doses (depuis la 1re prise) ; **prochaine dose en jours** sur l'accueil quand elle est Ă  plus de 24 h (v1.4.1) - **Logs de diagnostic** exportables (ParamĂštres) — utile pour le support - **ÉvĂ©nements d'agenda** : les rappels de prises peuvent crĂ©er un Ă©vĂ©nement rĂ©current (posologie) dans un calendrier « HormoneTrack » de ton tĂ©lĂ©phone - **Sauvegarde/Restauration JSON** complĂšte (traitements + doses + analyses + rĂ©glages T + paramĂštres, v1.4.2) - **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. ```bash git clone && 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 # 168 tests (146 sans les donnĂ©es locales) ./gradlew lint # lint vert obligatoire avant release ``` 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](docs/GUIDE_INSTALLATION.md). ## Git DĂ©pĂŽts : **gitea.cloudyfy.fr** et **gitea.farewell.dev** (miroir) — `Siphonight/HormoneTrack` sur les deux (privĂ©), avec **releases taguĂ©es** (`v1.1.0` → `v1.4.9`) et **deux APK par release** (depuis v1.2.5) (tĂ©lĂ©chargeables sans compiler, cf [docs/DEVELOPPEMENT.md §16.bis](docs/DEVELOPPEMENT.md)) : `-release.apk` (**recommandĂ©**, optimisĂ© R8, 2,4 Mo) et `-debug.apk` (20 Mo) : ```bash git tag # lister les releases git log --oneline # historique par couches (toolchain / moteur / UI / docs) git push -u origin main --tags ``` Chaque commit de release passe `./gradlew testDebugUnitTest` (vert obligatoire) et est tagguĂ© annotĂ©. Voir [docs/DEVELOPPEMENT.md §16](docs/DEVELOPPEMENT.md). ## Les modĂšles en bref Chaque injection contribue `dose_mg × profil(dt)` oĂč `profil` est la rĂ©ponse normalisĂ©e (pg/mL par mg) ; les contributions se superposent. **Trois modĂšles superposables** : - **Estrannaise** = tables horaires du `.ods` (8001 h), EV/EU/EEn - **Transfem Science** = mĂ©ta-analyse Ă  3 compartiments (V3C, forme close, [article](https://transfemscience.org/articles/injectable-e2-meta-analysis/)), 7 esters (EV, EU, EEn, EB, EC, EC suspension, PEP) - **WHSAH** (v1.4.6) = fit « license-free » du [WHSAH Collective via Mona](https://github.com/mona-hrt/mona) — mĂȘme famille mathĂ©matique mais paramĂštres indĂ©pendants avec biodisponibilitĂ© explicite F < 1 : montĂ©e plus rapide Ă  J+1 (EEn ~70 pg/mL Ă  J+1 pour 5 mg vs ~22 chez TFS) et dĂ©croissance plus longue (tœ EEn 7,3 j vs 4,5 j). 6 esters (sans PEP) Pics de rĂ©fĂ©rence (pg/mL par mg) : | Profil | ModĂšle | Pic (pg/mL/mg) | Tmax | tœ term. | |----------|------------------|----------------|--------|----------| | 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 | 3,0 j | | EU | Transfem Science | 10,1 | ~198 h | — | | EEn | Transfem Science | 32,0 | ~156 h | 4,5 j | | EB | Transfem Science | 194,2 | ~16 h | 1,2 j | | EC (huile) | Transfem Science | 31,1 | ~103 h | 6,7 j | | EC (susp.) | Transfem Science | 48,2 | ~29 h | 5,1 j | | PEP | Transfem Science | 1,03 (dose ~6,5×) | ~18 j | 28,4 j | | EV | WHSAH | 73,5 | ~41 h | 3,1 j | | EEn | WHSAH | 37,6 | ~120 h | 7,3 j | | EB | WHSAH | 260,1 | ~12 h | 1,3 j | | EC (huile) | WHSAH | 25,0 | ~81 h | 7,9 j | | EC (susp.) | WHSAH | 53,5 | ~16 h | 7,1 j | | EU | WHSAH | 4,9 | ~67 h | 31,7 j | **Calibration (v1.4.8)** : le facteur d'Ă©chelle s'applique par ESTER et par PÉRIODE d'injection (mĂ©diane des ratios lab Ă· prĂ©diction, comme la colonne « Scale factor » de la feuille d'origine) — et **par MODÈLE** : chaque courbe affichĂ©e (Estrannaise / Transfem Science / WHSAH) est calibrĂ©e avec la prĂ©diction de SON modĂšle → toutes collent Ă  tes labs, quelle que soit leur forme. L'auto-calibration est optionnelle (dĂ©sactivĂ©e par dĂ©faut). ## Vie privĂ©e - **L'app est 100 % locale** : base de donnĂ©es Room sur le tĂ©lĂ©phone, aucun serveur, aucune tĂ©lĂ©mĂ©trie ; compat **Gadgetbridge** (FOSS) sans dĂ©pendance Ă  Huawei Health - **Le dĂ©pĂŽt ne contient aucune donnĂ©e de santĂ©** : le code et la doc sont gĂ©nĂ©riques ; les tests de rĂ©gression qui utilisent des exports rĂ©els chargent leurs donnĂ©es depuis `local-test-data/` (**gitignorĂ©**, hors dĂ©pĂŽt — et l'historique a Ă©tĂ© nettoyĂ© avant le premier push, cf [docs/DEVELOPPEMENT.md §8.bis](docs/DEVELOPPEMENT.md)) - Sauvegarde = fichier JSON que tu stockes oĂč tu veux (Owncloud, etc.) - `allowBackup=false` (donnĂ©es sensibles) ; verrou biomĂ©trique prĂ©vu en Phase 2 - Le dĂ©pĂŽt est **privĂ©** : les releases APK se tĂ©lĂ©chargent en Ă©tant connectĂ© ; passer le dĂ©pĂŽt en public rend les APK tĂ©lĂ©chargeables sans compte (sans risque de donnĂ©es, cf ci-dessus) ## 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) │ ├── CHANGELOG.md journal dĂ©taillĂ© des versions │ └── MONTRE-GADGETBRIDGE.md montre Huawei GT 3 : options + limites ├── scripts/ │ ├── gitea-release.py publie le corps d'une release (CHANGELOG + APK) │ ├── publish-release.py publie les 2 APK d'un tag (vĂ©rification par tĂ©lĂ©chargement) │ └── seed-emulator.py injecte un backup JSON dans la DB d'un Ă©mulateur (cf §16.ter) ├── local-test-data/ ← gitignorĂ© : backups rĂ©els pour les tests │ de rĂ©gression (JAMAIS dans le dĂ©pĂŽt, cf §8.bis) ├── build.gradle.kts config Gradle racine (AGP/Kotlin/KSP Ă©pinglĂ©s) ├── settings.gradle.kts ├── gradle.properties ├── gradle/wrapper/ wrapper Gradle 9.7.1 (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 PK + profils : Estrannaise/TFS/WHSAH, alertes, export) │ │ ├── reminder/ (alarmes exactes, notifs + actions, boot, worker alertes) │ │ ├── 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 - [x] 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](docs/MONTRE-GADGETBRIDGE.md)) ## Licence **GPL-3.0** — voir [LICENSE](LICENSE). CohĂ©rent avec l'Ă©cosystĂšme Gadgetbridge. Les modĂšles PK appartiennent Ă  leurs autrices respectives ([Estrannaise](https://estrannaise.github.io/), [Transfem Science](https://transfemscience.org)).