Update app.py
Browse files
app.py
CHANGED
|
@@ -69,14 +69,15 @@ def simplificar_dependente(nome):
|
|
| 69 |
}
|
| 70 |
return simplificacoes.get(nome, nome)
|
| 71 |
|
| 72 |
-
def
|
| 73 |
-
|
|
|
|
| 74 |
for doc in documentos:
|
| 75 |
if doc == "DA EMPRESA:":
|
| 76 |
-
resultado += f"
|
| 77 |
else:
|
| 78 |
-
resultado += f"
|
| 79 |
-
resultado += "
|
| 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
|
| 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 +=
|
| 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 |
-
#
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 259 |
inputs=[
|
| 260 |
titular_nascido_2010,
|
| 261 |
categoria,
|
|
@@ -263,24 +261,22 @@ def criar_interface():
|
|
| 263 |
titular_carencia,
|
| 264 |
dependentes_info
|
| 265 |
],
|
| 266 |
-
outputs=
|
| 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, #
|
| 275 |
-
None, #
|
| 276 |
status_copia,
|
| 277 |
js="""
|
| 278 |
async () => {
|
| 279 |
-
|
|
|
|
| 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);
|