gbope commited on
Commit
477e0b8
·
verified ·
1 Parent(s): 9e04dca

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -20
app.py CHANGED
@@ -69,7 +69,6 @@ def simplificar_dependente(nome):
69
  }
70
  return simplificacoes.get(nome, nome)
71
 
72
- # --- NOVA FUNÇÃO PARA FORMATAR APENAS PARA TEXTO PURO ---
73
  def formatar_documentos_para_whatsapp(nome, documentos):
74
  resultado = f"Documentos necessários para {nome}:\n"
75
  for doc in documentos:
@@ -77,7 +76,7 @@ def formatar_documentos_para_whatsapp(nome, documentos):
77
  resultado += f"\nDA EMPRESA:\n"
78
  else:
79
  resultado += f"- {doc}\n"
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,7 +95,6 @@ def obter_documentos_dependente(dependente, nascido_2010):
96
 
97
  return documentos
98
 
99
- # --- NOVA FUNÇÃO PRINCIPAL QUE GERA APENAS TEXTO PURO ---
100
  def processar_documentos_para_whatsapp(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
101
  texto_final = ""
102
  lista_completa = []
@@ -124,8 +122,7 @@ def processar_documentos_para_whatsapp(titular_nascido_2010, categoria, modalida
124
  for nome, documentos in lista_completa:
125
  texto_final += formatar_documentos_para_whatsapp(nome, documentos)
126
 
127
- # Retorna o texto puro para o Textbox e torna o botão de cópia visível
128
- return texto_final.strip(), gr.update(visible=True)
129
 
130
  def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
131
  lista_inclusos = []
@@ -145,6 +142,23 @@ def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titula
145
 
146
  return lista_inclusos
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  def criar_interface():
149
  with gr.Blocks(title="Documentos para Plano de Saúde", theme=gr.themes.Soft()) as app:
150
  gr.Markdown("# 📋 Documentos Necessários para Plano de Saúde")
@@ -204,30 +218,31 @@ def criar_interface():
204
  )
205
  dependentes_info = gr.State([])
206
 
207
- btn_submit = gr.Button("🔍 Gerar Lista de Documentos", variant="primary")
 
 
208
 
209
  with gr.Column():
210
- # A única caixa de texto para saída e cópia
211
  output_textbox = gr.Textbox(
212
  label="Documentos Necessários (Pronto para copiar e colar no WhatsApp!)",
213
- interactive=False, # Não permite que o usuário digite
214
- lines=20, # Aumenta o espaço para visualizar
215
- elem_id="documentos-output-textbox" # ID para o JS, para o botão de cópia
216
  )
217
  btn_copiar = gr.Button("📋 Copiar Lista", visible=False)
218
  status_copia = gr.Textbox(label="Status da Cópia", interactive=False, visible=False)
219
 
220
  def atualizar_modalidades(categoria):
221
  if categoria == "CNPJ":
222
- return gr.Dropdown(choices=["MEI", "OUTROS"], label="Modalidade CNPJ", interactive=True)
223
  elif categoria == "ADESAO":
224
  return gr.Dropdown(
225
  choices=["ENTIDADE ABERTA", "ESTUDANTE", "TRABALHADOR", "PROFISSIONAL LIBERAL", "APOSENTADO"],
226
  label="Modalidade Adesão",
227
- interactive=True
228
- )
229
  else:
230
- return gr.Dropdown(choices=[], label="Modalidade (não aplicável)", interactive=False)
231
 
232
  categoria.change(
233
  atualizar_modalidades,
@@ -253,9 +268,8 @@ def criar_interface():
253
  outputs=lista_inclusos
254
  )
255
 
256
- # O botão de submissão agora atualiza o único textbox e torna o botão de cópia visível
257
  btn_submit.click(
258
- processar_documentos_para_whatsapp, # Funcao que gera texto puro
259
  inputs=[
260
  titular_nascido_2010,
261
  categoria,
@@ -263,7 +277,7 @@ def criar_interface():
263
  titular_carencia,
264
  dependentes_info
265
  ],
266
- outputs=[output_textbox, btn_copiar]
267
  )
268
 
269
  btn_copiar.click(
@@ -272,13 +286,11 @@ def criar_interface():
272
  status_copia,
273
  js="""
274
  async () => {
275
- // Pega o valor do textarea dentro do gr.Textbox usando o elem_id
276
  const texto = document.getElementById("documentos-output-textbox").querySelector("textarea").value;
277
  try {
278
  await navigator.clipboard.writeText(texto);
279
  return "✅ Copiado para área de transferência!";
280
  } catch (err) {
281
- // Fallback para navegadores mais antigos ou erros
282
  const textarea = document.createElement('textarea');
283
  textarea.value = texto;
284
  document.body.appendChild(textarea);
@@ -290,10 +302,30 @@ def criar_interface():
290
  }
291
  """
292
  ).then(
293
- lambda: gr.update(visible=True),
294
  None,
295
  status_copia
296
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
 
298
  return app
299
 
 
69
  }
70
  return simplificacoes.get(nome, nome)
71
 
 
72
  def formatar_documentos_para_whatsapp(nome, documentos):
73
  resultado = f"Documentos necessários para {nome}:\n"
74
  for doc in documentos:
 
76
  resultado += f"\nDA EMPRESA:\n"
77
  else:
78
  resultado += f"- {doc}\n"
79
+ resultado += "\n"
80
  return resultado
81
 
82
  def obter_documentos_dependente(dependente, nascido_2010):
 
95
 
96
  return documentos
97
 
 
98
  def processar_documentos_para_whatsapp(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
99
  texto_final = ""
100
  lista_completa = []
 
122
  for nome, documentos in lista_completa:
123
  texto_final += formatar_documentos_para_whatsapp(nome, documentos)
124
 
125
+ return texto_final.strip(), gr.update(visible=True), gr.update(visible=True) # Retorna texto, e torna visíveis o btn_copiar e status_copia
 
126
 
127
  def atualizar_lista_inclusos(titular_nascido_2010, categoria, modalidade, titular_carencia, dependentes_info):
128
  lista_inclusos = []
 
142
 
143
  return lista_inclusos
144
 
145
+ # --- NOVA FUNÇÃO PARA RESETAR TODOS OS CAMPOS ---
146
+ def limpar_tudo():
147
+ return (
148
+ gr.update(value="PF"), # categoria
149
+ gr.update(choices=[], interactive=False, value=None), # modalidade (reinicia para vazio e desativado)
150
+ gr.update(value=False), # titular_nascido_2010
151
+ gr.update(value=False), # titular_carencia
152
+ gr.update(value=None), # dep_tipo
153
+ gr.update(value=False), # dep_nascido_2010
154
+ gr.update(value=False), # dep_carencia
155
+ gr.update(value=[["Titular (2009-)", "PF", ""]]), # lista_inclusos (volta ao estado inicial)
156
+ [], # dependentes_info (limpa a lista de dependentes do estado)
157
+ "", # output_textbox (limpa o texto de saída)
158
+ gr.update(visible=False), # btn_copiar (oculta o botão de cópia)
159
+ gr.update(visible=False, value="") # status_copia (oculta e limpa o status da cópia)
160
+ )
161
+
162
  def criar_interface():
163
  with gr.Blocks(title="Documentos para Plano de Saúde", theme=gr.themes.Soft()) as app:
164
  gr.Markdown("# 📋 Documentos Necessários para Plano de Saúde")
 
218
  )
219
  dependentes_info = gr.State([])
220
 
221
+ with gr.Row(): # Agrupando botões de ação
222
+ btn_submit = gr.Button("🔍 Gerar Lista de Documentos", variant="primary")
223
+ btn_limpar = gr.Button("🧹 Limpar Tudo", variant="secondary") # Novo botão Limpar
224
 
225
  with gr.Column():
 
226
  output_textbox = gr.Textbox(
227
  label="Documentos Necessários (Pronto para copiar e colar no WhatsApp!)",
228
+ interactive=False,
229
+ lines=20,
230
+ elem_id="documentos-output-textbox"
231
  )
232
  btn_copiar = gr.Button("📋 Copiar Lista", visible=False)
233
  status_copia = gr.Textbox(label="Status da Cópia", interactive=False, visible=False)
234
 
235
  def atualizar_modalidades(categoria):
236
  if categoria == "CNPJ":
237
+ return gr.Dropdown(choices=["MEI", "OUTROS"], label="Modalidade CNPJ", interactive=True, value=None) # Resetar valor
238
  elif categoria == "ADESAO":
239
  return gr.Dropdown(
240
  choices=["ENTIDADE ABERTA", "ESTUDANTE", "TRABALHADOR", "PROFISSIONAL LIBERAL", "APOSENTADO"],
241
  label="Modalidade Adesão",
242
+ interactive=True, value=None
243
+ ) # Resetar valor
244
  else:
245
+ return gr.Dropdown(choices=[], label="Modalidade (não aplicável)", interactive=False, value=None) # Resetar valor
246
 
247
  categoria.change(
248
  atualizar_modalidades,
 
268
  outputs=lista_inclusos
269
  )
270
 
 
271
  btn_submit.click(
272
+ processar_documentos_para_whatsapp,
273
  inputs=[
274
  titular_nascido_2010,
275
  categoria,
 
277
  titular_carencia,
278
  dependentes_info
279
  ],
280
+ outputs=[output_textbox, btn_copiar, status_copia] # Passamos status_copia também para que ele seja visível
281
  )
282
 
283
  btn_copiar.click(
 
286
  status_copia,
287
  js="""
288
  async () => {
 
289
  const texto = document.getElementById("documentos-output-textbox").querySelector("textarea").value;
290
  try {
291
  await navigator.clipboard.writeText(texto);
292
  return "✅ Copiado para área de transferência!";
293
  } catch (err) {
 
294
  const textarea = document.createElement('textarea');
295
  textarea.value = texto;
296
  document.body.appendChild(textarea);
 
302
  }
303
  """
304
  ).then(
305
+ lambda: gr.update(visible=True), # Aqui o status_copia já foi tornado visível acima. Isso só garante que se por algum motivo ele sumisse, voltaria.
306
  None,
307
  status_copia
308
  )
309
+
310
+ # --- CONEXÃO DO BOTÃO LIMPAR TUDO ---
311
+ btn_limpar.click(
312
+ limpar_tudo,
313
+ inputs=None, # Não precisa de inputs para limpar
314
+ outputs=[
315
+ categoria,
316
+ modalidade,
317
+ titular_nascido_2010,
318
+ titular_carencia,
319
+ dep_tipo,
320
+ dep_nascido_2010,
321
+ dep_carencia,
322
+ lista_inclusos,
323
+ dependentes_info, # O State precisa ser resetado!
324
+ output_textbox,
325
+ btn_copiar,
326
+ status_copia
327
+ ]
328
+ )
329
 
330
  return app
331