Exemple #1
0
        public static IsrSubsidio CalculoIsrSubsidioAnual(decimal baseGravable)
        {
            int  tipoTarifa = 365;
            bool esISR;

            var tablaIsr = NominasDao.GeTablaIsrByTipoNomina(tipoTarifa, baseGravable);

//            var tablaSubsidio = NominasDao.GetTablaSubsidioByTipoNomina(tipoTarifa, baseGravable);

            if (tablaIsr == null)
            {
                return(null);
            }


            //1) Buscar el rango de limite inferior
            decimal limiteInferior = tablaIsr.Limite_Inferior;

            //2) Restar Ingreso - Limite Inferior = BASE
            decimal _base = baseGravable - limiteInferior;

            //3) Tomar el porcentaje del Rango %
            decimal porcentaje = tablaIsr.Porcentaje;

            //4) Multiplicar el % por la BASE
            decimal resultado = _base * (porcentaje / 100);

            //5)Tomar la cuota fija del rango
            decimal cuotaFija = tablaIsr.Cuota_Fija;

            //6 Sumar 4) + 5) = ISR
            decimal isrOSubsidio = resultado + cuotaFija;



            var item = new IsrSubsidio()
            {
                BaseGravable        = baseGravable,
                BaseGravableMensual = cuotaFija,
                LimiteInferior      = limiteInferior,
                Base                  = _base,
                Tasa                  = porcentaje,
                IsrAntesDeSub         = isrOSubsidio,
                Subsidio              = 0,
                NetoAPagar            = resultado,
                ResultadoIsrOSubsidio = Utils.TruncateDecimales(isrOSubsidio)
            };

            return(item);
        }
Exemple #2
0
        public static IsrSubsidio  CalculoIsrSubsidio174(decimal Gravable, decimal sd)
        {
            var porcentaje = 0.00M;



            // Articulo 1 del 174.
            decimal monto174 = Utils.TruncateDecimales((Gravable / 365) * 30.40M);
            // Se calcula el sueldo diario por 30.4 para saber sueldo mes anterior
            decimal sueldoMensual304 = Utils.TruncateDecimales(30.4M * sd);
            // Articulo 2 del 174. Sacamos la base gravable
            decimal baseGravable174 = monto174 + sueldoMensual304;
            //Se calcula isr de la Base generada en Articulo 2
            var Isrbase174 = CalculoIsrSubsidioFin(null, baseGravable174, sd, 0, 5, false);
            // Se calcula isr generado en sueldo ordinario del mes anterior
            var isrSueldoMensual = Utils.TruncateDecimales(CalculoIsrSubsidioFin(null, sueldoMensual304, sd, 0, 5, false).IsrAntesDeSub);
            // Se calcula diferencia de ISR conforme Articulo 3 del 174
            var r1 = Isrbase174.IsrAntesDeSub - isrSueldoMensual;

            //Calculo porcentaje conforme Articulo 5 del 174
            porcentaje = r1 / monto174;
            // Calculo ISR tomando base gravable inicial * tasa. Articulo 4 del 174
            var resultadoIsr174 = Utils.TruncateDecimales(Gravable * porcentaje);

            if (resultadoIsr174 < 0)
            {
                resultadoIsr174 = resultadoIsr174 * -1;
            }

            var item = new IsrSubsidio()
            {
                BaseGravable        = Gravable,
                BaseGravableMensual = (decimal)Gravable,
                LimiteInferior      = 0,
                Base                  = 0,
                Tasa                  = porcentaje,
                IsrAntesDeSub         = resultadoIsr174,
                Subsidio              = 0,//subsidioAlEmpleo
                NetoAPagar            = 0,
                ResultadoIsrOSubsidio = Utils.TruncateDecimales(resultadoIsr174),
                IdTablaIsr            = 0,
                IdTablaSubsidio       = 0,
                Tablaisr              = null,
                Tablasubsidio         = null,
                EsISR                 = true// Asignamos true debido a que no calculamos subsidio.
            };

            return(item);
        }
Exemple #3
0
        public ImpuestoDetalleModel GetImpuestosDetalle(NOM_Nomina itemnomina, decimal baseGravable = 0, decimal SD = 0, int tipoTarifa = 0, int diasPeriodo = 0, int idTipoNomina = 0)
        {
            if (baseGravable <= 0)
            {
                return(null);
            }
            if (tipoTarifa <= 0)
            {
                return(null);
            }
            IsrSubsidio calculoIsrSubsidio = new IsrSubsidio();

            if (idTipoNomina == 16)
            {
                calculoIsrSubsidio = MNominas.CalculoIsrAsimilado(baseGravable, SD, diasPeriodo, 4, incluirTablas: true);
            }
            else
            {
                //   calculoIsrSubsidio = MNominas.CalculoIsrSubsidioFin(itemnomina, itemnomina.SBCotizacionDelProcesado, SD, diasPeriodo, tipoTarifa, incluirTablas: true);
                calculoIsrSubsidio = MNominas.CalculoIsrSubsidio304(itemnomina, itemnomina.SBCotizacionDelProcesado, SD, diasPeriodo, tipoTarifa, incluirTablas: true); // factor
            }


            var item = new ImpuestoDetalleModel()
            {
                BaseGravable        = calculoIsrSubsidio.BaseGravable,
                BaseGravableMensual = calculoIsrSubsidio.BaseGravableMensual,
                LimiteInferior      = calculoIsrSubsidio.LimiteInferior,
                Base                  = calculoIsrSubsidio.Base,
                Tasa                  = calculoIsrSubsidio.Tasa,
                Isr                   = calculoIsrSubsidio.IsrAntesDeSub,
                Subsidio              = calculoIsrSubsidio.Subsidio,
                NetoAPagar            = calculoIsrSubsidio.NetoAPagar,
                ResultadoIsrOSubsidio = (calculoIsrSubsidio.ResultadoIsrOSubsidio),
                Tablaisr              = calculoIsrSubsidio.Tablaisr,
                Tablasubsidio         = calculoIsrSubsidio.Tablasubsidio,
                IdTablaIsr            = calculoIsrSubsidio.IdTablaIsr,
                IdTablaSubsidio       = calculoIsrSubsidio.IdTablaSubsidio,
                EsISR                 = calculoIsrSubsidio.EsISR,
                Porcentajeisr         = 0
            };

            return(item);
        }
Exemple #4
0
        public static IsrSubsidio CalculoIsrAsimilado(decimal baseGravable, decimal SD, int diasPeriodo, int tipoTarifa, bool incluirTablas = false)
        {
            if (baseGravable <= 0)
            {
                return(null);
            }
            if (tipoTarifa <= 0)
            {
                return(null);
            }

            bool esISR = false;

            double nuevaBaseGravable = 0.00;

            List <C_NOM_Tabla_ISR>      tablaisrcompleta      = null;
            List <C_NOM_Tabla_Subsidio> tablasubsidiocompleta = null;

            var tablaIsr = NominasDao.GeTablaIsrByTipoNomina(tipoTarifa, baseGravable);

            //  var tablaSubsidio = NominasDao.GetTablaSubsidioByTipoNomina(tipoTarifa, baseGravable);

            if (tablaIsr == null)
            {
                return(null);
            }

            if (incluirTablas)
            {
                tablaisrcompleta      = NominasDao.GetAllTablaIsr(tipoTarifa);
                tablasubsidiocompleta = NominasDao.GetAllTablaSubsidios(tipoTarifa);
            }

            //1) Buscar el rango de limite inferior
            decimal limiteInferior = tablaIsr.Limite_Inferior;

            //2) Restar Ingreso - Limite Inferior = BASE
            decimal _base = baseGravable - limiteInferior;

            //3) Tomar el porcentaje del Rango %
            decimal porcentaje = tablaIsr.Porcentaje;

            //4) Multiplicar el % por la BASE
            decimal resultado = _base * (porcentaje / 100);

            //5)Tomar la cuota fija del rango
            decimal cuotaFija = tablaIsr.Cuota_Fija;

            //6 Sumar 4) + 5) = ISR
            decimal isr = resultado + cuotaFija;

            // 7) buscar en la tabla de subsidio en que rango esta el Salario Gravable
            decimal subsidioAlEmpleo = 0; // tablaSubsidio.Subsidio;


            //8) Resta del 6) - 7) = ISR o Subsidio
            decimal isrOSubsidio = 0;

            //9) Neto a pagar Salario Gravable - 8)
            decimal netoPagar = baseGravable - isr;

            isrOSubsidio = isr;
            esISR        = true;

            var item = new IsrSubsidio()
            {
                BaseGravable        = baseGravable,
                BaseGravableMensual = (decimal)nuevaBaseGravable,
                LimiteInferior      = limiteInferior,
                Base                  = _base,
                Tasa                  = porcentaje,
                IsrAntesDeSub         = isr,
                Subsidio              = subsidioAlEmpleo,
                NetoAPagar            = netoPagar,
                ResultadoIsrOSubsidio = Utils.TruncateDecimales(isrOSubsidio),
                IdTablaIsr            = tablaIsr.IdISR,
                IdTablaSubsidio       = 0,//tablaSubsidio.IdSubsidio,
                Tablaisr              = incluirTablas ? tablaisrcompleta : null,
                Tablasubsidio         = incluirTablas ? tablasubsidiocompleta : null,
                EsISR                 = esISR
            };

            return(item);
        }
Exemple #5
0
        //Version 2 - 30.4
        //Method Name - CalculoIsrSubsidio304
        //
        public static IsrSubsidio CalculoIsrSubsidio304(NOM_Nomina nomina, decimal baseGravable, decimal SD, int diasPeriodo, int tipoTarifa, bool incluirTablas = false)
        {
            if (baseGravable <= 0)
            {
                return(null);
            }
            //if (tipoTarifa <= 0) return null;

            bool    esISR             = false;
            decimal factor304         = 30.40M;
            decimal nuevaBaseGravable = 0;
            decimal holdBaseGravable  = 0;
            decimal subsidio304       = 0;
            decimal isr304            = 0;

            //Regla 14 dias - para nominas catorcenales***********************************************************
            //version 30.4
            //Se obtiene el sueldo mensual

            //nuevaBaseGravable = (SD * variableMensual);//Obtenemos el sueldo mensual SD * 30.4
            //holdBaseGravable = baseGravable; //Guardamos la baseGravable anterior
            //baseGravable = (decimal)nuevaBaseGravable;


            nuevaBaseGravable = (baseGravable / nomina.Dias_Laborados) * factor304; //nueva base a 30.4
            holdBaseGravable  = baseGravable;                                       //Guardamos la baseGravable anterior
            baseGravable      = (decimal)nuevaBaseGravable;                         // establecemos como base de calculo la nueva base encontrada
            //******************************************************************************************************


            tipoTarifa = 5;//mensual


            List <C_NOM_Tabla_ISR>      tablaisrcompleta      = null;
            List <C_NOM_Tabla_Subsidio> tablasubsidiocompleta = null;

            var tablaIsr      = NominasDao.GeTablaIsrByTipoNomina(tipoTarifa, baseGravable);
            var tablaSubsidio = NominasDao.GetTablaSubsidioByTipoNomina(tipoTarifa, baseGravable);

            if (tablaIsr == null || tablaSubsidio == null)
            {
                return(null);
            }

            if (incluirTablas)
            {
                tablaisrcompleta      = NominasDao.GetAllTablaIsr(tipoTarifa);
                tablasubsidiocompleta = NominasDao.GetAllTablaSubsidios(tipoTarifa);
            }

            //1) Buscar el rango de limite inferior
            decimal limiteInferior = tablaIsr.Limite_Inferior;

            //2) Restar Ingreso - Limite Inferior = BASE
            decimal _base = baseGravable - limiteInferior;

            //3) Tomar el porcentaje del Rango %
            decimal porcentaje = tablaIsr.Porcentaje;

            //4) Multiplicar el % por la BASE
            decimal resultado = _base * (porcentaje / 100);

            //5)Tomar la cuota fija del rango
            decimal cuotaFija = tablaIsr.Cuota_Fija;

            //6 Sumar 4) + 5) = ISR
            decimal isr = resultado + cuotaFija;

            // 7) buscar en la tabla de subsidio en que rango esta el Salario Gravable
            decimal subsidioAlEmpleo = tablaSubsidio.Subsidio;

            //7.1 proporcional para el periodo de 14 dias

            //version 30.4
            isr304       = Utils.TruncateDecimales((isr / (decimal)factor304) * nomina.Dias_Laborados);
            subsidio304  = Utils.TruncateDecimales((subsidioAlEmpleo / (decimal)factor304) * nomina.Dias_Laborados);
            baseGravable = (decimal)holdBaseGravable;



            //8) Resta del 6) - 7) = ISR o Subsidio
            decimal isrOSubsidio = 0;

            if (isr > subsidioAlEmpleo)
            {
                isrOSubsidio = (isr - subsidioAlEmpleo);

                //version 30.4
                isrOSubsidio = (isr304 - subsidio304);
            }
            else
            {
                isrOSubsidio = (subsidioAlEmpleo - isr);

                //version 30.4
                isrOSubsidio = (subsidio304 - isr304);
            }


            //9) Neto a pagar Salario Gravable - 8)
            decimal netoPagar = 0;

            esISR = isr > subsidioAlEmpleo;

            if (esISR)
            {
                netoPagar = baseGravable - (isrOSubsidio);
            }
            else
            {
                netoPagar = baseGravable + (isrOSubsidio);
            }

            esISR = isr > subsidioAlEmpleo;

            var item = new IsrSubsidio()
            {
                BaseGravable        = baseGravable,
                BaseGravableMensual = (decimal)nuevaBaseGravable,
                LimiteInferior      = limiteInferior,
                Base                  = _base,
                Tasa                  = porcentaje,
                IsrAntesDeSub         = isr304,
                Subsidio              = subsidio304,//subsidioAlEmpleo
                NetoAPagar            = Utils.TruncateDecimales(netoPagar),
                ResultadoIsrOSubsidio = Common.Utils.Utils.TruncateDecimales(isrOSubsidio),
                IdTablaIsr            = tablaIsr.IdISR,
                IdTablaSubsidio       = tablaSubsidio.IdSubsidio,
                Tablaisr              = incluirTablas ? tablaisrcompleta : null,
                Tablasubsidio         = incluirTablas ? tablasubsidiocompleta : null,
                EsISR                 = esISR
            };

            return(item);
        }
Exemple #6
0
        /// <summary>
        /// Método que realiza el cálculo del IRS/SUBSIDIO Retorna un objeto "IsrSubsidio" con los valores del cálculo.
        /// tipoTarifa: Diario, semanal, quincenal, etc..
        /// 1.- Usado en Detalle de la nomina
        /// 2.- Fininiquito -
        /// 3.- finiquito F
        /// 4.- ultimo sueldo
        /// 5- en este mismo archivo linea 96
        /// </summary>
        /// <param name="nomina"></param>
        /// <param name="baseGravable"></param>
        /// <param name="diasPeriodo"></param>
        /// <param name="tipoTarifa"></param>
        /// <returns></returns>
        public static IsrSubsidio CalculoIsrSubsidioFin(NOM_Nomina nomina, decimal baseGravable, decimal SD, int diasPeriodo, int tipoTarifa, bool incluirTablas = false)
        {
            ////ASimilados a salario
            //if (tipoTarifa == 16) //Asimilado a Salarios - tipo Tarifa viene con el valor de Periodicidad de Pago
            //{
            //    if (diasPeriodo > 15)//Aqui habria que asegurarse de que tarifa quieren aplicar para el calculo
            //    {
            //        tipoTarifa = 5;//Lo cambiamos al tipo de tarifa mensual
            //    }
            //    else if (diasPeriodo == 15)
            //    {
            //        tipoTarifa = 4; //Lo cambiamos al tipo de tarifa quincenal
            //    }
            //    else
            //    {
            //        tipoTarifa = 2; //Lo cambiamos al tipo de tarifa semanal
            //    }
            //}

            if (baseGravable <= 0)
            {
                return(null);
            }
            if (tipoTarifa <= 0)
            {
                return(null);
            }

            bool    esISR             = false;
            double  variableMensual   = 30.40;
            double  nuevaBaseGravable = 0.00;
            double  holdBaseGravable  = 0.00;
            decimal subsidio14        = 0;
            decimal isr14             = 0;

            //Regla 14 dias - para nominas catorcenales
            if (diasPeriodo == 14)
            {
                //Se obtiene el sueldo mensual
                nuevaBaseGravable = ((double)SD * variableMensual);
                holdBaseGravable  = (double)baseGravable;
                baseGravable      = (decimal)nuevaBaseGravable;
                tipoTarifa        = 5;//mensual
            }

            List <C_NOM_Tabla_ISR>      tablaisrcompleta      = null;
            List <C_NOM_Tabla_Subsidio> tablasubsidiocompleta = null;

            var tablaIsr      = NominasDao.GeTablaIsrByTipoNomina(tipoTarifa, baseGravable);
            var tablaSubsidio = NominasDao.GetTablaSubsidioByTipoNomina(tipoTarifa, baseGravable);

            if (tablaIsr == null || tablaSubsidio == null)
            {
                return(null);
            }

            if (incluirTablas)
            {
                tablaisrcompleta      = NominasDao.GetAllTablaIsr(tipoTarifa);
                tablasubsidiocompleta = NominasDao.GetAllTablaSubsidios(tipoTarifa);
            }

            //1) Buscar el rango de limite inferior
            decimal limiteInferior = tablaIsr.Limite_Inferior;

            //2) Restar Ingreso - Limite Inferior = BASE
            decimal _base = baseGravable - limiteInferior;

            //3) Tomar el porcentaje del Rango %
            decimal porcentaje = tablaIsr.Porcentaje;

            //4) Multiplicar el % por la BASE
            decimal resultado = _base * (porcentaje / 100);

            //5)Tomar la cuota fija del rango
            decimal cuotaFija = tablaIsr.Cuota_Fija;

            //6 Sumar 4) + 5) = ISR
            decimal isr = resultado + cuotaFija;

            // 7) buscar en la tabla de subsidio en que rango esta el Salario Gravable
            decimal subsidioAlEmpleo = tablaSubsidio.Subsidio;

            //7.1 proporcional para el periodo de 14 dias
            if (diasPeriodo == 14)
            {
                isr14        = (isr / (decimal)variableMensual) * diasPeriodo;
                subsidio14   = (subsidioAlEmpleo / (decimal)variableMensual) * diasPeriodo;
                baseGravable = (decimal)holdBaseGravable;
            }


            //8) Resta del 6) - 7) = ISR o Subsidio
            decimal isrOSubsidio = 0;

            if (isr > subsidioAlEmpleo)
            {
                isrOSubsidio = (isr - subsidioAlEmpleo);

                if (diasPeriodo == 14)
                {
                    isrOSubsidio = (isr14 - subsidio14);
                }
            }
            else
            {
                isrOSubsidio = (subsidioAlEmpleo - isr);

                if (diasPeriodo == 14)
                {
                    isrOSubsidio = (subsidio14 - isr14);
                }
            }


            //9) Neto a pagar Salario Gravable - 8)
            decimal netoPagar = 0;

            esISR = isr > subsidioAlEmpleo;

            if (esISR)
            {
                netoPagar = baseGravable - (isrOSubsidio);
            }
            else
            {
                netoPagar = baseGravable + (isrOSubsidio);
            }

            esISR = isr > subsidioAlEmpleo;

            var item = new IsrSubsidio()
            {
                BaseGravable        = baseGravable,
                BaseGravableMensual = (decimal)nuevaBaseGravable,
                LimiteInferior      = limiteInferior,
                Base                  = _base,
                Tasa                  = porcentaje,
                IsrAntesDeSub         = isr,
                Subsidio              = subsidioAlEmpleo,
                NetoAPagar            = netoPagar,
                ResultadoIsrOSubsidio = Common.Utils.Utils.TruncateDecimales(isrOSubsidio),
                IdTablaIsr            = tablaIsr.IdISR,
                IdTablaSubsidio       = tablaSubsidio.IdSubsidio,
                Tablaisr              = incluirTablas ? tablaisrcompleta : null,
                Tablasubsidio         = incluirTablas ? tablasubsidiocompleta : null,
                EsISR                 = esISR
            };

            return(item);
        }