Este card usa as metas da dieta (proteínas, carboidratos, gorduras e calorias) para gerar aderência, XP, streak e badges.
Tudo é calculado somente com os dados do período selecionado.
1) Metas (de onde vêm e quando “não tem meta”)
As metas vêm da dieta cadastrada do paciente (campos proteinas_meta, carboidratos_meta, gorduras_meta, calorias_meta).
Se o paciente não tiver nenhuma meta > 0, ele entra como “sem metas” e a gamificação fica limitada (sem nota real de aderência).
No card Ranking, o filtro “Só com metas” (padrão) mostra apenas pacientes com metas ativas.
2) Aderência do período (0–100) — usada no Ranking
Primeiro somamos o consumo do período (P/C/G/Cal). Depois comparamos com a meta do período, que é:
meta diária × número de dias do período.
Para cada macro que tiver meta > 0, calculamos uma nota por “distância percentual”:
diffPct = |real - meta| / meta × 100
E transformamos em score (com tolerância e piso):
se diffPct ≤ 5 ⇒ 100
senão ⇒ score = round(clamp(100 - (diffPct - 5) × 1,35, 5..100))
A aderência final do período é a
média dos scores dos macros disponíveis (somente os que têm meta).
Exemplo rápido: se a meta de calorias do período for 2000 e o paciente consumiu 1800, então diffPct = 10% e a nota fica ~93.
3) Aderência diária (base da streak e do XP)
Para streak e XP, a nota é calculada por dia (0–100) comparando com a meta diária (sem escalar por período).
A nota diária também é a média dos macros com meta > 0 naquele paciente.
4) Streak (🔥 sequência)
O streak conta dias consecutivos (de trás para frente a partir do fim do período) em que:
- houve pelo menos 1 refeição registrada no dia
- a nota diária ficou ≥ 70
Se um dia falhar, o streak para naquele ponto.
5) XP e nível (⭐)
O XP do período é a soma das notas diárias (0–100) em dias com refeição.
O máximo possível no período é dias com refeição × 100.
O nível é “leve”: a cada 500 XP o paciente sobe 1 nível (Nível = floor(XP/500) + 1).
6) Badges (emojis) e regras atuais
As badges são selos automáticos para feedback rápido. O sistema mostra no máximo 6 badges por paciente.
- 🎯 Sem metas: quando não existe nenhuma meta > 0
- 🏆 Ouro: aderência do período ≥ 90
- 🥈 Prata: aderência do período ≥ 75
- 🥉 Bronze: aderência do período ≥ 60
- 🧭 Ajustes: aderência do período < 60
- 🔥 Streak Xd: streak ≥ 3 dias
- 📸 Frequente: registrou refeições em ≥ 5 dias no período
- 📋 Dieta: existe texto de dieta cadastrado
- 💪 Proteína: score de proteína (no período) ≥ 90
- 🍚 Carbo: score de carboidratos (no período) ≥ 90
- 🥑 Gordura: score de gorduras (no período) ≥ 90
- 🔥 Calorias: score de calorias (no período) ≥ 90
Leitura correta
A gamificação reflete o que foi registrado. Se o paciente não registra refeições em vários dias, ele perde XP/streak e a aderência pode ficar distorcida.
Para “ranking justo”, metas bem definidas + constância de registro fazem toda a diferença.