Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1370,7 +1370,26 @@ INTEGRATED_NEURO_FOOD_MAP = {
|
|
| 1370 |
}
|
| 1371 |
}
|
| 1372 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1373 |
# --- GENERADOR DE INFORME LOCAL AUTOMÁTICO (SIN IA) ---
|
|
|
|
| 1374 |
def generate_local_fallback_analysis(query, match, entities, food_compound_map, neuro_map):
|
| 1375 |
saludo = "### 📋 Informe de Análisis Clínico-Nutricional (Modo Local / Alta Disponibilidad)\n"
|
| 1376 |
hipotesis = f"**Hipótesis Probable:** Es muy probable que tus síntomas estén relacionados con **{match.get('condicion_asociada', 'una sensibilidad a compuestos alimentarios')}**.\n"
|
|
@@ -1398,14 +1417,30 @@ def generate_local_fallback_analysis(query, match, entities, food_compound_map,
|
|
| 1398 |
elif match.get('mecanismo_fisiologico'):
|
| 1399 |
causa += f"\n**Mecanismo fisiológico:** {match.get('mecanismo_fisiologico')}\n"
|
| 1400 |
|
| 1401 |
-
evitar = f"\n### 🛑 Alimentos a Moderar o Evitar\n- **Alimentos evaluados:** {', '.join(user_foods).capitalize()}\n- Alimentos ricos en **{compuestos_str}** o
|
| 1402 |
|
| 1403 |
-
alternativas = "\n### 💡 Sugerencias y Alternativas\n- Llevar un diario de síntomas registrando alimentos, hora de consumo y aparición de molestias.\n- Reducir temporalmente la ingesta del alimento sospechoso para
|
| 1404 |
|
| 1405 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1406 |
|
| 1407 |
return saludo + hipotesis + causa + evitar + alternativas + consejo + TEXTO_BANDERAS_ROJAS
|
| 1408 |
-
|
| 1409 |
# --- FUNCIONES DE APOYO Y EXTRACCIÓN ---
|
| 1410 |
@st.cache_data(show_spinner=False)
|
| 1411 |
def generate_word_report_cached(report_text):
|
|
|
|
| 1370 |
}
|
| 1371 |
}
|
| 1372 |
|
| 1373 |
+
# --- DICCIONARIO ESCALABLE DE CONSEJOS CLÍNICOS POR COMPUESTO ---
|
| 1374 |
+
CONSEJOS_POR_COMPUESTO = {
|
| 1375 |
+
"gluten": "La respuesta al gluten varía según el grado de sensibilidad o compromiso inmunitario; se recomienda evaluar marcadores serológicos (Ac. anti-transglutaminasa IgA) antes de retirarlo permanentemente.",
|
| 1376 |
+
"caseína": "La sensibilidad a la caseína involucra una respuesta proteica; considera alternativas vegetales o lácteos fermentados bajo supervisión.",
|
| 1377 |
+
"lactosa": "La tolerancia a la lactosa depende de la actividad de la enzima lactasa y de la salud intestinal; se pueden evaluar productos deslactosados o suplementos de lactasa.",
|
| 1378 |
+
"histamina": "La acumulación de histamina se relaciona con la capacidad de degradación enzimática (DAO); moderar alimentos madurados o conservados suele aliviar la carga sistémica.",
|
| 1379 |
+
"tiramina": "La tiramina es una amina vasoactiva; controlar la ingesta de alimentos añejados o fermentados ayuda a reducir episodios vascular-migrañosos.",
|
| 1380 |
+
"fructosa": "La malabsorción de fructosa depende de la capacidad de transporte intestinal (GLUT5); ajustar la carga por toma ayuda a estabilizar el eje digestivo.",
|
| 1381 |
+
"fodmaps": "La tolerancia a carbohidratos fermentables varía según el microbioma intestinal; una estrategia de eliminación y reintroducción pausada define tu umbral personal.",
|
| 1382 |
+
"cafeína": "La sensibilidad a la cafeína depende del aclaramiento hepático (CYP1A2); moderar su consumo antes de mitad de tarde protege la arquitectura del sueño.",
|
| 1383 |
+
"sulfitos": "Los sulfitos pueden inducir sensibilidad respiratoria o vascular; verificar etiquetas en vinos, desecados y conservas evita reacciones de sobrecarga.",
|
| 1384 |
+
"oxalatos": "Los oxalatos pueden formar microcristales en presencia de disbiosis o baja hidratación; combinarlos con calcio dietético reduce su absorción intestinal.",
|
| 1385 |
+
"saponinas": "Las saponinas alteran la tensión superficial de la mucosa intestinal; el remojo prolongado y lavado intensivo de granos reduce significativamente su impacto.",
|
| 1386 |
+
"solanina": "La solanina en solanáceas puede afectar a personas con alta visceropercepción; consumir tubérculos bien maduros y cocidos minimiza su contenido."
|
| 1387 |
+
}
|
| 1388 |
+
|
| 1389 |
+
CONSEJO_GENERICO_DEFAULT = "Cada organismo posee una individualidad bioquímica única según su perfil enzimático y digestivo. Monitorear tus respuestas personales te permitirá adaptar la dieta a tu umbral de tolerancia."
|
| 1390 |
+
|
| 1391 |
# --- GENERADOR DE INFORME LOCAL AUTOMÁTICO (SIN IA) ---
|
| 1392 |
+
# --- GENERADOR DE INFORME LOCAL ESCALABLE POR DICCIONARIO ---
|
| 1393 |
def generate_local_fallback_analysis(query, match, entities, food_compound_map, neuro_map):
|
| 1394 |
saludo = "### 📋 Informe de Análisis Clínico-Nutricional (Modo Local / Alta Disponibilidad)\n"
|
| 1395 |
hipotesis = f"**Hipótesis Probable:** Es muy probable que tus síntomas estén relacionados con **{match.get('condicion_asociada', 'una sensibilidad a compuestos alimentarios')}**.\n"
|
|
|
|
| 1417 |
elif match.get('mecanismo_fisiologico'):
|
| 1418 |
causa += f"\n**Mecanismo fisiológico:** {match.get('mecanismo_fisiologico')}\n"
|
| 1419 |
|
| 1420 |
+
evitar = f"\n### 🛑 Alimentos a Moderar o Evitar\n- **Alimentos evaluados:** {', '.join(user_foods).capitalize()}\n- Alimentos ricos en **{compuestos_str}** o derivados que contengan los mismos componentes desencadenantes.\n"
|
| 1421 |
|
| 1422 |
+
alternativas = "\n### 💡 Sugerencias y Alternativas\n- Llevar un diario de síntomas registrando alimentos, hora de consumo y aparición de molestias.\n- Reducir temporalmente la ingesta del alimento sospechoso para evaluar la remisión del síntoma.\n- Consultar con un nutricionista funcional o médico especialista si las molestias persisten.\n"
|
| 1423 |
|
| 1424 |
+
# 1. Prioridad: Buscar consejo directo en el diccionario de compuestos (O(1))
|
| 1425 |
+
consejo_texto = None
|
| 1426 |
+
for comp in compuestos_detectados:
|
| 1427 |
+
comp_clean = comp.lower().strip()
|
| 1428 |
+
if comp_clean in CONSEJOS_POR_COMPUESTO:
|
| 1429 |
+
consejo_texto = CONSEJOS_POR_COMPUESTO[comp_clean]
|
| 1430 |
+
break
|
| 1431 |
+
|
| 1432 |
+
# 2. Si no hay en el diccionario, usar la recomendación de tu JSON si existe
|
| 1433 |
+
if not consejo_texto and match.get("recomendaciones_examenes"):
|
| 1434 |
+
consejo_texto = f"Recomendación específica de la base de datos: {match.get('recomendaciones_examenes')}"
|
| 1435 |
+
|
| 1436 |
+
# 3. Fallback genérico si no se encuentra ninguna específica
|
| 1437 |
+
if not consejo_texto:
|
| 1438 |
+
consejo_texto = CONSEJO_GENERICO_DEFAULT
|
| 1439 |
+
|
| 1440 |
+
consejo = f"\n### 📌 Consejo Práctico Final\n{consejo_texto}\n"
|
| 1441 |
|
| 1442 |
return saludo + hipotesis + causa + evitar + alternativas + consejo + TEXTO_BANDERAS_ROJAS
|
| 1443 |
+
|
| 1444 |
# --- FUNCIONES DE APOYO Y EXTRACCIÓN ---
|
| 1445 |
@st.cache_data(show_spinner=False)
|
| 1446 |
def generate_word_report_cached(report_text):
|