create or replace PROCEDURE P_MIGRACION_SEIS AS 
	-- CONSTANTES:
	C_TABLA_X87_01 VARCHAR2(10):= 'X8701T00';
	C_TABLA_X87_81 VARCHAR2(10):= 'X8781T00';
	C_TABLA_X87_84 VARCHAR2(10):= 'X8784T00';
	
	C_TABLA_AD74A_89 VARCHAR2(10):= 'AD74A89T00';
	C_TABLA_AD74A_90 VARCHAR2(10):= 'AD74A90T00';
	
	C_TABLA_AD74A_B5  VARCHAR2(10):= 'AE01B05T00';
	
	-- CONDICIONES DEL CURSOR A MIGRAR:
	-- - SI EL BENEFICIARIO O SOLICITANTE TIENE MARCA DE PISO TUTELADO--> NO SE MIGRARA:
	-- -- - IDSOLICITANTE_001 NOT IN (SELECT IDSOLICITANTE_001 FROM X87B.X8701T00@X87B_DBL0 X01 WHERE PISOTUTELADO_001 = 1)
	CURSOR C_LIQ_X81 IS
	  	SELECT LIQUIDACION_081, CL.VALOR_AD74A IDSOLICITANTE_01,X01.IDSOLICITANTE_001,FECHA_COBRO_081,
			DECODE(TO_CHAR(FECHA_COBRO_081,'MM'),'01',TO_CHAR(FECHA_COBRO_081,'RRRR')-1,TO_CHAR(FECHA_COBRO_081,'RRRR')) ANYO_89,
			DECODE(TO_CHAR(FECHA_COBRO_081,'MM'),'01','12',TO_CHAR(FECHA_COBRO_081,'MM')-1) MES_89,
			PRECIO_081, FICHERO_081, 'fn77a101_01570_'||FICHERO_081 NOMBRE_FICHERO_081, ESTADO_081, 
			'csb19_2_01570_'||FICHERO_081 NOMBRE_FICHEROCS_81, FECHA_ACTUALIZACION_081, DEVENGO_081,
			DECODE(CODPROVINCIA_081,1,1,20,2,48,3,CODPROVINCIA_081) CODPROVINCIA_081, GENERADO_081, MOTIVO_ANUL_081, REINTENTO_COBRO_081,
			FECHA_REINTENTO_COBRO_081,NOREINTENTARCOBRO_081, nvl(FECHA_REINTENTO_COBRO_081,FECHA_COBRO_081)+7 F_LIMITE_PAGO,
			to_char(nvl(FECHA_REINTENTO_COBRO_081,FECHA_COBRO_081)+7,'ddmmyy') F_LIMITE_PAGO_FORM,
			NUM_ABONADO_01, DECODE(COD_TIPO_IDEN_TITULAR_05,2,1,1,2,3,2,4,3,NVL(COD_TIPO_IDEN_TITULAR_05,1)) TIPO_IDENFICADOR_05, IDEN_TITULAR_05,
			F_INICIO_01, NOMBRE_TIT_CUENTA_05, APELLIDO1_TIT_CUENTA_05, APELLIDO2_TIT_CUENTA_05, TITULAR_CUENTA_05,
			DECODE(TO_CHAR(FECHA_COBRO_081,'MM'),'01',TO_CHAR(FECHA_COBRO_081,'RRRR')-1,TO_CHAR(FECHA_COBRO_081,'RRRR'))||substr(liquidacion_081,length(liquidacion_081)-6) REF_LIQUIDACION
	FROM X87B.X8781T00@X87B_DBL0 X81, X87B.X8701T00@X87B_DBL0 X01, T_CLAVES_X01 CL, AD74A05T00 AD05, AD74A01T00 AD01
    WHERE X81.IDSOLICITANTE_001= X01.IDSOLICITANTE_001
    AND X01.PISOTUTELADO_001 <> 1
    AND X81.IDSOLICITANTE_001 = CL.VALOR_X87B
    AND CL.VALOR_AD74A =  AD05.ID_SOLICITANTE_05
    AND AD05.ID_SOLICITANTE_05 = AD01.ID_SOLICITANTE_01
    AND AD01.ID_CUENTA_01 = AD05.ID_CUENTA_05(+)
	AND NOT EXISTS (SELECT VALOR_AD74A FROM T_CLAVES_X81_L WHERE VALOR_X87B  = LIQUIDACION_081)
	    --and LIQUIDACION_081 = 99999999999999 -- para que no salga nada
	ORDER BY LIQUIDACION_081;
	
	vIdFicheroF77 AE01B.AE01B05T00.ID_FICHERO_05%TYPE:=0;
	vIdFicheroCS19 AE01B.AE01B05T00.ID_FICHERO_05%TYPE:=0;
	vIdLiquidacion AE01B.AE01B00T00.ID_LIQUIDACION_00%TYPE:=0;
	
	vNumEntidad07 AE01B.AE01B07T00.NUM_ENTIDAD_07%type;
	vSufijo07 AE01B.AE01B07T00.SUFIJO_07%type;
	
	vIdMensualidad89 AD74A89T00.ID_MENSUALIDAD_89%type;
	
	vExiste NUMBER(10):=1;
	vExisteFich05 NUMBER(10):=1;
	
	vTipoIngreso30 AE01B.AE01B30T00.ID_TIPO_INGRESO_30%type:=null;
	vAplicacion35  AE01B.AE01B35T00.ID_APLICACION_35%type:=null;
	vIdConcepto31  AE01B.AE01B31T00.ID_CONCEPTO_31%type:=null;
	
	vIdMotivoAnu37 AE01B.AE01B37T00.ID_MOT_ANU_COBRO_37%type:=null;
	
	vAux number(2):=0; -- calcular digito de control 
	
	-- CURSOR DE FICHEROS DE AYUNTAMIENTOS:
	CURSOR C_84 IS 
	SELECT  IDFICHERO_084,IDAYUNTAMIENTO_084,NUMRECIBO_084,FECGEN_084,TO_NUMBER(TO_CHAR(ADD_MONTHS(FECGEN_084,-6),'MM')) FECGEN_MM_MENOS6,
			TO_NUMBER(TO_CHAR(ADD_MONTHS(FECGEN_084,-6),'YYYY')) FECGEN_YYYY_MENOS6,
			TO_NUMBER(TO_CHAR(ADD_MONTHS(FECGEN_084,-1),'MM')) FECGEN_MM_MENOS1,
			TO_NUMBER(TO_CHAR(ADD_MONTHS(FECGEN_084,-1),'YYYY')) FECGEN_YYYY_MENOS1,
             CIF_082, IDAYUNTAMIENTO_082
      FROM X87B.X8784T00@X87B_DBL0 X84, X87B.X8782T00@X87B_DBL0 X82
      WHERE IDAYUNTAMIENTO_084 = IDAYUNTAMIENTO_082
	  and IDFICHERO_084 NOT IN (SELECT VALOR_X87B FROM  T_CLAVES_X84 )
	 ORDER BY IDFICHERO_084 ASC;
	  
	vIdAyunta31 AD74A31T00.ID_AYUNTAMIENTO_31%type;
	vFicheroBlob90 clob;
	
	vIdFacturacion90 AD74A90T00.id_facturacion_90%type;
	
	cursor cFich (idFichero varchar2) is 
    SELECT (select FICHERO_084 from X87B.X8784T00@X87B_DBL0  WHERE IDFICHERO_084 = idFichero) AS fichBlob FROM  dual;
BEGIN

	begin
		-- CONSTANTES CALCULADAS DEL PROGRAMA:
		SELECT ID_TIPO_INGRESO_30 into vTipoIngreso30 FROM AE01B.AE01B30T00 WHERE upper(TIPO_INGRESO_30) = 'TLCOP';
		SELECT ID_APLICACION_35 into vAplicacion35 FROM AE01B.AE01B35T00 WHERE UPPER(DENOMINACION_APLIC_35) ='AD74A';
		
		SELECT ID_CONCEPTO_31 INTO vIdConcepto31 FROM AE01B.AE01B31T00 WHERE ID_TIPO_INGRESO_31 = vTipoIngreso30 and TIPO_DEVENGO_31 = 'C';
		
		SELECT NUM_ENTIDAD_07, SUFIJO_07 INTO vNumEntidad07, vSufijo07 FROM AE01B.AE01B07T00;
		
	exception
		when others then
			if vTipoIngreso30 is null then
				dbms_output.put_line('No se ha podido recoger el AE01B.AE01B30T00.ID_TIPO_INGRESO_30 para TLCOP. ');
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR)
				values('SEIS','Calculo constantes',' No se ha podido recoger el AE01B.AE01B30T00.ID_TIPO_INGRESO_30 para TLCOP.',SYSDATE);
			end if;
			if vAplicacion35 is null then
				dbms_output.put_line('No se ha podido recoger el AE01B.AE01B35T00.ID_APLICACION_35 para AD74A. ');
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('SEIS','Calculo constantes','No se ha podido recoger el AE01B.AE01B35T00.ID_APLICACION_35 para AD74A.',SYSDATE);
			end if;
			if vIdConcepto31 is null then
				dbms_output.put_line('No se ha podido recoger el AE01B.AE01B31T00.ID_CONCEPTO_31. ');
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR)
				values('SEIS','Calculo constantes','No se ha podido recoger el AE01B.AE01B31T00.ID_CONCEPTO_31.',SYSDATE);
			end if;
	end;

	-- MIGRACION DE LIQUIDACIONES: MENSUALIDADES/SOLICITANTE X8781T00
	FOR R_LIQ_81 IN C_LIQ_X81 LOOP
		vExiste := 0;
		-- Se controla una excepcion: el 04/12/2023, que corresponde a octubre 2023
		IF TO_CHAR(R_LIQ_81.FECHA_COBRO_081,'DD/MM/RRRR') = '04/12/2023' THEN
			--DBMS_OUTPUT.PUT_LINE('Control de excepcion en la fecha del cobro: 04/12/2023 pasa a ser mensualidad 10/2023');
			R_LIQ_81.MES_89 := '10';
			R_LIQ_81.ANYO_89 := '2023';
		END IF;
		
		--DBMS_OUTPUT.PUT_LINE('LIQUIDACION: '||R_LIQ_81.LIQUIDACION_081||', ID_SOLICITANTE: '||R_LIQ_81.IDSOLICITANTE_01);
		begin
			-- Registrar mensualidad en AD74A89T00, pero sólo si no existe ya un registro para ese solicitante, año y mes
			begin
				SELECT MIN(ID_MENSUALIDAD_89) INTO  vIdMensualidad89 FROM AD74A89T00 
				WHERE ID_SOLICITANTE_89 = R_LIQ_81.IDSOLICITANTE_01
				AND ANYO_89 = R_LIQ_81.ANYO_89
				AND MES_89 = R_LIQ_81.MES_89;
				--dbms_output.put_line('1, idMensualidad: '||vIdMensualidad89);
			exception 
				when no_data_found then	
					vExiste :=0;
			end;
			INSERT INTO T_CLAVES_X81_L (VALOR_X87B,  VALOR_AD74A, FECHA_MIG, MIGRADO)
				VALUES (R_LIQ_81.LIQUIDACION_081, vIdMensualidad89, SYSDATE, 'S');
				
			IF vExiste = 0 THEN
				SELECT AD74A89T00_SEQ.NEXTVAL INTO vIdMensualidad89 FROM DUAL; 
						
				INSERT INTO AD74A89T00 (ID_MENSUALIDAD_89, ID_SOLICITANTE_89, 
										ANYO_89, MES_89, GRUPO_IMPAGO_89,
										EXONERACION_89, F_ALTA_89, USU_ALTA_89)
				VALUES(vIdMensualidad89, R_LIQ_81.IDSOLICITANTE_01, 
					   R_LIQ_81.ANYO_89, R_LIQ_81.MES_89, NULL,
					   0, SYSDATE, 'MIGRADO');
				vExiste := 1;
			ELSE 
				DBMS_OUTPUT.PUT_LINE('Existe ya un registro para el solicitante:'||R_LIQ_81.IDSOLICITANTE_01||', anyo: '||R_LIQ_81.ANYO_89||', mes: '||R_LIQ_81.MES_89);
			END IF;
		
		EXCEPTION
			WHEN dup_val_on_index THEN
				NULL;
			WHEN OTHERS THEN	
				dbms_output.put_line('Se ha producido un error al guardar el registos de la mensualidad: '||vIdMensualidad89||', del solicitante: '||R_LIQ_81.IDSOLICITANTE_01);
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('SEIS','Guardar en AD74A89T00','Se ha producido un error al guardar el registos de la mensualidad: '||vIdMensualidad89||', del solicitante: '||R_LIQ_81.IDSOLICITANTE_01,SYSDATE);
		END;
		-- Registrar, SI NO EXISTE, el fichero fn77 enviado a SIPCA en AE01B05T00
		-- No vamos a incluir la busqueda del fichero en la select, porque puede que se inserte una vez con el cursor y la siguiente ya exista
		begin
			select ID_FICHERO_05 into vIdFicheroF77
			from  AE01B.AE01B05T00
			where NOM_FICHERO_05 = R_LIQ_81.NOMBRE_FICHERO_081;
		exception	
			when no_data_found then
				vExisteFich05 := 0;
		end;
		begin
			select ID_FICHERO_05 into vIdFicheroCS19
			from  AE01B.AE01B05T00
			where NOM_FICHERO_05 = R_LIQ_81.NOMBRE_FICHEROCS_81;
		exception	
			when no_data_found then
				null;
		end;
		
		-- Si NO existe el fichero tenemos que insertar el registro en la tabla AE01B.AE01B05T00: En caso de insertar se insertan dos registros: el fn77a101_01570_ y el csb19_2_01570_
		if vExisteFich05 = 0 then
			
			BEGIN
				SELECT AE01B.AE01B05T00_SEQ.NEXTVAL INTO vIdFicheroF77 FROM DUAL;
				
				SELECT AE01B.AE01B05T00_SEQ.NEXTVAL INTO vIdFicheroCS19 FROM DUAL;
				
				--dbms_output.put_line('1: Nombre fich: '||R_LIQ_81.NOMBRE_FICHERO_081||', idFich:'||vIdFicheroF77);
				INSERT INTO T_CLAVES_X81_F (VALOR_X87B, VALOR_AD74A, FECHA_MIG, MIGRADO)
				VALUES ( R_LIQ_81.NOMBRE_FICHERO_081, to_number(vIdFicheroF77), sysdate, 'S');
						
				--dbms_output.put_line('2: Nombre fich: '||R_LIQ_81.NOMBRE_FICHERO_081||', idFich:'||to_Number(vIdFicheroF77) ||', fecha1; '||R_LIQ_81.FECHA_REINTENTO_COBRO_081||', fecha2:'||R_LIQ_81.FECHA_COBRO_081||',idApli:'||to_number(vAplicacion35));		
				INSERT INTO AE01B.AE01B05T00 (ID_FICHERO_05,NOM_FICHERO_05,
												F_ENVIO_05,F_RECEP_05,ID_APLICACION_05,USU_ALTA_05,F_ALTA_05) 
				VALUES(to_Number(vIdFicheroF77) ,R_LIQ_81.NOMBRE_FICHERO_081,
						NVL(R_LIQ_81.FECHA_REINTENTO_COBRO_081,R_LIQ_81.FECHA_COBRO_081), NULL, to_number(vAplicacion35),'MIGRADO',SYSDATE);
				
				--dbms_output.put_line('3: Nombre fich: '||R_LIQ_81.NOMBRE_FICHEROCS_81||', idFich:'||vIdFicheroCS19||', fecha:'||R_LIQ_81.FECHA_COBRO_081);					
				INSERT INTO AE01B.AE01B05T00 (ID_FICHERO_05,NOM_FICHERO_05,
												F_ENVIO_05,F_RECEP_05,ID_APLICACION_05,USU_ALTA_05,F_ALTA_05) 
				VALUES(to_number(vIdFicheroCS19),R_LIQ_81.NOMBRE_FICHEROCS_81,
						NVL(R_LIQ_81.FECHA_REINTENTO_COBRO_081,R_LIQ_81.FECHA_COBRO_081), NULL, to_number(vAplicacion35),'MIGRADO',SYSDATE);
		
				vExisteFich05:=1;
			EXCEPTION	
				WHEN OTHERS THEN	
					dbms_output.put_line(sqlcode||'-'||sqlerrm||', Se ha producido un error al guardar referencia del ficheros idF77:'||vIdFicheroF77||'-'||R_LIQ_81.NOMBRE_FICHERO_081||', idCS19:'||vIdFicheroCS19||'-'||R_LIQ_81.NOMBRE_FICHEROCS_81);
					insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
					values('SEIS','Al guardar en AE01B.AE01B05T00','Se ha producido un error al guardar referencia del ficheros idF77:'||vIdFicheroF77||'-'||R_LIQ_81.NOMBRE_FICHERO_081||', idCS19:'||vIdFicheroCS19||'-'||R_LIQ_81.NOMBRE_FICHEROCS_81,SYSDATE);
			END;
		end if;
		-- Registrar la liquidacion en: AE01B00T00
		-- DIGITO_CONTROL: Algoritmo de cálculo en código Visual Basic:
			-- Algoritmo de cálculo en código Visual Basic:
			-- ret = Val(AE01B07T00.Num_Entidad) + Val(AE01B07T00.Sufijo)
			-- ret = ret + Val(AE01B00T00.Referencia_Liq_00)
			-- ret = ret + Val(texto resultante de AE01B00T00.F_Limite_Pago_00 con formato ddmmyy, año con 2 dígitos) + Val(AE01B00T00.Importe_00 en céntimos de euro)
			-- ret = Int(ret * 1000 / 97)
			-- rdo = Left(Right(Format(ret, "#"), 3), 2)
			-- ret = Val(rdo)
			-- If ret <> 0 Then ret = 100 - ret
			-- DigControl = Format(ret, "#00")

		-- DATOS DIRECCION: 
			-- DEJAR VACIOS: COD_PAIS_00, LOCALIDAD_00,COD_PROVINCIA_00, COD_MUNICIPIO_00,COD_LOCALIDAD_00,TIPO_VIA_00,NOMBRE_VIA_00,PORTAL_00,LETRA_PORTAL_00,ESCALERA_00,PISO_00,PUERTA_00,COD_POSTAL_00		INSERT INTO AE01B.AE01B00T00 (ID_LIQUIDACION_00, EJERCICIO_00, NUM_LIQUIDACION_00,ID_TIPO_INGRESO_00, COD_ORIGEN_00,
		-- IND_DOMIC_00: 1(Domiciliado)
		-- IBAN_00: X87 no guarda un histórico de cuentas del beneficiario. Sólo mantiene la última y la anterior, si es que en algún momento se actualizó. Además, la anterior la guardan desde un momento determinado, no desde siempre. Por lo tanto y por aplicar el mismo criterio para todas las liquidaciones migradas, el IBAN se dejará vacío. Realmente no es necesario más que para generar el fichero csb19, pero lo recogemos del beneficiario al emitir. Se guarda en la liquidación y se muestra en la interfaz de consulta de ésta, pero estará vacío.
			-- DATOS DIRECCION: DEJAR VACIOS: RESIDENTE_00, COD_PAIS_00, LOCALIDAD_00,COD_PROVINCIA_00, COD_MUNICIPIO_00,COD_LOCALIDAD_00,TIPO_VIA_00,NOMBRE_VIA_00,PORTAL_00,LETRA_PORTAL_00,ESCALERA_00,PISO_00,PUERTA_00,COD_POSTAL_00
		-- F_COBRO_PROV_00: Si X8781T00.Estado_081=60 ó 61, grabar valor de F_Limite_pago_00. Vacío en caso contrario.
		-- F_COBRO_DEF_00: Si X8781T00.Estado_081=60, grabar resultado de sumar 60 días a F_Limite_pago_00. Vacío en caso contrario
		-- F_ANU_COBRO_00: Si X8781T00.Estado_081=’07’, asignar Fecha_Actualizacion_081. Vacío en caso contrario
		-- MOTIVO_ANU_COBRO_00: Si X8781T00.Estado_081=’07’ y X8781T00.Motivo_Anul_081 no está vacío, buscar este en AE01B37T00 y obtener ID_Mot_Anu_Cobro_37
		-- ESTADO_LIQ_00 :Si X8781T00.Estado_081=null será 1 (pendiente de cobro) Si X8781T00.Estado_081=’07’ será 2 (anulada) Si X8781T00.Estado_081=’60’ será 4 (cobro definitivo) Si X8781T00.Estado_081=’61’ será 3 (cobro provisional)Otros valores, asignar null (desconocido)
		
		-- NOMBRE_TIT_CUENTA_05: NO PUEDO DEJARLO VACIO, LE PONGO UN INDICADOR DE SI NO TIENE VALOR PONERLE UN TEXTO PARA RELLENAR EN X87
		-- RESIDENTE_00: 1.
			
		begin
		 select  substr(substr(trunc(((to_number(vNumEntidad07) + to_number(vSufijo07) + to_Number(R_LIQ_81.REF_LIQUIDACION) +TO_NUMBER(R_LIQ_81.F_LIMITE_PAGO_FORM) + (R_LIQ_81.PRECIO_081*100)) *1000)/97),1,3),2)
		 into vAux from dual;
		 
		 if vAux <> 0 then 
			vAux:=100-vAux; 
		end if;
		 
		exception	
			when others then
				vAux :=0;
		end;
		 
		BEGIN
		--dbms_output.put_line('1: Nombre fich: '||R_LIQ_81.NOMBRE_FICHERO_081||', id77:'||vIdFicheroF77);
		--dbms_output.put_line('2: Nombre fich: '||R_LIQ_81.NOMBRE_FICHEROCS_81||', id77:'||vIdFicheroCS19);
			
			IF (R_LIQ_81.ESTADO_081='07') AND (R_LIQ_81.MOTIVO_ANUL_081 IS NOT NULL) THEN
				begin
					SELECT ID_MOT_ANU_COBRO_37 INTO vIdMotivoAnu37 FROM AE01B.AE01B37T00 WHERE COD_ANULACION_37 = R_LIQ_81.MOTIVO_ANUL_081;
				exception	
					when no_data_found then
						vIdMotivoAnu37 := 0;
				end;
			END IF;
			
			SELECT AE01B.AE01B00T00_SEQ.NEXTVAL INTO vIdLiquidacion FROM DUAL;
			
			--dbms_output.put_line('ID_LIQUIDACION_00: '||vIdLiquidacion);
			--dbms_output.put_line('EJERCICIO_00: '||R_LIQ_81.ANYO_89);
			--dbms_output.put_line('NUM_LIQUIDACION_00: '||TO_NUMBER(R_LIQ_81.LIQUIDACION_081));
			--dbms_output.put_line('ID_TIPO_INGRESO_00: '||vTipoIngreso30);
			--dbms_output.put_line('COD_ORIGEN_00: '||vIdMensualidad89);
			--dbms_output.put_line('IMPORTE_00: '||R_LIQ_81.PRECIO_081);
			--dbms_output.put_line('F_EMISION_00: '|| NVL(R_LIQ_81.FECHA_REINTENTO_COBRO_081,R_LIQ_81.FECHA_COBRO_081));
			--dbms_output.put_line('F_LIMITE_PAGO_00: '||R_LIQ_81.F_LIMITE_PAGO);
			--dbms_output.put_line('REFERENCIA_LIQ_00: '||R_LIQ_81.REF_LIQUIDACION);
			--dbms_output.put_line('DIGITO_CONTROL_00: '||to_char(vAux,'00'));
			--dbms_output.put_line('ID_TERRITORIO_00: '||R_LIQ_81.CODPROVINCIA_081);
			--dbms_output.put_line('EXPEDIENTE_00: '||R_LIQ_81.NUM_ABONADO_01);
			--dbms_output.put_line('CONCEPTO_00: '||'MIGRACION X87');
			--dbms_output.put_line('TIPO_TERCERO_00: '||R_LIQ_81.TIPO_IDENFICADOR_05);
			--dbms_output.put_line('TERCERO_00: '||R_LIQ_81.IDEN_TITULAR_05);
			--dbms_output.put_line('NOM_RAC_SOC_00: '||R_LIQ_81.NOMBRE_TIT_CUENTA_05);
			--dbms_output.put_line('APELLIDO1_00: '||R_LIQ_81.APELLIDO1_TIT_CUENTA_05);
			--dbms_output.put_line('APELLIDO2_00: '||R_LIQ_81.APELLIDO2_TIT_CUENTA_05);
			--dbms_output.put_line('IND_DOMIC_00: '||1);
			--dbms_output.put_line('F_MANDATO_00: '||R_LIQ_81.F_INICIO_01);
			--dbms_output.put_line('F_ENV_SIPCA_00: '||NVL(R_LIQ_81.FECHA_REINTENTO_COBRO_081,R_LIQ_81.FECHA_COBRO_081));
			--dbms_output.put_line('ID_FICHERO_ENV_00: '||vIdFicheroF77);
			--dbms_output.put_line('F_COBRO_PROV_00: '|| DECODE(R_LIQ_81.ESTADO_081,'60',R_LIQ_81.F_LIMITE_PAGO,'61',R_LIQ_81.F_LIMITE_PAGO,NULL));
			--dbms_output.put_line('F_COBRO_DEF_00: '||DECODE(R_LIQ_81.ESTADO_081,'60',(R_LIQ_81.F_LIMITE_PAGO+60),NULL));
			--dbms_output.put_line('F_ANU_COBRO_00: '||DECODE(R_LIQ_81.ESTADO_081,'07',R_LIQ_81.FECHA_ACTUALIZACION_081,NULL));
			--dbms_output.put_line('MOTIVO_ANU_COBRO_00: '||vIdMotivoAnu37);
			--dbms_output.put_line('ID_FICHEROCSB19_00: '||vIdFicheroCS19);
			--dbms_output.put_line('F_CARGO_00: '||R_LIQ_81.F_LIMITE_PAGO);
			--dbms_output.put_line('ID_PAGO_PASARELA_0: '||NULL);
			--dbms_output.put_line('ESTADO_LIQ_00: '||DECODE(NVL(TRIM(R_LIQ_81.ESTADO_081),1),1,1,'07',2,'60',4,'61',3, NULL));
			
				
			
			INSERT INTO AE01B.AE01B00T00 (ID_LIQUIDACION_00, EJERCICIO_00, NUM_LIQUIDACION_00,ID_TIPO_INGRESO_00, COD_ORIGEN_00,
										  IMPORTE_00, F_EMISION_00, F_LIMITE_PAGO_00, REFERENCIA_LIQ_00, DIGITO_CONTROL_00,
										  ID_TERRITORIO_00, EXPEDIENTE_00, CONCEPTO_00, TIPO_TERCERO_00, TERCERO_00,
										  NOM_RAC_SOC_00, APELLIDO1_00, APELLIDO2_00, IND_DOMIC_00, F_MANDATO_00, F_ENV_SIPCA_00,
										  ID_FICHERO_ENV_00, F_COBRO_PROV_00,F_COBRO_DEF_00, 
										  F_ANU_COBRO_00, MOTIVO_ANU_COBRO_00, ID_FICHEROCSB19_00, 
										  F_CARGO_00, ID_PAGO_PASARELA_00, ESTADO_LIQ_00,USU_ALTA_00, F_ALTA_00) 
			VALUES (vIdLiquidacion, R_LIQ_81.ANYO_89, TO_NUMBER(R_LIQ_81.LIQUIDACION_081), vTipoIngreso30, vIdMensualidad89,
					R_LIQ_81.PRECIO_081, NVL(R_LIQ_81.FECHA_REINTENTO_COBRO_081,R_LIQ_81.FECHA_COBRO_081), R_LIQ_81.F_LIMITE_PAGO, R_LIQ_81.REF_LIQUIDACION,  lpad(to_char(vAux),2,'0') , 
					R_LIQ_81.CODPROVINCIA_081, R_LIQ_81.NUM_ABONADO_01, 'MIGRACION X87', R_LIQ_81.TIPO_IDENFICADOR_05, R_LIQ_81.IDEN_TITULAR_05,
					nvl(R_LIQ_81.NOMBRE_TIT_CUENTA_05,'PDTE NOMBRE EN X87'), R_LIQ_81.APELLIDO1_TIT_CUENTA_05, R_LIQ_81.APELLIDO2_TIT_CUENTA_05, 1, R_LIQ_81.F_INICIO_01,NVL(R_LIQ_81.FECHA_REINTENTO_COBRO_081,R_LIQ_81.FECHA_COBRO_081),
					vIdFicheroF77, DECODE(R_LIQ_81.ESTADO_081,'60',R_LIQ_81.F_LIMITE_PAGO,'61',R_LIQ_81.F_LIMITE_PAGO,NULL), DECODE(R_LIQ_81.ESTADO_081,'60',(R_LIQ_81.F_LIMITE_PAGO+60),NULL),
					DECODE(R_LIQ_81.ESTADO_081,'07',R_LIQ_81.FECHA_ACTUALIZACION_081,NULL), vIdMotivoAnu37, vIdFicheroCS19,
					R_LIQ_81.F_LIMITE_PAGO, NULL, DECODE(NVL(TRIM(R_LIQ_81.ESTADO_081),1),1,1,'07',2,'60',4,'61',3, NULL),'MIGRADO',SYSDATE)  ;
				
		EXCEPTION	
			WHEN OTHERS THEN	
				dbms_output.put_line(sqlcode||'-'||sqlerrm||'Se ha producido un error al registrar la liquidacion en AE01B00T00. id:'||vIdLiquidacion||', numLiq:'||TO_nUMBER(R_LIQ_81.LIQUIDACION_081));
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('SEIS','Guardar en AE01B.AE01B00T00','Se ha producido un error al registrar la liquidacion en AE01B00T00. id:'||vIdLiquidacion||', numLiq:'||TO_NUMBER(R_LIQ_81.LIQUIDACION_081),SYSDATE);
		END;
		
		BEGIN
			-- ID_LIQUIDACION_01: AE01B00T00.ID_Liquidacion_00
			-- ID_CONCEPTO_01: Concepto de Teleasistencia en AE01B31T00 para tipo TLCOP
			-- IMPORTE_01: AE01B00T00.Importe_00
			-- NUMLINEA_01: Valor fijo 1
			INSERT INTO AE01B.AE01B01T00 (ID_LIQUIDACION_01, ID_CONCEPTO_01, IMPORTE_01, NUMLINEA_01,USU_ALTA_01, F_ALTA_01) 
			VALUES(vIdLiquidacion,vIdConcepto31,R_LIQ_81.PRECIO_081,1,'MIGRADO',SYSDATE) ;
		EXCEPTION	
			WHEN OTHERS THEN	
				dbms_output.put_line('Se ha producido un error al registrar la liquidacion en AE01B00T00. id:'||vIdLiquidacion);
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('SEIS','Guardar en AE01B.AE01B01T00','Se ha producido un error al registrar la liquidacion en AE01B00T00. id:'||vIdLiquidacion,SYSDATE);
		END;
	COMMIT;
	END LOOP;

	
	
	-- MIGRACION DE FACTURACION AYUNTAMIENTOS X8785T00
	FOR R_84 IN C_84 LOOP
		BEGIN
			--SELECT (select FICHERO_084 from X87B.X8784T00@X87B_DBL0  WHERE IDFICHERO_084 = R_84.IDFICHERO_084) AS column_b into vFicheroBlob90 FROM DUAL;
			select AD74A90T00_SEQ.NEXTVAL into vIdFacturacion90 from dual;
			
			-- hay registros "incorrectos" o "duplicados" en la tabla ac94a31t00, por eso se incluye aqui la select:
			select MIN(ID_AYUNTAMIENTO_31) INTO vIdAyunta31
			from AD74A31T00 where trim(CIF_31) = trim(R_84.CIF_082) AND DESC_ES_31 IS NOT NULL;
			
			INSERT INTO T_CLAVES_X84 (VALOR_X87B, VALOR_AD74A, FECHA_MIG, MIGRADO)
			VALUES (R_84.IDFICHERO_084, vIdFacturacion90, SYSDATE, 'S');
					
			INSERT INTO AD74A90T00 (ID_FACTURACION_90,ID_AYUNTAMIENTO_90,ANYO_DESDE_90,MES_DESDE_90,ANYO_HASTA_90,MES_HASTA_90,
									F_EMISION_90,IMPORTE_FACTURADO_90,INFORME_90,REFERENCIA_RECIBO_90,PROCESADO_90)
			VALUES (vIdFacturacion90,vIdAyunta31,R_84.FECGEN_MM_MENOS6,R_84.FECGEN_YYYY_MENOS6,R_84.FECGEN_MM_MENOS1,R_84.FECGEN_YYYY_MENOS1,
					R_84.FECGEN_084,0,empty_blob(),R_84.NUMRECIBO_084,1);
			
			for rFich in cFich (R_84.IDFICHERO_084) loop
				--SELECT (select FICHERO_084 from X87B.X8784T00@X87B_DBL0  WHERE IDFICHERO_084 = idFichero) AS fichClob FROM  dual;				
				UPDATE AD74A90T00 SET INFORME_90 = rFich.fichBlob where ID_FACTURACION_90 = vIdFacturacion90;
			end loop;
			
		EXCEPTION	
			WHEN OTHERS THEN	
				dbms_output.put_line('Se ha producido un error al migrar la facturacion de los ayuntamientos AD74A90T00. idAyunta :'||vIdAyunta31);
				insert into t_errores_mig (PROCESO, ERROR, DESC_ERROR, FECHA_ERROR) 
				values('SEIS','Guardar en AD74A90T00','Se ha producido un error al migrar la facturacion de los ayuntamientos AD74A90T00.idFactura90: '||vIdFacturacion90||',idAyunta :'||vIdAyunta31,SYSDATE);
		END;
	END LOOP;
	COMMIT;
END P_MIGRACION_SEIS;
/

