< Summary

Information
Class: FAU.Logica.Services.MotorAcumuladoresService
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/MotorAcumuladoresService.cs
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 100
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
CrearAcumulador()100%11100%
ValidarConfiguracion(...)100%88100%
ObtenerReporteSiif(...)100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Services/MotorAcumuladoresService.cs

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Services;
 5
 6public interface IMotorAcumuladoresService
 7{
 8    /// <summary>
 9    /// Crea una nueva instancia de acumulador inicializado en cero.
 10    /// </summary>
 11    Acumuladores CrearAcumulador();
 12
 13    /// <summary>
 14    /// Valida que la configuración del catálogo sea válida para el motor de acumuladores.
 15    /// Verifica que todos los items tengan ClasificacionSiif válida y no null.
 16    /// </summary>
 17    /// <exception cref="InvalidOperationException">
 18    /// Se lanza si se encuentran ítems con ClasificacionSiif inválida o null
 19    /// </exception>
 20    void ValidarConfiguracion(IEnumerable<CatalogoItem> catalogo);
 21
 22    /// <summary>
 23    /// Obtiene un DTO con los subtotales SIIF del acumulador para reporting.
 24    /// </summary>
 25    ReporteSiifDto ObtenerReporteSiif(Acumuladores acumuladores);
 26}
 27
 28public class MotorAcumuladoresService : IMotorAcumuladoresService
 29{
 30    /// <summary>
 31    /// Clasificaciones SIIF válidas
 32    /// </summary>
 133    private static readonly HashSet<string> ClasificacionesSiifValidas = new()
 134    {
 135        "HabNorGrab", "HabsAnGrab", "HabsNoGrab",
 136        "BenSocGrab", "BenSocNoGr",
 137        "DtoLegGrab", "DtoLegNoGr", "DtoPerGrab"
 138    };
 39
 40    /// <summary>
 41    /// Crea una nueva instancia de acumulador inicializado en cero.
 42    /// </summary>
 43    public Acumuladores CrearAcumulador()
 44    {
 245        return new Acumuladores();
 46    }
 47
 48    /// <summary>
 49    /// Valida que la configuración del catálogo sea válida para el motor de acumuladores.
 50    /// Verifica que todos los items tengan ClasificacionSiif válida y no null.
 51    /// </summary>
 52    /// <exception cref="InvalidOperationException">
 53    /// Se lanza si se encuentran ítems con ClasificacionSiif inválida o null
 54    /// </exception>
 55    public void ValidarConfiguracion(IEnumerable<CatalogoItem> catalogo)
 56    {
 557        var itemsInvalidos = new List<(int codigo, string? clasificacion)>();
 58
 3459        foreach (var item in catalogo)
 60        {
 1261            if (string.IsNullOrWhiteSpace(item.ClasificacionSiif))
 62            {
 263                itemsInvalidos.Add((item.Codigo, item.ClasificacionSiif));
 64            }
 1065            else if (!ClasificacionesSiifValidas.Contains(item.ClasificacionSiif))
 66            {
 167                itemsInvalidos.Add((item.Codigo, item.ClasificacionSiif));
 68            }
 69        }
 70
 571        if (itemsInvalidos.Count > 0)
 72        {
 373            var detalles = string.Join(", ",
 674                itemsInvalidos.Select(x => $"código {x.codigo}='{x.clasificacion}'"));
 375            throw new InvalidOperationException(
 376                $"Configuración inválida en catálogo_items. " +
 377                $"Ítems con ClasificacionSiif inválida o null: {detalles}. " +
 378                $"Valores permitidos: {string.Join(", ", ClasificacionesSiifValidas)}");
 79        }
 280    }
 81
 82    /// <summary>
 83    /// Obtiene un DTO con los subtotales SIIF del acumulador para reporting.
 84    /// </summary>
 85    public ReporteSiifDto ObtenerReporteSiif(Acumuladores acumuladores)
 86    {
 287        return new ReporteSiifDto
 288        {
 289            HabNorGrab = acumuladores.HabNorGrab,
 290            HabsAnGrab = acumuladores.HabsAnGrab,
 291            HabsNoGrab = acumuladores.HabsNoGrab,
 292            BenSocGrab = acumuladores.BenSocGrab,
 293            BenSocNoGr = acumuladores.BenSocNoGr,
 294            DtoLegGrab = acumuladores.DtoLegGrab,
 295            DtoLegNoGr = acumuladores.DtoLegNoGr,
 296            DtoPerGrab = acumuladores.DtoPerGrab,
 297            Liquido = acumuladores.Liquido
 298        };
 99    }
 100}