Cálculos y Lógica de Negocio
La lógica de negocio de remuneraciones ha sido migrada desde SQL a TypeScript, encapsulada en “Calculadoras” puras de dominio. Cada calculadora es una clase estática sin efectos secundarios que resuelve un aspecto específico de la liquidación.
Ubicación del código fuente: src/domain/payroll/calculators/
Para el proceso de consolidación y pago de estas leyes, ver Generación de Imposiciones.
1. Sueldo Base (BaseSalaryCalculator)
Section titled “1. Sueldo Base (BaseSalaryCalculator)”Determina el sueldo base efectivo a pagar, respetando la proporcionalidad por días trabajados y asegurando el sueldo mínimo.
- Prorrateo: Se calcula el monto proporcional del sueldo base contrato según los días trabajados.
SueldoProporcional = \frac{SueldoBase}{30} \times DiasTrabajados
- Sueldo Mínimo: Se calcula igualmente el proporcional de la Renta Mínima Mensual (IMM).
- Garantía: El sistema paga el MAYOR valor entre:
- El proporcional del sueldo pactado.
- El proporcional del sueldo mínimo legal.
Esto asegura que si el sueldo base pactado es inferior al mínimo (por error o desactualización), el sistema “floors” el pago al mínimo legal proporcional.
export class BaseSalaryCalculator { static calculate(contractSalary: number, daysWorked: number, imm: number): number { const proportionalSalary = (contractSalary / 30) * daysWorked; const proportionalImm = (imm / 30) * daysWorked;
return Math.max(Math.round(proportionalSalary), Math.round(proportionalImm)); }}2. Gratificación Legal (GratificationCalculator)
Section titled “2. Gratificación Legal (GratificationCalculator)”Calcula el monto de gratificación legal según el artículo 47 o 50 del Código del Trabajo, aplicando los topes legales.
- Calcular Topes:
- Tope Anual:
4.75 * IMM - Tope Mensual:
Tope Anual / 12
- Tope Anual:
- Determinar Monto:
- Si es
abono_anual(Art. 50): El monto es igual al Tope Mensual directamente. - Si es
25pct(Art. 47):- Se calcula el 25% de los haberes imponibles.
- Se aplica el
MIN(25% Calculado, Tope Mensual).
- Si es
- Prorrateo: Si el trabajador laboró menos de 30 días, el monto resultante se prorratea.
export class GratificationCalculator { static calculate( taxableIncome: number, imm: number, mode: '25pct' | 'abono_anual' ): number { const annualCap = 4.75 * imm; const monthlyCap = annualCap / 12;
if (mode === 'abono_anual') return Math.round(monthlyCap);
const legal25 = taxableIncome * 0.25; return Math.min(Math.round(legal25), Math.round(monthlyCap)); }}3. Leyes Sociales (SocialLawsCalculator)
Section titled “3. Leyes Sociales (SocialLawsCalculator)”Calcula todas las cotizaciones previsionales obligatorias para el trabajador y aportes del empleador.
Aportes del Trabajador (Descuentos)
Section titled “Aportes del Trabajador (Descuentos)”Base Imponible * (10% + Comisión AFP). - La base imponible tiene un tope
(Tope Imponible para Pensiones, ej: 84.3 UF).
Ver HealthPlanCalculator. Normalmente 7% o Plan Pactado. - Usa el mismo
tope imponible que la AFP.
Base Imponible * 0.6%. - Tiene su propio tope imponible (Tope AFC, ej:
126.6 UF), distinto al de pensiones.
4. Plan de Salud (HealthPlanCalculator)
Section titled “4. Plan de Salud (HealthPlanCalculator)”Resuelve la complejidad de Isapres vs Fonasa y la aplicación del 7% legal.
- Base Imponible:
MIN(Sueldo Imponible, Tope Legal UF). - FONASA:
- El descuento es siempre el 7% de la base imponible.
- Ignora cualquier plan pactado.
- ISAPRE:
- Calcula el 7% Legal Obligatorio.
- Calcula el valor del Plan Pactado (UF * ValorUF + CLP).
- El descuento es:
MAX(7% Legal, Plan Pactado).
5. Impuesto Único (TaxCalculator)
Section titled “5. Impuesto Único (TaxCalculator)”Calcula el Impuesto Único de Segunda Categoría (IUSC) aplicado a las rentas del trabajo.
- Base Tributaria:
Total Imponible - Descuentos Legales (AFP + Salud + AFC) - APV - Otros Descuentos Legales. - Determinar Tramo: Busca en la tabla de impuesto mensual (Service Internal Revenue - SII) el tramo donde cae la base tributaria.
- Cálculo Final:
Impuesto = (Base Tributaria * Factor) - Rebaja.- Si existen Créditos (ej: Donaciones), se restan al impuesto determinado.