Update app.py
Browse files
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
|
| 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
|
| 73 |
-
|
|
|
|
| 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
|
| 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 +=
|
| 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 |
-
#
|
| 208 |
-
|
| 209 |
-
label="Documentos Necessários",
|
| 210 |
-
interactive=
|
| 211 |
-
lines=20,
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
autofocus=True
|
| 215 |
)
|
| 216 |
-
|
| 217 |
-
|
| 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 |
-
|
| 265 |
inputs=[
|
| 266 |
titular_nascido_2010,
|
| 267 |
categoria,
|
|
@@ -269,23 +261,29 @@ def criar_interface():
|
|
| 269 |
titular_carencia,
|
| 270 |
dependentes_info
|
| 271 |
],
|
| 272 |
-
outputs=
|
| 273 |
)
|
| 274 |
|
| 275 |
-
# Configuração do botão de copiar adicional
|
| 276 |
btn_copiar.click(
|
| 277 |
-
None,
|
| 278 |
-
|
| 279 |
-
|
| 280 |
js="""
|
| 281 |
-
() => {
|
| 282 |
-
|
| 283 |
-
|
| 284 |
try {
|
| 285 |
-
navigator.clipboard.writeText(
|
| 286 |
-
return "✅
|
| 287 |
} catch (err) {
|
| 288 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|