1985 lines
64 KiB
Plaintext
1985 lines
64 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------
|
|
PROGRAMA : NOPRMT008
|
|
OBJETIVO : Generar los registros que va a contener la nomina
|
|
de empleados a partir de sus movimientos
|
|
PROGRAMADOR : Juan F. Soto
|
|
FECHA : Septiembre 10, 1993.
|
|
MODIFICACION : MONTO EXCENTO DE LA RENTA ANTES ERA DE 84000, AHORA ES DE
|
|
90,072.00
|
|
FECHA : 9 DE FEBRERO DE 1998
|
|
MODIFICACION : SEGURIDAD SOCIAL
|
|
FECHA : Junio 10, 2003
|
|
------------------------------------------------------------------------
|
|
}
|
|
|
|
GLOBALS
|
|
"noprgb000.4gl"
|
|
|
|
DEFINE calcula,calcula_tss CHAR(1)
|
|
DEFINE p_mes1,numero_nomina,num_van,tiempo,semanas,p_mes,p_ano SMALLINT
|
|
DEFINE impuesto_c,sueldo_ganado,ing_regal,factor,renta_p,val_bonifica,valor_renta DECIMAL(12,2)
|
|
DEFINE ch_num CHAR(4)
|
|
DEFINE porc_dias,dias,meses DECIMAL(8,2)
|
|
DEFINE num_ch CHAR(4)
|
|
DEFINE numero INTEGER
|
|
DEFINE empleados CHAR(500)
|
|
DEFINE porc_emp,porc_cia,porciento DECIMAL(9,4),
|
|
afp_pago_emp,afp_pago_cia,cuota_ss_pa,valor_tss_emp,valor_tss_cia,salario_tss,otros_ing_tss DECIMAL(10,2),
|
|
fecha_inicio_p DATE
|
|
|
|
DEFINE interes,p_valor,p_cantidad,salario_h,renta_pagada_15,renta_pagada_20,
|
|
renta_pagada_27,renta_15,renta_20,renta_27,renta_30,porc_extras,valor_bonif,
|
|
valor_regal,renta_boni,valor_bonif1,sueldo_boni,renta_pagada,
|
|
excento,hasta_15,hasta_20,hasta_25,valor_vacacion DECIMAL(12,2)
|
|
DEFINE t,p_codigo,l,dia,k,p,idx1 INTEGER
|
|
DEFINE k1,vacaciones,hay1,hay,bonifica,regalia,p_tipo,encontre,opt1,
|
|
retorne CHAR(1)
|
|
DEFINE fecha_ini_per,p_fecha_del,p_fecha_al,p1_fecha_del,p1_fecha_al DATE
|
|
DEFINE horas INTERVAL HOUR TO MINUTE
|
|
DEFINE nombre_mov CHAR(30)
|
|
DEFINE t_cantidad_35,t_cantidad_100,horas_ex,sueldo_h,p_h_normal,otros_ing
|
|
DECIMAL(8,2)
|
|
DEFINE t_horas_ex,horas_35,horas_100,t_horas_35,t_horas_100,acumulado,renta
|
|
DECIMAL(12,2)
|
|
DEFINE sueldo,sueldo_renta,p_sueldo,salario_semanal DECIMAL(12,2)
|
|
|
|
DEFINE ingresos_empleado, acum_mes_ss, cuota_ss, acum_ing_mes DECIMAL(12,2)
|
|
DEFINE ultima_semana_mes CHAR(1)
|
|
DEFINE fecha_ini_mes DATE
|
|
DEFINE num_periodo,semanas_mes, ult_nomi_mes INTEGER
|
|
|
|
DEFINE ss RECORD
|
|
salario_sem_hasta LIKE notb00006.salario_sem_hasta,
|
|
salario_men_hasta LIKE notb00006.salario_men_hasta,
|
|
porc_emp LIKE notb00006.porc_emp,
|
|
porc_pat LIKE notb00006.porc_pat
|
|
END RECORD
|
|
|
|
DEFINE globales RECORD
|
|
cod_mov SMALLINT,
|
|
cantidad_emp LIKE notb00002.cantidad_emp,
|
|
clase_mov CHAR(1)
|
|
END RECORD
|
|
|
|
DEFINE h_extras RECORD
|
|
fecha DATE,
|
|
entrada DATETIME HOUR TO MINUTE,
|
|
salida DATETIME HOUR TO MINUTE,
|
|
extra_35 INTERVAL HOUR TO MINUTE,
|
|
extra_100 INTERVAL HOUR TO MINUTE
|
|
END RECORD
|
|
|
|
DEFINE movi RECORD
|
|
cod_mov SMALLINT,
|
|
valor DECIMAL(10,2)
|
|
END RECORD
|
|
|
|
DEFINE desp_mov ARRAY[100] OF RECORD
|
|
clasifica CHAR(1),
|
|
cod_mov SMALLINT,
|
|
descrip_mov CHAR(30)
|
|
END RECORD
|
|
|
|
DEFINE datos_nomi RECORD
|
|
num_nomi LIKE notb00010.num_nomi,
|
|
tipo_emp LIKE notb00010.tipo_emp
|
|
END RECORD
|
|
|
|
DEFINE datos_emp RECORD
|
|
num_emp LIKE adtb00003.num_emp,
|
|
departamento LIKE adtb00003.departamento,
|
|
nivel_emp LIKE adtb00003.nivel_emp,
|
|
cod_puesto LIKE adtb00003.cod_puesto,
|
|
nom1_emp LIKE adtb00003.nom1_emp,
|
|
apell1_emp LIKE adtb00003.apell1_emp,
|
|
sueldo LIKE adtb00003.sueldo_ac,
|
|
paga_seg LIKE adtb00003.paga_seg,
|
|
fecha DATE
|
|
END RECORD
|
|
|
|
DEFINE datos_mov RECORD
|
|
cod_mov LIKE notb00002.cod_mov,
|
|
clase_mov LIKE notb00002.clase_mov,
|
|
cantidad LIKE notb00002.cantidad_emp,
|
|
valor LIKE notb00007.valor,
|
|
cantidad_emp LIKE notb00002.cantidad_emp,
|
|
cantidad_cia LIKE notb00002.cantidad_cia
|
|
END RECORD
|
|
|
|
DEFINE movi_emp ARRAY [52] OF RECORD
|
|
num_emp SMALLINT,
|
|
cod_mov LIKE notb00002.cod_mov,
|
|
clase_mov CHAR(1),
|
|
cantidad LIKE notb00002.cantidad_emp,
|
|
valor LIKE notb00007.valor
|
|
END RECORD
|
|
|
|
FUNCTION noprmt008()
|
|
CLEAR SCREEN
|
|
CALL pantalla()
|
|
OPTIONS
|
|
FORM LINE 9,
|
|
PROMPT LINE 12,
|
|
ERROR LINE 24,
|
|
COMMENT LINE 23
|
|
|
|
DISPLAY "noprmt008" AT 4,3 ATTRIBUTE(RED)
|
|
DISPLAY "Generacion de nomina" AT 6,30 ATTRIBUTE(BLACK)
|
|
LET p_formulario = formulario CLIPPED,"nofmmt008"
|
|
OPEN FORM nofmmt008 FROM "nofmmt008"
|
|
DISPLAY FORM nofmmt008
|
|
|
|
# Seccion de captura de informacion general de la generacion de
|
|
# la nomina
|
|
LET int_flag = false
|
|
INPUT BY NAME datos_nomi.*
|
|
AFTER FIELD num_nomi
|
|
IF datos_nomi.num_nomi IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_nomi
|
|
END IF
|
|
|
|
AFTER FIELD tipo_emp
|
|
IF datos_nomi.tipo_emp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_emp
|
|
END IF
|
|
|
|
# Busqueda del periodo comprendido de la nomina
|
|
|
|
SELECT fecha_del,fecha_al,h_normal,mes,ano,num_sem INTO
|
|
p_fecha_del,p_fecha_al,p_h_normal,p_mes1,p_ano,semanas_mes
|
|
FROM notb00010
|
|
WHERE num_nomi = datos_nomi.num_nomi and
|
|
tipo_emp = datos_nomi.tipo_emp
|
|
and status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 199
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_nomi
|
|
END IF
|
|
|
|
SELECT MIN(a.fecha_del),MAX(a.fecha_al)
|
|
INTO p1_fecha_del,p1_fecha_al
|
|
FROM notb00010 a
|
|
WHERE a.ano = p_ano
|
|
and a.mes = p_mes1
|
|
and a.tipo_emp = datos_nomi.tipo_emp
|
|
#and a.status_t is null
|
|
|
|
# Busca el mes inicial del periodo
|
|
SELECT MIN(a.fecha_Del) INTO fecha_inicio_p
|
|
FROM notb00010 a
|
|
WHERE a.ano = p_ano AND
|
|
a.tipo_emp = datos_nomi.tipo_emp
|
|
|
|
SELECT MAX(a.monto_excento),MAX(a.porc_15),MAX(a.porc_20),MAX(a.porc_25)
|
|
INTO excento,hasta_15,hasta_20,hasta_25
|
|
FROM notb00023 a
|
|
WHERE #a.fecha = "01012001" AND
|
|
a.tipo_emp = datos_nomi.tipo_emp
|
|
|
|
SELECT a.numero_nomina INTO num_periodo
|
|
FROM notb00023 a
|
|
WHERE #a.fecha = "01012001" AND
|
|
a.tipo_emp = datos_nomi.tipo_emp
|
|
{
|
|
|
|
LET excento = 11535
|
|
LET hasta_15 = 17396
|
|
LET hasta_20 = 26095
|
|
LET hasta_25 = 26096
|
|
}
|
|
DISPLAY BY NAME p_fecha_del,p_fecha_al ATTRIBUTE (BOLD)
|
|
LET ch_num = datos_nomi.num_nomi USING "&&&&"
|
|
LET numero = ch_num[3,4]
|
|
LET num_van= datos_nomi.num_nomi
|
|
LET p_mes = MONTH(p_fecha_al)
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET numero = num_periodo - numero
|
|
LET porciento = 0.50
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "V" THEN
|
|
LET numero = num_periodo - numero
|
|
LET porciento = 1.00
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET numero = num_periodo - numero
|
|
LET porciento = 0.0025
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Determina si es la ultima nomina del mes
|
|
#------------------------------------------------------------------------------
|
|
LET ultima_semana_mes = NULL
|
|
|
|
SELECT MAX(num_nomi) INTO ult_nomi_mes
|
|
FROM notb00010
|
|
WHERE tipo_emp = datos_nomi.tipo_emp AND
|
|
mes = p_mes1 AND
|
|
ano = p_ano AND num_nomi NOT IN (46,22) AND
|
|
status_t IS NULL
|
|
|
|
IF datos_nomi.num_nomi = ult_nomi_mes THEN
|
|
LET ultima_semana_mes = "S"
|
|
ELSE
|
|
LET ultima_semana_mes = "N"
|
|
END IF
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
SELECT MIN(fecha_del) INTO fecha_ini_mes
|
|
FROM notb00010
|
|
WHERE tipo_emp = datos_nomi.tipo_emp AND
|
|
mes = p_mes1 AND
|
|
ano = p_ano AND num_nomi not in (9924,9951,46,22,50) and
|
|
status_t <> "E"
|
|
END IF
|
|
|
|
LET ss.porc_emp = 0.00
|
|
LET ss.salario_sem_hasta = 0.00
|
|
LET ss.salario_men_hasta = 0.00
|
|
LET ss.porc_pat = 0.00
|
|
LET salario_semanal = 0.00
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
# Preparacion para busqueda por rango de departamento y rango de ficha del
|
|
# empleado
|
|
CONSTRUCT BY NAME criterio ON a.departamento,a.num_emp
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
CLEAR SCREEN
|
|
PROMPT
|
|
"ESTA SEGURO DE GENERAR DE NUEVO LA NOMINA (S/N) " FOR CHAR opt1
|
|
LET opt1= upshift(opt1)
|
|
IF opt1 != "S" THEN
|
|
RETURN
|
|
END IF
|
|
|
|
PROMPT
|
|
"ESTA NOMINA ES DE REGALIA (S/N) " FOR CHAR regalia
|
|
LET regalia = upshift(regalia)
|
|
|
|
PROMPT
|
|
"ESTA NOMINA ES DE VACACIONES COLECTIVAS (S/N) " FOR CHAR vacaciones
|
|
LET vacaciones = upshift(vacaciones)
|
|
|
|
PROMPT
|
|
"ESTA NOMINA ES DE BONIFICACION (S/N) " FOR CHAR opt2
|
|
LET opt2= upshift(opt2)
|
|
|
|
DISPLAY "Borrando Nomina... Espere Por Favor" AT 24,1
|
|
ATTRIBUTE (BOLD)
|
|
|
|
DELETE FROM notb00008 WHERE num_nomi = datos_nomi.num_nomi and
|
|
tipo_emp = datos_nomi.tipo_emp
|
|
|
|
# CALL second_scr()
|
|
LET p_formulario = formulario CLIPPED, "nofmmt108"
|
|
OPEN FORM nofmmt108 FROM "nofmmt108"
|
|
DISPLAY FORM nofmmt108
|
|
|
|
DECLARE tinti CURSOR FOR
|
|
SELECT cod_mov,descrip_mov FROM notb00002 WHERE status_t IS NULL
|
|
ORDER BY 1
|
|
|
|
LET idx1 = 1
|
|
FOREACH tinti INTO desp_mov[idx1].cod_mov,desp_mov[idx1].descrip_mov
|
|
IF regalia = "S" or opt2 = "S" THEN
|
|
LET desp_mov[idx1].clasifica = "N"
|
|
ELSE
|
|
LET desp_mov[idx1].clasifica = "S"
|
|
END IF
|
|
|
|
LET scr_l = scr_line()
|
|
LET idx1 = idx1 + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx1 -1)
|
|
INPUT ARRAY desp_mov WITHOUT DEFAULTS FROM s_mov.*
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
CLEAR SCREEN
|
|
CALL pantalla()
|
|
|
|
DISPLAY "noprmt008" AT 4,2
|
|
DISPLAY "Generacion de nomina" AT 6,32
|
|
|
|
# Preparacion de la busqueda de los empleados dependiendo del criterio de
|
|
# seleccion
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET empleados = "SELECT num_emp,departamento,nivel_emp,cod_puesto,nom1_emp,",
|
|
"apell1_emp,sueldo_ac,paga_seg,fech_efec ",
|
|
"FROM adtb00003 ",
|
|
" WHERE ",
|
|
" nomina = ? ",
|
|
" AND fech_efec <= ? ",
|
|
" AND (status_t is null or ",
|
|
" status_t = 'I') ",
|
|
"ORDER BY 1"
|
|
ELSE
|
|
LET empleados = "SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto,a.nom1_emp,",
|
|
"a.apell1_emp,a.sueldo_ac,a.paga_seg,a.fech_efec ",
|
|
"FROM adtb00003 a ",
|
|
" WHERE ",
|
|
" a.nomina = ? ",
|
|
" AND a.fech_efec <= ? ",
|
|
" AND (a.status_t is null or ",
|
|
" a.status_t = 'I') ",
|
|
"ORDER BY 1"
|
|
END IF
|
|
|
|
PREPARE comando FROM empleados
|
|
DECLARE busca SCROLL CURSOR FOR comando
|
|
OPEN busca USING datos_nomi.tipo_emp,p_fecha_al
|
|
|
|
WHILE STATUS != NOTFOUND
|
|
FETCH busca INTO datos_emp.*
|
|
|
|
IF status = notfound THEN
|
|
EXIT WHILE
|
|
END IF
|
|
LET meses = (p_fecha_al - datos_emp.fecha)
|
|
|
|
LET meses = meses / 30
|
|
FOR t = 1 TO 12
|
|
LET movi_emp[t].num_emp = null
|
|
LET movi_emp[t].cod_mov = null
|
|
LET movi_emp[t].clase_mov = null
|
|
LET movi_emp[t].cantidad = null
|
|
LET movi_emp[t].valor = null
|
|
END FOR
|
|
LET valor_renta = 0
|
|
IF regalia != "S" THEN
|
|
# Busca los acumulados de ingresos de los empleados
|
|
SELECT sum(valor) INTO acumulado from notb00008 WHERE status_t is null and
|
|
clase_mov in ("I","E") and
|
|
num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al #fecha_inicio_p
|
|
END IF
|
|
|
|
IF acumulado is null THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
|
|
DISPLAY "No. Ficha: " at 8,3
|
|
DISPLAY datos_emp.num_emp using "&&&&" at 8,15
|
|
DISPLAY datos_emp.nom1_emp clipped," ",datos_emp.apell1_emp at 8,20
|
|
DISPLAY "Acumulado Antes de esta Nomina:" at 9,3
|
|
|
|
LET sueldo_renta = 0
|
|
LET movi_emp[1].cod_mov = 1
|
|
LET movi_emp[1].clase_mov = "I"
|
|
|
|
# Calculo del sueldo normal semanal
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET salario_h = datos_emp.sueldo / 190.60
|
|
LET p_sueldo = datos_emp.sueldo
|
|
LET datos_emp.sueldo = (datos_emp.sueldo / 190.60) *
|
|
p_h_normal
|
|
# Mdificado el 11/11/2002 LET sueldo_boni = datos_emp.sueldo
|
|
END IF
|
|
|
|
# Calculo del sueldo normal quincenal
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
|
|
# Calculo para los empleados quincenales, segun reunion con el gerente general
|
|
# gerente recursos humanos y gerente informatica, se acordo que los empleados
|
|
# quincenales cobraran el 35% de su sueldo la primera quincena y el restante
|
|
# la quincena siguiente.
|
|
# Fecha modificacion 3/4/2002. SEGURIDAD SOCIAL
|
|
# Modificado por el Ing. Juan Francisco Soto
|
|
|
|
LET sueldo_ganado = 0
|
|
LET p_sueldo = datos_emp.sueldo
|
|
SELECT SUM(a.valor) INTO sueldo_ganado
|
|
FROM notb00008 a
|
|
WHERE a.fecha between p1_fecha_del AND
|
|
p1_fecha_al AND
|
|
a.num_emp = datos_emp.num_emp AND
|
|
a.cod_mov = 1
|
|
|
|
IF sueldo_ganado = 0 OR sueldo_ganado IS NULL THEN
|
|
LET datos_emp.sueldo = datos_emp.sueldo *.50
|
|
ELSE
|
|
LET datos_emp.sueldo = datos_emp.sueldo - sueldo_ganado
|
|
|
|
IF datos_emp.sueldo > p_sueldo / 12 THEN
|
|
LET datos_emp.sueldo = p_sueldo / 2
|
|
END IF
|
|
|
|
END IF
|
|
|
|
LET salario_h = datos_emp.sueldo / 95.33
|
|
LET sueldo_boni = datos_emp.sueldo
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "V" THEN
|
|
LET sueldo_boni = datos_emp.sueldo
|
|
END IF
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
LET movi_emp[1].cantidad = p_h_normal
|
|
LET movi_emp[1].valor = datos_emp.sueldo
|
|
|
|
LET sueldo_renta = sueldo_renta + movi_emp[1].valor
|
|
|
|
FOR i = 1 to idx1
|
|
IF movi_emp[i].cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N"
|
|
THEN
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].cantidad = 0
|
|
LET sueldo_renta = 0
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# Busqueda de la tabla de novedades cuando la nomina no es de bonificacion
|
|
IF opt2 != "S" THEN
|
|
DECLARE busca1 CURSOR FOR
|
|
SELECT a.cod_mov,b.clase_mov,a.cantidad,a.valor,b.cantidad_emp,cantidad_cia,
|
|
b.ch_encabeza
|
|
FROM notb00003 a,notb00002 b
|
|
WHERE
|
|
a.num_emp = datos_emp.num_emp and
|
|
a.departamento = datos_emp.departamento and
|
|
a.status_t is null and
|
|
a.cod_mov = b.cod_mov
|
|
UNION
|
|
|
|
SELECT a.cod_mov,b.clase_mov,a.cantidad,a.valor,b.cantidad_emp,cantidad_cia,
|
|
b.ch_encabeza
|
|
FROM notb00007 a,notb00002 b
|
|
WHERE a.num_nomi = datos_nomi.num_nomi and
|
|
a.num_emp = datos_emp.num_emp and
|
|
a.tipo_emp = datos_nomi.tipo_emp and
|
|
a.departamento = datos_emp.departamento and
|
|
a.status_t is null and
|
|
a.cod_mov = b.cod_mov
|
|
ORDER BY 1
|
|
END IF
|
|
|
|
# Busca de la tabla de novedades si la nomina es de bonificacion
|
|
IF opt2 = "S" THEN
|
|
DECLARE busca2 CURSOR FOR
|
|
SELECT a.cod_mov,b.clase_mov,a.cantidad,a.valor,b.cantidad_emp,cantidad_cia,
|
|
b.ch_encabeza
|
|
FROM notb00003 a,notb00002 b
|
|
WHERE
|
|
a.num_emp = datos_emp.num_emp and
|
|
a.departamento = datos_emp.departamento and
|
|
a.status_t is null and
|
|
a.cod_mov = b.cod_mov
|
|
|
|
UNION
|
|
|
|
SELECT a.cod_mov,b.clase_mov,a.cantidad,a.valor,b.cantidad_emp,cantidad_cia,
|
|
b.ch_encabeza
|
|
FROM notb00007 a,notb00002 b
|
|
WHERE a.num_nomi = datos_nomi.num_nomi and
|
|
a.num_emp = datos_emp.num_emp and
|
|
a.tipo_emp = datos_nomi.tipo_emp and
|
|
a.departamento = datos_emp.departamento and
|
|
a.status_t is null and
|
|
a.cod_mov = b.cod_mov
|
|
ORDER BY 1
|
|
END IF
|
|
LET modifica = "N"
|
|
LET encontre = "N"
|
|
LET bonifica = "N"
|
|
LET idx = 2
|
|
|
|
# Para buscar codigos de las nominas normales
|
|
IF opt2 = "N" THEN
|
|
FOREACH busca1 INTO datos_mov.*
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
# Chequea los movimientos que son balanceados
|
|
# Tiene que el movimiento no sea el movimiento 11 porque esta en la tabla
|
|
# notb00014 que es donde estan los codigos que se balancean y se puso este
|
|
# codigo de movimiento en esta tabla para el proceso de fin de ano de nomina
|
|
|
|
IF datos_mov.cod_mov != 11 THEN
|
|
SELECT * FROM notb00014
|
|
WHERE @cod_mov = datos_mov.cod_mov
|
|
|
|
IF status != notfound THEN
|
|
SELECT SUM(valor) INTO p_valor FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp and
|
|
cod_mov = datos_mov.cod_mov
|
|
IF status = notfound THEN
|
|
LET status = 0
|
|
END IF
|
|
IF p_valor = 0 THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Chequea que el codigo tenga la opcion de que si lo quieren generar
|
|
FOR i = 1 to idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" or desp_mov[i].clasifica is null
|
|
THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF datos_mov.cod_mov != 1 THEN
|
|
LET movi_emp[idx].clase_mov = datos_mov.clase_mov
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
END IF
|
|
|
|
# Calculo de las horas trabajadas en la jornada
|
|
# Esto solo lo calcula cuando el usuario poporciona la informacion de las
|
|
# horas trabajadas durante el periodo como una novedad
|
|
IF datos_mov.cod_mov = 1 THEN
|
|
#datos_mov.cod_mov = 9 THEN
|
|
|
|
LET modifica = "S"
|
|
LET sueldo_renta = 0
|
|
LET movi_emp[1].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[1].clase_mov = datos_mov.clase_mov
|
|
|
|
# El 190.60 es para calcular el sueldo por hora
|
|
IF datos_mov.cantidad > 0 THEN
|
|
LET movi_emp[1].cantidad = datos_mov.cantidad
|
|
LET movi_emp[1].valor = (p_sueldo / 190.60) *
|
|
datos_mov.cantidad
|
|
END IF
|
|
IF datos_mov.cantidad = 0 and
|
|
datos_mov.cod_mov = 1 THEN
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].cantidad = 0
|
|
END IF
|
|
|
|
IF datos_mov.valor > 0 THEN
|
|
LET movi_emp[1].valor = datos_mov.valor
|
|
END IF
|
|
LET sueldo_renta = sueldo_renta + movi_emp[1].valor
|
|
END IF
|
|
|
|
IF datos_mov.cod_mov > 1 THEN
|
|
IF datos_mov.cod_mov = 33 THEN
|
|
LET bonifica = "S"
|
|
LET sueldo_renta = movi_emp[1].valor
|
|
LET sueldo_boni = datos_mov.valor # Modificado el 11/11/2002
|
|
END IF
|
|
|
|
# Cuando el valor o la cantiad tienen algun valor se quedara este valor
|
|
# en la variable de asignacion
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
|
|
# Cuando es comida, desayuno, cena
|
|
IF datos_mov.cantidad_emp > 0 and datos_mov.clase_mov = "D" THEN
|
|
LET movi_emp[idx].valor = (datos_mov.cantidad_emp +
|
|
datos_mov.cantidad_cia) *
|
|
datos_mov.cantidad
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
END IF
|
|
|
|
# Calculo incentivo asistencia
|
|
IF movi_emp[idx].cod_mov = 9 THEN
|
|
IF datos_mov.cantidad > 0 THEN
|
|
LET movi_emp[idx].valor = salario_h * movi_emp[idx].cantidad
|
|
ELSE
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
END IF
|
|
END IF
|
|
|
|
# Calculo de las horas extras
|
|
IF movi_emp[idx].clase_mov = "E" THEN
|
|
SELECT cantidad_cia INTO porc_extras FROM notb00002
|
|
WHERE cod_mov = movi_emp[idx].cod_mov
|
|
|
|
LET movi_emp[idx].valor = salario_h * ((porc_extras / 100) + 1)
|
|
|
|
LET movi_emp[idx].valor = movi_emp[idx].valor * datos_mov.cantidad
|
|
END IF
|
|
LET idx = idx + 1
|
|
END IF
|
|
|
|
|
|
END FOREACH
|
|
END IF
|
|
LET hay1 = "N"
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = 32 THEN
|
|
LET hay1 = "S"
|
|
LET valor_regal = movi_emp[i].valor
|
|
END IF
|
|
END FOR
|
|
|
|
IF hay1 = "N" THEN
|
|
# Nomina de Regalia Pascual
|
|
IF regalia = "S" THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].cod_mov = 32
|
|
|
|
LET movi_emp[idx].valor = p_sueldo
|
|
|
|
IF year(p_fecha_al) = year(datos_emp.fecha) THEN
|
|
LET p_mes = month(datos_emp.fecha)
|
|
|
|
SELECT dias_prod INTO dias FROM mestable
|
|
WHERE mes = p_mes
|
|
|
|
LET porc_dias = (dias - day(datos_emp.fecha)) / dias
|
|
LET p_mes = 12 - month(datos_emp.fecha)
|
|
LET porc_dias = porc_dias + p_mes
|
|
LET movi_emp[idx].valor = (p_sueldo / 12) * porc_dias
|
|
END IF
|
|
|
|
LET movi_emp[idx].cantidad = porc_dias
|
|
LET valor_regal = movi_emp[idx].valor
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
END IF
|
|
END IF
|
|
|
|
# Para Cuando la nomina es de bonificacion
|
|
|
|
IF opt2 = "S" THEN
|
|
FOREACH busca2 INTO datos_mov.*
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
# Chequea los movimientos que son balanceados
|
|
# Tiene que el movimiento no sea el movimiento 11 porque esta en la tabla
|
|
# notb00014 que es donde estan los codigos que se balancean y se puso este
|
|
# codigo de movimiento en esta tabla para el proceso de fin de ano de nomina
|
|
IF datos_mov.cod_mov != 11 THEN
|
|
SELECT * FROM notb00014
|
|
WHERE cod_mov = datos_mov.cod_mov
|
|
|
|
IF status != notfound THEN
|
|
SELECT SUM(valor) INTO p_valor FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp and
|
|
cod_mov = datos_mov.cod_mov
|
|
IF status = notfound THEN
|
|
LET status = 0
|
|
END IF
|
|
IF p_valor = 0 THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Chequea que el codigo tenga la opcion de que si lo quieren generar
|
|
FOR i = 1 to idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" or desp_mov[i].clasifica is null
|
|
THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF datos_mov.cod_mov != 1 THEN
|
|
LET movi_emp[idx].clase_mov = datos_mov.clase_mov
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
END IF
|
|
|
|
# Calculo de las horas trabajadas en la jornada
|
|
# Esto solo lo calcula cuando el usuario poporciona la informacion de las
|
|
# horas trabajadas durante el periodo como una novedad
|
|
IF datos_mov.cod_mov = 1 or
|
|
datos_mov.cod_mov = 9 THEN
|
|
LET modifica = "S"
|
|
LET sueldo_renta = 0
|
|
LET movi_emp[1].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[1].clase_mov = datos_mov.clase_mov
|
|
|
|
# El 190.60 es para calcular el sueldo por hora
|
|
IF datos_mov.cantidad > 0 THEN
|
|
LET movi_emp[1].cantidad = datos_mov.cantidad
|
|
LET movi_emp[1].valor = (p_sueldo / 190.60) *
|
|
datos_mov.cantidad
|
|
END IF
|
|
IF datos_mov.cantidad = 0 and
|
|
datos_mov.cod_mov = 1 THEN
|
|
LET movi_emp[1].valor = 0
|
|
LET movi_emp[1].cantidad = 0
|
|
END IF
|
|
|
|
IF datos_mov.valor > 0 THEN
|
|
LET movi_emp[1].valor = datos_mov.valor
|
|
END IF
|
|
LET sueldo_renta = sueldo_renta + movi_emp[1].valor
|
|
END IF
|
|
|
|
IF datos_mov.cod_mov > 1 THEN
|
|
IF datos_mov.cod_mov = 9 THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
IF datos_mov.cod_mov = 33 THEN
|
|
LET bonifica = "S"
|
|
LET sueldo_boni = datos_mov.valor # Se Agrego el 11/11/2002
|
|
END IF
|
|
|
|
# Cuando el valor o la cantiad tienen algun valor se quedara este valor
|
|
# en la variable de asignacion
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
LET movi_emp[idx].valor = datos_mov.valor
|
|
|
|
# Cuando es comida, desayuno, cena
|
|
IF datos_mov.cantidad_emp > 0 and datos_mov.clase_mov = "D" THEN
|
|
LET movi_emp[idx].valor = (datos_mov.cantidad_emp +
|
|
datos_mov.cantidad_cia) *
|
|
datos_mov.cantidad
|
|
LET movi_emp[idx].cantidad = datos_mov.cantidad
|
|
END IF
|
|
|
|
# Calculo incentivo asistencia
|
|
IF movi_emp[idx].cod_mov = 9 THEN
|
|
LET movi_emp[idx].valor = salario_h * movi_emp[idx].cantidad
|
|
END IF
|
|
|
|
# Calculo de las horas extras
|
|
IF movi_emp[idx].clase_mov = "E" THEN
|
|
SELECT cantidad_cia INTO porc_extras FROM notb00002
|
|
WHERE cod_mov = movi_emp[idx].cod_mov
|
|
LET movi_emp[idx].valor = salario_h * ((porc_extras / 100) + 1)
|
|
LET movi_emp[idx].valor = movi_emp[idx].valor * datos_mov.cantidad
|
|
END IF
|
|
LET idx = idx + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
END IF
|
|
|
|
# Calculo del infotep
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = 33 THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].cod_mov = 41
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].valor = movi_emp[i].valor * .005
|
|
LET movi_emp[idx].cantidad = 0
|
|
LET val_bonifica = movi_emp[i].valor
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
|
|
IF regalia != "S" THEN
|
|
IF meses < 3 THEN
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
LET movi_emp[idx].cod_mov = 4
|
|
LET movi_emp[idx].valor = 0
|
|
END IF
|
|
|
|
|
|
# Gerente General
|
|
IF datos_emp.num_emp = 148 THEN
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
LET movi_emp[idx].cod_mov = 4
|
|
LET movi_emp[idx].valor = 0
|
|
END IF
|
|
END IF
|
|
|
|
LABEL salta1:
|
|
DISPLAY sueldo_renta at 8,60
|
|
DISPLAY acumulado at 9,60
|
|
|
|
# Busqueda de las novedades globales
|
|
DECLARE busca20 CURSOR FOR
|
|
SELECT cod_mov,cantidad_emp,clase_mov FROM notb00002
|
|
WHERE tipo_mov = "G" and status_t is null
|
|
|
|
|
|
FOREACH busca20 INTO globales.cod_mov,globales.cantidad_emp ,
|
|
globales.clase_mov
|
|
FOR i = 1 to idx1
|
|
IF globales.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" or desp_mov[i].clasifica is null
|
|
THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF globales.clase_mov = "S" THEN
|
|
IF datos_emp.paga_seg != "S" THEN
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END IF
|
|
|
|
FOR i = 1 to idx
|
|
IF globales.cod_mov = movi_emp[i].cod_mov THEN
|
|
LET movi_emp[i].clase_mov = globales.clase_mov
|
|
CONTINUE FOREACH
|
|
END IF
|
|
END FOR
|
|
|
|
# Este es el movimiento del descuento de casa club cuando es quincenal
|
|
# devide la cantidad que paga el empleado entre dos.
|
|
IF globales.cod_mov = 20 THEN
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET globales.cantidad_emp = globales.cantidad_emp / 2
|
|
END IF
|
|
END IF
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].cod_mov = globales.cod_mov
|
|
LET movi_emp[idx].valor = globales.cantidad_emp
|
|
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[idx].cod_mov != 36 THEN
|
|
LET movi_emp[idx].valor = movi_emp[idx].valor * semanas
|
|
END IF
|
|
END IF
|
|
|
|
LET movi_emp[idx].clase_mov = globales.clase_mov
|
|
|
|
END FOREACH
|
|
|
|
# Calculo del Incentivo comida, desayuno, cena
|
|
LET p_valor = 0
|
|
FOR p = 1 TO idx
|
|
IF movi_emp[p].cod_mov != 0 and movi_emp[p].cod_mov is not null THEN
|
|
IF movi_emp[p].cod_mov = 16 or
|
|
movi_emp[p].cod_mov = 17 or
|
|
movi_emp[p].cod_mov = 18 THEN
|
|
SELECT cantidad_cia INTO p_cantidad FROM notb00002
|
|
WHERE cod_mov = movi_emp[p].cod_mov
|
|
|
|
LET p_valor = p_valor + (movi_emp[p].cantidad * p_cantidad)
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF p_valor > 0 THEN
|
|
# Chequea que el codigo tenga la opcion de que si lo quieren generar
|
|
FOR i = 1 to idx1
|
|
IF desp_mov[i].cod_mov = 5 THEN
|
|
IF desp_mov[i].clasifica = "N" or desp_mov[i].clasifica is null
|
|
THEN
|
|
CONTINUE WHILE
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# Chequea si el codigo de incentivo almuerzo esta en novedades
|
|
# para salir del proceso en caso de que este codigo exista como novedad
|
|
FOR i = 1 to idx
|
|
IF movi_emp[i].cod_mov = 5 THEN
|
|
CONTINUE WHILE
|
|
END IF
|
|
END FOR
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
LET movi_emp[idx].cod_mov = 5
|
|
LET movi_emp[idx].valor = p_valor
|
|
|
|
IF datos_emp.num_emp = 148 THEN
|
|
LET movi_emp[idx].clase_mov = "I"
|
|
LET movi_emp[idx].cod_mov = 5
|
|
LET movi_emp[idx].valor = 0
|
|
END IF
|
|
END IF
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
# Busqueda del impuesto sobre la renta
|
|
|
|
IF acumulado is null THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
LET renta = 0
|
|
|
|
# Loop para acumular los otros ingresos para el calculo de la nomina
|
|
# se le puso una condicion donde suma los otros ingresos de que solo sume
|
|
# los clase_mov = I o E que sean diferentes a el codigo 1 sueldo normal y
|
|
# 32 regalia pascual
|
|
|
|
LET otros_ing = 0
|
|
IF vacaciones = "S" THEN
|
|
LET sueldo_renta = sueldo_renta - movi_emp[1].valor
|
|
LET movi_emp[1].cantidad = 0
|
|
LET movi_emp[1].valor = 0
|
|
CALL vacaciones_colect()
|
|
END IF
|
|
|
|
# OTROS INGRESOS PARA EL CALCULO DE AFP
|
|
LET otros_ing_tss = 0
|
|
SELECT sum(valor) INTO otros_ing_tss from notb00008 WHERE status_t is null and
|
|
cod_mov in (40,36) AND
|
|
num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al #fecha_inicio_p
|
|
|
|
|
|
LET afp_pago_emp = 0
|
|
SELECT sum(valor) INTO afp_pago_emp from notb00008 WHERE status_t is null and
|
|
cod_mov in (49) AND
|
|
num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al #fecha_inicio_p
|
|
|
|
|
|
LET afp_pago_cia = 0
|
|
SELECT sum(valor) INTO afp_pago_cia from notb00008 WHERE status_t is null and
|
|
cod_mov in (50) AND
|
|
num_emp = datos_emp.num_emp
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al #fecha_inicio_p
|
|
|
|
|
|
IF afp_pago_emp IS NULL THEN
|
|
LET afp_pago_emp = 0
|
|
END IF
|
|
|
|
IF afp_pago_cia IS NULL THEN
|
|
LET afp_pago_cia = 0
|
|
END IF
|
|
|
|
IF otros_ing_tss is null THEN
|
|
LET otros_ing_tss = 0
|
|
END IF
|
|
|
|
|
|
FOR i = 1 TO idx
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[i].clase_mov = "D" and
|
|
movi_emp[i].cod_mov != 23 and
|
|
movi_emp[i].cod_mov != 70 THEN
|
|
LET movi_emp[i].valor = movi_emp[i].valor * semanas
|
|
END IF
|
|
END IF
|
|
|
|
IF movi_emp[i].clase_mov = "I" or
|
|
movi_emp[i].clase_mov = "E" THEN
|
|
IF movi_emp[i].cod_mov != 1 THEN
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[i].cod_mov != 31 THEN
|
|
IF movi_emp[i].cod_mov != 36 THEN
|
|
LET movi_emp[i].valor = movi_emp[i].valor * semanas
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF movi_emp[i].cod_mov = 40 OR movi_emp[i].cod_mov = 36 THEN
|
|
LET otros_ing_tss = movi_emp[i].valor + otros_ing_tss
|
|
END IF
|
|
LET otros_ing = movi_emp[i].valor + otros_ing
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF acumulado is null THEN
|
|
LET acumulado = 0
|
|
END IF
|
|
|
|
IF sueldo_ganado IS NULL THEN
|
|
LET sueldo_ganado = 0
|
|
END IF
|
|
IF otros_ing_tss IS NULL THEN
|
|
LET otros_ing_tss = 0
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
# LET salario_tss = (sueldo_renta * 2) + otros_ing_tss
|
|
LET salario_tss = sueldo_ganado + sueldo_renta + otros_ing_tss
|
|
|
|
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
|
|
LET valor_renta = sueldo_renta + acumulado + otros_ing
|
|
display datos_emp.num_emp," ",valor_renta
|
|
|
|
ELSE
|
|
LET valor_renta = valor_renta * 2 + acumulado + otros_ing
|
|
END IF
|
|
|
|
IF ultima_semana_mes = "N" THEN
|
|
LET valor_renta = sueldo_renta *2 + acumulado + otros_ing
|
|
ELSE
|
|
LET valor_renta = sueldo_renta + acumulado + otros_ing
|
|
|
|
END IF
|
|
|
|
ELSE
|
|
IF ultima_semana_mes = "S" THEN
|
|
LET valor_renta = sueldo_renta + acumulado
|
|
END IF
|
|
|
|
END IF
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------------
|
|
LET calcula = "N"
|
|
{ SELECT *FROM notb00017
|
|
WHERE num_emp = datos_emp.num_emp
|
|
|
|
IF status != notfound THEN
|
|
LET calcula = "S"
|
|
END IF
|
|
|
|
# Calculo para cuando la nomina sea de vendedores
|
|
IF calcula = "S" THEN
|
|
|
|
SELECT SUM(valor) INTO val_bonifica FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp and
|
|
cod_mov = 33 AND
|
|
fecha >= fecha_inicio_p
|
|
|
|
IF val_bonifica is null THEN
|
|
LET val_bonifica = 0
|
|
END IF
|
|
|
|
LET acumulado = acumulado - val_bonifica
|
|
# Modificado el 11/4/2002 LET valor_renta = sueldo_renta + acumulado + otros_ing
|
|
Modificado el 11/2/2005 LET valor_renta = sueldo_renta + otros_ing + acumulado
|
|
|
|
LET valor_renta = sueldo_renta
|
|
|
|
IF bonifica = "S" THEN
|
|
LET valor_renta = acumulado
|
|
LET valor_renta = (valor_renta / (p_mes - 1)) * 12
|
|
LET valor_renta = val_bonifica
|
|
LET valor_bonif1 = valor_renta + otros_ing
|
|
ELSE
|
|
|
|
LET valor_renta = valor_renta + val_bonifica
|
|
END IF
|
|
END IF
|
|
}
|
|
LET retorne = "S"
|
|
#------------------------------------------------------------------------
|
|
|
|
LABEL retorna:
|
|
|
|
|
|
# Si es la nomina de bonificacion
|
|
IF retorne = "N" THEN
|
|
# Acumualdo sin bonificacion
|
|
LET valor_renta = valor_bonif1
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
IF regalia != "S" THEN
|
|
|
|
# Busca el monto de regalia el incentivo de asistencia
|
|
# que el empleado reciba
|
|
# POR ORDEN DEL ING. PAULINO EN EL 2DO SELECT SE QUITO EL CODIGO DEL INCENTIVO
|
|
# NO.9 PARA SER GRAVADO POR LA RENTA.
|
|
|
|
SELECT UNIQUE num_nomi INTO numero_nomina
|
|
FROM notb00008
|
|
WHERE cod_mov = 32 and
|
|
tipo_emp = datos_nomi.tipo_emp and
|
|
num_emp = datos_emp.num_emp AND
|
|
fecha >= fecha_inicio_p
|
|
|
|
LET valor_regal = 0
|
|
SELECT sum(valor) INTO valor_regal
|
|
FROM notb00008
|
|
WHERE cod_mov in (32) and
|
|
num_emp = datos_emp.num_emp
|
|
AND fecha >= fecha_inicio_p
|
|
|
|
|
|
IF valor_regal is null THEN
|
|
LET valor_regal = 0
|
|
END IF
|
|
{
|
|
esta decision se puso en comentario porque la nomina de regalia se modifico
|
|
para que el incentivo de asistencia se sumara a la regalia y asi se pagara
|
|
menos renta.
|
|
IF valor_regal >= 10050 THEN
|
|
LET valor_regal = 10050
|
|
END IF
|
|
}
|
|
|
|
#------------------------------------------------------------------------------
|
|
# CALCULO PARA EL PAGO SEGURIDAD SOCIAL
|
|
# EL SALARIO MAXIMO COTIZABLE ES 75340 MENSUALES
|
|
# 37670 QUINCENALES
|
|
# 98,000.00 MENSUALES 25/1/2005
|
|
#------------------------------------------------------------------------------
|
|
LET globales.cod_mov = 49
|
|
LET calcula_tss = "S"
|
|
FOR i = 1 to idx1
|
|
IF globales.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" or desp_mov[i].clasifica is null
|
|
THEN
|
|
LET calcula_tss = "N"
|
|
EXIT FOR
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF calcula_tss = "S" THEN
|
|
SELECT a.cantidad_emp / 100 INTO porc_emp
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = 49
|
|
|
|
SELECT a.cantidad_cia / 100 INTO porc_cia
|
|
FROM notb00002 a
|
|
WHERE a.cod_mov = 50
|
|
|
|
IF salario_tss < 98000 THEN
|
|
|
|
LET valor_tss_emp = (salario_tss * porc_emp)
|
|
LET valor_tss_cia = (salario_tss * porc_cia)
|
|
|
|
LET valor_renta = valor_renta - valor_tss_emp
|
|
|
|
ELSE
|
|
LET valor_tss_emp = 98000 * porc_emp
|
|
LET valor_tss_cia = 98000 * porc_cia
|
|
LET valor_renta = valor_renta - valor_tss_emp
|
|
|
|
END IF
|
|
|
|
LET valor_tss_emp = valor_tss_emp - (afp_pago_emp * -1)
|
|
LET valor_tss_cia = valor_tss_cia - (afp_pago_cia * -1)
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 49
|
|
LET movi_emp[idx].valor = valor_tss_emp
|
|
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 50
|
|
LET movi_emp[idx].valor = valor_tss_cia
|
|
|
|
END IF
|
|
|
|
#--------------------------------------------------------------------------------
|
|
LET valor_renta = valor_renta - valor_regal
|
|
# ESTOY FORZANDO EL ACUMULADO PARA EL IMPUESTO CUANDO LA NOMINA SEA DE BONIFICACION
|
|
# LET valor_renta = 0
|
|
# IF opt2 = "S" THEN
|
|
# SELECT SUM(a.valor) INTO valor_renta
|
|
# FROM notb00008 a
|
|
# WHERE a.num_emp = datos_emp.num_emp AND a.clase_mov IN ("E","I") AND
|
|
# a.fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
# LET valor_renta = valor_renta + val_bonifica
|
|
|
|
# END IF
|
|
# ------------------------------------------------------------------------
|
|
# INICIO CALCULO IMPUESTO SOBRE LA RENTA
|
|
# ------------------------------------------------------------------------
|
|
#display "valor renta ",valor_renta
|
|
IF valor_renta > excento THEN
|
|
SELECT cod_mov INTO datos_mov.cod_mov FROM notb00002 WHERE
|
|
clase_mov = "R"
|
|
{
|
|
LET excento = 11535
|
|
LET hasta_15 = 19225.08
|
|
LET hasta_20 = 28837.58
|
|
LET hasta_25 = 28837.58
|
|
}
|
|
LET renta_15 = 0
|
|
LET renta_20 = 0
|
|
LET renta_27 = 0
|
|
FOR i = 1 to idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" OR
|
|
desp_mov[i].clasifica IS NULL
|
|
THEN
|
|
GOTO llega
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# Loop para saber si el codigo del impuesto sea dado mediante a una novedad
|
|
|
|
FOR i = 1 TO idx
|
|
IF datos_mov.cod_mov = movi_emp[i].cod_mov THEN
|
|
LET datos_mov.clase_mov = "D"
|
|
GOTO llega
|
|
END IF
|
|
END FOR
|
|
IF numero_nomina is null THEN
|
|
LET numero_nomina = 1
|
|
END IF
|
|
|
|
SELECT SUM(valor) INTO renta_pagada FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp and
|
|
(cod_mov = datos_mov.cod_mov or
|
|
cod_mov = 70) and num_nomi != numero_nomina
|
|
AND fecha BETWEEN p1_fecha_del AND p1_fecha_al
|
|
|
|
|
|
IF renta_pagada is null THEN
|
|
LET renta_pagada = 0
|
|
END IF
|
|
|
|
IF renta_pagada < 0 THEN
|
|
LET renta_pagada = renta_pagada * -1
|
|
END IF
|
|
|
|
|
|
display p1_fecha_del," ",p1_fecha_al ," ",renta_pagada
|
|
|
|
# Renta al 15 %
|
|
IF valor_renta > excento and valor_renta <= hasta_15 THEN
|
|
LET valor_renta = valor_renta - excento
|
|
LET renta = valor_renta * .15
|
|
LET renta_15 = renta
|
|
ELSE
|
|
LET renta = ((hasta_15-excento) * .15)
|
|
LET renta_15 = renta
|
|
END IF
|
|
display " renta 15 ",renta_15," ",datos_emp.num_emp
|
|
# Renta al 20 %
|
|
IF valor_renta > hasta_15 AND valor_renta <= hasta_20 THEN
|
|
|
|
LET valor_renta = valor_renta - hasta_15
|
|
LET renta = valor_renta * .20
|
|
LET renta_20 = renta
|
|
ELSE
|
|
IF valor_renta > hasta_20 THEN
|
|
LET renta = ((hasta_20-hasta_15) * .20)
|
|
LET renta_20 = renta
|
|
END IF
|
|
END IF
|
|
display "renta 20 ",renta_20
|
|
# Renta al 25 %
|
|
|
|
IF valor_renta > hasta_20 AND valor_renta <= hasta_25 THEN
|
|
|
|
LET valor_renta = valor_renta - hasta_20
|
|
|
|
LET renta = valor_renta * .25
|
|
LET renta_27 = renta
|
|
display datos_emp.num_emp," ",renta_27
|
|
|
|
ELSE
|
|
IF valor_renta > hasta_25 THEN
|
|
LET renta = ((hasta_25-hasta_20) * .25)
|
|
LET renta_27 = renta
|
|
END IF
|
|
END IF
|
|
display "renta 27 ",renta_27
|
|
display "valor renta ",valor_renta
|
|
|
|
# Renta al 30 %
|
|
LET renta_30 = 0
|
|
IF valor_renta > hasta_25 THEN
|
|
|
|
LET valor_renta = valor_renta - hasta_25
|
|
LET renta = valor_renta * .30
|
|
LET renta_30 = renta
|
|
END IF
|
|
display "renta 30 ",renta_30
|
|
|
|
IF renta_15 is null THEN
|
|
LET renta_15 = 0
|
|
END IF
|
|
|
|
IF renta_30 is null THEN
|
|
LET renta_30 = 0
|
|
END IF
|
|
|
|
IF renta_20 is null THEN
|
|
LET renta_20 = 0
|
|
END IF
|
|
|
|
IF renta_27 is null THEN
|
|
LET renta_27 = 0
|
|
END IF
|
|
|
|
LET renta = renta_15 + renta_20 + renta_27 + renta_30
|
|
display "renta total ",renta
|
|
IF opt2 = "S" THEN
|
|
LET renta = renta_pagada - renta
|
|
END IF
|
|
IF opt2 != "S" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET p_mes = (12 - p_mes1) + 1
|
|
LET renta = (renta_pagada - renta) #/ p_mes
|
|
ELSE
|
|
#IF ultima_semana_mes = "N" THEN
|
|
IF ultima_semana_mes = "N" THEN
|
|
LET renta = (renta_pagada - renta) /2
|
|
ELSE
|
|
LET renta = (renta_pagada - renta)
|
|
END IF
|
|
#ELSE
|
|
# LET renta = renta_pagada - renta
|
|
#END IF
|
|
END IF
|
|
END IF
|
|
|
|
IF renta < 0 THEN
|
|
LET renta = renta * -1
|
|
END IF
|
|
|
|
IF renta < 0 THEN
|
|
LET renta = 0
|
|
END IF
|
|
|
|
# Cuando es renta de bonificacion Se Agrego el 11/11/2002
|
|
#----------------------------------------------------------------------------
|
|
|
|
IF renta > 0 THEN
|
|
IF opt1 != "S" THEN
|
|
LET idx = idx + 1
|
|
LET renta = renta * -1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
END IF
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
#-----------------------------------------------------------------------
|
|
# COMPENSACION IMPUESTO SOBRE LA RENTA
|
|
#-----------------------------------------------------------------------
|
|
LET impuesto_c = 0
|
|
SELECT SUM(a.valor) INTO impuesto_c FROM notb00008 a
|
|
WHERE a.num_emp = datos_emp.num_emp AND
|
|
a.cod_mov = 48
|
|
|
|
IF impuesto_c < 0 THEN
|
|
LET idx = idx + 1
|
|
IF renta < 0 THEN
|
|
LET renta = renta * -1
|
|
END IF
|
|
LET impuesto_c = impuesto_c * -1
|
|
|
|
IF renta > impuesto_c THEN
|
|
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 48
|
|
LET movi_emp[idx].valor = impuesto_c
|
|
ELSE
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = 48
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
END IF
|
|
END IF
|
|
#------------- TERMINA CALCULO DE LA RENTA ------------------------------
|
|
|
|
{ Se Modifico el 11/11/2002 # Retorna a calcular la renta que pagaria con la bonificacion
|
|
IF bonifica = "S" and retorne = "S" THEN
|
|
LET retorne = "N"
|
|
GOTO retorna
|
|
END IF
|
|
}
|
|
|
|
IF opt1 = "S" THEN
|
|
# Se modifico el 11/11/2002 IF retorne = "N" THEN
|
|
IF datos_mov.cod_mov = 23 THEN
|
|
# Modifico 11/11/2002 LET renta = renta_boni - renta
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
# END IF
|
|
END IF
|
|
|
|
# Cuando el empleado no tiene que pagar contando con la bonificacion
|
|
# Solo por el sueldo
|
|
IF opt1 = "S" THEN
|
|
IF bonifica = "N" THEN
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = datos_mov.cod_mov THEN
|
|
GOTO llega
|
|
END IF
|
|
END FOR
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta
|
|
END IF
|
|
END IF
|
|
|
|
# Calculo de la renta de regalia pascual
|
|
LABEL llega:
|
|
IF regalia = "S" THEN
|
|
SELECT cod_mov INTO datos_mov.cod_mov FROM notb00002 WHERE
|
|
clase_mov = "R"
|
|
FOR i = 1 to idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" or desp_mov[i].clasifica is null
|
|
THEN
|
|
GOTO otro_llega
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
CALL renta_regalia()
|
|
END IF
|
|
LABEL otro_llega:
|
|
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# CALCULO PARA EL PAGO DEL SEGURO SOCIAL
|
|
#------------------------------------------------------------------------------
|
|
IF datos_emp.paga_seg = "S" THEN
|
|
SELECT cod_mov,tipo_mov INTO datos_mov.cod_mov,p_tipo FROM notb00002
|
|
WHERE clase_mov = "S"
|
|
|
|
IF p_tipo = "G" THEN
|
|
GOTO salta
|
|
END IF
|
|
|
|
LET cuota_ss = 0
|
|
LET acum_mes_ss = 0
|
|
LET acum_ing_mes = 0
|
|
|
|
{ SE PUSO EN COMENTARIO PORQUE LOS EMPLEADOS 596, 600, 601
|
|
ESTABAN DANDO PROBLEMAS DE CALCULO SEGURO SOCIAL 22/5/2002
|
|
|
|
FOR i = 1 to idx
|
|
IF datos_mov.cod_mov = movi_emp[i].cod_mov THEN
|
|
GOTO salta
|
|
END IF
|
|
END FOR
|
|
}
|
|
FOR i = 1 to idx1
|
|
IF datos_mov.cod_mov = desp_mov[i].cod_mov THEN
|
|
IF desp_mov[i].clasifica = "N" OR
|
|
desp_mov[i].clasifica is null THEN
|
|
GOTO salta
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
# Busca el acumulado de seguro social, para el mes, que tiene el empleado
|
|
|
|
SELECT SUM(valor) INTO acum_mes_ss
|
|
FROM notb00008
|
|
WHERE cod_mov = datos_mov.cod_mov AND
|
|
num_emp = datos_emp.num_emp AND
|
|
fecha between fecha_ini_mes AND p_fecha_al AND
|
|
cod_mov != 33 AND
|
|
status_t IS NULL
|
|
|
|
IF acum_mes_ss IS NULL THEN
|
|
LET acum_mes_ss = 0
|
|
END IF
|
|
|
|
IF acum_mes_ss <> 0 THEN
|
|
LET acum_mes_ss = acum_mes_ss * -1
|
|
END IF
|
|
|
|
# Busca el acumulado de ingresos en el mes, que tiene el empleado
|
|
SELECT SUM(valor) INTO acum_ing_mes
|
|
FROM notb00008
|
|
WHERE (clase_mov = "I" OR clase_mov = "E") AND
|
|
num_emp = datos_emp.num_emp AND
|
|
fecha between fecha_ini_mes AND p_fecha_al AND
|
|
status_t IS NULL
|
|
|
|
IF acum_ing_mes IS NULL THEN
|
|
LET acum_ing_mes = 0
|
|
END IF
|
|
|
|
END IF
|
|
|
|
# Busca la cuota de seguro social que debe pagar el empleado segun los ingresos
|
|
# que obtuvo en la semana, si no es la ultima nomina del mes.
|
|
|
|
IF ultima_semana_mes = "N" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET ingresos_empleado = movi_emp[1].valor + otros_ing
|
|
LET salario_semanal = 0
|
|
|
|
SELECT salario_sem_hasta INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_sem_desde <= ingresos_empleado and
|
|
salario_sem_hasta >= ingresos_empleado
|
|
|
|
IF status = notfound THEN
|
|
LET ss.porc_emp = 23.10
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
ELSE
|
|
SELECT salario_sem_hasta, salario_men_hasta, porc_emp, porc_pat
|
|
INTO ss.salario_sem_hasta, ss.salario_men_hasta, ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
|
|
LET ingresos_empleado = (p_sueldo / 190.6) * 44 + otros_ing
|
|
LET salario_semanal = 0
|
|
SELECT salario_sem_hasta INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_sem_desde <= ingresos_empleado and
|
|
salario_sem_hasta >= ingresos_empleado
|
|
|
|
IF status = notfound THEN
|
|
LET ss.porc_emp = 13.03
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
ELSE
|
|
SELECT salario_sem_hasta, salario_men_hasta, porc_emp, porc_pat
|
|
INTO ss.salario_sem_hasta, ss.salario_men_hasta, ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Busca la cuota de seguro social que debe pagar el empleado segun los ingresos
|
|
# que obtuvo en el mes, si es la ultima nomina del mes.
|
|
|
|
IF ultima_semana_mes = "S" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET ingresos_empleado = movi_emp[1].valor + otros_ing + acum_ing_mes
|
|
LET salario_semanal = 0
|
|
|
|
SELECT salario_sem_hasta INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_men_desde <= ingresos_empleado and
|
|
salario_men_hasta >= ingresos_empleado
|
|
|
|
IF status = notfound THEN
|
|
LET ss.porc_emp = 23.10
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
ELSE
|
|
SELECT salario_sem_hasta, salario_men_hasta, porc_emp, porc_pat
|
|
INTO ss.salario_sem_hasta, ss.salario_men_hasta, ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
|
|
LET ingresos_empleado = movi_emp[1].valor + otros_ing + acum_ing_mes
|
|
LET salario_semanal = 0
|
|
|
|
SELECT salario_sem_hasta INTO salario_semanal
|
|
FROM notb00006
|
|
WHERE salario_men_desde <= ingresos_empleado and
|
|
salario_men_hasta >= ingresos_empleado
|
|
|
|
IF status = notfound THEN
|
|
LET ss.porc_emp = 13.03
|
|
LET ss.salario_sem_hasta = 744.00
|
|
LET ss.salario_men_hasta = 3224.01
|
|
LET ss.porc_pat = 64.68 #51.17
|
|
|
|
ELSE
|
|
SELECT salario_sem_hasta, salario_men_hasta, porc_emp, porc_pat
|
|
INTO ss.salario_sem_hasta, ss.salario_men_hasta, ss.porc_emp,
|
|
ss.porc_pat
|
|
FROM notb00006
|
|
WHERE salario_sem_hasta = salario_semanal
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
# Determina la cuota de seguro social, si es la ultima nomina del mes
|
|
IF ultima_semana_mes = "S" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET cuota_ss = ss.porc_emp * semanas_mes - acum_mes_ss
|
|
LET cuota_ss_pa = ss.porc_pat * semanas_mes
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET cuota_ss = ss.porc_emp * semanas_mes - acum_mes_ss
|
|
LET cuota_ss_pa = ss.porc_pat * semanas_mes
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
END IF
|
|
END IF
|
|
|
|
# Determina la cuota de seguro social, si no es la ultima nomina del mes
|
|
|
|
IF ultima_semana_mes = "N" THEN
|
|
IF datos_nomi.tipo_emp = "S" THEN
|
|
LET cuota_ss = ss.porc_emp
|
|
LET cuota_ss_pa = 0 #ss.porc_pat
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
END IF
|
|
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET cuota_ss = ss.porc_emp * 2
|
|
LET cuota_ss_pa = 0 #ss.porc_pat * 2
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = cuota_ss * -1
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "T"
|
|
LET movi_emp[idx].cod_mov = 98
|
|
LET movi_emp[idx].valor = cuota_ss_pa
|
|
|
|
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
LET ss.porc_emp = 0.00
|
|
LET ss.salario_sem_hasta = 0.00
|
|
LET ss.salario_men_hasta = 0.00
|
|
LET ss.porc_pat = 0.00
|
|
LET salario_semanal = 0.00
|
|
LET cuota_ss_pa = 0.00
|
|
#------------------------------------------------------------------------------
|
|
# FIN DEL CALCULO PARA EL PAGO DEL SEGURO SOCIAL
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
LABEL salta:
|
|
LET l = 11
|
|
FOR p = 1 TO 25
|
|
IF l < 25 THEN
|
|
DISPLAY " " at l,3
|
|
DISPLAY " " at l,7
|
|
DISPLAY " " at l,20
|
|
LET l = l + 1
|
|
END IF
|
|
END FOR
|
|
|
|
LET l = 11
|
|
FOR p = 1 TO idx
|
|
IF movi_emp[p].cod_mov is not null THEN
|
|
FOR t = 1 TO idx1
|
|
LET nombre_mov = null
|
|
IF movi_emp[p].cod_mov = desp_mov[t].cod_mov THEN
|
|
LET nombre_mov = desp_mov[t].descrip_mov
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
|
|
IF l < 25 THEN
|
|
DISPLAY movi_emp[p].cod_mov using "&&" at l,3
|
|
DISPLAY nombre_mov at l,7
|
|
DISPLAY movi_emp[p].cantidad using "##,###.##" at l,40
|
|
DISPLAY movi_emp[p].valor using "##,###.##" at l,50
|
|
LET l = l + 1
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
|
|
# Insertar los movimientos del empleado en memoria
|
|
FOR p = 1 TO idx
|
|
|
|
# Caso particular para prestamo cooperativa, farmacia y plaza lama
|
|
# Tiene que el movimiento no sea el movimiento 11 porque esta en la tabla
|
|
# notb00014 que es donde estan los codigos que se balancean y se puso este
|
|
# codigo de movimiento en esta tabla para el proceso de fin de ano de nomina
|
|
IF movi_emp[p].cod_mov != 11 THEN
|
|
SELECT * FROM notb00014
|
|
WHERE @cod_mov = movi_emp[p].cod_mov
|
|
|
|
IF status != notfound THEN
|
|
|
|
SELECT sum(valor) INTO p_valor FROM notb00008
|
|
WHERE num_emp = datos_emp.num_emp and
|
|
cod_mov = movi_emp[p].cod_mov
|
|
|
|
IF p_valor = 0 THEN
|
|
LET movi_emp[p].num_emp = null
|
|
LET movi_emp[p].cod_mov = null
|
|
LET movi_emp[p].valor = 0
|
|
END IF
|
|
|
|
IF p_valor < movi_emp[p].valor THEN
|
|
LET movi_emp[p].valor = p_valor
|
|
END IF
|
|
|
|
IF movi_emp[p].cod_mov = 12 THEN
|
|
LET interes = p_valor * porciento
|
|
LET movi_emp[p].valor = movi_emp[p].valor
|
|
IF datos_nomi.tipo_emp = "Q" THEN
|
|
LET interes = interes / 100
|
|
END IF
|
|
|
|
IF interes > 0 THEN
|
|
LET interes = interes * -1
|
|
END IF
|
|
|
|
CASE
|
|
WHEN movi_emp[p].cod_mov = 12
|
|
LET p_codigo = 110
|
|
EXIT CASE
|
|
WHEN movi_emp[p].cod_mov = 13
|
|
LET p_codigo = 111
|
|
EXIT CASE
|
|
WHEN movi_emp[p].cod_mov = 19
|
|
LET p_codigo = 112
|
|
EXIT CASE
|
|
END CASE
|
|
|
|
# Vacaciones Colectivas
|
|
IF vacaciones = "S" THEN
|
|
LET interes = interes * semanas
|
|
END IF
|
|
#----------------------------------------------------------------------------
|
|
|
|
# Inserta los intereses de los perstamos como un movimiento en la
|
|
# nomina, el codigo de los interes es el 110
|
|
IF movi_emp[p].valor != 0 THEN
|
|
INSERT INTO notb00008
|
|
VALUES (datos_nomi.num_nomi,datos_nomi.tipo_emp,
|
|
datos_emp.num_emp,datos_emp.departamento,datos_emp.nivel_emp,
|
|
datos_emp.cod_puesto,p_fecha_al,
|
|
p_codigo,movi_emp[p].cantidad,interes,
|
|
movi_emp[p].clase_mov,null,user,current,null,null)
|
|
|
|
END IF
|
|
|
|
|
|
END IF
|
|
END IF
|
|
# Si el movimiento es de prestamo farmacia o plaza lama
|
|
# Si el valor pendiente de estos prestamos esta saldado no inserta el movimiento
|
|
IF movi_emp[p].cod_mov = 13 or
|
|
movi_emp[p].cod_mov = 19 THEN
|
|
IF p_valor <= 0 THEN
|
|
LET movi_emp[p].num_emp = null
|
|
END IF
|
|
END IF
|
|
#----------------------------------------------------------------------------
|
|
# Cuando el movimiento es de prestamo cooperativa chequea que el valor con
|
|
# el 1% sea menor o igual que cero para no insertar movimiento en la tabla
|
|
IF movi_emp[p].valor <= 0 THEN
|
|
LET movi_emp[p].num_emp = null
|
|
END IF
|
|
#-------------------------------------------------------------------------
|
|
END IF
|
|
|
|
IF movi_emp[p].cod_mov != 0 and movi_emp[p].cod_mov is not null THEN
|
|
IF movi_emp[p].clase_mov = "D" or movi_emp[p].clase_mov = "R" or
|
|
movi_emp[p].clase_mov = "S" THEN
|
|
LET movi_emp[p].clase_mov = "D"
|
|
IF movi_emp[p].valor > 0 THEN
|
|
LET movi_emp[p].valor = movi_emp[p].valor * -1
|
|
END IF
|
|
END IF
|
|
IF movi_emp[p].valor is null THEN
|
|
LET movi_emp[p].valor = 0
|
|
END IF
|
|
|
|
#------------------------------------------------------------------------
|
|
IF movi_emp[p].valor != 0 THEN
|
|
IF vacaciones = "S" THEN
|
|
IF movi_emp[p].cod_mov = 22 THEN
|
|
LET movi_emp[p].valor = movi_emp[p].valor * semanas
|
|
END IF
|
|
END IF
|
|
# --------------------------------- COMPENSACION ISR ---------------------
|
|
IF movi_emp[p].cod_mov = 48 THEN
|
|
IF movi_emp[p].valor < 0 THEN
|
|
LET movi_emp[p].valor = movi_emp[p].valor * -1
|
|
END IF
|
|
END IF
|
|
#-------------------------------------------------------------------------
|
|
|
|
INSERT INTO notb00008
|
|
VALUES (datos_nomi.num_nomi,datos_nomi.tipo_emp,
|
|
datos_emp.num_emp,datos_emp.departamento,datos_emp.nivel_emp,
|
|
datos_emp.cod_puesto,p_fecha_al,
|
|
movi_emp[p].cod_mov,movi_emp[p].cantidad,movi_emp[p].valor,
|
|
movi_emp[p].clase_mov,null,user,current,null,null)
|
|
|
|
IF movi_emp[p].cod_mov = 32 OR movi_emp[p].cod_mov = 31 OR
|
|
movi_emp[p].cod_mov = 33 THEN
|
|
INSERT INTO notb00008
|
|
VALUES (datos_nomi.num_nomi,datos_nomi.tipo_emp,
|
|
datos_emp.num_emp,datos_emp.departamento,datos_emp.nivel_emp,
|
|
datos_emp.cod_puesto,p_fecha_al,
|
|
1,0,0,
|
|
movi_emp[p].clase_mov,null,user,current,null,null)
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
INSERT INTO notb00008
|
|
VALUES (datos_nomi.num_nomi,datos_nomi.tipo_emp,
|
|
datos_emp.num_emp,datos_emp.departamento,datos_emp.nivel_emp,
|
|
datos_emp.cod_puesto,p_fecha_al,
|
|
4,0,0,"I",null,user,current,null,null)
|
|
|
|
LET l = 11
|
|
FOR p = 1 TO idx
|
|
IF movi_emp[p].cod_mov is not null THEN
|
|
FOR t = 1 TO idx1
|
|
LET nombre_mov = null
|
|
IF movi_emp[p].cod_mov = desp_mov[t].cod_mov THEN
|
|
LET nombre_mov = desp_mov[t].descrip_mov
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
|
|
IF l < 25 THEN
|
|
DISPLAY movi_emp[p].cod_mov using "&&" at l,3
|
|
DISPLAY nombre_mov at l,7
|
|
DISPLAY movi_emp[p].cantidad using "##,###.##" at l,40
|
|
DISPLAY movi_emp[p].valor using "##,###.##" at l,50
|
|
LET l = l + 1
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
|
|
FOR i = 1 TO idx
|
|
LET movi_emp[i].num_emp = null
|
|
LET movi_emp[i].cod_mov = null
|
|
LET movi_emp[i].valor = null
|
|
END FOR
|
|
END WHILE
|
|
END FUNCTION
|
|
|
|
FUNCTION renta_regalia()
|
|
SELECT sum(@valor) INTO valor_renta
|
|
FROM notb00008
|
|
WHERE @num_emp = datos_emp.num_emp and
|
|
clase_mov in ("I","E")
|
|
LET renta_15 = 0
|
|
LET renta_20 = 0
|
|
LET renta_27 = 0
|
|
LET otros_ing = 0
|
|
LET ing_regal = 0
|
|
LET l = 18
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].clase_mov = "I" or
|
|
movi_emp[i].clase_mov = "E" THEN
|
|
IF movi_emp[i].valor is null THEN
|
|
LET movi_emp[i].valor = 0
|
|
END IF
|
|
LET otros_ing = otros_ing + movi_emp[i].valor
|
|
END IF
|
|
END FOR
|
|
# Este comentario pertenece al comentario mas abajo
|
|
# LET ing_regal = valor_regal
|
|
#-----------------------------------------------------------------------------
|
|
LET valor_regal = otros_ing
|
|
IF valor_regal > 14475 THEN
|
|
# Se puso comentario porque el ano 1995 se calculo los incentivos conjuntamente
|
|
# Con la regalia
|
|
{IF ing_regal < 10050 THEN
|
|
LET valor_regal = valor_regal - ing_regal
|
|
END IF}
|
|
#------------------------------------------------------------------------------
|
|
LET valor_regal = valor_regal - 14475
|
|
# Renta al 15 %
|
|
IF valor_renta > 97800 and valor_renta<= 162996 THEN
|
|
LET renta_15 = valor_regal * .15
|
|
END IF
|
|
|
|
# Renta al 20 %
|
|
IF valor_renta > 162996 and valor_renta < 244488 THEN
|
|
LET renta_20 = valor_regal * .20
|
|
END IF
|
|
|
|
# Renta al 27 %
|
|
IF valor_renta > 244488 THEN
|
|
LET renta_27 = valor_regal * .25
|
|
END IF
|
|
|
|
LET renta_p = renta_15 + renta_20 + renta_27
|
|
|
|
LET idx = idx + 1
|
|
LET movi_emp[idx].clase_mov = "D"
|
|
LET movi_emp[idx].cod_mov = datos_mov.cod_mov
|
|
LET movi_emp[idx].valor = renta_p
|
|
END IF
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION vacaciones_colect()
|
|
# Cuando aplican el codigo de vacaciones colectivas que es el codigo 31
|
|
FOR i = 1 TO idx
|
|
IF movi_emp[i].cod_mov = 1 THEN
|
|
LET movi_emp[i].valor = 0
|
|
END IF
|
|
|
|
IF movi_emp[i].cod_mov = 31 THEN
|
|
LET movi_emp[1].cantidad = movi_emp[i].cantidad
|
|
LET semanas = movi_emp[i].cantidad / p_h_normal
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
|
|
|