< Summary

Information
Class: FAU.Logica.Calculadores.Sit32Calculator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/Sit32Calculator.cs
Line coverage
66%
Covered lines: 16
Uncovered lines: 8
Coverable lines: 24
Total lines: 52
Line coverage: 66.6%
Branch coverage
55%
Covered branches: 11
Total branches: 20
Branch coverage: 55%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalcularItemsBase(...)55%352066.66%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6public class Sit32Calculator : CalculadorHaberesBase
 7{
 8    protected override decimal CalcularItemsBase(
 9        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 10    {
 11        // 011.000 — Sueldo Básico (obligatorio)
 312        var rem1 = insumos.ObtenerRemuneracion(funcionario.GradoId, 11000)
 313            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 11000");
 314        AgregarItem(11000, rem1.Monto, insumos, acumuladores, resultado);
 315        var wpara53 = rem1.Monto;
 16
 17        // 042.012 — Compensación al Cargo (obligatorio)
 318        var rem2 = insumos.ObtenerRemuneracion(funcionario.GradoId, 42012)
 319            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 42012");
 320        AgregarItem(42012, rem2.Monto, insumos, acumuladores, resultado);
 321        wpara53 += rem2.Monto;
 22
 23        // 041.003 — Permanencia en el Grado (tabla AT por escalafón)
 324        var meses = CalcularMesesPermanencia(funcionario, insumos);
 325        var riesgoVuelo = funcionario.RiesgoVuelo.HasValue && funcionario.RiesgoVuelo.Value > 0;
 326        var permanencia = insumos.ObtenerPermanencia(funcionario.EscalafonId, funcionario.GradoId, meses, riesgoVuelo);
 327        if (permanencia is not null)
 28        {
 029            var montoPermanencia = permanencia.Porcentaje.HasValue
 030                ? rem1.Monto * permanencia.Porcentaje.Value
 031                : permanencia.MontoFijo ?? 0m;
 032            if (montoPermanencia > 0)
 033                AgregarItem(41003, montoPermanencia, insumos, acumuladores, resultado);
 34        }
 35
 36        // Prima Técnica A/B/C: la emite la clase base en AgregarItemsCondicionales con el OG real
 37        // 042.092 (con aporte) según funcionario.PrimaTecnica (A/B/C). No entra en la base del SDL.
 38        // (Se eliminó el código 7 temporal que además producía doble-conteo con la clase base.)
 339        if (string.IsNullOrEmpty(funcionario.PrimaTecnica) || funcionario.PrimaTecnica == "VACIO")
 140            resultado.Incidencias.Add("Funcionario AT sin clasificación de Prima Técnica");
 41
 42        // 069.008 — Viático PS c/aportes: solo si CAT_VIAT > 0
 343        if (funcionario.CategoriaViatico > 0)
 44        {
 045            var rem5 = insumos.ObtenerRemuneracion(funcionario.GradoId, 69008);
 046            if (rem5 is not null)
 047                AgregarItem(69008, rem5.Monto, insumos, acumuladores, resultado);
 48        }
 49
 350        return wpara53;
 51    }
 52}