Exemplo n.º 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);
        }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
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);
        }