gbope commited on
Commit
127a182
·
verified ·
1 Parent(s): 2ac6438

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -45
app.py CHANGED
@@ -27,7 +27,7 @@ def obter_documentos_carencia():
27
 
28
  def obter_documentos_titular(categoria, modalidade, documentos_padrao):
29
  documentos = documentos_padrao.copy()
30
- documentos.append("Comprovante de Residência (no nome do titular ou dos pais)")
31
 
32
  if categoria == "CNPJ":
33
  documentos.append("DA EMPRESA:")
@@ -69,13 +69,15 @@ def simplificar_dependente(nome):
69
  }
70
  return simplificacoes.get(nome, nome)
71
 
72
- def formatar_documentos(nome, documentos):
73
- resultado = f"Documentos necessários para {nome}:\n"
 
74
  for doc in documentos:
75
  if doc == "DA EMPRESA:":
76
- resultado += f"\n{doc}\n"
77
  else:
78
- resultado += f"- {doc}\n"
 
79
  return resultado
80
 
81
  def obter_documentos_dependente(dependente, nascido_2010):
@@ -94,7 +96,7 @@ def obter_documentos_dependente(dependente, nascido_2010):
94
 
95
  return documentos
96
 
97
- def processar_documentos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
98
  resultado = ""
99
  lista_completa = []
100
  docs_carencia = obter_documentos_carencia()
@@ -119,10 +121,9 @@ def processar_documentos(titular_nascido_2010, categoria, modalidade, titular_ca
119
  lista_completa.append((f"Dependente: {nome_simples}", docs_dep))
120
 
121
  for nome, documentos in lista_completa:
122
- resultado += formatar_documentos(nome, documentos)
123
- resultado += "\n" # Espaço entre seções
124
 
125
- return resultado.strip()
126
 
127
  def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
128
  lista_inclusos = []
@@ -204,25 +205,16 @@ def criar_interface():
204
  btn_submit = gr.Button("🔍 Gerar Lista de Documentos", variant="primary")
205
 
206
  with gr.Column():
207
- # Caixa de texto principal com os documentos
208
- output_text = gr.Textbox(
209
- label="Documentos Necessários",
210
- interactive=True,
211
- lines=20,
212
- max_lines=50,
213
- show_copy_button=True,
214
- autofocus=True
215
  )
216
-
217
- # Botão de copiar adicional (opcional)
218
- with gr.Row():
219
- btn_copiar = gr.Button("📋 Copiar Tudo", size="sm")
220
- status_copia = gr.Textbox(
221
- label="Status",
222
- interactive=False,
223
- visible=False,
224
- placeholder="Status da cópia..."
225
- )
226
 
227
  def atualizar_modalidades(categoria):
228
  if categoria == "CNPJ":
@@ -261,7 +253,7 @@ def criar_interface():
261
  )
262
 
263
  btn_submit.click(
264
- processar_documentos,
265
  inputs=[
266
  titular_nascido_2010,
267
  categoria,
@@ -269,23 +261,29 @@ def criar_interface():
269
  titular_carencia,
270
  dependentes_info
271
  ],
272
- outputs=output_text
273
  )
274
 
275
- # Configuração do botão de copiar adicional
276
  btn_copiar.click(
277
- None,
278
- inputs=None,
279
- outputs=status_copia,
280
  js="""
281
- () => {
282
- const textarea = document.querySelector('[data-testid="textbox"] textarea');
283
- textarea.select();
284
  try {
285
- navigator.clipboard.writeText(textarea.value);
286
- return "✅ Texto copiado!";
287
  } catch (err) {
288
- return "ℹ️ Selecione e use Ctrl+C para copiar";
 
 
 
 
 
 
 
289
  }
290
  }
291
  """
@@ -293,13 +291,8 @@ def criar_interface():
293
  lambda: gr.update(visible=True),
294
  None,
295
  status_copia
296
- ).then(
297
- lambda: gr.update(visible=False),
298
- None,
299
- status_copia,
300
- after=3000 # Esconde após 3 segundos
301
  )
302
-
303
  return app
304
 
305
  # Criação e lançamento da interface
 
27
 
28
  def obter_documentos_titular(categoria, modalidade, documentos_padrao):
29
  documentos = documentos_padrao.copy()
30
+ documentos.append("Comprovante de Residência (no nome do titular ou dos parents)")
31
 
32
  if categoria == "CNPJ":
33
  documentos.append("DA EMPRESA:")
 
69
  }
70
  return simplificacoes.get(nome, nome)
71
 
72
+ def formatar_documentos_markdown(nome, documentos):
73
+ # Formata a lista de documentos usando Markdown
74
+ resultado = f"### Documentos necessários para **{nome}**:\n"
75
  for doc in documentos:
76
  if doc == "DA EMPRESA:":
77
+ resultado += f"\n#### {doc}\n" # Use Markdown para sub-cabeçalho
78
  else:
79
+ resultado += f"- {doc}\n" # Use Markdown para lista
80
+ resultado += "\n" # Adiciona uma linha em branco para separar as seções
81
  return resultado
82
 
83
  def obter_documentos_dependente(dependente, nascido_2010):
 
96
 
97
  return documentos
98
 
99
+ def processar_documentos_markdown(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
100
  resultado = ""
101
  lista_completa = []
102
  docs_carencia = obter_documentos_carencia()
 
121
  lista_completa.append((f"Dependente: {nome_simples}", docs_dep))
122
 
123
  for nome, documentos in lista_completa:
124
+ resultado += formatar_documentos_markdown(nome, documentos)
 
125
 
126
+ return resultado.strip() # Remove espaços extras no final
127
 
128
  def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
129
  lista_inclusos = []
 
205
  btn_submit = gr.Button("🔍 Gerar Lista de Documentos", variant="primary")
206
 
207
  with gr.Column():
208
+ # Única caixa de texto para saída e cópia, que aceita Markdown
209
+ output_textbox = gr.Textbox(
210
+ label="Documentos Necessários (Copie daqui!)",
211
+ interactive=False,
212
+ lines=20, # Aumentar o número de linhas para melhor visualização
213
+ render_as_markdown=True, # CORREÇÃO: Usar render_as_markdown=True
214
+ elem_id="documentos-output-textbox" # ID para o JS
 
215
  )
216
+ btn_copiar = gr.Button("📋 Copiar Lista", visible=False) # Botão de copiar inicialmente invisível
217
+ status_copia = gr.Textbox(label="Status da Cópia", interactive=False, visible=False)
 
 
 
 
 
 
 
 
218
 
219
  def atualizar_modalidades(categoria):
220
  if categoria == "CNPJ":
 
253
  )
254
 
255
  btn_submit.click(
256
+ processar_documentos_markdown, # Agora esta função gera Markdown
257
  inputs=[
258
  titular_nascido_2010,
259
  categoria,
 
261
  titular_carencia,
262
  dependentes_info
263
  ],
264
+ outputs=[output_textbox, btn_copiar] # A saída vai para o Textbox, e o botão de copiar fica visível
265
  )
266
 
 
267
  btn_copiar.click(
268
+ None, # Nenhuma função Python necessária
269
+ None, # Nenhuma entrada Python necessária
270
+ status_copia,
271
  js="""
272
+ async () => {
273
+ // Pega o valor do textarea dentro do gr.Textbox usando o elem_id
274
+ const texto = document.getElementById("documentos-output-textbox").querySelector("textarea").value;
275
  try {
276
+ await navigator.clipboard.writeText(texto);
277
+ return "✅ Copiado para área de transferência!";
278
  } catch (err) {
279
+ // Fallback para navegadores mais antigos ou erros
280
+ const textarea = document.createElement('textarea');
281
+ textarea.value = texto;
282
+ document.body.appendChild(textarea);
283
+ textarea.select();
284
+ document.execCommand('copy');
285
+ document.body.removeChild(textarea);
286
+ return "✅ Copiado (use Ctrl+C se não colar automaticamente)";
287
  }
288
  }
289
  """
 
291
  lambda: gr.update(visible=True),
292
  None,
293
  status_copia
 
 
 
 
 
294
  )
295
+
296
  return app
297
 
298
  # Criação e lançamento da interface