Skip to content
GitHub

Servicio de Contratos

El Servicio de Contratos administra la relación legal entre la empresa y el colaborador. Es la fuente de verdad para el cálculo de remuneraciones (Sueldo Base, Jornada, Antigüedad) y es responsable de asegurar el cumplimiento normativo (Compliance) en la documentación generada.

El sistema no solo almacena datos, sino que actúa como un Auditor de Compliance previo a la emisión de documentos. Antes de generar cualquier PDF, el sistema ejecuta las siguientes validaciones estrictas:

ValidaciónDescripciónComportamiento
Jornada ObligatoriaVerifica que el contrato tenga asignada una Jornada de Trabajo activa.Bloqueante: Error si falta jornada.
Previsión y SaludExige que el empleado tenga AFP y Sistema de Salud (Fonasa/Isapre) asignados.Bloqueante: Necesario para la Cláusula Séptima.
Coherencia de FechasValida que Fecha Término > Fecha Inicio (en contratos a plazo).Bloqueante: Previene contratos con vigencia negativa.
Formato LegalAsegura que RUTs y Fechas sigan el formato estándar chileno.Automático: Formatea datos al vuelo.

El motor de generación de contratos transforma los datos estructurados en un documento legalmente válido y estéticamente profesional.

El generador (ContractHtmlGenerator) adapta las cláusulas según la configuración del contrato:

  1. Cláusula Tercera (Jornada):

    • Dinámica: En lugar de texto estático, obtiene los días y horas exactos desde la definición de la Jornada (WorkingDay).
    • Ejemplo: “Lunes a Viernes: de 08:30 a 18:30 horas” y “Con un tiempo de descanso para colación de 45 minutos…”.
  2. Cláusula Quinta (Duración):

    • Indefinido: Texto “Duración INDEFINIDA” y oculta referencias a fechas de término.
    • Plazo Fijo: Texto “Duración A PLAZO FIJO” e incluye la frase “terminará indefectiblemente el día [Fecha]”.
  3. Cláusula Séptima (Previsión):

    • Inyecta automáticamente los nombres de la AFP (ej: “Habitat”) y Salud (ej: “Fonasa”) del empleado.

El sistema posee capacidad de autorecuperación para los archivos PDF.

  • Detección de Archivos Perdidos: Al intentar descargar un contrato, si el archivo físico no existe en el almacenamiento, el sistema lo regenera automáticamente al vuelo.
  • Forzar Regeneración: Desde la UI, el botón de descarga solicita explicitamente una regeneración (?force=true) para asegurar que el PDF refleje siempre los últimos cambios de datos (e.g., cambio de domicilio o sueldo).
sequenceDiagram
    participant User as Usuario
    participant API as /api/contracts/:id/download
    participant Service as ContractService
    participant PDF as HtmlGenerator
    
    User->>API: Click "Descargar PDF"
    API->>Service: getDownloadPath(force=true)
    Service->>Service: validateCompliance()
    alt Compliance OK
        Service->>PDF: Generar HTML (Datos Actualizados)
        PDF-->>Service: Buffer PDF
        Service->>Service: Guardar en Disco
        Service-->>API: Retornar Path
        API-->>User: Archivo PDF
    else Compliance Error
        Service-->>API: Error (Mensaje Validacion)
        API-->>User: Alerta UI
    end

El sistema maneja estados lógicos para alertar sobre la vigencia:

  • VIGENTE: Fecha término futura o indefinida.
  • POR VENCER: Fecha término dentro de los próximos 30 días (Alerta Amarilla).
  • VENCIDO: Fecha término pasada (Alerta Roja).

El campo categoria_trabajador define reglas especiales de tributación o cotización:

  • DEPENDIENTE: Regla general.
  • CASA_PARTICULAR: Reglas especiales de indemnización y AFP.
  • MENOR_MAYOR: Aprendices o trabajadores jóvenes.