< 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
90%
Covered lines: 29
Uncovered lines: 3
Coverable lines: 32
Total lines: 75
Line coverage: 90.6%
Branch coverage
77%
Covered branches: 14
Total branches: 18
Branch coverage: 77.7%
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%
.cctor()100%11100%
get_CodigosExcluidosDecreto()100%11100%
CalcularItemsBase(...)75%171686.95%
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    // CompCargo (42012) se agrega en CalcularItemsBase con wpara53 += rem2.Monto.
 12    // Excluirlo de AgregarItemsDecreto evita double-counting.
 113    private static readonly IReadOnlySet<int> _excluidos = new HashSet<int> { Codigos.CompCargo };
 79214    protected override IReadOnlySet<int> CodigosExcluidosDecreto => _excluidos;
 15
 16    protected override decimal CalcularItemsBase(
 17        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 18    {
 19        // 011.000 — Sueldo Básico (obligatorio)
 3520        var rem1 = insumos.ObtenerRemuneracion(funcionario.GradoId, 11000)
 3521            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 11000");
 3322        AgregarItem(11000, rem1.Monto, insumos, acumuladores, resultado);
 3323        var wpara53 = rem1.Monto;
 24
 25        // 042.012 — Compensación al Cargo (obligatorio)
 3326        var rem2 = insumos.ObtenerRemuneracion(funcionario.GradoId, 42012)
 3327            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 42012");
 3328        AgregarItem(42012, rem2.Monto, insumos, acumuladores, resultado);
 3329        wpara53 += rem2.Monto;
 30
 31        // 041.003 — Permanencia en el Grado (entra en SDL, PDF confirmado)
 3332        var meses = CalcularMesesPermanencia(funcionario, insumos);
 3333        var riesgoVuelo = funcionario.RiesgoVuelo.HasValue && funcionario.RiesgoVuelo.Value > 0;
 3334        var permanencia = insumos.ObtenerPermanencia(funcionario.EscalafonId, funcionario.GradoId, meses, riesgoVuelo);
 3335        if (permanencia is not null)
 36        {
 237            var montoPermanencia = permanencia.Porcentaje.HasValue
 238                ? rem1.Monto * permanencia.Porcentaje.Value
 239                : permanencia.MontoFijo ?? 0m;
 240            if (montoPermanencia > 0)
 41            {
 242                AgregarItem(41003, montoPermanencia, insumos, acumuladores, resultado);
 243                wpara53 += montoPermanencia; // 041.003 entra en base SDL/DI
 44            }
 45        }
 46
 47        // 069.008 — Viático PS c/aportes: solo si CAT_VIAT > 0
 3348        if (funcionario.CategoriaViatico > 0)
 49        {
 050            var rem5 = insumos.ObtenerRemuneracion(funcionario.GradoId, 69008);
 051            if (rem5 is not null)
 052                AgregarItem(69008, rem5.Monto, insumos, acumuladores, resultado);
 53        }
 54
 55        // SDL y DI son calculados por la clase base DESPUÉS de AgregarItemsDecreto
 3356        return wpara53;
 57    }
 58
 59    // 015.000 — Gastos de Representación: entra en DI pero no en SDL.
 60    // Se agrega en DI via override de CalcularDedicacionIntegral
 61    protected override void CalcularDedicacionIntegral(
 62        decimal wPara10, RelacionLaboral funcionario,
 63        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 64    {
 65        // 015.000 se suma a wPara10 antes de calcular DI (PDF fórmula 043.004)
 3366        var remGastosRep = insumos.ObtenerRemuneracion(funcionario.GradoId, 15000);
 3367        if (remGastosRep is not null)
 68        {
 169            AgregarItem(15000, remGastosRep.Monto, insumos, acumuladores, resultado);
 170            wPara10 += remGastosRep.Monto;
 71        }
 72
 3373        base.CalcularDedicacionIntegral(wPara10, funcionario, insumos, acumuladores, resultado);
 3374    }
 75}