Generación de PDF y Passbook
Yastubo automatiza la creación de documentos contractuales y tarjetas de identificación digital (Wallet) para ofrecer una experiencia premium a sus asegurados. Esta guía explica el funcionamiento del motor de documentos y cómo personalizar sus plantillas.
Core Benefits / Key Features
Section titled “Core Benefits / Key Features”- Plantillas Flexibles (Jinja2): Personalización dinámica de contratos usando HTML y CSS moderno.
- Conversión de Alta Fidelidad: Generación de PDFs precisos mediante WeasyPrint.
- Portabilidad: Emisión de archivos
.pkpasspara Apple Wallet y Google Pay. - Almacenamiento Localizado: Organización automática de pólizas por número de referencia.
Deep Dive Técnico: Generación de Contratos
Section titled “Deep Dive Técnico: Generación de Contratos”La lógica reside en app/modules/emission/pdf_generator.py.
Renderizado de PDF (WeasyPrint)
Section titled “Renderizado de PDF (WeasyPrint)”El proceso de generación sigue estos pasos:
- Se cargan los datos de la póliza y el cliente desde la base de datos.
- Se procesa la plantilla HTML (
contract.html) usando el motor Jinja2. - WeasyPrint convierte el HTML renderizado en un binario PDF.
- El archivo se guarda en
storage/policies/y se retorna para su descarga o envío por email.
def generate_contract_pdf(policy: Policy, client: Client, plan_snapshot: dict) -> bytes: # 1. Cargar el entorno de Jinja2 env = Environment(loader=FileSystemLoader(TEMPLATE_DIR)) template = env.get_template("contract.html")
# 2. Renderizar contenido con datos reales html_content = template.render( policy=policy, client=client, plan_snapshot=plan_snapshot, now=datetime.now() )
# 3. Convertir a PDF y guardar en el disco pdf_bytes = HTML(string=html_content).write_pdf()
return pdf_bytesEjemplo Práctico: Añadir un Nuevo Campo al Contrato
Section titled “Ejemplo Práctico: Añadir un Nuevo Campo al Contrato”Si necesitas añadir la fecha de nacimiento del beneficiario en el contrato PDF:
1. Actualiza la Plantilla HTML
Section titled “1. Actualiza la Plantilla HTML”Modifica app/modules/emission/templates/contract.html añadiendo la variable Jinja2:
<div class="row"> <div class="label">Fecha de Nacimiento:</div> <div class="value">{{ client.birth_date }}</div></div>2. Pasa los Datos en el Generador
Section titled “2. Pasa los Datos en el Generador”Asegúrate de que el objeto client tenga el atributo disponible (ya incluido en la lógica base).
Generación de Passbook (Apple Wallet)
Section titled “Generación de Passbook (Apple Wallet)”El servicio PassbookService en app/modules/emission/passbook_service.py es el encargado de orquestar la creación de la tarjeta digital.
# Estructura del objeto pass_info para Apple Walletpass_info = { "formatVersion": 1, "passTypeIdentifier": "pass.com.yastubo", "serialNumber": "POL-12345", "teamIdentifier": "YASTUBO_ID", "organizationName": "Yastubo Insurance", "description": "Tu póliza activa", "storeCard": { "primaryFields": [ {"key": "policy", "label": "PÓLIZA", "value": "POL-12345"} ] }}Diagrama de Flujo de Documentos
Section titled “Diagrama de Flujo de Documentos”