HormoneTrack/docs/CHANGELOG.md
Siphonight e8f87c096d Documentation v1.2.0 : changelog, guide (fonctions du graphique), doc de dev (AGP 9, migrations, panoramique, prévision, auto-cal), README (git, features)
- docs/CHANGELOG.md : entrée v1.2.0 complète
- docs/DEVELOPPEMENT.md : versions épinglées à jour, note Material Expressive
  (API encore internal), migration Room v1→v2, §7.3b (override modèle/prévision/
  auto-cal), §8 (36 tests), §10/§11 (panoramique, multi-séries), §16 (workflow git),
  §18 (disque), historique des sessions
- README : statut v1.2.0, features à jour, section Git (tags de release)
- GUIDE : nouvelle section « Fonctions du graphique » (panoramique, toggles
  modèles, prévision, calibration auto)
2026-09-05 16:58:32 +02:00

88 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog — HormoneTrack
Format : [Keep a Changelog](https://keepachangelog.com/fr-FR/1.1.0/).
Versionnage : [SemVer](https://semver.org/). Releases taguées dans git (`v1.2.0`, …).
## [1.2.0] — 2026-09-05 (versionCode 3)
### Ajouté
- **Panoramique du graphique** : fais glisser le graphique vers la droite pour
remonter dans le passé (fenêtre glissante sur tout l'historique) ; bouton
« Revenir à maintenant ».
- **Les deux modèles PK superposables** : Estrannaise (bleu) et Transfem Science
(turquoise) tracées simultanément sur le même graphique, avec toggles
indépendants (override de modèle dans le moteur, indépendant du modèle stocké
par traitement).
- **Simulation prévisionnelle** : nouvelle section « Fréquence d'injection » dans
l'éditeur de traitement (intervalle en jours) → chip « Prévision » du graphique
qui projette les doses à venir (2× l'intervalle, borné 7–30 j) à partir de la
dernière injection réelle ; les doses projetées ne sont jamais sauvegardées et
conservent l'ester override de la dernière injection.
- **Calibration automatique (optionnelle)** : dans les Paramètres, option
« Calibration automatique » — ajuste à la volée (affichage seul) les facteurs
d'échelle et le modèle T depuis les labs ; désactivée par défaut, les valeurs
stockées ne sont jamais modifiées.
- **Intervalle entre dosages** : l'écran Doses affiche Δ (jours) entre chaque dose
et la précédente du même traitement (colonne « Interval (d) » du `.ods`).
- 6 nouveaux tests (`V120FeaturesTest`) → **36 tests**.
### Modifié
- **Montée des toolchains** : Gradle 9.7.1, **AGP 9.4.0** (Kotlin intégré — plus de
plugin `org.jetbrains.kotlin.android`, `kotlinOptions` supprimé), Kotlin 2.3.21,
KSP 2.3.11, **Compose BOM 2026.08.00** (Compose 1.12), Room 2.8.4,
Navigation 2.10.0, Activity 1.13.0, AppCompat 1.8.0, DataStore 1.2.1, Gson 2.14.0,
compileSdk/targetSdk **37**.
- Note Material You / Expressive : la BOM récente apporte composants et comportements
Material You ; `MaterialExpressiveTheme` reste **internal** dans la ligne material3
pinnée (vérifié par compilation) → `MaterialTheme` standard conservé, à basculer
dès que l'API devient publique (commenté dans `ui/theme/Theme.kt`).
### Corrigé
- **Horloge du TimePicker décentrée** (partait vers la gauche dans les dialogs de
saisie) : centrage explicite (Box + Center) dans `DateTimeField` et l'éditeur de
traitement.
- Migration Room **v1 → v2** propre (colonne `forecastIntervalDays`) avec
suppression du `fallbackToDestructiveMigration()` — les données réelles sont
protégées : une migration manquante plante bruyamment au lieu d'effacer.
## [1.1.0] — 2026-09-05 (versionCode 2)
### Corrigé
- **Courbes EEn plates à zéro** (le bug rapporté : « les graphiques ne se génèrent pas »).
Cause : casse des clés de profils — l'asset JSON (verbatim du `.ods`) contient
`"EEn_ese"`/`"EEn_tfs"` (n minuscule) alors que la constante `Esters.EEN = "EEN"` ;
le lookup exact échouait silencieusement → `sample() = 0` pour **tous** les traitements
EEn (EV et EU marchaient, ce qui masquait le bug). Fix : lookup **insensible à la casse**
dans `PKProfileStore` (`lookup()`), test de régression épinglé sur les données réelles
de l'utilisatrice (`RegressionUserCaseTest`, export v1.0.0 fourni).
- **Unités de testostérone** : les labs T pouvaient être saisis en ng/dL (cas réel :
33 et 44 ng/dL). L'axe T du chart mélangeait alors des ng/dL avec des estimations en
ng/mL (erreur ×100, courbe T invisible) et la calibration T aurait été faussée d'un
facteur 100. Fix : `PharmacokineticEngine.convertTToNgMl()` (ng/dL → ×0,01 ;
ng/L → ×0,001 ; nmol/L → ×0,2884 ; ng/mL inchangé), appliqué à la calibration **et
au rendu du chart**.
### Ajouté
- **Édition des doses** (le bug rapporté : « on ne peut pas modifier les entrées
d'injection ») : appuyer sur une ligne de l'écran Doses ouvre le dialog en mode
édition (traitement, dose, date/heure, notes) → enregistre sans recréer.
- **Choix de l'ester par injection** dans le dialog de dose (comme dans le `.ods`) :
« Défaut (EEn) », EV, EU, EEn — override stocké par dose, utilisé par le moteur PK.
- 6 tests de régression sur les données réelles de l'utilisatrice (30 tests au total).
### Technique
- `versionCode 2`, `versionName 1.1.0` ; APK debug régénérée.
## [1.0.0] — 2026-09-05 (versionCode 1)
Première version fonctionnelle :
- Courbes estimées E2/T heure par heure (24 h / 7 j / 30 j), modèles **Estrannaise** et
**Transfem Science** (tables horaires extraites de `Estrogen.ods` : EV/EU/EEn)
- Modèle Bateman paramétrable (gel/patch/oral)
- Log des doses, analyses de sang, calibration (facteur d'échelle médian lab÷prédiction)
- Estimation T empirique calibrable
- Rappels quotidiens (alarmes exactes) avec actions « Pris » / « Reporter 1 h »,
notifications remontant sur Huawei Watch GT 3 (Gadgetbridge ou Huawei Health)
- Sauvegarde/Restauration JSON (SAF), FR/EN (langue par app), 100 % local
- 24 tests unitaires (moteur PK, profils ODS, round-trip backup)