gbope commited on
Commit
ca4078f
·
verified ·
1 Parent(s): 0edd33e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -29
app.py CHANGED
@@ -69,14 +69,15 @@ def simplificar_dependente(nome):
69
  }
70
  return simplificacoes.get(nome, nome)
71
 
72
- def formatar_documentos(nome, documentos):
73
- resultado = f"<h3>Documentos necessários para {nome}:</h3><ul>"
 
74
  for doc in documentos:
75
  if doc == "DA EMPRESA:":
76
- resultado += f"</ul><h4>{doc}</h4><ul>"
77
  else:
78
- resultado += f"<li>{doc}</li>"
79
- resultado += "</ul>"
80
  return resultado
81
 
82
  def obter_documentos_dependente(dependente, nascido_2010):
@@ -95,7 +96,7 @@ def obter_documentos_dependente(dependente, nascido_2010):
95
 
96
  return documentos
97
 
98
- def processar_documentos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
99
  resultado = ""
100
  lista_completa = []
101
  docs_carencia = obter_documentos_carencia()
@@ -120,9 +121,9 @@ def processar_documentos(titular_nascido_2010, categoria, modalidade, titular_ca
120
  lista_completa.append((f"Dependente: {nome_simples}", docs_dep))
121
 
122
  for nome, documentos in lista_completa:
123
- resultado += formatar_documentos(nome, documentos)
124
 
125
- return resultado
126
 
127
  def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
128
  lista_inclusos = []
@@ -142,13 +143,6 @@ def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titula
142
 
143
  return lista_inclusos
144
 
145
- def limpar_texto_para_copiar(texto):
146
- # This function is good as is, it cleans the HTML for copying
147
- texto_limpo = re.sub('<[^<]+?>', '', texto)
148
- texto_limpo = texto_limpo.replace('</ul>', '\n').replace('</li>', '\n')
149
- texto_limpo = re.sub('\n+', '\n', texto_limpo).strip()
150
- return texto_limpo
151
-
152
  def criar_interface():
153
  with gr.Blocks(title="Documentos para Plano de Saúde", theme=gr.themes.Soft()) as app:
154
  gr.Markdown("# 📋 Documentos Necessários para Plano de Saúde")
@@ -211,11 +205,15 @@ def criar_interface():
211
  btn_submit = gr.Button("🔍 Gerar Lista de Documentos", variant="primary")
212
 
213
  with gr.Column():
214
- # Display output as HTML
215
- output_html = gr.HTML(label="Documentos Necessários")
216
- # This textbox will hold the *clean text* for copying
217
- texto_para_copiar = gr.Textbox(label="Texto para Copiar", interactive=False, lines=10, visible=True, elem_id="texto-para-copiar")
218
- btn_copiar = gr.Button("📋 Copiar Lista")
 
 
 
 
219
  status_copia = gr.Textbox(label="Status da Cópia", interactive=False, visible=False)
220
 
221
  def atualizar_modalidades(categoria):
@@ -255,7 +253,7 @@ def criar_interface():
255
  )
256
 
257
  btn_submit.click(
258
- processar_documentos,
259
  inputs=[
260
  titular_nascido_2010,
261
  categoria,
@@ -263,24 +261,22 @@ def criar_interface():
263
  titular_carencia,
264
  dependentes_info
265
  ],
266
- outputs=output_html # Output to the HTML display
267
- ).then(
268
- limpar_texto_para_copiar,
269
- inputs=output_html, # Use the HTML output as input for cleaning
270
- outputs=texto_para_copiar # Populate the hidden textbox with clean text
271
  )
272
 
273
  btn_copiar.click(
274
- None, # No Python function needed here
275
- None, # No Python inputs needed
276
  status_copia,
277
  js="""
278
  async () => {
279
- const texto = document.getElementById("texto-para-copiar").querySelector("textarea").value;
 
280
  try {
281
  await navigator.clipboard.writeText(texto);
282
  return "✅ Copiado para área de transferência!";
283
  } catch (err) {
 
284
  const textarea = document.createElement('textarea');
285
  textarea.value = texto;
286
  document.body.appendChild(textarea);
 
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 = []
 
143
 
144
  return lista_inclusos
145
 
 
 
 
 
 
 
 
146
  def criar_interface():
147
  with gr.Blocks(title="Documentos para Plano de Saúde", theme=gr.themes.Soft()) as app:
148
  gr.Markdown("# 📋 Documentos Necessários para Plano de Saúde")
 
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=True, # Garante que o conteúdo seja renderizado como Markdown
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):
 
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);