Hace ya algunos años desarrollé una función similar a la que hoy les comparto y la pueden ver en el artículo Función en Excel para calcular el ISPT anual .
Nuevamente la rescato del baúl del programador para hacerle algunas modificaciones. En primer lugar, la actualización de los valores de la tabla que sirve para el cálculo que corresponden al ejercicio 2014 y además de que en esta ocasión me pidieron que ya no descontara el subsidio anual y solamente hiciera el cálculo del ISPT.
¿ISPT o porcentaje del ISR?
Solo me gustaría hacer una pequeña aclaración, para efectos prácticos de este artículo el Impuesto sobre el Producto del Trabajo o porcentaje del Impuesto sobre la Renta que es como se le conoce actualmente son más o menos lo mismo y se calculan de la misma forma.
La Fórmula
Según me explicaron, esta es la fórmula que se utiliza para calcular el ISPT:

Fórmula para calcular el ISPT
El asunto se complica un poco porque varios de los valores se buscan en una tabla dependiendo de las Percepciones Gravables.

Tabla para el cálculo del ISPT 2014
Por eso creo que el mejor enfoque fue hacer una función para Excel y otra para LibreOffice que hicieran de manera automática la búsqueda de los valores y el cálculo del impuesto.
Código de la función para Excel
Inicialmente desarrolle esta función para Excel ya que es el programa que generalmente usan los contadores.
Function ISPT_Anual_2014(ByVal PercepcionesGravables As Double) As Double
'*****************************************************************************************************
' FUNCION PARA CALCULAR EL ISPT ANUAL
' Copyright (C) 2012 Francisco Javier de la Torre '
' Este código es software libre. Puede redistribuirlo y/o modificarlo bajo los términos de la
' Licencia Pública General de GNU según es publicada por la Free Software Foundation, bien de la
' versión 2 de dicha Licencia o bien (según su elección) de cualquier versión posterior.
' Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso
' sin la garantía MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR.
' Véase la Licencia Pública General de GNU para más detalles.
' Debería haber recibido una copia de la Licencia Pública General junto con este programa. Si no ha
' sido así, escriba a la Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
'
' Francisco Javier de la Torre.
' http://linuxmanr4.com
' inguanzo@gmail.com
'
' Actualización para el año 2014.
' Actualizacion y Correcciones para el 2012 gracias a Glezco21 y GRR.
'
'*****************************************************************************************************
Dim ISPT_anual(11, 2) As Double
Dim SUBSIDIO_AL_EMPLEO_ANUAL(11, 1) As Double
Dim ISPT_LimiteInferior As Double
Dim CuotaFija As Double
Dim PorcentajeSobreExcedente As Double
Dim i As Integer
Dim ISPT As Double
'Definición de las tablas iniciales
'ISPT ANUAL
'==============================
'Limite inferior
ISPT_anual(0, 0) = 0.01
ISPT_anual(1, 0) = 5952.85
ISPT_anual(2, 0) = 50524.93
ISPT_anual(3, 0) = 88793.05
ISPT_anual(4, 0) = 103218.01
ISPT_anual(5, 0) = 123580.21
ISPT_anual(6, 0) = 249243.49
ISPT_anual(7, 0) = 392841.97
ISPT_anual(8, 0) = 750000.01
ISPT_anual(9, 0) = 1000000.01
ISPT_anual(10, 0) = 3000000.01
ISPT_anual(11, 0) = 999999999 'Limite superior muy alto
'Cuota fija
ISPT_anual(0, 1) = 0
ISPT_anual(1, 1) = 114.29
ISPT_anual(2, 1) = 2966.91
ISPT_anual(3, 1) = 7130.48
ISPT_anual(4, 1) = 9438.47
ISPT_anual(5, 1) = 13087.37
ISPT_anual(6, 1) = 39929.05
ISPT_anual(7, 1) = 73703.41
ISPT_anual(8, 1) = 180850.82
ISPT_anual(9, 1) = 260850.81
ISPT_anual(10, 1) = 940850.81
ISPT_anual(11, 1) = 0
'Porcentaje sobre excedente
ISPT_anual(0, 2) = 0.0192
ISPT_anual(1, 2) = 0.064
ISPT_anual(2, 2) = 0.1088
ISPT_anual(3, 2) = 0.16
ISPT_anual(4, 2) = 0.1792
ISPT_anual(5, 2) = 0.2136
ISPT_anual(6, 2) = 0.2352
ISPT_anual(7, 2) = 0.3
ISPT_anual(8, 2) = 0.32
ISPT_anual(9, 2) = 0.34
ISPT_anual(10, 2) = 0.35
ISPT_anual(11, 2) = 0
'Iniciamos el cálculo del ISPT anual.
CuotaFija = 0: PorcentajeSobreExcedente = 0
'Buscamos un valor apropiado en la tabla del ISPT Anual
i = 0
Do
If ISPT_anual(i, 0) > PercepcionesGravables Then
ISPT_LimiteInferior = ISPT_anual(i - 1, 0)
CuotaFija = ISPT_anual(i - 1, 1)
PorcentajeSobreExcedente = ISPT_anual(i - 1, 2)
Exit Do
Else
i = i + 1
End If
Loop Until i = 12
'Ya tenemos los valores de Cuota Fija y Porcentaje sobre excedente, procedemos a calcular el ISPT Anual
ISPT = CuotaFija + ((PercepcionesGravables - ISPT_LimiteInferior) * PorcentajeSobreExcedente)
ISPT_Anual_2014 = Round(ISPT, 2)
End Function
Código de la función para LibreOffice
El código para LibreOffice es muy similar al de Excel, solo se cambio la función Round por Format para que el resultado lo muestre solamente con 2 decimales.
REM ***** BASIC *****
Function ISPT_Anual_2014(ByVal PercepcionesGravables As Double) As Double
'*****************************************************************************************************
' FUNCION PARA CALCULAR EL ISPT ANUAL
' Copyright (C) 2012 Francisco Javier de la Torre '
' Este código es software libre. Puede redistribuirlo y/o modificarlo bajo los términos de la
' Licencia Pública General de GNU según es publicada por la Free Software Foundation, bien de la
' versión 2 de dicha Licencia o bien (según su elección) de cualquier versión posterior.
' Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso
' sin la garantía MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR.
' Véase la Licencia Pública General de GNU para más detalles.
' Debería haber recibido una copia de la Licencia Pública General junto con este programa. Si no ha
' sido así, escriba a la Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU.
'
' Francisco Javier de la Torre.
' http://linuxmanr4.com
' inguanzo@gmail.com
'
' Actualización para el año 2014.
' Actualizacion y Correcciones para el 2012 gracias a Glezco21 y GRR.
'
'*****************************************************************************************************
Dim ISPT_anual(11, 2) As Double
Dim SUBSIDIO_AL_EMPLEO_ANUAL(11, 1) As Double
Dim ISPT_LimiteInferior As Double
Dim CuotaFija As Double
Dim PorcentajeSobreExcedente As Double
Dim i As Integer
Dim ISPT As Double
'Definición de las tablas iniciales
'ISPT ANUAL
'==============================
'Limite inferior
ISPT_anual(0, 0) = 0.01
ISPT_anual(1, 0) = 5952.85
ISPT_anual(2, 0) = 50524.93
ISPT_anual(3, 0) = 88793.05
ISPT_anual(4, 0) = 103218.01
ISPT_anual(5, 0) = 123580.21
ISPT_anual(6, 0) = 249243.49
ISPT_anual(7, 0) = 392841.97
ISPT_anual(8, 0) = 750000.01
ISPT_anual(9, 0) = 1000000.01
ISPT_anual(10, 0) = 3000000.01
ISPT_anual(11, 0) = 999999999 'Limite superior muy alto
'Cuota fija
ISPT_anual(0, 1) = 0
ISPT_anual(1, 1) = 114.29
ISPT_anual(2, 1) = 2966.91
ISPT_anual(3, 1) = 7130.48
ISPT_anual(4, 1) = 9438.47
ISPT_anual(5, 1) = 13087.37
ISPT_anual(6, 1) = 39929.05
ISPT_anual(7, 1) = 73703.41
ISPT_anual(8, 1) = 180850.82
ISPT_anual(9, 1) = 260850.81
ISPT_anual(10, 1) = 940850.81
ISPT_anual(11, 1) = 0
'Porcentaje sobre excedente
ISPT_anual(0, 2) = 0.0192
ISPT_anual(1, 2) = 0.064
ISPT_anual(2, 2) = 0.1088
ISPT_anual(3, 2) = 0.16
ISPT_anual(4, 2) = 0.1792
ISPT_anual(5, 2) = 0.2136
ISPT_anual(6, 2) = 0.2352
ISPT_anual(7, 2) = 0.3
ISPT_anual(8, 2) = 0.32
ISPT_anual(9, 2) = 0.34
ISPT_anual(10, 2) = 0.35
ISPT_anual(11, 2) = 0
'Iniciamos el cálculo del ISPT anual.
CuotaFija = 0: PorcentajeSobreExcedente = 0
'Buscamos un valor apropiado en la tabla del ISPT Anual
i = 0
Do
If ISPT_anual(i, 0) > PercepcionesGravables Then
ISPT_LimiteInferior = ISPT_anual(i - 1, 0)
CuotaFija = ISPT_anual(i - 1, 1)
PorcentajeSobreExcedente = ISPT_anual(i - 1, 2)
Exit Do
Else
i = i + 1
End If
Loop Until i = 12
'Ya tenemos los valores de Cuota Fija y Porcentaje sobre excedente, procedemos a calcular el ISPT Anual
ISPT = CuotaFija + ((PercepcionesGravables - ISPT_LimiteInferior) * PorcentajeSobreExcedente)
ISPT_Anual_2014 = Format(ISPT,"000000000000000.00")
End Function
Software Libre
Los códigos de las funciones son software libre (libertad para usar,copiar y modificar). Aunque hice varias pruebas y lo verifiqué varias veces haciendo el cálculo manualmente no esta exento de errores, así que les pido que si notan algún “detallito” o error, por favor no dejen de reportarlo.
Para que no batallen, les dejo este archivo zip ISPT 2014 v20140212 que incluye sendos ejemplos en Excel y Libreoffice.
Espero que esta función les sea de utilidad a los amigos contadores que siendo honestos, les deberían de dar una medalla por hacer de estos cálculos su trabajo cotidiano.
