diff --git a/doc/openscale-integration.md b/doc/openscale-integration.md index 203096e..f15a5d3 100644 --- a/doc/openscale-integration.md +++ b/doc/openscale-integration.md @@ -35,10 +35,38 @@ kan hämtas direkt från en BT-våg in i appens kroppsmätningar. Vissa vågar skickar bara **rå impedans**; openScale räknar då själv ut fett/muskler/vatten med en formel som kräver **längd, ålder, kön** (ScaleUser). Vi måste därför: -- Lägga till längd/födelseår/kön i profilen (lokalt; kan senare speglas i API). +- Lägga till längd/födelseår/kön i profilen (se API-ändring nedan). - Porta openScales BIA-beräkning för de vågar som kräver den. Vågar som räknar ombord och skickar färdiga procent behöver inte detta. +## API-ändring: spara användarens längd (+ ålder/kön) + +Längden ska sparas **på servern** (gym-API:t) så att den är gemensam för app +och webb, överlever ominstallation, och kan användas för mer korrekta +beräkningar: + +- **BIA/kroppssammansättning:** openScales formler för impedansvågar kräver + längd (+ ålder + kön) för att ge korrekta %fett/muskler/vatten. +- **Energiförbrukning:** med längd (+ ålder + kön) kan kaloriberäkningen gå + från ren MET × vikt × tid till en BMR-baserad uppskattning + (Mifflin–St Jeor: `10·vikt + 6.25·längd − 5·ålder + könskonstant`), vilket + ger rimligare siffror per pass. + +**Backend (brasse-pc.eu-v2, gym-api):** +- Utöka `User` med `HeightCm` (double?), och för full BIA även `BirthDate` + (eller `BirthYear`) och `Sex` (enum/sträng). Nullable + bakåtkompatibla. +- Migration (körs automatiskt vid uppstart, samma mönster som + `BodyMeasurement`). +- Exponera i `myProfile`-query och en `updateProfile`-mutation (eller utöka + `updateBodyWeight` → `updateProfile` med längd/ålder/kön). +- Deploya om gym-api-prod + -test (serialiserat bygge, se + [[pi5-ci-concurrency]]). + +**App:** profil-fält för längd (och ålder/kön) som läser/skriver mot API:t; +cachas lokalt (som kroppsvikten) för offline och för BIA-beräkningen. + +**Webb (brasse-pc.eu-v2):** samma fält på profil-fliken via `updateProfile`. + ## Milstolpar (byggbara steg) 1. **Grund + licens + About** — LICENSE → GPL-3.0; `blessed-kotlin`-beroende; @@ -54,9 +82,13 @@ Vågar som räknar ombord och skickar färdiga procent behöver inte detta. 4. **Väg dig-flöde** — knapp som skannar/kopplar vald våg, tar emot en `ScaleMeasurement`, förhandsvisar och sparar via `addBodyMeasurement` (offline-kön tar resten). Live-status ("står på vågen…"). -5. **Impedansvågar** — profilfält (längd/ålder/kön) + BIA-beräkning för de - vågar som skickar rå impedans. Verifieras mot din våg. -6. **Polering + docs** — felhantering, timeouts, ominställning av våg; +5. **API: längd (+ ålder/kön)** — utöka gym-API:ts `User` med `HeightCm` + (+ `BirthDate`/`Sex`), migration, `myProfile` + `updateProfile`, deploy. + App + webb får profilfält. Se "API-ändring" ovan. +6. **Impedansvågar + bättre kalorier** — BIA-beräkning för vågar som skickar + rå impedans (använder längd/ålder/kön), och BMR-baserad energiförbrukning. + Verifieras mot din våg. +7. **Polering + docs** — felhantering, timeouts, ominställning av våg; uppdatera README/wiki + infra-Doc (GPL-relicens noterad). ## Öppna frågor / risker