< Summary

Information
Class: FAU.Logica.Validadores.CompensacionValidator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Validadores/CompensacionValidator.cs
Line coverage
61%
Covered lines: 19
Uncovered lines: 12
Coverable lines: 31
Total lines: 114
Line coverage: 61.2%
Branch coverage
42%
Covered branches: 11
Total branches: 26
Branch coverage: 42.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ValidarNumerico(...)0%620%
ValidarDecimalPositivo(...)25%10428.57%
ObtenerErrorPrimaTecnica(...)50%2266.66%
ObtenerErrorPrimaSolidaria(...)50%2266.66%
ObtenerErrorRiesgoVuelo(...)50%5466.66%
ObtenerErrorAniosInactivos(...)50%5466.66%
ValidarCompensaciones(...)50%88100%

File(s)

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

#LineLine coverage
 1using System.Globalization;
 2using System.Text.RegularExpressions;
 3
 4namespace FAU.Logica.Validadores;
 5
 6/// <summary>
 7/// Validador para campos de compensación del personal
 8/// </summary>
 9public static class CompensacionValidator
 10{
 11    /// <summary>
 12    /// Valida que un valor sea numérico (entero o decimal)
 13    /// </summary>
 14    /// <param name="valor">Valor a validar</param>
 15    /// <returns>True si es válido o null/vacío</returns>
 16    public static bool ValidarNumerico(string? valor)
 17    {
 018        if (string.IsNullOrWhiteSpace(valor))
 019            return true; // Es opcional
 20
 21        // Permitir números enteros y decimales (con coma o punto)
 022        return Regex.IsMatch(valor.Trim(), @"^-?\d+([.,]\d+)?$");
 23    }
 24
 25    /// <summary>
 26    /// Valida que sea un número decimal válido y positivo
 27    /// </summary>
 28    /// <param name="valor">Valor a validar</param>
 29    /// <returns>True si es válido o null/vacío</returns>
 30    public static bool ValidarDecimalPositivo(string? valor)
 31    {
 1232        if (string.IsNullOrWhiteSpace(valor))
 1233            return true; // Es opcional
 34
 035        var valorTrimmed = valor.Trim();
 36
 37        // Reemplazar coma por punto para estandarizar
 038        valorTrimmed = valorTrimmed.Replace(',', '.');
 39
 040        if (!decimal.TryParse(valorTrimmed, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var numero
 041            return false;
 42
 043        return numero >= 0; // Debe ser positivo
 44    }
 45
 46    /// <summary>
 47    /// Obtiene un mensaje de error si la Prima Técnica es inválida
 48    /// </summary>
 49    public static string? ObtenerErrorPrimaTecnica(string? valor)
 50    {
 651        if (!ValidarDecimalPositivo(valor))
 52        {
 053            return $"Prima Técnica debe ser un número decimal positivo válido. Valor ingresado: {valor}";
 54        }
 655        return null;
 56    }
 57
 58    /// <summary>
 59    /// Obtiene un mensaje de error si la Prima Solidaria Familiar es inválida
 60    /// </summary>
 61    public static string? ObtenerErrorPrimaSolidaria(string? valor)
 62    {
 663        if (!ValidarDecimalPositivo(valor))
 64        {
 065            return $"Prima Solidaria Familiar debe ser un número decimal positivo válido. Valor ingresado: {valor}";
 66        }
 667        return null;
 68    }
 69
 70    /// <summary>
 71    /// Obtiene un mensaje de error si el Riesgo de Vuelo es inválido
 72    /// </summary>
 73    public static string? ObtenerErrorRiesgoVuelo(decimal? valor)
 74    {
 675        if (valor.HasValue && valor.Value < 0)
 76        {
 077            return $"Riesgo de Vuelo debe ser un número positivo. Valor ingresado: {valor}";
 78        }
 679        return null;
 80    }
 81
 82    /// <summary>
 83    /// Obtiene un mensaje de error si los Años Inactivos son inválidos
 84    /// </summary>
 85    public static string? ObtenerErrorAniosInactivos(int? valor)
 86    {
 687        if (valor.HasValue && valor.Value < 0)
 88        {
 089            return $"Años Inactivos debe ser un número positivo. Valor ingresado: {valor}";
 90        }
 691        return null;
 92    }
 93
 94    /// <summary>
 95    /// Valida todos los campos de compensación y retorna el primer error encontrado
 96    /// </summary>
 97    public static string? ValidarCompensaciones(decimal? riesgoVuelo, string? primaTecnica,
 98        string? primaSolidaria, int? aniosInactivos)
 99    {
 6100        var error = ObtenerErrorRiesgoVuelo(riesgoVuelo);
 6101        if (error != null) return error;
 102
 6103        error = ObtenerErrorPrimaTecnica(primaTecnica);
 6104        if (error != null) return error;
 105
 6106        error = ObtenerErrorPrimaSolidaria(primaSolidaria);
 6107        if (error != null) return error;
 108
 6109        error = ObtenerErrorAniosInactivos(aniosInactivos);
 6110        if (error != null) return error;
 111
 6112        return null;
 113    }
 114}