feat: piano sensibile al protocollo digiuno (PRD §5.6 + §9.4)
Finora il fastingProtocol era una preferenza salvata ma ignorata dal
planner — ogni giorno generava 4 pasti. Ora cambia struttura per protocollo
e per giorno della settimana.
@ketopath/shared/planner
- protocolPlanForDay(protocol, dayOfWeek) → { share, kcalMultiplier }
- 14:10 → tutti e 4 i pasti, share default
- 16:8 → niente colazione: pranzo 50%, spuntino 10%, cena 40%
- 18:6 → niente colazione: pranzo 55%, spuntino 5%, cena 40%
- 20:4 → solo spuntino+cena (10/90)
- ESE 24h → mercoledì kcalMultiplier=0 (giorno saltato), altri default
- 5:2 → lunedì + giovedì kcalMultiplier=0.25, share 100% cena
- 7 unit test in protocol.test.ts
apps/api/plan
- POST /me/meal-plans: legge preferences.fastingProtocol, deriva il piano
per ogni giorno, salta MealSlot con share=0 e giorni a kcalMultiplier=0
- GET /me/meal-plans/current: include fastingProtocol nella risposta
- baseDailyTarget restituito invariato per il client
apps/web
- /plan mostra "Finestra alimentare 16:8" sotto il titolo della settimana
- plan-week distingue i giorni "fasting" (digiuno completo) e "leggeri"
(5:2 fasting day) con copy dedicato; rimuove totali calorici inappropriati
- i18n: Plan.protocolLabel + Plan.fastingDay/lightDay
Smoke tested: settato 16:8 da /profile, rigenerato il piano, verificato
che l'etichetta appaia e che ogni giorno abbia esattamente 3 pasti
(Pranzo / Spuntino / Cena, niente Colazione).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
ded4215664
commit
feb54c1f9a
7 files changed
+258
-25
No files matched your search
@@ -391,6 +391,19 @@
|
||||
"hideAlternatives": "Nascondi",
|
||||
"swap": "Scegli",
|
||||
"dayTotal": "{kcal} kcal totali",
|
||||
"window": "Finestra alimentare",
|
||||
"fastingDay": "Giorno di digiuno",
|
||||
"fastingDayHint": "Acqua, tè e tisane. Niente cibo solido.",
|
||||
"lightDay": "Giorno leggero",
|
||||
"lightDayHint": "Solo cena, kcal ridotte (~25% del giornaliero abituale).",
|
||||
"protocolLabel": {
|
||||
"FOURTEEN_TEN": "14:10 — finestra di 10h",
|
||||
"SIXTEEN_EIGHT": "16:8 — finestra di 8h",
|
||||
"EIGHTEEN_SIX": "18:6 — finestra di 6h",
|
||||
"TWENTY_FOUR": "20:4 — finestra di 4h",
|
||||
"ESE_24": "ESE 24h — un giorno di digiuno completo a settimana",
|
||||
"FIVE_TWO": "5:2 — due giorni leggeri a settimana"
|
||||
},
|
||||
"meals": {
|
||||
"COLAZIONE": "Colazione",
|
||||
"PRANZO": "Pranzo",
|
||||
|
||||
Reference in new issue
Block a user