JairoCesar commited on
Commit
a7da8ed
·
verified ·
1 Parent(s): 4bc9607

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +56 -45
app.py CHANGED
@@ -174,6 +174,14 @@ def search_with_gemini(query, event_list):
174
  st.title("👨‍⚕️ Asesor Experto en Notificación SIVIGILA - Colombia")
175
  st.markdown("Busque una enfermedad por nombre, sinónimo, código CIE-10 o CIE-11 para obtener información de notificación.")
176
 
 
 
 
 
 
 
 
 
177
  query = st.text_input(
178
  "Ingrese su búsqueda:",
179
  placeholder="Ej: Dengue, T630, mordedura de serpiente, intoxicación por mercurio...",
@@ -183,6 +191,9 @@ query = st.text_input(
183
  if st.button("Buscar", type="primary"):
184
  if not query:
185
  st.warning("Por favor, ingrese un término de búsqueda.")
 
 
 
186
  elif data_codigos is None or notificacion_map is None:
187
  st.error("Los datos no se pudieron cargar. La aplicación no puede funcionar.")
188
  else:
@@ -202,63 +213,63 @@ if st.button("Buscar", type="primary"):
202
  protocol_names = []
203
 
204
  if protocol_names:
205
- # Usamos los nombres devueltos por Gemini para hacer una búsqueda directa
206
  temp_results = []
207
  for name in protocol_names:
208
  temp_results.extend(search_direct(name, data_codigos, notificacion_map))
209
 
210
- # Eliminar duplicados si Gemini devuelve protocolos que caen en la misma ficha
211
  unique_fichas = set()
212
  for res in temp_results:
213
  ficha = res["info_notificacion"]["FICHA"]
214
  if ficha not in unique_fichas:
215
  results.append(res)
216
  unique_fichas.add(ficha)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
 
218
- # 3. Mostrar resultados
219
- st.markdown("---")
220
- if not results:
221
- st.info(f"No se encontraron eventos de notificación obligatoria para su búsqueda: '{query}'.")
222
- else:
223
- st.success(f"Se encontraron {len(results)} evento(s) relacionado(s) con su búsqueda:")
224
 
225
- for result in results:
226
- info = result["info_notificacion"]
227
- codigos = result["detalles_codigos"]
228
 
229
- with st.expander(f"**Evento: {info.get('Evento', 'Sin nombre')} (Ficha: {info.get('FICHA', 'N/A')})**", expanded=True):
230
-
231
- # Resumen de notificación
232
- st.subheader("Información de Notificación")
233
-
234
- notif_super = info.get("Notificación superinmedita", "NO") == "SI"
235
 
236
- if notif_super:
237
- st.error(f"**¡ATENCIÓN! Requiere Notificación SUPERINMEDIATA:** {info.get('Descripción superinmediata', '')}")
238
- elif info.get("Notificación Inmediata", "NO") == "SI":
239
- st.warning("**Requiere Notificación Inmediata (dentro de las 24 horas).**")
240
- else:
241
- st.info("**Notificación Semanal Individual.**")
242
 
243
- st.markdown(f"**Requisito:** {info.get('REQUISITO', 'No especificado')}")
244
-
245
- # =========================================================================
246
- # ========= INICIO DE LA CORRECCIÓN APLICADA ==============================
247
- # =========================================================================
248
-
249
- # Se saca la operación de reemplazo de la f-string para evitar el SyntaxError
250
- fichas_texto = info.get('Fichas a Utilizar', 'No especificado').replace('+', '\n+ ')
251
- st.markdown(f"**Fichas a utilizar:** {fichas_texto}")
252
-
253
- # =========================================================================
254
- # ========= FIN DE LA CORRECCIÓN APLICADA =================================
255
- # =========================================================================
256
-
257
- # Detalles de códigos
258
- st.subheader("Códigos Relacionados (CIE-10 y CIE-11)")
259
- for codigo in codigos:
260
- st.markdown(f"""
261
- - **Nombre Protocolo:** `{codigo.get('NOMBRES DE PROTOCOLOS', 'N/A')}`
262
- - **CIE-10:** `{codigo.get('CIE 10', 'N/A')}`
263
- - **CIE-11:** `{codigo.get('CIE 11', 'N/A')}` | **Nombre CIE-11:** *{codigo.get('NOMBRES DE CIE 11', 'N/A')}*
264
- """)
 
174
  st.title("👨‍⚕️ Asesor Experto en Notificación SIVIGILA - Colombia")
175
  st.markdown("Busque una enfermedad por nombre, sinónimo, código CIE-10 o CIE-11 para obtener información de notificación.")
176
 
177
+ # << CAMBIO 1: INICIALIZACIÓN DE SESSION STATE >>
178
+ # Nos aseguramos de que las variables existan en la memoria de la sesión
179
+ if 'search_results' not in st.session_state:
180
+ st.session_state.search_results = None
181
+ if 'last_query' not in st.session_state:
182
+ st.session_state.last_query = ""
183
+
184
+
185
  query = st.text_input(
186
  "Ingrese su búsqueda:",
187
  placeholder="Ej: Dengue, T630, mordedura de serpiente, intoxicación por mercurio...",
 
191
  if st.button("Buscar", type="primary"):
192
  if not query:
193
  st.warning("Por favor, ingrese un término de búsqueda.")
194
+ # Limpiamos resultados si la búsqueda está vacía
195
+ st.session_state.search_results = None
196
+ st.session_state.last_query = ""
197
  elif data_codigos is None or notificacion_map is None:
198
  st.error("Los datos no se pudieron cargar. La aplicación no puede funcionar.")
199
  else:
 
213
  protocol_names = []
214
 
215
  if protocol_names:
 
216
  temp_results = []
217
  for name in protocol_names:
218
  temp_results.extend(search_direct(name, data_codigos, notificacion_map))
219
 
 
220
  unique_fichas = set()
221
  for res in temp_results:
222
  ficha = res["info_notificacion"]["FICHA"]
223
  if ficha not in unique_fichas:
224
  results.append(res)
225
  unique_fichas.add(ficha)
226
+
227
+ # << CAMBIO 2: GUARDAR RESULTADOS Y CONSULTA EN SESSION STATE >>
228
+ # En lugar de mostrar los resultados directamente, los guardamos en la "memoria"
229
+ st.session_state.search_results = results
230
+ st.session_state.last_query = query
231
+
232
+
233
+ # << CAMBIO 3: LÓGICA DE VISUALIZACIÓN SEPARADA >>
234
+ # Este bloque se ejecuta en CADA recarga del script. Revisa la "memoria" y muestra lo que hay guardado.
235
+ st.markdown("---")
236
+ if st.session_state.search_results is not None:
237
+ # `is not None` nos permite manejar el caso de una búsqueda que no arrojó resultados (una lista vacía [])
238
+ results = st.session_state.search_results
239
+
240
+ if not results:
241
+ st.info(f"No se encontraron eventos de notificación obligatoria para su búsqueda: '{st.session_state.last_query}'.")
242
+ else:
243
+ st.success(f"Se encontraron {len(results)} evento(s) relacionado(s) con su búsqueda: '{st.session_state.last_query}'")
244
 
245
+ for result in results:
246
+ info = result["info_notificacion"]
247
+ codigos = result["detalles_codigos"]
 
 
 
248
 
249
+ with st.expander(f"**Evento: {info.get('Evento', 'Sin nombre')} (Ficha: {info.get('FICHA', 'N/A')})**", expanded=True):
 
 
250
 
251
+ # Resumen de notificación
252
+ st.subheader("Información de Notificación")
253
+
254
+ notif_super = info.get("Notificación superinmedita", "NO") == "SI"
 
 
255
 
256
+ if notif_super:
257
+ st.error(f"**¡ATENCIÓN! Requiere Notificación SUPERINMEDIATA:** {info.get('Descripción superinmediata', '')}")
258
+ elif info.get("Notificación Inmediata", "NO") == "SI":
259
+ st.warning("**Requiere Notificación Inmediata (dentro de las 24 horas).**")
260
+ else:
261
+ st.info("**Notificación Semanal Individual.**")
262
 
263
+ st.markdown(f"**Requisito:** {info.get('REQUISITO', 'No especificado')}")
264
+
265
+ fichas_texto = info.get('Fichas a Utilizar', 'No especificado').replace('+', '\n+ ')
266
+ st.markdown(f"**Fichas a utilizar:** {fichas_texto}")
267
+
268
+ # Detalles de códigos
269
+ st.subheader("Códigos Relacionados (CIE-10 y CIE-11)")
270
+ for codigo in codigos:
271
+ st.markdown(f"""
272
+ - **Nombre Protocolo:** `{codigo.get('NOMBRES DE PROTOCOLOS', 'N/A')}`
273
+ - **CIE-10:** `{codigo.get('CIE 10', 'N/A')}`
274
+ - **CIE-11:** `{codigo.get('CIE 11', 'N/A')}` | **Nombre CIE-11:** *{codigo.get('NOMBRES DE CIE 11', 'N/A')}*
275
+ """)