Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
|
| 3 |
+
# === Funções utilitárias (copiadas do seu script original) ===
|
| 4 |
+
def obter_documentos_padrao_2010_mais():
|
| 5 |
+
return [
|
| 6 |
+
"Certidão de Nascimento (Não pode ser só o RG)",
|
| 7 |
+
"Documento com Foto (RG/CNH/OUTROS - se houver)",
|
| 8 |
+
"CPF (se não tiver em outro documento)",
|
| 9 |
+
"Foto Corporal Completa para Verificação de Saúde (explicação abaixo)",
|
| 10 |
+
"Email e celular do responsável"
|
| 11 |
+
]
|
| 12 |
+
|
| 13 |
+
def obter_documentos_padrao_2009_menos():
|
| 14 |
+
return [
|
| 15 |
+
"Documento com Foto (RG/CNH/OUTROS)",
|
| 16 |
+
"CPF (se não tiver no documento com foto)",
|
| 17 |
+
"Foto com Documento ao lado do rosto",
|
| 18 |
+
"Email e celular"
|
| 19 |
+
]
|
| 20 |
+
|
| 21 |
+
def simplificar_dependente(nome):
|
| 22 |
+
simplificacoes = {
|
| 23 |
+
"Cônjuge ou companheiro(a)": "Cônjuge",
|
| 24 |
+
"Filhos(as) solteiros naturais, tutelados, enteados e adotivos": "Filhos",
|
| 25 |
+
"Filhos(as) inválidos declarados no imposto de renda do titular": "Filho inválido",
|
| 26 |
+
"Pai e mãe": "Pais",
|
| 27 |
+
"Padrasto e madrasta": "Padrastos",
|
| 28 |
+
"Irmãos(ãs) consanguíneos ou adotivos": "Irmãos",
|
| 29 |
+
"Netos": "Netos",
|
| 30 |
+
"Sobrinhos": "Sobrinhos",
|
| 31 |
+
"Primos": "Primos",
|
| 32 |
+
"Tios": "Tios",
|
| 33 |
+
"Cunhados(as)": "Cunhados",
|
| 34 |
+
"Sogro(a)": "Sogro(a)",
|
| 35 |
+
"Genros e noras": "Genros/Noras",
|
| 36 |
+
"Avô e avó": "Avós"
|
| 37 |
+
}
|
| 38 |
+
return simplificacoes.get(nome, nome)
|
| 39 |
+
|
| 40 |
+
def imprimir_documentos(nome, documentos):
|
| 41 |
+
resultado = f"\nDocumentos necessários para {nome}:\n"
|
| 42 |
+
for doc in documentos:
|
| 43 |
+
if doc == "DA EMPRESA:":
|
| 44 |
+
resultado += f"\n{doc}\n"
|
| 45 |
+
else:
|
| 46 |
+
resultado += f"- {doc}\n"
|
| 47 |
+
return resultado
|
| 48 |
+
|
| 49 |
+
def obter_documentos_carencia():
|
| 50 |
+
return [
|
| 51 |
+
"3 últimos boletos pagos e seus comprovantes",
|
| 52 |
+
"Carteirinha",
|
| 53 |
+
"Carta de permanência\n(A carta de permanência é um documento solicitado à administradora do seu plano, geralmente por ligação)"
|
| 54 |
+
]
|
| 55 |
+
|
| 56 |
+
def obter_documentos_titular(categoria, modalidade, documentos_padrao):
|
| 57 |
+
documentos = documentos_padrao.copy()
|
| 58 |
+
documentos.append("Comprovante de Residência (no nome do titular ou dos pais)")
|
| 59 |
+
|
| 60 |
+
if categoria == "CNPJ":
|
| 61 |
+
documentos.append("DA EMPRESA:")
|
| 62 |
+
if modalidade == "MEI":
|
| 63 |
+
documentos.extend(["CNPJ", "CCMEI"])
|
| 64 |
+
elif modalidade == "OUTROS":
|
| 65 |
+
documentos.extend(["CNPJ", "Contrato Social e suas alterações"])
|
| 66 |
+
|
| 67 |
+
elif categoria == "ADESAO":
|
| 68 |
+
if modalidade == "0":
|
| 69 |
+
pass # Entidade aberta, sem documentos extras
|
| 70 |
+
else:
|
| 71 |
+
documentos_map = {
|
| 72 |
+
"ESTUDANTE": "Declaração Escolar",
|
| 73 |
+
"TRABALHADOR": "Contracheque",
|
| 74 |
+
"PROFISSIONAL LIBERAL": "Documento de Registro no Conselho na validade + Diploma",
|
| 75 |
+
"APOSENTADO": "Comprovante de Pensão"
|
| 76 |
+
}
|
| 77 |
+
documentos.append(documentos_map.get(modalidade, "Modalidade inválida!"))
|
| 78 |
+
|
| 79 |
+
return documentos
|
| 80 |
+
|
| 81 |
+
def obter_documentos_dependente(dependente, nascido_2010):
|
| 82 |
+
documentos = obter_documentos_padrao_2010_mais() if nascido_2010 else obter_documentos_padrao_2009_menos()
|
| 83 |
+
|
| 84 |
+
if dependente == "Cônjuge ou companheiro(a)":
|
| 85 |
+
documentos.append("Certidão de casamento ou declaração de união estável (lavrada em cartório).")
|
| 86 |
+
elif "inválido" in dependente:
|
| 87 |
+
documentos.append("Declaração de imposto de renda do titular comprovando a condição.")
|
| 88 |
+
elif dependente in ["Netos", "Sobrinhos", "Primos", "Tios"]:
|
| 89 |
+
documentos.append("Documento com foto (RG/CNH/outros) do pai/mãe.")
|
| 90 |
+
elif dependente in ["Cunhados(as)", "Genros e noras"]:
|
| 91 |
+
documentos.append("Certidão de casamento.")
|
| 92 |
+
elif dependente == "Sogro(a)":
|
| 93 |
+
documentos.append("Certidão de casamento do titular")
|
| 94 |
+
|
| 95 |
+
return documentos
|
| 96 |
+
|
| 97 |
+
# === Lógica Gradio ===
|
| 98 |
+
def gerar_documentos(titular_2010, categoria, modalidade, dependentes, carencia_lista):
|
| 99 |
+
resultado = ""
|
| 100 |
+
documentos_padrao_titular = obter_documentos_padrao_2010_mais() if titular_2010 else obter_documentos_padrao_2009_menos()
|
| 101 |
+
docs_titular = obter_documentos_titular(categoria, modalidade, documentos_padrao_titular)
|
| 102 |
+
|
| 103 |
+
if "T" in carencia_lista or "1" in carencia_lista:
|
| 104 |
+
docs_titular.extend(obter_documentos_carencia())
|
| 105 |
+
if "T" in carencia_lista:
|
| 106 |
+
resultado += imprimir_documentos("TODOS (Titular e Dependentes)", docs_titular)
|
| 107 |
+
return resultado
|
| 108 |
+
resultado += imprimir_documentos("TITULAR", docs_titular)
|
| 109 |
+
|
| 110 |
+
for i, (dep_nome, dep_2010) in enumerate(dependentes, start=2):
|
| 111 |
+
docs_dep = obter_documentos_dependente(dep_nome, dep_2010)
|
| 112 |
+
nome_simplificado = simplificar_dependente(dep_nome)
|
| 113 |
+
if "T" in carencia_lista or str(i) in carencia_lista:
|
| 114 |
+
docs_dep.extend(obter_documentos_carencia())
|
| 115 |
+
resultado += imprimir_documentos(f"Dependente: {nome_simplificado}", docs_dep)
|
| 116 |
+
|
| 117 |
+
return resultado
|
| 118 |
+
|
| 119 |
+
# === Interface Gradio ===
|
| 120 |
+
def interface(titular_2010, categoria, modalidade, dependentes_json, carencia_raw):
|
| 121 |
+
import json
|
| 122 |
+
dependentes = json.loads(dependentes_json) if dependentes_json else []
|
| 123 |
+
carencia_lista = [x.strip().upper() for x in carencia_raw.replace(";", ",").split(",") if x.strip()]
|
| 124 |
+
return gerar_documentos(titular_2010, categoria, modalidade, dependentes, carencia_lista)
|
| 125 |
+
|
| 126 |
+
# Interface Gradio
|
| 127 |
+
with gr.Blocks(title="Gerador de Documentos de Saúde") as demo:
|
| 128 |
+
gr.Markdown("# Gerador de Documentos para Planos de Saúde")
|
| 129 |
+
|
| 130 |
+
titular_2010 = gr.Checkbox(label="Titular nasceu em 2010 ou depois?")
|
| 131 |
+
categoria = gr.Dropdown(["PF", "CNPJ", "ADESAO"], label="Categoria")
|
| 132 |
+
modalidade = gr.Dropdown(["", "MEI", "OUTROS", "ESTUDANTE", "TRABALHADOR", "PROFISSIONAL LIBERAL", "APOSENTADO", "0"], label="Modalidade (caso necessário)")
|
| 133 |
+
|
| 134 |
+
dependentes_json = gr.Textbox(label="Dependentes (JSON Ex: [[\"Cônjuge ou companheiro(a)\", true], [\"Netos\", false]])")
|
| 135 |
+
carencia_raw = gr.Textbox(label="Quem fará compra de carência? (Ex: T ou 1; 3)")
|
| 136 |
+
|
| 137 |
+
gerar = gr.Button("Gerar Documentos")
|
| 138 |
+
saida = gr.Textbox(label="Resultado", lines=20, interactive=False, show_copy_button=True)
|
| 139 |
+
|
| 140 |
+
gerar.click(fn=interface, inputs=[titular_2010, categoria, modalidade, dependentes_json, carencia_raw], outputs=saida)
|
| 141 |
+
|
| 142 |
+
demo.launch()
|