![sonriente](http://static.forosdelweb.com/fdwtheme/images/smilies/smile.png)
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 original
Lí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 original
CREATE 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 original
INSERT 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 original
CREATE 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 original
CREATE 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.