< Summary

Information
Class: FAU.Logica.Calculadores.AguinaldoCalculator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/AguinaldoCalculator.cs
Line coverage
87%
Covered lines: 27
Uncovered lines: 4
Coverable lines: 31
Total lines: 60
Line coverage: 87%
Branch coverage
77%
Covered branches: 14
Total branches: 18
Branch coverage: 77.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalcularAsync(...)77.77%191887.09%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6/// <summary>
 7/// Calculador de aguinaldo (SAC) para bajas del mes (SIT14/SIT15/SIT18/SIT20).
 8/// Emite el ítem 059.000 con monto = total_haberes_gravados_semestre / 12.
 9/// </summary>
 10public class AguinaldoCalculator : ICalculadorHaberes
 11{
 12    // Código de catálogo del ítem SAC (059.000)
 13    private const int CodigoSac = 59000;
 14
 15    public Task<ResultadoCalculo> CalcularAsync(
 16        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores)
 17    {
 418        var resultado = new ResultadoCalculo();
 19        try
 20        {
 421            var semestre = insumos.ParametroPeriodo.Mes <= 6 ? (short)1 : (short)2;
 422            var aguinaldo = insumos.AguinaldosPorPersona.TryGetValue(funcionario.PersonaId, out var ag)
 323                ? ag.FirstOrDefault(a => a.Anio == insumos.ParametroPeriodo.Anio && a.Semestre == semestre)
 424                : null;
 25
 426            if (aguinaldo == null)
 27            {
 128                resultado.Incidencias.Add(
 129                    $"Sin registro de aguinaldo para {insumos.ParametroPeriodo.Anio} semestre {semestre}. Ítem 059.000 n
 130                resultado.Estado = EstadoCalculo.Revisar;
 131                return Task.FromResult(resultado);
 32            }
 33
 334            var monto = Math.Round(aguinaldo.TotalHaberesGravadosSemestre / 12m, 2);
 335            if (monto > 0)
 36            {
 637                var catalogoItem = insumos.CatalogoItems.FirstOrDefault(c => c.Codigo == CodigoSac);
 338                resultado.Items.Add(new ItemCalculado
 339                {
 340                    CodigoConcepto = CodigoSac,
 341                    NombreConcepto = catalogoItem?.Nombre ?? "Sueldo Anual Complementario (059.000)",
 342                    Importe = monto
 343                });
 344                if (catalogoItem is not null)
 345                    acumuladores.AgregarItem(monto, catalogoItem);
 46            }
 47
 348            resultado.Estado = resultado.Incidencias.Count > 0
 349                ? EstadoCalculo.Revisar
 350                : EstadoCalculo.Calculado;
 351        }
 052        catch (Exception ex)
 53        {
 054            resultado.Estado = EstadoCalculo.Error;
 055            resultado.MensajeError = ex.Message;
 056        }
 57
 358        return Task.FromResult(resultado);
 159    }
 60}