Plataforma técnica · Orchestrator
Liquidaciones e Imposiciones (services)
Orchestrator Remuneraciones Imposiciones
El subdominio Liquidaciones e Imposiciones es el motor de cálculo del módulo. PayrollService consume contexto del maestro laboral, parámetros previsionales y resumen de asistencia para producir la liquidación del periodo. PrevisionsService toma esos resultados individuales y los consolida por institución acreedora para sustentar el pago Previred y la administración de APV.
Es el subdominio con mayor peso técnico: PayrollEngine ~1.5K LOC, PayrollInputBuilder ~500 LOC, generación PDF, consolidación de descuentos y aportes, separación de bases imponibles y tributables. La lectura contable equivalente vive en accounting/remuneraciones/liquidaciones-e-imposiciones.
Servicios
Section titled “Servicios”| Servicio | Responsabilidad | Doc |
|---|---|---|
PayrollService | Orquestación del cálculo mensual. Delega motor a PayrollEngine, contexto a PayrollInputBuilder, persistencia a PayrollRepository y PDF al template. | → |
PrevisionsService | Consolidación post-liquidación por institución + administración del APV (régimen A/B). | → |
Estructura del dominio payroll
Section titled “Estructura del dominio payroll”flowchart TD
subgraph PR["domain/payroll/"]
PS["PayrollService<br/>(orquestación)"]
PE["PayrollEngine<br/>(cálculo puro)"]
PIB["PayrollInputBuilder<br/>(contexto)"]
PRP["PayrollRepository<br/>(persistencia)"]
PDF["pdf-template<br/>(documento)"]
end
subgraph IN["Entrada"]
CON["ContractService"]
EMP["EmployeeService"]
ATT["AttendanceService"]
AFP["AfpService"]
ISA["IsapreService"]
PARAM["parámetros legales<br/>(UF, UTM, topes, tramos)"]
end
CON & EMP & ATT --> PIB
AFP & ISA & PARAM --> PIB
PIB --> PE
PS --> PE
PE --> PRP
PRP --> PDF
PRP -.-> PRV["PrevisionsService"] Patrones aplicados
Section titled “Patrones aplicados”| Patrón | Dónde |
|---|---|
| Strategy | PayrollEngine aplica reglas distintas según tipo_contrato, categoria_trabajador y modalidad de gratificación. |
| Builder | PayrollInputBuilder arma el contexto de cálculo desde múltiples services antes de invocar al motor. |
| Pipeline | El motor procesa haberes → base imponible → base tributable → descuentos → líquido en pasos secuenciales y trazables. |
| Repository | PayrollRepository separa persistencia del cálculo; el motor es puro y testeable. |
| Template Method (PDF) | pdf-template genera el documento a partir del resultado estructurado del motor. |
Reglas críticas
Section titled “Reglas críticas”- Preview vs. definitivo:
PayrollService.previewLiquidacioncalcula sin persistir obligación;PayrollService.cerrarPeriodopersiste y emite los eventos para imposiciones y contabilización. - Parámetros del periodo: todos los parámetros (UF, UTM, topes imponibles, tramos de impuesto único, comisiones AFP, planes Isapre) se leen vigentes a la fecha del periodo liquidado. El motor no acepta parámetros del periodo actual si el liquidado es anterior.
- APV régimen B: si el contrato declara APV régimen B, el motor calcula la base tributable después de descontar APV; régimen A no afecta la base.
- Imputación por concepto: cada concepto en
pago_conceptosdeclara sucuenta_debe/cuenta_haber; modificar la cuenta de un concepto no afecta el resto del motor. - AFC por tipo de contrato: tasas distintas para
INDEFINIDOvs.PLAZO_FIJO;PayrollEngineselecciona la tasa según el contrato vigente.
Eventos emitidos
Section titled “Eventos emitidos”| Evento | Trigger | Payload mínimo |
|---|---|---|
payroll:periodo_cerrado | PayrollService.cerrarPeriodo (post-COMMIT) | { periodo: { anio, mes }, totalLiquidaciones, totalLiquido } |
payroll:liquidacion_reprocesada | PayrollService.reprocesarLiquidacion | { liquidacionId, motivo, version } |
imposiciones:consolidadas | PrevisionsService.consolidarPeriodo | { periodo: { anio, mes }, totalPorInstitucion } |
Consumidores downstream
Section titled “Consumidores downstream”| Service | Qué consume |
|---|---|
FiniquitoService | Lee última liquidación del trabajador para determinar base indemnizatoria. |
DJ1887Service | Consume liquidaciones definitivas anuales para sustentar la declaración. |
F29GeneratorService | Consume el total de impuesto único retenido del periodo. |