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); }
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); }
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); }
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); }
//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); }
/// <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); }