Spaces:
Sleeping
Sleeping
Commit
·
a7387c2
1
Parent(s):
78bb3eb
- alimentos.json +15 -15
- nutrition.py +4 -24
alimentos.json
CHANGED
|
@@ -447,7 +447,7 @@
|
|
| 447 |
"categoria": "laticinio",
|
| 448 |
"porcao": 100,
|
| 449 |
"macros": { "calorias": 61, "proteina": 3.2, "carboidrato": 4.8, "gordura": 3.3, "fibra": 0.0 },
|
| 450 |
-
"alergias": ["
|
| 451 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 452 |
},
|
| 453 |
{
|
|
@@ -455,7 +455,7 @@
|
|
| 455 |
"categoria": "laticínio",
|
| 456 |
"porcao": 100,
|
| 457 |
"macros": { "calorias": 145, "proteina": 12.0, "carboidrato": 5.4, "gordura": 8.3, "fibra": 0.0 },
|
| 458 |
-
"alergias": ["
|
| 459 |
"refeicao": ["pequeno-almoço", "lanche", "jantar"]
|
| 460 |
},
|
| 461 |
{
|
|
@@ -463,7 +463,7 @@
|
|
| 463 |
"categoria": "laticinio",
|
| 464 |
"porcao": 100,
|
| 465 |
"macros": { "calorias": 42, "proteina": 3.4, "carboidrato": 5.0, "gordura": 0.1, "fibra": 0.0 },
|
| 466 |
-
"alergias": ["
|
| 467 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 468 |
},
|
| 469 |
{
|
|
@@ -471,7 +471,7 @@
|
|
| 471 |
"categoria": "laticinio",
|
| 472 |
"porcao": 100,
|
| 473 |
"macros": { "calorias": 61, "proteina": 3.5, "carboidrato": 4.7, "gordura": 3.3, "fibra": 0.0 },
|
| 474 |
-
"alergias": ["
|
| 475 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 476 |
},
|
| 477 |
{
|
|
@@ -479,7 +479,7 @@
|
|
| 479 |
"categoria": "laticinio",
|
| 480 |
"porcao": 100,
|
| 481 |
"macros": { "calorias": 44, "proteina": 4.5, "carboidrato": 6.0, "gordura": 0.2, "fibra": 0.0 },
|
| 482 |
-
"alergias": ["
|
| 483 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 484 |
},
|
| 485 |
{
|
|
@@ -607,7 +607,7 @@
|
|
| 607 |
"categoria": "batido",
|
| 608 |
"porcao": 400,
|
| 609 |
"macros": { "calorias": 425, "proteina": 35.0, "carboidrato": 56.0, "gordura": 7.0, "fibra": 4.0 },
|
| 610 |
-
"alergias": ["
|
| 611 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 612 |
},
|
| 613 |
{
|
|
@@ -615,7 +615,7 @@
|
|
| 615 |
"categoria": "batido",
|
| 616 |
"porcao": 400,
|
| 617 |
"macros": { "calorias": 320, "proteina": 31.0, "carboidrato": 39.0, "gordura": 5.0, "fibra": 2.0 },
|
| 618 |
-
"alergias": ["
|
| 619 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 620 |
},
|
| 621 |
{
|
|
@@ -623,7 +623,7 @@
|
|
| 623 |
"categoria": "batido",
|
| 624 |
"porcao": 450,
|
| 625 |
"macros": { "calorias": 310, "proteina": 31.0, "carboidrato": 36.0, "gordura": 5.0, "fibra": 5.0 },
|
| 626 |
-
"alergias": ["
|
| 627 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 628 |
},
|
| 629 |
{
|
|
@@ -631,7 +631,7 @@
|
|
| 631 |
"categoria": "batido",
|
| 632 |
"porcao": 350,
|
| 633 |
"macros": { "calorias": 305, "proteina": 11.0, "carboidrato": 53.0, "gordura": 5.0, "fibra": 3.0 },
|
| 634 |
-
"alergias": ["
|
| 635 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 636 |
},
|
| 637 |
{
|
|
@@ -639,7 +639,7 @@
|
|
| 639 |
"categoria": "batido",
|
| 640 |
"porcao": 350,
|
| 641 |
"macros": { "calorias": 260, "proteina": 8.0, "carboidrato": 42.0, "gordura": 4.0, "fibra": 2.5 },
|
| 642 |
-
"alergias": ["
|
| 643 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 644 |
},
|
| 645 |
{
|
|
@@ -647,7 +647,7 @@
|
|
| 647 |
"categoria": "batido",
|
| 648 |
"porcao": 350,
|
| 649 |
"macros": { "calorias": 265, "proteina": 11.0, "carboidrato": 52.0, "gordura": 5.0, "fibra": 5.0 },
|
| 650 |
-
"alergias": ["glúten", "
|
| 651 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 652 |
},
|
| 653 |
{
|
|
@@ -655,7 +655,7 @@
|
|
| 655 |
"categoria": "batido",
|
| 656 |
"porcao": 350,
|
| 657 |
"macros": { "calorias": 250, "proteina": 11.0, "carboidrato": 42.0, "gordura": 4.0, "fibra": 3.0 },
|
| 658 |
-
"alergias": ["
|
| 659 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 660 |
},
|
| 661 |
{
|
|
@@ -663,7 +663,7 @@
|
|
| 663 |
"categoria": "sandes",
|
| 664 |
"porcao": 140,
|
| 665 |
"macros": { "calorias": 280, "proteina": 13.0, "carboidrato": 40.0, "gordura": 8.0, "fibra": 3.0 },
|
| 666 |
-
"alergias": ["glúten", "
|
| 667 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 668 |
},
|
| 669 |
{
|
|
@@ -695,7 +695,7 @@
|
|
| 695 |
"categoria": "sandes",
|
| 696 |
"porcao": 130,
|
| 697 |
"macros": { "calorias": 300, "proteina": 15.0, "carboidrato": 34.0, "gordura": 10.0, "fibra": 2.5 },
|
| 698 |
-
"alergias": ["glúten", "
|
| 699 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 700 |
},
|
| 701 |
{
|
|
@@ -759,7 +759,7 @@
|
|
| 759 |
"categoria": "sandes",
|
| 760 |
"porcao": 150,
|
| 761 |
"macros": { "calorias": 260, "proteina": 11.0, "carboidrato": 44.0, "gordura": 3.5, "fibra": 2.5 },
|
| 762 |
-
"alergias": ["glúten", "
|
| 763 |
"refeicao": ["matabicho","lanche1","lanche2"]
|
| 764 |
}
|
| 765 |
|
|
|
|
| 447 |
"categoria": "laticinio",
|
| 448 |
"porcao": 100,
|
| 449 |
"macros": { "calorias": 61, "proteina": 3.2, "carboidrato": 4.8, "gordura": 3.3, "fibra": 0.0 },
|
| 450 |
+
"alergias": ["leite", "proteína do leite"],
|
| 451 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 452 |
},
|
| 453 |
{
|
|
|
|
| 455 |
"categoria": "laticínio",
|
| 456 |
"porcao": 100,
|
| 457 |
"macros": { "calorias": 145, "proteina": 12.0, "carboidrato": 5.4, "gordura": 8.3, "fibra": 0.0 },
|
| 458 |
+
"alergias": ["leite", "laticínio"],
|
| 459 |
"refeicao": ["pequeno-almoço", "lanche", "jantar"]
|
| 460 |
},
|
| 461 |
{
|
|
|
|
| 463 |
"categoria": "laticinio",
|
| 464 |
"porcao": 100,
|
| 465 |
"macros": { "calorias": 42, "proteina": 3.4, "carboidrato": 5.0, "gordura": 0.1, "fibra": 0.0 },
|
| 466 |
+
"alergias": ["leite", "proteína do leite"],
|
| 467 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 468 |
},
|
| 469 |
{
|
|
|
|
| 471 |
"categoria": "laticinio",
|
| 472 |
"porcao": 100,
|
| 473 |
"macros": { "calorias": 61, "proteina": 3.5, "carboidrato": 4.7, "gordura": 3.3, "fibra": 0.0 },
|
| 474 |
+
"alergias": ["leite", "proteína do leite"],
|
| 475 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 476 |
},
|
| 477 |
{
|
|
|
|
| 479 |
"categoria": "laticinio",
|
| 480 |
"porcao": 100,
|
| 481 |
"macros": { "calorias": 44, "proteina": 4.5, "carboidrato": 6.0, "gordura": 0.2, "fibra": 0.0 },
|
| 482 |
+
"alergias": ["leite", "proteína do leite"],
|
| 483 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 484 |
},
|
| 485 |
{
|
|
|
|
| 607 |
"categoria": "batido",
|
| 608 |
"porcao": 400,
|
| 609 |
"macros": { "calorias": 425, "proteina": 35.0, "carboidrato": 56.0, "gordura": 7.0, "fibra": 4.0 },
|
| 610 |
+
"alergias": ["leite", "proteína do leite", "glúten"],
|
| 611 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 612 |
},
|
| 613 |
{
|
|
|
|
| 615 |
"categoria": "batido",
|
| 616 |
"porcao": 400,
|
| 617 |
"macros": { "calorias": 320, "proteina": 31.0, "carboidrato": 39.0, "gordura": 5.0, "fibra": 2.0 },
|
| 618 |
+
"alergias": ["leite", "proteína do leite"],
|
| 619 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 620 |
},
|
| 621 |
{
|
|
|
|
| 623 |
"categoria": "batido",
|
| 624 |
"porcao": 450,
|
| 625 |
"macros": { "calorias": 310, "proteina": 31.0, "carboidrato": 36.0, "gordura": 5.0, "fibra": 5.0 },
|
| 626 |
+
"alergias": ["leite", "proteína do leite"],
|
| 627 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 628 |
},
|
| 629 |
{
|
|
|
|
| 631 |
"categoria": "batido",
|
| 632 |
"porcao": 350,
|
| 633 |
"macros": { "calorias": 305, "proteina": 11.0, "carboidrato": 53.0, "gordura": 5.0, "fibra": 3.0 },
|
| 634 |
+
"alergias": ["leite", "glúten"],
|
| 635 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 636 |
},
|
| 637 |
{
|
|
|
|
| 639 |
"categoria": "batido",
|
| 640 |
"porcao": 350,
|
| 641 |
"macros": { "calorias": 260, "proteina": 8.0, "carboidrato": 42.0, "gordura": 4.0, "fibra": 2.5 },
|
| 642 |
+
"alergias": ["leite"],
|
| 643 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 644 |
},
|
| 645 |
{
|
|
|
|
| 647 |
"categoria": "batido",
|
| 648 |
"porcao": 350,
|
| 649 |
"macros": { "calorias": 265, "proteina": 11.0, "carboidrato": 52.0, "gordura": 5.0, "fibra": 5.0 },
|
| 650 |
+
"alergias": ["glúten", "leite"],
|
| 651 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 652 |
},
|
| 653 |
{
|
|
|
|
| 655 |
"categoria": "batido",
|
| 656 |
"porcao": 350,
|
| 657 |
"macros": { "calorias": 250, "proteina": 11.0, "carboidrato": 42.0, "gordura": 4.0, "fibra": 3.0 },
|
| 658 |
+
"alergias": ["leite", "glúten"],
|
| 659 |
"refeicao": ["lanche1","lanche2", "matabicho"]
|
| 660 |
},
|
| 661 |
{
|
|
|
|
| 663 |
"categoria": "sandes",
|
| 664 |
"porcao": 140,
|
| 665 |
"macros": { "calorias": 280, "proteina": 13.0, "carboidrato": 40.0, "gordura": 8.0, "fibra": 3.0 },
|
| 666 |
+
"alergias": ["glúten", "leite", "proteína do leite"],
|
| 667 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 668 |
},
|
| 669 |
{
|
|
|
|
| 695 |
"categoria": "sandes",
|
| 696 |
"porcao": 130,
|
| 697 |
"macros": { "calorias": 300, "proteina": 15.0, "carboidrato": 34.0, "gordura": 10.0, "fibra": 2.5 },
|
| 698 |
+
"alergias": ["glúten", "leite", "proteína do leite", "ovo"],
|
| 699 |
"refeicao": ["matabicho", "lanche1","lanche2"]
|
| 700 |
},
|
| 701 |
{
|
|
|
|
| 759 |
"categoria": "sandes",
|
| 760 |
"porcao": 150,
|
| 761 |
"macros": { "calorias": 260, "proteina": 11.0, "carboidrato": 44.0, "gordura": 3.5, "fibra": 2.5 },
|
| 762 |
+
"alergias": ["glúten", "leite", "proteína do leite"],
|
| 763 |
"refeicao": ["matabicho","lanche1","lanche2"]
|
| 764 |
}
|
| 765 |
|
nutrition.py
CHANGED
|
@@ -258,11 +258,6 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 258 |
carb_restante = macros_ref["carboidrato"]
|
| 259 |
gord_restante = macros_ref["gordura"]
|
| 260 |
|
| 261 |
-
print(f"\n=== [DEBUG] Início da função para refeição: {nome_refeicao.upper()} ===")
|
| 262 |
-
print(f"Alvos: {macros_ref}")
|
| 263 |
-
print(f"Restrições: {restricoes}")
|
| 264 |
-
print(f"Usados inicialmente: {usados}\n")
|
| 265 |
-
|
| 266 |
# Limites por categoria
|
| 267 |
limites_categoria = {
|
| 268 |
"proteina_rica": (100, 350),
|
|
@@ -282,25 +277,22 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 282 |
and not (nome_refeicao == "almoco" and a.get("categoria") == "sandes")
|
| 283 |
]
|
| 284 |
|
| 285 |
-
print(f"[DEBUG] Encontradas {len(proteinas_rica)} opções de proteína rica para {nome_refeicao}")
|
| 286 |
if proteinas_rica:
|
| 287 |
proteinas_rica = sorted(proteinas_rica, key=lambda x: x["macros"]["calorias"])
|
| 288 |
top_prot_rica = proteinas_rica[:7] if len(proteinas_rica) > 7 else proteinas_rica
|
| 289 |
prot_rica = random.choice(top_prot_rica)
|
| 290 |
|
| 291 |
-
print(f"[DEBUG] Proteína escolhida: {prot_rica['nome']} | Porção base: {prot_rica['porcao']}g")
|
| 292 |
-
print(f"[DEBUG] Macros por porção: {prot_rica['macros']}")
|
| 293 |
|
| 294 |
qtd_g = prot_restante / prot_rica["macros"]["proteina"] * prot_rica["porcao"]
|
| 295 |
-
|
| 296 |
|
| 297 |
qtd_g = max(limites_categoria["proteina_rica"][0],
|
| 298 |
min(qtd_g, limites_categoria["proteina_rica"][1]))
|
| 299 |
-
|
| 300 |
|
| 301 |
fator = qtd_g / prot_rica["porcao"]
|
| 302 |
macros_add = {k: fator * v for k, v in prot_rica["macros"].items()}
|
| 303 |
-
|
| 304 |
|
| 305 |
sugestao.append({
|
| 306 |
"alimento": prot_rica["nome"],
|
|
@@ -314,14 +306,6 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 314 |
carb_restante -= macros_add["carboidrato"]
|
| 315 |
gord_restante -= macros_add["gordura"]
|
| 316 |
|
| 317 |
-
print(f"[DEBUG] Após proteína rica → Restantes: "
|
| 318 |
-
f"{calorias_restantes:.1f} kcal, {prot_restante:.1f}g prot, "
|
| 319 |
-
f"{carb_restante:.1f}g carb, {gord_restante:.1f}g gord\n")
|
| 320 |
-
else:
|
| 321 |
-
print("[WARN] Nenhuma proteína rica encontrada!\n")
|
| 322 |
-
|
| 323 |
-
# -------------------- 2 & 3. CARBO + GORDURA --------------------
|
| 324 |
-
print(f"[DEBUG] Iniciando loop de carboidratos/gorduras (calorias restantes = {calorias_restantes:.1f})")
|
| 325 |
while calorias_restantes > 50:
|
| 326 |
# Carboidrato
|
| 327 |
carb_opcoes = [
|
|
@@ -390,16 +374,13 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 390 |
# -------------------- 4. AJUSTE FINAL --------------------
|
| 391 |
total_cal = sum(item["macros"]["calorias"] for item in sugestao)
|
| 392 |
dif_cal = macros_ref["calorias"] - total_cal
|
| 393 |
-
print(f"[DEBUG] Total atual da refeição: {total_cal:.1f} kcal | Diferença: {dif_cal:.1f}\n")
|
| 394 |
|
| 395 |
if dif_cal > 0:
|
| 396 |
-
print("[DEBUG] Tentando ajustar com gordura extra...")
|
| 397 |
gorduras_disponiveis = [item for item in sugestao if item["macros"].get("gordura", 0) > 0]
|
| 398 |
if gorduras_disponiveis:
|
| 399 |
gord_item = random.choice(gorduras_disponiveis)
|
| 400 |
cal_gordura_por_g = 9
|
| 401 |
qtd_extra = min(dif_cal / cal_gordura_por_g, 60)
|
| 402 |
-
print(f"[DEBUG] Aumentando {gord_item['alimento']} em {qtd_extra:.1f}g para ajustar calorias")
|
| 403 |
|
| 404 |
original_g = gord_item["quantidade_g"]
|
| 405 |
gord_item["quantidade_g"] += round(qtd_extra)
|
|
@@ -408,9 +389,8 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 408 |
gord_item["macros"][k] *= fator
|
| 409 |
total_cal = sum(item["macros"]["calorias"] for item in sugestao)
|
| 410 |
dif_cal = macros_ref["calorias"] - total_cal
|
| 411 |
-
print(f"[DEBUG] Novo total após ajuste: {total_cal:.1f} kcal | Diferença: {dif_cal:.1f}")
|
| 412 |
|
| 413 |
-
|
| 414 |
return sugestao
|
| 415 |
|
| 416 |
|
|
|
|
| 258 |
carb_restante = macros_ref["carboidrato"]
|
| 259 |
gord_restante = macros_ref["gordura"]
|
| 260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 261 |
# Limites por categoria
|
| 262 |
limites_categoria = {
|
| 263 |
"proteina_rica": (100, 350),
|
|
|
|
| 277 |
and not (nome_refeicao == "almoco" and a.get("categoria") == "sandes")
|
| 278 |
]
|
| 279 |
|
|
|
|
| 280 |
if proteinas_rica:
|
| 281 |
proteinas_rica = sorted(proteinas_rica, key=lambda x: x["macros"]["calorias"])
|
| 282 |
top_prot_rica = proteinas_rica[:7] if len(proteinas_rica) > 7 else proteinas_rica
|
| 283 |
prot_rica = random.choice(top_prot_rica)
|
| 284 |
|
|
|
|
|
|
|
| 285 |
|
| 286 |
qtd_g = prot_restante / prot_rica["macros"]["proteina"] * prot_rica["porcao"]
|
| 287 |
+
|
| 288 |
|
| 289 |
qtd_g = max(limites_categoria["proteina_rica"][0],
|
| 290 |
min(qtd_g, limites_categoria["proteina_rica"][1]))
|
| 291 |
+
|
| 292 |
|
| 293 |
fator = qtd_g / prot_rica["porcao"]
|
| 294 |
macros_add = {k: fator * v for k, v in prot_rica["macros"].items()}
|
| 295 |
+
|
| 296 |
|
| 297 |
sugestao.append({
|
| 298 |
"alimento": prot_rica["nome"],
|
|
|
|
| 306 |
carb_restante -= macros_add["carboidrato"]
|
| 307 |
gord_restante -= macros_add["gordura"]
|
| 308 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 309 |
while calorias_restantes > 50:
|
| 310 |
# Carboidrato
|
| 311 |
carb_opcoes = [
|
|
|
|
| 374 |
# -------------------- 4. AJUSTE FINAL --------------------
|
| 375 |
total_cal = sum(item["macros"]["calorias"] for item in sugestao)
|
| 376 |
dif_cal = macros_ref["calorias"] - total_cal
|
|
|
|
| 377 |
|
| 378 |
if dif_cal > 0:
|
|
|
|
| 379 |
gorduras_disponiveis = [item for item in sugestao if item["macros"].get("gordura", 0) > 0]
|
| 380 |
if gorduras_disponiveis:
|
| 381 |
gord_item = random.choice(gorduras_disponiveis)
|
| 382 |
cal_gordura_por_g = 9
|
| 383 |
qtd_extra = min(dif_cal / cal_gordura_por_g, 60)
|
|
|
|
| 384 |
|
| 385 |
original_g = gord_item["quantidade_g"]
|
| 386 |
gord_item["quantidade_g"] += round(qtd_extra)
|
|
|
|
| 389 |
gord_item["macros"][k] *= fator
|
| 390 |
total_cal = sum(item["macros"]["calorias"] for item in sugestao)
|
| 391 |
dif_cal = macros_ref["calorias"] - total_cal
|
|
|
|
| 392 |
|
| 393 |
+
|
| 394 |
return sugestao
|
| 395 |
|
| 396 |
|