< Summary

Information
Class: FAU.Logica.Calculadores.CalculadorHaberesBase
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/CalculadorHaberesBase.cs
Line coverage
100%
Covered lines: 37
Uncovered lines: 0
Coverable lines: 37
Total lines: 77
Line coverage: 100%
Branch coverage
88%
Covered branches: 16
Total branches: 18
Branch coverage: 88.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalcularAsync(...)100%88100%
AgregarItemsDecreto(...)100%44100%
CalcularDedicacionIntegral(...)100%11100%
AgregarItem(...)66.66%66100%
CalcularAniosServicio(...)100%11100%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6public abstract class CalculadorHaberesBase : ICalculadorHaberes
 7{
 8    public Task<ResultadoCalculo> CalcularAsync(
 9        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores)
 10    {
 2611        var resultado = new ResultadoCalculo();
 12        try
 13        {
 2614            var (wpara53, wPara10) = CalcularItemsBase(funcionario, insumos, acumuladores, resultado);
 2415            AgregarItemsDecreto(funcionario, insumos, acumuladores, resultado);
 16
 2417            if (wPara10 > 0)
 2118                CalcularDedicacionIntegral(wPara10, insumos, acumuladores, resultado);
 19
 2420            if (!funcionario.Situacion.AfectaCobro)
 1021                foreach (var item in resultado.Items)
 422                    item.EsReferencia = true;
 23
 2424            resultado.Estado = resultado.Incidencias.Count > 0
 2425                ? EstadoCalculo.Revisar
 2426                : EstadoCalculo.Calculado;
 2427        }
 228        catch (Exception ex)
 29        {
 230            resultado.Estado = EstadoCalculo.Error;
 231            resultado.MensajeError = ex.Message;
 232        }
 33
 2634        return Task.FromResult(resultado);
 35    }
 36
 37    protected abstract (decimal WPara53, decimal WPara10) CalcularItemsBase(
 38        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado);
 39
 40    protected virtual void AgregarItemsDecreto(
 41        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 42    {
 2143        int[] codigosDecreto = [38, 39, 41, 154, 225];
 25244        foreach (var cod in codigosDecreto)
 45        {
 10546            var rem = insumos.ObtenerRemuneracion(funcionario.GradoId, cod);
 10547            if (rem is not null)
 348                AgregarItem(cod, rem.Monto, insumos, acumuladores, resultado);
 49        }
 2150    }
 51
 52    private static void CalcularDedicacionIntegral(
 53        decimal wPara10, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 54    {
 2155        AgregarItem(17, wPara10 * 0.10m, insumos, acumuladores, resultado);
 2156    }
 57
 58    protected static void AgregarItem(
 59        int codigo, decimal monto, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 60    {
 57761        var catalogoItem = insumos.CatalogoItems.FirstOrDefault(c => c.Codigo == codigo);
 9662        resultado.Items.Add(new ItemCalculado
 9663        {
 9664            CodigoConcepto = codigo,
 9665            NombreConcepto = catalogoItem?.Nombre ?? $"Concepto {codigo}",
 9666            Importe = monto
 9667        });
 9668        if (catalogoItem is not null)
 9669            acumuladores.AgregarItem(monto, catalogoItem);
 9670    }
 71
 72    protected static int CalcularAniosServicio(RelacionLaboral funcionario, InsumosPeriodo insumos)
 73    {
 2174        var fechaPeriodo = new DateTime(insumos.ParametroPeriodo.Anio, insumos.ParametroPeriodo.Mes, 1);
 2175        return Math.Max(0, (int)((fechaPeriodo - funcionario.FechaInicio).TotalDays / 365.25));
 76    }
 77}