< Summary

Information
Class: FAU.Logica.Calculadores.ReservaCalculator
Assembly: FAU.Logica
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/ReservaCalculator.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 17
Coverable lines: 17
Total lines: 63
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalcularItemsBase(...)0%2040%
CalcularDedicacionIntegral(...)0%620%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.Logica/Calculadores/ReservaCalculator.cs

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6/// <summary>
 7/// Calculador para Personal Subalterno Reservista (situación FoxPro 32).
 8/// Basado en SUM33108.PRG del sistema legado.
 9///
 10/// Diferencias respecto a Sit30Calculator:
 11/// - Sueldo base: OG 011.001 (11001) — el "sueldo reservista"
 12///   Antes de 2026 era OG 031.000; desde 2026 es 011.001 (confirmado DFC 2026-06-08).
 13/// - NO tiene Dedicación Integral (043.004).
 14/// - EN SU LUGAR tiene Permanencia a la Orden (042.014) = 30% de WPara10.
 15/// - SDL (048.012) se calcula sobre WPara53 (simplificado; en FoxPro es condicional por grado).
 16/// </summary>
 17public class ReservaCalculator : CalculadorHaberesBase
 18{
 19    protected override decimal CalcularItemsBase(
 20        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 21    {
 22        // 011.001 — Sueldo Reservista (desde 2026; antes OG 031.000)
 023        var remBase = insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.SueldoReservista);
 024        if (remBase is null)
 25        {
 026            resultado.Incidencias.Add(
 027                $"Sin remuneración reservista (OG 011.001) para grado {funcionario.GradoId}");
 028            resultado.Estado = EstadoCalculo.Revisar;
 029            return 0m;
 30        }
 31
 032        AgregarItem(Codigos.SueldoReservista, remBase.Monto, insumos, acumuladores, resultado);
 033        var wpara53 = remBase.Monto;
 34
 35        // 042.022 — Compensación de Tropa (code 15 en FoxPro, condicional por grado)
 036        var remComp = insumos.ObtenerRemuneracion(funcionario.GradoId, Codigos.CompSuboficiales);
 037        if (remComp is not null)
 38        {
 039            AgregarItem(Codigos.CompSuboficiales, remComp.Monto, insumos, acumuladores, resultado);
 040            wpara53 += remComp.Monto;
 41        }
 42
 43        // TODO: 042.019 Riesgo de Vuelo (si relacion_laboral.riesgo_vuelo = "S" y grado > 2)
 44        // TODO: 044.001 Progresivo Tropa (si años_servicio > 0)
 45        // TODO: 042.025 Prima Técnica Sgtos (si grado == SOM o Sgto.1ro)
 46
 047        return wpara53;
 48    }
 49
 50    /// <summary>
 51    /// Reservistas NO tienen DI (043.004).
 52    /// En su lugar tienen Permanencia a la Orden (042.014) = 30% de WPara10.
 53    /// Confirmado por SUM33108.PRG (code 60 = W_Para_10 × 30%).
 54    /// </summary>
 55    protected override void CalcularDedicacionIntegral(
 56        decimal wPara10, RelacionLaboral funcionario,
 57        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 58    {
 059        if (wPara10 <= 0) return;
 060        var pao = Math.Round(wPara10 * 0.30m, 2);
 061        AgregarItem(Codigos.PermanenciaOrden, pao, insumos, acumuladores, resultado);
 062    }
 63}