|
import gradio as gr |
|
from sentence_transformers import SentenceTransformer |
|
import numpy as np |
|
|
|
|
|
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') |
|
|
|
|
|
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): |
|
|
|
contagem = {'D': 0, 'I': 0, 'S': 0, 'C': 0} |
|
|
|
for resposta in respostas: |
|
if resposta: |
|
perfil = resposta.split()[0] |
|
contagem[perfil] += 1 |
|
|
|
|
|
total = sum(contagem.values()) |
|
if total > 0: |
|
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): |
|
|
|
perfis_ordenados = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True)) |
|
perfil_dominante = list(perfis_ordenados.keys())[0] |
|
|
|
|
|
relatorio = "RELATÓRIO DE PERFIL COMPORTAMENTAL DISC\n\n" |
|
|
|
|
|
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" |
|
|
|
|
|
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): |
|
|
|
respostas = list(args) |
|
|
|
|
|
percentuais = calcular_perfil(respostas) |
|
|
|
|
|
relatorio = gerar_relatorio(percentuais) |
|
|
|
return relatorio |
|
|
|
|
|
with gr.Blocks(title="Questionário DISC") as iface: |
|
gr.Markdown("# Análise de Perfil Comportamental DISC") |
|
|
|
|
|
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", lines=20) |
|
|
|
|
|
btn = gr.Button("Gerar Relatório") |
|
|
|
|
|
btn.click( |
|
fn=processar_questionario, |
|
inputs=radio_components, |
|
outputs=output |
|
) |
|
|
|
|
|
iface.launch() |