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