| | | 1 | | namespace FAU.Logica.Calculadores; |
| | | 2 | | |
| | | 3 | | public class CalculadorFactory : ICalculadorFactory |
| | | 4 | | { |
| | | 5 | | private readonly Dictionary<string, ICalculadorHaberes> _calculadores; |
| | | 6 | | |
| | 24 | 7 | | public CalculadorFactory( |
| | 24 | 8 | | Sit10Calculator sit10, |
| | 24 | 9 | | Sit30Calculator sit30, |
| | 24 | 10 | | Sit32Calculator sit32, |
| | 24 | 11 | | Sit50Calculator sit50, |
| | 24 | 12 | | Sit70Calculator sit70, |
| | 24 | 13 | | SitCadeteCalculator sitCadete, |
| | 24 | 14 | | AguinaldoCalculator aguinaldo, |
| | 24 | 15 | | ReservaCalculator reserva, |
| | 24 | 16 | | SitSubalternoReincorporadoCalculator subalternoReincorporado) |
| | | 17 | | { |
| | 24 | 18 | | _calculadores = new Dictionary<string, ICalculadorHaberes>(StringComparer.OrdinalIgnoreCase) |
| | 24 | 19 | | { |
| | 24 | 20 | | // ── Personal Superior ────────────────────────────────────────────────── |
| | 24 | 21 | | // FoxPro: situa_per=10 (y 12/14/16/20) → sum33101 |
| | 24 | 22 | | // SIT01 en actividad; SIT02 disponible; SIT14 no disponible; |
| | 24 | 23 | | // SIT16 reservista superior; SIT20 sueldo retenido |
| | 24 | 24 | | // → TODOS usan el mismo calculador (confirmado por SUM33100.PRG) |
| | 24 | 25 | | [nameof(Sit10Calculator)] = sit10, |
| | 24 | 26 | | ["Sit20Calculator"] = sit10, // SIT02 disponibilidad → MISMO que SIT01 |
| | 24 | 27 | | |
| | 24 | 28 | | // ── Personal Subalterno ──────────────────────────────────────────────── |
| | 24 | 29 | | // FoxPro: situa_per=30/31/33/34/36 → sum33106 |
| | 24 | 30 | | [nameof(Sit30Calculator)] = sit30, // SIT07 en actividad + sueldo retenido (sit36) |
| | 24 | 31 | | |
| | 24 | 32 | | // ── Escalafón Especialistas (AT / Técnico) ───────────────────────────── |
| | 24 | 33 | | // FoxPro: situa_per=10 + escal_mil=19 → sum33119 (variante de sum33101) |
| | 24 | 34 | | // Sit32Calculator maneja Prima Técnica A/B/C (sum33110 del AT) |
| | 24 | 35 | | [nameof(Sit32Calculator)] = sit32, |
| | 24 | 36 | | |
| | 24 | 37 | | // ── Reincorporados ───────────────────────────────────────────────────── |
| | 24 | 38 | | // FoxPro: situa_per=50 → sum33105 (Superior Reincorporado) |
| | 24 | 39 | | [nameof(Sit50Calculator)] = sit50, |
| | 24 | 40 | | |
| | 24 | 41 | | // FoxPro: situa_per=52 → sum33107 (Subalterno Reincorporado) |
| | 24 | 42 | | [nameof(SitSubalternoReincorporadoCalculator)] = subalternoReincorporado, |
| | 24 | 43 | | |
| | 24 | 44 | | // ── Civil ────────────────────────────────────────────────────────────── |
| | 24 | 45 | | // FoxPro: situa_per=74 → sum33174 (Civil Presupuestado S/Equip.) |
| | 24 | 46 | | [nameof(Sit70Calculator)] = sit70, |
| | 24 | 47 | | ["CivilCalculator"] = sit70, // Alias usado en el seed actual de la DB |
| | 24 | 48 | | |
| | 24 | 49 | | // ── Cadetes / Aspirantes ─────────────────────────────────────────────── |
| | 24 | 50 | | // FoxPro: situa_per=40 → sum33126 / situa_per=42 → sum33127 |
| | 24 | 51 | | [nameof(SitCadeteCalculator)] = sitCadete, |
| | 24 | 52 | | ["Sit40Calculator"] = sitCadete, // Alias usado en el seed actual de la DB |
| | 24 | 53 | | |
| | 24 | 54 | | // ── Bajas del mes (SAC Aguinaldo) ────────────────────────────────────── |
| | 24 | 55 | | // FoxPro: SIT14/15/18/20 del sistema legado |
| | 24 | 56 | | [nameof(AguinaldoCalculator)] = aguinaldo, |
| | 24 | 57 | | |
| | 24 | 58 | | // ── Reservistas ──────────────────────────────────────────────────────── |
| | 24 | 59 | | // FoxPro: situa_per=32 → sum33108 (Reservista Personal Subalterno) |
| | 24 | 60 | | // Nota: Reservista Superior (situa_per=16) usa Sit10Calculator (sum33101) |
| | 24 | 61 | | [nameof(ReservaCalculator)] = reserva, |
| | 24 | 62 | | ["ReservaCalculator"] = reserva, |
| | 24 | 63 | | |
| | 24 | 64 | | // TODO: SIT22 SubsidioCalculator — no existe en FoxPro histórico; pendiente DFC |
| | 24 | 65 | | }; |
| | 24 | 66 | | } |
| | | 67 | | |
| | | 68 | | public ICalculadorHaberes? Resolver(string? nombreCalculador) |
| | | 69 | | { |
| | 27 | 70 | | if (string.IsNullOrEmpty(nombreCalculador)) return null; |
| | 23 | 71 | | _calculadores.TryGetValue(nombreCalculador, out var calc); |
| | 23 | 72 | | return calc; |
| | | 73 | | } |
| | | 74 | | } |