Spaces:
Running
Running
Update app.py
Browse files
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 |
-
|
| 219 |
-
|
| 220 |
-
|
| 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 |
-
|
| 226 |
-
info = result["info_notificacion"]
|
| 227 |
-
codigos = result["detalles_codigos"]
|
| 228 |
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
notif_super = info.get("Notificación superinmedita", "NO") == "SI"
|
| 235 |
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
st.markdown(f"
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
|
| 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 |
+
""")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|