Files
FitnessDroid/doc/activities-plan.md
claude 5f1d1eae4f
All checks were successful
release / build-release (push) Successful in 4m30s
Etapp 5: stegsynk via Health Connect
- StepsSync: läser dagens + gårdagens stegsumma (StepsRecord.COUNT_TOTAL)
  och upsertar till gym-API:t; synkas automatiskt (max var 10:e min) när
  hemskärmen visas
- Inställningar → Stegsynk: status, aktivera-flöde (HC-permission),
  Play-länk om Health Connect saknas, manuell synk
- Kcal-mätarens telefonrad visar nu riktiga steg + kcal (serverns
  beräkning med dubbelräkningsskydd); stegmål får riktig data
- connect-client 1.1.0-alpha07 (nyare kräver AGP 8.9/compileSdk 36 —
  toolchain-bump tas separat); HC-manifest (READ_STEPS, rationale-intents)
- Version 0.10.0

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
2026-08-26 12:10:30 +02:00

110 lines
6.2 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.

# Aktiviteter, kcal-mätare & mål — plan
*Godkänd 2026-08-23. Samma plan finns i brasse-pc.eu-v2:
`docs/gym-activities-plan.md` — uppdatera båda vid ändringar.*
Cardio/fristående aktiviteter (promenad, jogg, vandring, fäktning/HEMA m.m.)
som eget koncept vid sidan av gympass, en daglig kcal-mätare på hemskärmen,
mål (dag/vecka/månad) och GPS-livespårning. Kondition markeras med ❤️.
## Grundkoncept
- **Pass** (finns): gympass med övningar/set.
- **Aktivitet** (nytt): något man gör över tid. Har tid, ev. distans/höjd/
rutt, kcal, ansträngning (RPE) och källa (manuellt/spårat/telefon/import).
### Aktivitetsbibliotek
~60 kurerade aktiviteter från **Compendium of Physical Activities**
(publika MET-standarden), seedade i gym-API:t:
`key, namnSv, namnEn, met, kategori, isDistanceBased, iconKey, googleFitType`.
Google Fit-typmappningen gör framtida import rak. Stadspromenad, jogg,
skogsvandring och HEMA/fäktning får tempo-/RPE-justerade MET-kurvor.
### Kcal-modellen
Kräver längd/födelseår/kön i API:t (gamla "milstolpe 5" ur
`openscale-integration.md` bakas in i etapp 1).
- **Passivt:** BMR (MifflinSt Jeor: `10·vikt + 6.25·längd 5·ålder + k`,
k = +5 man / 161 kvinna), fylls på linjärt över dygnet.
- **Aktivt loggat:** gympass (befintlig MET-modell) + aktiviteter
(MET × vikt × timmar; distansaktiviteter justeras efter verkligt tempo och
höjdmeter, icke-distans efter RPE-slidern). Netto-kcal (MET1) används så
BMR inte dubbelräknas.
- **Telefon-auto:** steg + externa pass via **Health Connect**, med
dubbelräkningsskydd (steg under egen loggad aktivitet räknas inte).
- **RPE-slider:** "ingen ansträngning" → "kan inte prata mer än ett par ord"
(talk test) → intensitetsfaktor på aktivitetens MET.
- **Aktivitetsgissning:** tempo + höjdprofil ⇒ promenad (<~6,5 km/h)/jogg/
vandring (lågt tempo + höjdmeter); stillastående + timer ⇒ fäktning/HEMA.
### Mätaren på hemskärmen
Dagens kcal överst på Hem, tredelad: **aktivt loggat / telefon / passivt**.
Mål visas som progress-bars/mätare under.
## Datamodell (gym-API, EF-migrationer körs vid deploy)
- `User` + `HeightCm` (double?), `BirthYear` (int?), `Sex` (string? "male"/"female")
- `ActivityType` — seedad tabell (se ovan), utökningsbar
- `Activity` — Guid id, userId, activityTypeId, startedAt, durationSeconds,
distanceMeters?, elevationGainMeters?, estimatedKcal, rpe? (010),
source (`manual`/`tracked`/`phone`/`imported`), routePolyline?
(Google encoded), externalId? (dedup vid import), notes?
- `DailySteps` — userId, date, steps (upsert från appen)
- `Goal` — metric (`KCAL`/`GYM_SESSIONS`/`STEPS`/`ACTIVITIES`/`DISTANCE_KM`)
× period (`DAY`/`WEEK`/`MONTH`), targetValue; max ett mål per metrik+period
- GraphQL: `activityTypes`, `activities(from,to)`, `addActivity`/`update`/
`delete`, `upsertDailySteps`, `goals` + `setGoal`/`deleteGoal`,
`myProfile`/`updateProfile` (+längd/år/kön), `dailySummary(date)`
(kcal-tredelningen serverberäknad så app+webb delar logik)
## Tagna designbeslut (2026-08-23)
| Fråga | Beslut |
|---|---|
| Karta i appen | **osmdroid + OpenStreetMap** (inga nycklar, GPL-vänligt) |
| Steg/telefondata | **Health Connect** (även vägen för Google Fit-import) |
| Ruttlagring | **Encoded polyline + sammanfattning** på servern |
| Aktivitetsbibliotek | **~60 kurerade** ur MET-kompendiet |
## Etapper
Leveransordning per etapp: **backend → CI grönt → webb → CI grönt → app →
användartest**. Endast ETT Pi5-bygge åt gången — polla CI och vänta hellre
för länge. (Path-filter: gym-api triggas av `backend-gym-traker/**`,
frontend av `src/**` m.fl., FitnessDroid av varje push till main.)
1. **Profil & kalorigrund** — API: HeightCm/BirthYear/Sex + `updateProfile`.
Webb: profilfält. App: kroppsdata synkas mot servern (lokal cache kvar),
BMR, kcal-mätare v1 på hemskärmen (passivt + gympass).
2. **Aktiviteter: bibliotek + manuell logg** — API: ActivityType (seed) +
Activity CRUD + `dailySummary`. Webb: aktivitetsflik ❤️ (logga/lista/
rätta). App: aktivitetsflik med bibliotek, manuell loggning
(tid/distans/RPE), kcal in i mätaren.
3. **Live-spårning (GPS)** — App: starta aktivitet, foreground-service,
osmdroid-livekarta, live kcal/distans/tempo/höjdmeter; icke-distansläge
(timer + RPE efteråt); aktivitetsgissning; polyline till servern.
Webb: Leaflet-karta i aktivitetsdetalj.
4. **Mål & mätare** — API: Goal CRUD. App: målkort med progress på Hem
(dag/vecka/månad × kcal/pass/steg/aktiviteter/km). Webb: målinställningar
+ progress.
5. **Steg & telefondata** — API: DailySteps. App: Health Connect-permissions,
daglig stegsynk, auto-aktiviteter från HC ("telefon"-källa), mätarens
tredelning komplett. Webb: stegvisning.
6. **Statistik & polish** — ❤️-sektion i statistiken (app+webb):
distans/tempo-trender per typ, vecko-km; dokumentation; Google
Fit-importens grund (source/externalId/typmappning/HC) verifierad klar.
## Status
- [x] Etapp 1 — Profil & kalorigrund *(kod klar 2026-08-23: backend a1cd4d3, webb 560894c, app — väntar på användartest + omdeploy av gym-api/frontend-containrarna)*
- [x] Etapp 2 — Aktiviteter: bibliotek + manuell logg *(kod klar 2026-08-23: backend 9a81cf6, webb — aktivitetsflik, app 0.6.0; väntar på användartest)*
- [x] Etapp 3 — Live-spårning (GPS) *(klar & fälttestad 2026-08-26: GPS-väntfas, providerlyssning gps/fused/network, fartgrind (Doppler), rörelsevakt (accelerometer), offline-kö, teknisk logg — GPS-filter justerbara i inställningarna)*
- [x] Etapp 4 — Mål & mätare *(kod klar 2026-08-26: Goal-modell + goalsWithProgress i API:t, målsektion i webbens aktivitetsflik, målkort med progress-bars på appens hemskärm + målskärm; väntar på användartest)*
- [x] Etapp 5 — Steg & telefondata *(kod klar 2026-08-26: DailySteps + upsert i API:t med telefon-kcal (0.00038 kcal/steg/kg, dubbelräkningsskydd mot gång/löp/vandringsaktiviteter), Health Connect-läsning i appen (connect-client 1.1.0-alpha07 — nyare kräver AGP 8.9/SDK 36), aktivering under Inställningar → Stegsynk; webben behövde ingen ändring. Väntar på användartest)*
- [ ] Etapp 6 — Statistik & polish
Google Fit-importen byggs efter etapp 6 som separat arbete.