|
import gradio as gr |
|
from sentence_transformers import SentenceTransformer |
|
from sklearn.metrics.pairwise import cosine_similarity |
|
import numpy as np |
|
|
|
|
|
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') |
|
|
|
|
|
DISC_PROFILES = { |
|
'D': { |
|
'nome': 'Dominância', |
|
'caracteristicas': { |
|
'alto': [ |
|
"Focado em resultados e ação imediata", |
|
"Direto e assertivo na comunicação", |
|
"Competitivo e determinado", |
|
"Assume naturalmente posições de liderança", |
|
"Orientado para desafios e conquistas" |
|
], |
|
'baixo': [ |
|
"Mais colaborativo e menos confrontador", |
|
"Prefere ambientes harmoniosos", |
|
"Tende a evitar conflitos", |
|
"Mais cauteloso na tomada de decisões", |
|
"Busca consenso em vez de imposição" |
|
] |
|
}, |
|
'ambiente_ideal': { |
|
'alto': [ |
|
"Ambientes competitivos", |
|
"Situações que exigem decisões rápidas", |
|
"Projetos desafiadores", |
|
"Autonomia na execução", |
|
"Oportunidades de liderança" |
|
], |
|
'baixo': [ |
|
"Ambientes colaborativos", |
|
"Trabalho em equipe", |
|
"Projetos estruturados", |
|
"Suporte de liderança", |
|
"Foco em cooperação" |
|
] |
|
}, |
|
'recomendacoes': { |
|
'alto': [ |
|
"Desenvolver mais empatia e paciência", |
|
"Praticar escuta ativa", |
|
"Considerar diferentes perspectivas", |
|
"Equilibrar assertividade com diplomacia", |
|
"Fortalecer habilidades de trabalho em equipe" |
|
], |
|
'baixo': [ |
|
"Desenvolver mais assertividade", |
|
"Praticar tomada de decisão", |
|
"Expressar opiniões com mais confiança", |
|
"Assumir mais riscos calculados", |
|
"Fortalecer liderança situacional" |
|
] |
|
} |
|
}, |
|
'I': { |
|
'nome': 'Influência', |
|
'caracteristicas': { |
|
'alto': [ |
|
"Comunicativo e expressivo", |
|
"Entusiasta e otimista", |
|
"Sociável e carismático", |
|
"Persuasivo e inspirador", |
|
"Criativo e inovador" |
|
], |
|
'baixo': [ |
|
"Mais reservado e analítico", |
|
"Prefere comunicação objetiva", |
|
"Foco em fatos e dados", |
|
"Mais formal nas relações", |
|
"Prioriza resultados sobre relacionamentos" |
|
] |
|
}, |
|
'ambiente_ideal': { |
|
'alto': [ |
|
"Ambientes sociais e dinâmicos", |
|
"Oportunidades de networking", |
|
"Trabalho com pessoas", |
|
"Reconhecimento público", |
|
"Liberdade criativa" |
|
], |
|
'baixo': [ |
|
"Ambientes mais formais", |
|
"Trabalho individual", |
|
"Projetos técnicos", |
|
"Foco em processos", |
|
"Estrutura definida" |
|
] |
|
}, |
|
'recomendacoes': { |
|
'alto': [ |
|
"Desenvolver foco e organização", |
|
"Melhorar gestão do tempo", |
|
"Praticar conclusão de tarefas", |
|
"Equilibrar socialização e produtividade", |
|
"Fortalecer análise de dados" |
|
], |
|
'baixo': [ |
|
"Desenvolver habilidades de networking", |
|
"Praticar comunicação expressiva", |
|
"Participar mais em grupos", |
|
"Explorar criatividade", |
|
"Fortalecer relações interpessoais" |
|
] |
|
} |
|
}, |
|
'S': { |
|
'nome': 'Estabilidade', |
|
'caracteristicas': { |
|
'alto': [ |
|
"Paciente e consistente", |
|
"Colaborativo e prestativo", |
|
"Leal e confiável", |
|
"Bom ouvinte", |
|
"Focado em harmonia" |
|
], |
|
'baixo': [ |
|
"Mais flexível e adaptável", |
|
"Aberto a mudanças rápidas", |
|
"Multitarefa eficiente", |
|
"Dinâmico e versátil", |
|
"Aprecia variedade" |
|
] |
|
}, |
|
'ambiente_ideal': { |
|
'alto': [ |
|
"Ambientes estáveis e previsíveis", |
|
"Trabalho em equipe", |
|
"Rotinas estabelecidas", |
|
"Mudanças graduais", |
|
"Relacionamentos duradouros" |
|
], |
|
'baixo': [ |
|
"Ambientes dinâmicos", |
|
"Mudanças frequentes", |
|
"Projetos variados", |
|
"Novos desafios", |
|
"Flexibilidade de rotina" |
|
] |
|
}, |
|
'recomendacoes': { |
|
'alto': [ |
|
"Desenvolver adaptabilidade", |
|
"Praticar iniciativa", |
|
"Expressar opiniões", |
|
"Lidar melhor com mudanças", |
|
"Fortalecer tomada de decisão" |
|
], |
|
'baixo': [ |
|
"Desenvolver mais paciência", |
|
"Praticar consistência", |
|
"Fortalecer relacionamentos", |
|
"Melhorar escuta ativa", |
|
"Criar rotinas efetivas" |
|
] |
|
} |
|
}, |
|
'C': { |
|
'nome': 'Conformidade', |
|
'caracteristicas': { |
|
'alto': [ |
|
"Analítico e preciso", |
|
"Organizado e sistemático", |
|
"Focado em qualidade", |
|
"Atento aos detalhes", |
|
"Orientado por dados" |
|
], |
|
'baixo': [ |
|
"Mais flexível com regras", |
|
"Foco em resultados rápidos", |
|
"Prático e objetivo", |
|
"Adaptável a mudanças", |
|
"Tolerante a ambiguidades" |
|
] |
|
}, |
|
'ambiente_ideal': { |
|
'alto': [ |
|
"Ambientes estruturados", |
|
"Processos claros", |
|
"Foco em qualidade", |
|
"Análise detalhada", |
|
"Padrões definidos" |
|
], |
|
'baixo': [ |
|
"Ambientes flexíveis", |
|
"Liberdade de processo", |
|
"Foco em resultados", |
|
"Decisões rápidas", |
|
"Adaptabilidade" |
|
] |
|
}, |
|
'recomendacoes': { |
|
'alto': [ |
|
"Desenvolver flexibilidade", |
|
"Praticar decisões rápidas", |
|
"Lidar melhor com ambiguidade", |
|
"Equilibrar análise e ação", |
|
"Fortalecer relacionamentos" |
|
], |
|
'baixo': [ |
|
"Desenvolver atenção aos detalhes", |
|
"Melhorar organização", |
|
"Criar sistemas e processos", |
|
"Fortalecer análise crítica", |
|
"Praticar planejamento" |
|
] |
|
} |
|
} |
|
} |
|
|
|
def get_intensity_level(percentual): |
|
"""Determina o nível de intensidade baseado no percentual.""" |
|
if percentual >= 75: |
|
return "muito alto" |
|
elif percentual >= 60: |
|
return "alto" |
|
elif percentual >= 40: |
|
return "moderado" |
|
elif percentual >= 25: |
|
return "baixo" |
|
else: |
|
return "muito baixo" |
|
|
|
def get_profile_description(perfil, percentual): |
|
"""Gera descrição personalizada baseada no perfil e sua intensidade.""" |
|
nivel = "alto" if percentual >= 50 else "baixo" |
|
caracteristicas = DISC_PROFILES[perfil]['caracteristicas'][nivel] |
|
ambiente = DISC_PROFILES[perfil]['ambiente_ideal'][nivel] |
|
recomendacoes = DISC_PROFILES[perfil]['recomendacoes'][nivel] |
|
|
|
intensidade = get_intensity_level(percentual) |
|
|
|
return { |
|
'nome': DISC_PROFILES[perfil]['nome'], |
|
'intensidade': intensidade, |
|
'caracteristicas': caracteristicas, |
|
'ambiente': ambiente, |
|
'recomendacoes': recomendacoes |
|
} |
|
|
|
def gerar_relatorio_personalizado(percentuais): |
|
"""Gera relatório detalhado e personalizado baseado nos percentuais DISC.""" |
|
perfis_ordenados = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True)) |
|
perfis_desc = {k: get_profile_description(k, v) for k, v in perfis_ordenados.items()} |
|
|
|
|
|
perfil_dominante = list(perfis_ordenados.keys())[0] |
|
perfil_secundario = list(perfis_ordenados.keys())[1] |
|
|
|
|
|
relatorio = f"""ANÁLISE DE PERFIL COMPORTAMENTAL DISC |
|
|
|
VISÃO GERAL |
|
Seu perfil apresenta uma combinação única de características, com {perfis_desc[perfil_dominante]['nome']} ({perfil_dominante}) como traço dominante em nível {perfis_desc[perfil_dominante]['intensidade']} ({perfis_ordenados[perfil_dominante]:.1f}%), seguido por {perfis_desc[perfil_secundario]['nome']} ({perfil_secundario}) em nível {perfis_desc[perfil_secundario]['intensidade']} ({perfis_ordenados[perfil_secundario]:.1f}%). |
|
|
|
CARACTERÍSTICAS PRINCIPAIS |
|
Seu estilo comportamental é marcado por: |
|
• {' e '.join(perfis_desc[perfil_dominante]['caracteristicas'][:3])} |
|
• Com influência secundária de: {' e '.join(perfis_desc[perfil_secundario]['caracteristicas'][:2])} |
|
|
|
AMBIENTE IDEAL DE TRABALHO |
|
Você tende a prosperar em ambientes que oferecem: |
|
• {' e '.join(perfis_desc[perfil_dominante]['ambiente'][:3])} |
|
• Complementados por: {' e '.join(perfis_desc[perfil_secundario]['ambiente'][:2])} |
|
|
|
RECOMENDAÇÕES PARA DESENVOLVIMENTO |
|
Para maximizar seu potencial, considere: |
|
• {' e '.join(perfis_desc[perfil_dominante]['recomendacoes'][:3])} |
|
• Adicionalmente: {' e '.join(perfis_desc[perfil_secundario]['recomendacoes'][:2])} |
|
|
|
DISTRIBUIÇÃO COMPLETA DO PERFIL DISC: |
|
{', '.join([f'{k} ({DISC_PROFILES[k]["nome"]}): {v:.1f}%' for k, v in perfis_ordenados.items()])} |
|
|
|
OBSERVAÇÃO: Este perfil representa suas tendências comportamentais naturais. Lembre-se que comportamentos podem ser adaptados conforme o contexto e as necessidades específicas de cada situação.""" |
|
|
|
return relatorio |
|
|
|
|
|
def processar_questionario(*args): |
|
"""Processa as respostas do questionário e gera o relatório personalizado.""" |
|
respostas = list(args) |
|
percentuais = calcular_perfil(respostas) |
|
return gerar_relatorio_personalizado(percentuais) |
|
|
|
|
|
|
|
|
|
with gr.Blocks(title="Análise de Perfil DISC") as iface: |
|
gr.Markdown("# Análise de Perfil Comportamental DISC") |
|
gr.Markdown("### Responda às questões abaixo conforme seu comportamento mais natural") |
|
|
|
|
|
radio_components = [] |
|
|
|
|
|
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) |
|
|
|
|
|
output = gr.Textbox(label="Relatório de Perfil DISC", lines=20) |
|
|
|
|
|
btn = gr.Button("Gerar Relatório") |
|
|
|
|
|
btn.click( |
|
fn=processar_questionario, |
|
inputs=radio_components, |
|
outputs=output |
|
) |
|
|
|
|
|
iface.launch() |