< Summary

Information
Class: FAU.Logica.DTOs.InsumosPeriodo
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/DTOs/InsumosPeriodo.cs
Line coverage
87%
Covered lines: 41
Uncovered lines: 6
Coverable lines: 47
Total lines: 123
Line coverage: 87.2%
Branch coverage
73%
Covered branches: 19
Total branches: 26
Branch coverage: 73%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/DTOs/InsumosPeriodo.cs

#LineLine coverage
 1using FAU.Entidades;
 2
 3namespace FAU.Logica.DTOs;
 4
 5public sealed class InsumosPeriodo
 6{
 577    public long PeriodoId { get; init; }
 6568    public ParametroPeriodo ParametroPeriodo { get; init; } = null!;
 14579    public IReadOnlyDictionary<long, IReadOnlyDictionary<int, RemuneracionGrado>> RemuneracionesPorGrado { get; init; } 
 18610    public IReadOnlyDictionary<long, IReadOnlyList<TablaPermanencia>> PermanenciasPorEscalafon { get; init; } = new Dict
 18211    public IReadOnlyList<FranjaIrpf> FranjasIrpf { get; init; } = Array.Empty<FranjaIrpf>();
 12    // Tramos de Sanidad Militar (Art. 94 Ley 18.834), ordenados por Desde ASC
 15413    public IReadOnlyList<TramoSanidadMilitar> TramosSanidad { get; init; } = Array.Empty<TramoSanidadMilitar>();
 49314    public IReadOnlyList<CatalogoItem> CatalogoItems { get; init; } = Array.Empty<CatalogoItem>();
 14115    public IReadOnlyDictionary<long, IReadOnlyList<BeneficioSocial>> BeneficiosPorPersona { get; init; } = new Dictionar
 14016    public IReadOnlyDictionary<long, IReadOnlyList<ItemLoteCompensacion>> CompensacionesPorPersona { get; init; } = new 
 12017    public IReadOnlyDictionary<long, IReadOnlyList<NovedadPeriodo>> NovedadesPorPersona { get; init; } = new Dictionary<
 18    // beneficioId → hijos registrados (para ASIGNACION_FAMILIAR)
 14019    public IReadOnlyDictionary<long, IReadOnlyList<BeneficioSocialBeneficiario>> BeneficiariosPorBeneficio { get; init; 
 20
 21    // Instructivos DFC — tipoFranja → registro vigente
 14022    public IReadOnlyDictionary<string, InstructivoAsigFamiliar> InstructivoAsigFamiliar { get; init; } = new Dictionary<
 23    // Instructivos DFC — numCategoria → registro vigente
 14024    public IReadOnlyDictionary<int, InstructivoPsf> InstructivoPsf { get; init; } = new Dictionary<int, InstructivoPsf>(
 25    // Tabla hogar constituido — tramos ordenados (hasta_haberes ASC, NULL al final)
 14026    public IReadOnlyList<TablaHogarConstituido> TablaPorHogar { get; init; } = Array.Empty<TablaHogarConstituido>();
 27
 28    // Aguinaldos (SAC) del año por persona — usado por AguinaldoCalculator (SIT14/15/18/20)
 11029    public IReadOnlyDictionary<long, IReadOnlyList<Aguinaldo>> AguinaldosPorPersona { get; init; } = new Dictionary<long
 30
 31    // Diferencias de haberes por ascenso (OG 042.615) — cargado desde compensaciones_diferencia_ascenso
 13932    public IReadOnlyDictionary<long, CompensacionDiferenciaAscenso> CompensacionesDiferenciaAscensoPorPersona { get; ini
 33
 34    // Orden de cada grado (para determinar porcentaje DI: clases 35% vs alistados 30%)
 35    // Cargado desde la tabla grados; key = grado_id, value = grado.orden
 10936    public IReadOnlyDictionary<long, short> OrdenPorGrado { get; init; } = new Dictionary<long, short>();
 37
 38    // Descuentos personales aprobados por persona (COFAnS, retención, comedor)
 10239    public IReadOnlyDictionary<long, IReadOnlyList<DescuentoPersonalPeriodo>> DescuentosPersonalesPorPersona { get; init
 40
 41    public RemuneracionGrado? ObtenerRemuneracion(long gradoId, int codigoItem)
 42    {
 131943        if (RemuneracionesPorGrado.TryGetValue(gradoId, out var items) && items.TryGetValue(codigoItem, out var remunera
 44        {
 15745            return remuneracion;
 46        }
 47
 116248        return null;
 49    }
 50
 51    public TablaPermanencia? ObtenerPermanencia(long escalafonId, int aniosServicio)
 52    {
 4953        if (PermanenciasPorEscalafon.TryGetValue(escalafonId, out var filas))
 54        {
 855            return filas.FirstOrDefault(p => p.AniosDesde <= aniosServicio && aniosServicio <= p.AniosHasta);
 56        }
 57
 4558        return null;
 59    }
 60
 61    /// <summary>
 62    /// Retorna el tramo de Sanidad Militar cuyo rango [Desde, Hasta] contiene la base imponible.
 63    /// Hasta == null representa el último tramo (sin tope superior).
 64    /// </summary>
 65    public TramoSanidadMilitar? ObtenerTramoSanidad(decimal baseImponible)
 66    {
 4567        return TramosSanidad.FirstOrDefault(t =>
 5868            baseImponible >= t.Desde && (t.Hasta is null || baseImponible <= t.Hasta));
 69    }
 70
 71    public IReadOnlyList<BeneficioSocial> ObtenerBeneficios(long personaId)
 72    {
 3973        return BeneficiosPorPersona.TryGetValue(personaId, out var beneficios)
 3974            ? beneficios
 3975            : Array.Empty<BeneficioSocial>();
 76    }
 77
 78    public IReadOnlyList<ItemLoteCompensacion> ObtenerCompensaciones(long personaId)
 79    {
 3880        return CompensacionesPorPersona.TryGetValue(personaId, out var items)
 3881            ? items
 3882            : Array.Empty<ItemLoteCompensacion>();
 83    }
 84
 85    public NovedadPeriodo? ObtenerNovedad(long personaId)
 86    {
 187        return NovedadesPorPersona.TryGetValue(personaId, out var novedades)
 188            ? novedades.FirstOrDefault()
 189            : null;
 90    }
 91
 92    /// <summary>
 93    /// Retorna la novedad de tipo 'dias_eximidos' para el prorrateo salarial.
 94    /// 'subsidio_enfermedad' no reduce el sueldo base — tiene su propio cálculo (pendiente).
 95    /// </summary>
 96    public NovedadPeriodo? ObtenerNovedadEximidos(long personaId)
 97    {
 1798        if (!NovedadesPorPersona.TryGetValue(personaId, out var novedades))
 1499            return null;
 6100        return novedades.FirstOrDefault(n => n.Tipo == "dias_eximidos");
 101    }
 102
 103    public IReadOnlyList<NovedadPeriodo> ObtenerNovedades(long personaId)
 104    {
 0105        return NovedadesPorPersona.TryGetValue(personaId, out var novedades)
 0106            ? novedades
 0107            : Array.Empty<NovedadPeriodo>();
 108    }
 109
 110    public CompensacionDiferenciaAscenso? ObtenerDiferenciaAscenso(long personaId)
 111    {
 37112        return CompensacionesDiferenciaAscensoPorPersona.TryGetValue(personaId, out var diff)
 37113            ? diff
 37114            : null;
 115    }
 116
 117    public IReadOnlyList<DescuentoPersonalPeriodo> ObtenerDescuentosPersonales(long personaId)
 118    {
 0119        return DescuentosPersonalesPorPersona.TryGetValue(personaId, out var descuentos)
 0120            ? descuentos
 0121            : Array.Empty<DescuentoPersonalPeriodo>();
 122    }
 123}