|
|
"""Aplicativo de Gerenciamento de Checklists""" |
|
|
|
|
|
import streamlit as st |
|
|
import traceback |
|
|
import sys |
|
|
|
|
|
try: |
|
|
from utils.database import get_all_checklists, test_connection |
|
|
except Exception as e: |
|
|
st.error(f"❌ Erro ao importar módulos: {str(e)}") |
|
|
st.code(traceback.format_exc()) |
|
|
st.stop() |
|
|
|
|
|
st.set_page_config( |
|
|
page_title="Gerenciador de Checklists", |
|
|
page_icon="✅", |
|
|
layout="centered", |
|
|
initial_sidebar_state="collapsed" |
|
|
) |
|
|
|
|
|
def init_session_state(): |
|
|
if 'current_checklist_id' not in st.session_state: |
|
|
st.session_state.current_checklist_id = None |
|
|
|
|
|
def main(): |
|
|
try: |
|
|
init_session_state() |
|
|
|
|
|
st.title("🗂️ Gerenciador de Checklists") |
|
|
st.markdown("---") |
|
|
|
|
|
|
|
|
try: |
|
|
if not test_connection(): |
|
|
st.error("❌ Não foi possível conectar ao banco de dados PostgreSQL!") |
|
|
st.warning("⚠️ **Problema identificado**: O servidor PostgreSQL não está acessível do Hugging Face Space") |
|
|
st.info("🔧 **Possíveis soluções:**") |
|
|
st.markdown(""" |
|
|
- Verificar se o servidor PostgreSQL está rodando |
|
|
- Configurar firewall para permitir conexões do Hugging Face (IPs externos) |
|
|
- Usar um banco PostgreSQL na nuvem (Railway, Supabase, ElephantSQL) |
|
|
- Configurar pg_hba.conf para aceitar conexões remotas |
|
|
""") |
|
|
st.stop() |
|
|
except Exception as e: |
|
|
st.error(f"❌ Erro na conexão: {str(e)}") |
|
|
st.info("💡 O Hugging Face Space pode estar bloqueado para acessar servidores externos") |
|
|
st.code(traceback.format_exc()) |
|
|
st.stop() |
|
|
|
|
|
col1, col2, col3 = st.columns([1, 2, 1]) |
|
|
|
|
|
with col2: |
|
|
st.markdown("### Bem-vindo!") |
|
|
st.markdown("Crie e gerencie seus checklists personalizados de forma simples e eficiente.") |
|
|
|
|
|
st.markdown("") |
|
|
|
|
|
col1, col2, col3 = st.columns(3) |
|
|
with col1: |
|
|
if st.button("➕ Novo Checklist", type="primary", use_container_width=True): |
|
|
st.switch_page("pages/criar_checklist.py") |
|
|
with col2: |
|
|
if st.button("📊 Dashboard Geral", use_container_width=True): |
|
|
st.switch_page("pages/dashboard_geral.py") |
|
|
with col3: |
|
|
if st.button("🤖 Relatórios IA", use_container_width=True): |
|
|
st.switch_page("pages/relatorio_ia.py") |
|
|
|
|
|
|
|
|
try: |
|
|
checklists = get_all_checklists() |
|
|
|
|
|
if checklists: |
|
|
st.markdown("### Seus Checklists") |
|
|
for checklist in checklists: |
|
|
col_name, col_process, col_date, col_btn = st.columns([3, 2, 1.5, 1]) |
|
|
with col_name: |
|
|
st.write(f"📋 {checklist['name']}") |
|
|
with col_process: |
|
|
if checklist['numero_processo']: |
|
|
st.caption(f"🔢 {checklist['numero_processo']}") |
|
|
else: |
|
|
st.caption("🔢 Sem processo") |
|
|
with col_date: |
|
|
st.caption(checklist['created_at'].strftime("%d/%m/%Y")) |
|
|
with col_btn: |
|
|
if st.button("Ver", key=f"view_{checklist['id']}"): |
|
|
st.session_state.current_checklist_id = checklist['id'] |
|
|
st.switch_page("pages/dashboard.py") |
|
|
else: |
|
|
st.info("Você ainda não tem checklists. Clique em 'Novo Checklist' para criar o primeiro!") |
|
|
|
|
|
except Exception as e: |
|
|
st.error(f"Erro ao buscar checklists: {str(e)}") |
|
|
st.code(traceback.format_exc()) |
|
|
|
|
|
except Exception as e: |
|
|
st.error(f"❌ Erro crítico na aplicação: {str(e)}") |
|
|
st.code(traceback.format_exc()) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|
|
|
|