コード例 #1
0
        public static decimal TopeGratificacionLegalMensual(remuneracionesContext db)
        {
            decimal SueldoMinimoActual = IMMModel.ObtenerSueldoMinimoActual(db);
            decimal ValorTopeIMM       = (decimal)(4.75 * 100);
            decimal TopeMensual        = Math.Round(((ValorTopeIMM * SueldoMinimoActual) / 100) / 12);

            return(TopeMensual);
        }
コード例 #2
0
        public static decimal CalcularGratificacionLegal(decimal SueldoBase, decimal HorasExtras, decimal MontoBono, remuneracionesContext db)
        {
            decimal SueldoMinimoActual = IMMModel.ObtenerSueldoMinimoActual(db);
            decimal TopeGratMensual    = TopeGratificacionLegalMensual(db);
            decimal Total         = SueldoBase + HorasExtras + MontoBono;
            decimal Gratificacion = Math.Round((25 * Total) / 100);

            if (TopeGratMensual >= Gratificacion)
            {
                return(Gratificacion);
            }
            else
            {
                return(Math.Round(TopeGratMensual));
            }
        }
コード例 #3
0
        public static bool ActualizarIndicadoresEconomicos(RequestIE Request, remuneracionesContext db)
        {
            bool Result = false;

            try
            {
                if (!string.IsNullOrWhiteSpace(Request.MontoIMM) &&
                    !string.IsNullOrWhiteSpace(Request.MontoUTM) &&
                    !string.IsNullOrWhiteSpace(Request.MontoUF))
                {
                    IMMModel IMMactiva = db.IMMModel.SingleOrDefault(x => x.EstaActiva);
                    IMMactiva.EstaActiva = false;
                    db.IMMModel.Update(IMMactiva);

                    IMMModel NuevaIMM = new IMMModel()
                    {
                        Nombre     = IMMactiva.Nombre,
                        Fecha      = Utiles.ToDD_MM_AAAA_Multi(Request.FechaIMM),
                        Valor      = Convert.ToDecimal(Request.MontoIMM),
                        EstaActiva = true
                    };

                    db.IMMModel.Add(NuevaIMM);


                    UTMModel UTMactiva = db.UTMModel.SingleOrDefault(x => x.EstaActiva);
                    UTMactiva.EstaActiva = false;
                    db.UTMModel.Update(UTMactiva);

                    UTMModel NuevaUTM = new UTMModel()
                    {
                        Nombre     = UTMactiva.Nombre,
                        Fecha      = Utiles.ToDD_MM_AAAA_Multi(Request.FechaUTM),
                        Valor      = Convert.ToDecimal(Request.MontoUTM),
                        EstaActiva = true
                    };

                    db.UTMModel.Add(NuevaUTM);


                    UFModel UFactiva = db.UFModel.SingleOrDefault(x => x.EstaActiva);
                    UFactiva.EstaActiva = false;
                    db.UFModel.Update(UFactiva);

                    UFModel NuevaUF = new UFModel()
                    {
                        Nombre     = UFactiva.Nombre,
                        Fecha      = Utiles.ToDD_MM_AAAA_Multi(Request.FechaUF),
                        Valor      = Convert.ToDecimal(Request.MontoUF),
                        EstaActiva = true
                    };

                    db.UFModel.Add(NuevaUF);

                    db.SaveChanges();
                    Result = true;
                }
            }
            catch (Exception)
            {
                Result = false;
            }

            return(Result);
        }
コード例 #4
0
ファイル: Tbempleados.cs プロジェクト: lbdevv/RemuSystem
        public static LiquidacionEmpleado ObtenerLiquidacionEmpleado(int IdEmp, remuneracionesContext db)
        {
            if (IdEmp <= 0)
            {
                return(null);
            }

            var Liquidacion = new LiquidacionEmpleado();

            try
            {
                //Falta listar los topes y tramos.
                //Tope Gratificacion
                //Tope Seguro de cesantia
                //Tope Imposiciones -> al parecer tiene que ver con las afp o con todos los descuentos
                //Tope Salud
                //Si es fonasa calcular por el 7%
                //calcular monto AFP
                //Seguro de Cesantia


                //----- GRATIFICACION -----
                //Existen calculos de gratificaciones del articulo 50 y el articulo 47
                //----- CONTRATOS --------
                //----- LOS PLAZOS DE TODOS LOS CONTRATOS VAN EN LA CLAUSULA NOVENA DE LOS ARTICULOS ------------------
                //contrato individual y contrato colectivo Articulo 6 indiviual -> empleador a trabajador
                //Colectivo de uno o más empleadores con una o más organizaciones sindicales
                //Contrato por plazo: Plazo fijo, indefinido
                //Contrato por obra o faena Articulo 10 bis
                //Contrato por jornada parcial Articulo 40 bis
                //Contratos Especiales Articulos  77 al 152
                //------SALUD-------
                //Cuando calculamos salud aveces hay montos adicionales por reglas que desconozco
                //Es Isapre -> (Pueden ser muchas) o Fonasa que está aislado y con sus reglas
                //Isapre tiene más beneficios pero es más costoso y cada isapre tiene sus montos y reglas además de reglas estantard para cada una
                //Fonasa es más economico y más barato pero con más problemas de atención y menos beneficios.
                //Se puede definir como Fonasa para el sector(publico) y Isapre (Privado)
                //Si estás en fonasa te asignan un tramo el que indicara tu nivel de cobertura dependiendo del sueldo tendrás más cobertura o no siempre será el 7% de tu sueldo
                //En Isapre si puedes elegir
                //Fonasa en fijo Isapre es dinamico
                //IMPORTANTE Si tienes y Isapre y el 7% de tu sueldo llega a un monto que cubre tu plan de isapre solo se descuenta ese 7% en caso
                //Que el 7% de tu sueldo no cubra el plan de la isapre a la que perteneces entonces se cobrará adicional
                //Considerar Seguro de vida...

                //DESCUENTOS
                //Además de la AFP hay que considerar cosas como el S.I.S = Seguro de invalidez y sobrevivencia.
                //Considerar Aguinaldo
                //Considerar anticipo
                //Considerar APV
                //Cuota sindical
                //Impuesto Unico

                //CALCULO IMPUESTO UNICO
                // Any IPU = "Impuesto Unico"
                //1.- Revisar la tabla proveida por el SII
                //2.- Revisar el tramo en el que está el trabajador
                //3.- Calcular antes el imponible tributable F(Total Imponible - Descuentos)
                //------ VARIABLES CALCULO IMPUESTO UNICO --------
                //1.- F((Imponible tributable * Factor(Es el exento de la tabla IPU)) - Monto Rebaja)
                // simplificado ((ImponibleT * Exento) - MontoRebaja)


                List <RentasTopasImpModel> TopesRentasImponibles = db.RentasTopasImpModel.ToList();

                decimal AFPTope       = TopesRentasImponibles.SingleOrDefault(x => x.Tope_id == TipoTope.AFP && x.EstaActiva == true).UFCLP;
                decimal IPSTope       = TopesRentasImponibles.SingleOrDefault(x => x.Tope_id == TipoTope.IPS && x.EstaActiva == true).UFCLP;
                decimal SCesantiaTope = TopesRentasImponibles.SingleOrDefault(x => x.Tope_id == TipoTope.SEGURO_CESANTIA && x.EstaActiva == true).UFCLP;

                List <RentasMinImponibles> rentasMinImponibles = db.RentasMinImponibles.ToList();


                List <AFCModel> AFCRules = db.AFCModel.Where(x => x.EstaActivo == true).ToList();

                UTMModel UTM          = db.UTMModel.SingleOrDefault(x => x.EstaActiva == true);
                IMMModel SueldoMinimo = db.IMMModel.SingleOrDefault(x => x.EstaActiva == true);
                UFModel  UF           = db.UFModel.SingleOrDefault(x => x.EstaActiva == true);

                IndicadoresEconomicos Indicadores = new IndicadoresEconomicos()
                {
                    UF           = UF,
                    UTM          = UTM,
                    SueldoMinimo = SueldoMinimo
                };

                int CantidadHorasTrabajadas = 0;

                Liquidacion.indicadoresEco = Indicadores;

                var LstHaberImponible   = new List <HaberImponible>();
                var LstHaberNoImponible = new List <HaberNoImponible>();
                var LstDescuentos       = new List <DescuentosLiquidacion>();

                Tbempleados ObjEmpleado = db.Tbempleados.Include(e => e.EmpresaEmpleado)
                                          .Include(s => s.SueldoEmp)
                                          .Include(c => c.ContratoEmp)
                                          .ThenInclude(cargo => cargo.Cargo)
                                          .Include(p => p.PrevisionEmp)
                                          .ThenInclude(a => a.AFP)
                                          .SingleOrDefault(Emp => Emp.Id == IdEmp);


                InfoEmpleadoEmpresa InfoEmp = new InfoEmpleadoEmpresa()
                {
                    EmpleadoId           = ObjEmpleado.Id.ToString(),
                    NombreEmpleado       = ObjEmpleado.Nombre,
                    RutEmpleado          = ObjEmpleado.Rut,
                    CargoEmpleado        = ObjEmpleado.ContratoEmp.Cargo.Nombre,
                    FechaIngresoEmpleado = ObjEmpleado.FechaCreacion.ToString("dd-MM-yyyy"),
                    RazonSocialEmpresa   = ObjEmpleado.EmpresaEmpleado.RazonSocial,
                    RutEmpresa           = ObjEmpleado.EmpresaEmpleado.Rut,
                    DireccionEmpresa     = ObjEmpleado.EmpresaEmpleado.Direccion
                };

                List <ImpuestoUnico> InfoImpuestoUnicoActual = db.ImpuestoUnico.Where(x => x.EstaActiva == true).ToList();

                AfpModel         AFP      = ObjEmpleado.PrevisionEmp.AFP;
                ContratoEmpleado Contrato = ObjEmpleado.ContratoEmp;
                CantidadHorasTrabajadas = Contrato.HorasDeJornada;


                if (ObjEmpleado != null)
                {
                    var HyDemp = ServiciosHyD.ObtenerHyDEmpleado(IdEmp, db);

                    if (HyDemp.Item1.Count() <= 0 || HyDemp.Item2.Count() <= 0)
                    {
                        return(null);
                    }

                    LstHaberImponible = HyDemp.Item1.Where(x => x.Categoria_id == CategoriaHaberes.IMPONIBLE)
                                        .Select(x => new HaberImponible
                    {
                        NombreHaber = x.Nombre,
                        MontoHaber  = x.ValorCalculo
                    }).ToList();

                    LstHaberNoImponible = HyDemp.Item1.Where(x => x.Categoria_id == CategoriaHaberes.NOIMPONIBLE)
                                          .Select(x => new HaberNoImponible
                    {
                        NombreHaber = x.Nombre,
                        MontoHaber  = x.ValorCalculo
                    }).ToList();

                    LstDescuentos = HyDemp.Item2.Select(x => new DescuentosLiquidacion
                    {
                        NombreDescuento = x.Nombre,
                        MontoDescuento  = x.ValorCalculo
                    }).ToList();

                    decimal CalculoDescuentoAFP = CalculosLiquidacion.CalculoAFPIndefinido(AFP.DependientesTasaAfp, ObjEmpleado.SueldoEmp.SueldoBase, AFPTope);
                    string  DescuentoAFPNombre  = CalculosLiquidacion.VistaPorcentajeLiquidacion(AFP.DependientesTasaAfp, CalculoDescuentoAFP, AFP.NombreAfp);

                    //Busca el registro del descuento AFP y updatea el monto
                    LstDescuentos.Where(x => x.NombreDescuento == AFP.NombreAfp)
                    .Select(x =>
                    {
                        x.NombreDescuento = DescuentoAFPNombre;
                        x.MontoDescuento  = CalculoDescuentoAFP;
                        return(x);
                    }).ToList();

                    //verificar si hay que calcularla o se deja directamente así
                    decimal MontoGratificacion = CalculosLiquidacion.CalcularGratificacionLegal(ObjEmpleado.SueldoEmp.SueldoBase, 0, 0, db);
                    var     GratificacionLegal = new HaberImponible()
                    {
                        NombreHaber = "Gratificación",
                        MontoHaber  = MontoGratificacion
                    };
                    LstHaberImponible.Add(GratificacionLegal);

                    decimal TotalHaberesImponibles = LstHaberImponible.Sum(x => x.MontoHaber);
                    decimal TotalHaberesNoImp      = LstHaberNoImponible.Sum(x => x.MontoHaber);

                    decimal TotalDescuentoCesantia = CalculosLiquidacion.CalculoSeguroDeCesantia(TotalHaberesImponibles, AFCRules.FirstOrDefault().FinanciamientoEmpleado, SCesantiaTope);
                    var     DescuentoCesantia      = new DescuentosLiquidacion()
                    {
                        NombreDescuento = "Seguro de Cesantia",
                        MontoDescuento  = TotalDescuentoCesantia
                    };
                    LstDescuentos.Add(DescuentoCesantia);

                    decimal TotalDescuentoSalud = CalculosLiquidacion.CalculoFonasa(TotalHaberesImponibles);
                    if (ObjEmpleado.PrevisionEmp.IsapreId > 0 && ObjEmpleado.PrevisionEmp.MontoPactadoIsapre > 0)
                    {
                        decimal MontoIsapre = 0;

                        MontoIsapre = CalculosLiquidacion.ProcesarMontoPactadoIsapre(ObjEmpleado.PrevisionEmp, UF.Valor);

                        if (MontoIsapre > TotalDescuentoSalud)
                        {
                            decimal MontoAdicional = 0;
                            MontoAdicional = CalculosLiquidacion.MontoIsapreAdicional(TotalDescuentoSalud, MontoIsapre);

                            var DescuentoIsapre = new DescuentosLiquidacion()
                            {
                                NombreDescuento = "Isapre",
                                MontoDescuento  = TotalDescuentoSalud
                            };

                            var DescuentosAdicional = new DescuentosLiquidacion()
                            {
                                NombreDescuento = "Adicional",
                                MontoDescuento  = MontoAdicional
                            };

                            LstDescuentos.Add(DescuentoIsapre);
                            LstDescuentos.Add(DescuentosAdicional);
                        }
                        else if (TotalDescuentoSalud >= MontoIsapre)
                        {
                            var DescuentosSaludIsapre = new DescuentosLiquidacion()
                            {
                                NombreDescuento = "Isapre",
                                MontoDescuento  = TotalDescuentoSalud
                            };
                            LstDescuentos.Add(DescuentosSaludIsapre);
                        }
                    }
                    else
                    {
                        var DescuentoSaludFonasa = new DescuentosLiquidacion()
                        {
                            NombreDescuento = "Fonasa",
                            MontoDescuento  = TotalDescuentoSalud
                        };
                        LstDescuentos.Add(DescuentoSaludFonasa);
                    }

                    decimal TotalDescuentos          = LstDescuentos.Sum(x => x.MontoDescuento);
                    decimal TotalImponibleTributable = CalculosLiquidacion.CalcularImponibleTributable(TotalHaberesImponibles, TotalDescuentos);

                    bool    EstaAfectaAimp     = CalculosLiquidacion.EstaAfectaAimpuestos(InfoImpuestoUnicoActual, TotalImponibleTributable);
                    decimal TotalImpuestoUnico = 0;

                    if (EstaAfectaAimp)
                    {
                        TotalImpuestoUnico = CalculosLiquidacion.CalculoImpuestoUnico(InfoImpuestoUnicoActual, TotalImponibleTributable);
                    }

                    if (TotalImpuestoUnico > 0)
                    {
                        var DescuentoImpuestoUnico = new DescuentosLiquidacion()
                        {
                            NombreDescuento = "Impuesto Único",
                            MontoDescuento  = TotalImpuestoUnico
                        };
                        LstDescuentos.Add(DescuentoImpuestoUnico);
                    }

                    decimal TotalHaberes = TotalHaberesImponibles + TotalHaberesNoImp;

                    Liquidacion.MesLiquidacion      = Utiles.obtenerNombreMes(DateTime.Now.Month);
                    Liquidacion.InfoEmpleado        = InfoEmp;
                    Liquidacion.lstHaberImponible   = LstHaberImponible;
                    Liquidacion.lstHaberNoImponible = LstHaberNoImponible;
                    Liquidacion.HorasTrabajadas     = ObjEmpleado.ContratoEmp.HorasDeJornada;
                    Liquidacion.indicadoresEco      = Indicadores;
                    Liquidacion.lstDescuentos       = LstDescuentos;
                    Liquidacion.FechaLiquidacion    = DateTime.Now.ToString("dd-MM-yyyy");
                    Liquidacion.TotalHaberes        = TotalHaberes;
                    Liquidacion.TotalDescuentos     = TotalDescuentos;
                    Liquidacion.TotalHaberesImp     = TotalHaberesImponibles;
                    Liquidacion.TotalHaberesNoImp   = TotalHaberesNoImp;
                    Liquidacion.TotalLiquido        = TotalHaberes - TotalDescuentos;
                }
            }
            catch (Exception ex)
            {
                return(null);
            }


            return(Liquidacion);
        }