create or replace PROCEDURE EXPORTA_VIGENCIAS_OTIMIZADOR(
   P_TABELA IN VARCHAR2,
   P_NRVIGENCIA IN NUMBER,
   P_CDFILIAL IN FILIAL.CDFILIAL%TYPE,
   P_CDSERVFILI IN SERVICO.CDSERVFILI%TYPE,
   P_IDTIPORESTRICAO IN VARCHAR2,
   P_NRLISTA IN LISTA.NRLISTA%TYPE,
   P_IDOPCAO IN VARCHAR2,
   P_CDOPERADOR IN OPERADOR.CDOPERADOR%TYPE,
   P_LISTA_ERROS OUT VARCHAR2)
AS
   V_NRLISTA_IT NUMBER;
   V_NOVO_COD_VIG NUMBER;
   V_O_DTVIGENCIA DATE;
   V_O_DESCRICAO VARCHAR2(250);
   V_O_DTVIGENCIAFIM DATE;
   V_O_CDDESCOBSFILIAL VARCHAR2(2);
BEGIN 
   /*EXPORTACAO DE VIGENCIA DE FREQUENCIA DE GRUPO DE PRATO NO MES*/
   IF P_TABELA = 'FREQGRPRATMES' OR P_TABELA = 'VIGFREQGRPRATMES' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRITFREQGRPRATMES, V_NRLISTA_IT
               FROM ITFREQGRPRATMES IT INNER JOIN FREQGRPRATMES F ON IT.NRFREQGRPRATMES = F.NRFREQGRPRATMES
              WHERE F.CDFILIAL = P_CDFILIAL AND F.CDSERVFILI = P_CDSERVFILI AND F.NRVIGENCIA = P_NRVIGENCIA);
     
     /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL
        FROM VIGFREQGRPRATMES
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
                       FROM LISTA L LEFT JOIN VIGFREQGRPRATMES V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGFREQGRPRATMES',V_NOVO_COD_VIG);
            INSERT INTO VIGFREQGRPRATMES(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_FREQ_GR_PRAT(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;

   /*EXPORTACAO DE VIGENCIA DE RESTRICAO DE PRODUTOS POR GRUPO DE PRATO*/
   IF P_TABELA = 'RESTPRODGR' OR P_TABELA = 'VIGRESTPRODGR' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRRESTPRODGR, V_NRLISTA_IT
               FROM RESTPRODGR IT 
              WHERE IT.CDFILIAL = P_CDFILIAL AND IT.CDSERVFILI = P_CDSERVFILI AND IT.NRVIGENCIA = P_NRVIGENCIA);

     /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL
        FROM VIGRESTPRODGR
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
                       FROM LISTA L LEFT JOIN VIGRESTPRODGR V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGRESTPRODGR',V_NOVO_COD_VIG);
            INSERT INTO VIGRESTPRODGR(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_REST_PROD_GR(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;

   /*EXPORTACAO DE VIGENCIA DE LIMITE PERCAPITA POR GRUPO DE PRATO NO MES*/
   IF P_TABELA = 'LIMPESERGR' OR P_TABELA = 'VIGLIMPESERGR' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRITLIMPESERGR, V_NRLISTA_IT
               FROM ITLIMPESERGR IT INNER JOIN LIMPESERGR F ON IT.NRLIMPESERGR = F.NRLIMPESERGR
              WHERE F.CDFILIAL = P_CDFILIAL AND F.CDSERVFILI = P_CDSERVFILI AND F.NRVIGENCIA = P_NRVIGENCIA);

     /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL
        FROM VIGLIMPESERGR
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
                       FROM LISTA L LEFT JOIN VIGLIMPESERGR V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGLIMPESERGR',V_NOVO_COD_VIG);
            INSERT INTO VIGLIMPESERGR(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_LIM_PERC_GR(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;

   /*EXPORTACAO DE VIGENCIA DE FREQUENCIA DE OPCOES POR GRUPO DE PRATO NO MES*/
   IF P_TABELA = 'FREQOPCAGR' OR P_TABELA = 'VIGFREQOPCAGR' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRITFREQOPCAGR, V_NRLISTA_IT
               FROM ITFREQOPCAGR IT INNER JOIN FREQOPCAGR F ON IT.NRFREQOPCAGR = F.NRFREQOPCAGR
              WHERE F.CDFILIAL = P_CDFILIAL AND F.CDSERVFILI = P_CDSERVFILI AND F.NRVIGENCIA = P_NRVIGENCIA);

     /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL
        FROM VIGFREQOPCAGR
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
                       FROM LISTA L LEFT JOIN VIGFREQOPCAGR V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGFREQOPCAGR',V_NOVO_COD_VIG);
            INSERT INTO VIGFREQOPCAGR(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_FREQ_GR_OPC_PRAT(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;

   /*EXPORTACAO DE VIGENCIA DE FREQUENCIA DE PRODUTOS POR GRUPO DE PRATO NO MES*/
   IF P_TABELA = 'FREQPRODGRPRAT' OR P_TABELA = 'VIGFREQPRODGRPRAT' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRITFREQPRODGRPRAT, V_NRLISTA_IT
               FROM ITFREQPRODGRPRAT IT INNER JOIN FREQPRODGRPRAT F ON IT.NRFREQPRODGRPRAT = F.NRFREQPRODGRPRAT
              WHERE F.CDFILIAL = P_CDFILIAL AND F.CDSERVFILI = P_CDSERVFILI AND F.NRVIGENCIA = P_NRVIGENCIA);

      /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL
        FROM VIGFREQPRODGRPRAT
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL
                       FROM LISTA L LEFT JOIN VIGFREQPRODGRPRAT V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGFREQPRODGRPRAT',V_NOVO_COD_VIG);
            INSERT INTO VIGFREQPRODGRPRAT(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_FREQ_PROD_GR(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;

   /*EXPORTACAO DE VIGENCIA DE UTILIZACAO GRUPO DE PRATO NA SEMANA*/
   IF P_TABELA = 'UTILPRATOSERV' OR P_TABELA = 'VIGUTILPRATOSERV' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRUTILPRATOSERV, V_NRLISTA_IT
               FROM UTILPRATOSERV IT
              WHERE IT.CDSERVFILI = P_CDSERVFILI AND IT.NRVIGENCIA = P_NRVIGENCIA);

      /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM
        FROM VIGUTILPRATOSERV
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM
                       FROM LISTA L LEFT JOIN VIGUTILPRATOSERV V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGUTILPRATOSERV',V_NOVO_COD_VIG);
            INSERT INTO VIGUTILPRATOSERV(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_UTIL_PRAT_SERV(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;   

   /*EXPORTACAO DE VIGENCIA DE FREQUENCIA DE PRATOS NO MES*/
   IF P_TABELA = 'FREQPRATMES' OR P_TABELA = 'VIGFREQPRATMES' THEN
      /*MONTA A LISTA DE ITENS A EXPORTAR DA VIGENCIA DE ORIGEM*/
      NOVO_CODIGO('LISTA', V_NRLISTA_IT);
      INSERT INTO LISTA(CDLISTA, NRLISTA)
            (SELECT IT.NRITFREQPRATMES, V_NRLISTA_IT
               FROM ITFREQPRATMES IT INNER JOIN FREQPRATMES F ON IT.NRFREQPRATMES = F.NRFREQPRATMES
              WHERE F.CDFILIAL = P_CDFILIAL AND F.CDSERVFILI = P_CDSERVFILI AND F.NRVIGENCIA = P_NRVIGENCIA);

      /*RETORNA DADOS DA VIGENCIA ORIGINAL*/
      SELECT DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM
        INTO V_O_DTVIGENCIA, V_O_DESCRICAO, V_O_DTVIGENCIAFIM
        FROM VIGFREQPRATMES
       WHERE NRVIGENCIA = P_NRVIGENCIA; 
      
      /*PERCORRE LISTA DE FILIAL/SERVICO PARA VERIFICAR QUEM JA TEM VIGENCIA NO DESTINO, QUEM NAO POSSUI, VAI CRIAR A VIGENCIA*/
      FOR C_VIG IN (SELECT DISTINCT SUBSTR(L.CDLISTA,1,4) AS CDFILIAL_L, NRVIGENCIA, DTVIGENCIA, DESCRICAO, DTVIGENCIAFIM
                       FROM LISTA L LEFT JOIN VIGFREQPRATMES V ON SUBSTR(L.CDLISTA,1,4) = V.CDFILIAL AND V.IDTIPORESTRICAO = P_IDTIPORESTRICAO AND V.DTVIGENCIA = V_O_DTVIGENCIA
                      WHERE L.NRLISTA = P_NRLISTA
      ) LOOP
         /*SE A FILIAL DESTINO NAO TEM UMA VIGENCIA PARA A MESMA DATA, ENTAO VAI CRIAR UMA NOVA COM BASE NA VIGENCIA DE ORIGEM, SENAO UTILIZA A MESMA*/
         IF C_VIG.NRVIGENCIA IS NULL THEN
            NOVO_CODIGO('VIGFREQPRATMES',V_NOVO_COD_VIG);
            INSERT INTO VIGFREQPRATMES(NRVIGENCIA, CDFILIAL, DTVIGENCIA, DESCRICAO,DTINCLUSAO, CDOPERINCLUSAO, IDTIPORESTRICAO, DTVIGENCIAFIM, CDDESCOBSFILIAL)
            VALUES (V_NOVO_COD_VIG, C_VIG.CDFILIAL_L, V_O_DTVIGENCIA, V_O_DESCRICAO, SYSDATE, P_CDOPERADOR, P_IDTIPORESTRICAO, V_O_DTVIGENCIAFIM, V_O_CDDESCOBSFILIAL);
         END IF;
         /*ATUALIZA A LISTA DE FILIAL/SERVICO PARA CONCATENAR COM O NRO DA VIGENCIA E CHAMAR A PROCEDURE DE EXPORTAR ITENS DA VIGENCIA*/
         UPDATE LISTA
            SET CDLISTA = CDLISTA || TO_NUMBER(NVL(C_VIG.NRVIGENCIA,V_NOVO_COD_VIG))
          WHERE NRLISTA = P_NRLISTA AND 
                SUBSTR(CDLISTA,1,4) = C_VIG.CDFILIAL_L;
      END LOOP;
      UTIL_OTIMIZADOR.EXPORTA_ITEM_FREQ_PRAT_MES(P_NRVIGENCIA, P_CDFILIAL, P_CDSERVFILI, P_IDTIPORESTRICAO, P_NRLISTA, V_NRLISTA_IT, P_IDOPCAO, P_CDOPERADOR, P_LISTA_ERROS);
      /*DELETA A LISTA DE ITENS CRIADA NA PROCEDURE*/
      DELETE 
        FROM LISTA 
       WHERE NRLISTA = V_NRLISTA_IT;
   END IF;
END;
/