< Summary

Information
Class: FAU.Logica.Calculadores.Sit10Calculator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/Sit10Calculator.cs
Line coverage
100%
Covered lines: 27
Uncovered lines: 0
Coverable lines: 27
Total lines: 68
Line coverage: 100%
Branch coverage
92%
Covered branches: 13
Total branches: 14
Branch coverage: 92.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_PorcentajeDedicacionIntegral()100%11100%
CalcularItemsBase(...)91.66%1212100%
CalcularDedicacionIntegral(...)100%22100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/Sit10Calculator.cs

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6public class Sit10Calculator : CalculadorHaberesBase
 7{
 8    // Personal Superior: 50% según PDF fórmula 043.004
 339    protected override decimal PorcentajeDedicacionIntegral => 0.50m;
 10
 11    protected override decimal CalcularItemsBase(
 12        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 13    {
 14        // 011.000 — Sueldo Básico (obligatorio)
 3515        var rem1 = insumos.ObtenerRemuneracion(funcionario.GradoId, 11000)
 3516            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 11000");
 3317        AgregarItem(11000, rem1.Monto, insumos, acumuladores, resultado);
 3318        var wpara53 = rem1.Monto;
 19
 20        // 042.012 — Compensación al Cargo (obligatorio)
 3321        var rem2 = insumos.ObtenerRemuneracion(funcionario.GradoId, 42012)
 3322            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 42012");
 3323        AgregarItem(42012, rem2.Monto, insumos, acumuladores, resultado);
 3324        wpara53 += rem2.Monto;
 25
 26        // 041.003 — Permanencia en el Grado (entra en SDL, PDF confirmado)
 3327        var anios = CalcularAniosServicio(funcionario, insumos);
 3328        var permanencia = insumos.ObtenerPermanencia(funcionario.EscalafonId, anios);
 3329        if (permanencia is not null)
 30        {
 231            var montoPermanencia = permanencia.Porcentaje.HasValue
 232                ? rem1.Monto * permanencia.Porcentaje.Value
 233                : permanencia.MontoFijo ?? 0m;
 234            if (montoPermanencia > 0)
 35            {
 236                AgregarItem(41003, montoPermanencia, insumos, acumuladores, resultado);
 37                // 041.003 entra en SDL (la base retornada es la SDL base)
 38                // Se agrega aquí sólo si queremos que suba wpara53 — pero el PDF no lo incluye en SDL formula
 39                // TODO: verificar si 041.003 entra o no en SDL
 40            }
 41        }
 42
 43        // 069.008 — Viático de Alimentación (confirmado por DFC 2026-06-09)
 3344        var rem5 = insumos.ObtenerRemuneracion(funcionario.GradoId, 69008);
 3345        if (rem5 is not null)
 246            AgregarItem(69008, rem5.Monto, insumos, acumuladores, resultado);
 47
 48        // SDL y DI son calculados por la clase base DESPUÉS de AgregarItemsDecreto
 3349        return wpara53;
 50    }
 51
 52    // 015.000 — Gastos de Representación: entra en DI pero no en SDL.
 53    // Se agrega en DI via override de CalcularDedicacionIntegral
 54    protected override void CalcularDedicacionIntegral(
 55        decimal wPara10, RelacionLaboral funcionario,
 56        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 57    {
 58        // 015.000 se suma a wPara10 antes de calcular DI (PDF fórmula 043.004)
 3359        var remGastosRep = insumos.ObtenerRemuneracion(funcionario.GradoId, 15000);
 3360        if (remGastosRep is not null)
 61        {
 162            AgregarItem(15000, remGastosRep.Monto, insumos, acumuladores, resultado);
 163            wPara10 += remGastosRep.Monto;
 64        }
 65
 3366        base.CalcularDedicacionIntegral(wPara10, funcionario, insumos, acumuladores, resultado);
 3367    }
 68}