Inicio | Donaciones | Contacto
Generalidades Implantación Interfaz SAF CEF REF SOF Anexos
 
- Introducción
- Contabilidad
- Cajas y Bancos
- Catálogos
- Almacén
- Compras
- Ventas
- Producción
- Nómina
- Centro de Control
- Reportes

Motores del proyecto Forseti











Cálculo de nómina

En esta página se explica paso a paso como se calcula cada movimiento nómina de sistema y se incluyen las partes principales de las fórmulas de algunos movimientos, tal cual se presentan en el procedimiento de cálculo almacenado en la base de datos. Estas fórmulas se muestran en color azul.

Cálculo del sueldo y aguinaldo. Para nóminas normales se calculará el sueldo de la siguiente manera:

  1. Primero calcula un estimado multiplicando el salario diario establecido en el catálogo por los días del periodo y a este resultado le resta el importe de vacaciones o de vacaciones disfrutadas en caso de haber tomado o disfrutado de vacaciones durante este periodo. _SAL := (_SalarioDiario * _DiasNomina) - _IV - _IAV;
  2. Para determinar el sueldo gravado, primero verificará si el salario diario es mayor al salario mínimo establecido en la variable SALMIN, en caso verdadero, aplicará todo el estimado en el gravado, en caso falso, no aplicará nada en el gravado. CASE WHEN Salario_Diario > _SalarioMinimo THEN SAL ELSE 0.00 END;
  3. Para determinar el sueldo exento, verificará si el salario diario es mayor al salario mínimo y en caso verdadero, no aplicará nada en el exento, en caso falso, no aplicará todo el estimado. CASE WHEN Salario_Diario > _SalarioMinimo THEN 0.00 ELSE SAL END;

Para nóminas de aguinaldo se calculará el aguinaldo gravado y exento de la siguiente forma:

  1. Primero obtiene los días del año que proceden para el pago del aguinaldo: Si la fecha de ingreso es anterior al primero de enero, pagará con la base de todo el año (365 días), de lo contrario, pagará con la base del total de días del año que lleva trabajando. _TOTAL_DAG := case when _Fecha_Ingreso < _Fecha_Desde then getfechadiff('day',_Fecha_Desde, _Fecha_Hasta) + 1 else getfechadiff('day',_Fecha_Ingreso, _Fecha_Hasta) + 1 end;
  2. Ahora define el salario base del aguinaldo. Cuando NO aplique un cálculo mixto establecido en el catálogo de empleados, tomará el salario diario, de lo contrario tomará el salario mixto.            case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end
  3. Ahora calcula el proporcional multiplicando _TOTAL_DAG por los  días de aguinaldo que le corresponden según la fecha de antigüedad y el resultado lo divide entre 365 días del año.             (cast((_TOTAL_DAG * _DiasAg) as numeric) / _DiasAno )), 2)
  4. Con esto ya tenemos la base del pago. _ImporteAguinaldo := ROUND( ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * (cast((_TOTAL_DAG * _DiasAg) as numeric) / _DiasAno )), 2);
  5. Para determinar el aguinaldo exento dividirá _TOTAL_DAG entre los 365 días del año y al resultado lo multiplicará por 30 días de salario mínimo. Si esta base preliminar es menor a la base del pago, entonces esta base preliminar se ira al exento, de lo contrario, toda la base del pago se irá al exento. _IAE := case when ROUND( ((_TOTAL_DAG / _DiasAno) * (_SalarioMinimo * 30)), 2) < _ImporteAguinaldo then  ROUND( ((_TOTAL_DAG / _DiasAno) * (_SalarioMinimo * 30)), 2) else _ImporteAguinaldo end;
  6. Para determinar el aguinaldo gravado, verificará si el exento es menor a la base del pago, si es así, restará lo exento de la base del pago y el resultado será el importe gravado, de lo contrario, no habrá importe gravado.  _IAG := case when _IAE < _ImporteAguinaldo then _ImporteAguinaldo - _IAE else 0.00 end;

Cálculo de las faltas e incapacidades.

  1. Para el calculo de las faltas e incapacidades, primero deduce la cantidad de días del período de la nómina en el que el empleado faltó o estuvo de incapacidad revisando en el cierre diario y en los permisos.
  2. Ahora define el importe de las faltas de la siguiente manera: Cuando NO aplique un cálculo mixto establecido en el catálogo de empleados, tomará el salario diario, de lo contrario tomará el salario mixto. Este salario lo multiplicará por la cantidad de días del periodo en que faltó y el resultado será la deducción de las faltas. _FLT :=  round((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end ) * _TOTAL_FLT,2);
  3. Para calcular el importe de las incapacidades en cualquiera de sus modalidades (por maternidad, enfermedad, o accidente), tomará el salario diario y lo multiplicará por la cantidad de días del periodo en que estuvo de incapacidad y el resultado será la deducción de las incapacidades. _IIXM := round(_SalarioDiario * _TOTAL_IXM,2); _IIXE := round(_SalarioDiario * _TOTAL_IXE,2); _IIXA := round(_SalarioDiario * _TOTAL_IXA,2);

Cálculo de los descuentos por retardos y descuento sin goce de sueldo. Solo se calcularán retardos a empleados de nóminas estrictas ya que se calculan en base al registro de asistencias.

  1. Para el cálculo de los descuentos por retardos, primero deduce los tiempos de retardos y permisos de retardo sin goce de sueldo revisando en el cierre diario y en los permisos. Estos tiempos (especificados en horas donde por ejemplo 20 minutos serían 0.333333 hrs.) los multiplicará por el salario por hora del empleado y los resultados serán los importes asignados al descuento por retardos tentativo y al descuento tentativo por permiso sin goce de sueldo respectivamente (_PREV_IMPDESC y _PREV_IMPSINPAG).
  2. Si existe un importe tentativo de permiso sin goce de sueldo, debemos determinar el importe final del descuento por los retardos descontándole este tentativo ya que los permisos nulifican los descuentos por retardos. La siguiente fórmula se utiliza para determinar el importe final del descuento por los retardos: _IMPDESC :=  ( CASE WHEN ( _PREV_IMPDESC - _PREV_IMPSINPAG ) < 0 THEN 0.00 ELSE ( _PREV_IMPDESC - _PREV_IMPSINPAG ) END );
  3. Ahora asignamos el importe final del permiso sin goce de sueldo que depende de si existen o nó, retardos. En caso de no existir retardos, aunque existan permisos, estos no se aplicarán a la nómina ya que no se debería descontar nada. Con la siguiente fórmula determinamos esta situación: _IMPSINPAG := ( CASE WHEN ( _PREV_IMPDESC - _PREV_IMPSINPAG ) < 0 THEN _PREV_IMPDESC ELSE _PREV_IMPSINPAG END );

Cálculo de las inconsistencias (descuento por retardos acumulados).  Solo se calcularán inconsistencias a empleados de nóminas estrictas que tengan la casilla "Castigo por impuntualidad" del registro del empleado seleccionada, y cuando se especifique en el formulario del cálculo de la nómina.

  1. Cada inconsistencia consiste en cada falta o retardo que exista dentro del cierre diario de todo el mes en el que se calcularán las inconsistencias a menos de que existan permisos que las contrarresten (ver documentación del módulo de permisos para un análisis profundo). Por ejemplo, si el empleado tuvo 4 faltas en el mes y en las ocasiones que fue a trabajar llegó tarde 5 veces y se fue mas temprano 3 veces, entonces este empleado acumulará 12 inconsistencias.
  2. Para determinar el importe por descuento por retardos acumulados aplicará la siguiente operación: Cuando no existan inconsistencias no determinará ningún importe, de lo contrario, multiplicará el valor de la variable PPINCON por el salario diario o salario mixto (según aplique a este empleado el cálculo del sueldo diario o mixto) y el resultado de la operación lo multiplicará por el total de inconsistencias. _IMPPORINCON := CASE WHEN ( select sum(Incon) from _TMP_INCONSIS ) is null THEN 0.00 ELSE ROUND( _Porcentaje * (case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * (select sum(Incon) from _TMP_INCONSIS), 2) END;. La variable PPINCON representa un porcentaje de salario diario que se descontará por cada inconsistencia del mes y debe establecerse en formato decimal, por ejemplo, un 10%, debe establecerse como 0.1, y suponiendo que el salario diario sea de 250.00, las doce inconsistencias producirán una deducción por descuento por retardos acumulados de 300.00 aplicados en este periodo de nómina.

Cálculo de las vacaciones.

  1. Para el calculo de las vacaciones, primero deduce la cantidad de días del período de la nómina en el que el empleado tuvo vacaciones, vacaciones externas, anticipo de vacaciones, vacaciones pagadas, o vacaciones disfrutadas en el cierre diario y en los permisos (para un análisis mas completo, revisa la documentación del módulo de permisos enfocado a las vacaciones).
  2. Ahora define el importe de las vacaciones, vacaciones externas, anticipo de vacaciones y vacaciones pagadas de la siguiente manera: Cuando NO aplique un cálculo mixto, tomará el salario diario, de lo contrario tomará el salario mixto. Este salario lo multiplicará por la cantidad de días de vacaciones, vacaciones externas, vacaciones anticipadas o vacaciones pagadas y el resultado será la percepción de estas.
    _IV := ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * _TOTAL_DV);
    _IVP := ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * _TOTAL_DVP);
    _IVXF := ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * _TOTAL_DVXF);
    _IAV := ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * _TOTAL_DAV);
  3. Para determinar los importes gravados y exentos de las vacaciones, anticipo de vacaciones y vacaciones pagadas, verificará si el sueldo diario del empleado es mayor al mínimo, en caso de que así sea, todo el importe se gravará, de lo contrario, todo el importe será exento de impuestos. 
  4. Ahora define el importe de las vacaciones disfrutadas, primero obtiene el factor multiplicando la cantidad de días por la variable FAC_DVD (Factor de vacaciones disfrutadas). Según salario diario o mixto, este salario lo multiplicará por el factor el resultado será la deducción.
    _IVD := ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * (_TOTAL_DVD * _FAC_DVD));
    El factor de vacaciones disfrutadas se utiliza, cuando por ejemplo, al empleado se le pagaron 7 días de vacaciones y ganaba 100.00 pesos diarios, osea que se le pagaron 700.00. Posteriormente, se le realizó un aumento de sueldo a 110.00 pesos diarios. En esta situación, el descuento de los 7 días de las vacaciones disfrutadas generaría una deducción de 770.00, lo cual es incorrecto, por lo tanto, si se estableciera el factor a 0.90909 (90.909% del salario), la deducción ya sería la correcta. Para calcular el factor, simplemente hay que dividir manualmente el salario anterior entre el nuevo salario, en este caso, 700 / 770 = 0.90909.
  5. Par definir el importe de la prima vacacional, ignora la cantidad de días establecidos en el cierre o permiso, simplemente si existen, calculará el importe. Primero obtiene los días de vacaciones y el porcentaje de la prima según la antigüedad del empleado, establecidos en la tabla de vacaciones (_TOTAL_PV y _PrimaVac). Ahora calcula la base preliminar a pagar multiplicando su salario diario o mixto, por los días de vacaciones, y por el porcentaje de la prima. _ImportePrimaVac := ((case when _CalculoMixto = '0' then _SalarioDiario else _SalarioMixto end) * _TOTAL_PV * _PrimaVac); .
  6. Para determinar la prima exenta, si 15 días de salario mínimo son menores a la base preliminar, esta quedará como 15 días de salario mínimo, de lo contrario, toda la base preliminar se irá a la prima vacacional exenta de impuestos.  _IPVE := case when ROUND((_SalarioMinimo * 15),2) < _ImportePrimaVac then ROUND((_SalarioMinimo * 15),2) else _ImportePrimaVac end;
  7. Para determinar la prima gravada, verificará si el exento es menor a la base preliminar, si es así, restará lo exento de la base preliminar y el resultado será el importe gravado, de lo contrario, no habrá importe gravado.  _IPVG := case when _IPVE < _ImportePrimaVac then _ImportePrimaVac - _IPVE else 0.00 end;                      

Cálculo de las horas extras.

  1. Primero determina si a este empleado se le pagarán horas extras verificando que la casilla "Aplicación de horas Extras" en el registro del empleado en el catálogo este seleccionada. Si no está seleccionada, aunque el empleado haya tenido sus permisos de horas extras y en el registro de asistencias  (para empleados de nóminas estrictas) realmente demuestra que las realizó, no se le pagarán.
  2. Para el cálculo del tiempo extra expresado en horas, primero deduce la cantidad de horas dobles, horas triples, horas del domingo, horas por fuera y los días en los que el empleado tuvo horas extras, todo especificado en el cierre diario y en los permisos. Estos se calculan de la siguiente manera:
    1. Si se especifica H.E.P.F. al momento de calcular esta nómina, todas y absolutamente todas las horas, aún las del domingo, se irán la valor de las horas por fuera y no calculará ningún día de horas extras.
    2. Si si no se especifica H.E.P.F., revisará el valor para la variable de MAX_HE "Máximo de horas extras acumuladas", por ejemplo, si utiliza un valor de 9 horas como máximo para que el sistema no calcule horas extras triples, ni siquiera si se tratan del domingo, entonces, el proceso calculará un máximo de 9 horas dobles y el resto lo mandará a las horas por fuera. Los días de horas extras los calculara según el total de horas dobles como sigue: Si tiene mas de 6 horas tomará 3 días, entre 3 y 6 horas tomará 2 días y menos de 3 horas 1 día. _DiasHorasExtras := case when _TOTAL_HE > 6 then 3 when _TOTAL_HE <= 6 and _TOTAL_HE > 3 then 2 else 1 end;
    3. Para valores de cero en la variable MAX_HE, el sistema calculará las horas conforme a la ley, aplicando la fórmula de máximo 3 horas dobles en un día normal ya que las subsecuentes se considerarán como triples, y un máximo tres días en una semana laboral en donde el empleado puede tener horas extras, ya que en los días subsecuentes, todas las horas extras se tomarán como horas triples. Además, con esta configuración se considerarán las horas del domingo independientemente, las cuales se pagan como dobles, mas la prima dominical. Por último, se consideran todos los días, incluso los del domingo, para determinar los días en los que el empleado tuvo horas extras. 
  3. Ya que tenemos calculadas las cantidad de horas extras dobles, triples, por fuera y del domingo (_TOTAL_HE, _TOTAL_HT, _TOTAL_HF y _TOTAL_HD), procedemos a calcular el pago.
  4. Par definir el importe de las horas extras, calcula la base a pagar multiplicando su salario por hora, por la cantidad de horas dobles y por dos. Además, a este resultado le sumará el resultado de multiplicar su salario por hora, por la cantidad de horas triples y por tres. _ImporteHorasExtras := ((_SalarioPorHora * _TOTAL_HE) * 2) + ((_SalarioPorHora * _TOTAL_HT) * 3);
  5. Para determinar las horas extras exentas, si el salario diario es menor o igual al mínimo, toda la base la mandará al exento _IHEE := _ImporteHorasExtras; , de lo contrario, primero determinará una base exenta de la siguiente manera: el salario diario lo multiplica por la variable MHEE "Base para horas extras exentas" y este resultado lo multiplica por las semanas involucradas en este periodo de nómina. Si la base exenta es menor a la base a pagar, entonces toda la base exenta se irá al exento, de lo contrario, base total se irá al exento.  _IHEE := case when ROUND(_SalarioMinimo * _MHEE * (_DiasNomina/7),2) < _ImporteHorasExtras then ROUND(_SalarioMinimo * _MHEE * (_DiasNomina/7),2) else _ImporteHorasExtras end;
  6. Para determinar las horas extras gravadas, si el salario diario es menor o igual al mínimo, no mandará nada al gravado _IHEG := 0.00; , de lo contrario, verificará si el exento es menor a la base de pago, si es así, restará lo exento de la base de pago y el resultado será el importe de horas extras gravadas, de lo contrario, no habrá importe gravado. _ IHEG := case when _IHEE < _ImporteHorasExtras then _ImporteHorasExtras - _IHEE else 0.00 end;
  7. Par definir el importe de las horas por fuera (obviamente exentas de impuestos), multiplica su salario por hora, por la cantidad de horas por fuera y por dos. _IHE := (_SalarioPorHora * _TOTAL_HF) * 2;. Estas se pagarán por medio de una nómina especial en lugar de formar parte de la nómina normal.
  8. Par definir el importe de las horas domingo, calcula la base a pagar multiplicando su salario por hora, por la cantidad de horas del domingo y por dos . _ImporteHorasExtras := (_SalarioPorHora * _TOTAL_HD) * 2;
  9. Para determinar el importe de horas del domingo exento, si el salario diario es menor o igual al mínimo, toda la base la mandará al exento _IHDE := _ImporteHorasExtras; , de lo contrario, primero determinará una base exenta de la siguiente manera: el salario diario lo multiplica por la variable MHEE "Base para horas extras exentas" y este resultado lo multiplica por las semanas involucradas en este periodo de nómina. Si la base exenta es menor a la base a pagar, entonces toda la base exenta se irá al exento, de lo contrario, base total se irá al exento. _IHDE := case when ROUND(_SalarioMinimo * _MHEE * (_DiasNomina/7),2) < _ImporteHorasExtras then ROUND(_SalarioMinimo * _MHEE * (_DiasNomina/7),2) else _ImporteHorasExtras end;
  10. Para determinar el importe de horas del domingo gravado, si el salario diario es menor o igual al mínimo, no mandará nada al gravado _IHDG := 0.00; , de lo contrario, verificará si el exento es menor a la base de pago, si es así, restará lo exento de la base de pago y el resultado será el importe de horas del domingo gravadas, si no es así, no habrá importe gravado. _IHDG := case when _IHDE < _ImporteHorasExtras then _ImporteHorasExtras - _IHDE else 0.00 end;
  11. Par definir el importe de la prima dominical, calcula la base de la prima a pagar multiplicando la base de horas del domingo a pagar por el porcentaje de la prima especificado en la variable _PRIDOM "Prima dominical". _PrimaDominical := _ImporteHorasExtras * _PRIDOM;
  12. Para determinar la prima dominical exenta, si el salario diario es menor o igual al mínimo, toda la base de la prima la mandará al exento _PDE := _PrimaDominical; , de lo contrario, primero determinará una base exenta de la siguiente manera: el salario diario lo multiplica por las semanas involucradas en este periodo de nómina. Si la base exenta es menor a la base de la prima a pagar, entonces toda la base exenta se irá al exento, de lo contrario, la base de la prima total se irá al exento. _PDE := case when ROUND(_SalarioMinimo * (_DiasNomina/7),2) < _PrimaDominical then ROUND(_SalarioMinimo * (_DiasNomina/7),2) else _PrimaDominical end;
  13. Para determinar la prima dominical gravada, si el salario diario es menor o igual al mínimo, no mandará nada al gravado _PDG := 0.00; , de lo contrario, verificará si el exento es menor a la base de la prima a pagar, si es así, restará lo exento de la base de la prima a pagar y el resultado será el importe de la prima dominical gravada, si no es así, no habrá importe gravado. _PDG := case when _PDE < _PrimaDominical then _PrimaDominical - _PDE else 0.00 end;

Cálculo del I.M.S.S.

  1. Primero determina la base del IMSS a pagar (_IMSS): Si el salario integrado del trabajador es menor al salario tope establecido en la variable SALTOP "Salario Tope", entonces la base será igual a la suma de la columna del "Trabajador" de todos los conceptos establecidos en el módulo del IMSS, multiplicado por el resultado que genere su salario diario integrado, por los días del periodo realmente trabajados (_DT). Cuando el salario integrado sea mayor al salario tope, esta base se calculará de igual manera solo que tomará el salario tope en lugar del salario integrado. _IMSS := case when _SalarioIntegrado < _SalarioTope then ( round( (select SUM(Cuota_Trabajador) from TBL_NOM_IMSS ) * ( _SalarioIntegrado * _DT), 2 )) else (round( (select SUM(Cuota_Trabajador) from TBL_NOM_IMSS ) * ( _SalarioTope * _DT), 2 )) end;
  2. Ahora que ya tiene una base procede a calcular el importe de la deducción: Si el salario integrado es tres veces mayor al salario mínimo, a la base se le sumará lo que resulte de restar tres veces el salario mínimo del salario integrado, y a este resultado, multiplicarlo por los días trabajados y por el factor establecido en la variable COMRETIMSS "Factor de complemento de retención del seguro social". _IMSS := _IMSS + ((_SalarioIntegrado - (_SalarioMinimo * 3)) *S _COMRETIMSS * _DT); . Si el salario diario integrado no es tres veces mayor al mínimo, la base será el importe de retención del IMSS. 

Cálculo del impuesto I.S.P.T.

  1. Determina los días trabajados acumulados en el año basándose en todas las nóminas de este año, inclusive esta. En nóminas de aguinaldo, determina la base de días de pago, osea, los días del año, o cuando no ha cumplido el año, los días transcurridos desde su ingreso (_DAA).
  2. Determina las percepciones gravadas de sistema que aplican para cálculo de ISPT y que ha acumulado el empleado en el año, basándose en todas las nóminas del año... inclusive esta. Para nóminas de aguinaldo, solo incluye la base gravada _IAG  que se está calculando (_SAA).
  3. Determina las percepciones gravadas definidas por el usuario que aplican para cálculo del ISPT y que ha acumulado el empleado en el año, basándose en todas las nóminas del año... inclusive esta. Para nóminas de aguinaldo solo incluye las percepciones definidas por el usuario que se están calculando (_GAA).
  4. Ahora calcula la base; El importe acumulado gravado. _FI := (_SAA + _GAA) / _DAA;
  5. El rango lo toma de la tabla del ISR anualizada, donde la base, caiga dentro de los límites: _RANGO := ( select ID_ISR from TBL_NOM_ISR_ANUALIZADO where Limite_Inferior <= _FI and Limite_Superior >= _FI limit 1 ); 
  6. Obtiene el límite inferior establecido en este rango: _LI := ( select Limite_Inferior from TBL_NOM_ISR_ANUALIZADO where ID_ISR = _RANGO );
  7. Obtiene el excedente. Primero suma las percepciones de sistema mas las percepciones definidas por el usuario. A este resultado, le resta lo que resulte de multiplicar el límite inferior por los días trabajados acumulados en el año. _Exedente := ((_SAA + _GAA) - (_LI * _DAA));
  8. Determina el impuesto marginal excedente multiplicando el excedente por el porcentaje de excedente establecido en este rango. _IME := ( _Exedente * ( select Porcentaje_Exd from TBL_NOM_ISR_ANUALIZADO where ID_ISR = _RANGO ));
  9. Determina la cuota fija multiplicando los días trabajados acumulados en el año por la cuota fija establecida en este rango. _CF := ( select Cuota_Fija * _DAA from TBL_NOM_ISR_ANUALIZADO where ID_ISR = _RANGO );
  10. Suma el impuesto marginal excedente mas la cuota fija. _CFDTGAA := _IME + _CF;
  11. Ahora obtiene la suma de la deducción del ISPT determinada en todas las nóminas calculadas en este año (_AIM).
  12. Determina la base del ISPT para esta nómina. _ISPT := ROUND((_CFDTGAA + _AIM),2); . Recordemos que _AIM tendrá un valor negativo, por lo tanto, es importante comprender que esta operación realmente resta el valor de _AIM al valor de _CFDTGAA.
  13. Ahora que ya tenemos la base, el sistema le cambiará temporalmente el signo para convertirla en una deducción. Si esta deducción queda positiva, osea, mayor a cero, el sistema volverá a determinar esta base multiplicándola por la variable VARISPT "Proporción de devolución de ISPT sobre valores positivos". _ISPT := ROUND(_ISPT * (select VDecimal from TBL_VARIABLES where ID_Variable = 'VARISPT'),2);
  14. En caso de que la base esté correcta, verificará si a este empleado se le aplica el "Cálculo simplificado de impuestos" establecido el catálogo de empleados, si es así, el sistema volverá a determinar esta base multiplicándola por el valor establecido en el campo PCS (Porcentaje del Cálculo Simplificado) determinado en el registro del empleado en el catálogo _ISPT := ROUND(_ISPT * _EMP.PCS ,2); , si no es así, la base ya no cambiará. El Cálculo Simplificado se utiliza en ocasiones donde se dispara muy alto el impuesto debido a percepciones como el aguinaldo o vacaciones, entonces aplicamos este porcentaje para prorratear el pago durante dos o tres nóminas hasta que se normalice.
  15. Finalmente, cambia el signo de la base definitivamente y la registra como el impuesto de esta nómina.

Calculo del crédito fiscal.

  1. Primero determina la base de días trabajados mensual. Si es de nuevo ingreso en el mes, solo calcula los días trabajados del mes, de lo contrario, asignará la base mensual completa a 30.4 (_DTM).
  2. Determina las percepciones gravadas acumuladas, correspondientes a las nóminas de este mes, inclusive las percepciones definidas por el usuario que aplican para cálculo de ISPT, e incluye todas las de esta nómina (_INGGET).
  3. Determina el total de las percepciones gravadas netas acumuladas, correspondientes a las nóminas de este mes, excluyendo todas las de esta nómina (_INGM).
  4. Determina el total de las demás percepciones gravadas (percepciones diferentes al sueldo) netas de esta nómina (_ING).
  5. El rango lo toma de la tabla del crédito al salario, donde la base, definida por la suma del sueldo en esta nómina, más el total de las demás percepciones gravadas netas de esta nómina, más el total de las percepciones gravadas netas acumuladas correspondientes a las nóminas de este mes, caigan dentro de los límites de ingresos mensuales: _ RANGO := ( select ID_CS from TBL_NOM_CREDITO_SALARIO where ((Ingresos_Desde / 30.4) * _DTM) <= (_Sueldo + _ING + _INGM) and ((Ingresos_Hasta / 30.4) * _DTM) >= (_Sueldo + _ING + _INGM) limit 1 ); 
  6. El crédito al salario diario se calcula dividiendo el crédito al salario mensual establecido en este rango, entre los 30.4 días correspondientes a un mes. _CSDiario := ( select (CSM / 30.4) from TBL_NOM_CREDITO_SALARIO where ID_CS = _RANGO);
  7. Ahora determina la base previa del crédito fiscal para esta nómina (_PRVCF) multiplicando la base de días trabajados mensual, por el crédito al salario diario (_DTM * _CSDiario), y al resultado, sumándole el acumulado de todo el crédito obtenido en las nóminas de este mes .
  8. Finalmente se determina el crédito fiscal. Si existen percepciones acumuladas gravadas, incluyendo las de esta nómina, entonces el crédito fiscal será calculado de la siguiente manera: Se sumará el sueldo en esta nómina, más el total de las demás percepciones gravadas netas de esta nómina, más el total de las percepciones gravadas netas acumuladas correspondientes a las nóminas de este mes, y este resultado, se dividirá entre las percepciones acumuladas gravadas, incluyendo las de esta nómina. Por último, el resultado de esta base será multiplicado por la base previa. _CRDFS := ( case when _INGGET = 0 then 0 else round( ((_Sueldo + _ING + _INGM)/_INGGET) * _PRVCF, 2) end );

Cálculo de vales de despensa.

  1. Si se especifica "Generar vales de despensa" al momento de calcular esta nómina, procederá al cálculo de los vales de despensa de todos los empleados, de lo contrario, no se pagarán vales.
  2. Si la casilla "Ayuda con vales de despensa" del registro del empleado en el catálogo, está seleccionada, pagará los vales, de lo contrario, no se pagarán vales para este empleado.
  3. El importe exento de vales en el recibo, será el importe especificado en el registro del empleado en el catálogo.

Cálculo del infonavit.

  1. Si la casilla "Alta" del registro del empleado en el catálogo, está seleccionada (sin importar la fecha de alta), descontará el infonavit, de lo contrario, no se descontará nada a este empleado.
  2. Si el porcentaje de descuento en el registro del empleado es diferente de cero, entonces el descuento del infonavit se realizará de la siguiente manera: El salario diario integrado será multiplicado por los días trabajados en este periodo de nómina, y este resultado, será multiplicado por el porcentaje de descuento. El resultado será el descuento en el recibo. _INFON := ROUND( (_SalarioIntegrado * _DT * _EMP.Porcentaje_Descuento),2);
  3. Si el porcentaje de descuento en el registro del empleado es igual a cero, entonces el descuento del infonavit se realizará con la opción "Veces Salario Mínimo" de la siguiente manera: El salario mínimo será multiplicado por lo que resulte de la división del descuento establecido en "Descuento V.S.M." del registro del empleado,  entre 30 días del mes, y este resultado será multiplicado por los días trabajados en este periodo de nómina. El resultado será el descuento en el recibo. _INFON := ROUND( (_SalarioMinimo * (_EMP.Descuento_VSM / 30) * _DT),2);

Cálculo del fonacot.

  1. Si la casilla "Calcular créditos fonacot" del registro del empleado en el catálogo, está seleccionada, calculará las retenciones de sus créditos en caso de tener, de lo contrario, no se calcularán, aún cuando tenga créditos dados de alta en el módulo del fonacot.
  2. Para determinar la retención de cada uno de los créditos, el sistema dividirá la retención mensual establecida en el crédito entre los 30 días del mes, y el resultado lo multiplicará por los días del periodo de la nómina round((c.Retencion / 30) * _Periodo,1). El resultado final será la retención.
  3. Si la suma de todas las retenciones pasadas pertenecientes a este crédito, sobrepasa el importe del crédito, entonces no se generará la retención.
  4. El descuento en el recibo se determina sumando todas las retenciones de los créditos que el empleado tenga dados de alta al momento de calcular la nómina.

Cálculo del ahorro.

  1. Forseti permite aplicar un porcentaje del sueldo destinado a un ahorro. Si la casilla "Aplicación de ahorro" del registro del empleado en el catálogo, está seleccionada, descontará el ahorro, de lo contrario, no se descontará nada a este empleado.
  2. El importe de la deducción para el ahorro se realizará de la siguiente manera: El importe correspondiente al salario de esta nómina será multiplicado por el porcentaje de ahorro establecido en la variable ACA "Ahorro, Compensaciones y Anualidades", y el resultado será la deducción en el recibo.  _Sueldo * _ACA;

Cálculo de la cuota sindical.

  1. A los empleados sindicalizados se les deducirá un porcentaje para el pago del sindicato. Si la casilla "Empleado sindicalizado" del registro del empleado en el catálogo, está seleccionada, descontará la cuota sindical, de lo contrario, será un empleado de confianza y no se le descontará nada a este empleado.
  2. El importe de la deducción para la cuota sindical se realizará de la siguiente forma: Se sumarán todas las percepciones gravadas, menos las deducciones de la nómina. El resultado será multiplicado por el porcentaje de la cuota establecido en la variable CSIN "Cuota Sindical". El porcentaje de la variable debe indicarse en su versión decimal, por ejemplo, un 1% se debe indicar como 0.01.

Cálculo de los movimientos dinámicos (movimientos definidos por el usuario).

  1. Los movimientos definidos por el usuario se utilizan para definir conceptos en el recibo de la nómina, cuando los movimientos básicos de sistema, no satisfacen las necesidades de aplicación en el recibo.
  2. Para entender como se determinan los importes de los movimientos definidos por el usuario cuando se calcula una nómina, debes revisar la documentación del módulo de plantillas de nómina del CEF.
 
Páginas en este tema:
- Introducción
Generalidades del módulo de nóminas
- Movimientos
Descripción del módulo de movimientos de nómina.
- Departamentos
Descripción del módulo de departamentos de nómina
- Turnos
Generalidades del módulo de turnos
- Categorías
Módulo de las distintas categorías de sueldos de nómina.
- Empleados.
Documentación del módulo de empleados de nómina
- ISR
Módulo para la base de ISR en cálculos de nómina.
- IMSS
Módulo para la base del IMSS en cálculos de nómina.
- Crédito al salario
Módulo para la base del crédito al salario en cálculos de nómina.
- Aguinaldo
Módulo para la base del Aguinaldo en cálculos de nómina.
- Vacaciones
Módulo para la base de las Vacaciones en cálculos de nómina.
- Asistencias
Documentación sobre el módulo de asistencias al trabajo
- Permisos
Detalles del módulo de permisos de nómina como llegar tarde, falta justificada, etc.
- Plantillas
Documentación del módulo de plantillas de nómina
- Fonacot
Detalles del módulo de créditos fonacot
- Cierre diario
Descripción del módulo de cierre diario para nóminas estrictas.
- Nómina
Documentación y detalles sobre el módulo para el cálculo de la nómina.
- Cálculo de nómina
Esta página brinda un análisis del cálculo de las nóminas forseti
Positive SSL
Licencia Pública General de Affero (AGPL) | Sobre Forseti
Derechos Reservados © 2014 - 2015 Organización Forseti A.C.