public static decimal GetSubsidioCausadoByTipoNomina(int tipoNomina, decimal sbc) { if (tipoNomina == 16) { return(0); } var tablaSubsidio = NominasDao.GetTablaSubsidioByTipoNomina(tipoNomina, sbc); return(tablaSubsidio.Subsidio); }
//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); }