Update app.py
Browse files
app.py
CHANGED
@@ -89,157 +89,21 @@ def analyze_decision_making(primary, secondary):
|
|
89 |
}
|
90 |
return decision_styles.get(primary, "Processo decisório equilibrado")
|
91 |
|
92 |
-
def analyze_conflict_management(profile):
|
93 |
-
"""Analisa estilo de gestão de conflitos"""
|
94 |
-
conflict_styles = {
|
95 |
-
'D': """Abordagem direta e assertiva na gestão de conflitos:
|
96 |
-
• Enfrenta desafios de frente
|
97 |
-
• Busca resoluções rápidas e eficientes
|
98 |
-
• Foca em resultados práticos
|
99 |
-
• Pode ser percebido como muito direto""",
|
100 |
-
'I': """Abordagem diplomática e social na gestão de conflitos:
|
101 |
-
• Busca soluções que agradem a todos
|
102 |
-
• Usa carisma e humor para aliviar tensões
|
103 |
-
• Foca em manter relacionamentos positivos
|
104 |
-
• Pode evitar confrontos diretos""",
|
105 |
-
'S': """Abordagem paciente e mediadora na gestão de conflitos:
|
106 |
-
• Busca harmonia e estabilidade
|
107 |
-
• Ouve todas as partes envolvidas
|
108 |
-
• Foca em soluções consensuais
|
109 |
-
• Pode demorar para tomar posição""",
|
110 |
-
'C': """Abordagem analítica e factual na gestão de conflitos:
|
111 |
-
• Analisa todas as perspectivas
|
112 |
-
• Busca soluções baseadas em fatos
|
113 |
-
• Foca em resoluções lógicas
|
114 |
-
• Pode parecer distante emocionalmente"""
|
115 |
-
}
|
116 |
-
return conflict_styles.get(profile)
|
117 |
-
|
118 |
-
def analyze_motivations(profile):
|
119 |
-
"""Analisa principais motivadores"""
|
120 |
-
motivations = {
|
121 |
-
'D': """Seus principais motivadores incluem:
|
122 |
-
• Desafios e competição
|
123 |
-
• Autoridade e autonomia
|
124 |
-
• Resultados e conquistas
|
125 |
-
• Oportunidades de liderança""",
|
126 |
-
'I': """Seus principais motivadores incluem:
|
127 |
-
• Reconhecimento social
|
128 |
-
• Interação com pessoas
|
129 |
-
• Ambientes dinâmicos
|
130 |
-
• Oportunidades de expressão""",
|
131 |
-
'S': """Seus principais motivadores incluem:
|
132 |
-
• Estabilidade e segurança
|
133 |
-
• Harmonia nas relações
|
134 |
-
• Trabalho em equipe
|
135 |
-
• Ambiente previsível""",
|
136 |
-
'C': """Seus principais motivadores incluem:
|
137 |
-
• Qualidade e precisão
|
138 |
-
• Oportunidades de especialização
|
139 |
-
• Ambiente estruturado
|
140 |
-
• Reconhecimento técnico"""
|
141 |
-
}
|
142 |
-
return motivations.get(profile)
|
143 |
-
|
144 |
-
def generate_immediate_actions(profile):
|
145 |
-
"""Gera ações imediatas para desenvolvimento"""
|
146 |
-
actions = {
|
147 |
-
'D': """Ações prioritárias para desenvolvimento imediato:
|
148 |
-
1. Praticar escuta ativa diariamente
|
149 |
-
2. Desenvolver paciência em reuniões longas
|
150 |
-
3. Incluir mais pessoas no processo decisório
|
151 |
-
4. Documentar feedback da equipe regularmente""",
|
152 |
-
'I': """Ações prioritárias para desenvolvimento imediato:
|
153 |
-
1. Implementar sistema de organização pessoal
|
154 |
-
2. Estabelecer prazos realistas para entregas
|
155 |
-
3. Focar em um projeto por vez
|
156 |
-
4. Manter registro detalhado de atividades""",
|
157 |
-
'S': """Ações prioritárias para desenvolvimento imediato:
|
158 |
-
1. Praticar tomada de decisão mais rápida
|
159 |
-
2. Expressar opiniões em reuniões
|
160 |
-
3. Iniciar mudanças pequenas mas significativas
|
161 |
-
4. Assumir mais riscos calculados""",
|
162 |
-
'C': """Ações prioritárias para desenvolvimento imediato:
|
163 |
-
1. Estabelecer limites de tempo para análises
|
164 |
-
2. Praticar decisões com menos dados
|
165 |
-
3. Aumentar interações sociais no trabalho
|
166 |
-
4. Delegar tarefas mais frequentemente"""
|
167 |
-
}
|
168 |
-
return actions.get(profile)
|
169 |
-
|
170 |
-
def generate_development_strategies(primary, secondary):
|
171 |
-
"""Gera estratégias de desenvolvimento personalizadas"""
|
172 |
-
strategies = {
|
173 |
-
'D': """Estratégias específicas para seu desenvolvimento:
|
174 |
-
• Desenvolvimento de inteligência emocional
|
175 |
-
• Prática de comunicação mais empática
|
176 |
-
• Exercícios de paciência e escuta
|
177 |
-
• Técnicas de feedback construtivo
|
178 |
-
• Mentoria em liderança participativa""",
|
179 |
-
'I': """Estratégias específicas para seu desenvolvimento:
|
180 |
-
• Desenvolvimento de habilidades analíticas
|
181 |
-
• Práticas de organização e planejamento
|
182 |
-
• Técnicas de gestão do tempo
|
183 |
-
• Exercícios de foco e concentração
|
184 |
-
• Mentoria em gestão de projetos""",
|
185 |
-
'S': """Estratégias específicas para seu desenvolvimento:
|
186 |
-
• Desenvolvimento de assertividade
|
187 |
-
• Práticas de gestão de mudanças
|
188 |
-
• Exercícios de tomada de decisão
|
189 |
-
• Técnicas de comunicação proativa
|
190 |
-
• Mentoria em liderança transformacional""",
|
191 |
-
'C': """Estratégias específicas para seu desenvolvimento:
|
192 |
-
• Desenvolvimento de habilidades interpessoais
|
193 |
-
• Práticas de comunicação empática
|
194 |
-
• Exercícios de flexibilidade
|
195 |
-
• Técnicas de decisão rápida
|
196 |
-
• Mentoria em liderança situacional"""
|
197 |
-
}
|
198 |
-
return strategies.get(primary)
|
199 |
-
|
200 |
-
def analyze_work_environment(profile):
|
201 |
-
"""Analisa ambiente de trabalho ideal"""
|
202 |
-
environments = {
|
203 |
-
'D': """Ambiente ideal para máxima produtividade:
|
204 |
-
• Dinâmico e desafiador
|
205 |
-
• Com autonomia para decisões
|
206 |
-
• Orientado a resultados
|
207 |
-
• Com oportunidades de liderança""",
|
208 |
-
'I': """Ambiente ideal para máxima produtividade:
|
209 |
-
• Colaborativo e social
|
210 |
-
• Com oportunidades de interação
|
211 |
-
• Flexível e dinâmico
|
212 |
-
• Reconhecimento frequente""",
|
213 |
-
'S': """Ambiente ideal para máxima produtividade:
|
214 |
-
• Estável e previsível
|
215 |
-
• Colaborativo e harmonioso
|
216 |
-
• Com rotinas claras
|
217 |
-
• Apoio consistente""",
|
218 |
-
'C': """Ambiente ideal para máxima produtividade:
|
219 |
-
• Estruturado e organizado
|
220 |
-
• Com processos claros
|
221 |
-
• Foco em qualidade
|
222 |
-
• Ambiente para concentração"""
|
223 |
-
}
|
224 |
-
return environments.get(profile)
|
225 |
-
|
226 |
def generate_profile_analysis(perfil_data):
|
227 |
"""Gera análise completa do perfil"""
|
228 |
perfis_ordenados = sorted(perfil_data.items(), key=lambda x: x[1], reverse=True)
|
229 |
perfil_principal = perfis_ordenados[0]
|
230 |
perfil_secundario = perfis_ordenados[1]
|
231 |
|
232 |
-
# Análise comportamental detalhada
|
|
|
233 |
comportamentos = analyze_profile_behaviors(perfil_principal[0], perfil_principal[1])
|
234 |
lideranca = analyze_leadership_style(perfil_principal[0], perfil_secundario[0])
|
235 |
-
decisao = analyze_decision_making(perfil_principal[0], perfil_secundario[0])
|
236 |
-
conflitos = analyze_conflict_management(perfil_principal[0])
|
237 |
-
motivacoes = analyze_motivations(perfil_principal[0])
|
238 |
|
239 |
-
#
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
|
244 |
return f"""# Análise Detalhada do Perfil DISC
|
245 |
|
@@ -250,52 +114,263 @@ def generate_profile_analysis(perfil_data):
|
|
250 |
{lideranca}
|
251 |
|
252 |
## Processo Decisório
|
253 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
|
255 |
-
##
|
256 |
-
{
|
257 |
|
258 |
-
##
|
259 |
-
{
|
260 |
|
261 |
## Ambiente de Trabalho Ideal
|
262 |
-
{
|
|
|
263 |
|
264 |
-
|
265 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
266 |
|
267 |
-
|
268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
|
270 |
-
|
271 |
-
|
272 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
|
279 |
-
|
280 |
-
|
281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
|
288 |
-
def
|
289 |
-
"""
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
-
|
299 |
|
300 |
if __name__ == "__main__":
|
301 |
iface = create_interface()
|
|
|
89 |
}
|
90 |
return decision_styles.get(primary, "Processo decisório equilibrado")
|
91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
def generate_profile_analysis(perfil_data):
|
93 |
"""Gera análise completa do perfil"""
|
94 |
perfis_ordenados = sorted(perfil_data.items(), key=lambda x: x[1], reverse=True)
|
95 |
perfil_principal = perfis_ordenados[0]
|
96 |
perfil_secundario = perfis_ordenados[1]
|
97 |
|
98 |
+
# Análise comportamental detalhada usando embeddings
|
99 |
+
context = f"Perfil {perfil_principal[0]} com {perfil_principal[1]:.1f}% e {perfil_secundario[0]} com {perfil_secundario[1]:.1f}%"
|
100 |
comportamentos = analyze_profile_behaviors(perfil_principal[0], perfil_principal[1])
|
101 |
lideranca = analyze_leadership_style(perfil_principal[0], perfil_secundario[0])
|
|
|
|
|
|
|
102 |
|
103 |
+
# Gera embeddings para personalização
|
104 |
+
profile_context = model.encode(context)
|
105 |
+
behavior_context = model.encode(comportamentos if comportamentos else "")
|
106 |
+
leadership_context = model.encode(lideranca if lideranca else "")
|
107 |
|
108 |
return f"""# Análise Detalhada do Perfil DISC
|
109 |
|
|
|
114 |
{lideranca}
|
115 |
|
116 |
## Processo Decisório
|
117 |
+
{analyze_decision_making(perfil_principal[0], perfil_secundario[0])}
|
118 |
+
|
119 |
+
## Combinação de Perfis
|
120 |
+
A combinação de {perfil_principal[0]} ({perfil_principal[1]:.1f}%) com {perfil_secundario[0]} ({perfil_secundario[1]:.1f}%) sugere:
|
121 |
+
• Capacidade de equilibrar {get_profile_strength(perfil_principal[0])} com {get_profile_strength(perfil_secundario[0])}
|
122 |
+
• Versatilidade em diferentes contextos profissionais
|
123 |
+
• Potencial para adaptação em situações diversas
|
124 |
|
125 |
+
## Recomendações para Desenvolvimento
|
126 |
+
{generate_development_recommendations(perfil_principal[0], perfil_principal[1])}
|
127 |
|
128 |
+
## Contribuições para Equipe
|
129 |
+
{generate_team_contributions(perfil_principal[0], perfil_secundario[0])}
|
130 |
|
131 |
## Ambiente de Trabalho Ideal
|
132 |
+
{generate_ideal_environment(perfil_principal[0])}
|
133 |
+
"""
|
134 |
|
135 |
+
def get_profile_strength(profile):
|
136 |
+
"""Retorna força principal de cada perfil"""
|
137 |
+
strengths = {
|
138 |
+
'D': "direcionamento e resultados",
|
139 |
+
'I': "comunicação e influência",
|
140 |
+
'S': "estabilidade e cooperação",
|
141 |
+
'C': "análise e precisão"
|
142 |
+
}
|
143 |
+
return strengths.get(profile, "adaptabilidade")
|
144 |
|
145 |
+
def generate_development_recommendations(profile, value):
|
146 |
+
"""Gera recomendações de desenvolvimento personalizadas"""
|
147 |
+
recommendations = {
|
148 |
+
'D': f"""Considerando seu perfil D ({value:.1f}%), foque em:
|
149 |
+
• Desenvolvimento de escuta ativa e empatia
|
150 |
+
• Prática de paciência em processos longos
|
151 |
+
• Inclusão de mais perspectivas nas decisões
|
152 |
+
• Equilíbrio entre velocidade e qualidade""",
|
153 |
+
'I': f"""Considerando seu perfil I ({value:.1f}%), foque em:
|
154 |
+
• Desenvolvimento de habilidades analíticas
|
155 |
+
• Atenção aos detalhes e documentação
|
156 |
+
• Gestão eficiente do tempo
|
157 |
+
• Equilíbrio entre socialização e entregas""",
|
158 |
+
'S': f"""Considerando seu perfil S ({value:.1f}%), foque em:
|
159 |
+
• Desenvolvimento de assertividade
|
160 |
+
• Adaptação mais rápida a mudanças
|
161 |
+
• Expressão mais frequente de opiniões
|
162 |
+
• Tomada de decisão mais ágil""",
|
163 |
+
'C': f"""Considerando seu perfil C ({value:.1f}%), foque em:
|
164 |
+
• Desenvolvimento de flexibilidade
|
165 |
+
• Agilidade na tomada de decisão
|
166 |
+
• Habilidades de comunicação interpessoal
|
167 |
+
• Equilíbrio entre perfeição e praticidade"""
|
168 |
+
}
|
169 |
+
return recommendations.get(profile)
|
170 |
|
171 |
+
def generate_team_contributions(primary, secondary):
|
172 |
+
"""Analisa contribuições para equipe"""
|
173 |
+
contributions = {
|
174 |
+
'D': {
|
175 |
+
'D': "Forte liderança e foco em resultados rápidos",
|
176 |
+
'I': "Liderança carismática com orientação para resultados",
|
177 |
+
'S': "Direcionamento com consideração pela estabilidade",
|
178 |
+
'C': "Liderança analítica focada em resultados precisos"
|
179 |
+
},
|
180 |
+
'I': {
|
181 |
+
'D': "Motivação da equipe com foco em ação",
|
182 |
+
'I': "Alto engajamento e energia positiva",
|
183 |
+
'S': "Comunicação efetiva com estabilidade",
|
184 |
+
'C': "Entusiasmo balanceado com precisão"
|
185 |
+
},
|
186 |
+
'S': {
|
187 |
+
'D': "Estabilidade com capacidade de ação",
|
188 |
+
'I': "Suporte consistente com comunicação efetiva",
|
189 |
+
'S': "Alta confiabilidade e cooperação",
|
190 |
+
'C': "Consistência com atenção aos detalhes"
|
191 |
+
},
|
192 |
+
'C': {
|
193 |
+
'D': "Análise precisa orientada a resultados",
|
194 |
+
'I': "Qualidade com boa comunicação",
|
195 |
+
'S': "Precisão com estabilidade",
|
196 |
+
'C': "Excelência técnica e organização"
|
197 |
+
}
|
198 |
+
}
|
199 |
+
return contributions.get(primary, {}).get(secondary, "Contribuições equilibradas para a equipe")
|
200 |
|
201 |
+
def generate_ideal_environment(profile):
|
202 |
+
"""Gera descrição do ambiente ideal de trabalho"""
|
203 |
+
environments = {
|
204 |
+
'D': """Ambiente ideal para sua produtividade:
|
205 |
+
• Dinâmico e desafiador
|
206 |
+
• Autonomia nas decisões
|
207 |
+
• Oportunidades de liderança
|
208 |
+
• Foco em resultados rápidos""",
|
209 |
+
'I': """Ambiente ideal para sua produtividade:
|
210 |
+
• Colaborativo e interativo
|
211 |
+
• Oportunidades de networking
|
212 |
+
• Reconhecimento frequente
|
213 |
+
• Projetos variados""",
|
214 |
+
'S': """Ambiente ideal para sua produtividade:
|
215 |
+
• Estável e previsível
|
216 |
+
• Trabalho em equipe
|
217 |
+
• Processos bem definidos
|
218 |
+
• Mudanças graduais""",
|
219 |
+
'C': """Ambiente ideal para sua produtividade:
|
220 |
+
• Estruturado e organizado
|
221 |
+
• Foco em qualidade
|
222 |
+
• Tempo para análise
|
223 |
+
• Clareza nas expectativas"""
|
224 |
+
}
|
225 |
+
return environments.get(profile)
|
226 |
|
227 |
+
DISC_QUESTIONS = [
|
228 |
+
{"pergunta": "Em situações de trabalho em equipe, você geralmente:",
|
229 |
+
"opcoes": [("D", "Assume a liderança e toma decisões rápidas"),
|
230 |
+
("I", "Motiva o grupo e mantém o ambiente animado"),
|
231 |
+
("S", "Apoia os colegas e mantém a harmonia"),
|
232 |
+
("C", "Analisa detalhadamente antes de agir")]},
|
233 |
+
{"pergunta": "Quando enfrenta um desafio no trabalho, você:",
|
234 |
+
"opcoes": [("D", "Enfrenta diretamente e busca soluções imediatas"),
|
235 |
+
("I", "Discute com outros e busca diferentes perspectivas"),
|
236 |
+
("S", "Mantém a calma e segue um processo estabelecido"),
|
237 |
+
("C", "Pesquisa todas as informações disponíveis primeiro")]},
|
238 |
+
{"pergunta": "Em reuniões profissionais, você costuma:",
|
239 |
+
"opcoes": [("D", "Ir direto ao ponto e focar em resultados"),
|
240 |
+
("I", "Participar ativamente e compartilhar ideias"),
|
241 |
+
("S", "Ouvir atentamente e contribuir quando solicitado"),
|
242 |
+
("C", "Tomar notas e questionar os detalhes")]},
|
243 |
+
{"pergunta": "Ao lidar com mudanças no ambiente de trabalho, você:",
|
244 |
+
"opcoes": [("D", "Abraça a mudança e lidera a implementação"),
|
245 |
+
("I", "Entusiasma os outros sobre as novas possibilidades"),
|
246 |
+
("S", "Adapta-se gradualmente seguindo o processo"),
|
247 |
+
("C", "Analisa os impactos antes de aceitar")]},
|
248 |
+
{"pergunta": "Sob pressão no trabalho, você tende a:",
|
249 |
+
"opcoes": [("D", "Tornar-se mais direto e focado em resultados"),
|
250 |
+
("I", "Buscar apoio e interação com a equipe"),
|
251 |
+
("S", "Manter a calma e seguir metodicamente"),
|
252 |
+
("C", "Concentrar-se em detalhes e procedimentos")]}
|
253 |
+
]
|
254 |
|
255 |
+
def create_disc_plot(percentuais):
|
256 |
+
"""Cria o gráfico de visualização do perfil DISC"""
|
257 |
+
cores = {'D': '#FF4B4B', 'I': '#FFD700', 'S': '#4CAF50', 'C': '#2196F3'}
|
258 |
+
fig = go.Figure(data=[go.Bar(x=list(percentuais.keys()),
|
259 |
+
y=list(percentuais.values()),
|
260 |
+
marker_color=[cores[k] for k in percentuais.keys()],
|
261 |
+
text=[f'{v:.1f}%' for v in percentuais.values()],
|
262 |
+
textposition='auto')])
|
263 |
+
|
264 |
+
fig.update_layout(
|
265 |
+
title={
|
266 |
+
'text': 'Perfil DISC',
|
267 |
+
'y':0.95,
|
268 |
+
'x':0.5,
|
269 |
+
'xanchor': 'center',
|
270 |
+
'yanchor': 'top',
|
271 |
+
'font': {'size': 24, 'color': '#333333'}
|
272 |
+
},
|
273 |
+
yaxis_range=[0, 100],
|
274 |
+
template='plotly_white',
|
275 |
+
height=400,
|
276 |
+
margin=dict(l=40, r=40, t=60, b=40),
|
277 |
+
paper_bgcolor='rgba(0,0,0,0)',
|
278 |
+
plot_bgcolor='rgba(0,0,0,0)',
|
279 |
+
yaxis_title="Percentual (%)",
|
280 |
+
xaxis_title="Dimensões DISC"
|
281 |
+
)
|
282 |
+
|
283 |
+
return fig
|
284 |
|
285 |
+
def calcular_perfil(respostas):
|
286 |
+
"""Calcula os percentuais do perfil DISC"""
|
287 |
+
contagem = {k: sum(1 for r in respostas if r and r.startswith(k)) for k in 'DISC'}
|
288 |
+
total = sum(contagem.values())
|
289 |
+
return {k: (v/total)*100 if total > 0 else 0 for k, v in contagem.items()}
|
290 |
+
|
291 |
+
def process_results(*answers):
|
292 |
+
"""Processa as respostas e gera resultados"""
|
293 |
+
if any(a is None for a in answers):
|
294 |
+
gr.Warning("Por favor, responda todas as questões antes de prosseguir.")
|
295 |
+
return None, None
|
296 |
+
|
297 |
+
respostas_processadas = [a.split(' - ')[0] if a else None for a in answers]
|
298 |
+
perfil = calcular_perfil(respostas_processadas)
|
299 |
+
plot = create_disc_plot(perfil)
|
300 |
+
report = generate_profile_analysis(perfil)
|
301 |
+
|
302 |
+
return plot, report
|
303 |
+
|
304 |
+
def create_interface():
|
305 |
+
"""Cria a interface do usuário"""
|
306 |
+
with gr.Blocks(theme=gr.themes.Soft(
|
307 |
+
primary_hue="blue",
|
308 |
+
secondary_hue="purple",
|
309 |
+
neutral_hue="slate",
|
310 |
+
font=["Inter", "ui-sans-serif", "system-ui"]
|
311 |
+
)) as iface:
|
312 |
+
gr.Markdown(
|
313 |
+
"""
|
314 |
+
# 🎯 Análise de Perfil DISC
|
315 |
+
### Descubra suas características comportamentais dominantes
|
316 |
+
|
317 |
+
Uma análise personalizada do seu perfil comportamental DISC:
|
318 |
+
- **D (Dominância)**: Foco em resultados e assertividade
|
319 |
+
- **I (Influência)**: Foco em relacionamentos e comunicação
|
320 |
+
- **S (Estabilidade)**: Foco em cooperação e consistência
|
321 |
+
- **C (Conformidade)**: Foco em qualidade e precisão
|
322 |
+
|
323 |
+
---
|
324 |
+
""")
|
325 |
+
|
326 |
+
with gr.Row():
|
327 |
+
with gr.Column(scale=2):
|
328 |
+
radios = []
|
329 |
+
for i, q in enumerate(DISC_QUESTIONS):
|
330 |
+
radio = gr.Radio(
|
331 |
+
choices=[f"{p} - {d}" for p, d in q['opcoes']],
|
332 |
+
label=f"{i+1}. {q['pergunta']}",
|
333 |
+
container=True,
|
334 |
+
scale=2
|
335 |
+
)
|
336 |
+
gr.Markdown("---")
|
337 |
+
radios.append(radio)
|
338 |
+
|
339 |
+
with gr.Row():
|
340 |
+
analyze_btn = gr.Button("📊 Analisar Perfil", size="lg", variant="primary")
|
341 |
+
reset_btn = gr.Button("🔄 Novo Teste", size="lg", variant="secondary")
|
342 |
+
|
343 |
+
with gr.Row():
|
344 |
+
plot = gr.Plot(label="Gráfico de Perfil DISC")
|
345 |
+
|
346 |
+
with gr.Row():
|
347 |
+
output = gr.Markdown()
|
348 |
+
|
349 |
+
analyze_btn.click(
|
350 |
+
fn=process_results,
|
351 |
+
inputs=radios,
|
352 |
+
outputs=[plot, output],
|
353 |
+
api_name="analyze"
|
354 |
+
)
|
355 |
+
|
356 |
+
reset_btn.click(
|
357 |
+
fn=lambda: [None]*(len(radios)+2),
|
358 |
+
outputs=radios+[plot, output],
|
359 |
+
api_name="reset"
|
360 |
+
)
|
361 |
+
|
362 |
+
gr.Markdown("""
|
363 |
+
---
|
364 |
+
### 📝 Informações Importantes
|
365 |
+
|
366 |
+
• O teste DISC é uma ferramenta de autoconhecimento e desenvolvimento profissional
|
367 |
+
• Os resultados refletem tendências comportamentais naturais
|
368 |
+
• Use as informações para desenvolvimento pessoal e melhor comunicação em equipe
|
369 |
+
|
370 |
+
© 2024 DISC Analysis Tool
|
371 |
+
""")
|
372 |
|
373 |
+
return iface
|
374 |
|
375 |
if __name__ == "__main__":
|
376 |
iface = create_interface()
|