Ahora si que estoy quebrandome la cabeza con esto pero confio en que alguien podra ayudarme con esto ya que son unos gurus en este foro
.
Necesito desarrollar un procedimiento el cual pueda realizar el cálculo del ISR que debe de ser retenido a una seria de empleados basado en su sueldo.
Para poder calcular el ISR es necesario tener una tabla en la base de datos que contenga la siguiente información:
Código Tabla:
Ver originalLímite Inferior Límite Superior Cuota Fija % Retención
0.01 496.07 0 1.92
496.08 4,210.41 9.52 6.40
4,210.42 7,399.42 247.23 10.88
7,399.43 8,601.50 594.24 16.00
8,601.51 10,298.35 786.55 17.92
10,298.36 20,770.29 1,090.62 21.36
20,770.30 32,736.83 3,327.42 23.52
32,736.84 En adelante 6,141.95 30.00
Los pasos para el cálculo del ISR son los siguientes:
1. Se ubica el sueldo en la tabla para saber el % y la cuota fija. La ubicación debe de ser entre el Límite inferior y Límite superior.
2. Se resta al sueldo gravable el límite inferior
3. Al resultado se multiplica por el porcentaje (eje. 28%)
4. Al resultado se suma la cuota fija.
5. Y el resultado es el impuesto bruto ISR.
Hasta ahora llevo esto hecho:
Código SQL:
Ver originalCREATE TABLE Datos_ISR
( ID_ISR NUMBER NOT NULL,
Limite_Inferior NUMBER NOT NULL,
Limite_Superior NUMBER NOT NULL,
Cuota_Fija NUMBER NOT NULL,
Porcentaje NUMBER NOT NULL);
Código SQL:
Ver originalINSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(1,0.01,496.07,0,1.92);
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(2,496.08,4210.41,9.52,6.4);
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(3,4210.42,7399.42,247.23,10.88);
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(4,7399.43,8601.5,594.24,16):
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(5,8601.51,10298.35,786.55,17.92);
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(6,10298.36,20770.29,1090.62,21.36);
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(7,20770.3,32736.83,3327.42,23.52);
INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(8,32736.84,9999999.00,6141.95,30);
Código SQL:
Ver originalCREATE TABLE Empleados
( ID_Empleado NUMBER NOT NULL,
Nombre_Empleado NUMBER NOT NULL,
Sueldo_Gravable NUMBER NOT NULL,
Total_ISR NUMBER NOT NULL,
Porcentaje NUMBER NOT NULL,
Sueldo_Recibido NUMBER NOT NULL,
Creado_Por varchar2(30),
Fecha_Creacion DATE);
Código SQL:
Ver originalCREATE OR REPLACE PROCEDURE calculoISR (
Sueldo_Gravable IN NUMBER,
Sueldo_Recibido OUT NUMBER,
Total_ISR OUT NUMBER,
Porcentaje OUT NUMBER
)
AS
Limite_Inferior NUMBER;
Cuota_Fija NUMBER;
BEGIN
CASE
WHEN Sueldo_Gravable > 0.01 && Sueldo_Gravable < 496.07
THEN SELECT Limite_Inferior, Cuota_Fija
INTO :Limite_Inferior, :Cuota_Fija
FROM Datos_ISR
WHERE ID_ISR = :1;
WHEN Sueldo_Gravable > 496.08 && Sueldo_Gravable < 4210.41
THEN SELECT Limite_Inferior, Cuota_Fija
INTO :Limite_Inferior, :Cuota_Fija
FROM Datos_ISR
WHERE ID_ISR = :2;
END CASE;
Total_ISR := (Sueldo_Gravable - (Limite_Inferior * Porcentaje) + Cuota_Fija);
Sueldo_Recibido := Sueldo_Gravable - Total_ISR;
END operacion;
/
Obviamente tengo incompleto el Procedure no se siquiera si ando cerca lo que necesito es que dando el sueldo_gravable se calculen automaticamente el sueldo_recibido, el Total_ISR y el porcentaje creo que esto ayudaria mucho a la gente de Mexico ya que es un calculo muy comun aqui para las nominas de empleados.
Espero alguien se tome la molestia de por lo menos intentar ayudarme o guiarme hacia la respuesta :P.