Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -255,20 +255,64 @@ STRICT_COMPOUND_TRIGGERS = {
|
|
| 255 |
DRUG_KEYWORDS = ["f谩rmaco", "farmaco", "medicamento", "imao", "remedio", "pastilla", "tratamiento", "antidepresiv"]
|
| 256 |
|
| 257 |
# --- FUNCIONES DE SEGURO L脫GICO E H脥BRIDO ---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
def validar_seguro_logico(entry, user_foods, user_query, food_compound_map):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
if not user_foods:
|
| 260 |
return True
|
| 261 |
|
| 262 |
user_query_clean = user_query.lower() if user_query else ""
|
| 263 |
texto_condicion = (entry.get("condicion_asociada", "") + " " + entry.get("compuesto_alimento", "")).lower()
|
| 264 |
|
| 265 |
-
#
|
| 266 |
-
|
| 267 |
-
if
|
| 268 |
-
|
| 269 |
-
|
|
|
|
|
|
|
| 270 |
|
| 271 |
-
#
|
| 272 |
user_compounds = set()
|
| 273 |
for food in user_foods:
|
| 274 |
food_clean = food.lower().strip()
|
|
@@ -282,11 +326,10 @@ def validar_seguro_logico(entry, user_foods, user_query, food_compound_map):
|
|
| 282 |
for syn in synonyms
|
| 283 |
)
|
| 284 |
if not tiene_compuesto:
|
| 285 |
-
logger.info(f"馃毄 SEGURO L脫GICO ACTIVADO: Se descart贸 '{entry.get('condicion_asociada')}' porque '{user_foods}' NO contiene {compound_key}.")
|
| 286 |
return False
|
| 287 |
|
| 288 |
return True
|
| 289 |
-
|
| 290 |
|
| 291 |
COMPOUND_SYNONYM_MAP = {
|
| 292 |
"gluten": ["gluten", "gliadin"],
|
|
|
|
| 255 |
DRUG_KEYWORDS = ["f谩rmaco", "farmaco", "medicamento", "imao", "remedio", "pastilla", "tratamiento", "antidepresiv"]
|
| 256 |
|
| 257 |
# --- FUNCIONES DE SEGURO L脫GICO E H脥BRIDO ---
|
| 258 |
+
# --- MATRIZ DE REGLAS Y SEGUROS L脫GICOS M脡DICOS POR CATEGOR脥A ---
|
| 259 |
+
MEDICAL_CONDITION_SAFEGUARDS = {
|
| 260 |
+
"farmacos_interacciones": {
|
| 261 |
+
"condition_triggers": ["f谩rmaco", "farmaco", "medicamento", "imao", "interacci贸n f谩rmaco", "anticoagulante", "warfarina", "estatina"],
|
| 262 |
+
"required_user_keywords": ["f谩rmaco", "farmaco", "medicamento", "imao", "pastilla", "remedio", "tratamiento", "antidepresivo", "dosis", "droga", "medicina", "receta"]
|
| 263 |
+
},
|
| 264 |
+
"respiratorio_asma": {
|
| 265 |
+
"condition_triggers": ["asma", "sibilancia", "sibilancias", "broncoespasmo", "bronquial", "neumonitis"],
|
| 266 |
+
"required_user_keywords": ["asma", "tos", "respirar", "pecho", "sibilancia", "ahogo", "falta de aire", "pulm贸n", "pulmon", "asfixia", "silbido", "ahogando"]
|
| 267 |
+
},
|
| 268 |
+
"dermatologico_alergia": {
|
| 269 |
+
"condition_triggers": ["urticaria", "angioedema", "anafilaxia", "eccema", "dermatitis", "psoriasis", "erupci贸n cut谩nea", "salpullido"],
|
| 270 |
+
"required_user_keywords": ["piel", "pica", "picaz贸n", "picazon", "salpullido", "manchas", "rojo", "alergia", "ronchas", "eccema", "dermatitis", "granitos", "labios hinchados"]
|
| 271 |
+
},
|
| 272 |
+
"articular_gota": {
|
| 273 |
+
"condition_triggers": ["gota", "artritis", "hiperuricemia", "articulaci贸n"],
|
| 274 |
+
"required_user_keywords": ["articulaci贸n", "articulaciones", "coyuntura", "dedo gordo", "rodilla", "gota", "artritis", "dolor articular"]
|
| 275 |
+
},
|
| 276 |
+
"renal_litiasis": {
|
| 277 |
+
"condition_triggers": ["litiasis", "c谩lculo renal", "calculo renal", "piedras en el ri帽贸n", "insuficiencia renal", "nefropat铆a"],
|
| 278 |
+
"required_user_keywords": ["ri帽贸n", "ri帽on", "espalda baja", "orina", "orinar", "c谩lculo", "calculo", "piedra", "c贸lico renal"]
|
| 279 |
+
},
|
| 280 |
+
"embarazo_lactancia": {
|
| 281 |
+
"condition_triggers": ["embarazo", "gestaci贸n", "lactancia", "maternidad"],
|
| 282 |
+
"required_user_keywords": ["embarazada", "embarazo", "gestando", "beb茅", "bebe", "lactando", "embarazada"]
|
| 283 |
+
},
|
| 284 |
+
"tiroides_endocrino": {
|
| 285 |
+
"condition_triggers": ["hipotiroidismo", "hipertiroidismo", "bocio", "tiroiditis", "tiroides"],
|
| 286 |
+
"required_user_keywords": ["tiroides", "hipotiroidismo", "hipertiroidismo", "bocio", "cuello"]
|
| 287 |
+
},
|
| 288 |
+
"hepato_vesicular": {
|
| 289 |
+
"condition_triggers": ["ves铆cula", "vesicula", "colelitiasis", "cirrosis", "hepatitis", "h铆gado"],
|
| 290 |
+
"required_user_keywords": ["ves铆cula", "vesicula", "h铆gado", "higado", "piel amarilla", "ictericia", "lado derecho", "costado derecho"]
|
| 291 |
+
}
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
def validar_seguro_logico(entry, user_foods, user_query, food_compound_map):
|
| 295 |
+
"""
|
| 296 |
+
SEGURO L脫GICO M脷LTIPLE Y BIOQU脥MICO:
|
| 297 |
+
Valida que una condici贸n m茅dica o bioqu铆mica de la BD no sea asignada falsamente
|
| 298 |
+
a menos que el usuario presente el contexto cl铆nico requerido o los alimentos
|
| 299 |
+
contengan los compuestos bioqu铆micos necesarios.
|
| 300 |
+
"""
|
| 301 |
if not user_foods:
|
| 302 |
return True
|
| 303 |
|
| 304 |
user_query_clean = user_query.lower() if user_query else ""
|
| 305 |
texto_condicion = (entry.get("condicion_asociada", "") + " " + entry.get("compuesto_alimento", "")).lower()
|
| 306 |
|
| 307 |
+
# 1. EVALUAR SEGUROS POR CATEGOR脥A DE CONDICIONES M脡DICAS COMUNES
|
| 308 |
+
for category, rules in MEDICAL_CONDITION_SAFEGUARDS.items():
|
| 309 |
+
if any(trig in texto_condicion for trig in rules["condition_triggers"]):
|
| 310 |
+
tiene_contexto = any(req_kw in user_query_clean for req_kw in rules["required_user_keywords"])
|
| 311 |
+
if not tiene_contexto:
|
| 312 |
+
logger.info(f"馃毄 SEGURO L脫GICO ACTIVADO [{category.upper()}]: Se descart贸 '{entry.get('condicion_asociada')}' por falta de s铆ntomas/contexto cl铆nico espec铆fico.")
|
| 313 |
+
return False
|
| 314 |
|
| 315 |
+
# 2. EVALUAR SEGUROS BIOQU脥MICOS POR COMPUESTOS ESTRICTOS (STRICT_COMPOUND_TRIGGERS)
|
| 316 |
user_compounds = set()
|
| 317 |
for food in user_foods:
|
| 318 |
food_clean = food.lower().strip()
|
|
|
|
| 326 |
for syn in synonyms
|
| 327 |
)
|
| 328 |
if not tiene_compuesto:
|
| 329 |
+
logger.info(f"馃毄 SEGURO L脫GICO ACTIVADO [BIOQU脥MICA]: Se descart贸 '{entry.get('condicion_asociada')}' porque '{user_foods}' NO contiene {compound_key}.")
|
| 330 |
return False
|
| 331 |
|
| 332 |
return True
|
|
|
|
| 333 |
|
| 334 |
COMPOUND_SYNONYM_MAP = {
|
| 335 |
"gluten": ["gluten", "gliadin"],
|