# Addendum — Planning de suivi (jours de pesée, séances, journal) > Demande utilisateur : « pour le suivi calorique/poids/sport il faut un genre de planning avec > les jours de pesée, pouvoir noter la pesée du jour, etc. » ## Concept Un **planning hebdomadaire par habitude** (pesée, séance de sport, journal alimentaire) + une **checklist du jour** + un **suivi d'assiduité** (streaks, calendrier, %). Le « fait / pas fait » est **dérivé des données existantes** — aucune double saisie : | Habitude | Jour « fait » si… | |---|---| | `weigh_in` (pesée) | une `WeightEntry` existe ce jour local | | `workout` (séance) | un `Workout` existe ce jour local | | `food_log` (journal) | ≥ 1 `FoodEntry` ce jour local | ## Modèle (module `health`) `tracking_schedules` : `id`, `user_id`, `kind` enum (`weigh_in`|`workout`|`food_log`, `native_enum=False`), `weekdays` JSON (liste d'entiers, 0 = lundi … 6 = dimanche), `enabled` bool — **une ligne max par (user, kind)** (contrainte unique). Pas de table de check-ins en v1 (dérivation ci-dessus) ; habitudes personnalisées = v2. ## API (module `health`) - `GET /api/health/schedules` → liste des 3 plannings (avec défauts désactivés si absents) ; `PUT /api/health/schedules/{kind}` → upsert `{weekdays, enabled}`. - `GET /api/health/today?tz=` → `{ date, items: [{kind, planned, done, value}], streaks }` — `value` : poids saisi (kg) / nb de séances / kcal saisies du jour. - `GET /api/health/stats/adherence?from&to&tz&kind=` → données prêtes pour un **calendar heatmap ECharts** (par jour : `planned`/`done`/`missed`) + `% d'assiduité` (fait ÷ planifié), `streak` courant et record par habitude (le streak ne compte que les jours planifiés). ## UX - **Accueil** : carte « **Aujourd'hui** » en tête — checklist du jour : « Pesée » (✓ + valeur si faite, sinon bouton **« Noter ma pesée »** ouvrant la modale rapide), « Séance », « Journal alimentaire » (kcal saisies) ; badge streak « 🔥 n jours ». Les habitudes non planifiées aujourd'hui sont grisées (« Repos »). - **Page Poids & Objectif** : éditeur de planning (cases `L M M J V S D` + interrupteur), carte « Pesée du jour » (planifiée / faite / manquée + CTA), **calendrier heatmap** des pesées (vert = faite, contour = planifiée manquée), KPI « Assiduité 30 j » + streak. - **Page Activité & Sport** : même motif pour les jours de séance planifiés. - **Réglages → Objectif** : raccourci vers l'éditeur de planning. ## Empty states (français) - Planning vide : « Aucun jour planifié. Choisis tes jours de pesée pour suivre ton assiduité. » - Aujourd'hui, rien de planifié : « Rien de prévu aujourd'hui. Profites-en bien ! »