CoolFace
Apppublic

lideraperformance/teste-simples

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
streamlit_app.py140 linesDownload Raw Back to src
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}")