< Summary

Information
Class: FAU.Entidades.Acumuladores
Assembly: FAU.Entidades
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Entidades/Acumuladores.cs
Line coverage
100%
Covered lines: 54
Uncovered lines: 0
Coverable lines: 54
Total lines: 104
Line coverage: 100%
Branch coverage
79%
Covered branches: 38
Total branches: 48
Branch coverage: 79.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_WPara53()100%11100%
get_WPara10()100%11100%
get_WPara20()100%11100%
get_WNominal()100%11100%
get_HabNorGrav()100%11100%
get_HabsAnGrav()100%11100%
get_HabsNoGrav()100%11100%
get_BenSocGrav()100%11100%
get_BenSocNoGrav()100%11100%
get_DtoLegGrav()100%11100%
get_DtoLegNoGrav()100%11100%
get_DtoPerGrav()100%11100%
get_Liquido()100%11100%
.cctor()100%11100%
AgregarItem(...)79.16%4848100%
Reiniciar()100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Entidades/Acumuladores.cs

#LineLine coverage
 1namespace FAU.Entidades;
 2
 3/// <summary>
 4/// Acumuladores del motor de cálculo de liquidación.
 5/// Mantiene en tiempo real las bases de cálculo y clasificaciones SIIF
 6/// conforme se procesan ítems durante el pipeline de liquidación.
 7/// </summary>
 8public class Acumuladores
 9{
 10    /// <summary>
 11    /// Bases de cálculo para aplicación de fórmulas
 12    /// </summary>
 11213    public decimal WPara53 { get; private set; } = 0m;      // Base SDL 5.3%
 1414    public decimal WPara10 { get; private set; } = 0m;      // Base DI 10% (= WPara53 + SDL 5.3%)
 1015    public decimal WPara20 { get; private set; } = 0m;      // Base Aporte Solidario 20% u otros
 49316    public decimal WNominal { get; private set; } = 0m;     // Suma de todos haberes gravados
 17
 18    /// <summary>
 19    /// Clasificaciones SIIF (Sistema Integrado de Información Financiera)
 20    /// </summary>
 51921    public decimal HabNorGrav { get; private set; } = 0m;   // Haberes normales gravados
 2122    public decimal HabsAnGrav { get; private set; } = 0m;   // Haberes antiguos gravados
 1323    public decimal HabsNoGrav { get; private set; } = 0m;   // Haberes no gravados
 1624    public decimal BenSocGrav { get; private set; } = 0m;   // Beneficios sociales gravados
 1325    public decimal BenSocNoGrav { get; private set; } = 0m;   // Beneficios sociales no gravados
 1526    public decimal DtoLegGrav { get; private set; } = 0m;   // Descuentos legales gravados (IRPF, Montepio, etc)
 1327    public decimal DtoLegNoGrav { get; private set; } = 0m;   // Descuentos legales no gravados
 1328    public decimal DtoPerGrav { get; private set; } = 0m;   // Descuentos personales gravados
 29
 30    /// <summary>
 31    /// Neto a pagar = haberes - descuentos (calculado automáticamente)
 32    /// </summary>
 33    public decimal Liquido
 34    {
 35        get
 36        {
 637            return HabNorGrav + HabsAnGrav + HabsNoGrav + BenSocGrav + BenSocNoGrav
 638                   - DtoLegGrav - DtoLegNoGrav - DtoPerGrav;
 39        }
 40    }
 41
 142    private static readonly HashSet<string> ClasificacionesSiifValidas = new()
 143    {
 144        "HabNorGrav", "HabsAnGrav", "HabsNoGrav",
 145        "BenSocGrav", "BenSocNoGrav",
 146        "DtoLegGrav", "DtoLegNoGrav", "DtoPerGrav"
 147    };
 48
 49    /// <summary>
 50    /// Agrega un ítem de liquidación al acumulador.
 51    /// El bucket SIIF se determina por ClasificacionSiif del CatalogoItem.
 52    /// </summary>
 53    public void AgregarItem(decimal monto, CatalogoItem catalogoItem)
 54    {
 26755        if (string.IsNullOrWhiteSpace(catalogoItem.ClasificacionSiif))
 156            throw new InvalidOperationException(
 157                $"ClasificacionSiif no puede ser null para el ítem código {catalogoItem.Codigo}");
 58
 26659        if (!ClasificacionesSiifValidas.Contains(catalogoItem.ClasificacionSiif))
 160            throw new InvalidOperationException(
 161                $"Clasificación SIIF no permitida: '{catalogoItem.ClasificacionSiif}' en ítem código {catalogoItem.Codig
 162                $"Valores permitidos: {string.Join(", ", ClasificacionesSiifValidas)}");
 63
 64        // Actualizar bases de cálculo según flags del catálogo
 31765        if (catalogoItem.ContribuyeWPara53) WPara53 += monto;
 26866        if (catalogoItem.ContribuyeWPara10) WPara10 += monto;
 26667        if (catalogoItem.ContribuyeWPara20) WPara20 += monto;
 49768        if (catalogoItem.ContribuyeWNominal) WNominal += monto;
 69
 70        // Acumuladores SIIF derivados de ClasificacionSiif
 26571        switch (catalogoItem.ClasificacionSiif)
 72        {
 50673            case "HabNorGrav":  HabNorGrav  += monto; break;
 874            case "HabsAnGrav":  HabsAnGrav  += monto; break;
 275            case "HabsNoGrav":  HabsNoGrav  += monto; break;
 476            case "BenSocGrav":  BenSocGrav  += monto; break;
 277            case "BenSocNoGrav": BenSocNoGrav += monto; break;
 478            case "DtoLegGrav":  DtoLegGrav  += monto; break;
 279            case "DtoLegNoGrav": DtoLegNoGrav += monto; break;
 180            case "DtoPerGrav":  DtoPerGrav  += monto; break;
 81        }
 182    }
 83
 84    /// <summary>
 85    /// Reinicia todos los acumuladores a cero.
 86    /// Útil para reutilizar la instancia o para testing.
 87    /// </summary>
 88    public void Reiniciar()
 89    {
 290        WPara53 = 0m;
 291        WPara10 = 0m;
 292        WPara20 = 0m;
 293        WNominal = 0m;
 94
 295        HabNorGrav = 0m;
 296        HabsAnGrav = 0m;
 297        HabsNoGrav = 0m;
 298        BenSocGrav = 0m;
 299        BenSocNoGrav = 0m;
 2100        DtoLegGrav = 0m;
 2101        DtoLegNoGrav = 0m;
 2102        DtoPerGrav = 0m;
 2103    }
 104}