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.
Compliance Laboral Asistido 🛡️
Section titled “Compliance Laboral Asistido 🛡️”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ón | Descripción | Comportamiento |
|---|---|---|
| Jornada Obligatoria | Verifica que el contrato tenga asignada una Jornada de Trabajo activa. | Bloqueante: Error si falta jornada. |
| Previsión y Salud | Exige que el empleado tenga AFP y Sistema de Salud (Fonasa/Isapre) asignados. | Bloqueante: Necesario para la Cláusula Séptima. |
| Coherencia de Fechas | Valida que Fecha Término > Fecha Inicio (en contratos a plazo). | Bloqueante: Previene contratos con vigencia negativa. |
| Formato Legal | Asegura que RUTs y Fechas sigan el formato estándar chileno. | Automático: Formatea datos al vuelo. |
Generación de Documentos (PDF)
Section titled “Generación de Documentos (PDF)”El motor de generación de contratos transforma los datos estructurados en un documento legalmente válido y estéticamente profesional.
Plantilla Dinámica Inteligente
Section titled “Plantilla Dinámica Inteligente”El generador (ContractHtmlGenerator) adapta las cláusulas según la configuración del contrato:
-
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…”.
- Dinámica: En lugar de texto estático, obtiene los días y horas exactos desde la definición de la Jornada (
-
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]”.
-
Cláusula Séptima (Previsión):
- Inyecta automáticamente los nombres de la AFP (ej: “Habitat”) y Salud (ej: “Fonasa”) del empleado.
Self-Healing & Regeneración 🔄
Section titled “Self-Healing & Regeneración 🔄”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
Ciclo de Vida del Contrato
Section titled “Ciclo de Vida del Contrato”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).
Categorización
Section titled “Categorización”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.