Files
caronte/backend/app/services/document_generator.py

100 lines
5.0 KiB
Python

import os
from datetime import datetime
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY
from app.core.config import settings
os.makedirs(settings.UPLOAD_DIR, exist_ok=True)
def _styles():
ss = getSampleStyleSheet()
ss.add(ParagraphStyle(name="TitleCenter", parent=ss["Title"], alignment=TA_CENTER, fontSize=16))
ss.add(ParagraphStyle(name="Body", parent=ss["Normal"], alignment=TA_JUSTIFY, fontSize=11, leading=16))
return ss
def gerar_procuracao(familia_nome: str, falecido_nome: str, membro_nome: str, falecido_cpf: str = "000.000.000-00") -> str:
filename = f"procuracao_{familia_nome.lower().replace(' ','_')}_{datetime.now().strftime('%Y%m%d%H%M%S')}.pdf"
path = os.path.join(settings.UPLOAD_DIR, filename)
doc = SimpleDocTemplate(path, pagesize=A4, topMargin=3*cm)
ss = _styles()
story = [
Paragraph("PROCURAÇÃO", ss["TitleCenter"]),
Spacer(1, 1*cm),
Paragraph(
f"Pelo presente instrumento particular, eu, <b>{membro_nome}</b>, na qualidade de herdeiro(a) "
f"de <b>{falecido_nome}</b> (CPF: {falecido_cpf}), da família <b>{familia_nome}</b>, nomeio e constituo "
f"como meu(minha) bastante procurador(a) ______________________, para em meu nome representar "
f"perante órgãos públicos, bancos e demais instituições, podendo requerer, assinar documentos, "
f"receber valores e praticar todos os atos necessários ao cumprimento deste mandato.",
ss["Body"]
),
Spacer(1, 1.5*cm),
Paragraph(f"Local e data: ________________, {datetime.now().strftime('%d/%m/%Y')}", ss["Body"]),
Spacer(1, 2*cm),
Paragraph("_______________________________<br/>Assinatura do Outorgante", ss["Body"]),
]
doc.build(story)
return path
def gerar_requerimento_fgts(familia_nome: str, falecido_nome: str, membro_nome: str, falecido_cpf: str = "000.000.000-00") -> str:
filename = f"requerimento_fgts_{familia_nome.lower().replace(' ','_')}_{datetime.now().strftime('%Y%m%d%H%M%S')}.pdf"
path = os.path.join(settings.UPLOAD_DIR, filename)
doc = SimpleDocTemplate(path, pagesize=A4, topMargin=3*cm)
ss = _styles()
story = [
Paragraph("REQUERIMENTO DE SAQUE DO FGTS POR FALECIMENTO", ss["TitleCenter"]),
Spacer(1, 1*cm),
Paragraph("À Caixa Econômica Federal", ss["Body"]),
Spacer(1, 0.5*cm),
Paragraph(
f"Eu, <b>{membro_nome}</b>, na qualidade de dependente/herdeiro(a) de <b>{falecido_nome}</b> "
f"(CPF: {falecido_cpf}), venho por meio deste requerer o saque do saldo da(s) conta(s) vinculada(s) "
f"ao FGTS do trabalhador falecido, conforme previsto na Lei nº 8.036/90, art. 20, inciso IV.",
ss["Body"]
),
Spacer(1, 0.5*cm),
Paragraph("Documentos em anexo: Certidão de Óbito, documento de identidade, comprovante de dependência.", ss["Body"]),
Spacer(1, 1.5*cm),
Paragraph(f"Local e data: ________________, {datetime.now().strftime('%d/%m/%Y')}", ss["Body"]),
Spacer(1, 2*cm),
Paragraph("_______________________________<br/>Assinatura do Requerente", ss["Body"]),
]
doc.build(story)
return path
def gerar_peticao_pensao(familia_nome: str, falecido_nome: str, membro_nome: str, falecido_cpf: str = "000.000.000-00") -> str:
filename = f"peticao_pensao_{familia_nome.lower().replace(' ','_')}_{datetime.now().strftime('%Y%m%d%H%M%S')}.pdf"
path = os.path.join(settings.UPLOAD_DIR, filename)
doc = SimpleDocTemplate(path, pagesize=A4, topMargin=3*cm)
ss = _styles()
story = [
Paragraph("REQUERIMENTO DE PENSÃO POR MORTE", ss["TitleCenter"]),
Spacer(1, 1*cm),
Paragraph("Ao Instituto Nacional do Seguro Social - INSS", ss["Body"]),
Spacer(1, 0.5*cm),
Paragraph(
f"Eu, <b>{membro_nome}</b>, na qualidade de dependente de <b>{falecido_nome}</b> "
f"(CPF: {falecido_cpf}), venho requerer a concessão do benefício de Pensão por Morte, "
f"conforme previsto nos arts. 74 a 79 da Lei nº 8.213/91, em razão do falecimento do(a) "
f"segurado(a) acima identificado(a).",
ss["Body"]
),
Spacer(1, 0.5*cm),
Paragraph("Documentos em anexo: Certidão de Óbito, documentos pessoais, comprovante de dependência econômica.", ss["Body"]),
Spacer(1, 1.5*cm),
Paragraph(f"Local e data: ________________, {datetime.now().strftime('%d/%m/%Y')}", ss["Body"]),
Spacer(1, 2*cm),
Paragraph("_______________________________<br/>Assinatura do Requerente", ss["Body"]),
]
doc.build(story)
return path
GENERATORS = {
"procuracao": gerar_procuracao,
"requerimento_fgts": gerar_requerimento_fgts,
"peticao_pensao": gerar_peticao_pensao,
}