# 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.3.2 — build Android ✅, **87 tests unitaires** ✅ (44 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, **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** (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 **posologie** (intervalle en 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Ă© - **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) - **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) - **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) - **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 # 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](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.3.1`) 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) 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 - **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 une release (corps = CHANGELOG + APK) ├── 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 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 - [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)).