DHEIVER commited on
Commit
b667701
·
verified ·
1 Parent(s): e6e1322

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +251 -176
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
- # Estratégias de desenvolvimento
240
- acoes_imediatas = generate_immediate_actions(perfil_principal[0])
241
- estrategias = generate_development_strategies(perfil_principal[0], perfil_secundario[0])
242
- ambiente = analyze_work_environment(perfil_principal[0])
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
- {decisao}
 
 
 
 
 
 
254
 
255
- ## Gestão de Conflitos
256
- {conflitos}
257
 
258
- ## Motivações e Direcionadores
259
- {motivacoes}
260
 
261
  ## Ambiente de Trabalho Ideal
262
- {ambiente}
 
263
 
264
- ## Plano de Desenvolvimento
265
- {estrategias}
 
 
 
 
 
 
 
266
 
267
- ## Ações Prioritárias
268
- {acoes_imediatas}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
269
 
270
- ## Combinação com Perfil Secundário ({perfil_secundario[0]}: {perfil_secundario[1]:.1f}%)
271
- Esta combinação sugere uma pessoa que consegue equilibrar as características dominantes do perfil {perfil_principal[0]}
272
- com elementos importantes do perfil {perfil_secundario[0]}, proporcionando maior versatilidade em diferentes situações.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
 
274
- ## Recomendações Específicas
275
- 1. Foco Principal
276
- Utilize sua força dominante em {perfil_principal[0]} para {get_primary_focus(perfil_principal[0])}
277
- Desenvolva conscientemente aspectos do perfil {perfil_secundario[0]} para complementar seu estilo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
 
279
- 2. Áreas de Atenção
280
- Monitore tendências excessivas do perfil {perfil_principal[0]}
281
- Desenvolva flexibilidade para adaptar seu estilo quando necessário
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
 
283
- 3. Desenvolvimento Contínuo
284
- Busque feedback regular sobre seu estilo de interação
285
- Pratique adaptação consciente em diferentes contextos
286
- Mantenha registro de seu progresso em áreas de desenvolvimento"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
- def get_primary_focus(profile):
289
- """Retorna foco principal baseado no perfil"""
290
- focus = {
291
- 'D': "alcançar resultados e liderar iniciativas",
292
- 'I': "influenciar positivamente e motivar pessoas",
293
- 'S': "criar estabilidade e promover cooperação",
294
- 'C': "garantir qualidade e precisão nas entregas"
295
- }
296
- return focus.get(profile, "desenvolver suas competências principais")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
 
298
- # [Resto do código permanece o mesmo, incluindo interface e funções auxiliares]
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()