Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Calculo de impuesto isr de mexico

Estas en el tema de Calculo de impuesto isr de mexico en el foro de Oracle en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/05/2013, 21:21
Avatar de Kergan  
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 10 años, 11 meses
Puntos: 0
Pregunta Calculo de impuesto isr de mexico

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 original
  1. Límite Inferior     Límite Superior         Cuota Fija      % Retención
  2. 0.01                496.07                  0               1.92
  3. 496.08              4,210.41                9.52            6.40
  4. 4,210.42            7,399.42                247.23          10.88
  5. 7,399.43            8,601.50                594.24          16.00
  6. 8,601.51            10,298.35               786.55          17.92
  7. 10,298.36           20,770.29               1,090.62        21.36
  8. 20,770.30           32,736.83               3,327.42        23.52
  9. 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
  1. CREATE TABLE Datos_ISR
  2. (   ID_ISR              NUMBER NOT NULL,
  3.     Limite_Inferior     NUMBER NOT NULL,
  4.     Limite_Superior     NUMBER NOT NULL,
  5.     Cuota_Fija          NUMBER NOT NULL,
  6.     Porcentaje          NUMBER NOT NULL);

Código SQL:
Ver original
  1. INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(1,0.01,496.07,0,1.92);
  2.     INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(2,496.08,4210.41,9.52,6.4);
  3.     INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(3,4210.42,7399.42,247.23,10.88);
  4.     INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(4,7399.43,8601.5,594.24,16):
  5.     INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(5,8601.51,10298.35,786.55,17.92);
  6.     INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(6,10298.36,20770.29,1090.62,21.36);
  7.     INSERT INTO Datos_ISR(ID_ISR,Limite_Inferior,Limite_Superior,Cuota_Fija,Porcentaje) VALUES(7,20770.3,32736.83,3327.42,23.52);
  8.     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
  1. CREATE TABLE Empleados
  2. (   ID_Empleado         NUMBER NOT NULL,
  3.     Nombre_Empleado     NUMBER NOT NULL,
  4.     Sueldo_Gravable     NUMBER NOT NULL,
  5.     Total_ISR           NUMBER NOT NULL,
  6.     Porcentaje          NUMBER NOT NULL,
  7.     Sueldo_Recibido     NUMBER NOT NULL,
  8.     Creado_Por          varchar2(30),
  9.     Fecha_Creacion      DATE);

Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE calculoISR (
  2.     Sueldo_Gravable     IN  NUMBER,
  3.     Sueldo_Recibido     OUT NUMBER,
  4.     Total_ISR           OUT NUMBER,
  5.     Porcentaje          OUT NUMBER
  6.     )
  7. AS
  8.  
  9.     Limite_Inferior     NUMBER;
  10.     Cuota_Fija          NUMBER;
  11.  
  12. BEGIN
  13.  
  14.     CASE
  15.    
  16.         WHEN Sueldo_Gravable > 0.01 && Sueldo_Gravable < 496.07
  17.             THEN SELECT Limite_Inferior, Cuota_Fija
  18.                  INTO   :Limite_Inferior, :Cuota_Fija
  19.                  FROM   Datos_ISR
  20.                  WHERE  ID_ISR = :1;
  21.         WHEN Sueldo_Gravable > 496.08 && Sueldo_Gravable < 4210.41
  22.             THEN SELECT Limite_Inferior, Cuota_Fija
  23.                  INTO   :Limite_Inferior, :Cuota_Fija
  24.                  FROM   Datos_ISR
  25.                  WHERE  ID_ISR = :2;
  26.    
  27.     END CASE;
  28.                  
  29.         Total_ISR := (Sueldo_Gravable - (Limite_Inferior * Porcentaje) + Cuota_Fija);
  30.         Sueldo_Recibido := Sueldo_Gravable - Total_ISR;
  31.    
  32. END operacion;
  33. /

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.

Última edición por Kergan; 29/05/2013 a las 23:08 Razón: Actualizacion de datos
  #2 (permalink)  
Antiguo 30/05/2013, 08:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Calculo de impuesto isr de mexico

Hola Kergan

Veo que te estas complicando en el PL haciendo uso del CASE.

Mira esto:
Código SQL:
Ver original
  1. CREATE OR REPLACE PROCEDURE calculoISR (
  2.     Sueldo_Gravable     IN  NUMBER,
  3.     Sueldo_Recibido     OUT NUMBER,
  4.     Total_ISR           OUT NUMBER,
  5.     v_porcentaje          OUT NUMBER
  6.     )
  7. AS
  8.  
  9.     v_limite_inferior     NUMBER;
  10.     v_cuota_fija          NUMBER;
  11.  
  12. BEGIN
  13.    
  14.     --Paso 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.
  15.     SELECT limite_inferior,
  16.            cuota_fija,
  17.            porcentaje
  18.     INTO
  19.            v_limite_inferior,
  20.            v_cuota_fija,
  21.            v_porcentaje
  22.     FROM datos_ISR
  23.     WHERE Sueldo_Gravable BETWEEN limite_inferior AND limite_superior;
  24.    
  25.     --Paso 2: Se resta al sueldo gravable el límite inferior
  26.     Total_ISR := Sueldo_Gravable - v_limite_inferior;
  27.    
  28.     --Paso 3: Al resultado se multiplica por el porcentaje (eje. 28%)
  29.     Total_ISR := Total_ISR * v_porcentaje;
  30.    
  31.     --Paso 4: Al resultado se suma la cuota fija.
  32.     Total_ISR := Total_ISR + v_cuota_fija;
  33.    
  34.     Sueldo_Recibido := Sueldo_Gravable + Total_ISR;
  35.    
  36. END calculoISR;
  37. /

En los pasos que mencionas no entendí bien como sale el sueldo recibido. Yo lo puse como la suma del sueldo gravable mas el total ISR.

Para probar el procedimiento puedes ejecutar este bloque anonimo.

Código SQL:
Ver original
  1. DECLARE
  2.  v_sueldo_gravable NUMBER := &SUELDO;
  3.  v_sueldo_recibido NUMBER;
  4.  v_total_isr NUMBER;
  5.  v_porcentaje NUMBER;
  6. BEGIN
  7.  calculoISR(v_sueldo_gravable, v_sueldo_recibido, v_total_isr,v_porcentaje);
  8.  DBMS_OUTPUT.PUT_LINE('El sueldo recibido es: '||v_sueldo_recibido);
  9.  DBMS_OUTPUT.PUT_LINE('El total ISR es: '||v_total_isr);
  10.  DBMS_OUTPUT.PUT_LINE('El porcentaje es: '||v_porcentaje);
  11. END;
  12. /

Ya solo es cuestión que revises los calculos. Soy de Colombia y no tengo idea de que hablas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/05/2013, 12:16
Avatar de Kergan  
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Calculo de impuesto isr de mexico

Muchisimas gracias por tu ayuda huesos!!!!

creo que con eso ya quedo el procedure solo tuve que cambiar esta parte ya que el ISR es el "Impuesto sobre la renta" que nos quitan a todos los trabajadores Mexicanos sigh jajaaja.

Código SQL:
Ver original
  1. --Paso 5: Al sueldo gravable se le resta el ISR
  2.     Sueldo_Recibido := Sueldo_Gravable - Total_ISR;

Ahora solo me falta alguna manera de que se haga el calculo de los 3 valores cuando inserte un nuevo empleado tengo un trigger que me pone la fecha y el usuario asi:

Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER Creacion_Empleado
  2. BEFORE INSERT ON Empleados
  3. FOR EACH ROW
  4.  
  5. BEGIN
  6.    
  7.     :NEW.Fecha_Creacion  :=  SYSDATE;
  8.     :NEW.Creado_Por := USER;
  9.  
  10. END Creación_Empleado;

Con esto al hacer el insert por ejemplo:

Código SQL:
Ver original
  1. INSERT INTO Empleados(ID_Empleado,Nombre_Empleado,Sueldo_Gravable) VALUES(1,'Juan Perez',500);

Me genera:

Código SQL:
Ver original
  1. ID_EMPLEADO NOMBRE_EMPLEADO                SUELDO_GRAVABLE  TOTAL_ISR PORCENTAJE
  2. ----------- ------------------------------ --------------- ---------- ----------
  3. SUELDO_RECIBIDO CREADO_POR                     FECHA_CR
  4. --------------- ------------------------------ --------
  5.           1 Juan Perez                                 500
  6.                 LUIS                           30/05/13

Como podria hacerle para que ejecute el procedure y calcule el Sueldo_Recibido, Total_ISR y el Porcentaje?
  #4 (permalink)  
Antiguo 30/05/2013, 12:26
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Calculo de impuesto isr de mexico

Solo tienes que modificar el trigger para que ejecute el procedure.

Código SQL:
Ver original
  1. CREATE OR REPLACE TRIGGER Creacion_Empleado
  2. BEFORE INSERT ON Empleados
  3. FOR EACH ROW
  4.  
  5. BEGIN
  6.    
  7.     :NEW.Fecha_Creacion  :=  SYSDATE;
  8.     :NEW.Creado_Por := USER;
  9.     calculoISR(:NEW.Sueldo_Gravable, :NEW.Sueldo_Recibido, :NEW.Total_ISR,:NEW.Porcentaje);
  10.  
  11. END Creacinn_Empleado;
  12. /

el :NEW de todos los campos es llenado en el procedure e insertado en la tabla tal cual necesitas.
Recuerda que estos campos en el procedure son de salida. Por lo que entran vacios y salen llenos.

saludos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 30/05/2013 a las 12:36

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:17.