< Summary

Information
Class: FAU.Logica.Validadores.ValidadorFranjaIrpf
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Validadores/ValidadorFranjaIrpf.cs
Line coverage
89%
Covered lines: 17
Uncovered lines: 2
Coverable lines: 19
Total lines: 84
Line coverage: 89.4%
Branch coverage
100%
Covered branches: 32
Total branches: 32
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ValidarFranja(...)100%3232100%
ValidarContinuidad(...)100%210%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Validadores/ValidadorFranjaIrpf.cs

#LineLine coverage
 1using FAU.Logica.DTOs;
 2
 3namespace FAU.Logica.Validadores;
 4
 5/// <summary>
 6/// Validador de reglas de negocio para franjas IRPF
 7/// </summary>
 8public class ValidadorFranjaIrpf
 9{
 10    /// <summary>
 11    /// Valida que los datos de una franja cumplan todas las reglas de negocio
 12    /// </summary>
 13    /// <param name="numeroFranja">Número de franja (1-7)</param>
 14    /// <param name="desdeBpc">BPC desde</param>
 15    /// <param name="hastaBpc">BPC hasta (nullable para franja 7)</param>
 16    /// <param name="tasa">Tasa impositiva (0-1)</param>
 17    /// <returns>Tupla (esValido, mensajeError)</returns>
 18    public static (bool EsValido, string? MensajeError) ValidarFranja(
 19        short numeroFranja,
 20        decimal desdeBpc,
 21        decimal? hastaBpc,
 22        decimal tasa)
 23    {
 24        // Validar número de franja
 4925        if (numeroFranja < 1 || numeroFranja > 7)
 426            return (false, "El número de franja debe estar entre 1 y 7");
 27
 28        // Validar que valores sean positivos PRIMERO
 4529        if (desdeBpc < 0)
 130            return (false, "desde_bpc no puede ser negativo");
 31
 4432        if (hastaBpc.HasValue && hastaBpc < 0)
 133            return (false, "hasta_bpc no puede ser negativo");
 34
 35        // Validar tasa
 4336        if (tasa < 0 || tasa > 1)
 237            return (false, "La tasa debe estar entre 0 y 1");
 38
 39        // Validar que la franja 1 tenga desde_bpc = 0
 4140        if (numeroFranja == 1 && desdeBpc != 0)
 241            return (false, "La franja 1 debe tener desde_bpc igual a 0");
 42
 43        // Validar que la franja 7 no tenga hasta_bpc definido
 3944        if (numeroFranja == 7 && hastaBpc.HasValue)
 245            return (false, "La franja 7 (última franja) no puede tener un límite superior (hasta_bpc debe ser NULL)");
 46
 47        // Validar que franjas 2-6 tengan hasta_bpc definido
 3748        if (numeroFranja >= 2 && numeroFranja <= 6 && !hastaBpc.HasValue)
 549            return (false, $"La franja {numeroFranja} debe tener un límite superior (hasta_bpc)");
 50
 51        // Validar rango: desde_bpc < hasta_bpc
 3252        if (hastaBpc.HasValue && desdeBpc >= hastaBpc)
 353            return (false, "El valor desde_bpc debe ser menor que hasta_bpc");
 54
 2955        return (true, null);
 56    }
 57
 58    /// <summary>
 59    /// Valida que el rango de una nueva franja sea coherente con las existentes
 60    /// </summary>
 61    /// <param name="numeroFranja">Número de franja</param>
 62    /// <param name="desdeBpc">BPC desde</param>
 63    /// <param name="hastaBpc">BPC hasta</param>
 64    /// <param name="franjaAnterior">Franja anterior del mismo número (si existe)</param>
 65    /// <returns>Tupla (esValido, mensajeError)</returns>
 66    public static (bool EsValido, string? MensajeError) ValidarContinuidad(
 67        short numeroFranja,
 68        decimal desdeBpc,
 69        decimal? hastaBpc,
 70        FranjaIrpfDto? franjaAnterior)
 71    {
 072        if (franjaAnterior == null)
 073            return (true, null);
 74
 75        // Si hay franja anterior del mismo número, verificar que:
 76        // - La nueva franja no se solape con el período vigente anterior
 77        // - La nueva franja empieza donde o después de la anterior
 78
 79        // Esto se valida a nivel de fechas en el servicio
 80        // Aquí solo validamos los rangos BPC
 81
 82        return (true, null);
 83    }
 84}