# 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. - **Statut** : v1.2.3 — build Android ✅, **56 tests unitaires** ✅ (2 régressions épinglées sur données réelles), intégration montre = notifications ✅, **repo git avec releases taguées** ✅ - **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é), **pics & creux** affichables (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 **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 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) - **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ôt initialisé avec des **releases taguées** (`v1.1.0`, `v1.2.0`, …) : ```bash 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](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 - 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 - [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 À 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](https://estrannaise.github.io/), [Transfem Science](https://transfemscience.org)).