create or replace PROCEDURE REPLICACAO_FOS_CNC
AS
  V_SEQVARCHAR VARCHAR2(20);
  V_NRCONSMOVCAIXA NUMBER;
  V_COMMIT NUMBER;
  V_DARCOMMIT NUMBER;
  V_TEMP VARCHAR2(20);
  V_NRLANCNF VARCHAR2(10);
  V_NRLANBOL VARCHAR2(20);
  V_VRLIQTEMP NUMBER;
  V_NRDIASVENC NUMBER;
  V_DTVENCIMENTO DATE;
  V_CDCLASSFINA VARCHAR2(6);
  V_COUNT NUMBER;
  V_USACNC VARCHAR2(01);
  V_VRTOTGORJ NUMBER;
  V_VRTOTVENDA NUMBER;
  V_VRVENDASEMTAXA NUMBER;
  V_VRTXADMTXSERV NUMBER;
  V_VRTAXASERVICO NUMBER;
  V_PERCGORJ NUMBER;
  V_PERCVENDACOMTAXA NUMBER;
  V_QTMOVCAIXA NUMBER;
  V_NRSEQUMOVI VARCHAR2(10);
  V_DTMIN DATE;
  V_DTMAX DATE;
  V_DTINICIOINT DATE;
  V_GERAFIN VARCHAR2(01);
  V_GERAFINCNC VARCHAR2(01);
  V_PARCELAVENDA NUMBER;
  V_QTPARCELAVENDA NUMBER;
  
  V_TOKENFALSE VARCHAR2(01);

  PROCEDURE COMMITA
  AS
  BEGIN
      V_COMMIT := V_COMMIT + 1;
      IF V_COMMIT = V_DARCOMMIT THEN
         V_COMMIT := 0;
         COMMIT;
      END IF;
  END;
BEGIN
  V_TOKENFALSE := 0;

  BEGIN
    SELECT COUNT(*)
      INTO V_TOKENFALSE
      FROM TOKENCNC;
  EXCEPTION
     WHEN NO_DATA_FOUND THEN
         V_TOKENFALSE := 0;
  END;
  IF V_TOKENFALSE > 0 THEN
    V_COMMIT := 0;
    V_DARCOMMIT := 700;
    
      BEGIN
         SELECT COUNT(*)
           INTO V_COUNT
           FROM RETORIGVENDA;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_COUNT := 0;
      END;
      IF V_COUNT > 0 THEN
         V_USACNC := 'S';
      ELSE
         V_USACNC := 'N';
      END IF;
    
      V_DTMIN := TRUNC(SYSDATE);
      V_DTMAX := TRUNC(SYSDATE);
      BEGIN
         SELECT MIN(TRUNC(V.DTVENDA)) DTMIN, MAX(TRUNC(V.DTVENDA))
           INTO V_DTMIN, V_DTMAX
           FROM TIPORECE T,  MOVCAIXA M, VENDA V, FILIAL F, PARAVEND P
          WHERE M.CDTIPORECE = T.CDTIPORECE
            AND T.IDTIPORECE IN ('1', '2', 'F', 'G') -- Credito, Debito, Alimentacao e Refeicao
            AND M.IDTIPOMOVIVE = 'E'
            AND M.CDFILIAL = V.CDFILIAL
            AND M.CDCAIXA = V.CDCAIXA
            AND M.NRSEQVENDA = V.NRSEQVENDA
            AND V.DTENTRVENDA BETWEEN SYSDATE -30 AND SYSDATE
            AND M.IDREPLICADOCNC = 'N'
            AND F.CDFILIAL = V.CDFILIAL
            AND F.CDFILIAL = M.CDFILIAL
            AND F.CDFILIAL = P.CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_DTMIN := TRUNC(SYSDATE);
            V_DTMAX := TRUNC(SYSDATE);
      END;
    
      FOR C_VENDAS IN
          (SELECT X.*, TF.IDGERAFINFIL, TF.IDCONTAREPFOS
             FROM (SELECT V.CDFILIAL, V.CDCAIXA, M.NRSEQUMOVI, M.DTABERCAIX,
                         M.CDNSUHOSTTEF, M.QTPARCRECEB NRQTPARCELA, M.QTPARCRECEB QTPARCELA, V.NRCUPOMFIS, M.CDTIPORECE,
                         TRUNC(V.DTVENDA) DTVENDA, '-' NRAUTORIZACAO, 'S' IDORIGFOS,
                         DECODE(M.NRCARTBANCO, NULL, 'N', 'S') IDVENDATEF,
                         M.VRMOVIVEND VRVENDA,
                         SUM(VRMOVIVEND) OVER (PARTITION BY M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQVENDA) VRVENDATOT,
                         F.CDEMPRESA, F.CDINSCESTA, F.CDINSCMUNI,
                         T.CDCLIENTE, P.CDTPOPERCNTREC CDTIPOOPER, NVL(P.CDSERIECNTREC, P.CDSERIE) CDSERIE,
                         P.IDENTRSAIDOP, NVL(T.VRTAXAADMI, 0) VRTAXAADM, NVL(P.CDREDUCONT, T.CDREDUCONT) CDREDUCONT,
                         T.CDTPCTRECEB, T.CDAJTXADMREC,
                         M.NRORG, T.IDGERAFIN, NVL(T.IDCONTAPREVCNC, 'N') IDCONTAPREVCNC,
                         NVL(P.IDCONTTXSERVSEP, 'N') IDCONTTXSERVSEP, P.CDTPAJTXSERV, P.CDTPAJTXADMSERV, V.NRSEQVENDA, P.VRTAXAADMISERV
                    FROM TIPORECE T,  MOVCAIXA M, VENDA V, FILIAL F, PARAVEND P, V_FILIALLOJACAIXA FLC
                   WHERE M.CDTIPORECE = T.CDTIPORECE
                     AND T.IDTIPORECE IN ('1', '2', 'F', 'G') -- Credito, Debito, Alimentacao e Refeicao
                     AND M.IDTIPOMOVIVE = 'E'
                     AND M.CDFILIAL = V.CDFILIAL
                     AND M.CDCAIXA = V.CDCAIXA
                     AND M.NRSEQVENDA = V.NRSEQVENDA
                     AND V.DTENTRVENDA BETWEEN SYSDATE -30 AND SYSDATE
                     AND M.IDREPLICADOCNC = 'N'
                     AND V.CDFILIAL = FLC.CDFILIAL
                     AND V.CDLOJA = FLC.CDLOJA
                     AND V.CDCAIXA = FLC.CDCAIXA
                     AND F.CDFILIAL = V.CDFILIAL
                     AND F.CDFILIAL = M.CDFILIAL
                     AND F.CDFILIAL = P.CDFILIAL) X LEFT JOIN TIPORECEFILIAL TF
                                                           ON TF.CDFILIAL = X.CDFILIAL
                                                          AND TF.CDTIPORECE = X.CDTIPORECE) LOOP
    
          V_NRDIASVENC := 0;
          BEGIN
             SELECT NVL(NVL(PR.NRDIASVENC, T.NRDIASADMI), 0)
               INTO V_NRDIASVENC
               FROM TIPORECE T LEFT JOIN PARAVEND P
                                      ON P.CDFILIAL = C_VENDAS.CDFILIAL
                               LEFT JOIN PRODUTOADQ PR
                                 ON PR.CDTIPORECE = T.CDTIPORECE
              WHERE T.CDTIPORECE = C_VENDAS.CDTIPORECE;
          EXCEPTION
             WHEN NO_DATA_FOUND THEN
                V_NRDIASVENC := 0;
          END;
          V_PARCELAVENDA := 0;
          V_QTPARCELAVENDA := 0;
    
          IF C_VENDAS.NRQTPARCELA = 1 THEN
              V_PARCELAVENDA := 0;
              V_QTPARCELAVENDA := 0;
          ELSE
              V_PARCELAVENDA := C_VENDAS.NRQTPARCELA;
              V_QTPARCELAVENDA := 1;
          END IF;
    
          SELECT CNC_DATA_VENC(C_VENDAS.CDFILIAL, C_VENDAS.DTVENDA, V_NRDIASVENC, C_VENDAS.CDTIPORECE)
            INTO V_DTVENCIMENTO
            FROM DUAL;
    
          IF C_VENDAS.NRQTPARCELA = 1 THEN
              /* INSERAAFO DA TABELA DE CONSOLIDAAAFO. */
              NOVO_CODIGO_NT('CONSMOVCAIXA', V_SEQVARCHAR);
              V_NRCONSMOVCAIXA := TO_NUMBER(V_SEQVARCHAR);
              INSERT INTO CONSMOVCAIXA
                 (NRCONSMOVCAIXA, CDFILIAL, CDCAIXA, NRSEQUMOVI, DTABERCAIX,
                  CDNSU, NRQTPARCELA, NRPARCELA, CDCUPOM, CDTIPORECE,
                  DTVENDA, NRAUTORIZACAO, IDORIGFOS, IDVENDATEF, VRVENDA, VRVENDATOT, NRORG, DTVENCIMENTO)
              VALUES
                 (V_NRCONSMOVCAIXA, C_VENDAS.CDFILIAL, C_VENDAS.CDCAIXA, C_VENDAS.NRSEQUMOVI, C_VENDAS.DTABERCAIX,
                  C_VENDAS.CDNSUHOSTTEF, V_PARCELAVENDA, V_QTPARCELAVENDA, C_VENDAS.NRCUPOMFIS, C_VENDAS.CDTIPORECE,
                  C_VENDAS.DTVENDA, C_VENDAS.NRAUTORIZACAO, C_VENDAS.IDORIGFOS, C_VENDAS.IDVENDATEF, C_VENDAS.VRVENDA, C_VENDAS.VRVENDATOT, C_VENDAS.NRORG, V_DTVENCIMENTO);
              UPDATE MOVCAIXA
                 SET IDREPLICADOCNC = 'S'
               WHERE CDFILIAL = C_VENDAS.CDFILIAL
                 AND CDCAIXA = C_VENDAS.CDCAIXA
                 AND NRSEQUMOVI = C_VENDAS.NRSEQUMOVI
                 AND DTABERCAIX = C_VENDAS.DTABERCAIX;
    
              V_CDCLASSFINA := NULL;
              BEGIN
                 SELECT CDCLASSFINA
                   INTO V_CDCLASSFINA
                   FROM TIPOCTRECEBER
                  WHERE CDTPCTRECEB = C_VENDAS.CDTPCTRECEB;
              EXCEPTION
                 WHEN NO_DATA_FOUND THEN
                    V_CDCLASSFINA := NULL;
              END;
    
              V_DTINICIOINT := NULL;
              BEGIN
                 SELECT TRUNC(DTINICIOINT)
                   INTO V_DTINICIOINT
                   FROM CTRLDTFINCNC;
              EXCEPTION
                 WHEN NO_DATA_FOUND THEN
                    V_DTINICIOINT := NULL;
              END;
    
             V_GERAFIN := NVL(C_VENDAS.IDGERAFINFIL, C_VENDAS.IDGERAFIN);
             V_GERAFINCNC := NVL(C_VENDAS.IDCONTAREPFOS, C_VENDAS.IDCONTAPREVCNC);
    
              /* VERIFICA SE TODAS PARAMETRIZACOES NECESSARIAS PARA GERACAO DA CONTA A RECEBER ESTAO PREENCHIDAS */
              IF C_VENDAS.CDCLIENTE IS NOT NULL AND
                 C_VENDAS.CDSERIE IS NOT NULL AND
                 C_VENDAS.CDTIPOOPER IS NOT NULL AND
                 C_VENDAS.CDINSCESTA IS NOT NULL AND
                 C_VENDAS.CDINSCMUNI IS NOT NULL AND
                 C_VENDAS.CDEMPRESA IS NOT NULL AND
                 C_VENDAS.IDENTRSAIDOP IS NOT NULL AND
                 C_VENDAS.CDREDUCONT IS NOT NULL AND
                 C_VENDAS.CDTPCTRECEB IS NOT NULL AND
                 V_CDCLASSFINA IS NOT NULL AND
                 C_VENDAS.CDAJTXADMREC IS NOT NULL AND
                 V_GERAFIN = 'N' AND
                 V_GERAFINCNC= 'S' AND
                 V_DTINICIOINT <= TRUNC(SYSDATE) THEN
                 FINANCEIRO_FOS_CNC(V_NRCONSMOVCAIXA);
              END IF;
              COMMITA;
          ELSE
              FOR i IN V_QTPARCELAVENDA..V_PARCELAVENDA LOOP
                /* INSERAAFO DA TABELA DE CONSOLIDAAAFO. */
                NOVO_CODIGO_NT('CONSMOVCAIXA', V_SEQVARCHAR);
                V_NRCONSMOVCAIXA := TO_NUMBER(V_SEQVARCHAR);
                INSERT INTO CONSMOVCAIXA
                   (NRCONSMOVCAIXA, CDFILIAL, CDCAIXA, NRSEQUMOVI, DTABERCAIX,
                    CDNSU, NRQTPARCELA, NRPARCELA, CDCUPOM, CDTIPORECE,
                    DTVENDA, NRAUTORIZACAO, IDORIGFOS, IDVENDATEF, VRVENDA, VRVENDATOT, NRORG, DTVENCIMENTO)
                VALUES
                   (V_NRCONSMOVCAIXA, C_VENDAS.CDFILIAL, C_VENDAS.CDCAIXA, C_VENDAS.NRSEQUMOVI, C_VENDAS.DTABERCAIX,
                    C_VENDAS.CDNSUHOSTTEF, V_PARCELAVENDA, V_QTPARCELAVENDA, C_VENDAS.NRCUPOMFIS, C_VENDAS.CDTIPORECE,
                    C_VENDAS.DTVENDA, C_VENDAS.NRAUTORIZACAO, C_VENDAS.IDORIGFOS, C_VENDAS.IDVENDATEF, (C_VENDAS.VRVENDA/V_PARCELAVENDA), C_VENDAS.VRVENDATOT, C_VENDAS.NRORG, V_DTVENCIMENTO);
                UPDATE MOVCAIXA
                   SET IDREPLICADOCNC = 'S'
                 WHERE CDFILIAL = C_VENDAS.CDFILIAL
                   AND CDCAIXA = C_VENDAS.CDCAIXA
                   AND NRSEQUMOVI = C_VENDAS.NRSEQUMOVI
                   AND DTABERCAIX = C_VENDAS.DTABERCAIX;
    
                V_CDCLASSFINA := NULL;
                BEGIN
                   SELECT CDCLASSFINA
                     INTO V_CDCLASSFINA
                     FROM TIPOCTRECEBER
                    WHERE CDTPCTRECEB = C_VENDAS.CDTPCTRECEB;
                EXCEPTION
                   WHEN NO_DATA_FOUND THEN
                      V_CDCLASSFINA := NULL;
                END;
    
                V_DTINICIOINT := NULL;
                BEGIN
                   SELECT TRUNC(DTINICIOINT)
                     INTO V_DTINICIOINT
                     FROM CTRLDTFINCNC;
                EXCEPTION
                   WHEN NO_DATA_FOUND THEN
                      V_DTINICIOINT := NULL;
                END;
    
               V_GERAFIN := NVL(C_VENDAS.IDGERAFINFIL, C_VENDAS.IDGERAFIN);
               V_GERAFINCNC := NVL(C_VENDAS.IDCONTAREPFOS, C_VENDAS.IDCONTAPREVCNC);
    
                /* VERIFICA SE TODAS PARAMETRIZACOES NECESSARIAS PARA GERACAO DA CONTA A RECEBER ESTAO PREENCHIDAS */
                IF C_VENDAS.CDCLIENTE IS NOT NULL AND
                   C_VENDAS.CDSERIE IS NOT NULL AND
                   C_VENDAS.CDTIPOOPER IS NOT NULL AND
                   C_VENDAS.CDINSCESTA IS NOT NULL AND
                   C_VENDAS.CDINSCMUNI IS NOT NULL AND
                   C_VENDAS.CDEMPRESA IS NOT NULL AND
                   C_VENDAS.IDENTRSAIDOP IS NOT NULL AND
                   C_VENDAS.CDREDUCONT IS NOT NULL AND
                   C_VENDAS.CDTPCTRECEB IS NOT NULL AND
                   V_CDCLASSFINA IS NOT NULL AND
                   C_VENDAS.CDAJTXADMREC IS NOT NULL AND
                   V_GERAFIN = 'N' AND
                   V_GERAFINCNC= 'S' AND
                   V_DTINICIOINT <= TRUNC(SYSDATE) THEN
                   FINANCEIRO_FOS_CNC(V_NRCONSMOVCAIXA);
                END IF;
                COMMITA;
                V_DTVENCIMENTO := V_DTVENCIMENTO+30;
                V_QTPARCELAVENDA := V_QTPARCELAVENDA+1;
              END LOOP;
          END IF;
       END LOOP;
    
       /* CONTABILIZA AS VENDAS */
       FOR C_CTB IN
          (SELECT DISTINCT C.CDFILIAL, C.DTVENDA, C.CDTIPORECE
             FROM CONSMOVCAIXA C, TIPORECE T, TIPOCTRECEBER TC
            WHERE C.DTVENDA BETWEEN V_DTMIN AND V_DTMAX
              AND C.CDTIPORECE = T.CDTIPORECE
              AND T.CDTPCTRECEB = TC.CDTPCTRECEB
              AND TC.IDCTBLCTREC = 'S'
              AND IDCONCILIADO = 'P'
              AND EXISTS (SELECT 1
                           FROM CONTARECEBER CR
                          WHERE C.CDFILIALNF = CR.CDFILIAL
                            AND C.NRLANCTONF = CR.NRLANCTONF)
            ORDER BY C.DTVENDA, C.CDTIPORECE, C.CDFILIAL) LOOP
          CONTABILIZA_CONTAS_CNC(C_CTB.CDFILIAL, C_CTB.DTVENDA, C_CTB.CDTIPORECE);
       END LOOP;
    
    
       /* ROTINA CRIADA PARA RELACIONAR LIMPAR A CONSMOVCAIXA CASO ALGUMA MOVIMENTACAO DA MOVCAIXA SEJA CANCELADA APOS A REPLICACAO */
       /* BUSCA AS ABERTURAS DE CAIXA QUE TIVEREAM MOVIMENTACOES CANCELADAS REPLICADAS */
       FOR C_CANC IN
          (SELECT DISTINCT M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX
             FROM CONSMOVCAIXA C, MOVCAIXA M
            WHERE C.IDCONCILIADO = 'C'
              AND C.CDFILIAL = M.CDFILIAL
              AND C.CDCAIXA = M.CDCAIXA
              AND C.DTABERCAIX = M.DTABERCAIX
              AND C.NRSEQUMOVI = M.NRSEQUMOVI
              AND M.IDTIPOMOVIVE = 'C'
              AND EXISTS (SELECT 1
                            FROM MOVCAIXA CM
                           WHERE CM.CDFILIAL = C.CDFILIAL
                             AND CM.CDCAIXA = C.CDCAIXA
                             AND CM.DTABERCAIX = C.DTABERCAIX
                             AND CM.VRMOVIVEND = C.VRVENDA
                             AND CM.CDTIPORECE = C.CDTIPORECE
                             AND CM.NRSEQUMOVI <> C.NRSEQUMOVI)) LOOP
          V_QTMOVCAIXA := 0;
          FOR C_MOVCAIXA IN
             (SELECT COUNT(*) OVER (PARTITION BY CDFILIAL, CDCAIXA, DTABERCAIX) QTMOVCAIXA, M.*
                FROM MOVCAIXA M, TIPORECE T
               WHERE CDFILIAL = C_CANC.CDFILIAL
                 AND CDCAIXA = C_CANC.CDCAIXA
                 AND DTABERCAIX = C_CANC.DTABERCAIX
                 AND M.CDTIPORECE = T.CDTIPORECE
                 AND M.IDTIPOMOVIVE IN ('C', 'E')
                 AND T.IDTIPORECE IN ('1', '2', 'F', 'G') -- Credito, Debito, Alimentacao e Refeicao
                 AND NOT EXISTS (SELECT 1
                                   FROM CONSMOVCAIXA C
                                  WHERE C.CDFILIAL = M.CDFILIAL
                                    AND C.CDCAIXA = M.CDCAIXA
                                    AND C.DTABERCAIX = M.DTABERCAIX
                                    AND C.NRSEQUMOVI = M.NRSEQUMOVI
                                    AND M.IDTIPOMOVIVE = 'E'
                                    AND C.IDCONCILIADO = 'C')
               ORDER BY M.CDFILIAL, M.CDCAIXA, M.DTABERCAIX, M.NRSEQUMOVI) LOOP
             V_QTMOVCAIXA := V_QTMOVCAIXA + 1;
             IF C_MOVCAIXA.IDTIPOMOVIVE = 'E' THEN
                BEGIN
                   SELECT COUNT(*), MIN(C.NRSEQUMOVI)
                     INTO V_COUNT, V_NRSEQUMOVI
                     FROM CONSMOVCAIXA C
                    WHERE C.CDFILIAL = C_MOVCAIXA.CDFILIAL
                      AND C.CDCAIXA = C_MOVCAIXA.CDCAIXA
                      AND C.DTABERCAIX = C_MOVCAIXA.DTABERCAIX
                      AND C.CDTIPORECE = C_MOVCAIXA.CDTIPORECE
                      AND C.VRVENDA = C_MOVCAIXA.VRMOVIVEND
                      AND C.IDCONCILIADO = 'C'
                      AND EXISTS (SELECT 1
                                    FROM MOVCAIXA M
                                   WHERE C.CDFILIAL = M.CDFILIAL
                                     AND C.CDCAIXA = M.CDCAIXA
                                     AND C.DTABERCAIX = M.DTABERCAIX
                                     AND C.NRSEQUMOVI = M.NRSEQUMOVI
                                     AND M.IDTIPOMOVIVE = 'C');
                EXCEPTION
                   WHEN NO_DATA_FOUND THEN
                      V_COUNT := 0;
                END;
    
                IF V_COUNT > 0 THEN
                   V_NRCONSMOVCAIXA := NULL;
                   BEGIN
                      SELECT NRCONSMOVCAIXA
                        INTO V_NRCONSMOVCAIXA
                        FROM CONSMOVCAIXA
                       WHERE CDFILIAL = C_MOVCAIXA.CDFILIAL
                         AND CDCAIXA = C_MOVCAIXA.CDCAIXA
                         AND DTABERCAIX = C_MOVCAIXA.DTABERCAIX
                         AND NRSEQUMOVI = C_MOVCAIXA.NRSEQUMOVI;
                   EXCEPTION
                      WHEN NO_DATA_FOUND THEN
                         V_NRCONSMOVCAIXA := NULL;
                   END;
                   IF V_NRCONSMOVCAIXA IS NOT NULL THEN
                      UPDATE CONSMOVCAIXA
                         SET NRSEQUMOVI = C_MOVCAIXA.NRSEQUMOVI
                       WHERE CDFILIAL = C_MOVCAIXA.CDFILIAL
                         AND CDCAIXA = C_MOVCAIXA.CDCAIXA
                         AND DTABERCAIX = C_MOVCAIXA.DTABERCAIX
                         AND NRSEQUMOVI = V_NRSEQUMOVI;
                         
                      UPDATE CONSMOVCAIXA
                         SET NRSEQUMOVI = V_NRSEQUMOVI
                       WHERE NRCONSMOVCAIXA = V_NRCONSMOVCAIXA;
                   END IF;
                END IF;
    
                IF V_QTMOVCAIXA = C_MOVCAIXA.QTMOVCAIXA THEN
                   DELETE
                     FROM ITEMCORVENDA I
                    WHERE EXISTS (SELECT 1
                                    FROM CONSMOVCAIXA C
                                   WHERE C.CDFILIAL = C_MOVCAIXA.CDFILIAL
                                     AND C.CDCAIXA = C_MOVCAIXA.CDCAIXA
                                     AND C.DTABERCAIX = C_MOVCAIXA.DTABERCAIX
                                     AND C.IDCONCILIADO = 'P'
                                     AND C.NRCONSMOVCAIXA = I.NRCONSMOVCAIXA);
                   DELETE
                     FROM DIVCONCILIACAO D
                    WHERE EXISTS (SELECT 1
                                    FROM CONSMOVCAIXA C
                                   WHERE C.CDFILIAL = C_MOVCAIXA.CDFILIAL
                                     AND C.CDCAIXA = C_MOVCAIXA.CDCAIXA
                                     AND C.DTABERCAIX = C_MOVCAIXA.DTABERCAIX
                                     AND C.IDCONCILIADO = 'P'
                                     AND C.NRCONSMOVCAIXA = D.NRCONSMOVCAIXA); 
                   DELETE
                     FROM CONSMOVCAIXA C
                    WHERE C.CDFILIAL = C_MOVCAIXA.CDFILIAL
                      AND C.CDCAIXA = C_MOVCAIXA.CDCAIXA
                      AND C.DTABERCAIX = C_MOVCAIXA.DTABERCAIX
                      AND C.IDCONCILIADO = 'P'
                      AND EXISTS (SELECT 1
                                    FROM MOVCAIXA M
                                   WHERE M.CDFILIAL = C.CDFILIAL
                                     AND M.CDCAIXA = C.CDCAIXA
                                     AND M.DTABERCAIX = C.DTABERCAIX
                                     AND M.NRSEQUMOVI = C.NRSEQUMOVI
                                     AND M.IDTIPOMOVIVE = 'C');
                    COMMIT;
                END IF;
             END IF;
          END LOOP;
       END LOOP;
       COMMIT;
  END IF;
END;
/