diff --git a/README.md b/README.md index d016085..9b27669 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,14 @@ > Fie-toi toujours à tes analyses de sang et aux consignes de ton > endocrinologue. -- **Statut** : web v1.9.7 — parité fonctionnelle avec l'Android v1.9.7 - (modèle Estrannaise analytique + nuage d'incertitude MCMC exclusif ESE ; - presets des 6 esters injectables ESE ; l'auto-backup journalier Android - reste structurellement non porté, cf §12 — l'export manuel couvre la - donnée) · +- **Statut** : web v1.10.0 — parité fonctionnelle avec l'Android v1.10.0 + sur la logique miroirée (fix #68 : creux PRÉ-INJECTION dans la + recommandation de prise de sang — date toujours postérieure à la + stabilisation, cohérente avec le créneau affiché ; les autres changements + Android de la v1.10.0 — dialog fantôme #69, rappel sauté si dose déjà + loggée — sont sans équivalent web, notifications = Android) ; + l'auto-backup journalier Android reste structurellement non porté, + cf §12 — l'export manuel couvre la donnée · **180 tests verts** · E2E navigateur ✅ · conteneur testé en configuration durcie ✅ · lint/i18n ✅ - **Journal des versions web** : [docs/CHANGELOG.md](docs/CHANGELOG.md) diff --git a/docs/DEVELOPPEMENT.md b/docs/DEVELOPPEMENT.md index 94d97a1..c18a888 100644 --- a/docs/DEVELOPPEMENT.md +++ b/docs/DEVELOPPEMENT.md @@ -60,7 +60,7 @@ Règles du portage, fixées au départ : | Choix | Décision | Pourquoi | |---|---|---| -| Langage | JavaScript ES modules natifs (pas de TS, pas de build) | zéro chaîne de compilation → le déploiement = copier le dossier ; les types critiques sont documentés en JSDoc et épinglés par 175 tests | +| Langage | JavaScript ES modules natifs (pas de TS, pas de build) | zéro chaîne de compilation → le déploiement = copier le dossier ; les types critiques sont documentés en JSDoc et épinglés par 180 tests | | Framework UI | Aucun — DOM via un helper `el()` (`ui/components.js`) | même philosophie que la v1 Android (pas de ViewModel/DI) ; une seule abstraction à connaître | | Rendu graphique | Canvas 2D natif (portage de `CurveChart.kt`) | pas de lib de charts : fidélité du rendu, zéro dépendance | | Persistance | `localStorage` (clés préfixées `hormonetrack.`) | données petites (JSON) ; backend INJECTABLE → testable en Node (`store.setBackend(new Map())`) | @@ -405,7 +405,7 @@ Pièges rencontrés : |---|---|---|---| | Syntaxe | `node --check` | tous les modules ES | `bash scripts/check.sh` | | i18n | `scripts/i18n-check.mjs` | clés FR/EN synchronisées + clés utilisées | (dans check.sh) | -| Unitaires | `node --test` | **175 tests** : noyau PK (ESE analytique/TFS/WHS), calibration, backup, store, helpers, alertes, rappels, changelog, tracé labs, estrannaise-models/cloud, rounding, presets (v1.9.4) | `npm test` | +| Unitaires | `node --test` | **180 tests** : noyau PK (ESE analytique/TFS/WHS), calibration, backup, store, helpers, alertes, rappels, changelog, tracé labs, estrannaise-models/cloud, rounding, presets (v1.9.4) | `npm test` | | E2E navigateur | playwright-core + build Firefox | app réelle : rendu, canvas peint (pixels), navigation, dialog changelog, langue | `npm run e2e` | | Smoke HTTP | curl | ressources clés en 200 | `check.sh --with-serve` | @@ -448,8 +448,11 @@ launch) — d'où le build dédié dans le cache Playwright, hors dépôt. garde #61 sur la prolongation, flag off = v1.5.0 bit-compatible, `lastAnchorMs`. - **lab-timing** : v1.8.0 « prochaine prise de sang recommandée » (miroir - du Kotlin, §7.11 Android) : creux = minimum de la courbe prévisionnelle - entre 2 injections, saut au premier creux STABILISÉ (5 × t½ — TFS/WHS + du Kotlin, §7.11 Android) : creux = niveau PRÉ-INJECTION du créneau + (**fix #68 v1.10.0** — l'ancien minimum de la fenêtre entière tombait + juste après l'injection précédente pour les esters à montée lente comme + l'EEn ; pour EV le point pré-injection EST le minimum de fenêtre), + saut au premier creux STABILISÉ (5 × t½ — TFS/WHS analytiques, Estrannaise lue dans la table via terminalHalfLifeDays), filtres (≥ now+6 h, > dernière prise, Posologie requise), invite « renseigne une Posologie », oral seul → null. diff --git a/js/pk/lab-timing.js b/js/pk/lab-timing.js index 36f8f7d..e6196ee 100644 --- a/js/pk/lab-timing.js +++ b/js/pk/lab-timing.js @@ -10,7 +10,10 @@ * énormément, le creux reflète le niveau de fond et l'accumulation) ; * 2. un creux n'est interprétable que si le régime est **stabilisé** — règle * des 5 demi-vies terminales (≈ 97 % de l'équilibre) ; - * 3. **ON SAUTE donc au premier creux STABILISÉ** (décision v1.8.0). + * 3. **ON SAUTE donc au premier creux STABILISÉ** (décision v1.8.0 ; fix + * #68 v1.10.0 : le creux = niveau PRÉ-INJECTION du créneau — l'ancien + * minimum de fenêtre entière tombait juste après l'injection PRÉCÉDENTE + * pour les esters à montée lente, date antérieure à la stabilisation). * * CALCUL (déduit de ce que l'app connaît déjà) : * - traitement porteur : ESTRADIOL + injectable + ACTIF + Posologie