Skip to content

Previsions Service

Orchestrator · Remuneraciones

ServiceImposicionesPreview/Commit

PrevisionsService genera imposiciones mensuales a partir de liquidaciones. Consolida descuentos y aportes por institución, periodo y tipo de obligación, separando simulación (dryRun) de persistencia definitiva.

PiezaRuta
Servicesrc/domain/previsions/PrevisionsService.ts
Repositorysrc/domain/previsions/PrevisionsRepository.ts
Routesrc/routes/remuneraciones/previsiones.ts
TablasConsolidados previsionales del schema remuneraciones
async generate(
year: number,
month: number,
userId: string,
dryRun: boolean = true
): Promise<GenerationResult>
ParámetroTipoUso
yearnumberAño del periodo.
monthnumberMes del periodo, entre 1 y 12.
userIdstringUsuario que ejecuta el proceso.
dryRunbooleantrue simula, false persiste.
interface GenerationResult {
mensaje: string;
registros_generados: number;
monto_total_consolidado: number;
}
  1. Lee agregados del periodo desde liquidaciones y vistas de remuneraciones.

  2. Consolida AFP, salud, AFC, aportes patronales, impuesto único y retenciones soportadas.

  3. Mapea cada agregado a entidades de previsión por institución y tipo de obligación.

  4. Si dryRun es true, retorna totales sin persistir.

  5. Si dryRun es false, reemplaza transaccionalmente el consolidado del periodo.

ReglaCriterio
Idempotencia por periodoLa ejecución definitiva debe reemplazar el consolidado del mismo periodo de forma controlada.
Preview antes de commitLa UI debe permitir revisar montos antes de persistir.
Liquidaciones fuenteEl proceso depende de liquidaciones aprobadas o cerradas según regla vigente.
AuditoríauserId debe quedar asociado a la generación.
import { PrevisionsService } from '@/domain/previsions/PrevisionsService';
import { PrevisionsRepository } from '@/domain/previsions/PrevisionsRepository';
const repo = new PrevisionsRepository(pool);
const service = new PrevisionsService(repo);
const preview = await service.generate(2026, 5, 'user-123', true);
const result = await service.generate(2026, 5, 'user-123', false);