Update app.py
Browse files
app.py
CHANGED
@@ -6,39 +6,132 @@ import numpy as np
|
|
6 |
# Inicializar o modelo
|
7 |
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
|
8 |
|
9 |
-
# Base de conhecimento
|
10 |
-
|
11 |
-
'D':
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
}
|
39 |
|
40 |
# Questionário DISC
|
41 |
-
|
42 |
{
|
43 |
"pergunta": "Em situações de trabalho em equipe, eu geralmente:",
|
44 |
"opcoes": [
|
@@ -86,16 +179,69 @@ disc_questions = [
|
|
86 |
}
|
87 |
]
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
def calcular_perfil(respostas):
|
90 |
-
|
91 |
contagem = {'D': 0, 'I': 0, 'S': 0, 'C': 0}
|
92 |
|
93 |
for resposta in respostas:
|
94 |
-
if resposta:
|
95 |
-
perfil = resposta.split()[0]
|
96 |
contagem[perfil] += 1
|
97 |
|
98 |
-
# Calcular porcentagens
|
99 |
total = sum(contagem.values())
|
100 |
if total > 0:
|
101 |
percentuais = {k: (v/total) * 100 for k, v in contagem.items()}
|
@@ -104,191 +250,63 @@ def calcular_perfil(respostas):
|
|
104 |
|
105 |
return percentuais
|
106 |
|
107 |
-
def
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
embedding_base = model.encode([texto_base])[0]
|
113 |
|
114 |
-
#
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
"pontos_fortes": [
|
122 |
-
"Seus pontos fortes incluem [ASPECTOS], sendo particularmente efetivo em [SITUAÇÃO].",
|
123 |
-
"Destaca-se principalmente por [ASPECTOS], com excelente capacidade para [SITUAÇÃO].",
|
124 |
-
"Suas principais competências envolvem [ASPECTOS], sendo muito eficaz em [SITUAÇÃO]."
|
125 |
-
],
|
126 |
-
"recomendacoes": [
|
127 |
-
"Para desenvolvimento, pode focar em [ASPECTOS], buscando equilibrar [CARACTERÍSTICA].",
|
128 |
-
"As oportunidades de crescimento incluem [ASPECTOS], visando aprimorar [CARACTERÍSTICA].",
|
129 |
-
"O caminho de desenvolvimento sugere atenção a [ASPECTOS], para fortalecer [CARACTERÍSTICA]."
|
130 |
-
]
|
131 |
-
}
|
132 |
|
133 |
-
|
134 |
-
melhor_template = max(templates[contexto],
|
135 |
-
key=lambda t: cosine_similarity([embedding_base],
|
136 |
-
[model.encode([t])[0]])[0][0])
|
137 |
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
).replace("[ASPECTOS]",
|
143 |
-
get_aspectos(perfil, contexto)
|
144 |
-
).replace("[SITUAÇÃO]",
|
145 |
-
get_situacao(perfil, contexto))
|
146 |
-
|
147 |
-
def get_aspecto_principal(perfil, contexto):
|
148 |
-
aspectos = {
|
149 |
-
'D': {
|
150 |
-
'visao_geral': "resultados e ação",
|
151 |
-
'pontos_fortes': "liderança e decisão",
|
152 |
-
'recomendacoes': "relacionamentos interpessoais"
|
153 |
-
},
|
154 |
-
'I': {
|
155 |
-
'visao_geral': "comunicação e influência",
|
156 |
-
'pontos_fortes': "persuasão e entusiasmo",
|
157 |
-
'recomendacoes': "organização e foco"
|
158 |
-
},
|
159 |
-
'S': {
|
160 |
-
'visao_geral': "estabilidade e cooperação",
|
161 |
-
'pontos_fortes': "suporte e consistência",
|
162 |
-
'recomendacoes': "adaptabilidade e assertividade"
|
163 |
-
},
|
164 |
-
'C': {
|
165 |
-
'visao_geral': "análise e precisão",
|
166 |
-
'pontos_fortes': "qualidade e processos",
|
167 |
-
'recomendacoes': "flexibilidade e velocidade"
|
168 |
-
}
|
169 |
-
}
|
170 |
-
return aspectos[perfil][contexto]
|
171 |
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
'pontos_fortes': "tomada rápida de decisão",
|
177 |
-
'recomendacoes': "desenvolvimento de empatia"
|
178 |
-
},
|
179 |
-
'I': {
|
180 |
-
'visao_geral': "sociabilidade e otimismo",
|
181 |
-
'pontos_fortes': "networking e motivação",
|
182 |
-
'recomendacoes': "gestão de tempo"
|
183 |
-
},
|
184 |
-
'S': {
|
185 |
-
'visao_geral': "confiabilidade e paciência",
|
186 |
-
'pontos_fortes': "trabalho em equipe",
|
187 |
-
'recomendacoes': "gestão de mudanças"
|
188 |
-
},
|
189 |
-
'C': {
|
190 |
-
'visao_geral': "organização e metodologia",
|
191 |
-
'pontos_fortes': "atenção aos detalhes",
|
192 |
-
'recomendacoes': "tomada de decisão rápida"
|
193 |
-
}
|
194 |
-
}
|
195 |
-
return caracteristicas[perfil][contexto]
|
196 |
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
'visao_geral': "liderança, competitividade e iniciativa",
|
201 |
-
'pontos_fortes': "direcionamento, foco em resultados e autonomia",
|
202 |
-
'recomendacoes': "escuta ativa, paciência e colaboração"
|
203 |
-
},
|
204 |
-
'I': {
|
205 |
-
'visao_geral': "comunicação, entusiasmo e sociabilidade",
|
206 |
-
'pontos_fortes': "persuasão, networking e criatividade",
|
207 |
-
'recomendacoes': "organização, foco e conclusão de tarefas"
|
208 |
-
},
|
209 |
-
'S': {
|
210 |
-
'visao_geral': "estabilidade, cooperação e harmonia",
|
211 |
-
'pontos_fortes': "consistência, lealdade e suporte",
|
212 |
-
'recomendacoes': "proatividade, assertividade e adaptabilidade"
|
213 |
-
},
|
214 |
-
'C': {
|
215 |
-
'visao_geral': "análise, precisão e qualidade",
|
216 |
-
'pontos_fortes': "organização, planejamento e controle",
|
217 |
-
'recomendacoes': "flexibilidade, agilidade e relacionamentos"
|
218 |
-
}
|
219 |
-
}
|
220 |
-
return aspectos[perfil][contexto]
|
221 |
|
222 |
-
|
223 |
-
situacoes = {
|
224 |
-
'D': {
|
225 |
-
'visao_geral': "ambientes desafiadores",
|
226 |
-
'pontos_fortes': "situações que exigem decisões rápidas",
|
227 |
-
'recomendacoes': "trabalho em equipe colaborativo"
|
228 |
-
},
|
229 |
-
'I': {
|
230 |
-
'visao_geral': "ambientes sociais",
|
231 |
-
'pontos_fortes': "situações que exigem persuasão",
|
232 |
-
'recomendacoes': "tarefas que exigem foco individual"
|
233 |
-
},
|
234 |
-
'S': {
|
235 |
-
'visao_geral': "ambientes estáveis",
|
236 |
-
'pontos_fortes': "situações que exigem cooperação",
|
237 |
-
'recomendacoes': "ambientes de mudança constante"
|
238 |
-
},
|
239 |
-
'C': {
|
240 |
-
'visao_geral': "ambientes estruturados",
|
241 |
-
'pontos_fortes': "situações que exigem precisão",
|
242 |
-
'recomendacoes': "decisões sob pressão"
|
243 |
-
}
|
244 |
-
}
|
245 |
-
return situacoes[perfil][contexto]
|
246 |
-
|
247 |
-
def gerar_relatorio(percentuais):
|
248 |
-
# Ordenar perfis por porcentagem
|
249 |
-
perfis_ordenados = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True))
|
250 |
-
perfil_dominante = list(perfis_ordenados.keys())[0]
|
251 |
-
|
252 |
-
# Gerar três parágrafos usando o modelo
|
253 |
-
p1 = gerar_paragrafo_modelo(perfil_dominante, perfis_ordenados[perfil_dominante], "visao_geral")
|
254 |
-
p2 = gerar_paragrafo_modelo(perfil_dominante, perfis_ordenados[perfil_dominante], "pontos_fortes")
|
255 |
-
p3 = gerar_paragrafo_modelo(perfil_dominante, perfis_ordenados[perfil_dominante], "recomendacoes")
|
256 |
-
|
257 |
-
# Combinar parágrafos com dados quantitativos
|
258 |
-
relatorio = f"""Análise de Perfil DISC
|
259 |
|
260 |
{p1}
|
261 |
-
Distribuição quantitativa: {', '.join([f'{k}: {v:.1f}%' for k, v in perfis_ordenados.items()])}
|
262 |
|
263 |
{p2}
|
264 |
-
Este perfil representa {perfis_ordenados[perfil_dominante]:.1f}% das suas respostas.
|
265 |
|
266 |
{p3}
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
|
271 |
def processar_questionario(*args):
|
272 |
-
|
273 |
respostas = list(args)
|
274 |
-
|
275 |
-
# Calcular percentuais
|
276 |
percentuais = calcular_perfil(respostas)
|
277 |
-
|
278 |
-
# Gerar relatório
|
279 |
-
relatorio = gerar_relatorio(percentuais)
|
280 |
-
|
281 |
-
return relatorio
|
282 |
|
283 |
# Interface Gradio
|
284 |
with gr.Blocks(title="Análise de Perfil DISC") as iface:
|
285 |
gr.Markdown("# Análise de Perfil Comportamental DISC")
|
|
|
286 |
|
287 |
# Lista para armazenar os componentes de rádio
|
288 |
radio_components = []
|
289 |
|
290 |
# Criar questões
|
291 |
-
for i, questao in enumerate(
|
292 |
gr.Markdown(f"### {questao['pergunta']}")
|
293 |
radio = gr.Radio(
|
294 |
choices=[f"{perfil} - {desc}" for perfil, desc in questao['opcoes']],
|
|
|
6 |
# Inicializar o modelo
|
7 |
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
|
8 |
|
9 |
+
# Base de conhecimento para análise
|
10 |
+
DISC_BASE = {
|
11 |
+
'D': {
|
12 |
+
'caracteristicas_principais': [
|
13 |
+
"liderança natural",
|
14 |
+
"foco em resultados",
|
15 |
+
"tomada rápida de decisão",
|
16 |
+
"assertividade",
|
17 |
+
"orientação para desafios"
|
18 |
+
],
|
19 |
+
'pontos_fortes': [
|
20 |
+
"determinação",
|
21 |
+
"eficiência",
|
22 |
+
"iniciativa",
|
23 |
+
"coragem",
|
24 |
+
"competitividade"
|
25 |
+
],
|
26 |
+
'areas_desenvolvimento': [
|
27 |
+
"paciência",
|
28 |
+
"empatia",
|
29 |
+
"diplomacia",
|
30 |
+
"escuta ativa",
|
31 |
+
"trabalho em equipe"
|
32 |
+
],
|
33 |
+
'ambiente_ideal': [
|
34 |
+
"dinâmico",
|
35 |
+
"desafiador",
|
36 |
+
"com autonomia",
|
37 |
+
"orientado a resultados",
|
38 |
+
"competitivo"
|
39 |
+
]
|
40 |
+
},
|
41 |
+
'I': {
|
42 |
+
'caracteristicas_principais': [
|
43 |
+
"comunicação expressiva",
|
44 |
+
"entusiasmo",
|
45 |
+
"sociabilidade",
|
46 |
+
"otimismo",
|
47 |
+
"persuasão"
|
48 |
+
],
|
49 |
+
'pontos_fortes': [
|
50 |
+
"carisma",
|
51 |
+
"networking",
|
52 |
+
"criatividade",
|
53 |
+
"motivação",
|
54 |
+
"adaptabilidade social"
|
55 |
+
],
|
56 |
+
'areas_desenvolvimento': [
|
57 |
+
"organização",
|
58 |
+
"foco",
|
59 |
+
"gestão do tempo",
|
60 |
+
"atenção a detalhes",
|
61 |
+
"conclusão de tarefas"
|
62 |
+
],
|
63 |
+
'ambiente_ideal': [
|
64 |
+
"social",
|
65 |
+
"colaborativo",
|
66 |
+
"dinâmico",
|
67 |
+
"com reconhecimento",
|
68 |
+
"flexível"
|
69 |
+
]
|
70 |
+
},
|
71 |
+
'S': {
|
72 |
+
'caracteristicas_principais': [
|
73 |
+
"estabilidade",
|
74 |
+
"cooperação",
|
75 |
+
"paciência",
|
76 |
+
"lealdade",
|
77 |
+
"consistência"
|
78 |
+
],
|
79 |
+
'pontos_fortes': [
|
80 |
+
"confiabilidade",
|
81 |
+
"mediação",
|
82 |
+
"suporte",
|
83 |
+
"harmonia",
|
84 |
+
"trabalho em equipe"
|
85 |
+
],
|
86 |
+
'areas_desenvolvimento': [
|
87 |
+
"proatividade",
|
88 |
+
"assertividade",
|
89 |
+
"adaptação a mudanças",
|
90 |
+
"tomada de decisão",
|
91 |
+
"expressão de opiniões"
|
92 |
+
],
|
93 |
+
'ambiente_ideal': [
|
94 |
+
"estável",
|
95 |
+
"previsível",
|
96 |
+
"harmonioso",
|
97 |
+
"colaborativo",
|
98 |
+
"estruturado"
|
99 |
+
]
|
100 |
+
},
|
101 |
+
'C': {
|
102 |
+
'caracteristicas_principais': [
|
103 |
+
"análise",
|
104 |
+
"precisão",
|
105 |
+
"organização",
|
106 |
+
"sistemático",
|
107 |
+
"atenção a detalhes"
|
108 |
+
],
|
109 |
+
'pontos_fortes': [
|
110 |
+
"qualidade",
|
111 |
+
"planejamento",
|
112 |
+
"metodologia",
|
113 |
+
"processos",
|
114 |
+
"compliance"
|
115 |
+
],
|
116 |
+
'areas_desenvolvimento': [
|
117 |
+
"flexibilidade",
|
118 |
+
"rapidez decisória",
|
119 |
+
"relacionamentos",
|
120 |
+
"expressão emocional",
|
121 |
+
"tolerância a riscos"
|
122 |
+
],
|
123 |
+
'ambiente_ideal': [
|
124 |
+
"estruturado",
|
125 |
+
"organizado",
|
126 |
+
"com regras claras",
|
127 |
+
"focado em qualidade",
|
128 |
+
"metódico"
|
129 |
+
]
|
130 |
+
}
|
131 |
}
|
132 |
|
133 |
# Questionário DISC
|
134 |
+
DISC_QUESTIONS = [
|
135 |
{
|
136 |
"pergunta": "Em situações de trabalho em equipe, eu geralmente:",
|
137 |
"opcoes": [
|
|
|
179 |
}
|
180 |
]
|
181 |
|
182 |
+
def get_caracteristicas_principais(perfil):
|
183 |
+
"""Retorna características principais do perfil."""
|
184 |
+
return ", ".join(DISC_BASE[perfil]['caracteristicas_principais'][:3])
|
185 |
+
|
186 |
+
def get_caracteristicas_secundarias(perfil):
|
187 |
+
"""Retorna características secundárias do perfil."""
|
188 |
+
return ", ".join(DISC_BASE[perfil]['caracteristicas_principais'][3:])
|
189 |
+
|
190 |
+
def get_pontos_fortes(perfil):
|
191 |
+
"""Retorna pontos fortes do perfil."""
|
192 |
+
return ", ".join(DISC_BASE[perfil]['pontos_fortes'])
|
193 |
+
|
194 |
+
def get_contextos_ideais(perfil):
|
195 |
+
"""Retorna contextos ideais para o perfil."""
|
196 |
+
return ", ".join(DISC_BASE[perfil]['ambiente_ideal'])
|
197 |
+
|
198 |
+
def get_contribuicoes_principais(perfil):
|
199 |
+
"""Retorna principais contribuições do perfil."""
|
200 |
+
contribuicoes = {
|
201 |
+
'D': "liderar projetos e tomar decisões estratégicas",
|
202 |
+
'I': "motivar equipes e criar engajamento",
|
203 |
+
'S': "manter a estabilidade e promover cooperação",
|
204 |
+
'C': "garantir qualidade e precisão nos processos"
|
205 |
+
}
|
206 |
+
return contribuicoes[perfil]
|
207 |
+
|
208 |
+
def get_aplicacoes_praticas(perfil):
|
209 |
+
"""Retorna aplicações práticas para o perfil."""
|
210 |
+
aplicacoes = {
|
211 |
+
'D': "gestão de projetos, tomada de decisão e resolução de problemas",
|
212 |
+
'I': "comunicação, vendas e desenvolvimento de equipes",
|
213 |
+
'S': "suporte, mediação e gestão de relacionamentos",
|
214 |
+
'C': "análise, planejamento e controle de qualidade"
|
215 |
+
}
|
216 |
+
return aplicacoes[perfil]
|
217 |
+
|
218 |
+
def get_areas_desenvolvimento(perfil):
|
219 |
+
"""Retorna áreas de desenvolvimento do perfil."""
|
220 |
+
return ", ".join(DISC_BASE[perfil]['areas_desenvolvimento'])
|
221 |
+
|
222 |
+
def get_estrategias_desenvolvimento(perfil):
|
223 |
+
"""Retorna estratégias de desenvolvimento para o perfil."""
|
224 |
+
estrategias = {
|
225 |
+
'D': "desenvolvimento de habilidades interpessoais e paciência",
|
226 |
+
'I': "aprimoramento do foco e da organização",
|
227 |
+
'S': "desenvolvimento de proatividade e adaptabilidade",
|
228 |
+
'C': "trabalho na flexibilidade e rapidez decisória"
|
229 |
+
}
|
230 |
+
return estrategias[perfil]
|
231 |
+
|
232 |
+
def get_recomendacoes_praticas(perfil_principal, perfil_secundario):
|
233 |
+
"""Retorna recomendações práticas baseadas na combinação de perfis."""
|
234 |
+
return f"desenvolvimento equilibrado entre as características {perfil_principal} e {perfil_secundario}"
|
235 |
+
|
236 |
def calcular_perfil(respostas):
|
237 |
+
"""Calcula os percentuais de cada perfil DISC."""
|
238 |
contagem = {'D': 0, 'I': 0, 'S': 0, 'C': 0}
|
239 |
|
240 |
for resposta in respostas:
|
241 |
+
if resposta:
|
242 |
+
perfil = resposta.split()[0]
|
243 |
contagem[perfil] += 1
|
244 |
|
|
|
245 |
total = sum(contagem.values())
|
246 |
if total > 0:
|
247 |
percentuais = {k: (v/total) * 100 for k, v in contagem.items()}
|
|
|
250 |
|
251 |
return percentuais
|
252 |
|
253 |
+
def gerar_relatorio(percentuais):
|
254 |
+
"""Gera o relatório completo baseado nos percentuais DISC."""
|
255 |
+
perfis_ordenados = dict(sorted(percentuais.items(), key=lambda x: x[1], reverse=True))
|
256 |
+
perfil_dominante = list(perfis_ordenados.keys())[0]
|
257 |
+
perfil_secundario = list(perfis_ordenados.keys())[1]
|
|
|
258 |
|
259 |
+
# Gerar embedding para análise personalizada
|
260 |
+
texto_base = f"""
|
261 |
+
Perfil dominante {perfil_dominante}: {', '.join(DISC_BASE[perfil_dominante]['caracteristicas_principais'])}
|
262 |
+
Perfil secundário {perfil_secundario}: {', '.join(DISC_BASE[perfil_secundario]['caracteristicas_principais'])}
|
263 |
+
Intensidade principal: {perfis_ordenados[perfil_dominante]:.1f}%
|
264 |
+
Intensidade secundária: {perfis_ordenados[perfil_secundario]:.1f}%
|
265 |
+
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
266 |
|
267 |
+
embedding_base = model.encode([texto_base])[0]
|
|
|
|
|
|
|
268 |
|
269 |
+
# Gerar parágrafos personalizados
|
270 |
+
p1 = f"""Seu perfil comportamental apresenta uma predominância do tipo {perfil_dominante} ({perfis_ordenados[perfil_dominante]:.1f}%),
|
271 |
+
caracterizado por {get_caracteristicas_principais(perfil_dominante)}, com influência secundária do tipo {perfil_secundario}
|
272 |
+
({perfis_ordenados[perfil_secundario]:.1f}%), que adiciona elementos de {get_caracteristicas_principais(perfil_secundario)}."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
|
274 |
+
p2 = f"""Seus principais pontos fortes incluem {get_pontos_fortes(perfil_dominante)}.
|
275 |
+
Você tende a se destacar em ambientes que sejam {get_contextos_ideais(perfil_dominante)},
|
276 |
+
onde pode contribuir efetivamente através de {get_contribuicoes_principais(perfil_dominante)}.
|
277 |
+
Suas habilidades são particularmente valiosas em situações que envolvam {get_aplicacoes_praticas(perfil_dominante)}."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
|
279 |
+
p3 = f"""Para potencializar seu desenvolvimento, considere focar em {get_areas_desenvolvimento(perfil_dominante)}.
|
280 |
+
Recomenda-se atenção especial ao {get_estrategias_desenvolvimento(perfil_dominante)},
|
281 |
+
buscando um {get_recomendacoes_praticas(perfil_dominante, perfil_secundario)}."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
|
283 |
+
return f"""RELATÓRIO DE ANÁLISE COMPORTAMENTAL DISC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
|
285 |
{p1}
|
|
|
286 |
|
287 |
{p2}
|
|
|
288 |
|
289 |
{p3}
|
290 |
+
|
291 |
+
Distribuição completa dos perfis DISC:
|
292 |
+
{', '.join([f'{k}: {v:.1f}%' for k, v in perfis_ordenados.items()])}"""
|
293 |
|
294 |
def processar_questionario(*args):
|
295 |
+
"""Processa as respostas do questionário e gera o relatório."""
|
296 |
respostas = list(args)
|
|
|
|
|
297 |
percentuais = calcular_perfil(respostas)
|
298 |
+
return gerar_relatorio(percentuais)
|
|
|
|
|
|
|
|
|
299 |
|
300 |
# Interface Gradio
|
301 |
with gr.Blocks(title="Análise de Perfil DISC") as iface:
|
302 |
gr.Markdown("# Análise de Perfil Comportamental DISC")
|
303 |
+
gr.Markdown("### Responda às questões abaixo conforme seu comportamento mais natural")
|
304 |
|
305 |
# Lista para armazenar os componentes de rádio
|
306 |
radio_components = []
|
307 |
|
308 |
# Criar questões
|
309 |
+
for i, questao in enumerate(DISC_QUESTIONS):
|
310 |
gr.Markdown(f"### {questao['pergunta']}")
|
311 |
radio = gr.Radio(
|
312 |
choices=[f"{perfil} - {desc}" for perfil, desc in questao['opcoes']],
|