JairoCesar commited on
Commit
02f8680
路
verified 路
1 Parent(s): 26f6933

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -8
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
- # REGLA 1: Descartar interacciones de medicamentos/IMAO si el usuario no los mencion贸
266
- if any(k in texto_condicion for k in ["f谩rmaco", "farmaco", "imao", "interacci贸n f谩rmaco"]):
267
- if not any(dk in user_query_clean for dk in DRUG_KEYWORDS):
268
- logger.info(f"馃毄 SEGURO L脫GICO ACTIVADO: Se descart贸 interacci贸n f谩rmaco/IMAO porque el usuario no mencion贸 medicamentos.")
269
- return False
 
 
270
 
271
- # REGLA 2: Validar compuestos estrictos
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"],