DROP PROCEDURE IF EXISTS `proceso_nomina_masivo_lastaudp`;
CREATE PROCEDURE `proceso_nomina_masivo_lastaudp`(IN `p_periodo` TEXT)
BEGIN
	DECLARE v_anio INT;
	SET v_anio = LEFT(p_periodo, 4);
    
    IF v_anio = '2024' THEN
		SET @rmv = 1025;
		SET @valorUIT = 5150;
	ELSEIF v_anio = '2025' THEN
		SET @rmv = 1130;
		SET @valorUIT = 5350;
	ELSE
		SET @rmv = 1130;
		SET @valorUIT = 5350;
	END IF;
	
	SET @asignacion_familiar = @rmv * 0.10;
    SET @bonificacion_extraordinaria_essalud = 0.09;
    SET @bonificacion_extraordinaria_privado = 0.0675;
   
-- MASIVOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO			

			update mnom_planillas set 
			Total_Remunerac = IFNULL(ROUND(
			    IFNULL(Remuner, 0) +
			    IFNULL(SUBSIDIOS_ENFERMED, 0) +
			    IFNULL(ASIGN_FAM, 0) +
			    IFNULL(UTILIDADES, 0) +
			    IFNULL(BONO_PRODUCTIVIDAD, 0) +
   			    IFNULL(alimentos_Prestamos, 0) +
   			    IFNULL(BONO_EDUCATIVA, 0) +
   			    IFNULL(BONO_REFERIDO, 0) +
   			    IFNULL(MOVIL_SUPEDITADA, 0) +
			    IFNULL(TOTAL_HORAS_EXTRAS_Q, 0) +
			    IFNULL(Vacaciones_Truncas, 0) +
			    IFNULL(COMPENSACION_VACACIONAL, 0) +
			    IFNULL(REMUNER_VACACIONAL, 0) +
			    IFNULL(GRATIFICLEY29351Y30334, 0) +
			    IFNULL(GRATIFICACPROPORC_LEY29351Y30334, 0) +
			    IFNULL(GRATYBONI, 0) +
			    IFNULL(CTS, 0) +
			    IFNULL(Bonif_Grati, 0) +
			    IFNULL(Bonif_Grati_Trunca, 0) +
			    IFNULL(Remunerac_hora_de_permiso_lactancia, 0) +
			    IFNULL(GRATIFICAC_EXTRAORDINARIA_SIN_DSCTO_AFP, 0) +
			    IFNULL(Reintegro, 0) +
			    IFNULL(Devolucion_5ta, 0) +
			    IFNULL(Movilidad_Supedita_Asist_Otros, 0) +
			    IFNULL(Suma_Graciosa_Bonif_Ex, 0)
			    , 2), 0),
			Total_Remuneracion_Afecto = IFNULL(ROUND(
			       IFNULL(Remuner, 0) +
					    IFNULL(SUBSIDIOS_ENFERMED, 0) +
					    IFNULL(ASIGN_FAM, 0) +
					    IFNULL(TOTAL_HORAS_EXTRAS_Q, 0) +
					    IFNULL(Vacaciones_Truncas, 0) +
					    IFNULL(REMUNER_VACACIONAL, 0) +
					    IFNULL(Remunerac_hora_de_permiso_lactancia, 0) +
					    IFNULL(Reintegro, 0) -
						IFNULL(TARDANZ, 0) -
					    IFNULL(INASISTENC, 0) - 
						IFNULL(Suspension_q,0)
					, 2), 0),
			ONP = if(AFP="ONP",round( Total_Remuneracion_Afecto * desc_afp,2),"0"),
			Comision_Variable = round(( (Total_Remuneracion_Afecto + BONO_PRODUCTIVIDAD  ) * (Comis_AFP_percent/100) ),2),
			Seguro = round(( (Total_Remuneracion_Afecto + BONO_PRODUCTIVIDAD  ) * (Seguro_AFP_percent/100) ),2),
			Aporte_obligat = round(( (Total_Remuneracion_Afecto + BONO_PRODUCTIVIDAD  ) * (Aporte_AFP/100) ),2),
			Total_AFP = round((Comision_Variable + Seguro + Aporte_obligat),2),
			5_Categoria= ROUND((
			  CASE
			    WHEN (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) <= @valorUIT * 5) THEN 
			      (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) * 0.08)
			    WHEN (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) <= @valorUIT * 20) THEN 
			      ((@valorUIT * 5 * 0.08) +
			      ((GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) - @valorUIT * 5) * 0.14))
			    WHEN (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) <= @valorUIT * 35) THEN
			      ((@valorUIT * 5 * 0.08) +
			      (@valorUIT * 15 * 0.14) +
			      ((GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) - @valorUIT * 20) * 0.17))
			    WHEN (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) <= @valorUIT * 45) THEN
			 	  (@valorUIT * 5 * 0.08) +
			      (@valorUIT * 15 * 0.14) +
			      (@valorUIT * 15 * 0.17) +
			      (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) - @valorUIT * 35) * 0.20
			    ELSE
			      ((@valorUIT * 5 * 0.08) +
			      (@valorUIT * 15 * 0.14) +
			      (@valorUIT * 15 * 0.17) +
			      (@valorUIT * 10 * 0.20) +
			      (GREATEST(Total_Remuneracion_Afecto * 14 - @valorUIT * 7, 0) - @valorUIT * 45) * 0.30)
			  END
			)/ 12, 2),
			Total_Descuentos = ifnull(round((
					IFNULL(Total_AFP,0) + 
					IFNULL(ONP,0) + 
					IFNULL(`5_Categoria`,0) + 
					IFNULL(Cuota_Prestamos,0) + 
					IFNULL(Otros_dsctos_prestamos,0) + 
					IFNULL(Adelanto_de_Quincena,0) + 
					IFNULL(PAGO_UTILIDADES,0) + 
					IFNULL(SEGURO_EPS,0) + 
					IFNULL(PAGOS_ADELANTADOS,0) + 
					IFNULL(TARDANZ,0) + 
					IFNULL(INASISTENC,0) + 
					IFNULL(Suspension_q,0) +
					IFNULL(descuento_viaticos,0)  +
					IFNULL(descuento_oncologico,0)  +
					IFNULL(descuento_celular,0)  +
					IFNULL(descuento_alimentario,0)  +
					IFNULL(descuento_vehicular,0)  +
					IFNULL(descuento_fotocheck,0)  +
					IFNULL(descuento_equipos,0)  +
					IFNULL(descuento_payflow,0)  +
					IFNULL(descuento_oftalmologo,0)  +
					IFNULL(descuento_retencion,0)  
					),2),0),
			Neto_a_Pagar = round((Total_Remunerac - Total_Descuentos),2),
			Aporte_Empleador_ESSALUD = if(HABER_BASICO>@rmv,round((Total_Remuneracion_Afecto * @bonificacion_extraordinaria_essalud),2),round((@rmv * @bonificacion_extraordinaria_essalud),2)),
			Aporte_Empleador_SCTR_PENSION = round((REMUN_ASIG*Aporte_Empleador_SCTR_PENSION_Q),2),
			Aporte_Empleador_SCTR_SALUD=round((REMUN_ASIG *Aporte_Empleador_SCTR_SALUD_Q),2),
			VIDA_LEY=round((REMUN_ASIG *VIDA_LEY_Q),2),
			Aporte_Empleador_SENATI=round((Total_Remuneracion_Afecto*Aporte_Empleador_SENATI_Q),2)
			where Periodo  = p_periodo ;
		
END
