< Summary

Information
Class: FAU.Logica.Calculadores.Sit30Calculator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/Sit30Calculator.cs
Line coverage
96%
Covered lines: 29
Uncovered lines: 1
Coverable lines: 30
Total lines: 65
Line coverage: 96.6%
Branch coverage
75%
Covered branches: 15
Total branches: 20
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalcularDedicacionIntegral(...)83.33%66100%
CalcularItemsBase(...)71.42%141495.83%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6public class Sit30Calculator : CalculadorHaberesBase
 7{
 8    // DI depende del grado (confirmado DFC 2026-06-10):
 9    //   SOM a Cbo.2da (orden DB >= 2): 35%
 10    //   SDO.1ra en adelante (orden DB <= 1): 30%
 11    // Se resuelve en tiempo de ejecución consultando InsumosPeriodo.OrdenPorGrado
 12    protected override void CalcularDedicacionIntegral(
 13        decimal wPara10, RelacionLaboral funcionario,
 14        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 15    {
 716        if (wPara10 <= 0) return;
 717        var orden = insumos.OrdenPorGrado.TryGetValue(funcionario.GradoId, out var o) ? o : (short)2;
 718        var porcentaje = orden >= 2 ? 0.35m : 0.30m;
 719        var di = Math.Round(wPara10 * porcentaje, 2);
 720        AgregarItem(43004, di, insumos, acumuladores, resultado);
 721    }
 22
 23    protected override decimal CalcularItemsBase(
 24        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 25    {
 26        // 011.000 — Sueldo Básico (obligatorio)
 727        var rem1 = insumos.ObtenerRemuneracion(funcionario.GradoId, 11000)
 728            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 11000");
 729        AgregarItem(11000, rem1.Monto, insumos, acumuladores, resultado);
 730        var wpara53 = rem1.Monto;
 31
 32        // 042.012 — Compensación al Cargo (obligatorio)
 733        var rem2 = insumos.ObtenerRemuneracion(funcionario.GradoId, 42012)
 734            ?? throw new InvalidOperationException($"Sin remuneración para grado {funcionario.GradoId} cod 42012");
 735        AgregarItem(42012, rem2.Monto, insumos, acumuladores, resultado);
 736        wpara53 += rem2.Monto;
 37
 38        // 041.003 — Permanencia en el Grado (tabla según escalafón subalterno)
 739        var anios = CalcularAniosServicio(funcionario, insumos);
 740        var permanencia = insumos.ObtenerPermanencia(funcionario.EscalafonId, anios);
 741        if (permanencia is not null)
 42        {
 143            var montoPermanencia = permanencia.Porcentaje.HasValue
 144                ? rem1.Monto * permanencia.Porcentaje.Value
 145                : permanencia.MontoFijo ?? 0m;
 146            if (montoPermanencia > 0)
 147                AgregarItem(41003, montoPermanencia, insumos, acumuladores, resultado);
 48        }
 49
 50        // 042.022 — Compensación Personal Subalterno (en lugar de 015.000)
 751        var rem6 = insumos.ObtenerRemuneracion(funcionario.GradoId, 42022);
 752        if (rem6 is not null)
 53        {
 654            AgregarItem(42022, rem6.Monto, insumos, acumuladores, resultado);
 655            wpara53 += rem6.Monto;
 56        }
 57
 58        // 069.008 — Viático de Alimentación (confirmado por DFC 2026-06-09)
 759        var rem5 = insumos.ObtenerRemuneracion(funcionario.GradoId, 69008);
 760        if (rem5 is not null)
 061            AgregarItem(69008, rem5.Monto, insumos, acumuladores, resultado);
 62
 763        return wpara53;
 64    }
 65}