Skip to content
GitHub

Generación de Liquidaciones

El proceso de Generación de Liquidaciones es el evento mensual principal del sistema. Transforma los datos contractuales y de asistencia en documentos legales de pago persistidos.

El PayrollService orquesta la generación siguiendo un ciclo Fetch → Calculate → Persist.

  1. Fetch (Obtención de Contexto): El PayrollRepository ejecuta queries paralelas para obtener: - Contrato Vigente y Empleado. - Resumen de Asistencia del Mes. - Indicadores Económicos (UF, UTM) y Tasas (AFP, Impuesto). 2. Calculate (Motor Puro): Se transforman los datos a un PayrollInput normalizado y se invoca al PayrollEngine (Sin efectos secundarios). 3. Persist (Persistencia): Si no es un Dry Run, el resultado se guarda transaccionalmente: - Se crea cabecera en remuneraciones.liquidaciones. - Se insertan detalles en remuneraciones.liquidaciones_detalle.
sequenceDiagram
    participant API
    participant Service as PayrollService
    participant Repo as PayrollRepository
    participant Engine as PayrollEngine
    participant DB

    API->>Service: generatePayroll(contractId, mes)

    Service->>Repo: getPayrollContext()
    Repo-->>Service: {Contrato, Asistencia, KPIs}

    Service->>Service: mapContextToInput()

    Service->>Engine: calculate(Input)
    Engine-->>Service: Result (JSON)

    alt is Dry Run?
        Service-->>API: Retorna Preview (Sin guardar)
    else is Real
        Service->>Repo: savePayroll(Result)
        Repo->>DB: INSERT liquidaciones...
        Service-->>API: Retorna ID + Estado
    end

| Componente | Archivo | Responsabilidad | | :-------------- | :--------------------- | :---------------------------------------------------------------------------------- | --------------------- | | Orquestador | PayrollService.ts | Ver Código | Coordina I/O y Motor. | | Repositorio | PayrollRepository.ts | Ver Código | Queries SQL masivas. |