< Summary

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

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CalcularDedicacionIntegral(...)0%4260%
CalcularItemsBase(...)0%272160%

File(s)

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

#LineLine coverage
 1using FAU.Entidades;
 2using FAU.Logica.DTOs;
 3
 4namespace FAU.Logica.Calculadores;
 5
 6/// <summary>
 7/// Calculador para Personal Subalterno Reincorporado (situación FoxPro 52).
 8/// Basado en SUM33107.PRG del sistema legado.
 9///
 10/// Equivalente a Sit50Calculator pero para personal subalterno.
 11/// Diferencias respecto a Sit50Calculator:
 12/// - Porcentaje DI: 35% (clases) en lugar de 50% (superior).
 13/// - Incluye Pasividad Militar si existe.
 14/// - Comp. Tropa (042.022) en lugar de Comp. Cargo oficial (042.012).
 15/// </summary>
 16public class SitSubalternoReincorporadoCalculator : CalculadorHaberesBase
 17{
 18    // DI basado en orden del grado (igual que Sit30Calculator):
 19    //   orden >= 2 (Cbo.2da–SOM): 35%  |  orden <= 1 (SDO.1ra): 30%
 20    protected override void CalcularDedicacionIntegral(
 21        decimal wPara10, RelacionLaboral funcionario,
 22        InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 23    {
 024        if (wPara10 <= 0) return;
 025        var orden = insumos.OrdenPorGrado.TryGetValue(funcionario.GradoId, out var o) ? o : (short)2;
 026        var porcentaje = orden >= 2 ? 0.35m : 0.30m;
 027        var di = Math.Round(wPara10 * porcentaje, 2);
 028        AgregarItem(43004, di, insumos, acumuladores, resultado);
 029    }
 30
 31    protected override decimal CalcularItemsBase(
 32        RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado)
 33    {
 34        // Usa el grado de reincorporación si existe, si no el grado actual
 035        var gradoId = funcionario.GradoReincorporacionId ?? funcionario.GradoId;
 36
 37        // 011.000 — Sueldo Básico (base del reincorporado subalterno)
 038        var rem1 = insumos.ObtenerRemuneracion(gradoId, 11000)
 039            ?? throw new InvalidOperationException($"Sin remuneración para grado {gradoId} cod 11000");
 40
 41        // Progresivo de retiro: reduce el sueldo base
 042        decimal progresivo = 0m;
 043        if (funcionario.HaberRetiro.HasValue && funcionario.PorcentajeProgresivo.HasValue)
 044            progresivo = funcionario.HaberRetiro.Value * funcionario.PorcentajeProgresivo.Value;
 45
 046        var normalLq = rem1.Monto - progresivo;
 047        AgregarItem(11000, normalLq, insumos, acumuladores, resultado);
 048        var wpara53 = normalLq;
 49
 50        // 042.022 — Compensación Personal Subalterno (opcional)
 051        var remComp = insumos.ObtenerRemuneracion(gradoId, 42022);
 052        if (remComp is not null)
 53        {
 054            AgregarItem(42022, remComp.Monto, insumos, acumuladores, resultado);
 055            wpara53 += remComp.Monto;
 56        }
 57
 58        // 041.003 — Permanencia en el Grado
 059        var anios = CalcularAniosServicio(funcionario, insumos);
 060        var permanencia = insumos.ObtenerPermanencia(funcionario.EscalafonId, anios);
 061        if (permanencia is not null)
 62        {
 063            var montoPerm = permanencia.Porcentaje.HasValue
 064                ? rem1.Monto * permanencia.Porcentaje.Value
 065                : permanencia.MontoFijo ?? 0m;
 066            if (montoPerm > 0)
 067                AgregarItem(41003, montoPerm, insumos, acumuladores, resultado);
 68        }
 69
 70        // TODO: Pasividad Militar (OG pendiente confirmar con DFC) si Personal.Pasividad > 0
 71        // TODO: 042.019 Riesgo de Vuelo (condicional)
 72        // TODO: 044.001 Progresivo Tropa (desde fecha de reincorporación)
 73
 074        return wpara53;
 75    }
 76}