Skip to content
GitHub

Generación Documental (PDF Service)

El sistema utiliza un motor de generación documental unificado (PdfService) que garantiza consistencia visual, validez legal y trazabilidad en todos los documentos emitidos (Liquidaciones, Contratos, Finiquitos).

El proceso sigue un patrón estricto de Separación de Responsabilidades para desacoplar los datos de la presentación visual.

flowchart LR
    Data[Datos de Negocio] --> Service[Domain Service]
    Service -->|Context Object| Generator[HtmlGenerator]
    Generator -->|HTML String| PDF["PdfService (Puppeteer)"]
    PDF -->|Buffer/Stream| Storage[File System / S3]
    Storage -->|URL| UI[Cliente / Browser]
  1. Domain Service (ContractService, FiniquitoService): Recopila datos de múltiples fuentes (Empleado, Empresa, Cálculos) y construye un Contexto de Datos seguro y tipado.
  2. HtmlGenerator: Plantillas TypeScript que reciben el Contexto y generan HTML puro con estilos embebidos (CSS). No contienen lógica de negocio, solo de presentación.
  3. PdfService: Wrapper sobre puppeteer (headless Chrome) que renderiza el HTML a PDF con configuraciones de papel y márgenes estándar (Carta / A4).

El motor alimenta los siguientes subsistemas documentales:

El generador no es solo un “impresor”. Actúa como una Barrera de Compliance. Si los datos del empleado (ej: AFP, Salud) o del contrato (ej: Jornada) no son válidos según la normativa laboral, el sistema bloquea la generación y reporta el error. Esto previene la emisión de documentos legales nulos o defectuosos.

Los documentos no son estáticos. El sistema implementa Regeneración On-Demand:

  • Si un archivo físico se pierde o daña, el endpoint de descarga detecta la ausencia y lo regenera al vuelo usando los datos actuales.
  • Permite forzar la regeneración (?force=true) para reflejar correcciones de última hora (ej: corrección de error tipográfico en nombre) sin ensuciar la base de datos con versiones obsoletas.

La descarga de documentos utiliza la sesión autenticada del navegador (cookies HttpOnly), asegurando que solo usuarios con permisos activos puedan acceder a los archivos sensibles protegidos por leyes de privacidad.

  • Tipografía: Open Sans (Cuerpo) y Merriweather (Títulos Legales).
  • Papel: Carta (Letter) con márgenes de 2.5cm.
  • Elementos Gráficos: Solo tablas y líneas simples para máxima compatibilidad y sobriedad legal. No se utilizan imágenes pesadas ni colores que no impriman bien en blanco y negro.