alter table q0299t00 add q0299t00_ano number(4);
alter table q0299t00 add q0299t00_mes number(2);
alter table q0299t00 add q0299t00_codprov varchar2(2);
alter table q0299t00 add q0299t00_nomprov varchar2(100);
alter table q0299t00 add q0299t00_codmun varchar2(3);
alter table q0299t00 add q0299t00_nommun varchar2(100);
alter table q0299t00 add q0299t00_licencia varchar2(13);
alter table q0299t00 add q0299t00_fecent date;

create or replace
PROCEDURE q02b_validaciones (tipo in number, ano in number, mes in number, mun in number)
   IS
      mes1 number;
      mes2 number;
      mes3 number;
      trimestre number;
      munS varchar(3);
      anoS varchar(100);
      nAux number;

      d_whereS varchar(500);
      e_whereS varchar(500);
      g_whereS varchar(500);
      b_whereS varchar(500);
      ce_whereS varchar(500);
      sSelect varchar(500);

      codProv varchar(2);
      nomProv varchar2(100);
      codMun varchar(3);
      nomMun varchar(100);
      nAno number;
      nMes number;

      TYPE CUR_TYP IS REF CURSOR ;
      D   CUR_TYP;
      E   CUR_TYP;
      G   CUR_TYP;
      B   CUR_TYP;
      CE   CUR_TYP;

      d_query     VARCHAR2(500);
      e_query     VARCHAR2(500);
      g_query     VARCHAR2(500);
      b_query     VARCHAR2(500);
      ce_query     VARCHAR2(500);




      dReg q022dt00%rowtype;
      eReg q022et00%rowtype;
      gReg q022gt00%rowtype;
      bReg q022bt00%rowtype;
      cReg q022ct00%rowtype;

      ncus number;
      nprov number;
      nmun number;
      n number;
      countD number;


   BEGIN


      if mun is not null then
          munS := to_char(mun);
          while length(munS)<3 loop
            munS := '0' || munS;
          end loop;
        end if;
   --- se construye dinamicamente el cursor D dependiendo de los parámetros
    ---  cursor D is select * from q022dt00 where
    ---              to_char(Q022DT00_FEC_ENT, 'yyyy') = ano
    ---              and to_char(Q022DT00_FEC_ENT,'MM') in (mes1, mes2, mes3)
    ---              and Q022DT00_MUN_MUNI = mun;

     if ano is not null or mes is not null or mun is not null then
        d_whereS := ' ' ;
      end if;
      if ano is not null then
        d_whereS := d_whereS || ' and q022bt00.Q022BT00_ANO = :ano ';
      end if;
      if mes is not null then
        d_whereS := d_whereS || ' and q022bt00.Q022BT00_MES = :mes ';
      end if;
      if mun is not null then
        d_whereS := d_whereS || ' and q022bt00.FCA02T00_CODMUNICIP = :munS ';
      end if;
    d_query :=  'select * from q022dt00, q022bt00 where q022dt00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO ' || d_whereS ;

     --- se construye dinamicamente el cursor G dependiendo de los parámetros
       --- cursor G is select * from q022gt00 where
       ---           Q022GT00_ANO = ano
         ---         and Q022GT00_MUN_MUNI = mun
         ---         and to_char(NVL(Q022gT00_FEC_ALTA,Q022gT00_FEC_MOD),'MM') in (mes1, mes2, mes3);

     if ano is not null or mes is not null or mun is not null then
        g_whereS := ' where 1=1 ' ;
      end if;
      if ano is not null then
        g_whereS := g_whereS || ' and Q022GT00_ANO = :ano ';
      end if;
   --   if mes is not null then
   --     g_whereS := g_whereS || ' and to_char(NVL(Q022gT00_FEC_ALTA,Q022gT00_FEC_MOD),''MM'') in (:mes1, :mes2, :mes3) ';
   --   end if;
      if mun is not null then
        g_whereS := g_whereS || ' and Q022GT00_MUN_MUNI = :mun ';
      end if;
    g_query :=  'select * from q022gt00 ' || g_whereS ;

    --- se construye dinamicamente el cursor B dependiendo de los parámetros
    ---cursor B is select *  from q022bt00 where Q022BT00_ANO = ano  and Q022BT00_MES in (mes1, mes2,mes3) and FCA02T00_CODMUNICIP = mun;

     if ano is not null or mes is not null or mun is not null then
        b_whereS := ' where 1=1 ' ;
      end if;
      if ano is not null then
        b_whereS := b_whereS || ' and Q022BT00_ANO = :ano ';
      end if;
      if mes is not null then
        b_whereS := b_whereS || ' and Q022BT00_MES = :mes ';
      end if;
      if mun is not null then
        b_whereS := b_whereS || ' and FCA02T00_CODMUNICIP = :mun ';
      end if;
     b_query :=  'select * from q022bt00 ' || b_whereS ;

     --- se construye dinamicamente el cursor CE dependiendo de los parámetros
    ---cursor CE is select * from q022ct00 where Q022CT00_ANO = ano and Q22CT00_MES in (mes1, mes2, mes3) and MUN_MUNI = mun;

     if ano is not null or mes is not null or mun is not null then
        ce_whereS := ' where 1=1 ' ;
      end if;
      if ano is not null then
        ce_whereS := ce_whereS || ' and Q022CT00_ANO = :ano ';
      end if;
      if mes is not null then
        ce_whereS := ce_whereS || ' and Q22CT00_MES = :mes ';
      end if;
      if mun is not null then
        ce_whereS := ce_whereS || ' and MUN_MUNI = :mun ';
      end if;
    ce_query :=  'select * from q022ct00  ' || ce_whereS ;

   --- se construye dinamicamente el cursor E dependiendo de los parámetros
    --- select * from q022et00 where
      ---            to_char(NVL(Q022ET00_FEC_ALTA,Q022ET00_FEC_MOD),'yyyy') = ano
      ---            and to_char(NVL(Q022ET00_FEC_ALTA,Q022ET00_FEC_MOD),'MM') in (mes1, mes2, mes3)
      ---  and Q022ET00_CALLE in (select id from NORA_T17_CALLE where  municipio_id = munS;

     if ano is not null or mes is not null or mun is not null then
        e_whereS := ' ' ;
      end if;
      if ano is not null then
        e_whereS := e_whereS || ' and q022ct00.Q022CT00_ANO = :ano ';
      end if;
      if mes is not null then
        e_whereS := e_whereS || ' and q022ct00.Q22CT00_MES = :mes ';
      end if;
      if mun is not null then
        e_whereS := e_whereS || ' and q022ct00.MUN_MUNI = :mun ';
      end if;
    e_query :=  'select * from q022et00, q022ct00 where q022ct00.Q022CT00_ID_GRUPO = q022et00.Q022CT00_ID_GRUPO ' || e_whereS ;

    --- convierto el mes del parámetro en trimestre.
    if mes = 1 or mes = 2 or mes = 3 then
      mes1 := 1;
      mes2 := 2;
      mes3 := 3;
      trimestre := 1;
    elsif mes = 4 or mes = 5 or mes = 6 then
      mes1 := 4;
      mes2 := 5;
      mes3 := 6;
      trimestre := 2;
    elsif mes = 7 or mes = 8 or mes = 9 then
      mes1 := 7;
      mes2 := 8;
      mes3 := 9;
      trimestre := 3;
    elsif mes = 10 or mes = 11 or mes = 12 then
      mes1 := 10;
      mes2 := 11;
      mes3 := 12;
      trimestre := 4;
    end if;

     if tipo = 1 OR tipo is null then

              if ano is null and mes is null and mun is null then
                open B for b_query ;
              elsif ano is null and mes is null and mun is not null then
                open B for b_query using mun;
              elsif ano is null and mes is not null and mun is null then
                open B for b_query using mes;
              elsif ano is not null and mes is null and mun is null then
                open B for b_query using ano;
              elsif ano is null and mes is not null and mun is not null then
                open B for b_query using mes, mun;
              elsif ano is not null and mes is null and mun is not null then
                open B for b_query using ano, mun;
              elsif ano is not null and mes is not null and mun is null then
                open B for b_query using ano, mes;
              elsif ano is not null and mes is not null and mun is not null then
                open B for b_query using ano, mes, mun;
              end if;

                fetch B into bReg;
                  while B%found
                    LOOP

                     nAno:=null;
                     nMes:=null;
                    codProv:=null;
                    nomProv:=null;
                    codMun:=null;
                    nomMun:=null;
                    begin
                          select id,ds_o,id_muni,ds_o_muni into codProv, nomProv, codMun, nomMun  from NORA_T17_PROV_MUNI where id = bReg.FCA02T00_CODPROVINC and id_muni = bReg.FCA02T00_CODMUNICIP;
                          exception when no_data_found then
                             nAno:=null;
                             nMes:=null;
                              codProv:=null;
                              nomProv:=null;
                              codMun:=null;
                              nomMun:=null;
                          end;
                          --- validacion 1
                          n := 0;
                          select count(*) into n from NORA_T17_MUNICIPIO where provincia_id = bReg.FCA02T00_CODPROVINC AND id = bReg.FCA02T00_CODMUNICIP;
                          if n = 0 then
                              begin
                                insert into q0299t00 values('1', 'Incoherencia entre TH y municipio',bReg.Q022BT00_ID_GRUPO, 0, bReg.Q022BT00_ANO, bReg.Q022BT00_MES, bReg.FCA02T00_CODPROVINC, nomProv, bReg.FCA02T00_CODMUNICIP, nomMun, null, null  );
                                commit;
                              end;
                          end if;

                          if bReg.Q022BT00_CONCEDIDO_LICEN = 0 then
                                begin
                                  --- validacion 4
                                  n := 0;
                                   nAux := bReg.Q022BT00_ID_GRUPO;


                                  if ano is null and mes is null and mun is null then
                                    sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND 
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux;
                                  elsif ano is null and mes is null and mun is not null then
                                     sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND 
                                     Q022DT00.Q022BT00_ID_GRUPO = :nAux AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                                     EXECUTE IMMEDIATE sSelect into n USING nAux, mun;
                                  elsif ano is null and mes is not null and mun is null then
                                    sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_MES = :mes ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, mes;
                                  elsif ano is not null and mes is null and mun is null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano;
                                  elsif ano is null and mes is not null and mun is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_MES = :mes AND q022bt00.FCA02T00_CODMUNICIP = :mun ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, mes, mun;
                                  elsif mes is null and ano is not null and mun is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux  AND Q022BT00_ANO = :ano AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano, mun;
                                  elsif mun is null and ano is not null and mes is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano AND Q022BT00_MES = :mes ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano, mes;
                                  elsif mun is not null and ano is not null and mes is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano AND Q022BT00_MES = :mes AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano, mes,mun;
                                  end if;


                                  if n > 0 then
                                    insert into q0299t00 values('4', 'Contestan que ho hay cuestionarios de LOM y sí aparece número',bReg.Q022BT00_ID_GRUPO,0 , bReg.Q022BT00_ANO, bReg.Q022BT00_MES, bReg.FCA02T00_CODPROVINC, nomProv, bReg.FCA02T00_CODMUNICIP, nomMun, null, null  );
                                    commit;
                                  end if;
                                end;
                          end if;
                          if bReg.Q022BT00_CONCEDIDO_LICEN = 1 then
                                begin
                                  --- validacion 5--- validacion 10
                                  n := 0;
                                  nAux := bReg.Q022BT00_ID_GRUPO;

                                    if ano is null and mes is null and mun is null then
                                    sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux;
                                  elsif ano is null and mes is null and mun is not null then
                                     sSelect := 'select count(*) from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                     Q022DT00.Q022BT00_ID_GRUPO = :nAux AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                                     EXECUTE IMMEDIATE sSelect into n USING nAux, mun;
                                  elsif ano is null and mes is not null and mun is null then
                                    sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_MES = :mes ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, mes;
                                  elsif ano is not null and mes is null and mun is null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano;
                                  elsif ano is null and mes is not null and mun is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_MES = :mes AND q022bt00.FCA02T00_CODMUNICIP = :mun ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, mes, mun;
                                  elsif mes is null and ano is not null and mun is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux  AND Q022BT00_ANO = :ano AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano, mun;
                                  elsif mun is null and ano is not null and mes is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano AND Q022BT00_MES = :mes ';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano, mes;
                                  elsif mun is not null and ano is not null and mes is not null then
                                    sSelect := 'select count(*)  from  Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO AND
                                    Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano AND Q022BT00_MES = :mes AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                                    EXECUTE IMMEDIATE sSelect into n USING nAux, ano, mes,mun;
                                  end if;
                              --- select count(*) into n from Q022DT00 where
                                 ---   Q022DT00.Q022BT00_ID_GRUPO = bReg.Q022BT00_ID_GRUPO AND
                                 ---  TO_CHAR(Q022DT00_FEC_ENT,'yyyy') = ano AND
                                 ---   TO_CHAR(Q022DT00_FEC_ENT,'MM') in (mes1, mes2, mes3) and
                                 ---   Q022DT00_MUN_MUNI = mun;
                                  if n = 0 then
                                    insert into q0299t00 values('5', 'Contestan que hay cuestionarios de LOM y no aparece número' ,bReg.Q022BT00_ID_GRUPO, 0, bReg.Q022BT00_ANO, bReg.Q022BT00_MES, bReg.FCA02T00_CODPROVINC, nomProv, bReg.FCA02T00_CODMUNICIP, nomMun, null, null  );
                                    commit;
                                  end if;
                                  if n = 0 then
                                    insert into q0299t00 values('10', 'Hay movimiento de licencia pero no se rellena cuestionario',bReg.Q022BT00_ID_GRUPO, 0 , bReg.Q022BT00_ANO, bReg.Q022BT00_MES, bReg.FCA02T00_CODPROVINC, nomProv, bReg.FCA02T00_CODMUNICIP, nomMun, null, null  );
                                    commit;
                                  end if;
                                end;
                          end if;

                    ---Hay movimiento de licencia pero no se rellena cuestionario
                    --- Q022BT00_CONCEDIDO_LICEN = 1 AND SELECT COUNT(*) FROM Q022DT00 por grupo, fecha de entrada incluida y resto de criterios de selección que haya(municipio&) = 0 NOTA IMPORTANTE: como se que cuestionarios de la tabla q022Bt00 seleccionar? Por la fecha de entrada? algunos es nula.

              fetch B into bReg;

              end loop;
              close B;
    end if;
    --- validacion 2
    --- se suprime
    --- validacion 3
    --- se suprime
    if tipo = 2 OR tipo is null then
        if ano is null and mes is null and mun is null then
        open CE for ce_query ;
      elsif ano is null and mes is null and mun is not null then
        open CE for ce_query using mun;
      elsif ano is null and mes is not null and mun is null then
        open CE for ce_query using mes;
      elsif ano is not null and mes is null and mun is null then
        open CE for ce_query using ano;
      elsif ano is null and mes is not null and mun is not null then
        open CE for ce_query using mes, mun;
      elsif ano is not null and mes is null and mun is not null then
        open CE for ce_query using ano, mun;
      elsif ano is not null and mes is not null and mun is null then
        open CE for ce_query using ano, mes;
      elsif ano is not null and mes is not null and mun is not null then
        open CE for ce_query using ano, mes, mun;
      end if;


   --- open CE for ce_query;
      fetch CE into cReg;
          while CE%found
            LOOP
             nAno:=null;
            nMes:=null;
            codProv:=null;
            nomProv:=null;
            codMun:=null;
            nomMun:=null;
                begin
                  select id,ds_o,id_muni,ds_o_muni into codProv, nomProv, codMun, nomMun  from NORA_T17_PROV_MUNI where id = cReg.MUN_PROV and id_muni = cReg.MUN_MUNI;
                exception when no_data_found then
                             nAno:=null;
                             nMes:=null;
                              codProv:=null;
                              nomProv:=null;
                              codMun:=null;
                              nomMun:=null;
                          end;
              --- validacion 6
              n:=0;
              if cReg.Q022CT00_REALIZA_ACTUACION='0' AND ( cReg.Q022CT00_NCUS is not null AND cReg.Q022CT00_NCUS <>0) then
                insert into q0299t00 values('6', 'Contestan que ho hay cuestionarios de suelo y sí aparece número' ,cReg.Q022CT00_ID_GRUPO, 0, cReg.Q022CT00_ANO, cReg.Q22CT00_MES, cReg.MUN_PROV, nomProv, cReg.MUN_MUNI, nomMun, null, null  );
                commit;
              end if;
              ---validacion 7
              if cReg.Q022CT00_REALIZA_ACTUACION='1' AND ( cReg.Q022CT00_NCUS is null OR cReg.Q022CT00_NCUS =0 )  then
                insert into q0299t00 values('7', 'Contestan que hay cuestionarios de suelo y no aparece número',cReg.Q022CT00_ID_GRUPO, 0, cReg.Q022CT00_ANO, cReg.Q22CT00_MES, cReg.MUN_PROV, nomProv, cReg.MUN_MUNI, nomMun, null, null  );
                commit;
              end if;

            fetch CE into cReg;
            end loop;
    close CE;

   end if;

     --Obra mayor
     if tipo = 1 OR tipo is null then


    if ano is null and mes is null and mun is null then
      open D for d_query ;
    elsif ano is null and mes is null and mun is not null then
      open D for d_query using mun;
    elsif ano is null and mes is not null and mun is null then
      open D for d_query using mes;
    elsif ano is not null and mes is null and mun is null then
      open D for d_query using ano;
    elsif ano is null and mes is not null and mun is not null then
      open D for d_query using mes, mun;
    elsif ano is not null and mes is null and mun is not null then
      open D for d_query using ano, mun;
    elsif ano is not null and mes is not null and mun is null then
      open D for d_query using ano, mes;
    elsif ano is not null and mes is not null and mun is not null then
      open D for d_query using ano, mes, mun;
    end if;

  ---   open D for d_query;
      fetch D into dReg;
        while D%found
          LOOP
           nAno:=null;
            nMes:=null;
            codProv:=null;
            nomProv:=null;
            codMun:=null;
            nomMun:=null;
            begin
              select Q022BT00_ANO, Q022BT00_MES, FCA02T00_CODPROVINC, FCA02T00_CODMUNICIP into nAno, nMes, codProv, codMun from q022bt00 where Q022BT00_ID_GRUPO = dReg.Q022BT00_ID_GRUPO;
              select id,ds_o,id_muni,ds_o_muni into codProv, nomProv, codMun, nomMun  from NORA_T17_PROV_MUNI where id = codProv and id_muni = codMun;
                exception when no_data_found then
                             nAno:=null;
                             nMes:=null;
                              codProv:=null;
                              nomProv:=null;
                              codMun:=null;
                              nomMun:=null;
                          end;

          --- codigo
          --- validacion 8
          if dReg.Q022DT00_ID_CUES= 0 OR dReg.Q022DT00_ID_CUES IS null then
            insert into q0299t00 values('8', 'Número de cuestionario de LOM sin rellenar' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
         --- validacion 9
                        nAux := dReg.Q022BT00_ID_GRUPO;

                        if ano is null and mes is null and mun is null then
                          sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and 
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux ';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux;
                    --    elsif ano is null and mes is null and mun is not null then
                    --       sSelect := 'select count(*)  from Q022DT00 where Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022DT00_MUN_MUNI = :mun';
                    --       EXECUTE IMMEDIATE sSelect into countD USING nAux, mun;
                        elsif ano is null and mes is not null and mun is null then
                          sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_MES = :mes ';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux, mes;
                        elsif ano is not null and mes is null and mun is null then
                          sSelect := 'select count(*)   from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano ';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux, ano;
                        elsif ano is null and mes is not null and mun is not null then
                          sSelect := 'select count(*)   from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_MES = :mes AND q022bt00.FCA02T00_CODMUNICIP = :mun ';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux, mes, mun;
                        elsif mes is null and ano is not null and mun is not null then
                          sSelect := 'select count(*)   from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux  AND Q022BT00_ANO = :ano AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux, ano, mun;
                        elsif mun is null and ano is not null and mes is not null then
                          sSelect := 'select count(*)   from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano AND Q022BT00_MES = :mes ';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux, ano, mes;
                        elsif mun is not null and ano is not null and mes is not null then
                          sSelect := 'select count(*)  from Q022DT00, q022bt00 where Q022DT00.Q022BT00_ID_GRUPO = q022bt00.Q022BT00_ID_GRUPO and
                          Q022DT00.Q022BT00_ID_GRUPO = :nAux AND Q022BT00_ANO = :ano AND Q022BT00_MES = :mes AND q022bt00.FCA02T00_CODMUNICIP = :mun';
                          EXECUTE IMMEDIATE sSelect into countD USING nAux, ano, mes,mun;
                        end if;

         --- select count(*) into countD from q022dt00 where
         ---        to_char(Q022DT00_FEC_ENT,'yyyy') = ano
         ---       and to_char(Q022DT00_FEC_ENT,'MM') in (mes1, mes2, mes3)
         ---      and Q022DT00_MUN_MUNI = mun;
          if dReg.Q022DT00_ID_CUES > countD then
            insert into q0299t00 values('9', 'Número de cuestionario fuera de rango (Num de cuestionario mayor que total de cuestionarios)' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 11
          IF dReg.Q022DT00_IDEN_LICEN IS NULL AND dReg.Q022DT00_FEC_ENT IS NULL then
            insert into q0299t00 values('11', 'No se indica clave de licencia y tampoco fecha de entrada' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 12
          IF dReg.Q022DT00_FEC_ENT < TO_DATE('01/01/2009','dd/MM/YYYY') then
            insert into q0299t00 values('12', 'Fecha de entrada de la solicitud fuera de rango' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 13
          if dReg.Q022DT00_ESTADO_LICEN<> 'A' AND  dReg.Q022DT00_ESTADO_LICEN<> 'B' AND dReg.Q022DT00_ESTADO_LICEN<> 'P' then
            insert into q0299t00 values('13', 'Existencia de mov pero no se especifica de qué tipo' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 14
          IF dReg.Q022DT00_ESTADO_LICEN = 'A' AND (dReg.Q022DT00_CAUSA_BAJA = '1' OR  dReg.Q022DT00_CAUSA_BAJA = '2' ) then
            insert into q0299t00 values('14', 'Situación de la licencia es un alta y no se sigue el grafo' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 15
          IF dReg.Q022DT00_ESTADO_LICEN = 'B' AND dReg.Q022DT00_CAUSA_BAJA IS NULL then
            insert into q0299t00 values('15', 'Situación de la licencia es una baja y no se sigue el grafo' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 16
          IF (dReg.Q022DT00_CAUSA_BAJA = '1' OR dReg.Q022DT00_CAUSA_BAJA = '2') AND dReg.Q022DT00_TIPO_OBRA in ('1','2','3','4','5') then
            insert into q0299t00 values('16', 'No se sigue el grafo, no se finaliza el cuestionario', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 17
          IF dReg.Q022DT00_ESTADO_LICEN='P' AND  dReg.Q022DT00_CAUSA_BAJA IN ('1', '2') then
            insert into q0299t00 values('17', 'Situación de la licencia es una prórroga y no se va a FIN' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 18
          if dReg.Q022DT00_CIF_DNI IS NOT NULL then
            if length(dReg.Q022DT00_CIF_DNI) <> 9 then
              insert into q0299t00 values('18', 'Falta la letra (la que determina el carácter o forma jurídica) ó el carácter de control ó el número aleatorio tiene menos ó más de 7 dígitos' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
              commit;
            elsif IS_NUMBER(substr(dReg.Q022DT00_CIF_DNI, 2 , 7)) = 1 then
              insert into q0299t00 values('18', 'Falta la letra (la que determina el carácter o forma jurídica) ó el carácter de control ó el número aleatorio tiene menos ó más de 7 dígitos', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
              commit;
            end if;

          end if;
          ---Falta la letra (la que determina el carácter o forma jurídica) ó el carácter de control ó el número aleatorio tiene menos ó más de 7 dígitos
          --- validacion 19
          IF dReg.Q022DT00_CIF_DNI IS NULL then
            insert into q0299t00 values('19', 'No aparece CIF-DNI', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 20
          IF dReg.Q022DT00_PRESUPUESTO < 1000 then
            insert into q0299t00 values('20', 'Presupuesto en euros, escaso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
         --- validacion 21
          IF dReg.Q022DT00_PRESUPUESTO >= 1000 AND dReg.Q022DT00_PRESUPUESTO<4000 then
            insert into q0299t00 values('21', 'Presupuesto en euros, un tanto escaso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 22
          IF dReg.Q022DT00_PRESUPUESTO > 50000000 then
            insert into q0299t00 values('22', 'Presupuesto en euros, excesivo', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 23
          IF dReg.Q022DT00_F_INI < TO_DATE('01/01/2009','dd/MM/YYYY') then
            insert into q0299t00 values('23', 'Fecha de inicio fuera de rango', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 24
          IF dReg.Q022DT00_F_FIN < TO_DATE('01/01/2009','dd/MM/YYYY') then
            insert into q0299t00 values('24', 'Fecha de finalización fuera de rango' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 25
          IF dReg.Q022DT00_F_FIN <= dReg.Q022DT00_F_INI then
            insert into q0299t00 values('25', 'Fecha de inicio y de fin incoherentes' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 26
          IF dReg.Q022DT00_TIPO_OBRA = '5' AND ((dReg.Q022DT00_NVN<>0 AND dReg.Q022DT00_NVN IS NOT NULL)  OR (dReg.Q022DT00_NVR<>0 AND dReg.Q022DT00_NVR IS NOT NULL)) then
            insert into q0299t00 values('26', 'Si tipo de obra mayor es demolición exclusivamente, no terminar el cuestionario ' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 27 1
          IF dReg.Q022DT00_USO_RES = '2' AND ((dReg.Q022DT00_NVN=0 OR dReg.Q022DT00_NVN IS  NULL)  AND (dReg.Q022DT00_NVR=0 OR dReg.Q022DT00_NVR IS NULL)) then
            insert into q0299t00 values('27', 'Si hay viviendas destinadas a uso residencia y no se sigue el grafo', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 27 2
          IF dReg.Q022DT00_USO_RES = '1' AND ((dReg.Q022DT00_NVN<>0 AND dReg.Q022DT00_NVN IS NOT NULL)  OR (dReg.Q022DT00_NVR<>0 AND dReg.Q022DT00_NVR IS NOT NULL)) then
            insert into q0299t00 values('27A', 'Si hay viviendas destinadas a uso NO  residencial y no se sigue el grafo', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 28
          if dReg.Q022DT00_ACTIVIDAD IN ('1','2','3','4','5','6','7','8','9','10') and ((dReg.Q022DT00_NVN<>0 AND dReg.Q022DT00_NVN IS NOT NULL)  OR (dReg.Q022DT00_NVR<>0 AND dReg.Q022DT00_NVR IS NOT NULL)) then
            insert into q0299t00 values('28', 'Si se elige actividad a la que se destina la edificación y no se sigue el grafo', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 29
          IF dReg.Q022DT00_NVN > 250 AND dReg.Q022DT00_NVN <=400 then
            insert into q0299t00 values('29', 'Nº de viviendas nuevas de la promoción  fuera de rango por exceso (dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 30
          if dReg.Q022DT00_NVN > 400 then
            insert into q0299t00 values('30', 'Nº de viviendas nuevas de la promoción  fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 31
          IF (dReg.Q022DT00_TIPO_OBRA = '1' OR dReg.Q022DT00_TIPO_OBRA = '2' ) AND dReg.Q022DT00_USO_RES = 2 AND (dReg.Q022DT00_NVN = 0 or dReg.Q022DT00_NVN is null) then
            insert into q0299t00 values('31', 'Obra de nueva planta con destino resindencial sin viviendas', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 32
          IF ( dReg.Q022DT00_NVR <> 0 AND dReg.Q022DT00_NVR IS NOT NULL ) AND (dReg.Q022DT00_TIPO_OBRA <> '3' AND dReg.Q022DT00_TIPO_OBRA <> '4') then
            insert into q0299t00 values('32', 'Aparecen viviendas rehabilitadas en obras que no son de rehabilitación', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 33
          IF ( dReg.Q022DT00_NVN <> 0 AND dReg.Q022DT00_NVN IS NOT NULL ) AND (dReg.Q022DT00_TIPO_OBRA <> '1' AND dReg.Q022DT00_TIPO_OBRA <> '2') then
            insert into q0299t00 values('33', 'Aparecen viviendas nuevas en obras que no son de rehabilitación', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 34
          IF dReg.Q022DT00_NVR > 30 AND dReg.Q022DT00_NVR <= 50 then
            insert into q0299t00 values('34', 'Nº de viviendas rehabilitadas de la promoción  fuera de rango por exceso(dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 35
          IF dReg.Q022DT00_NVR > 50 then
            insert into q0299t00 values('35', 'Nº de viviendas rehabilitadas de la promoción  fuera de rango por exceso' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 36
          IF ( dReg.Q022DT00_TIPO_OBRA = '3' OR dReg.Q022DT00_TIPO_OBRA = '4' ) AND dReg.Q022DT00_USO_RES = '2' AND ( dReg.Q022DT00_NVR = 0 OR dReg.Q022DT00_NVR IS NULL )  then
            insert into q0299t00 values('36', 'Obra de rehabilitación con destino resindencial sin viviendas' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 37
          IF dReg.Q022DT00_NVL > 300 then
            insert into q0299t00 values('37', 'Número de viviendas libres fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 38
          if dReg.Q022DT00_NVL > 200 AND dReg.Q022DT00_NVL <=300 then
            insert into q0299t00 values('38', 'Número de viviendas libres fuera de rango por exceso (dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 39
          IF dReg.Q022DT00_NVVPO > 400 then
            insert into q0299t00 values('39', 'Número de viviendas VPO  fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 40
          if dReg.Q022DT00_NVVPO > 250 AND dReg.Q022DT00_NVVPO <= 400 then
            insert into q0299t00 values('40', 'Número de viviendas VPO  fuera de rango por exceso(dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 41
          IF dReg.Q022DT00_NVVS > 400 then
            insert into q0299t00 values('41', 'Número de vivendas VS fuera de rango por exceso ' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 42
          if dReg.Q022DT00_NVVS > 250 AND dReg.Q022DT00_NVVS <=400 then
            insert into q0299t00 values('42', 'Número de vivendas VS fuera de rango por exceso (dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 43
          IF dReg.Q022DT00_NVPOT > 999 then
            insert into q0299t00 values('43', 'Número de vivIendas VPOT  fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 44
          IF dReg.Q022DT00_NVALDOT > 200 then
            insert into q0299t00 values('44', 'Número de alojamientos dotacionales  fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 45
          IF dReg.Q022DT00_NVALDOT > 100 AND dReg.Q022DT00_NVALDOT <= 200 then
            insert into q0299t00 values('45', 'Número de alojamientos dotacionales  fuera de rango por exceso (dudoso)' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 46
          IF dReg.Q022DT00_NVREAL > 999 then
            insert into q0299t00 values('46', 'Número de viviendas para realojo  fuera de rango por exceso' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 47
          IF dReg.Q022DT00_NVVTMG > 200 then
            insert into q0299t00 values('47', 'Número de vivendas VTMG  fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 48
          if dReg.Q022DT00_NVVTMG > 100 and dReg.Q022DT00_NVVTMG <= 200 then
            insert into q0299t00 values('48', 'Número de vivendas VTMG  fuera de rango por exceso (dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 49
          IF dReg.Q022DT00_NVVTME > 400 then
            insert into q0299t00 values('49', 'Número de vivendas VTME  fuera de rango por exceso' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 50
          IF dReg.Q022DT00_NVVTME >300 AND dReg.Q022DT00_NVVTME <= 400 then
            insert into q0299t00 values('50', 'Número de vivendas VTME  fuera de rango por exceso (dudoso)' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 51
          IF ( dReg.Q022DT00_NVL + dReg.Q022DT00_NVVPO + dReg.Q022DT00_NVVS + dReg.Q022DT00_NVPOT + dReg.Q022DT00_NVALDOT + dReg.Q022DT00_NVREAL + dReg.Q022DT00_NVVTMG + dReg.Q022DT00_NVVTME ) <> dReg.Q022DT00_NTOT then
            insert into q0299t00 values('51', 'La suma de viviendas de los distintos tipos de régimen es distinto del total' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 52
          if (dReg.Q022DT00_NVALDOT = 0 OR dReg.Q022DT00_NVALDOT IS NULL)  AND (dReg.Q022DT00_NVREAL = 0 OR dReg.Q022DT00_NVREAL is null) AND (dReg.Q022DT00_NVVTMG = 0 or dReg.Q022DT00_NVVTMG is null) AND ( dReg.Q022DT00_NVVTME = 0 or dReg.Q022DT00_NVVTME is null)  AND (dReg.Q022DT00_PRECIO_MED <> 0 AND dReg.Q022DT00_PRECIO_MED is not NULL) then
            insert into q0299t00 values('52', 'Las opciones 1, 2, 3, 4 no van a FIN', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 53
          IF ( (dReg.Q022DT00_NVALDOT <> 0 and dReg.Q022DT00_NVALDOT is not null )OR ( dReg.Q022DT00_NVREAL <> 0 and dReg.Q022DT00_NVREAL is not null ) OR (dReg.Q022DT00_NVVTMG <> 0 and dReg.Q022DT00_NVVTMG is not null) OR  (dReg.Q022DT00_NVVTME <> 0 and dReg.Q022DT00_NVVTME is not null) ) AND dReg.Q022DT00_PRINC_USO is null then
            insert into q0299t00 values('53', 'Las opciones 5, 6,7,8  van a FIN', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 54
          IF dReg.Q022DT00_NSP45 + dReg.Q022DT00_NSP75 + dReg.Q022DT00_NSP90 + dReg.Q022DT00_NSP120 <> dReg.Q022DT00_NSPT then
            insert into q0299t00 values('54', 'El número total de viviendas a construir no coincide con la suma de las viviendas de cada una de las superficies indicadas' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 55
          IF dReg.Q022DT00_PRINC_USO = '1' AND (dReg.Q022DT00_PRECIO_MED is null or dReg.Q022DT00_PRECIO_MED = 0) then
            insert into q0299t00 values('55', 'Si el uso previsto para esas viviendas es venta, no indicar el precio de venta por m2', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 56
          IF dReg.Q022DT00_PRINC_USO = '3' AND dReg.Q022DT00_PU_ESPECIF is null then
            insert into q0299t00 values('56', 'Si el uso previsto para esas viviendas es otro, no especificarlo' , dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 57
          IF dReg.Q022DT00_PRECIO_MED > 3000 then
            insert into q0299t00 values('57', 'El precio medio de venta por m2 de las viviendas tasadas, fuera de rango por exceso', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 58
          IF dReg.Q022DT00_PRECIO_MED > 2800 AND dReg.Q022DT00_PRECIO_MED <= 3000 then
            insert into q0299t00 values('58', 'El precio medio de venta por m2 de las viviendas tasadas, fuera de rango por exceso(dudoso)', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 58A
          IF (dReg.Q022DT00_NVN + dReg.Q022DT00_NVR <> dReg.Q022DT00_NTOT)  then
            insert into q0299t00 values('58A', 'Nº de viviendas distintos en distintos campos de totales', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;
          --- validacion 58B
          IF  ( dReg.Q022DT00_NVALDOT + dReg.Q022DT00_NVREAL + dReg.Q022DT00_NVVTMG + dReg.Q022DT00_NVVTME ) <> dReg.Q022DT00_NSPT  then
            insert into q0299t00 values('58B', 'Nº de viviendas distintos en distintos campos de totales', dReg.Q022BT00_ID_GRUPO, dReg.Q022DT00_ID_CUES , nAno, nMes, codProv, nomProv, codMun, nomMun, dReg.Q022DT00_IDEN_LICEN, dReg.Q022DT00_FEC_ENT );
            commit;
          end if;

          --- fin codigo
          fetch D into dReg;
          end loop;
      close D;

    -- la tabla G no va por mes, solo año.
    if ano is null and mun is null then
      open G for g_query ;
    elsif ano is null and mun is not null then
      open G for g_query using mun;
    elsif ano is not null and mun is null then
      open G for g_query using ano;
     elsif ano is not null and mun is not null then
      open G for g_query using ano, mun;
    end if;

     --- open G for g_query;
      fetch G into gReg;
        while G%found
          LOOP
            nAno:=null;
            nMes:=null;
            codProv:=null;
            nomProv:=null;
            codMun:=null;
            nomMun:=null;
            begin
              select id,ds_o,id_muni,ds_o_muni into codProv, nomProv, codMun, nomMun  from NORA_T17_PROV_MUNI where id = gReg.Q022GT00_MUN_PROV and id_muni = gReg.Q022GT00_MUN_MUNI;
                 exception when no_data_found then
                             nAno:=null;
                             nMes:=null;
                              codProv:=null;
                              nomProv:=null;
                              codMun:=null;
                              nomMun:=null;
            end;
          --- codigo
            --- validacion 81
            if gReg.Q022GT00_ANO < 2009 then
              insert into q0299t00 values('81', 'Año de referencia del censo de vivienda alquiler fuera de rango',0, gReg.Q022GT00_ID_CUES, gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 82
            --- No toca rellenar cuestionario pero hay cuestionario de alquiler
            --- no encuentro campo
            --- no hace falta.
            --- validacion 83
            --- Toca rellenar cuestionario pero no hay cuestionario de alquiler
            --- no encuentro campo
            --- se pondrá validacion en la aplicacion
            --- validacion 84
            IF gReg.Q022GT00_PRV1A = '1' AND ( gReg.Q022GT00_ADQVI1 is null AND gReg.Q022GT00_PROVI1 is null and gReg.Q022GT00_OTRVI1 is null ) then
              insert into q0299t00 values('84', 'Hay previsión para un año pero no se continua ',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            ---validacion 85
            IF gReg.Q022GT00_ADQVI1 = '1' AND ( gReg.Q022GT00_NADQ1 = 0 OR gReg.Q022GT00_NADQ1 IS NULL ) then
              insert into q0299t00 values('85', 'Previsión de adquisición de vivienda alquiler(1 año) pero no se especifica cuántas',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 86
            IF gReg.Q022GT00_PROVI1 = '1' AND ( gReg.Q022GT00_NPRO1 = 0 OR gReg.Q022GT00_NPRO1 IS NULL ) then
              insert into q0299t00 values('86', 'Previsión de promoción de vivienda alquiler(1 año) pero no se especifica cuántas',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
             --- validacion 87
            IF gReg.Q022GT00_OTRVI1 = '1' AND ( gReg.Q022GT00_NOTR1 = 0 OR gReg.Q022GT00_NOTR1 IS NULL ) then
              insert into q0299t00 values('87', 'Previsión de vivienda alquiler por otro procedimiento(1 año) pero no se especifica cuántas' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 88
            IF gReg.Q022GT00_NADQ1 + gReg.Q022GT00_NPRO1 + gReg.Q022GT00_NOTR1 <> gReg.Q022GT00_NTOT1 then
              insert into q0299t00 values('88', 'El número total de viviendas de alquiler previstas para ese año es distinto de la suma de las partes' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 88A
            IF gReg.Q022GT00_PRV1A='1' AND (gReg.Q022GT00_NTOT1=0 OR gReg.Q022GT00_NTOT1 is null  )then
              insert into q0299t00 values('88A', 'Si indica que tiene previsto nº viviendas mayor que 0',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 89
            IF gReg.Q022GT00_OTRVI1 = '1' AND gReg.Q022GT00_OTRLT1 is null then
              insert into q0299t00 values('89', 'No especificar la previsión (1 año) a través de  otro procedimiento',0, gReg.Q022GT00_ID_CUES, gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 90
            IF gReg.Q022GT00_PRV4A = '1' AND (( gReg.Q022GT00_ADQVI4 is null and gReg.Q022GT00_PROVI4 is null and gReg.Q022GT00_OTRVI4 is null  ) OR (gReg.Q022GT00_ADQVI4 =0 and gReg.Q022GT00_PROVI4 = 0 and gReg.Q022GT00_OTRVI4 =0 ))  then
              insert into q0299t00 values('90', 'Hay previsión en los siguientes cuatro años,  pero no se sigue el grafo',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            ---validacion 91
            IF gReg.Q022GT00_ADQVI4 = '1' AND ( gReg.Q022GT00_NADQ4 = 0 OR gReg.Q022GT00_NADQ4 IS NULL ) then
              insert into q0299t00 values('91', 'Previsión de adquisición  de vivienda alquiler (4 años)  pero no se especifica cuántas',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 92
            IF gReg.Q022GT00_PROVI4 = '1' AND ( gReg.Q022GT00_NPRO4 = 0 OR gReg.Q022GT00_NPRO4 IS NULL) then
              insert into q0299t00 values('92', 'Previsión de promoción  de vivienda alquiler (4 años)  pero no se especifica cuántas' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 93
            IF gReg.Q022GT00_OTRVI4 = '1' AND ( gReg.Q022GT00_NOTR4 = 0 OR gReg.Q022GT00_NOTR4 IS NULL) then
              insert into q0299t00 values('93', 'Previsión de vivienda alquiler por otro procedimiento (4 años)  pero no se especifica cuántas',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 94
            IF gReg.Q022GT00_NADQ4 + gReg.Q022GT00_NPRO4 + gReg.Q022GT00_NOTR4 <> gReg.Q022GT00_NTOT4 then
              insert into q0299t00 values('94', 'El número total de viviendas de alquiler previstas para ese año es distinto de la suma de las partes' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 94A
            IF gReg.Q022GT00_PRV4A='1' AND ( gReg.Q022GT00_NTOT4=0 OR gReg.Q022GT00_NTOT4 is null)  then
              insert into q0299t00 values('94A', 'Si indica que tiene previsto nº viviendas mayor que 0',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 95
            IF gReg.Q022GT00_OTRVI4 = '1' AND gReg.Q022GT00_OTRLT4 is null then
              insert into q0299t00 values('95', 'No especificar la previsión ( a 4 años ) a través de  otro procedimiento' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 96
            IF gReg.Q022GT00_TALQ = '1'  AND (gReg.Q022GT00_NALQ = 0 OR gReg.Q022GT00_NALQ IS NULL) then
              insert into q0299t00 values('96', 'Hay viviendas de propiedad municipal para alquiler pero no se especifica cuántas',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 97
            --- NOTA: parece ser que se estan grabando cambiados los campos en la aplic, estan cambiados Q022GT00_NRSPT y Q022GT00_NSPT
            --- cuando se cambie la aplic, se lanzara un plsql para corregir los actuales y esto ya ira bien.
            IF gReg.Q022GT00_TALQ = '1'  AND ( (gReg.Q022GT00_NSP45 = 0 OR gReg.Q022GT00_NSP45 IS NULL) AND (gReg.Q022GT00_NSP75 = 0 OR gReg.Q022GT00_NSP75 IS NULL) AND ( gReg.Q022GT00_NSP90 = 0 OR gReg.Q022GT00_NSP90 IS NULL) AND ( gReg.Q022GT00_NSPT = 0 OR gReg.Q022GT00_NSPT IS NULL)) then
              insert into q0299t00 values('97', 'Hay viviendas de propiedad municipal para alquiler y se finaliza',0, gReg.Q022GT00_ID_CUES, gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
             end if;
            --- validacion 98
            IF (gReg.Q022GT00_NSP45 <> 0 AND (gReg.Q022GT00_NRSP45 = 0 OR gReg.Q022GT00_NRSP45 IS NULL) )OR
             (( gReg.Q022GT00_NSP45 = 0 OR gReg.Q022GT00_NSP45 IS NULL) AND gReg.Q022GT00_NRSP45 <> 0 ) OR
              ( gReg.Q022GT00_NSP75 <> 0 AND (gReg.Q022GT00_NRSP75 = 0 OR gReg.Q022GT00_NRSP75 IS NULL) ) OR
              (( gReg.Q022GT00_NSP75 = 0 OR gReg.Q022GT00_NSP75 IS NULL) AND gReg.Q022GT00_NRSP75 <> 0 ) OR
              ( gReg.Q022GT00_NSP90 <> 0 AND (gReg.Q022GT00_NRSP90 = 0 OR gReg.Q022GT00_NRSP90 IS NULL) ) OR
              (( gReg.Q022GT00_NSP90 = 0 OR gReg.Q022GT00_NSP90 IS NULL) AND gReg.Q022GT00_NRSP90 <> 0 ) OR
              ( gReg.Q022GT00_NSP90M <> 0 AND (gReg.Q022GT00_NRSP90M = 0 OR gReg.Q022GT00_NRSP90M IS NULL) ) OR
              ( ( gReg.Q022GT00_NSP90M = 0 OR gReg.Q022GT00_NSP90M IS NULL) AND gReg.Q022GT00_NRSP90M <> 0 ) OR
              ( gReg.Q022GT00_NSPT <> 0 AND (gReg.Q022GT00_NRSPT = 0 OR gReg.Q022GT00_NRSPT IS NULL) ) OR
              ( ( gReg.Q022GT00_NSPT = 0 OR gReg.Q022GT00_NSPT IS NULL) AND gReg.Q022GT00_NRSPT <> 0 ) then
              insert into q0299t00 values('98', 'Se indica el número de viviendas EN ALQUILER , en función de su superficie pero no se especifica renta o viceversa' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 99
            IF gReg.Q022GT00_TALQ <> '1' AND (gReg.Q022GT00_NALQ <>0  AND gReg.Q022GT00_NALQ IS NOT NULL) then
              insert into q0299t00 values('99', 'No hay viviendas de propiedad municipal para alquiler y no  se finaliza',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 100
            IF gReg.Q022GT00_NSP45 + gReg.Q022GT00_NSP75 + gReg.Q022GT00_NSP90 + gReg.Q022GT00_NSP90M <> gReg.Q022GT00_NSPT then
              insert into q0299t00 values('100', 'El número total de viviendas de alquiler previstas (de diferente metraje)  es distinto de la suma de las partes',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 101
            --- NOTA: parece ser que se estan grabando cambiados los campos en la aplic, estan cambiados Q022GT00_NRSPT y Q022GT00_NSPT
            --- cuando se cambie la aplic, se lanzara un plsql para corregir los actuales y esto ya ira bien.
            IF gReg.Q022GT00_NRSPT > 500  then
              insert into q0299t00 values( '101', 'Renta media mensual total fuera de rango por exceso', 0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 102
            IF ( gReg.Q022GT00_NSP45 * gReg.Q022GT00_NRSP45 + gReg.Q022GT00_NSP75 * gReg.Q022GT00_NRSP75 + gReg.Q022GT00_NSP90 * gReg.Q022GT00_NRSP90 + gReg.Q022GT00_NSP90M * gReg.Q022GT00_NRSP90M )/( gReg.Q022GT00_NSP45 + gReg.Q022GT00_NSP75 + gReg.Q022GT00_NSP90 + gReg.Q022GT00_NSP90M ) <> gReg.Q022GT00_NRSPT then
              insert into q0299t00 values('102', 'La renta media total no es la media ponderada' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 103
            IF gReg.Q022GT00_NOCUP + gReg.Q022GT00_NDESA + gReg.Q022GT00_NDESO + gReg.Q022GT00_NDESOT <> gReg.Q022GT00_NOCUT then
              insert into q0299t00 values('103', 'El número total de viviendas en función de su ocupación  es distinto de la suma de las partes',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 103A
            IF gReg.Q022GT00_NALQ <> gReg.Q022GT00_NOCUT  then
              insert into q0299t00 values('103A', 'El número total de viviendas de alquiler previstas es distinta',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 104
            IF gReg.Q022GT00_NDESOT <> 0 AND gReg.Q022GT00_NDESOT IS NOT NULL AND gReg.Q022GT00_DESOTR IS NULL then
              insert into q0299t00 values('104', 'Se indica desocupadas inaccesibles por otras razones y no se especifica',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 105
            If gReg.Q022GT00_NLIBRE > 200  then
              insert into q0299t00 values('105', 'Número de viviendas libres en alquiler  fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 106
            IF gReg.Q022GT00_NVPOG > 999  then
              insert into q0299t00 values('106', 'Número de viviendas VPO en alquiler fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 107
            IF gReg.Q022GT00_NVPOE > 999  then
             insert into q0299t00 values('107', 'Número de vivendas VS en alquiler fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 108
            IF gReg.Q022GT00_NVPOT > 999  then
              insert into q0299t00 values('108', 'Número de vivendas VPOT en alquiler  fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 109
            IF gReg.Q022GT00_NALOD > 300  then
              insert into q0299t00 values(' 109', 'Número de alojamientos dotacionales en alquiler  fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 110
            IF gReg.Q022GT00_NREAL > 100  then
              insert into q0299t00 values('110', 'Número de viviendas para realojo en alquiler  fuera de rango por exceso' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 111
            IF gReg.Q022GT00_NVTMG > 200  then
              insert into q0299t00 values('111', 'Número de vivendas VTMG en alquiler  fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 112
            IF gReg.Q022GT00_NVTME > 200  then
              insert into q0299t00 values('112', 'Número de vivendas VTME en alquiler fuera de rango por exceso' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 113
            IF gReg.Q022GT00_NLIBRE + gReg.Q022GT00_NVPOG + gReg.Q022GT00_NVPOE + gReg.Q022GT00_NVPOT + gReg.Q022GT00_NALOD + gReg.Q022GT00_NREAL + gReg.Q022GT00_NVTMG + gReg.Q022GT00_NVTME <> gReg.Q022GT00_NVTOT then
              insert into q0299t00 values('113', 'La suma de viviendas en alquiler de los distintos tipos de régimen es distinto del total' ,0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 113A
            IF gReg.Q022GT00_NALQ <> gReg.Q022GT00_NVTOT then
              insert into q0299t00 values('113A', 'El número total de viviendas de alquiler previstas es distinta',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 114
            IF gReg.Q022GT00_NANT60M + gReg.Q022GT00_NANT30 + gReg.Q022GT00_NANT10 + gReg.Q022GT00_NANT10M <> gReg.Q022GT00_NANTT then
              insert into q0299t00 values('114', 'La suma de viviendas en alquiler de diferente antigüedad es distinto del total',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;
            --- validacion 114A
            IF gReg.Q022GT00_NALQ <> gReg.Q022GT00_NANTT then
              insert into q0299t00 values('114A', 'El número total de viviendas de alquiler previstas es distinta',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;

            --- validacion 115
            IF gReg.Q022GT00_NANTT > 1500 then
              insert into q0299t00 values('115', 'Número total de viviendas en alquiler fuera de rango por exceso',0, gReg.Q022GT00_ID_CUES , gReg.Q022GT00_ANO, null, codProv, nomProv, codMun, nomMun, null, gReg.Q022GT00_FEC_ALTA );
              commit;
            end if;

          --- fin codigo
          fetch G into gReg;
          end loop;
        close G;

      end if;


      if tipo = 2 OR tipo is null then



    if ano is null and mes is null and mun is null then
      open E for e_query ;
    elsif ano is null and mes is null and mun is not null then
      open E for e_query using mun;
    elsif ano is null and mes is not null and mun is null then
      open E for e_query using mes;
    elsif ano is not null and mes is null and mun is null then
      open E for e_query using ano;
    elsif ano is null and mes is not null and mun is not null then
      open E for e_query using mes, mun;
    elsif ano is not null and mes is null and mun is not null then
      open E for e_query using ano, mun;
    elsif ano is not null and mes is not null and mun is null then
      open E for e_query using ano, mes;
    elsif ano is not null and mes is not null and mun is not null then
      open E for e_query using ano, mes, mun;
    end if;


      ---open E for e_query;
      fetch E into eReg;
        while E%found
          LOOP

            nAno:=null;
            nMes:=null;
            codProv:=null;
            nomProv:=null;
            codMun:=null;
            nomMun:=null;
            begin
              select Q022CT00_ANO, Q22CT00_MES, MUN_PROV, MUN_MUNI into nAno, nMes, codProv, codMun from q022ct00 where Q022CT00_ID_GRUPO = eReg.Q022CT00_ID_GRUPO;
              select id,ds_o,id_muni,ds_o_muni into codProv, nomProv, codMun, nomMun  from NORA_T17_PROV_MUNI where id = codProv and id_muni = codMun;
              exception when no_data_found then
                             nAno:=null;
                             nMes:=null;
                              codProv:=null;
                              nomProv:=null;
                              codMun:=null;
                              nomMun:=null;
            end;
          --- codigo
          --- validacion 59
          ncus := 0;
          nAux := eReg.Q022CT00_ID_GRUPO;
          if ano is null and mes is null and mun is null then
            select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1  ;
          elsif ano is null and mes is null and mun is not null then
            select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND mun_muni=mun;
          elsif ano is null and mes is not null and mun is null then
            select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND Q22CT00_MES = mes ;
          elsif ano is not null and mes is null and mun is null then
            select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND Q022CT00_ANO = ano ;
         elsif ano is null and mes is not null and mun is not null then
             select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND  Q22CT00_MES = mes and mun_muni=mun;
         elsif ano is not null and mes is null and mun is not null then
             select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND Q022CT00_ANO = ano and  mun_muni=mun;
         elsif ano is not null and mes is not null and mun is null then
             select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND Q022CT00_ANO = ano and Q22CT00_MES = mes ;
         elsif ano is not null and mes is not null and mun is not null then
             select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_ID_GRUPO = nAux and Q022CT00_REALIZA_ACTUACION = 1 AND Q022CT00_ANO = ano and Q22CT00_MES = mes and mun_muni=mun;
         end if;

          ---select SUM(Q022CT00_NCUS) into ncus from Q022CT00 where Q022CT00_REALIZA_ACTUACION = 1 AND Q022CT00_ANO = ano and Q22CT00_MES in ( mes1, mes2, mes3) and mun_muni=mun;
          if ncus = 0 or ncus is null then
            insert into q0299t00 values('59', 'Hay movimientos de operaciones de suelo pero no se rellena cuestionario' , eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 60
          if eReg.Q022ET00_TIPADQ is null then
            insert into q0299t00 values('60', 'Existencia de mov pero no se especifica de qué tipo', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 61
          IF eReg.Q022ET00_FADQ < TO_DATE('01/01/2009', 'dd/MM/YYYY') then
            insert into q0299t00 values('61', 'Fecha de adquisición fuera de rango' , eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 62
          IF eReg.Q022ET00_SUPSU > 99999 OR eReg.Q022ET00_SUPSU < 9 then
            insert into q0299t00 values('62', 'Superficie total en m2 fuera de rango', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 63
          IF eReg.Q022ET00_SUPTE > 99999 OR eReg.Q022ET00_SUPTE < 9 then
            insert into q0299t00 values('63', 'Superficie total  construida o de techo en m2 fuera de rango', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 64
          IF eReg.Q022ET00_VALSU > 999999999 OR eReg.Q022ET00_VALSU < 9999 then
            insert into q0299t00 values('64', 'Valoración del suelo fuera de rango' , eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 65
          if eReg.Q022ET00_NLIBRE > 300 then
            insert into q0299t00 values('65', 'Número de viviendas libres fuera de rango por exceso', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 66
          if eReg.Q022ET00_NLIBRE > 200 and eReg.Q022ET00_NLIBRE <= 300 then
            insert into q0299t00 values('66', 'Número de viviendas libres fuera de rango por exceso (dudoso)', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 67
          IF eReg.Q022ET00_NVPOG > 400 then
            insert into q0299t00 values('67', 'Número de viviendas VPO  fuera de rango por exceso' , eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 68
          IF eReg.Q022ET00_NVPOG > 250 AND eReg.Q022ET00_NVPOG <= 400 then
            insert into q0299t00 values('68', 'Número de viviendas VPO  fuera de rango por exceso(dudoso)', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 69
          IF eReg.Q022ET00_NVPOE > 400 then
            insert into q0299t00 values('69', 'Número de vivendas VS fuera de rango por exceso', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 70
          IF eReg.Q022ET00_NVPOE > 250 AND eReg.Q022ET00_NVPOE <= 400 then
            insert into q0299t00 values('70', 'Número de vivendas VS fuera de rango por exceso (dudoso)', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 71
          --- Número de vivendas VPOT  fuera de rango por exceso
          --- ¿¿¿???? No encuentro ese campo en esta tabla
          --- validacion 72
          IF eReg.Q022ET00_NALOD >= 200 then
            insert into q0299t00 values('72', 'Número de alojamientos dotacionales  fuera de rango por exceso ', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 73
          IF eReg.Q022ET00_NALOD > 100 AND eReg.Q022ET00_NALOD <= 200 then
            insert into q0299t00 values('73', 'Número de alojamientos dotacionales  fuera de rango por exceso (dudoso)', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 74
          IF eReg.Q022ET00_NREAL > 999 then
            insert into q0299t00 values('74', 'Número de viviendas para realojo  fuera de rango por exceso', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 75
          IF eReg.Q022ET00_NVTMG > 200 then
            insert into q0299t00 values('75', 'Número de vivendas VTMG  fuera de rango por exceso ' , eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 76
          IF eReg.Q022ET00_NVTMG > 100 and eReg.Q022ET00_NVTMG <= 200 then
            insert into q0299t00 values('76', 'Número de vivendas VTMG  fuera de rango por exceso (dudoso)', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
         --- validacion 77
          IF eReg.Q022ET00_NVTME > 400 then
            insert into q0299t00 values('77', 'Número de vivendas VTME  fuera de rango por exceso ', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 78
          If eReg.Q022ET00_NVTME > 300 AND eReg.Q022ET00_NVTME <= 400 then
            insert into q0299t00 values('78', 'Número de vivendas VTME  fuera de rango por exceso (dudoso)', eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 79
          IF eReg.Q022ET00_NVPOG + eReg.Q022ET00_NVPOE + eReg.Q022ET00_NALOD + eReg.Q022ET00_NREAL + eReg.Q022ET00_NVTMG + eReg.Q022ET00_NVTME <> eReg.Q022ET00_NVTOT then
            insert into q0299t00 values('79', 'La suma de viviendas de los distintos tipos de régimen es distinto del total' , eReg.Q022CT00_ID_GRUPO, eReg.Q022ET00_ID_CUES, nAno, nMes, codProv, nomProv, codMun, nomMun, null, eReg.Q022ET00_FEC_ALTA );
            commit;
          end if;
          --- validacion 80
          ---El número total de viviendas a construir no coincide con la suma de las viviendas de cada una de las superficies indicadas
          --- ¿¿??? No encuentro esos campos en esta tabla
          --- se elimina la validación


       --- fin codigo
          fetch E into eReg;
          end loop;
      close E;

      end if;


       -- EXCEPTION
         --   WHEN OTHERS
           --THEN
             -- raise;

   END q02b_validaciones;

/
