< Summary

Information
Class: FAU.DataAccess.ApplicationDbContext
Assembly: FAU.DataAccess
File(s): /home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/ApplicationDbContext.cs
Line coverage
100%
Covered lines: 348
Uncovered lines: 0
Coverable lines: 348
Total lines: 511
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Personas()100%11100%
get_Usuarios()100%11100%
get_Roles()100%11100%
get_Acciones()100%11100%
get_Contextos()100%11100%
get_BitacorasAuditoria()100%11100%
get_Bancos()100%11100%
get_Acreedores()100%11100%
get_CuentasBancarias()100%11100%
get_TiposBeneficio()100%11100%
get_BeneficiosSociales()100%11100%
get_ParametrosPeriodo()100%11100%
get_RelacionesLaborales()100%11100%
get_MovimientosLaborales()100%11100%
get_Regimenes()100%11100%
get_Escalafones()100%11100%
get_Grados()100%11100%
get_Situaciones()100%11100%
get_Programas()100%11100%
get_Unidades()100%11100%
get_SubUnidades()100%11100%
get_TiposMovimiento()100%11100%
get_MotivosBaja()100%11100%
get_FranjasIrpf()100%11100%
get_IrpfsMensual()100%11100%
get_IrpfsDetalleFranjas()100%11100%
get_TramosSanidadMilitar()100%11100%
get_Dependientes()100%11100%
get_Form3100()100%11100%
get_Form3100PersonasACargo()100%11100%
get_Documentos()100%11100%
get_DescuentosPersonalesPeriodo()100%11100%
get_FictosPersona()100%11100%
get_TiposCompensacion()100%11100%
get_ConfigCompensaciones()100%11100%
get_LotesCompensacion()100%11100%
get_ItemsLoteCompensacion()100%11100%
get_CatalogoItems()100%11100%
get_RemuneracionesGrado()100%11100%
get_TablaPermanencias()100%11100%
get_TarifasPorCategoria()100%11100%
get_CompPersonal048018()100%11100%
get_InstructivosAsigFamiliar()100%11100%
get_InstructivosPsf()100%11100%
get_TablasHogarConstituido()100%11100%
get_PeriodosLiquidacion()100%11100%
get_SnapshotsInsumos()100%11100%
get_NovedadesPeriodo()100%11100%
get_Retroactividades()100%11100%
get_RetroactividadItems()100%11100%
get_BeneficioSocialBeneficiarios()100%11100%
get_Aguinaldos()100%11100%
get_HistoricoLiquidaciones()100%11100%
get_CompensacionesDiferenciaAscenso()100%11100%
get_LiquidacionItems()100%11100%
get_LiquidacionEstadosPersonal()100%11100%
get_LiquidacionResumenes()100%11100%
get_AguinaldosBaja()100%11100%
get_ItemsAguinaldoBaja()100%11100%
get_IncidenciasCalculo()100%11100%
OnModelCreating(...)100%11100%

File(s)

/home/runner/work/Sistema.Liquidacion.BE/Sistema.Liquidacion.BE/FAU.DataAccess/ApplicationDbContext.cs

#LineLine coverage
 1using FAU.Entidades;
 2using Microsoft.EntityFrameworkCore;
 3
 4namespace FAU.DataAccess;
 5
 6public class ApplicationDbContext : DbContext
 7{
 5928    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
 9    {
 59210    }
 11
 12    // DbSets para las entidades principales
 85213    public DbSet<Persona> Personas { get; set; }
 64614    public DbSet<Usuario> Usuarios { get; set; }
 61515    public DbSet<Rol> Roles { get; set; }
 59516    public DbSet<Accion> Acciones { get; set; }
 59517    public DbSet<Contexto> Contextos { get; set; }
 60218    public DbSet<BitacoraAuditoria> BitacorasAuditoria { get; set; }
 64719    public DbSet<Banco> Bancos { get; set; }
 68520    public DbSet<Acreedor> Acreedores { get; set; }
 61021    public DbSet<CuentaBancaria> CuentasBancarias { get; set; }
 68322    public DbSet<TipoBeneficio> TiposBeneficio { get; set; }
 67823    public DbSet<BeneficioSocial> BeneficiosSociales { get; set; }
 66224    public DbSet<ParametroPeriodo> ParametrosPeriodo { get; set; }
 25
 26    // Personal y catálogos
 93127    public DbSet<RelacionLaboral> RelacionesLaborales { get; set; }
 61328    public DbSet<MovimientoLaboral> MovimientosLaborales { get; set; }
 81029    public DbSet<Regimen> Regimenes { get; set; }
 72930    public DbSet<Escalafon> Escalafones { get; set; }
 75531    public DbSet<Grado> Grados { get; set; }
 75432    public DbSet<Situacion> Situaciones { get; set; }
 69533    public DbSet<Programa> Programas { get; set; }
 69534    public DbSet<Unidad> Unidades { get; set; }
 60435    public DbSet<SubUnidad> SubUnidades { get; set; }
 61536    public DbSet<TipoMovimiento> TiposMovimiento { get; set; }
 60637    public DbSet<MotivoBaja> MotivosBaja { get; set; }
 38
 39    // IRPF
 69340    public DbSet<FranjaIrpf> FranjasIrpf { get; set; }
 59941    public DbSet<IrpfMensual> IrpfsMensual { get; set; }
 59942    public DbSet<IrpfDetalleFranjas> IrpfsDetalleFranjas { get; set; }
 43
 44    // Descuentos legales
 60845    public DbSet<TramoSanidadMilitar> TramosSanidadMilitar { get; set; }
 46
 47    // Dependientes (mantenido por compatibilidad, deprecado)
 63248    public DbSet<Dependiente> Dependientes { get; set; }
 49
 50    // Form 3100
 59251    public DbSet<Form3100> Form3100 { get; set; }
 59252    public DbSet<Form3100PersonaACargo> Form3100PersonasACargo { get; set; }
 53
 54    // Documentos (almacenamiento genérico)
 60755    public DbSet<Documento> Documentos { get; set; }
 56
 57    // Descuentos personales por período
 63658    public DbSet<DescuentoPersonalPeriodo> DescuentosPersonalesPeriodo { get; set; }
 65559    public DbSet<FictoPersona> FictosPersona { get; set; }
 60
 61    // Compensaciones
 69462    public DbSet<TipoCompensacion> TiposCompensacion { get; set; }
 63763    public DbSet<ConfigCompensacion> ConfigCompensaciones { get; set; }
 65564    public DbSet<LoteCompensacion> LotesCompensacion { get; set; }
 64165    public DbSet<ItemLoteCompensacion> ItemsLoteCompensacion { get; set; }
 66
 67    // Instructivo / Tablas de referencia (no atadas a compensaciones)
 76768    public DbSet<CatalogoItem> CatalogoItems { get; set; }
 70569    public DbSet<RemuneracionGrado> RemuneracionesGrado { get; set; }
 62470    public DbSet<TablaPermanencia> TablaPermanencias { get; set; }
 60871    public DbSet<TarifaPorCategoria> TarifasPorCategoria { get; set; }
 66472    public DbSet<CompPersonal048018> CompPersonal048018 { get; set; }
 73
 74    // Instructivos de beneficios sociales (DFC)
 60975    public DbSet<InstructivoAsigFamiliar> InstructivosAsigFamiliar { get; set; }
 60976    public DbSet<InstructivoPsf> InstructivosPsf { get; set; }
 60977    public DbSet<TablaHogarConstituido> TablasHogarConstituido { get; set; }
 78
 79    // Apertura de períodos
 73980    public DbSet<Periodo> PeriodosLiquidacion { get; set; }
 61281    public DbSet<SnapshotInsumos> SnapshotsInsumos { get; set; }
 82
 83    // Motor de cálculo
 65484    public DbSet<NovedadPeriodo> NovedadesPeriodo { get; set; }
 59385    public DbSet<Retroactividad> Retroactividades { get; set; }
 59286    public DbSet<RetroactividadItem> RetroactividadItems { get; set; }
 87
 88    // Beneficiarios de beneficios sociales (hijos para asig. familiar, etc.)
 61089    public DbSet<BeneficioSocialBeneficiario> BeneficioSocialBeneficiarios { get; set; }
 90
 91    // Aguinaldo (SAC) y compensaciones por diferencia de ascenso
 59292    public DbSet<Aguinaldo> Aguinaldos { get; set; }
 69393    public DbSet<HistoricoLiquidacion> HistoricoLiquidaciones { get; set; }
 60994    public DbSet<CompensacionDiferenciaAscenso> CompensacionesDiferenciaAscenso { get; set; }
 95
 96    // Liquidación de haberes
 77397    public DbSet<LiquidacionItem> LiquidacionItems { get; set; }
 65098    public DbSet<LiquidacionEstadoPersonal> LiquidacionEstadosPersonal { get; set; }
 63499    public DbSet<LiquidacionResumen> LiquidacionResumenes { get; set; }
 592100    public DbSet<AguinaldoBaja> AguinaldosBaja { get; set; }
 592101    public DbSet<AguinaldoBajaItem> ItemsAguinaldoBaja { get; set; }
 635102    public DbSet<IncidenciaCalculo> IncidenciasCalculo { get; set; }
 103
 104    protected override void OnModelCreating(ModelBuilder modelBuilder)
 105    {
 1106        base.OnModelCreating(modelBuilder);
 107
 108        // Configuración de la relación muchos a muchos entre Usuario y Rol
 1109        modelBuilder.Entity<Usuario>()
 1110            .HasMany(u => u.Roles)
 1111            .WithMany(r => r.Usuarios)
 1112            .UsingEntity<Dictionary<string, object>>(
 1113                "usuarios_roles",
 1114                j => j.HasOne<Rol>().WithMany().HasForeignKey("rol_id"),
 1115                j => j.HasOne<Usuario>().WithMany().HasForeignKey("usuario_id"),
 1116                j =>
 1117                {
 1118                    j.HasKey("usuario_id", "rol_id");
 1119                    j.ToTable("usuarios_roles");
 1120                }
 1121            );
 122
 123        // Índices únicos
 1124        modelBuilder.Entity<Persona>()
 1125            .HasIndex(p => p.Cedula)
 1126            .IsUnique();
 127
 1128        modelBuilder.Entity<Usuario>()
 1129            .HasIndex(u => u.Username)
 1130            .IsUnique();
 131
 1132        modelBuilder.Entity<Rol>()
 1133            .HasIndex(r => r.Nombre)
 1134            .IsUnique();
 135
 1136        modelBuilder.Entity<Accion>()
 1137            .HasIndex(a => a.Nombre)
 1138            .IsUnique();
 139
 1140        modelBuilder.Entity<Contexto>()
 1141            .HasIndex(c => c.Nombre)
 1142            .IsUnique();
 143
 1144        modelBuilder.Entity<Banco>()
 1145            .HasIndex(b => b.Codigo)
 1146            .IsUnique();
 147
 1148        modelBuilder.Entity<Acreedor>()
 1149            .HasIndex(a => a.Codigo)
 1150            .IsUnique();
 151
 1152        modelBuilder.Entity<Acreedor>()
 1153            .HasIndex(a => a.OrdenLegalDeficit);
 154
 1155        modelBuilder.Entity<FictoPersona>()
 1156            .HasIndex(f => new { f.PersonaId, f.CatalogoItemId })
 1157            .IsUnique();
 158
 1159        modelBuilder.Entity<FictoPersona>()
 1160            .HasIndex(f => new { f.Activo, f.PersonaId });
 161
 1162        modelBuilder.Entity<FictoPersona>()
 2163            .ToTable(t => t.HasCheckConstraint(
 2164                "ck_fictos_persona_importe_positivo",
 2165                "importe > 0"));
 166
 1167        modelBuilder.Entity<TipoBeneficio>()
 1168            .HasIndex(tb => tb.Codigo)
 1169            .IsUnique();
 170
 171        // Índices para catálogos
 1172        modelBuilder.Entity<Regimen>()
 1173            .HasIndex(r => r.NumeroLey)
 1174            .IsUnique();
 175
 1176        modelBuilder.Entity<Escalafon>()
 1177            .HasIndex(e => e.Codigo)
 1178            .IsUnique();
 179
 180        // Grados: código único universal (independiente del escalafón)
 1181        modelBuilder.Entity<Grado>()
 1182            .HasIndex(g => g.Codigo)
 1183            .IsUnique();
 184
 1185        modelBuilder.Entity<Situacion>()
 1186            .HasIndex(s => s.Codigo)
 1187            .IsUnique();
 188
 1189        modelBuilder.Entity<Situacion>()
 1190            .Property(s => s.SistemaSalud)
 1191            .HasDefaultValue("ssffaa");
 192
 1193        modelBuilder.Entity<Programa>()
 1194            .HasIndex(p => p.Codigo)
 1195            .IsUnique();
 196
 1197        modelBuilder.Entity<Unidad>()
 1198            .HasIndex(u => u.Codigo)
 1199            .IsUnique();
 200
 201        // Form3100: unicidad por persona + mes/año de vigencia
 1202        modelBuilder.Entity<Form3100>()
 1203            .HasIndex(f => new { f.PersonaId, f.VigenteDesde_Anio, f.VigenteDesde_Mes })
 1204            .IsUnique();
 205
 206        // MotivoBaja: código único
 1207        modelBuilder.Entity<MotivoBaja>()
 1208            .HasIndex(m => m.Codigo)
 1209            .IsUnique();
 210
 211        // Índices para relaciones laborales
 1212        modelBuilder.Entity<RelacionLaboral>()
 1213            .HasIndex(rl => new { rl.PersonaId, rl.Estado });
 214
 1215        modelBuilder.Entity<RelacionLaboral>()
 1216            .HasIndex(rl => rl.GradoId);
 217
 218        // Configuración explícita para resolver ambigüedad: Grado tiene dos FKs desde RelacionLaboral
 1219        modelBuilder.Entity<RelacionLaboral>()
 1220            .HasOne(rl => rl.Grado)
 1221            .WithMany(g => g.RelacionesLaborales)
 1222            .HasForeignKey(rl => rl.GradoId)
 1223            .OnDelete(DeleteBehavior.Restrict);
 224
 1225        modelBuilder.Entity<RelacionLaboral>()
 1226            .HasOne(rl => rl.GradoReincorporacion)
 1227            .WithMany()
 1228            .HasForeignKey(rl => rl.GradoReincorporacionId)
 1229            .OnDelete(DeleteBehavior.Restrict);
 230
 1231        modelBuilder.Entity<BeneficioSocial>()
 1232            .HasIndex(bs => new { bs.PersonaId, bs.Estado });
 233
 1234        modelBuilder.Entity<BeneficioSocial>()
 1235            .HasIndex(bs => new { bs.TipoBeneficioId, bs.Estado });
 236
 1237        modelBuilder.Entity<BeneficioSocial>()
 1238            .HasIndex(bs => new { bs.PersonaId, bs.TipoBeneficioId, bs.ClaveEvento });
 239
 1240        modelBuilder.Entity<BeneficioSocial>()
 1241            .HasIndex(bs => bs.RetroactividadPendiente);
 242
 1243        modelBuilder.Entity<ParametroPeriodo>()
 1244            .HasIndex(pp => new { pp.Anio, pp.Mes })
 1245            .IsUnique();
 246
 247        // Índice para búsqueda de auditoría por entidad
 1248        modelBuilder.Entity<BitacoraAuditoria>()
 1249            .HasIndex(b => new { b.Entidad, b.EntidadId });
 250
 251        // Configurar checks
 1252        modelBuilder.Entity<Usuario>()
 2253            .ToTable(t => t.HasCheckConstraint("CK_usuarios_estado",
 2254                "estado IN ('activo', 'bloqueado')"));
 255
 1256        modelBuilder.Entity<CuentaBancaria>()
 2257            .ToTable(t => t.HasCheckConstraint("CK_cuentas_bancarias_estado",
 2258                "estado IN ('activa', 'inactiva')"));
 259
 260        // Configure conversion for RelacionLaboral.Estado enum to store string values compatible with existing DB
 1261        modelBuilder.Entity<RelacionLaboral>()
 1262            .Property(rl => rl.Estado)
 1263            .HasConversion(
 1264                v => v == EstadoRelacion.Activo ? "activo" : "inactivo",
 1265                v => v == "activo" ? EstadoRelacion.Activo : EstadoRelacion.Inactivo
 1266            );
 267
 1268        modelBuilder.Entity<RelacionLaboral>()
 2269            .ToTable(t => t.HasCheckConstraint("CK_relaciones_laborales_estado",
 2270                "estado IN ('activo', 'inactivo')"));
 271
 272        // IRPF - Franjas progresivas
 1273        modelBuilder.Entity<FranjaIrpf>()
 1274            .HasIndex(f => new { f.NumeroFranja, f.VigenteDesde })
 1275            .IsUnique();
 276
 277        // IRPF - Resultado mensual por persona
 1278        modelBuilder.Entity<IrpfMensual>()
 1279            .HasKey(i => i.Id);
 280
 1281        modelBuilder.Entity<IrpfMensual>()
 1282            .HasIndex(i => new { i.LiquidacionId, i.PersonaId })
 1283            .IsUnique();
 284
 1285        modelBuilder.Entity<IrpfMensual>()
 1286            .HasOne(i => i.Liquidacion)
 1287            .WithMany()
 1288            .HasForeignKey(i => i.LiquidacionId)
 1289            .OnDelete(DeleteBehavior.Cascade);
 290
 1291        modelBuilder.Entity<IrpfMensual>()
 1292            .HasOne(i => i.Persona)
 1293            .WithMany()
 1294            .HasForeignKey(i => i.PersonaId)
 1295            .OnDelete(DeleteBehavior.Restrict);
 296
 1297        modelBuilder.Entity<IrpfMensual>()
 1298            .HasMany(i => i.IrpfDetalleFranjas)
 1299            .WithOne(d => d.IrpfMensual)
 1300            .HasForeignKey(d => d.IrpfMensualId)
 1301            .OnDelete(DeleteBehavior.Cascade);
 302
 303        // IRPF - Detalle por franja
 1304        modelBuilder.Entity<IrpfDetalleFranjas>()
 1305            .HasKey(d => d.Id);
 306
 1307        modelBuilder.Entity<IrpfDetalleFranjas>()
 1308            .HasOne(d => d.FranjaIrpf)
 1309            .WithMany()
 1310            .HasForeignKey(d => d.FranjaIrpfId)
 1311            .OnDelete(DeleteBehavior.Restrict);
 312
 313        // Dependientes
 1314        modelBuilder.Entity<Dependiente>()
 1315            .HasIndex(d => new { d.PersonaId, d.Activo });
 316
 1317        modelBuilder.Entity<Dependiente>()
 2318            .ToTable(t => t.HasCheckConstraint("CK_dependientes_tipo",
 2319                "tipo IN ('hijo', 'conyuge_sin_ingresos')"));
 320
 1321        modelBuilder.Entity<Dependiente>()
 2322            .ToTable(t => t.HasCheckConstraint("CK_dependientes_porcentaje",
 2323                "porcentaje_deduccion IS NULL OR porcentaje_deduccion IN (50, 100)"));
 324
 325        // Compensaciones
 1326        modelBuilder.Entity<TipoCompensacion>()
 1327            .HasIndex(t => t.Codigo)
 1328            .IsUnique();
 329
 1330        modelBuilder.Entity<ConfigCompensacion>()
 1331            .HasIndex(c => new { c.TipoCompensacionId, c.RegimenId, c.GradoId, c.EscalafonId, c.Funcion });
 332
 1333        modelBuilder.Entity<LoteCompensacion>()
 1334            .HasIndex(l => new { l.TipoCompensacionId, l.PeriodoId });
 335
 1336        modelBuilder.Entity<LoteCompensacion>()
 1337            .HasOne(l => l.Periodo)
 1338            .WithMany()
 1339            .HasForeignKey(l => l.PeriodoId)
 1340            .OnDelete(DeleteBehavior.Restrict);
 341
 1342        modelBuilder.Entity<ItemLoteCompensacion>()
 1343            .HasIndex(i => new { i.LoteCompensacionId, i.PersonaId })
 1344            .IsUnique();
 345
 346        // Beneficios sociales
 1347        modelBuilder.Entity<TipoBeneficio>()
 2348            .ToTable(t => t.HasCheckConstraint("CK_tipos_beneficio_plazo_no_negativo",
 2349                "plazo_presentacion_dias IS NULL OR plazo_presentacion_dias >= 0"));
 350
 1351        modelBuilder.Entity<TipoBeneficio>()
 2352            .ToTable(t => t.HasCheckConstraint("CK_tipos_beneficio_monto_no_negativo",
 2353                "monto_referencia IS NULL OR monto_referencia >= 0"));
 354
 1355        modelBuilder.Entity<BeneficioSocial>()
 2356            .ToTable(t => t.HasCheckConstraint("CK_beneficios_sociales_estado",
 2357                "estado IN ('activo', 'inactivo', 'pendiente_doc')"));
 358
 359        // Catálogo e instructivo (tablas de referencia generales)
 1360        modelBuilder.Entity<CatalogoItem>()
 1361            .HasIndex(c => c.Codigo)
 1362            .IsUnique();
 363
 1364        modelBuilder.Entity<RemuneracionGrado>()
 1365            .HasIndex(r => new { r.GradoId, r.ItemId, r.VigenteDesde });
 366
 1367        modelBuilder.Entity<TablaPermanencia>()
 1368            .HasIndex(t => new { t.EscalafonId, t.GradoId, t.MesesDesde, t.MesesHasta, t.AplicaRiesgoVuelo, t.VigenteDes
 369
 1370        modelBuilder.Entity<TablaPermanencia>()
 1371            .HasIndex(t => new { t.GradoId, t.VigenteDesde });
 372
 1373        modelBuilder.Entity<TablaPermanencia>()
 2374            .ToTable(t => t.HasCheckConstraint("CK_tabla_permanencia_valor", "porcentaje IS NOT NULL OR monto_fijo IS NO
 375
 1376        modelBuilder.Entity<TablaPermanencia>()
 2377            .ToTable(t => t.HasCheckConstraint("CK_tabla_permanencia_meses", "meses_hasta >= meses_desde"));
 378
 1379        modelBuilder.Entity<TarifaPorCategoria>()
 1380            .HasIndex(t => new { t.ItemId, t.Categoria, t.VigenteDesde });
 381
 382        // Apertura de períodos de liquidación
 1383        modelBuilder.Entity<Periodo>()
 1384            .HasOne(p => p.Snapshot)
 1385            .WithMany()
 1386            .HasForeignKey(p => p.SnapshotId)
 1387            .OnDelete(DeleteBehavior.Restrict);
 388
 1389        modelBuilder.Entity<Periodo>()
 1390            .HasIndex(p => new { p.Anio, p.Mes })
 1391            .IsUnique()
 1392            .HasFilter("activo = TRUE");
 393
 1394        modelBuilder.Entity<Periodo>()
 1395            .HasIndex(p => p.Estado);
 396
 1397        modelBuilder.Entity<Periodo>()
 2398            .ToTable(t => t.HasCheckConstraint("CK_periodos_liquidacion_estado",
 2399                "estado IN ('ABIERTA','LISTA_CALCULO','EN_CALCULO','CALCULADA','CERRADA')"));
 400
 1401        modelBuilder.Entity<LiquidacionItem>()
 1402            .HasIndex(li => new { li.PeriodoId, li.Cedula, li.Version });
 403
 1404        modelBuilder.Entity<LiquidacionItem>()
 1405            .HasIndex(li => new { li.PeriodoId, li.Version });
 406
 1407        modelBuilder.Entity<LiquidacionEstadoPersonal>()
 1408            .HasIndex(le => new { le.PeriodoId, le.Cedula, le.Version });
 409
 1410        modelBuilder.Entity<LiquidacionResumen>()
 1411            .HasIndex(lr => new { lr.PeriodoId, lr.Version, lr.ProgramaId, lr.RegimenId, lr.Rubro083 });
 412
 1413        modelBuilder.Entity<AguinaldoBaja>()
 1414            .HasMany(a => a.Items)
 1415            .WithOne(i => i.AguinaldoBaja)
 1416            .HasForeignKey(i => i.AguinaldoBajaId)
 1417            .OnDelete(DeleteBehavior.Cascade);
 418
 1419        modelBuilder.Entity<AguinaldoBaja>()
 1420            .HasIndex(a => new { a.PersonaId, a.Anio, a.Mes })
 1421            .IsUnique();
 422
 1423        modelBuilder.Entity<AguinaldoBaja>()
 1424            .HasIndex(a => new { a.Anio, a.Mes });
 425
 1426        modelBuilder.Entity<AguinaldoBajaItem>()
 1427            .HasIndex(i => new { i.AguinaldoBajaId, i.Tipo });
 428
 1429        modelBuilder.Entity<SnapshotInsumos>()
 1430            .Property(s => s.ContenidoJson)
 1431            .HasColumnType("jsonb");
 432
 1433        modelBuilder.Entity<IncidenciaCalculo>()
 1434            .HasIndex(i => new { i.PeriodoId, i.PersonaId });
 435
 1436        modelBuilder.Entity<IncidenciaCalculo>()
 2437            .ToTable(t => t.HasCheckConstraint("ck_incidencias_calculo_tipo",
 2438                $"tipo IN ('{string.Join("', '", TipoIncidenciaCalculo.Todos)}')"));
 439
 1440        modelBuilder.Entity<BeneficioSocialBeneficiario>()
 1441            .HasIndex(b => new { b.BeneficioId, b.Activo });
 442
 1443        modelBuilder.Entity<BeneficioSocialBeneficiario>()
 2444            .ToTable(t => t.HasCheckConstraint("ck_beneficio_beneficiario_vigencia",
 2445                "vigente_hasta IS NULL OR vigente_hasta >= vigente_desde"));
 446
 1447        modelBuilder.Entity<InstructivoAsigFamiliar>()
 1448            .HasIndex(i => new { i.VigenteDesde, i.TipoFranja });
 449
 1450        modelBuilder.Entity<InstructivoAsigFamiliar>()
 2451            .ToTable(t => t.HasCheckConstraint("ck_instructivo_asig_familiar_tipo",
 2452                "tipo_franja IN ('franja_8','franja_16','discapacidad')"));
 453
 1454        modelBuilder.Entity<InstructivoAsigFamiliar>()
 2455            .ToTable(t => t.HasCheckConstraint("ck_instructivo_asig_familiar_importe",
 2456                "importe > 0"));
 457
 1458        modelBuilder.Entity<InstructivoPsf>()
 1459            .HasIndex(i => new { i.VigenteDesde, i.NumeroCategoria });
 460
 1461        modelBuilder.Entity<InstructivoPsf>()
 2462            .ToTable(t => t.HasCheckConstraint("ck_instructivo_psf_categoria",
 2463                "numero_categoria BETWEEN 1 AND 5"));
 464
 1465        modelBuilder.Entity<InstructivoPsf>()
 2466            .ToTable(t => t.HasCheckConstraint("ck_instructivo_psf_importe",
 2467                "importe > 0"));
 468
 1469        modelBuilder.Entity<TablaHogarConstituido>()
 1470            .HasIndex(t => new { t.VigenteDesde, t.HastaHaberes });
 471
 1472        modelBuilder.Entity<TablaHogarConstituido>()
 2473            .ToTable(t => t.HasCheckConstraint("ck_tabla_hogar_importe",
 2474                "importe > 0"));
 475
 476        // Aguinaldos: unicidad por persona + año + semestre
 1477        modelBuilder.Entity<Aguinaldo>()
 1478            .HasIndex(a => new { a.PersonaId, a.Anio, a.Semestre })
 1479            .IsUnique();
 480
 481        // Compensaciones por diferencia de ascenso:
 482        // dos FKs hacia Grado, se configuran explícitamente para evitar
 483        // ambigüedad y ciclos de cascada.
 1484        modelBuilder.Entity<CompensacionDiferenciaAscenso>()
 1485            .HasOne(c => c.GradoViejo)
 1486            .WithMany()
 1487            .HasForeignKey(c => c.GradoViejoId)
 1488            .OnDelete(DeleteBehavior.Restrict);
 489
 1490        modelBuilder.Entity<CompensacionDiferenciaAscenso>()
 1491            .HasOne(c => c.GradoNuevo)
 1492            .WithMany()
 1493            .HasForeignKey(c => c.GradoNuevoId)
 1494            .OnDelete(DeleteBehavior.Restrict);
 495
 1496        modelBuilder.Entity<CompensacionDiferenciaAscenso>()
 1497            .HasOne(c => c.RelacionLaboralNueva)
 1498            .WithMany()
 1499            .HasForeignKey(c => c.RelacionLaboralNuevaId)
 1500            .OnDelete(DeleteBehavior.Restrict);
 501
 1502        modelBuilder.Entity<CompensacionDiferenciaAscenso>()
 1503            .HasIndex(c => c.PersonaId);
 504
 1505        modelBuilder.Entity<CompensacionDiferenciaAscenso>()
 1506            .HasIndex(c => c.Estado);
 507
 1508    }
 509}
 510
 511

Methods/Properties

.ctor(Microsoft.EntityFrameworkCore.DbContextOptions`1<FAU.DataAccess.ApplicationDbContext>)
get_Personas()
get_Usuarios()
get_Roles()
get_Acciones()
get_Contextos()
get_BitacorasAuditoria()
get_Bancos()
get_Acreedores()
get_CuentasBancarias()
get_TiposBeneficio()
get_BeneficiosSociales()
get_ParametrosPeriodo()
get_RelacionesLaborales()
get_MovimientosLaborales()
get_Regimenes()
get_Escalafones()
get_Grados()
get_Situaciones()
get_Programas()
get_Unidades()
get_SubUnidades()
get_TiposMovimiento()
get_MotivosBaja()
get_FranjasIrpf()
get_IrpfsMensual()
get_IrpfsDetalleFranjas()
get_TramosSanidadMilitar()
get_Dependientes()
get_Form3100()
get_Form3100PersonasACargo()
get_Documentos()
get_DescuentosPersonalesPeriodo()
get_FictosPersona()
get_TiposCompensacion()
get_ConfigCompensaciones()
get_LotesCompensacion()
get_ItemsLoteCompensacion()
get_CatalogoItems()
get_RemuneracionesGrado()
get_TablaPermanencias()
get_TarifasPorCategoria()
get_CompPersonal048018()
get_InstructivosAsigFamiliar()
get_InstructivosPsf()
get_TablasHogarConstituido()
get_PeriodosLiquidacion()
get_SnapshotsInsumos()
get_NovedadesPeriodo()
get_Retroactividades()
get_RetroactividadItems()
get_BeneficioSocialBeneficiarios()
get_Aguinaldos()
get_HistoricoLiquidaciones()
get_CompensacionesDiferenciaAscenso()
get_LiquidacionItems()
get_LiquidacionEstadosPersonal()
get_LiquidacionResumenes()
get_AguinaldosBaja()
get_ItemsAguinaldoBaja()
get_IncidenciasCalculo()
OnModelCreating(Microsoft.EntityFrameworkCore.ModelBuilder)