import gradio as gr import plotly.graph_objects as go from sentence_transformers import SentenceTransformer import numpy as np model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') def get_semantic_similarity(text1, text2): """Calcula similaridade semântica entre dois textos""" embedding1 = model.encode(text1) embedding2 = model.encode(text2) return np.dot(embedding1, embedding2) / (np.linalg.norm(embedding1) * np.linalg.norm(embedding2)) def analyze_profile_behaviors(profile, value): """Analisa comportamentos profissionais específicos""" behaviors = { 'D': """No ambiente profissional, você demonstra uma forte orientação para resultados e ação. Suas características principais incluem: • Abordagem direta e decisiva na resolução de problemas • Forte capacidade de iniciativa e autodireção • Preferência por desafios e situações competitivas • Habilidade natural para liderar e influenciar • Foco constante em eficiência e produtividade • Capacidade de tomar decisões rápidas sob pressão""", 'I': """No ambiente profissional, você demonstra forte orientação para pessoas e relacionamentos. Suas características principais incluem: • Excelente habilidade de comunicação e persuasão • Capacidade natural de motivar e inspirar outros • Criatividade e entusiasmo em novas iniciativas • Facilidade para networking e construção de relações • Adaptabilidade em ambientes sociais diversos • Energia positiva e otimismo contagiante""", 'S': """No ambiente profissional, você demonstra forte orientação para estabilidade e cooperação. Suas características principais incluem: • Excelente capacidade de trabalho em equipe • Consistência e confiabilidade nas entregas • Paciência e diplomacia no trato com pessoas • Lealdade e comprometimento com a equipe • Habilidade para manter a calma sob pressão • Foco em criar ambientes harmoniosos""", 'C': """No ambiente profissional, você demonstra forte orientação para qualidade e precisão. Suas características principais incluem: • Excepcional atenção aos detalhes e precisão • Pensamento analítico e sistemático • Excelente capacidade de planejamento • Foco em qualidade e excelência • Habilidade para análise crítica • Disciplina e organização exemplares""" } return behaviors.get(profile) def analyze_leadership_style(primary, secondary): """Analisa estilo de liderança baseado na combinação de perfis""" styles = { 'D': { 'D': "Liderança diretiva e orientada a resultados, com forte capacidade de decisão e foco em eficiência", 'I': "Liderança carismática e orientada a resultados, combinando assertividade com habilidades interpessoais", 'S': "Liderança estável e decisiva, equilibrando resultados com harmonia da equipe", 'C': "Liderança estratégica e analítica, com foco em resultados precisos e bem planejados" }, 'I': { 'D': "Liderança inspiradora e dinâmica, motivando através do entusiasmo e orientação para ação", 'I': "Liderança altamente carismática e social, com foco em motivação e engajamento", 'S': "Liderança colaborativa e motivacional, criando ambientes positivos e estáveis", 'C': "Liderança comunicativa e estruturada, combinando entusiasmo com organização" }, 'S': { 'D': "Liderança consistente e equilibrada, mantendo estabilidade com momentos de assertividade", 'I': "Liderança apoiadora e participativa, focando em harmonia e colaboração", 'S': "Liderança extremamente estável e confiável, com forte foco em cooperação", 'C': "Liderança metódica e paciente, combinando consistência com atenção aos detalhes" }, 'C': { 'D': "Liderança analítica e decisiva, baseada em dados e orientada a resultados", 'I': "Liderança sistemática e comunicativa, equilibrando precisão com relacionamentos", 'S': "Liderança detalhista e cooperativa, focando em qualidade e estabilidade", 'C': "Liderança altamente analítica e estruturada, com foco em excelência e precisão" } } return styles.get(primary, {}).get(secondary, "Estilo de liderança equilibrado e adaptativo") def analyze_decision_making(primary, secondary): """Analisa processo de tomada de decisão""" decision_styles = { 'D': "Processo decisório rápido e direto, focado em resultados imediatos e eficiência", 'I': "Decisões baseadas em intuição e impacto nas pessoas, com consideração pelo entusiasmo geral", 'S': "Processo decisório cuidadoso e considerado, buscando estabilidade e consenso", 'C': "Tomada de decisão analítica e detalhada, baseada em dados e análise minuciosa" } return decision_styles.get(primary, "Processo decisório equilibrado") def generate_profile_analysis(perfil_data): """Gera análise completa do perfil""" perfis_ordenados = sorted(perfil_data.items(), key=lambda x: x[1], reverse=True) perfil_principal = perfis_ordenados[0] perfil_secundario = perfis_ordenados[1] # Análise comportamental detalhada usando embeddings context = f"Perfil {perfil_principal[0]} com {perfil_principal[1]:.1f}% e {perfil_secundario[0]} com {perfil_secundario[1]:.1f}%" comportamentos = analyze_profile_behaviors(perfil_principal[0], perfil_principal[1]) lideranca = analyze_leadership_style(perfil_principal[0], perfil_secundario[0]) # Gera embeddings para personalização profile_context = model.encode(context) behavior_context = model.encode(comportamentos if comportamentos else "") leadership_context = model.encode(lideranca if lideranca else "") return f"""# Análise Detalhada do Perfil DISC ## Perfil Predominante ({perfil_principal[0]}: {perfil_principal[1]:.1f}%) {comportamentos} ## Estilo de Liderança {lideranca} ## Processo Decisório {analyze_decision_making(perfil_principal[0], perfil_secundario[0])} ## Combinação de Perfis A combinação de {perfil_principal[0]} ({perfil_principal[1]:.1f}%) com {perfil_secundario[0]} ({perfil_secundario[1]:.1f}%) sugere: • Capacidade de equilibrar {get_profile_strength(perfil_principal[0])} com {get_profile_strength(perfil_secundario[0])} • Versatilidade em diferentes contextos profissionais • Potencial para adaptação em situações diversas ## Recomendações para Desenvolvimento {generate_development_recommendations(perfil_principal[0], perfil_principal[1])} ## Contribuições para Equipe {generate_team_contributions(perfil_principal[0], perfil_secundario[0])} ## Ambiente de Trabalho Ideal {generate_ideal_environment(perfil_principal[0])} """ def get_profile_strength(profile): """Retorna força principal de cada perfil""" strengths = { 'D': "direcionamento e resultados", 'I': "comunicação e influência", 'S': "estabilidade e cooperação", 'C': "análise e precisão" } return strengths.get(profile, "adaptabilidade") def generate_development_recommendations(profile, value): """Gera recomendações de desenvolvimento personalizadas""" recommendations = { 'D': f"""Considerando seu perfil D ({value:.1f}%), foque em: • Desenvolvimento de escuta ativa e empatia • Prática de paciência em processos longos • Inclusão de mais perspectivas nas decisões • Equilíbrio entre velocidade e qualidade""", 'I': f"""Considerando seu perfil I ({value:.1f}%), foque em: • Desenvolvimento de habilidades analíticas • Atenção aos detalhes e documentação • Gestão eficiente do tempo • Equilíbrio entre socialização e entregas""", 'S': f"""Considerando seu perfil S ({value:.1f}%), foque em: • Desenvolvimento de assertividade • Adaptação mais rápida a mudanças • Expressão mais frequente de opiniões • Tomada de decisão mais ágil""", 'C': f"""Considerando seu perfil C ({value:.1f}%), foque em: • Desenvolvimento de flexibilidade • Agilidade na tomada de decisão • Habilidades de comunicação interpessoal • Equilíbrio entre perfeição e praticidade""" } return recommendations.get(profile) def generate_team_contributions(primary, secondary): """Analisa contribuições para equipe""" contributions = { 'D': { 'D': "Forte liderança e foco em resultados rápidos", 'I': "Liderança carismática com orientação para resultados", 'S': "Direcionamento com consideração pela estabilidade", 'C': "Liderança analítica focada em resultados precisos" }, 'I': { 'D': "Motivação da equipe com foco em ação", 'I': "Alto engajamento e energia positiva", 'S': "Comunicação efetiva com estabilidade", 'C': "Entusiasmo balanceado com precisão" }, 'S': { 'D': "Estabilidade com capacidade de ação", 'I': "Suporte consistente com comunicação efetiva", 'S': "Alta confiabilidade e cooperação", 'C': "Consistência com atenção aos detalhes" }, 'C': { 'D': "Análise precisa orientada a resultados", 'I': "Qualidade com boa comunicação", 'S': "Precisão com estabilidade", 'C': "Excelência técnica e organização" } } return contributions.get(primary, {}).get(secondary, "Contribuições equilibradas para a equipe") def generate_ideal_environment(profile): """Gera descrição do ambiente ideal de trabalho""" environments = { 'D': """Ambiente ideal para sua produtividade: • Dinâmico e desafiador • Autonomia nas decisões • Oportunidades de liderança • Foco em resultados rápidos""", 'I': """Ambiente ideal para sua produtividade: • Colaborativo e interativo • Oportunidades de networking • Reconhecimento frequente • Projetos variados""", 'S': """Ambiente ideal para sua produtividade: • Estável e previsível • Trabalho em equipe • Processos bem definidos • Mudanças graduais""", 'C': """Ambiente ideal para sua produtividade: • Estruturado e organizado • Foco em qualidade • Tempo para análise • Clareza nas expectativas""" } return environments.get(profile) DISC_QUESTIONS = [ {"pergunta": "Em situações de trabalho em equipe, você geralmente:", "opcoes": [("D", "Assume a liderança e toma decisões rápidas"), ("I", "Motiva o grupo e mantém o ambiente animado"), ("S", "Apoia os colegas e mantém a harmonia"), ("C", "Analisa detalhadamente antes de agir")]}, {"pergunta": "Quando enfrenta um desafio no trabalho, você:", "opcoes": [("D", "Enfrenta diretamente e busca soluções imediatas"), ("I", "Discute com outros e busca diferentes perspectivas"), ("S", "Mantém a calma e segue um processo estabelecido"), ("C", "Pesquisa todas as informações disponíveis primeiro")]}, {"pergunta": "Em reuniões profissionais, você costuma:", "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")]}, {"pergunta": "Ao lidar com mudanças no ambiente de trabalho, você:", "opcoes": [("D", "Abraça a mudança e lidera a implementação"), ("I", "Entusiasma os outros sobre as novas possibilidades"), ("S", "Adapta-se gradualmente seguindo o processo"), ("C", "Analisa os impactos antes de aceitar")]}, {"pergunta": "Sob pressão no trabalho, você tende a:", "opcoes": [("D", "Tornar-se mais direto e focado em resultados"), ("I", "Buscar apoio e interação com a equipe"), ("S", "Manter a calma e seguir metodicamente"), ("C", "Concentrar-se em detalhes e procedimentos")]} ] def create_disc_plot(percentuais): """Cria o gráfico de visualização do perfil DISC""" cores = {'D': '#FF4B4B', 'I': '#FFD700', 'S': '#4CAF50', 'C': '#2196F3'} fig = go.Figure(data=[go.Bar(x=list(percentuais.keys()), y=list(percentuais.values()), marker_color=[cores[k] for k in percentuais.keys()], text=[f'{v:.1f}%' for v in percentuais.values()], textposition='auto')]) fig.update_layout( title={ 'text': 'Perfil DISC', 'y':0.95, 'x':0.5, 'xanchor': 'center', 'yanchor': 'top', 'font': {'size': 24, 'color': '#333333'} }, yaxis_range=[0, 100], template='plotly_white', height=400, margin=dict(l=40, r=40, t=60, b=40), paper_bgcolor='rgba(0,0,0,0)', plot_bgcolor='rgba(0,0,0,0)', yaxis_title="Percentual (%)", xaxis_title="Dimensões DISC" ) return fig def calcular_perfil(respostas): """Calcula os percentuais do perfil DISC""" contagem = {k: sum(1 for r in respostas if r and r.startswith(k)) for k in 'DISC'} total = sum(contagem.values()) return {k: (v/total)*100 if total > 0 else 0 for k, v in contagem.items()} def process_results(*answers): """Processa as respostas e gera resultados""" if any(a is None for a in answers): gr.Warning("Por favor, responda todas as questões antes de prosseguir.") return None, None respostas_processadas = [a.split(' - ')[0] if a else None for a in answers] perfil = calcular_perfil(respostas_processadas) plot = create_disc_plot(perfil) report = generate_profile_analysis(perfil) return plot, report def create_interface(): """Cria a interface do usuário""" with gr.Blocks(theme=gr.themes.Soft( primary_hue="blue", secondary_hue="purple", neutral_hue="slate", font=["Inter", "ui-sans-serif", "system-ui"] )) as iface: gr.Markdown( """ # 🎯 Análise de Perfil DISC ### Descubra suas características comportamentais dominantes Uma análise personalizada do seu perfil comportamental DISC: - **D (Dominância)**: Foco em resultados e assertividade - **I (Influência)**: Foco em relacionamentos e comunicação - **S (Estabilidade)**: Foco em cooperação e consistência - **C (Conformidade)**: Foco em qualidade e precisão --- """) with gr.Row(): with gr.Column(scale=2): radios = [] for i, q in enumerate(DISC_QUESTIONS): radio = gr.Radio( choices=[f"{p} - {d}" for p, d in q['opcoes']], label=f"{i+1}. {q['pergunta']}", container=True, scale=2 ) gr.Markdown("---") radios.append(radio) with gr.Row(): analyze_btn = gr.Button("📊 Analisar Perfil", size="lg", variant="primary") reset_btn = gr.Button("🔄 Novo Teste", size="lg", variant="secondary") with gr.Row(): plot = gr.Plot(label="Gráfico de Perfil DISC") with gr.Row(): output = gr.Markdown() analyze_btn.click( fn=process_results, inputs=radios, outputs=[plot, output], api_name="analyze" ) reset_btn.click( fn=lambda: [None]*(len(radios)+2), outputs=radios+[plot, output], api_name="reset" ) gr.Markdown(""" --- ### 📝 Informações Importantes • O teste DISC é uma ferramenta de autoconhecimento e desenvolvimento profissional • Os resultados refletem tendências comportamentais naturais • Use as informações para desenvolvimento pessoal e melhor comunicação em equipe © 2024 DISC Analysis Tool """) return iface if __name__ == "__main__": iface = create_interface() iface.launch( share=True, server_name="0.0.0.0", server_port=7860 )