< 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
86%
Covered lines: 38
Uncovered lines: 6
Coverable lines: 44
Total lines: 111
Line coverage: 86.3%
Branch coverage
72%
Covered branches: 16
Total branches: 22
Branch coverage: 72.7%
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{
 537    public long PeriodoId { get; init; }
 5048    public ParametroPeriodo ParametroPeriodo { get; init; } = null!;
 12919    public IReadOnlyDictionary<long, IReadOnlyDictionary<int, RemuneracionGrado>> RemuneracionesPorGrado { get; init; } 
 16010    public IReadOnlyDictionary<long, IReadOnlyList<TablaPermanencia>> PermanenciasPorEscalafon { get; init; } = new Dict
 15211    public IReadOnlyList<FranjaIrpf> FranjasIrpf { get; init; } = Array.Empty<FranjaIrpf>();
 43012    public IReadOnlyList<CatalogoItem> CatalogoItems { get; init; } = Array.Empty<CatalogoItem>();
 11613    public IReadOnlyDictionary<long, IReadOnlyList<BeneficioSocial>> BeneficiosPorPersona { get; init; } = new Dictionar
 11614    public IReadOnlyDictionary<long, IReadOnlyList<ItemLoteCompensacion>> CompensacionesPorPersona { get; init; } = new 
 10015    public IReadOnlyDictionary<long, IReadOnlyList<NovedadPeriodo>> NovedadesPorPersona { get; init; } = new Dictionary<
 16    // beneficioId → hijos registrados (para ASIGNACION_FAMILIAR)
 11517    public IReadOnlyDictionary<long, IReadOnlyList<BeneficioSocialBeneficiario>> BeneficiariosPorBeneficio { get; init; 
 18
 19    // Instructivos DFC — tipoFranja → registro vigente
 11520    public IReadOnlyDictionary<string, InstructivoAsigFamiliar> InstructivoAsigFamiliar { get; init; } = new Dictionary<
 21    // Instructivos DFC — numCategoria → registro vigente
 11522    public IReadOnlyDictionary<int, InstructivoPsf> InstructivoPsf { get; init; } = new Dictionary<int, InstructivoPsf>(
 23    // Tabla hogar constituido — tramos ordenados (hasta_haberes ASC, NULL al final)
 11524    public IReadOnlyList<TablaHogarConstituido> TablaPorHogar { get; init; } = Array.Empty<TablaHogarConstituido>();
 25
 26    // Aguinaldos (SAC) del año por persona — usado por AguinaldoCalculator (SIT14/15/18/20)
 9227    public IReadOnlyDictionary<long, IReadOnlyList<Aguinaldo>> AguinaldosPorPersona { get; init; } = new Dictionary<long
 28
 29    // Diferencias de haberes por ascenso (OG 042.615) — cargado desde compensaciones_diferencia_ascenso
 11530    public IReadOnlyDictionary<long, CompensacionDiferenciaAscenso> CompensacionesDiferenciaAscensoPorPersona { get; ini
 31
 32    // Orden de cada grado (para determinar porcentaje DI: clases 35% vs alistados 30%)
 33    // Cargado desde la tabla grados; key = grado_id, value = grado.orden
 9134    public IReadOnlyDictionary<long, short> OrdenPorGrado { get; init; } = new Dictionary<long, short>();
 35
 36    // Descuentos personales aprobados por persona (COFAnS, retención, comedor)
 8437    public IReadOnlyDictionary<long, IReadOnlyList<DescuentoPersonalPeriodo>> DescuentosPersonalesPorPersona { get; init
 38
 39    public RemuneracionGrado? ObtenerRemuneracion(long gradoId, int codigoItem)
 40    {
 117441        if (RemuneracionesPorGrado.TryGetValue(gradoId, out var items) && items.TryGetValue(codigoItem, out var remunera
 42        {
 14343            return remuneracion;
 44        }
 45
 103146        return null;
 47    }
 48
 49    public TablaPermanencia? ObtenerPermanencia(long escalafonId, int aniosServicio)
 50    {
 4451        if (PermanenciasPorEscalafon.TryGetValue(escalafonId, out var filas))
 52        {
 853            return filas.FirstOrDefault(p => p.AniosDesde <= aniosServicio && aniosServicio <= p.AniosHasta);
 54        }
 55
 4056        return null;
 57    }
 58
 59    public IReadOnlyList<BeneficioSocial> ObtenerBeneficios(long personaId)
 60    {
 3261        return BeneficiosPorPersona.TryGetValue(personaId, out var beneficios)
 3262            ? beneficios
 3263            : Array.Empty<BeneficioSocial>();
 64    }
 65
 66    public IReadOnlyList<ItemLoteCompensacion> ObtenerCompensaciones(long personaId)
 67    {
 3268        return CompensacionesPorPersona.TryGetValue(personaId, out var items)
 3269            ? items
 3270            : Array.Empty<ItemLoteCompensacion>();
 71    }
 72
 73    public NovedadPeriodo? ObtenerNovedad(long personaId)
 74    {
 175        return NovedadesPorPersona.TryGetValue(personaId, out var novedades)
 176            ? novedades.FirstOrDefault()
 177            : null;
 78    }
 79
 80    /// <summary>
 81    /// Retorna la novedad de tipo 'dias_eximidos' para el prorrateo salarial.
 82    /// 'subsidio_enfermedad' no reduce el sueldo base — tiene su propio cálculo (pendiente).
 83    /// </summary>
 84    public NovedadPeriodo? ObtenerNovedadEximidos(long personaId)
 85    {
 1586        if (!NovedadesPorPersona.TryGetValue(personaId, out var novedades))
 1387            return null;
 488        return novedades.FirstOrDefault(n => n.Tipo == "dias_eximidos");
 89    }
 90
 91    public IReadOnlyList<NovedadPeriodo> ObtenerNovedades(long personaId)
 92    {
 093        return NovedadesPorPersona.TryGetValue(personaId, out var novedades)
 094            ? novedades
 095            : Array.Empty<NovedadPeriodo>();
 96    }
 97
 98    public CompensacionDiferenciaAscenso? ObtenerDiferenciaAscenso(long personaId)
 99    {
 31100        return CompensacionesDiferenciaAscensoPorPersona.TryGetValue(personaId, out var diff)
 31101            ? diff
 31102            : null;
 103    }
 104
 105    public IReadOnlyList<DescuentoPersonalPeriodo> ObtenerDescuentosPersonales(long personaId)
 106    {
 0107        return DescuentosPersonalesPorPersona.TryGetValue(personaId, out var descuentos)
 0108            ? descuentos
 0109            : Array.Empty<DescuentoPersonalPeriodo>();
 110    }
 111}