import streamlit as st
import json
import re
# Carregar os dados do JSON
with open("t.json", "r", encoding="utf-8") as f:
data = json.load(f)
procedimentos = data["procedimentos"]
st.title("Busca de Procedimentos SUS/SIGTAP")
# Interface de busca
search_type = st.radio("Método de busca:", ["Por nome", "Por código", "Linguagem natural"])
if search_type == "Por nome":
search_query = st.text_input("Digite o nome do procedimento:")
if search_query and len(search_query) >= 3:
# Buscar procedimentos que contêm o texto digitado (ignorando case)
results = [p for p in procedimentos if search_query.upper() in p["nome"]]
# Mostrar resultados
if results:
st.write(f"Encontrados {len(results)} procedimentos:")
for p in results:
st.write(f"**{p['codigo']}** - {p['nome']}")
else:
st.write("Nenhum procedimento encontrado.")
elif search_type == "Por código":
search_query = st.text_input("Digite o código do procedimento:")
if search_query:
# Buscar procedimentos que começam com o código digitado
results = [p for p in procedimentos if p["codigo"].startswith(search_query)]
# Mostrar resultados
if results:
st.write(f"Encontrados {len(results)} procedimentos:")
for p in results:
st.write(f"**{p['codigo']}** - {p['nome']}")
else:
st.write("Nenhum procedimento encontrado.")
else: # Linguagem natural
search_query = st.text_input("Descreva o que você está procurando:")
if search_query:
# Extrair palavras-chave (remover palavras comuns)
palavras_comuns = ['de', 'do', 'da', 'para', 'com', 'em', 'no', 'na', 'e', 'ou']
palavras = [w.upper() for w in re.findall(r'\b\w+\b', search_query)
if w.lower() not in palavras_comuns and len(w) > 2]
# Buscar procedimentos que contêm qualquer uma das palavras-chave
results = []
for p in procedimentos:
score = sum(1 for palavra in palavras if palavra in p["nome"])
if score > 0:
results.append((p, score))
# Ordenar por relevância (número de palavras-chave encontradas)
results.sort(key=lambda x: x[1], reverse=True)
# Mostrar resultados
if results:
st.write(f"Encontrados {len(results)} procedimentos:")
for p, score in results[:10]: # Mostrar os 10 mais relevantes
st.write(f"**{p['codigo']}** - {p['nome']}")
else:
st.write("Nenhum procedimento encontrado.")
# Adicionar lista completa como referência
with st.expander("Ver todos os procedimentos"):
for p in procedimentos:
st.write(f"**{p['codigo']}** - {p['nome']}")