CREATE OR REPLACE PROCEDURE CANCVND_FINCTBFIS_LOJA(
   P_CDFILIAL IN FILIAL.CDFILIAL%TYPE,
   P_CDLOJA   IN CAIXA.CDLOJA%TYPE,
   P_DTREDUZ  IN REDUCAOZ.DTREDUCAOZ%TYPE,
   P_IDORIGEMREDZ IN VARCHAR2,
   P_RETORNO  OUT NOCOPY VARCHAR)
IS
   V_RETORNO       VARCHAR2(02);
   V_CDFILIAL      VARCHAR2(04);
   V_NRLANCTONF    VARCHAR2(10);
   V_STCONTCTBL    VARCHAR2(20);
   V_STCONTCTBLREC VARCHAR2(20);
   V_LANCCONT      VARCHAR2(20);
   V_NRSEQLANC     VARCHAR2(05);
   V_IDCONTCCUS    VARCHAR2(01);
   V_CDCENTCUST    VARCHAR2(04);
   V_CDTIPOOPER    VARCHAR2(02);
   V_IDUTILCONTAB  VARCHAR2(01);
   V_IDORCLVERSAOANT VARCHAR2(01);

BEGIN
   BEGIN

      BEGIN
         SELECT NVL(IDORCLVERSAOANT, 'N')
           INTO V_IDORCLVERSAOANT
           FROM PARAMFISCAL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_IDORCLVERSAOANT := 'N';
      END;

      /*VERIFICA SE O PARAMETRO UTILIZA O MODULO CONTABIL ESTA MARCADO*/
      BEGIN
         SELECT IDUTILCONTAB
           INTO V_IDUTILCONTAB
           FROM PARAVEND
          WHERE CDFILIAL = P_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDUTILCONTAB := 'N';
      END;

      FOR C_LOTE IN (SELECT DISTINCT CDFILIALNF, NRLANCTONF
                       FROM MOVCAIXA M, CAIXA C
                      WHERE M.CDFILIAL     = P_CDFILIAL
                        AND M.CDFILIAL     = C.CDFILIAL
                        AND M.CDCAIXA      = C.CDCAIXA
                        AND C.CDLOJA       = P_CDLOJA
                        AND M.DTMOVIMCAIXA = P_DTREDUZ
                        AND M.NRLANCTONF IS NOT NULL)LOOP

         DELETE FROM ITEMVENOUTIMPOSCX
          WHERE CDFILIALNF = C_LOTE.CDFILIALNF
            AND NRLANCTONF = C_LOTE.NRLANCTONF;

         /*SE O PARAMETRO PARA GERAR O CONTABIL ESTAVA DESMARCADO QUANDO A REDUCAOZ FOI APROVADA E FOI MARCADO ANTES DO CANCELAMENTO, A CANCELA DADOS FINANECEIROS E CHAMADA INDEPENDENTE DO PARAMETRO*/
         CANCELA_DADOS_FINANCEIRO(C_LOTE.CDFILIALNF,C_LOTE.NRLANCTONF, 'S',V_RETORNO);
         P_RETORNO := P_RETORNO||V_RETORNO||'_';

         /*SE O RETORNO DA CANCELA DADOS FOR 0 :"DADOS FINANCEIROS CANCELADOS" APAGA A NOTA FISCAL GERADA PARA ALIMENTAR O FINANCEIRO*/
         IF V_RETORNO = '0' THEN
            P_RETORNO := '9'||'_'||P_RETORNO;
            EXCLUI_LANCCONTABIL('12', C_LOTE.CDFILIALNF||C_LOTE.NRLANCTONF);

            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_MOVCAIXA IN (SELECT CDFILIAL, CDCAIXA, DTABERCAIX, NRSEQUMOVI
                                    FROM MOVCAIXA
                                   WHERE CDFILIALNF = C_LOTE.CDFILIALNF
                                     AND NRLANCTONF = C_LOTE.NRLANCTONF)
               LOOP
                  UPDATE MOVCAIXA
                     SET CDFILIALNF   = NULL,
                         NRLANCTONF   = NULL
                   WHERE CDFILIAL     = C_MOVCAIXA.CDFILIAL
                     AND CDCAIXA      = C_MOVCAIXA.CDCAIXA
                     AND DTABERCAIX   = C_MOVCAIXA.DTABERCAIX
                     AND NRSEQUMOVI   = C_MOVCAIXA.NRSEQUMOVI;
               END LOOP;
            ELSE
               UPDATE MOVCAIXA
                  SET CDFILIALNF = NULL,
                      NRLANCTONF = NULL
                WHERE CDFILIALNF = C_LOTE.CDFILIALNF
                  AND NRLANCTONF = C_LOTE.NRLANCTONF;
            END IF;

            IF P_IDORIGEMREDZ IN ('NFCE','SAT') THEN
               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_VENDA IN (SELECT V.CDFILIAL, V.CDCAIXA, V.NRSEQVENDA
                                    FROM VENDA V, CAIXA C
                                   WHERE V.CDFILIAL        = P_CDFILIAL
                                     AND V.CDCAIXA         = C.CDCAIXA
                                     AND V.CDFILIAL        = C.CDFILIAL
                                     AND V.CDLOJA          = P_CDLOJA
                                     AND V.DTENTRVENDA     = P_DTREDUZ
                                     AND V.IDTPAMBNFCE     = '1'
                                     AND V.IDSTATUSNFCE    = 'A'
                                     AND V.IDTPEMISVEND    = DECODE(P_IDORIGEMREDZ,'NFCE','N','S'))
                  LOOP
                     UPDATE VENDA
                        SET IDAPROVACAONFCE = 'P',
                            DTFECHCUPOM     = NULL,
                            CDOPERFECHCUPOM = NULL,
                            IDTPAPROV       = 'M'
                      WHERE CDFILIAL        = C_VENDA.CDFILIAL
                        AND CDCAIXA         = C_VENDA.CDCAIXA
                        AND NRSEQVENDA      = C_VENDA.NRSEQVENDA;

                  END LOOP;
               ELSE
                  UPDATE VENDA
                     SET IDAPROVACAONFCE = 'P',
                         DTFECHCUPOM     = NULL,
                         CDOPERFECHCUPOM = NULL,
                         IDTPAPROV       = 'M'
                   WHERE CDFILIAL        = P_CDFILIAL
                     AND CDCAIXA         IN (SELECT CDCAIXA
                                               FROM CAIXA
                                              WHERE CDFILIAL = P_CDFILIAL
                                                AND CDLOJA   = P_CDLOJA)
                     AND DTENTRVENDA  = P_DTREDUZ
                     AND IDTPAMBNFCE     = '1'
                     AND IDSTATUSNFCE    = 'A'
                     AND IDTPEMISVEND    = DECODE(P_IDORIGEMREDZ,'NFCE','N','S');
               END IF;

               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_MOVCAIXA IN (SELECT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI
                                       FROM MOVCAIXA M, CAIXA C
                                      WHERE M.CDFILIAL           = P_CDFILIAL
                                        AND M.CDCAIXA            = C.CDCAIXA
                                        AND M.CDFILIAL           = C.CDFILIAL
                                        AND M.CDCAIXA            = C.CDCAIXA
                                        AND C.CDLOJA             = P_CDLOJA
                                        AND M.DTMOVIMCAIXA= P_DTREDUZ) LOOP
                     UPDATE MOVCAIXA
                        SET IDAPROVREDZNFCE  = 'P'
                      WHERE CDFILIAL         = C_MOVCAIXA.CDFILIAL
                        AND CDCAIXA          = C_MOVCAIXA.CDCAIXA
                        AND DTABERCAIX       = C_MOVCAIXA.DTABERCAIX
                        AND NRSEQUMOVI       = C_MOVCAIXA.NRSEQUMOVI;
                  END LOOP;
               ELSE
                  UPDATE MOVCAIXA
                     SET IDAPROVREDZNFCE  = 'P'
                   WHERE CDFILIAL         = P_CDFILIAL
                     AND CDCAIXA          IN (SELECT CDCAIXA
                                                FROM CAIXA
                                               WHERE CDFILIAL = P_CDFILIAL
                                                 AND CDLOJA   = P_CDLOJA)
                     AND DTMOVIMCAIXA= P_DTREDUZ;
               END IF;
            ELSE
               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_REDUCAOZ IN (SELECT R.CDFILIAL, R.CDCAIXA, R.NRECFREDZ, R.DTREDUCAOZ
                                       FROM REDUCAOZ R, CAIXA C
                                      WHERE R.CDFILIAL   = P_CDFILIAL
                                        AND R.CDCAIXA    = C.CDCAIXA
                                        AND R.CDFILIAL   = C.CDFILIAL
                                        AND C.CDLOJA     = P_CDLOJA
                                        AND R.DTREDUCAOZ = P_DTREDUZ)
                  LOOP
                     UPDATE REDUCAOZ
                     SET IDSTATUS           = 'P',
                         DTFECHCUPOM        = NULL,
                         CDOPERFECHCUPOM    = NULL,
                         IDTPAPROV          = 'M'
                      WHERE CDFILIAL        = C_REDUCAOZ.CDFILIAL
                        AND CDCAIXA         = C_REDUCAOZ.CDCAIXA
                        AND NRECFREDZ       = C_REDUCAOZ.NRECFREDZ
                        AND DTREDUCAOZ      = C_REDUCAOZ.DTREDUCAOZ;

                  END LOOP;
               ELSE
                  UPDATE REDUCAOZ
                     SET IDSTATUS        = 'P',
                         DTFECHCUPOM     = NULL,
                         CDOPERFECHCUPOM = NULL,
                         IDTPAPROV       = 'M'
                   WHERE CDFILIAL   = P_CDFILIAL
                     AND CDCAIXA    IN (SELECT CDCAIXA
                                          FROM CAIXA
                                         WHERE CDFILIAL = P_CDFILIAL
                                           AND CDLOJA   = P_CDLOJA)
                     AND DTREDUCAOZ = P_DTREDUZ;
               END IF;

               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_MOVCAIXA IN (SELECT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI
                                       FROM MOVCAIXA M, CAIXA C
                                      WHERE M.CDFILIAL        = P_CDFILIAL
                                        AND M.CDCAIXA         = C.CDCAIXA
                                        AND M.CDFILIAL        = C.CDFILIAL
                                        AND C.CDLOJA          = P_CDLOJA
                                        AND M.DTMOVIMCAIXA    = P_DTREDUZ)
                  LOOP
                     UPDATE MOVCAIXA
                        SET IDAPROVREDZNFCE = 'P'
                      WHERE CDFILIAL        = C_MOVCAIXA.CDFILIAL
                        AND CDCAIXA         = C_MOVCAIXA.CDCAIXA
                        AND DTABERCAIX      = C_MOVCAIXA.DTABERCAIX
                        AND NRSEQUMOVI      = C_MOVCAIXA.NRSEQUMOVI;

                  END LOOP;
               ELSE
                  UPDATE MOVCAIXA
                     SET IDAPROVREDZNFCE = 'P'
                   WHERE CDFILIAL        = P_CDFILIAL
                     AND CDCAIXA         IN (SELECT CDCAIXA
                                               FROM CAIXA
                                              WHERE CDFILIAL = P_CDFILIAL
                                                AND CDLOJA   = P_CDLOJA)
                     AND DTMOVIMCAIXA    = P_DTREDUZ;
               END IF;
            END IF;

            DELETE FROM NOTAFISCAL
             WHERE CDFILIAL   = C_LOTE.CDFILIALNF
               AND NRLANCTONF = C_LOTE.NRLANCTONF;
         ELSE
            IF P_RETORNO IS NULL THEN
               P_RETORNO := V_RETORNO||'_';
            ELSE
               P_RETORNO := P_RETORNO||V_RETORNO||'_';
            END IF;
         END IF;

         
      END LOOP;

      IF P_RETORNO IS NULL THEN
         P_RETORNO := '9';
      /*DOCUMENTO COM BOLETO BAIXADO*/
      ELSIF INSTR(P_RETORNO,'1') > 0 THEN
         P_RETORNO := '1';
      /*DOCUMENTO COM VENCIMENTOS PARCELADOS*/
      ELSIF INSTR(P_RETORNO,'2') > 0 THEN
         P_RETORNO := '2';
      /*DOCUMENTO COM AJUSTES*/
      ELSIF INSTR(P_RETORNO,'4') > 0 THEN
         P_RETORNO := '4';
      /*DOCUMENTO COM BOLETO EMITIDO*/
      ELSIF INSTR(P_RETORNO,'5') > 0 THEN
         P_RETORNO := '5';
      /*DOCUMENTO COM BOLETO ENVIADO VIA CNAB*/
      ELSIF INSTR(P_RETORNO,'6') > 0 THEN
         P_RETORNO := '6';
      /*DOCUMENTO COM BOLETO ASSOCIADO*/
      ELSIF INSTR(P_RETORNO,'7') > 0 THEN
         P_RETORNO := '7';
      /*DOCUMENTO COM VALOR UTILIZADO EM NF DE DEVOLUCAO*/
      ELSIF INSTR(P_RETORNO,'8') > 0 THEN
         P_RETORNO := '8';
      /*CANCELAMENTO CONCLUIDO COM SUCESSO*/
      ELSE
         P_RETORNO := '9';
      END IF;

      IF P_RETORNO = '9' THEN
         FOR C_LOTEFIS IN (SELECT DISTINCT M.CDFILIALNFFIS, M.NRLANCTONFFIS
                             FROM MOVCAIXA M, CAIXA C
                            WHERE M.CDFILIAL      = P_CDFILIAL
                              AND M.CDCAIXA       = C.CDCAIXA
                              AND M.CDFILIAL      = C.CDFILIAL
                              AND C.CDLOJA        = P_CDLOJA
                              AND M.DTMOVIMCAIXA  = P_DTREDUZ
                              AND M.NRLANCTONFFIS IS NOT NULL) LOOP

            DELETE FROM ITMAPARECUP
             WHERE (NRSEQUMAPAPU, IDTIPOITMAPR, NRSEQITMAPR) IN (SELECT I.NRSEQUMAPAPU, I.IDTIPOITMAPR, I.NRSEQITMAPR
                                                                   FROM ITMAPARECUP I, MAPAAPURAC M
                                                                  WHERE I.CDFILIAL     = C_LOTEFIS.CDFILIALNFFIS
                                                                    AND I.NRLANCTONF   = C_LOTEFIS.NRLANCTONFFIS
                                                                    AND I.NRSEQUMAPAPU = M.NRSEQUMAPAPU
                                                                    AND NVL(M.IDBLOQMAPAPU,'A') <> 'S'
                                                                    AND I.IDTIPOITMAPR = 'VI');

            EXCLUI_LANCCONTABIL('12', C_LOTEFIS.CDFILIALNFFIS||C_LOTEFIS.NRLANCTONFFIS);
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_MOVCAIXA IN (SELECT CDFILIAL, CDCAIXA, DTABERCAIX, NRSEQUMOVI
                                    FROM MOVCAIXA
                                   WHERE CDFILIALNFFIS = C_LOTEFIS.CDFILIALNFFIS
                                     AND NRLANCTONFFIS = C_LOTEFIS.NRLANCTONFFIS)
               LOOP
                  UPDATE MOVCAIXA
                     SET CDFILIALNFFIS = NULL,
                         NRLANCTONFFIS = NULL
                   WHERE CDFILIAL      = C_MOVCAIXA.CDFILIAL
                     AND CDCAIXA       = C_MOVCAIXA.CDCAIXA
                     AND DTABERCAIX    = C_MOVCAIXA.DTABERCAIX
                     AND NRSEQUMOVI    = C_MOVCAIXA.NRSEQUMOVI;

               END LOOP;
            ELSE
               UPDATE MOVCAIXA
                  SET CDFILIALNFFIS = NULL,
                      NRLANCTONFFIS = NULL
                WHERE CDFILIALNFFIS = C_LOTEFIS.CDFILIALNFFIS
                  AND NRLANCTONFFIS = C_LOTEFIS.NRLANCTONFFIS;
            END IF;

            IF P_IDORIGEMREDZ IN ('NFCE','SAT') THEN
               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_VENDA IN (SELECT V.CDFILIAL, V.CDCAIXA, V.NRSEQVENDA
                                    FROM VENDA V, CAIXA C
                                   WHERE V.CDFILIAL            = P_CDFILIAL
                                     AND V.CDCAIXA             = C.CDCAIXA
                                     AND V.CDFILIAL            = C.CDFILIAL
                                     AND C.CDLOJA              = P_CDLOJA
                                     AND V.DTENTRVENDA  = P_DTREDUZ
                                     AND V.IDTPAMBNFCE         = '1'
                                     AND V.IDSTATUSNFCE        = 'A'
                                     AND V.IDTPEMISVEND        = DECODE(P_IDORIGEMREDZ,'NFCE','N','S'))
                  LOOP
                     UPDATE VENDA
                        SET IDAPROVACAONFCE = 'P',
                            DTFECHCUPOM     = NULL,
                            CDOPERFECHCUPOM = NULL,
                            IDTPAPROV       = 'M'
                      WHERE CDFILIAL        = C_VENDA.CDFILIAL
                        AND CDCAIXA         = C_VENDA.CDCAIXA
                        AND NRSEQVENDA      = C_VENDA.NRSEQVENDA;
                  END LOOP;
               ELSE
                  UPDATE VENDA
                     SET IDAPROVACAONFCE = 'P',
                         DTFECHCUPOM     = NULL,
                         CDOPERFECHCUPOM = NULL,
                         IDTPAPROV       = 'M'
                   WHERE CDFILIAL        = P_CDFILIAL
                     AND CDCAIXA         IN (SELECT CDCAIXA
                                               FROM CAIXA
                                              WHERE CDFILIAL = P_CDFILIAL
                                                AND CDLOJA   = P_CDLOJA)
                     AND DTENTRVENDA  = P_DTREDUZ
                     AND IDTPAMBNFCE     = '1'
                     AND IDSTATUSNFCE    = 'A'
                     AND IDTPEMISVEND    = DECODE(P_IDORIGEMREDZ,'NFCE','N','S');
               END IF;

               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_MOVCAIXA IN (SELECT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI
                                       FROM MOVCAIXA M, CAIXA C
                                      WHERE M.CDFILIAL           = P_CDFILIAL
                                        AND M.CDCAIXA            = C.CDCAIXA
                                        AND M.CDFILIAL           = C.CDFILIAL
                                        AND C.CDLOJA             = P_CDLOJA
                                        AND M.DTMOVIMCAIXA       = P_DTREDUZ)
                  LOOP
                     UPDATE MOVCAIXA
                        SET IDAPROVREDZNFCE  = 'P'
                      WHERE CDFILIAL     = C_MOVCAIXA.CDFILIAL
                        AND CDCAIXA      = C_MOVCAIXA.CDCAIXA
                        AND DTABERCAIX   = C_MOVCAIXA.DTABERCAIX
                        AND NRSEQUMOVI   = C_MOVCAIXA.NRSEQUMOVI;
                  END LOOP;
               ELSE
                  UPDATE MOVCAIXA
                     SET IDAPROVREDZNFCE  = 'P'
                   WHERE CDFILIAL         = P_CDFILIAL
                     AND CDCAIXA          IN (SELECT CDCAIXA
                                                FROM CAIXA
                                               WHERE CDFILIAL = P_CDFILIAL
                                                 AND CDLOJA   = P_CDLOJA)
                     AND DTMOVIMCAIXA = P_DTREDUZ;
               END IF;
            ELSE
               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_REDUCAOZ IN (SELECT R.CDFILIAL, R.CDCAIXA, R.NRECFREDZ, R.DTREDUCAOZ
                                       FROM REDUCAOZ R, CAIXA C
                                      WHERE R.CDFILIAL   = P_CDFILIAL
                                        AND R.CDCAIXA    = C.CDCAIXA
                                        AND R.CDFILIAL   = C.CDFILIAL
                                        AND C.CDLOJA     = P_CDLOJA
                                        AND R.DTREDUCAOZ = P_DTREDUZ)
                  LOOP
                     UPDATE REDUCAOZ
                        SET IDSTATUS        = 'P',
                            DTFECHCUPOM     = NULL,
                            CDOPERFECHCUPOM = NULL,
                            IDTPAPROV       = 'M'
                      WHERE CDFILIAL        = C_REDUCAOZ.CDFILIAL
                        AND CDCAIXA         = C_REDUCAOZ.CDCAIXA
                        AND NRECFREDZ       = C_REDUCAOZ.NRECFREDZ
                        AND DTREDUCAOZ      = C_REDUCAOZ.DTREDUCAOZ;
                  END LOOP;
               ELSE
                  UPDATE REDUCAOZ
                     SET IDSTATUS        = 'P',
                         DTFECHCUPOM     = NULL,
                         CDOPERFECHCUPOM = NULL,
                         IDTPAPROV       = 'M'
                   WHERE CDFILIAL   = P_CDFILIAL
                     AND CDCAIXA    IN (SELECT CDCAIXA
                                          FROM CAIXA
                                         WHERE CDFILIAL = P_CDFILIAL
                                           AND CDLOJA   = P_CDLOJA)
                     AND DTREDUCAOZ = P_DTREDUZ;
               END IF;

               IF V_IDORCLVERSAOANT = 'S' THEN
                  FOR C_MOVCAIXA IN (SELECT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI
                                       FROM MOVCAIXA M, CAIXA C
                                      WHERE M.CDFILIAL        = P_CDFILIAL
                                        AND M.CDCAIXA         = C.CDCAIXA
                                        AND M.CDFILIAL        = C.CDFILIAL
                                        AND C.CDLOJA          = P_CDLOJA
                                        AND M.DTMOVIMCAIXA    = P_DTREDUZ)
                  LOOP
                     UPDATE MOVCAIXA
                        SET IDAPROVREDZNFCE = 'P'
                      WHERE CDFILIAL        = C_MOVCAIXA.CDFILIAL
                        AND CDCAIXA         = C_MOVCAIXA.CDCAIXA
                        AND DTABERCAIX      = C_MOVCAIXA.DTABERCAIX
                        AND NRSEQUMOVI      = C_MOVCAIXA.NRSEQUMOVI;

                  END LOOP;
               ELSE
                  UPDATE MOVCAIXA
                     SET IDAPROVREDZNFCE = 'P'
                   WHERE CDFILIAL        = P_CDFILIAL
                     AND CDCAIXA         IN (SELECT CDCAIXA
                                               FROM CAIXA
                                              WHERE CDFILIAL = P_CDFILIAL
                                                AND CDLOJA   = P_CDLOJA)
                     AND DTMOVIMCAIXA    = P_DTREDUZ;
               END IF;
            END IF;

            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_MAPARESUMECF IN (SELECT CDFILIAL, NRMAPARESECF
                                        FROM MAPARESUMECF
                                       WHERE CDFILIALNF = C_LOTEFIS.CDFILIALNFFIS
                                         AND NRLANCTONF = C_LOTEFIS.NRLANCTONFFIS)
               LOOP
                  UPDATE MAPARESUMECF
                     SET CDFILIALNF   = NULL,
                         NRLANCTONF   = NULL
                   WHERE CDFILIAL     = C_MAPARESUMECF.CDFILIAL
                     AND NRMAPARESECF = C_MAPARESUMECF.NRMAPARESECF;
               END LOOP;
            ELSE
               UPDATE MAPARESUMECF
                  SET CDFILIALNF = NULL,
                      NRLANCTONF = NULL
                WHERE CDFILIALNF = C_LOTEFIS.CDFILIALNFFIS
                  AND NRLANCTONF = C_LOTEFIS.NRLANCTONFFIS;
            END IF;

            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_REDUCAOZ IN (SELECT CDFILIAL, CDCAIXA, NRECFREDZ, DTREDUCAOZ
                                    FROM REDUCAOZ R
                                   WHERE CDFILIALNF = C_LOTEFIS.CDFILIALNFFIS
                                     AND NRLANCTONF = C_LOTEFIS.NRLANCTONFFIS)
               LOOP
                  UPDATE REDUCAOZ
                     SET CDFILIALNF = NULL,
                         NRLANCTONF = NULL
                   WHERE CDFILIAL   = C_REDUCAOZ.CDFILIAL
                     AND CDCAIXA    = C_REDUCAOZ.CDCAIXA
                     AND NRECFREDZ  = C_REDUCAOZ.NRECFREDZ
                     AND DTREDUCAOZ = C_REDUCAOZ.DTREDUCAOZ;

               END LOOP;
            ELSE
               UPDATE REDUCAOZ
                  SET CDFILIALNF = NULL,
                      NRLANCTONF = NULL
                WHERE CDFILIALNF = C_LOTEFIS.CDFILIALNFFIS
                  AND NRLANCTONF = C_LOTEFIS.NRLANCTONFFIS;
            END IF;

            DELETE FROM NOTAFISCAL
             WHERE CDFILIAL   = C_LOTEFIS.CDFILIALNFFIS
               AND NRLANCTONF = C_LOTEFIS.NRLANCTONFFIS;

            IF P_IDORIGEMREDZ IN ('SAT','NFCE') THEN
               DELETE FROM ITEMVENOUTIMPOS
                WHERE CDFILIAL      = P_CDFILIAL
                  AND CDCAIXA       IN (SELECT CDCAIXA
                                          FROM CAIXA
                                         WHERE CDFILIAL = P_CDFILIAL
                                           AND CDLOJA   = P_CDLOJA)
                  AND DTEMISSAONFCE = P_DTREDUZ;
            ELSE
               DELETE FROM ITEMVENOUTIMPOS
                WHERE CDFILIAL   = P_CDFILIAL
                  AND CDCAIXA    IN (SELECT CDCAIXA
                                       FROM CAIXA
                                      WHERE CDFILIAL = P_CDFILIAL
                                        AND CDLOJA   = P_CDLOJA)
                  AND DTREDUCAOZ = P_DTREDUZ;
            END IF;
         END LOOP;

         /*APAGA OS DADOS NA TABELA QUE GRAVA AS INFORMACOES FISCAIS POR PRODUTO (ROTINA DE CREDITO PRESUMIDO)*/
         DELETE FROM IMPPRODVENDAFIS
          WHERE CDFILIAL    = P_CDFILIAL
            AND CDCAIXA     IN (SELECT CDCAIXA
                                  FROM CAIXA
                                 WHERE CDFILIAL = P_CDFILIAL
                                   AND CDLOJA   = P_CDLOJA)
            AND DTENTRVENDA = P_DTREDUZ;
      END IF;

      IF P_RETORNO <> '9' THEN
         ROLLBACK;
      ELSE
         IF P_IDORIGEMREDZ IN ('NFCE','SAT') THEN
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_VENDA IN (SELECT V.CDFILIAL, V.CDCAIXA, V.NRSEQVENDA
                                 FROM VENDA V, CAIXA C
                                WHERE V.CDFILIAL        = P_CDFILIAL
                                  AND V.CDCAIXA         = C.CDCAIXA
                                  AND V.CDFILIAL        = C.CDFILIAL
                                  AND C.CDLOJA          = P_CDLOJA
                                  AND V.DTENTRVENDA  = P_DTREDUZ
                                  AND V.IDTPAMBNFCE     = '1'
                                  AND V.IDSTATUSNFCE    = 'A'
                                  AND V.IDAPROVACAONFCE = 'E'
                                  AND V.IDTPEMISVEND    = DECODE(P_IDORIGEMREDZ,'NFCE','N','S'))
               LOOP
                  UPDATE VENDA
                     SET IDAPROVACAONFCE = 'P',
                         DTFECHCUPOM     = NULL,
                         CDOPERFECHCUPOM = NULL,
                         IDTPAPROV       = 'M'
                   WHERE CDFILIAL        = C_VENDA.CDFILIAL
                     AND CDCAIXA         = C_VENDA.CDCAIXA
                     AND NRSEQVENDA      = C_VENDA.NRSEQVENDA;
               END LOOP;
            ELSE
               UPDATE VENDA
                  SET IDAPROVACAONFCE = 'P',
                      DTFECHCUPOM     = NULL,
                      CDOPERFECHCUPOM = NULL,
                      IDTPAPROV       = 'M'
                WHERE CDFILIAL        = P_CDFILIAL
                  AND CDCAIXA         IN (SELECT CDCAIXA
                                            FROM CAIXA
                                           WHERE CDFILIAL = P_CDFILIAL
                                             AND CDLOJA   = P_CDLOJA)
                  AND DTENTRVENDA  = P_DTREDUZ
                  AND IDTPAMBNFCE     = '1'
                  AND IDSTATUSNFCE    = 'A'
                  AND IDAPROVACAONFCE = 'E'
                  AND IDTPEMISVEND    = DECODE(P_IDORIGEMREDZ,'NFCE','N','S');
            END IF;

            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_MOVCAIXA IN (SELECT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI
                                    FROM MOVCAIXA M, CAIXA C
                                   WHERE M.CDFILIAL            = P_CDFILIAL
                                     AND M.CDCAIXA             = C.CDCAIXA
                                     AND M.CDFILIAL            = C.CDFILIAL
                                     AND C.CDLOJA              = P_CDLOJA
                                     AND M.DTMOVIMCAIXA = P_DTREDUZ
                                     AND M.IDAPROVREDZNFCE     = 'E')
               LOOP
                  UPDATE MOVCAIXA
                     SET IDAPROVREDZNFCE  = 'P'
                   WHERE CDFILIAL     = C_MOVCAIXA.CDFILIAL
                     AND CDCAIXA      = C_MOVCAIXA.CDCAIXA
                     AND DTABERCAIX   = C_MOVCAIXA.DTABERCAIX
                     AND NRSEQUMOVI   = C_MOVCAIXA.NRSEQUMOVI;

               END LOOP;
            ELSE
               UPDATE MOVCAIXA
                  SET IDAPROVREDZNFCE     = 'P'
                WHERE CDFILIAL            = P_CDFILIAL
                  AND CDCAIXA             IN (SELECT CDCAIXA
                                               FROM CAIXA
                                              WHERE CDFILIAL = P_CDFILIAL
                                                AND CDLOJA   = P_CDLOJA)
                  AND DTMOVIMCAIXA = P_DTREDUZ
                  AND IDAPROVREDZNFCE     = 'E';
            END IF;
            UPDATE MOVLOJA
               SET IDAPROVACAO = 'N'
             WHERE CDFILIAL    = P_CDFILIAL
               AND CDLOJA      = P_CDLOJA
               AND DTMOVIMENTO = P_DTREDUZ;
         ELSE
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_REDUCAOZ IN (SELECT R.CDFILIAL, R.CDCAIXA, R.NRECFREDZ, R.DTREDUCAOZ
                                    FROM REDUCAOZ R, CAIXA C
                                   WHERE R.CDFILIAL   = P_CDFILIAL
                                     AND R.CDCAIXA    = C.CDCAIXA
                                     AND R.CDFILIAL   = C.CDFILIAL
                                     AND C.CDLOJA     = P_CDLOJA
                                     AND R.DTREDUCAOZ = P_DTREDUZ
                                     AND R.IDSTATUS   = 'E')
               LOOP
                  UPDATE REDUCAOZ
                     SET IDSTATUS        = 'P',
                         DTFECHCUPOM     = NULL,
                         CDOPERFECHCUPOM = NULL,
                         IDTPAPROV       = 'M'
                   WHERE CDFILIAL        = C_REDUCAOZ.CDFILIAL
                     AND CDCAIXA         = C_REDUCAOZ.CDCAIXA
                     AND NRECFREDZ       = C_REDUCAOZ.NRECFREDZ
                     AND DTREDUCAOZ      = C_REDUCAOZ.DTREDUCAOZ;
               END LOOP;
            ELSE
               UPDATE REDUCAOZ
                  SET IDSTATUS        = 'P',
                      DTFECHCUPOM     = NULL,
                      CDOPERFECHCUPOM = NULL,
                      IDTPAPROV       = 'M'
                WHERE CDFILIAL   = P_CDFILIAL
                  AND CDCAIXA    IN (SELECT CDCAIXA
                                       FROM CAIXA
                                      WHERE CDFILIAL = P_CDFILIAL
                                        AND CDLOJA   = P_CDLOJA)
                  AND DTREDUCAOZ = P_DTREDUZ
                  AND IDSTATUS   = 'E';
            END IF;

            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_MOVCAIXA IN (SELECT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI
                                    FROM MOVCAIXA M, CAIXA C
                                   WHERE M.CDFILIAL        = P_CDFILIAL
                                     AND M.CDCAIXA         = C.CDCAIXA
                                     AND M.CDFILIAL        = C.CDFILIAL
                                     AND C.CDLOJA          = P_CDLOJA
                                     AND M.DTMOVIMCAIXA    = P_DTREDUZ
                                     AND M.IDAPROVREDZNFCE = 'E')
               LOOP
                  UPDATE MOVCAIXA
                  SET IDAPROVREDZNFCE = 'P'
                   WHERE CDFILIAL     = C_MOVCAIXA.CDFILIAL
                     AND CDCAIXA      = C_MOVCAIXA.CDCAIXA
                     AND DTABERCAIX   = C_MOVCAIXA.DTABERCAIX
                     AND NRSEQUMOVI   = C_MOVCAIXA.NRSEQUMOVI;

               END LOOP;
            ELSE
               UPDATE MOVCAIXA
                  SET IDAPROVREDZNFCE = 'P'
                WHERE CDFILIAL        = P_CDFILIAL
                  AND CDCAIXA         IN (SELECT CDCAIXA
                                            FROM CAIXA
                                           WHERE CDFILIAL = P_CDFILIAL
                                             AND CDLOJA   = P_CDLOJA)
                  AND DTMOVIMCAIXA    = P_DTREDUZ
                  AND IDAPROVREDZNFCE = 'E';
            END IF;
            UPDATE MOVLOJA
               SET IDAPROVACAO = 'N'
             WHERE CDFILIAL    = P_CDFILIAL
               AND CDLOJA      = P_CDLOJA
               AND DTMOVIMENTO = P_DTREDUZ;
         END IF;
      END IF;
   EXCEPTION
      WHEN OTHERS THEN BEGIN
         P_RETORNO := SQLERRM(SQLCODE);
         ROLLBACK;
      END;
   END;
END;
/