< 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: 27
Uncovered lines: 6
Coverable lines: 33
Total lines: 70
Line coverage: 81.8%
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.CompCargo,           // manejado en CalcularItemsBase con wpara53 +=
 120        Codigos.CompCombatientes,
 121        Codigos.DifEquipoSinAportes,
 122        Codigos.ViaticossinAportes
 123    };
 24
 125    private static readonly IReadOnlySet<int> ExcluidosSDL = new HashSet<int>
 126    {
 127        Codigos.PartEspLey18719
 128    };
 29
 4830    protected override IReadOnlySet<int> CodigosExcluidosDecreto => ExcluidosDecreto;
 831    protected override IReadOnlySet<int> CodigosExcluidosSDL => ExcluidosSDL;
 32
 33    protected override decimal CalcularItemsBase(
 34        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 35    {
 236        var remBase = insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.SueldoReservaJornal)
 237            ?? insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.SueldoBase);
 238        if (remBase is null)
 39        {
 040            resultado.Incidencias.Add($"Sin remuneracion reservista (OG 011.001) para grado {funcionario.GradoId}");
 041            resultado.Estado = EstadoCalculo.Revisar;
 042            return 0m;
 43        }
 44
 245        AgregarItem(Codigos.SueldoReservaJornal, remBase.Monto, insumos, acumuladores, resultado);
 246        var wpara53 = remBase.Monto;
 47
 248        var remCargo = insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.CompCargo);
 249        if (remCargo is null)
 50        {
 051            resultado.Incidencias.Add($"Sin compensacion de cargo (OG 042.012) para grado {funcionario.GradoId}");
 052            resultado.Estado = EstadoCalculo.Revisar;
 053            return wpara53;
 54        }
 55
 256        AgregarItem(Codigos.CompCargo, remCargo.Monto, insumos, acumuladores, resultado);
 257        wpara53 += remCargo.Monto;
 58
 259        return wpara53;
 60    }
 61
 62    protected override void CalcularDedicacionIntegral(
 63        decimal wPara10, RelacionLaboral funcionario,
 64        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 65    {
 266        if (wPara10 <= 0) return;
 267        var permanenciaOrden = Math.Round(wPara10 * 0.30m, 2);
 268        AgregarItem(Codigos.PermanenciaOrdenSup, permanenciaOrden, insumos, acumuladores, resultado);
 269    }
 70}