< Summary

Information
Class: FAU.Logica.Calculadores.ReservaSuperiorCalculator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/ReservaSuperiorCalculator.cs
Line coverage
81%
Covered lines: 26
Uncovered lines: 6
Coverable lines: 32
Total lines: 69
Line coverage: 81.2%
Branch coverage
62%
Covered branches: 5
Total branches: 8
Branch coverage: 62.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
get_CodigosExcluidosDecreto()100%11100%
get_CodigosExcluidosSDL()100%11100%
CalcularItemsBase(...)66.66%8662.5%
CalcularDedicacionIntegral(...)50%22100%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6/// <summary>
 7/// Calculador para Personal Superior Reservista.
 8/// Basado en SUM33101.PRG: situa_per 16 usa sueldo reserva, reglas de oficiales y PAO.
 9///
 10/// Diferencias vs. Sit10Calculator:
 11/// - No liquida 042.103 ni 069.005 ni 069.009 (excluidos de decretos).
 12/// - 048.038 se emite pero NO entra en base SDL (SUM33101: no suma a W_Para_5_3).
 13/// - Usa PAO (código 60, 30% de wPara10) en lugar de Dedicación Integral.
 14/// </summary>
 15public class ReservaSuperiorCalculator : CalculadorHaberesBase
 16{
 117    private static readonly IReadOnlySet<int> ExcluidosDecreto = new HashSet<int>
 118    {
 119        Codigos.CompCombatientes,
 120        Codigos.DifEquipoSinAportes,
 121        Codigos.ViaticossinAportes
 122    };
 23
 124    private static readonly IReadOnlySet<int> ExcluidosSDL = new HashSet<int>
 125    {
 126        Codigos.PartEspLey18719
 127    };
 28
 4229    protected override IReadOnlySet<int> CodigosExcluidosDecreto => ExcluidosDecreto;
 1030    protected override IReadOnlySet<int> CodigosExcluidosSDL => ExcluidosSDL;
 31
 32    protected override decimal CalcularItemsBase(
 33        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 34    {
 235        var remBase = insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.SueldoReservaJornal)
 236            ?? insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.SueldoBase);
 237        if (remBase is null)
 38        {
 039            resultado.Incidencias.Add($"Sin remuneracion reservista (OG 011.001) para grado {funcionario.GradoId}");
 040            resultado.Estado = EstadoCalculo.Revisar;
 041            return 0m;
 42        }
 43
 244        AgregarItem(Codigos.SueldoReservaJornal, remBase.Monto, insumos, acumuladores, resultado);
 245        var wpara53 = remBase.Monto;
 46
 247        var remCargo = insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.CompCargo);
 248        if (remCargo is null)
 49        {
 050            resultado.Incidencias.Add($"Sin compensacion de cargo (OG 042.012) para grado {funcionario.GradoId}");
 051            resultado.Estado = EstadoCalculo.Revisar;
 052            return wpara53;
 53        }
 54
 255        AgregarItem(Codigos.CompCargo, remCargo.Monto, insumos, acumuladores, resultado);
 256        wpara53 += remCargo.Monto;
 57
 258        return wpara53;
 59    }
 60
 61    protected override void CalcularDedicacionIntegral(
 62        decimal wPara10, RelacionLaboral funcionario,
 63        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 64    {
 265        if (wPara10 <= 0) return;
 266        var permanenciaOrden = Math.Round(wPara10 * 0.30m, 2);
 267        AgregarItem(Codigos.PermanenciaOrdenSup, permanenciaOrden, insumos, acumuladores, resultado);
 268    }
 69}