Py.Cafe

tell.medicina/

sus-sigtap-procedures

Busca de Procedimentos SUS/SIGTAP

DocsPricing
  • app.py
  • requirements.txt
  • t.json
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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']}")