DISC.ai / app.py
DHEIVER's picture
Update app.py
60d3016 verified
raw
history blame
6.47 kB
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()