import gradio as gr from sentence_transformers import SentenceTransformer import numpy as np # Modelo para embeddings model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') # Questionário DISC disc_questions = [ { "pergunta": "Em situações de trabalho em equipe, eu geralmente:", "opcoes": [ ("D", "Assumo a liderança e tomo decisões rápidas"), ("I", "Motivo o grupo e mantenho o ambiente animado"), ("S", "Apoio os colegas e mantenho a harmonia"), ("C", "Analiso detalhadamente antes de agir") ] }, { "pergunta": "Quando enfrento um problema, eu:", "opcoes": [ ("D", "Enfrento diretamente e busco soluções imediatas"), ("I", "Discuto com outros e busco diferentes perspectivas"), ("S", "Mantenho a calma e sigo um processo estabelecido"), ("C", "Pesquiso todas as informações disponíveis primeiro") ] }, { "pergunta": "Em reuniões, eu costumo:", "opcoes": [ ("D", "Ir direto ao ponto e focar em resultados"), ("I", "Participar ativamente e compartilhar ideias"), ("S", "Ouvir atentamente e contribuir quando solicitado"), ("C", "Tomar notas e questionar os detalhes") ] } ] perfis_caracteristicas = { 'D': { 'pontos_fortes': [ "Capacidade de liderança", "Foco em resultados", "Tomada rápida de decisão", "Assertividade", "Iniciativa" ], 'areas_desenvolvimento': [ "Paciência com outros", "Sensibilidade às necessidades alheias", "Diplomacia", "Atenção aos detalhes" ], 'ambiente_ideal': [ "Competitivo", "Com autonomia", "Orientado a resultados", "Com desafios constantes" ] }, 'I': { 'pontos_fortes': [ "Comunicação", "Entusiasmo", "Networking", "Criatividade", "Persuasão" ], 'areas_desenvolvimento': [ "Organização", "Foco", "Conclusão de tarefas", "Atenção aos detalhes" ], 'ambiente_ideal': [ "Social", "Colaborativo", "Dinâmico", "Com reconhecimento público" ] }, 'S': { 'pontos_fortes': [ "Estabilidade", "Confiabilidade", "Trabalho em equipe", "Paciência", "Lealdade" ], 'areas_desenvolvimento': [ "Adaptação a mudanças", "Assertividade", "Iniciativa", "Tomada de decisão" ], 'ambiente_ideal': [ "Estável", "Previsível", "Cooperativo", "Com rotinas claras" ] }, 'C': { 'pontos_fortes': [ "Precisão", "Análise", "Organização", "Qualidade", "Planejamento" ], 'areas_desenvolvimento': [ "Flexibilidade", "Velocidade", "Expressão emocional", "Tomada de risco" ], 'ambiente_ideal': [ "Estruturado", "Com regras claras", "Focado em qualidade", "Com tempo para análise" ] } } def calcular_perfil(respostas): # Contar frequência de cada perfil contagem = {'D': 0, 'I': 0, 'S': 0, 'C': 0} for resposta in respostas: if resposta: # Verifica se a resposta não é None perfil = resposta.split()[0] # Pega a primeira letra (D, I, S ou C) contagem[perfil] += 1 # Calcular porcentagens total = sum(contagem.values()) if total > 0: # Evita divisão por zero percentuais = {k: (v/total) * 100 for k, v in contagem.items()} else: percentuais = {k: 0 for k in contagem.keys()} return percentuais def gerar_relatorio(percentuais): # Ordenar perfis por porcentagem perfis_ordenados = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True)) perfil_dominante = list(perfis_ordenados.keys())[0] # Cabeçalho do relatório relatorio = "RELATÓRIO DE PERFIL COMPORTAMENTAL DISC\n\n" # Resultados percentuais relatorio += "DISTRIBUIÇÃO DOS PERFIS:\n" for perfil, porcentagem in perfis_ordenados.items(): relatorio += f"{perfil}: {porcentagem:.1f}%\n" relatorio += f"\nPERFIL PREDOMINANTE: {perfil_dominante}\n\n" # Características do perfil dominante relatorio += "PONTOS FORTES:\n" for ponto in perfis_caracteristicas[perfil_dominante]['pontos_fortes']: relatorio += f"- {ponto}\n" relatorio += "\nÁREAS DE DESENVOLVIMENTO:\n" for area in perfis_caracteristicas[perfil_dominante]['areas_desenvolvimento']: relatorio += f"- {area}\n" relatorio += "\nAMBIENTE IDEAL DE TRABALHO:\n" for caracteristica in perfis_caracteristicas[perfil_dominante]['ambiente_ideal']: relatorio += f"- {caracteristica}\n" return relatorio def processar_questionario(*args): # Recebe as respostas como argumentos individuais e converte para lista respostas = list(args) # Calcular percentuais percentuais = calcular_perfil(respostas) # Gerar relatório relatorio = gerar_relatorio(percentuais) return relatorio # Interface Gradio with gr.Blocks(title="Questionário DISC") as iface: gr.Markdown("# Análise de Perfil Comportamental DISC") # Lista para armazenar os componentes de rádio radio_components = [] # Criar questões for i, questao in enumerate(disc_questions): gr.Markdown(f"### {questao['pergunta']}") radio = gr.Radio( choices=[f"{perfil} - {desc}" for perfil, desc in questao['opcoes']], label=f"Questão {i+1}" ) radio_components.append(radio) # Saída output = gr.Textbox(label="Relatório", lines=20) # Botão btn = gr.Button("Gerar Relatório") # Conectar função aos componentes btn.click( fn=processar_questionario, inputs=radio_components, outputs=output ) # Iniciar a interface iface.launch()