Plataforma técnica · Orchestrator
Finiquitos (services)
Orchestrator Finiquitos Indemnizacion
El subdominio Finiquitos cierra el ciclo laboral del trabajador. FiniquitoService orquesta cálculo (vacaciones pendientes + indemnizaciones según causal + descuentos), genera el documento HTML/PDF y persiste el resultado para alimentar pagos y trazabilidad anual.
Es estructuralmente paralelo a payroll: tiene Calculator separado del Service, InputBuilder que arma contexto desde otros services, HtmlGenerator y Repository. La lectura contable equivalente vive en accounting/remuneraciones/finiquitos.
Servicio
Section titled “Servicio”| Servicio | Responsabilidad | Doc |
|---|---|---|
FiniquitoService | Orquesta cálculo de causal, indemnizaciones, feriado pendiente, descuentos y emisión del documento final. | → |
Estructura del dominio
Section titled “Estructura del dominio”flowchart LR
subgraph FIN["domain/finiquitos/"]
FS["FiniquitoService<br/>(orquestación)"]
FC["FiniquitoCalculator<br/>(cálculo puro)"]
FIB["FiniquitoInputBuilder<br/>(contexto)"]
FHG["FiniquitoHtmlGenerator<br/>(documento)"]
FF["FiniquitoFormatters<br/>(presentación)"]
FR["FiniquitoRepository<br/>(persistencia)"]
end
subgraph IN["Entrada"]
CON["ContractService"]
EMP["EmployeeService"]
PAY["PayrollService<br/>(últimas liquidaciones)"]
VAC["VacationService<br/>(saldo de feriado)"]
PARAM["parámetros legales<br/>(tope UF indemnización)"]
end
CON & EMP & PAY & VAC & PARAM --> FIB
FIB --> FC
FS --> FC
FC --> FR
FR --> FHG
FHG --> FF Patrones aplicados
Section titled “Patrones aplicados”| Patrón | Dónde |
|---|---|
| Strategy | FiniquitoCalculator aplica reglas distintas según causal_termino (arts. 159, 160, 161 del Código del Trabajo). |
| Builder | FiniquitoInputBuilder arma el contexto desde múltiples services antes de invocar al calculator. |
| Repository | FiniquitoRepository separa SQL del cálculo. |
| Template Method (HTML) | FiniquitoHtmlGenerator + FiniquitoFormatters arman el documento final. |
Reglas críticas
Section titled “Reglas críticas”- Causal define indemnización: art. 159 (mutuo acuerdo/renuncia/vencimiento plazo) y art. 160 (caducidad) → sin indemnización por años de servicio. Art. 161 (necesidades de la empresa, desahucio) → indemnización con tope 11 años.
- Años de servicio: mes superior a 15 días cuenta como año completo (art. 163).
- Tope UF indemnización: indemnización por años de servicio dentro del tope legal no tributa con impuesto único; el exceso sí.
- Aviso previo: si la causal art. 161 se aplica sin 30 días de aviso, paga sustitutiva (un mes de remuneración).
- Feriado legal y proporcional: siempre se paga (incluso causales sin indemnización). Feriado proporcional se calcula desde el último aniversario.
- Simulación vs. definitivo:
FiniquitoService.simularno persiste obligación; sólo el método definitivo emite el documento y registra el pasivo.
Eventos emitidos
Section titled “Eventos emitidos”| Evento | Trigger | Payload |
|---|---|---|
finiquito:emitido | FiniquitoService.emitir (post-COMMIT) | { finiquitoId, empleadoId, contratoId, fechaTermino, total, causal } |
finiquito:anulado | FiniquitoService.anular | { finiquitoId, motivo } |
Consumidores downstream
Section titled “Consumidores downstream”| Service | Qué consume |
|---|---|
EmployeeService | Marca al trabajador como FINIQUITADO con la fecha de término. |
ContractService | Cierra el contrato con motivo_termino y estado TERMINADO. |
VacationService | Liquida el saldo de feriado residual y cierra la provisión del trabajador. |
DJ1887Service | Incluye indemnizaciones pagadas en la declaración anual. |