create or replace FUNCTION CUENTA_BANCARIA_IBAN(numCuenta VARCHAR2) RETURN varchar2 IS
   sIBAN varchar2(24);
   nIBANConversion number;
BEGIN
  IF numCuenta IS NULL THEN
    RETURN '';
  end if;
  if upper(substr(numCuenta,1,2)) = 'ES' then
    return upper(numCuenta);
  end if;
  if length(trim(numCuenta)) != 20 then
    return upper(numCuenta);
end if;

    nIBANConversion := TO_NUMBER(concat(numCuenta, '142800'));
    sIBAN := replace(concat('ES',TO_CHAR(98-MOD(nIBANConversion,97),'00')), ' ', '');
    sIBAN := concat(sIBAN, numCuenta);
    RETURN sIBAN;
exception 
    when others then
        return upper(numCuenta);
END;
/
create or replace PROCEDURE P_MIGRACION_02_SOL AS 

-- 25/01/2024: cambio del tipo de identificador del titular de la cuenta (si coincide con el dni del titular poner el mismo, sino 1)
-- 29/01/2024: unificar campos de la tabla de claves.

-- 05/02/2024: quitamos update porque ya se esta rellenando el campo en la insert:   --UPDATE AD74A.AD74A01T00 SET EXENCION_01 =R.EXENCION_01 WHERE ID_SOLICITANTE_01=W_ID_SOLICITANTE;
  
-- 27/02/2024: se cambian tablas por tablas _MIG para lanzar una prueba

-- 01/03/2024. Para migrar los solicittantes tienen que estar migradas las direcciones y las claves 

-- QUEDA PENDIENTE LA CORRESPONDENCIA DE LOS DISPOSITIVOS PARA PODER CARGAR CORRECTAMENTE LA TABLA 23.
-- EL EL CASO DEL TERMINAL_009 QUE SE CARGABA EN LA TABLA 23, SE QUITA Y SE INCLUYE EL TIPO DE TERMINAL
-- QUEDA DETERMINAR SI EL CAMPO TERMINAL_009 SE DEBE GUARDAR EN EL SOLICITANTE

  /* ********************************
	cursor para solicitantes
  *********************************/
  
  CURSOR CSEL
  IS
    SELECT TE.APELLIDO1_001 AS APELLIDO1_01 ,       ---- VARCHAR2(100 BYTE) Yes Apellido 1
      TE.APELLIDO2_001      AS APELLIDO2_01 ,       ---- VARCHAR2(100 BYTE) Yes Apellido 2
      NVL(TE.CONCESEXENCION_001,0) AS EXENCION_01 ,        ---- NUMBER(1,0) Yes Indica si en el beneficiario est� o no exento de pago. 0: no exento 1: exento
      TE.FECNACIMIENTO_001  AS F_NACIMIENTO_01 ,    ---- DATE Yes Fecha de nacimiento del solicitante
      TE.IDENTIFICADOR_001  AS IDENTIFICADOR_01 ,   ---- VARCHAR2(20 BYTE) No Documento de identificación
      DECODE( TE.IDIOMASERV_001,'es',0,'eu',1,null,null,2)     AS IDIOMA_SERVICIO_01 , ---- NUMBER(1,0) Yes Idioma de prestación del servicio 0:castellano 1:euskera 2:otros
      TE.IDPERFIL_001       AS ID_PERFIL_01 ,       ---- NUMBER Yes FK a la tabla 07 de PERFIL
      TE.IDSOLICITANTE_001  AS ID_SOLICITANTE_01 ,  ---- NUMBER No Identificador interno del solicitante
      TE.NOMBRE_001         AS NOMBRE_01 ,          ---- VARCHAR2(100 BYTE) Yes Nombre
      TE.NUMSS_001          AS NUMSS_01 ,           ---- VARCHAR2(20 BYTE) Yes Número de la SS del solicitante
      TE.NUMTIS_001         AS NUMTIS_01 ,          ---- VARCHAR2(8 BYTE) Yes Numero TIS del solicitante
      /*CASE
        WHEN TE.IDIOMA_001 LIKE '%ot;%'
        THEN SUBSTR(TE.IDIOMA_001,INSTR(TE.IDIOMA_001,'ot;')+3,20)
        ELSE NULL
      END                               AS OTRO_IDIOMA_01,           --- -- tiene el formato es;eu;ot;ingles    Si tiene ot:xxx se a�adir� xxx. Si no no se a�adira ---?????????????????????????????????????????????????????????????????????????
      */
	  DECODE(TE.SEXO_001,'V','H',TE.SEXO_001)      AS SEXO_01 ,               ---- VARCHAR2(1 BYTE) Yes Sexo
      NVL(TE.TIPOIDENTIFICADOR_001,'1') AS TIPO_IDENTIFICADOR_01 , ---- VARCHAR2(1 BYTE) No Tipo identificador: 1-->DNI/NAN; 2-->CIF/IFK; 3-->NIE/AIZ; 4-->Pasaporte/Pasaportea; 5-->Otros/Beste Batzuk
      TE.TELEFSERV_001                  AS TLFNO_SERVICIO_01 ,     ---- VARCHAR2(20 BYTE) Yes Telefono de servicio
      --TE.IDCONTACTOHABIT_035,
	  (SELECT VALOR_AD74A01 FROM CLAVES_AD7406 WHERE VALOR_X87B = DA.IDDOMICILIO_034 and VALOR_AD74A01 is not null and rownum = 1) AS ID_DIRECCION_01,
      --TE.IDCONTACTONOTIFI_035,
      TE.FECHAMODIF_001,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),4),0,0,1) AS DIS_FISICA_07,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),3),0,0,1) AS DIS_INTELECTUAL_07,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),5),0,0,1) AS DIS_SENSORIAL_07,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),7),0,0,1) AS ENF_MENTAL_07, 
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),0),0,0,1) AS MAYOR_65_DEP_07,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),1),0,0,1) AS MAYOR_65_RIESGO_DEP_07,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),2),0,0,1) AS MAYOR_75_SOLA_07,
      DECODE(INSTR(NVL(TE.IDPERFIL_001,'X'),6),0,0,1) AS RIESGO_AISLAMIENTO_07,
      PISOTUTELADO_001 AS PISO_TUTELADO_07,
      TE.idpiso_083 AS IDPISO_083,
	  (SELECT ID_PISO_32 FROM AD74A32T00 WHERE ID_DIRECCION_32 = (SELECT VALOR_AD74A32 FROM CLAVES_AD7406 WHERE VALOR_X87B = X83.IDDOMICILIO_034 and VALOR_AD74A32 is not null and rownum = 1)) AS ID_PISO_32,
      DEPENFECRESOL_001,
      DEPENBAREMO_001,
      DEPENDESC_001,	

	-- Transformar el texto de la descripción a codificación numérica
	  CASE
        --3: Grado III.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO III') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 0 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 0 THEN 3
		--8: Grado III Nivel 1.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO III') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 1 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 0 THEN 8
		--9: Grado III Nivel 2.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO III') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 0 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 1 THEN 9
        --2: Grado II.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO II') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 0 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 0 THEN 2
		--6: Grado II Nivel 1.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO II') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 1 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 0 THEN 6
		--7: Grado II Nivel 2.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO II') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 0 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 1 THEN 7
        --1: Grado I.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO I') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 0 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 0 THEN 1
		--4: Grado I Nivel 1.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO I') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 1 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 0 THEN 4
		--5: Grado I Nivel 2.
		WHEN REGEXP_COUNT(UPPER(DEPENDESC_001), 'GRADO I') = 1 AND DECODE(INSTR(DEPENDESC_001,' 1'),0,0,1) = 0 AND DECODE(INSTR(DEPENDESC_001,' 2'),0,0,1) = 1 THEN 5
		--NULL: sin id
		ELSE NULL
	END AS ID_GRADO_DEPENDENCIA_04,
	  
      DISCDESC_001,
	  DECODE(NVL(DISCVALOR_001, 0), 1, 1) DISCAPACIDAD_FISICA_71,
	  DECODE(NVL(DISCVALOR_001, 0), 2, 1) DISCAPACIDAD_INTELECTO_71,
	  DECODE(NVL(DISCVALOR_001, 0), 4, 1) DISCAPACIDAD_SENSORIAL_71,	  
	  NUMEROCUENTA_001,
	  decode(instr(identificador_001,dnicuenta_001),1,nvl(tipoidentificadortitular_001,nvl(tipoidentificador_001,1)),decode(nvl(dnicuenta_001,'X'),'X',null,nvl(tipoidentificadortitular_001,1))) TIPOIDENTIFICADORTITULAR_001,
      NVL(DNICUENTA_001,'SIN_DNI') as DNICUENTA_001,
      --TITULARCUENTA_001,
	  NOMTITULAR_001, 
	  APE1TITULAR_001, 
	  APE2TITULAR_001, -- 16/04/2024: se cambia el campo del titular de la cuenta por los campos desglosados, en desarrollo no estan todos los datos actualizados, pero en produccion si.
      FECHAMODIFCUENTA_001,
      NUMCUENTAANTIGUA_001,
	  BE.FECHAALTA_009 AS FECHAALTA_009,
	  TO_NUMBER (CASE WHEN BE.FECHAINISERVICIO_009 IS NOT NULL THEN 1 ELSE  0 END, '9999') as BENEFICIARIO_009,
      BE.FECHABAJA_009 AS FECHABAJA_009,	  
	  -- Motivo de la baja
	  DECODE(BE.IDTIPOMOTSOL_009,1,2,2,3,3,4,4,5,5,8,6,6,7,7,8,17,NULL) AS ID_MOTIVO_BAJA_01,
	  BE.FECHAINISERVICIO_009 FECHAINISERVICIO_009,
	  CASE WHEN TE.FECHAMODIF_001< BE.FECHAMODIF_009 THEN TE.FECHAMODIF_001  ELSE BE.FECHAMODIF_009  END AS FECHAMODIF_009,
      BE.NOREINTENTAR_009 AS NOREINTENTAR_009,
	  BE.MANDATO_009 AS MANDATO_009,
      BE.NUMABONADO_009 AS NUMABONADO_009,
      BE.OBSERVACIONES_009 AS OBSERVACIONES_009,
	  SUBSTR(DA.EMAIL_035 ,1,100) AS EMAIL_035,
      DA.TELEF_035 AS TELEF_035,
      DA.IDCONTACTO_035 AS IDCONTACTO_035,
	  valor_ad74a id_solicitante_ad74,
	  decode(substr(TE.IDIOMA_001,1,2),'es',0, 'ca', 0,'eu',1,null,null,2) as idioma_solicitante_01,
	  decode(instr(TE.IDIOMA_001,';'),0,null,substr(TE.IDIOMA_001,instr(TE.IDIOMA_001,';')+1)) AS OTRO_IDIOMA_01
    FROM X87B.X8701T00@X87B_DBL0 TE, X87B.X8709T00@X87B_DBL0 BE, X87B.X8735T00@X87B_DBL0 DA, claves_ad7401, X87B.X8783T00@X87B_DBL0 x83
	WHERE TE.IDSOLICITANTE_001 = BE.IDSOLICITANTE_001(+)
	  AND TE.IDCONTACTOHABIT_035 = DA.IDCONTACTO_035(+)
	  and TE.idpiso_083 = x83.idpiso_083(+)
	  and TE.IDSOLICITANTE_001=valor_x87b
	  and not exists (select id_solicitante_01 from ad74a01t00 where id_solicitante_01=valor_ad74a);
	
	  
	/* *************************************
	cursor para dispositivos_solicitantes
	AD74A23T00
	******************/
	--20/05/2024 dispositivos asociados al beneficiario: fecha de instalación la fecha de instalación que está  asociada al beneficiario.
	
    CURSOR DIS (W_SOLICITANTE VARCHAR2) IS
       SELECT DP.IDTIPODISPOSIT_066,
        --DECODE(DP.DESCRIPCION_066,'Detector Fuego/Humo',1 ,'Detector Gas',2 ,'Detector CO',3 ,'Detector Movilidad',4 ,'Detector iVi',5,'Terminal TLA',NULL,8 )AS DISPOSITIVO,
        --DECODE(DP.DESCRIPCION_066,'Terminal TLA',1,null )AS TERMINAL,
		DECODE(DP.IDTIPODISPOSIT_066, 7,1,2,12,NULL) AS DISPOSITIVO,
        DECODE(DP.IDTIPODISPOSIT_066,1,1,NULL) AS TERMINAL,
        DP.DESCRIPCION_066,
        BE.IDSOLICITANTE_001,
		BE.FECHAINISERVICIO_009
      FROM X87B.X8766T00@X87B_DBL0 DP,
        X87B.X8769T00@X87B_DBL0 DB,
        X87B.X8709T00@X87B_DBL0 BE
      WHERE BE.IDBENEFICIARIO_009=DB.IDBENEFICIARIO_009
      AND DB.IDTIPODISPOSIT_066  =DP.IDTIPODISPOSIT_066
      AND BE.IDSOLICITANTE_001   =W_SOLICITANTE;  
	
	/* 20/05/2024 todos los dispositivos de un beneficiario no TIENE correspondencia en la tabla de intervenciones, con lo que se van a migrar con la fecha de instalacion del beneficiario
	SELECT DP.IDTIPODISPOSIT_066,
        DECODE(DP.IDTIPODISPOSIT_066, 7,1,2,12,NULL) AS DISPOSITIVO,
        DECODE(DP.IDTIPODISPOSIT_066,1,1,NULL) AS TERMINAL,
        DP.DESCRIPCION_066,
        BE.IDSOLICITANTE_001,
        X62.FECHAINTERVENCION_062
      FROM X87B.X8766T00@X87B_DBL0 DP,
        X87B.X8769T00@X87B_DBL0 DB,
        X87B.X8709T00@X87B_DBL0 BE,
        X87B.X8762T00@X87B_DBL0 X62,
         X87B.X8767T00@X87B_DBL0 X67
      WHERE BE.IDBENEFICIARIO_009=DB.IDBENEFICIARIO_009
      AND DB.IDTIPODISPOSIT_066  =DP.IDTIPODISPOSIT_066
      AND BE.IDBENEFICIARIO_009=X62.IDBENEFICIARIO_009
      AND X62.IDTIPODISPOSIT_066 = DP.IDTIPODISPOSIT_066
      AND X62.IDTIPOINTERVEN_067 = X67.IDTIPOINTERVEN_067
      AND X67.TIPOOPERACION_067 = 'I'
      --AND BE.IDSOLICITANTE_001   ='510C596178A41B91684EA40AA4C58773'; 
	  */
	  -- AND X67.TIPOOPERACION_067  IN ('I','B') para la tabla de movimientos
	  -- 21/05/2024: para la tabla 94 (movimientos)
	  -- A:Avería, B:Baja, M:Mantenimiento, I:Instalación
	  --Indica el tipo de movimiento. 1: Alta; 2: Baja; 3: Sustitucion; 4: Segmentacion; 5: Renovacion
	  cursor cMov (W_SOLICITANTE VARCHAR2) is
	  SELECT x62.IDTIPODISPOSIT_066,
        DECODE(x62.IDTIPODISPOSIT_066, 7,1,2,12,NULL) AS DISPOSITIVO,
        DECODE(x62.IDTIPODISPOSIT_066,1,1,NULL) AS TERMINAL,
        BE.IDSOLICITANTE_001,
        X62.FECHAINTERVENCION_062,
        decode(X67.TIPOOPERACION_067,'B',2,'I',1) AS TIPO_MOVIMIENTO
      FROM X87B.X8709T00@X87B_DBL0 BE,
        X87B.X8762T00@X87B_DBL0 X62,
         X87B.X8767T00@X87B_DBL0 X67
      WHERE BE.IDBENEFICIARIO_009=X62.IDBENEFICIARIO_009
      AND X62.IDTIPOINTERVEN_067 = X67.IDTIPOINTERVEN_067
      AND X67.TIPOOPERACION_067  IN ('I','B')
	  AND BE.IDSOLICITANTE_001   =W_SOLICITANTE
	  -- Terminal o dispositivo ha de no ser null. Si no migramos el movimiento
	  AND (
		(DECODE(x62.IDTIPODISPOSIT_066, 7,1,2,12,NULL) IS NOT NULL AND DECODE(x62.IDTIPODISPOSIT_066,1,1,NULL) IS NULL) 
		OR 
		(DECODE(x62.IDTIPODISPOSIT_066, 7,1,2,12,NULL) IS NULL AND DECODE(x62.IDTIPODISPOSIT_066,1,1,NULL) IS NOT NULL)
	 );
      --AND BE.IDSOLICITANTE_001  ='510C596178A41B91684EA40AA4C58773'; 
	  
	  
	-- caloulo del id de solicitante.  PK de tabla clave del proceso. 
	--W_ID_SOLICITANTE           NUMBER:=0;  -- calculo AD74A01T00_SEQ.NEXTVAL
	
	-- calculo del id del perfil para luego insertar en solicitantes
	W_ID_PERFIL                NUMBER:=0; -- calculo AD74A07T00_SEQ.NEXTVAL
	  
	-- Calculo de los ids de cuentas para insertar en la tabla de solicitantes.
	W_ID_CUENTA                NUMBER:=null; --calculo AD74A05T00_SEQ.NEXTVAL
	W_ID_CUENTA_NOT            NUMBER:=null; --calculo AD74A05T00_SEQ.NEXTVAL
	
	-- caloulo del id de dispositivo-solicitante. 
	W_ID_DISP_SOL_23 NUMBER; -- calculo AD74A23T00_SEQ.NEXTVAL
	  
	-- caloulo del id de movimiento-dispositivo-solicitante.
	W_ID_MOV_94  NUMBER; -- calculo AD74A94T00_SEQ.NEXTVAL
	  
	-- caloulo del id de dependencia 
	W_ID_DEPENDENCIA_04 NUMBER;-- calculo AD74A04T00_SEQ.NEXTVAL
	
	-- caloulo del id de discapacidad 
	W_ID_DISCAPACIDAD_71 NUMBER;-- calculo AD74A71T00_SEQ.NEXTVAL
	
	-- calculo del id de la valoracion
	W_ID_VALORACION NUMBER; -- calculo AD74A08T00_SEQ.NEXTVAL
	
	-- calculo del id del riesgo
	W_ID_RIESGO NUMBER; -- calculo AD74A21T00_SEQ.NEXTVAL
	
	-- calculo del id del soporte
	W_ID_SOPORTE NUMBER; -- calculo AD74A22T00_SEQ.NEXTVAL
	
	-- calculo del id del historico de pisos tutelados:
	W_ID_PISOS_SOL  NUMBER; -- calculo AD74A32T01_SEQ.NEXTVAL
	
	-- Exception que deja 
    ID_SOL_ERROR EXCEPTION;
	
	-- Valor para nivel de soporte a moderado
	C_MODERADO AD74A58T00.ID_NIVEL_SOPORTE_58%TYPE; 
  
	vSql varchar2(4000);
	
	cursor c_precios (vSolicitante varchar2) is
	SELECT idpreciopublico_048, ROUND(preciopublico_048, 4) preciopublico_048, fechainicio_048, fechafin_048, idsolicitante_001
	FROM X87B.X8748T00@X87B_DBL0 
	where idsolicitante_001 = vSolicitante
	AND precioPublico_048<>4
	order by fechainicio_048 ASC;
	
	vPrecioParticular NUMBER; -- calculo id AD74A91T00_SEQ.NEXTVAL
	BEGIN
		select ID_NIVEL_SOPORTE_58 INTO C_MODERADO from ad74a58t00 where upper(DESC_ES_58) like '%MODERADO%';
		
		FOR R IN CSEL LOOP --loop para solicitantes
		W_ID_CUENTA_NOT := null;
		W_ID_CUENTA := null;
		BEGIN
			-- Datos de los perfiles del solicitante recuperados en el cursor
			/* AD74A07T00 PERFILES  *********************/
			-- El registro generado en la tabla: W_ID_PERFIL se insertara en la nueva tabla de solicitantes
			SELECT AD74A07T00_SEQ.NEXTVAL INTO W_ID_PERFIL FROM DUAL;
			BEGIN
				INSERT INTO AD74A.AD74A07T00(	DIS_FISICA_07, DIS_INTELECTUAL_07, DIS_SENSORIAL_07, ENF_MENTAL_07, F_ALTA_07, ID_PERFIL_07, 
												MAYOR_65_DEP_07, MAYOR_65_RIESGO_DEP_07, MAYOR_75_SOLA_07, PISO_TUTELADO_07, RIESGO_AISLAMIENTO_07,USU_ALTA_07)
				VALUES ( R.DIS_FISICA_07, R.DIS_INTELECTUAL_07, R.DIS_SENSORIAL_07, R.ENF_MENTAL_07, SYSDATE, W_ID_PERFIL, 
						 R.MAYOR_65_DEP_07, R.MAYOR_65_RIESGO_DEP_07, R.MAYOR_75_SOLA_07, R.PISO_TUTELADO_07, R.RIESGO_AISLAMIENTO_07, 'MIGRADO' );
			
				-- COMMIT; 05/02/2024 quitado para que no inserte datos a medias.
			EXCEPTION
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A07T00', 'ERROR '||vSql||', AD74A07T00  '||W_ID_PERFIL, null);
					DBMS_OUTPUT.PUT_LINE('ERROR  AD74A07T00  perfil: '||W_ID_PERFIL||' '||SQLERRM);
			END;			
    
			/* *******************************************************
			---Bloque para migracion de la AD74A05T00 CUENTAS ********************************************************/
    
			-- Cambio de la programacion de las cuentas, para que guarde la cuenta nueva y vieja en orden correcto. 
			-- Si tenemos cuenta antigua tenemos que insertarla primero para que queden en orden correcto:
			-- 08/02/2024. Se dejan los valores del titular de la cuenta : NOMBRE_TIT_CUENTA_05, APELLIDO1_TIT_CUENTA_05, APELLIDO2_TIT_CUENTA_05 vacios hasta que los separen en X87
			-- 16/04/2024. Se cambian los valores del titular por los campos desglosados.
			if (R.FECHAMODIFCUENTA_001 IS NOT NULL AND R.NUMCUENTAANTIGUA_001 IS NOT NULL) then
				
				begin
			
					SELECT AD74A05T00_SEQ.NEXTVAL INTO W_ID_CUENTA_NOT FROM DUAL;
			
					INSERT INTO AD74A.AD74A05T00 ( 	ID_CUENTA_05, NUM_CUENTA_05, COD_TIPO_IDEN_TITULAR_05, IDEN_TITULAR_05, 
													ID_SOLICITANTE_05, USU_HISTORICO_05, F_HISTORICO_05, F_ALTA_05, USU_ALTA_05, MOTIVO_05,
													NOMBRE_TIT_CUENTA_05, APELLIDO1_TIT_CUENTA_05, APELLIDO2_TIT_CUENTA_05)
					VALUES ( W_ID_CUENTA_NOT,  cuenta_bancaria_iban(R.NUMCUENTAANTIGUA_001), R.TIPOIDENTIFICADORTITULAR_001, NVL(R.DNICUENTA_001,'SIN_DNI'),
							 R.id_solicitante_ad74, NULL, R.FECHAMODIFCUENTA_001, SYSDATE, 'MIGRADO', NULL,
							 --R.TITULARCUENTA_001, null, null);
							 R.NOMTITULAR_001, R.APE1TITULAR_001,  R.APE2TITULAR_001 );
				EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A05T00', 'ERROR '||vSql||', AD74A05T00 sol: '||R.ID_SOLICITANTE_01||', cta ANTIGUA '||R.NUMCUENTAANTIGUA_001, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A05T00. CUENTA ANTIGUA, sol: '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
				END;
			end if;
			
			if (R.NUMEROCUENTA_001 IS NOT NULL) then
				begin
			
					SELECT AD74A05T00_SEQ.NEXTVAL INTO W_ID_CUENTA FROM DUAL;
			
					INSERT INTO AD74A.AD74A05T00 ( 	ID_CUENTA_05, NUM_CUENTA_05, COD_TIPO_IDEN_TITULAR_05, IDEN_TITULAR_05, 
													ID_SOLICITANTE_05, USU_HISTORICO_05, F_HISTORICO_05, F_ALTA_05, USU_ALTA_05, MOTIVO_05,
													NOMBRE_TIT_CUENTA_05, APELLIDO1_TIT_CUENTA_05, APELLIDO2_TIT_CUENTA_05)
					VALUES ( W_ID_CUENTA,  cuenta_bancaria_iban(R.NUMEROCUENTA_001), R.TIPOIDENTIFICADORTITULAR_001, NVL(R.DNICUENTA_001,'SIN_DNI'),
							 R.id_solicitante_ad74, NULL, NULL, SYSDATE, 'MIGRADO', NULL,
							 --R.TITULARCUENTA_001, null, null);
							 R.NOMTITULAR_001, R.APE1TITULAR_001,  R.APE2TITULAR_001 );
				EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A05T00', 'ERROR '||vSql||', AD74A05T00 sol: '||R.ID_SOLICITANTE_01||',  cta NUEVA '||R.NUMEROCUENTA_001, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A05T00. CUENTA NUEVA '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
				END;
			end if;
    
			/* insert de valoraciones AD74A08T00 *****************/
			BEGIN
				SELECT AD74A08T00_SEQ.NEXTVAL INTO W_ID_VALORACION FROM DUAL;
				
				-- tipo de valoracion: 1 (inicial)
				-- modo de valoracion: 3 (presencial)
				-- nivel de soporte: moderado (recogido del maestro tabla 58)--C_MODERADO
				-- 19/02/2024: se quita el solicitante de la tabla de valoracion, se deja unicamente en la tabla de solicitantes el valor de la valoracion. 
				INSERT INTO AD74A.AD74A08T00(ID_VALORACION_08, F_VALORACION_08, TIPO_VALORACION_08, MODO_VALORACION_08, CONTRATO_ACTUACION_08, ID_NIVEL_SOPORTE_08,
											 ALTO_RIESGO_08, NIVEL_MALTRATO_08, NIVEL_SUICIDIO_08, PERIODICIDAD_PROPUESTA_08, PERIODICIDAD_ACORDADA_08,
											 PROPUESTA_ACEPTADA_08, MOTIVO_RETRASO_08, ID_SOLICITANTE_08, USU_HISTORICO_08, F_HISTORICO_08,
											 F_ALTA_08, USU_ALTA_08)
				VALUES(	W_ID_VALORACION, R.FECHAALTA_009, 1, 3, null, C_MODERADO,
						0, null, null, null, null,
						null, null, null, null, null,
						sysdate, 'MIGRADO');
				EXCEPTION
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A08T00', 'ERROR '||vSql||', AD74A08T00 '||R.id_solicitante_ad74||' idval: '||W_ID_VALORACION, null);
					DBMS_OUTPUT.PUT_LINE('CARGA AD74A08T00.  '||W_ID_VALORACION||' solicitante: '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
			END;
			
			/* INSERT Solicitantes AD74A01T00 */
			BEGIN
				INSERT INTO AD74A.AD74A01T00 ( APELLIDO1_01, APELLIDO2_01, BENEFICIARIO_01, EMAIL_01, EXENCION_01,
											   F_ALTA_TELEASISTENCIA_01, F_BAJA_01, F_BENEFICIARIO_01, F_INICIO_01,	F_MODIF_01,
											   F_NACIMIENTO_01, ID_CUENTA_01, IDENTIFICADOR_01, ID_INF_SOCIAL_01, IDIOMA_SERVICIO_01,
											   ID_PERFIL_01, ID_SOLICITANTE_01, ID_VALORACION_01,
											   NOMBRE_01, NO_REINTENTAR_01,	MANDATO_01, NUM_ABONADO_01,	NUMSS_01, NUMTIS_01,
											   OBSERVACIONES_01, OTRO_IDIOMA_01,	SEXO_01, TIPO_IDENTIFICADOR_01,	TLFNO_MOVIL_01,
											   TLFNO_SERVICIO_01, USU_ALTA_01, MOTIV_INST_FUERA_PLAZO_01, INSTALADO_01,	ID_MOTIVO_BAJA_01, F_BAJA_PS_01, ID_DIRECCION_01, IDIOMA_SOLICITANTE_01)
				VALUES  ( R.APELLIDO1_01, R.APELLIDO2_01, R.BENEFICIARIO_009, R.EMAIL_035, R.EXENCION_01,
						  R.FECHAALTA_009, R.FECHABAJA_009, R.FECHAINISERVICIO_009, R.FECHAINISERVICIO_009, R.FECHAMODIF_009,
						  R.F_NACIMIENTO_01, W_ID_CUENTA, R.IDENTIFICADOR_01, NULL, R.IDIOMA_SERVICIO_01,
						  W_ID_PERFIL, R.id_solicitante_ad74,  W_ID_VALORACION,
						  R.NOMBRE_01, R.NOREINTENTAR_009, SUBSTR(R.MANDATO_009,1,35), R.NUMABONADO_009, R.NUMSS_01, R.NUMTIS_01,
						  R.OBSERVACIONES_009, R.OTRO_IDIOMA_01, R.SEXO_01, R.TIPO_IDENTIFICADOR_01, R.TELEF_035,
						  R.TLFNO_SERVICIO_01, 'MIGRADO', NULL, DECODE(R.FECHAINISERVICIO_009,NULL,NULL,1),R.ID_MOTIVO_BAJA_01,
						  R.FECHABAJA_009, R.ID_DIRECCION_01,R.idioma_solicitante_01);
     
			EXCEPTION
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A01T00', 'ERROR '||vSql||', AD74A01T00 '||R.ID_SOLICITANTE_01||','||R.id_solicitante_ad74||',idcuenta:'||W_ID_CUENTA||',perfil:'||W_ID_PERFIL||',valoracion:'||W_ID_VALORACION, null);
					RAISE ID_SOL_ERROR;
					
					DBMS_OUTPUT.PUT_LINE('Error al insertar en Solicitantes'||R.id_solicitante_ad74||' '||SQLERRM);
			END;
			
			/* INSERT Instalaciones AD74A52T00 */			
			BEGIN
			
				IF R.FECHAINISERVICIO_009 IS NOT NULL THEN
					INSERT INTO AD74A.AD74A52T00 ( ID_INSTALACION_52, F_INSTALACION_52,	MOTIV_INST_FUERA_PLAZO_52, ID_SOLICITANTE_52, USU_HISTORICO_52,	F_HISTORICO_52,	F_ALTA_52, USU_ALTA_52)
					VALUES  ( SEQ_INSTALACIONES.NEXTVAL, R.FECHAINISERVICIO_009, NULL, R.id_solicitante_ad74, NULL, NULL, SYSDATE, 'MIGRADO');
				END IF;
     
			EXCEPTION
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A52T00', 'ERROR '||vSql||', AD74A52T00 '||R.ID_SOLICITANTE_01||','||R.id_solicitante_ad74, null);
					RAISE ID_SOL_ERROR;
					
					DBMS_OUTPUT.PUT_LINE('Error al insertar en Instalaciones'||R.id_solicitante_ad74||' '||SQLERRM);
			END;
			

			/* ****************************  insertamos en DISPOSITIVOS  AD74A23T00 **************************/
			FOR CUR IN DIS (R.ID_SOLICITANTE_01) LOOP
				SELECT AD74A23T00_SEQ.NEXTVAL INTO W_ID_DISP_SOL_23 FROM DUAL;
		
				BEGIN
					INSERT INTO AD74A.AD74A23T00 (  ID_DISP_SOL_23, ID_SOLICITANTE_23,  ID_TERMINAL_23, --- NOTA REVISAR ESTE CAMPO CUANDO HAYA DATOS CORRECTOS
													ID_DISPOSITIVO_23, F_INSTALACION_23, USU_ALTA_23,
													F_ALTA_23, USU_BAJA_23, F_BAJA_23, ACEPTADO_23)
					VALUES  ( W_ID_DISP_SOL_23, R.id_solicitante_ad74, CUR.TERMINAL,
							  CUR.DISPOSITIVO, CUR.FECHAINISERVICIO_009, 'MIGRADO',
							  SYSDATE, NULL, NULL, 1 );
				EXCEPTION
					WHEN OTHERS THEN
					
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A23T00', 'ERROR '||vSql||', AD74A23T00 '||R.id_solicitante_ad74||' iddisp: '||W_ID_DISP_SOL_23, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A23T00.  '||W_ID_DISP_SOL_23||' '||R.id_solicitante_ad74||' '||CUR.DISPOSITIVO||' '||SQLCODE||SQLERRM);
				END;
			END LOOP; ---FIN LOOP DISPOSITIVOS
		

			/* ************************* insertar los movimientos de los dispositivos del solicitante en la tabla 94 ****************/
			for rMov in cMov(R.ID_SOLICITANTE_01) LOOP
				SELECT AD74A94T00_SEQ.NEXTVAL INTO W_ID_MOV_94 FROM DUAL;
				
			--Indica el tipo de movimiento. 1: Alta; 2: Baja; 3: Sustitucion; 4: Segmentacion; 5: Renovacion
				BEGIN
					INSERT INTO AD74A.AD74A94T00 (  ID_MOVIMIENTO_DISP_94, ID_SOLICITANTE_94,  ID_TERMINAL_94, 
													ID_DISPOSITIVO_94, TIPO_MOVIMIENTO_94, F_MOVIMIENTO_94,
													F_ALTA_94, USU_ALTA_94)
					VALUES  ( W_ID_MOV_94, R.id_solicitante_ad74, rMov.TERMINAL,
							  rMov.DISPOSITIVO, rMov.TIPO_MOVIMIENTO, rMov.FECHAINTERVENCION_062,
							  SYSDATE,'MIGRADO');

				EXCEPTION
					WHEN OTHERS THEN
					
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A94T00', 'ERROR '||vSql||', AD74A94T00 '||R.id_solicitante_ad74||' iddisp: '||W_ID_MOV_94, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A94T00.  '||W_ID_MOV_94||' '||R.id_solicitante_ad74||' '||rMov.DISPOSITIVO||' '||SQLCODE||SQLERRM);
				END;
			
			END LOOP;
		
			/* **************************************  Bloque para DEPENDECIAS -AD74A04T00   ****************************************/
			IF R.DEPENFECRESOL_001 IS NOT NULL THEN   
				SELECT AD74A04T00_SEQ.NEXTVAL INTO W_ID_DEPENDENCIA_04 FROM DUAL;
				
				BEGIN
					INSERT INTO AD74A.AD74A04T00( 	ID_DEPENDENCIA_04, ID_GRADO_DEPENDENCIA_04, ID_EXPEDIENTE_04, ID_SOLICITANTE_04,
													F_RESOLUCION_04, BAREMO_04, USU_HISTORICO_04, F_HISTORICO_04,
													USU_ALTA_04, F_ALTA_04, DESC_OTRA_DEPENDENCIA_04 )
					VALUES ( W_ID_DEPENDENCIA_04, R.ID_GRADO_DEPENDENCIA_04, NULL, R.id_solicitante_ad74,
							 R.DEPENFECRESOL_001, R.DEPENBAREMO_001, NULL, NULL,
							 'MIGRADO', SYSDATE, R.DEPENDESC_001 );
				EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A04T00', 'ERROR '||vSql||', AD74A04T00 '||R.id_solicitante_ad74||' idDependencia: '||W_ID_DEPENDENCIA_04, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A04T00. DEPENDENCIAS '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
				END;
			END IF; -- FIN LOOP DEPENDENCIAS			
			
			/* **************************************  Bloque para DISCAPACIDADES -AD74A71T00   ****************************************/
			IF R.DISCDESC_001 IS NOT NULL THEN   
				SELECT AD74A71T00_SEQ.NEXTVAL INTO W_ID_DISCAPACIDAD_71 FROM DUAL;
				
				BEGIN
					INSERT INTO AD74A.AD74A71T00 (ID_DISCAPACIDAD_71, DESC_DISCAPACIDAD_71, ID_EXPEDIENTE_71, ID_SOLICITANTE_71,
													DISCAPACIDAD_FISICA_71, DISCAPACIDAD_INTELECTO_71, DISCAPACIDAD_SENSORIAL_71,
													F_RESOLUCION_71, USU_HISTORICO_71, F_HISTORICO_71, USU_ALTA_71, F_ALTA_71)													
					VALUES( W_ID_DISCAPACIDAD_71, R.DISCDESC_001, NULL, R.id_solicitante_ad74,
							R.DISCAPACIDAD_FISICA_71, R.DISCAPACIDAD_INTELECTO_71, R.DISCAPACIDAD_SENSORIAL_71,
							NULL, NULL, NULL, 'MIGRADO', SYSDATE);													
				EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A71T00', 'ERROR '||vSql||', AD74A71T00 '||R.id_solicitante_ad74||' idDiscapacidad: '||W_ID_DISCAPACIDAD_71, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A71T00. DISCAPACIDADES '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
				END;
			END IF; -- FIN LOOP DISCAPACIDADES
			
			
			-- PRECIOS PARTICULARES DE LOS BENEFICIARIOS 
			-- si el beneficiario no esta exento : R.EXENCION_01: (X8701T00.ConcesExencion_001=0/null), buscar los precios del solicitante en X8748T00 
			IF R.EXENCION_01 = 0 THEN
				FOR R_PRECIOS IN C_PRECIOS (R.ID_SOLICITANTE_01) LOOP
					BEGIN
						SELECT AD74A91T00_SEQ.NEXTVAL INTO vPrecioParticular FROM DUAL;
						
						INSERT INTO AD74A91T00 (ID_PRECIO_BENEFICIARIO_91,ID_SOLICITANTE_91,IND_EXENTO_91,PRECIO_PRIVADO_91,
											FECHA_INICIO_91,FECHA_FIN_91,USU_ALTA_91,F_ALTA_91)
						VALUES(vPrecioParticular, R.id_solicitante_ad74,R.EXENCION_01,R_PRECIOS.PRECIOPUBLICO_048,
								R_PRECIOS.FECHAINICIO_048, R_PRECIOS.FECHAFIN_048, 'MIGRADO', SYSDATE);
					EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A91T00', 'ERROR '||vSql||', AD74A91T00 '||R.id_solicitante_ad74||' idprecio: '||r_precios.idpreciopublico_048, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A91T00. precios particulares '||R.id_solicitante_ad74||', precio: '||r_precios.idpreciopublico_048||SQLCODE||SQLERRM);
					END;
				END LOOP;
			END IF;
			-- si el beneficiario esta exento:  (X8701T00.ConcesExencion_001=1),añadiremos un registro en AD74A91T00 con los siguientes valores:
			IF R.EXENCION_01 = 1 THEN
				BEGIN
					SELECT AD74A91T00_SEQ.NEXTVAL INTO vPrecioParticular FROM DUAL;
					
					INSERT INTO AD74A91T00 (ID_PRECIO_BENEFICIARIO_91,ID_SOLICITANTE_91,IND_EXENTO_91,PRECIO_PRIVADO_91,
											FECHA_INICIO_91,FECHA_FIN_91,USU_ALTA_91,F_ALTA_91)
					VALUES(vPrecioParticular, R.id_solicitante_ad74,R.EXENCION_01,null,
							R.FECHAALTA_009, NULL, 'MIGRADO', SYSDATE);
				EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A91T00', 'ERROR '||vSql||', AD74A91T00 BENEFICIARIO EXENTO'||R.id_solicitante_ad74, null);
						DBMS_OUTPUT.PUT_LINE('CARGA AD74A91T00. precios particulares BENEFICIARIO EXENTO '||R.id_solicitante_ad74||SQLCODE||SQLERRM);
				END;
			END IF;
			
			/* insert de riesgos AD74A21T00 *****************/
			BEGIN
				SELECT AD74A21T00_SEQ.NEXTVAL INTO W_ID_RIESGO FROM DUAL;
								
				INSERT INTO AD74A.AD74A21T00(ID_RIESGO_21, ALTO_RIESGO_21, NIVEL_MALTRATO_21, NIVEL_SUICIDIO_21,
											 ID_VALORACION_21, ID_SOLICITANTE_21, USU_HISTORICO_21, F_HISTORICO_21,
											 F_ALTA_21, USU_ALTA_21)
				VALUES(	W_ID_RIESGO, 0, null, null,
						W_ID_VALORACION, R.id_solicitante_ad74, null, null,
						sysdate, 'MIGRADO');
				EXCEPTION
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A21T00', 'ERROR '||vSql||', AD74A21T00 '||R.id_solicitante_ad74||' idval: '||W_ID_RIESGO, null);
					DBMS_OUTPUT.PUT_LINE('CARGA AD74A21T00.  '||W_ID_RIESGO||' solicitante: '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
			END;
			
			/* insert de soporte AD74A22T00 *****************/
			BEGIN
				SELECT AD74A22T00_SEQ.NEXTVAL INTO W_ID_SOPORTE FROM DUAL;
								
				INSERT INTO AD74A.AD74A22T00(ID_SOPORTE_22, ID_NIVEL_SOPORTE_22, ID_VALORACION_22, ID_SOLICITANTE_22,
											 USU_HISTORICO_22, F_HISTORICO_22, F_ALTA_22, USU_ALTA_22)
				VALUES(	W_ID_SOPORTE, C_MODERADO, W_ID_VALORACION, R.id_solicitante_ad74,
						null, null, sysdate, 'MIGRADO');
				EXCEPTION
				WHEN OTHERS THEN
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A22T00', 'ERROR '||vSql||', AD74A22T00 '||R.id_solicitante_ad74||' idval: '||W_ID_SOPORTE, null);
					DBMS_OUTPUT.PUT_LINE('CARGA AD74A22T00.  '||W_ID_SOPORTE||' solicitante: '||R.id_solicitante_ad74||' '||SQLCODE||SQLERRM);
			END;
			
			-- Datos del historico de pisos tutelados
			/* AD74A32T01*/
			if( R.ID_PISO_32 IS NOT NULL ) then
				SELECT AD74A32T01_SEQ.NEXTVAL INTO W_ID_PISOS_SOL FROM DUAL;
				BEGIN
				
					INSERT INTO AD74A.AD74A32T01(	F_ALTA_32, F_DESDE_32, F_HASTA_32, ID_PISO_SOLICITANTE_32, ID_PISO_32, ID_SOLICITANTE_32, USU_ALTA_32)
					VALUES ( SYSDATE, R.FECHAINISERVICIO_009, NULL, W_ID_PISOS_SOL, R.ID_PISO_32, R.id_solicitante_ad74, 'MIGRADO' );                    
				
				EXCEPTION
					WHEN OTHERS THEN
						vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
						PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A32T01', 'ERROR '||vSql||', AD74A32T01  '||W_ID_PISOS_SOL, null);
						DBMS_OUTPUT.PUT_LINE('ERROR  AD74A32T01  piso tutelado solicitante: '||W_ID_PISOS_SOL||' '||SQLERRM);
				END;
			end if;

			COMMIT; -- Se hace commit de cada solicitante completo
	  
			EXCEPTION
				WHEN ID_SOL_ERROR THEN
					ROLLBACK;
					vSql:= sqlcode||'-'||substr(sqlerrm,1,1000);
					PG_MIGRACION.INSERTA_TRAZA('DATOS 02','insert AD74A01T00', 'ERROR '||vSql||', AD74A01T00 '||R.ID_SOLICITANTE_01||','||R.id_solicitante_ad74, null);
					commit;

		END;
	 
     END LOOP;--- FIN loop de solicitantes


END P_MIGRACION_02_SOL;

/