lideraperformance/teste-simples
0
1import streamlit as st2import pandas as pd3import google.generativeai as genai4 5# --- CONFIGURAÇÃO DA API DO GEMINI ---6try:7 genai.configure(api_key=st.secrets["GEMINI_API_KEY"])8 model = genai.GenerativeModel('gemini-1.5-flash')9 gemini_configurado = True10except Exception as e:11 st.error(f"Erro ao configurar a API do Gemini: {e}. Verifique seu arquivo .streamlit/secrets.toml")12 gemini_configurado = False13 14# --- FUNÇÕES DE LÓGICA DE ANÁLISE (Sem alterações) ---15 16def classificar_esforco(valor_adaptacao):17 if valor_adaptacao <= 1.0: return "Baixo esforço de adaptação"18 if 1.0 < valor_adaptacao <= 2.0: return "Esforço de adaptação moderado"19 if 2.0 < valor_adaptacao <= 2.9: return "Esforço de adaptação moderado alto"20 if valor_adaptacao >= 3.0: return "Potencial estresse"21 return "Indefinido"22 23def analisar_disc(dados_df):24 resultados = {}25 fatores_disc = ["Dominador", "Influenciador", "Estabilidade", "Conformidade"]26 for fator in fatores_disc:27 coluna_natural, coluna_work = f"{fator} Natural", f"{fator} Work"28 if coluna_natural in dados_df.columns and coluna_work in dados_df.columns:29 natural_val = dados_df[coluna_natural].iloc[0]30 work_val = dados_df[coluna_work].iloc[0]31 adaptacao = abs(work_val - natural_val)32 resultados[fator] = {33 "Natural": natural_val,34 "Adaptado": work_val,35 "Adaptação": adaptacao,36 "Nível de Esforço": classificar_esforco(adaptacao)37 }38 return resultados39 40def analisar_motivadores(dados_df):41 resultados = {"Paixões": [], "Menores Motivadores": []}42 motivadores = ["Conhecimento e Descoberta:", "Retorno sobre Investimento (ROI):", "Estética:", "Ajudar os Outros:", "Princípios Orientadores:", "Liderança:", "Paz e Harmonia:"]43 for m in motivadores:44 if m in dados_df.columns:45 score = dados_df[m].iloc[0]46 if score > 7.0:47 resultados["Paixões"].append(f"{m.replace(':', '')} ({score})")48 return resultados49 50def analisar_axiologia(dados_df):51 resultados = {"Pontos Fortes": [], "Oportunidades de Melhoria": []}52 competencias = ["Foco no Cliente", "Autoconfiança", "Liderando outros"]53 for c in competencias:54 if c in dados_df.columns:55 score = dados_df[c].iloc[0]56 if score > 6.7:57 resultados["Pontos Fortes"].append(f"{c} ({score})")58 else:59 resultados["Oportunidades de Melhoria"].append(f"{c} ({score})")60 if 'Confiabilidade (Reliability)' in dados_df.columns:61 resultados["Confiabilidade"] = dados_df['Confiabilidade (Reliability)'].iloc[0]62 return resultados63 64def gerar_relatorio_final(dados_df):65 with st.spinner('Realizando análises e consultando a IA para gerar o relatório completo...'):66 analise_disc_data = analisar_disc(dados_df)67 analise_motivadores_data = analisar_motivadores(dados_df)68 analise_axiologia_data = analisar_axiologia(dados_df)69 resumo_para_ia = f"""70 **Dados do(a) Avaliado(a):** - Nome: {dados_df['Assessment Taker Name'].iloc[0]}71 **Análise Comportamental (DISC):** - Análise de Adaptação e Estresse: {analise_disc_data}72 **Análise Motivacional:** - Paixões (motivadores > 7.0): {analise_motivadores_data['Paixões']}73 **Análise de Competências (Axiologia):** - Confiabilidade (Reliability): {analise_axiologia_data.get('Confiabilidade', 'N/A')} - Pontos Fortes (competências > 6.7): {analise_axiologia_data['Pontos Fortes']} - Oportunidades de Melhoria: {analise_axiologia_data['Oportunidades de Melhoria']}74 """75 prompt_final = f"""76 Aja como o Assistente de Análise Virtual da Lidera Assessments, conforme o manual de identidade fornecido.77 Sua tarefa é gerar um relatório de análise combinada para um(a) avaliado(a).78 Use os dados estruturados fornecidos abaixo para preencher os 12 itens do relatório. Siga rigorosamente a estrutura e a formatação solicitadas no manual.79 Seja profissional, objetivo e use os dados para justificar suas conclusões. Refira-se ao indivíduo sempre como "O(A) Avaliado(a)".80 81 **DADOS ESTRUTURADOS PARA ANÁLISE:**82 {resumo_para_ia}83 84 **ESTRUTURA FINAL DO RELATÓRIO (Sequência Obrigatória):**85 Gere um relatório que contenha exatamente os seguintes 12 títulos, nesta ordem. Elabore o conteúdo de cada item com base nos dados fornecidos.86 87 1. **Objetivo da Análise**88 2. **Data da Avaliação Mais Recente** (Use a data de hoje para este exemplo)89 3. **Dados Considerados** (Resuma as principais pontuações de cada avaliação)90 4. **Potenciais Profissões Compatíveis** (Sugira com base nos pontos fortes)91 5. **Parecer Geral da Análise** (Crie um resumo geral)92 6. **Nível de Correspondência com o Cargo** (Assuma um cargo genérico de 'Liderança' e justifique)93 7. **Vantagens e Pontos Fortes para a Função**94 8. **Oportunidades de Melhoria**95 9. **Análise de Estresse e Adaptação DISC** (Detalhe a análise dos fatores DISC)96 10. **Análise dos Vieses Comportamentais da Axiologia** (Como não temos dados de viés, informe "Dados não fornecidos para esta análise")97 11. **Análise do QP e a influência dos Sabotadores** (Informe "Dados não fornecidos para esta análise")98 12. **Importante** (Use o texto obrigatório do seu manual)99 """100 try:101 response = model.generate_content(prompt_final)102 return response.text103 except Exception as e:104 return f"Ocorreu um erro na IA: {e}"105 106# --- INTERFACE GRÁFICA (UI) ---107st.set_page_config(layout="wide")108st.title("Assistente de Análise Virtual - Lidera Assessments")109 110uploaded_file = st.file_uploader("Carregue aqui o arquivo CSV com os dados combinados", type=["csv"])111 112if uploaded_file is not None:113 try:114 dados_brutos = pd.read_csv(uploaded_file)115 116 with st.expander("Visualizar Dados Carregados"):117 st.dataframe(dados_brutos)118 119 # --- LÓGICA CORRIGIDA ---120 # 1. O SELETOR DE PESSOA FICA FORA DO BOTÃO121 pessoa_selecionada = st.selectbox(122 "Selecione o(a) avaliado(a) para analisar:",123 options=dados_brutos['Assessment Taker Name'].unique()124 )125 126 # 2. O BOTÃO APENAS DISPARA A AÇÃO127 if st.button("Gerar Relatório de Análise"):128 # Filtra os dados da pessoa que foi SELECIONADA129 dados_pessoa = dados_brutos[dados_brutos['Assessment Taker Name'] == pessoa_selecionada]130 131 if not dados_pessoa.empty and gemini_configurado:132 relatorio_final = gerar_relatorio_final(dados_pessoa)133 134 st.subheader(f"Relatório para: {pessoa_selecionada}")135 st.markdown(relatorio_final)136 else:137 st.error("Não foi possível gerar o relatório. Verifique os dados ou a configuração da API.")138 139 except Exception as e:140 st.error(f"Erro ao processar o arquivo: {e}")