create or replace PROCEDURE GERA_FINANCEIRO_CNC(P_SEQESTABELEC IN NUMBER,
                                                P_DTINICIAL IN DATE,
                                                P_DTFINAL IN DATE)
AS
  V_TEMP VARCHAR2(20);
  V_NRLANCTONF VARCHAR2(10);
  V_CDCLASSFINA VARCHAR2(6);
  V_CDTIPOOPER VARCHAR2(2);
  V_CDEMPRESA  VARCHAR2(2);
  V_CDINSCESTA VARCHAR2(16);
  V_CDINSCMUNI VARCHAR2(16);
  V_IDENTRSAIDOP VARCHAR2(1);
  V_CDTPCTRECEB VARCHAR2(6);
  V_NRMOVBANC VARCHAR2(20);
  V_NRMOVIBCO VARCHAR2(20);
  V_CDAJUCTREC VARCHAR2(4);
  V_CDREDUCONT VARCHAR2(3); 
  V_CDTPDEBIBANC  VARCHAR2(4);
  V_CDCLIENTE VARCHAR2(21);
  V_CDSERIE VARCHAR2(5);
  V_NRLANBOL VARCHAR2(20);
  V_NRLANCCONT VARCHAR2(20);
  V_COUNT NUMBER;
  V_VRATUALCONTA NUMBER;
  V_VRATUALAJUSTE NUMBER;
  V_DESCMOV VARCHAR2(100);
  V_DESCMOVBANC VARCHAR2(100);
  V_CDCONTCTBL VARCHAR2(20);
  V_IDTIPOCOME VARCHAR2(01);
  V_SEQUENCIAL NUMBER;
  V_CDCONTACLIENTE VARCHAR2(20);
  V_CDFILIAL VARCHAR2(04);
  V_CDTPCREDBANC VARCHAR2(04);
  V_DSAUX VARCHAR2(100);
  V_NMAUX VARCHAR2(100);
  V_IDDEBCRED VARCHAR2(01);
  V_NMADQUIRENTE VARCHAR2(40);
  V_CONTACTBLCONTCORR VARCHAR2(20);
  V_IDTIPOCOMECONTCORR VARCHAR2(01);
  V_NRADQUIRENTE NUMBER;
  V_NRADQUIRENTEVD NUMBER;
  V_NRPRODUTOADQVD NUMBER;
  V_NMPRODUTOADQ VARCHAR2(50);
  V_EXISTEREGRAEST VARCHAR2(01);
  V_VDAJUSTEAUT VARCHAR2(01);
  V_EXISTEAJUSTE VARCHAR2(01);
  V_NRORG NUMBER;
  V_CHAVE VARCHAR2(50);
  V_IDCONTABILIZA VARCHAR2(01);
  V_CTBTIPOCONTA VARCHAR(01);
  V_CTBTIPODEBI VARCHAR2(01);
  V_CTBTIPOCRED VARCHAR2(01);
  V_DTINICIOINT DATE;
  V_PARAMVALIDO VARCHAR2(01);
  V_PARAMVALIDOCNC VARCHAR2(01);
  V_PARAMVALIDOCTB VARCHAR2(01);
  V_OPERACFINOK VARCHAR2(01);
  V_DTATUAL DATE;
  V_DTFINAL DATE;
  V_VRTOTVENDA NUMBER;
  V_VRVENDASEMTAXA NUMBER;
  V_VRTOTGORJ NUMBER;
  V_PERCGORJ NUMBER;
  V_VRTXADMTXSERV NUMBER;
  V_VRTAXASERVICO NUMBER;
  V_PERCVENDACOMTAXA NUMBER;
  V_VRPERCGORJLOJA NUMBER;
  V_QTERROPERCTB NUMBER;
  V_DTVENCIMENTO DATE;
  V_NRDIASVENC NUMBER;
  V_VRSOMABOLETO NUMBER;
  V_NOVOCODIGO VARCHAR2(20);
  V_NRBAIXAREC VARCHAR2(10);
  V_CHAVEBAIXA VARCHAR2(40);
   CURSOR C_REGRAS_EST IS
      SELECT IDAJUSTEAUT
        FROM VALIDACAOADQEST
       WHERE NRESTABELEC = P_SEQESTABELEC
         AND NRADQUIRENTE = V_NRADQUIRENTE
       ORDER BY NRORDEM;
   CURSOR C_REGRAS IS
      SELECT IDAJUSTEAUT
        FROM VALIDACAOADQ
       WHERE NRADQUIRENTE = V_NRADQUIRENTE
       ORDER BY NRORDEM;
  /* GRAVA OS ERROS DA CONTABILIZAO */
  PROCEDURE ERROSTEMP(P_CDEMPRESA IN VARCHAR,
                      P_NRLANCCONT IN VARCHAR)
  AS
    V_CONTA VARCHAR2(20);
  BEGIN
     FOR C_ERROS IN
        (SELECT E.CDERROTEMP, FORMATA_CDCONTCTBL(L.CDCONTCTBL) CDCONTCTBL, NMCONTCTBL,
                L.CDDOCUTEMP, TO_CHAR(DTLANCCTBTEMP, 'DD/MM/YYYY') DTLANCCTBTEMP
           FROM ERROCTBTEMP E, LANCCTBTEMP L LEFT JOIN CONTCTBL C
                                                    ON C.CDCONTCTBL = L.CDCONTCTBL
          WHERE E.CDEMPRESA = P_CDEMPRESA
            AND E.NRLANCCTBTEMP = P_NRLANCCONT
            AND E.CDEMPRESA = L.CDEMPRESA
            AND E.NRLANCCTBTEMP = L.NRLANCCTBTEMP
            AND E.NRSEQCTBTEMP = L.NRSEQCTBTEMP) LOOP
        CASE
           WHEN C_ERROS.CDERROTEMP = '006' THEN
              GRAVAERROCTBCNC(P_SEQESTABELEC,
                              V_DTATUAL,
                              V_DTFINAL,
                              'VALOR DA PARTIDA ZERADO. CONTA CONTBIL'||C_ERROS.CDCONTCTBL||' - '||C_ERROS.NMCONTCTBL,
                              'VERIFICAR O VALOR DE ORIGEM. '||V_DSAUX||' DOCUMENTO: '||C_ERROS.CDDOCUTEMP|| ' DATA: '||C_ERROS.DTLANCCTBTEMP,
                              'S',
                              V_NRORG);
           WHEN C_ERROS.CDERROTEMP = '007' THEN
              GRAVAERROCTBCNC(P_SEQESTABELEC,
                              V_DTATUAL,
                              V_DTFINAL,
                              'VALOR DO RATEIO ZERADO. CONTA CONTBIL'||C_ERROS.CDCONTCTBL||' - '||C_ERROS.NMCONTCTBL,
                              'VERIFICAR O VALOR DE ORIGEM. '||V_DSAUX||' DOCUMENTO: '||C_ERROS.CDDOCUTEMP|| ' DATA: '||C_ERROS.DTLANCCTBTEMP,
                              'S',
                              V_NRORG);
        END CASE;
     END LOOP;
  END;
BEGIN
  DELETE
    FROM LOGERROCTBCNC
   WHERE NRESTABELEC = P_SEQESTABELEC;
  COMMIT;
    V_DTINICIOINT := NULL;
    BEGIN
        SELECT TRUNC(CTF.DTINICIOINT)
        INTO V_DTINICIOINT
        FROM CTRLDTFINCNCFIL CTF
            JOIN ESTABELECIMENTO  F
              ON CTF.CDFILIAL = F.CDFILIAL
        WHERE F.NRESTABELEC = P_SEQESTABELEC;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
           V_DTINICIOINT := NULL;
    END;
    IF V_DTINICIOINT IS NULL THEN
      BEGIN
         SELECT TRUNC(DTINICIOINT)
           INTO V_DTINICIOINT
           FROM CTRLDTFINCNC;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_DTINICIOINT := NULL;
      END;
    END IF;
  V_DTATUAL := P_DTINICIAL;
  IF V_DTINICIOINT IS NOT NULL THEN
     IF V_DTATUAL < V_DTINICIOINT THEN
        V_DTATUAL := V_DTINICIOINT;
     END IF;
  END IF;
  V_DTFINAL := P_DTFINAL;
  WHILE ((V_DTATUAL <= V_DTFINAL) AND (V_DTINICIOINT IS NOT NULL)) LOOP
     V_COUNT := 0;
     BEGIN
        SELECT COUNT(*)
          INTO V_COUNT
          FROM (SELECT DISTINCT A.NRADQUIRENTE, A.NMADQUIRENTE, A.CDCLIENTE
                  FROM RETVENDAADQ R, ADQUIRENTE A
                 WHERE R.NRESTABELEC = P_SEQESTABELEC
                   AND ((R.DTVENDA = V_DTATUAL) OR (DTCREDITO = V_DTATUAL))
                   AND NVL(R.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT
                   AND R.NRADQUIRENTE = A.NRADQUIRENTE
                   AND A.IDGERAFINANC = 'S'
                 UNION
                SELECT DISTINCT A.NRADQUIRENTE, A.NMADQUIRENTE, A.CDCLIENTE
                  FROM RETFINANCADQ RF, ADQUIRENTE A
                 WHERE RF.NRESTABELEC = P_SEQESTABELEC
                   AND RF.DTCREDITO = V_DTATUAL
                   AND NVL(RF.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT
                   AND RF.NRADQUIRENTE = A.NRADQUIRENTE
                   AND A.IDGERAFINANC = 'S');
     EXCEPTION
        WHEN NO_DATA_FOUND THEN
           V_COUNT := 0;
     END;
     IF V_COUNT > 0 THEN
        V_PARAMVALIDOCNC := 'N';
        V_PARAMVALIDOCTB := 'N';
        V_OPERACFINOK := 'N';
        /* VERIFICA SE AS PARAMETRIZACOES BASICAS DO FINANCEIRO ESTAO PARAMETRIZADAS. */
        V_PARAMVALIDOCNC := VERIFICA_PARAMETROS_CNC(P_SEQESTABELEC, V_DTATUAL, V_DTATUAL);
        /* VERIFICA SE AS PARAMETRIZACOES BASICAS PARA A CONTABILIDADE ESTAO OK */
        V_PARAMVALIDOCTB := VERIFICA_PARAMETROS_CNC_CTB(P_SEQESTABELEC, V_DTATUAL, V_DTATUAL);
        /* VERIFICA SE A RODA PODE SER RODADA SEM GERAR ERROS DE OPERACAO NO FINANCEIRO */
        V_OPERACFINOK := VERIFICA_OPERACOES_CNC_FIN(P_SEQESTABELEC, V_DTATUAL, V_DTATUAL);
        IF V_PARAMVALIDOCNC = 'S' AND V_PARAMVALIDOCTB = 'S' AND V_OPERACFINOK = 'S' THEN
           V_PARAMVALIDO := 'S';
        ELSE
           V_PARAMVALIDO := 'N';
        END IF;
        IF V_PARAMVALIDO = 'S' THEN
           /* BUSCA O ESTABELECIMENTO E SUA FILIAL PARAMETRIZADA */
           FOR C_ESTABELEC IN
             (SELECT E.NRESTABELEC, E.CDESTABELEC, E.NMESTABELEC, E.CDFILIAL,
                     F.CDEMPRESA, E.CDINSCESTA, E.CDINSCMUNI, E.NRORG, E.CDSERIE,
                     E.IDCTRLTXSERV, E.CDTPAJUCTTXSRV, E.CDTPAJUCTTXADM, E.VRPERCTXADMSERV
                FROM ESTABELECIMENTO E LEFT JOIN FILIAL F
                                              ON E.CDFILIAL = F.CDFILIAL
               WHERE NRESTABELEC = P_SEQESTABELEC) LOOP
             V_NRORG := C_ESTABELEC.NRORG;
             /* FILTRA TODAS AS ADQUIRENTES USADAS NO PERIODO NO SISTEMA */
             FOR C_ADQUIRENTE IN
                (SELECT DISTINCT A.NRADQUIRENTE, A.NMADQUIRENTE, A.CDCLIENTE
                   FROM RETVENDAADQ R, ADQUIRENTE A
                  WHERE R.NRESTABELEC = P_SEQESTABELEC
                    AND R.DTVENDA = V_DTATUAL
                    AND NVL(R.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT
                    AND R.NRADQUIRENTE = A.NRADQUIRENTE
                    AND A.IDGERAFINANC = 'S'
                  UNION
                 SELECT DISTINCT A.NRADQUIRENTE, A.NMADQUIRENTE, A.CDCLIENTE
                   FROM RETFINANCADQ RF, ADQUIRENTE A
                  WHERE RF.NRESTABELEC = P_SEQESTABELEC
                    AND RF.DTCREDITO = V_DTATUAL
                    AND RF.NRADQUIRENTE = A.NRADQUIRENTE
                    AND NVL(RF.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT
                    AND A.IDGERAFINANC = 'S'
                  ORDER BY 1) LOOP
                V_NRADQUIRENTE := C_ADQUIRENTE.NRADQUIRENTE;
                V_NMADQUIRENTE := NVL(C_ADQUIRENTE.NMADQUIRENTE, '-');
                V_NRPRODUTOADQVD := -1;
                V_NRADQUIRENTEVD := -1;
                /* BUSCA AS VENDAS CONCILIADAS. */
                FOR C_CONTAS IN
                   (SELECT R.DTVENDA, R.NRRETVENDAADQ, R.NRESTABELEC, R.CDNSU, R.VRLIQVENDA,
                           R.VRBRUTVENDA, TRUNC(R.DTCREDITO) DTCREDITO, R.VRTAXAADM, ROUND(R.VRBRUTVENDA * (R.VRTAXAADM/100), 2) VRAJUSTE,
                           CM.CDFILIALNF CDFILIAL, CM.NRLANCTONF, R.IDCONCILIADO, R.NRPRODUTOADQ, R.NRADQUIRENTE,
                           CM.CDTIPORECE, R.NRCONCLANC, NF.IDSTATUS, NF.DTEMISSAO
                      FROM RETVENDAADQ R, NOTAFISCAL NF, CONSMOVCAIXA CM
                     WHERE NRESTABELEC = P_SEQESTABELEC
                       AND NRADQUIRENTE = C_ADQUIRENTE.NRADQUIRENTE
                       AND R.NRCONCLANC = CM.NRCONCLANC
                       AND CM.CDFILIALNF = NF.CDFILIAL
                       AND CM.NRLANCTONF = NF.NRLANCTONF
                       AND CM.DTVENDA = V_DTATUAL
                       AND CM.DTVENDA >= V_DTINICIOINT
                       AND R.IDCONCILIADO = 'C'
                       AND NOT EXISTS (SELECT 1
                                         FROM CONTARECEBER C
                                        WHERE C.CDFILIAL = CM.CDFILIAL
                                          AND C.NRLANCTONF = CM.NRLANCTONF
                                          AND C.IDSTATREC IN ('B', 'P'))
                     ORDER BY R.NRADQUIRENTE, R.NRPRODUTOADQ, R.DTVENDA, R.VRLIQVENDA, R.IDCONCILIADO) LOOP
                   /* VERIFICACAO SE UMA NOVA PARAMETRIZACAO DEVE SER BUSCADA. ISSO DEVE OCORRER SEMPRE QUE A ADQUIRENTE OU O PRODUTO
                      MUDE. */
                   IF ((V_NRADQUIRENTEVD <> C_ADQUIRENTE.NRADQUIRENTE) OR (V_NRPRODUTOADQVD <> C_CONTAS.NRPRODUTOADQ)) THEN
                      V_NRADQUIRENTEVD := C_ADQUIRENTE.NRADQUIRENTE;
                      V_NRPRODUTOADQVD := C_CONTAS.NRPRODUTOADQ;
                      V_IDENTRSAIDOP := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_ADQUIRENTE.NRADQUIRENTE, C_CONTAS.NRPRODUTOADQ, 'IDENTRSAIDOP', 'N', NULL, NULL);
                      V_CDTIPOOPER := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_ADQUIRENTE.NRADQUIRENTE, C_CONTAS.NRPRODUTOADQ, 'TIPOOPER', 'N', NULL, NULL);
                      V_CDREDUCONT := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_ADQUIRENTE.NRADQUIRENTE, C_CONTAS.NRPRODUTOADQ, 'CONTCORR', 'N', NULL, NULL);
                      V_CDTPCTRECEB := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_CONTAS.NRADQUIRENTE, C_CONTAS.NRPRODUTOADQ, 'TIPOCONTA', 'N', NULL, NULL);
                      IF V_CDTPCTRECEB IS NOT NULL THEN
                         V_CDCLASSFINA := NULL;
                         BEGIN
                            SELECT CDCLASSFINA
                               INTO V_CDCLASSFINA
                              FROM TIPOCTRECEBER
                             WHERE CDTPCTRECEB = V_CDTPCTRECEB;
                         EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                               V_CDCLASSFINA := NULL;
                         END;
                      END IF;
                      V_CDAJUCTREC :=  BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_CONTAS.NRADQUIRENTE, C_CONTAS.NRPRODUTOADQ, 'TIPOAJUSTE', 'N', NULL, NULL);
                   END IF;
                   UPDATE NOTAFISCAL
                      SET CDTIPOOPER = V_CDTIPOOPER,
                          NRNOTAFISC = C_CONTAS.CDNSU,
                          CDSERIE = C_ESTABELEC.CDSERIE,
                          CDEMPRESA = C_ESTABELEC.CDEMPRESA,
                          CDINSCESTA = C_ESTABELEC.CDINSCESTA,
                          CDINSCMUNI = C_ESTABELEC.CDINSCMUNI
                    WHERE CDFILIAL = C_CONTAS.CDFILIAL
                      AND NRLANCTONF = C_CONTAS.NRLANCTONF;
                   ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_CONTAS.CDFILIAL, C_CONTAS.DTCREDITO, 'E', V_CDCLASSFINA, 0, ABS(C_CONTAS.VRLIQVENDA));
                   UPDATE CONTARECEBER
                      SET CDTPCTRECEB = V_CDTPCTRECEB,
                          DTMOVFLUXO = C_CONTAS.DTCREDITO,
                          QTDIASVENREC = TRUNC(C_CONTAS.DTCREDITO - C_CONTAS.DTEMISSAO),
                          CDCLASSFINA = V_CDCLASSFINA
                    WHERE CDFILIAL = C_CONTAS.CDFILIAL
                      AND NRLANCTONF = C_CONTAS.NRLANCTONF;
                END LOOP;
                /* APAGA O BOLETO PARA POSTERIORMENTE ASSOCI-LOS A UM NICO BOLETO */
                FOR C_BOLETOS IN
                   (SELECT DISTINCT CR.CDFILIBOLREC, CR.NRLANBOLREC
                      FROM RETVENDAADQ R, NOTAFISCAL NF, CONSMOVCAIXA C, CONTARECEBER CR
                     WHERE NRESTABELEC = P_SEQESTABELEC
                       AND NRADQUIRENTE = C_ADQUIRENTE.NRADQUIRENTE
                       AND C.CDFILIALNF = NF.CDFILIAL
                       AND C.NRLANCTONF = NF.NRLANCTONF
                       AND C.DTVENDA = V_DTATUAL
                       AND C.DTVENDA >= V_DTINICIOINT
                       AND R.IDCONCILIADO = 'C'
                       AND C.NRCONCLANC = R.NRCONCLANC
                       AND C.CDFILIALNF = CR.CDFILIAL
                       AND C.NRLANCTONF = CR.NRLANCTONF
                       AND CR.IDSTATREC NOT IN ('B', 'P')) LOOP
                   V_COUNT := 0;
                   FOR C_CONTA_BOL IN
                      (SELECT DISTINCT C.CDFILIAL, C.NRLANCTONF, C.CDFILIBOLREC, C.NRLANBOLREC,
                              COUNT(*) OVER (PARTITION BY C.CDFILIBOLREC, C.NRLANBOLREC) QTCONTAS
                         FROM BOLETRECEBER B, CONTARECEBER C
                        WHERE B.CDFILIAL = C.CDFILIBOLREC
                          AND B.NRLANBOLREC = C.NRLANBOLREC
                          AND C.CDFILIBOLREC = C_BOLETOS.CDFILIBOLREC
                          AND C.NRLANBOLREC = C_BOLETOS.NRLANBOLREC
                         ORDER BY C.CDFILIBOLREC, C.NRLANBOLREC) LOOP
                      V_COUNT := V_COUNT + 1;
                      UPDATE CONTARECEBER
                         SET CDFILIBOLREC = NULL,
                             NRLANBOLREC = NULL
                       WHERE CDFILIAL = C_CONTA_BOL.CDFILIAL
                         AND NRLANCTONF = C_CONTA_BOL.NRLANCTONF;
                      IF V_COUNT = C_CONTA_BOL.QTCONTAS THEN
                         DELETE
                           FROM BOLETRECEBER
                          WHERE CDFILIAL = C_CONTA_BOL.CDFILIBOLREC
                            AND NRLANBOLREC = C_CONTA_BOL.NRLANBOLREC;
                      END IF;
                   END LOOP;
                END LOOP;
                /* ASSOCIACAO DE CONTAS EM UM UNICO BOLETO */
                V_NRADQUIRENTEVD := -1;
                V_NRPRODUTOADQVD := -1;
                FOR C_ASSOCIACAO_BOL IN
                   (SELECT DISTINCT NF.CDCLIENTE, C.CDTPCTRECEB, CM.DTVENCIMENTO DTCREDITO, RV.NRPRODUTOADQ, CM.CDTIPORECE, SUM(ROUND(VRATUAREC, 2)) VRFINABOL
                      FROM NOTAFISCAL NF, CONTARECEBER C, RETVENDAADQ RV, CONSMOVCAIXA CM
                     WHERE CM.DTVENDA = V_DTATUAL
                       AND RV.NRESTABELEC = P_SEQESTABELEC
                       AND RV.NRADQUIRENTE = C_ADQUIRENTE.NRADQUIRENTE
                       AND NF.CDFILIAL = C.CDFILIAL
                       AND NF.NRLANCTONF = C.NRLANCTONF
                       AND RV.IDCONCILIADO = 'C' /* VENDA CONCILIADA */
                       AND RV.NRCONCLANC = CM.NRCONCLANC
                       AND NF.IDSISTEMA = 'CNC'
                       AND NVL(CM.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT
                       AND C.CDFILIAL = CM.CDFILIALNF
                       AND C.NRLANCTONF = CM.NRLANCTONF
                       AND C.IDSTATREC NOT IN ('B', 'P')
                      GROUP BY NF.CDCLIENTE, C.CDTPCTRECEB, CM.DTVENCIMENTO, RV.NRPRODUTOADQ, CM.CDTIPORECE) LOOP
                   IF ((V_NRADQUIRENTEVD <> C_ADQUIRENTE.NRADQUIRENTE) OR (V_NRPRODUTOADQVD <> C_ASSOCIACAO_BOL.NRPRODUTOADQ)) THEN
                      V_NRADQUIRENTEVD := C_ADQUIRENTE.NRADQUIRENTE;
                      V_NRPRODUTOADQVD := C_ASSOCIACAO_BOL.NRPRODUTOADQ;
                      /* VERIFICA A POSSIBILIDADE DE CONTABILIZAO DO TIPO DE CONTA A RECEBER */
                      V_CDREDUCONT := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_ADQUIRENTE.NRADQUIRENTE, C_ASSOCIACAO_BOL.NRPRODUTOADQ, 'CONTCORR', 'N', V_DTATUAL, V_DTATUAL);
                   END IF;
                   /* GERA O BOLETO DA CONTA */
                   NOVO_CODIGO_NT('BOLETRECEBER'||C_ESTABELEC.CDFILIAL, V_NRLANBOL);
                   V_NRLANBOL := SUBSTR(V_NRLANBOL, 11, 10);
                   GERA_BOLETOS_REC(V_NRLANBOL, /* NUMERO DO BOLETO */
                                    C_ESTABELEC.CDFILIAL, /* FILIAL */
                                    C_ASSOCIACAO_BOL.CDCLIENTE, /* CDIGO DO CLIENTE */
                                    C_ESTABELEC.CDEMPRESA, /* CDIGO DA EMPRESA */
                                    C_ASSOCIACAO_BOL.VRFINABOL, /* VALOR DA CONTA */
                                    C_ASSOCIACAO_BOL.DTCREDITO, /* DATA DE VENCIMENTO */
                                    C_ASSOCIACAO_BOL.CDTIPORECE, /* TIPO DE RECEBIMENTO */
                                    NULL, /* NUMERO DO CHEQUE */
                                    NULL, /* BANCO DO CHEQUE*/
                                    NULL, /* AGENCIA DO CHEQUE */
                                    NULL, /* CONTA */
                                    V_CDREDUCONT, /* CDREDUCONT */
                                    NULL, /* TIPO DE BAIXA */
                                    NULL); /* DATA DE MOVIMENTAO */
                   V_COUNT := 0;
                   FOR C_CONTAS IN
                     (SELECT C.CDFILIAL, C.NRLANCTONF, C.VRATUAREC
                        FROM NOTAFISCAL NF, CONTARECEBER C, RETVENDAADQ RV, CONSMOVCAIXA CM
                       WHERE CM.DTVENDA = V_DTATUAL
                         AND RV.NRESTABELEC = P_SEQESTABELEC
                         AND RV.NRADQUIRENTE = C_ADQUIRENTE.NRADQUIRENTE
                         AND NF.CDCLIENTE = C_ASSOCIACAO_BOL.CDCLIENTE
                         AND C.CDTPCTRECEB = C_ASSOCIACAO_BOL.CDTPCTRECEB
                         AND NF.CDFILIAL = CM.CDFILIALNF
                         AND NF.NRLANCTONF = CM.NRLANCTONF
                         AND NF.CDFILIAL = C.CDFILIAL
                         AND NF.NRLANCTONF = C.NRLANCTONF
                         AND RV.NRPRODUTOADQ = C_ASSOCIACAO_BOL.NRPRODUTOADQ
                         AND CM.DTVENCIMENTO = C_ASSOCIACAO_BOL.DTCREDITO
                         AND CM.CDTIPORECE = C_ASSOCIACAO_BOL.CDTIPORECE
                         AND RV.IDCONCILIADO = 'C' /* VENDA CONCILIADA */
                         AND RV.NRCONCLANC = CM.NRCONCLANC
                         AND NF.IDSISTEMA = 'CNC'
                         AND C.IDSTATREC NOT IN ('B', 'P')
                         AND NVL(CM.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT) LOOP
                      UPDATE CONTARECEBER
                         SET NRLANBOLREC = V_NRLANBOL,
                             CDFILIBOLREC = C_ESTABELEC.CDFILIAL
                       WHERE CDFILIAL = C_CONTAS.CDFILIAL
                         AND NRLANCTONF = C_CONTAS.NRLANCTONF;
                   END LOOP;
                END LOOP;
                /* CURSOR USADO PARA ARREDONDAR E CORRIGIR O VALOR DO BOLETO DE ACORDO COM OS VALORES DAS CONTAS */
                FOR C_ARREDONDA_BOL IN
                   (SELECT B.CDFILIAL, B.NRLANBOLREC, B.VRFINALBREC, SUM(ROUND(VRATUAREC, 2)) VRCONTA
                      FROM BOLETRECEBER B, CONTARECEBER C, NOTAFISCAL NF, CONSMOVCAIXA CM
                     WHERE B.NRLANBOLREC = C.NRLANBOLREC
                       AND B.CDFILIAL = C.CDFILIBOLREC
                       AND C.CDFILIAL = NF.CDFILIAL
                       AND C.NRLANCTONF = NF.NRLANCTONF
                       AND NF.IDSISTEMA = 'CNC'
                       AND C.IDSTATREC NOT IN ('B', 'P')
                       AND B.CDFILIAL = C_ESTABELEC.CDFILIAL
                       AND NF.CDFILIAL = CM.CDFILIALNF
                       AND NF.NRLANCTONF = CM.NRLANCTONF
                       AND CM.DTVENDA = V_DTATUAL
                     GROUP BY B.CDFILIAL, B.NRLANBOLREC, B.VRFINALBREC
                    HAVING SUM(ROUND(VRATUAREC, 2)) <> B.VRFINALBREC) LOOP
                   UPDATE BOLETRECEBER
                      SET VRFINALBREC = C_ARREDONDA_BOL.VRCONTA,
                          VRBOLREC = C_ARREDONDA_BOL.VRCONTA
                    WHERE CDFILIAL = C_ARREDONDA_BOL.CDFILIAL
                      AND NRLANBOLREC = C_ARREDONDA_BOL.NRLANBOLREC;
                   UPDATE TPRECBOLETO
                      SET VRTPRECBOLR = C_ARREDONDA_BOL.VRCONTA
                    WHERE CDFILIAL = C_ARREDONDA_BOL.CDFILIAL
                      AND NRLANBOLREC = C_ARREDONDA_BOL.NRLANBOLREC;
                END LOOP;
                V_COUNT := 0;
                /* VERIFICA SE EXISTE REGRAS ESPECFICAS PARA UM ESTABELECIMENTO */
                BEGIN
                   SELECT COUNT(*)
                     INTO V_COUNT
                     FROM VALIDACAOADQEST
                    WHERE NRESTABELEC = P_SEQESTABELEC
                      AND NRADQUIRENTE = C_ADQUIRENTE.NRADQUIRENTE;
                EXCEPTION
                   WHEN NO_DATA_FOUND THEN
                      V_COUNT := 0;
                END;
                IF V_COUNT > 0 THEN
                   V_EXISTEREGRAEST := 'S';
                ELSE
                   V_EXISTEREGRAEST := 'N';
                END IF;
                IF V_EXISTEREGRAEST = 'S' THEN
                   OPEN C_REGRAS_EST;
                ELSE
                   OPEN C_REGRAS;
                END IF;
                LOOP
                   IF V_EXISTEREGRAEST = 'S' THEN
                      FETCH C_REGRAS_EST INTO V_VDAJUSTEAUT;
                      EXIT WHEN C_REGRAS_EST%NOTFOUND;
                   ELSE
                      FETCH C_REGRAS INTO V_VDAJUSTEAUT;
                      EXIT WHEN C_REGRAS%NOTFOUND;
                   END IF;
                   IF V_VDAJUSTEAUT = 'S' THEN
                      V_NRADQUIRENTEVD := -1;
                      V_NRPRODUTOADQVD := -1;
                      FOR C_AJUSTES IN
                         (SELECT RF.NRRETFINANCADQ, RF.CDNSU, RF.NRADQUIRENTE, RF.VRLIQPGTO,
                                 RF.VRCOBRADOTAXA, RF.IDSTATUSVENDA, RF.VRBRUTVENDA, TRUNC(RF.DTCREDITO) DTCREDITO, RV.VRLIQVENDA,
                                 RV.CDFILIAL, RV.NRLANCTONF, TRUNC(RF.DTVENDA) DTVENDA, RF.CDREDUCONT, RF.NRMOVBANC,
                                 RF.NRPRODUTOADQ
                            FROM RETFINANCADQ RF LEFT JOIN RETVENDAADQ RV
                                                        ON RF.CDNSU = RV.CDNSU
                                                       AND RF.NRADQUIRENTE = RV.NRADQUIRENTE
                                                       AND RF.NRESTABELEC = RV.NRESTABELEC
                                                       AND RF.DTVENDA = RV.DTVENDA
                                                       AND RF.VRBRUTVENDA = RV.VRBRUTVENDA
                           WHERE RF.NRESTABELEC = P_SEQESTABELEC
                             AND RF.DTCREDITO = V_DTATUAL
                             AND RF.IDSTATUSVENDA IN ('C', 'E')
                             AND RF.NRADQUIRENTE = C_ADQUIRENTE.NRADQUIRENTE
                             AND NVL(RF.DTVENDA, V_DTINICIOINT) >= V_DTINICIOINT
                           ORDER BY RF.NRADQUIRENTE, RF.NRPRODUTOADQ, RF.DTCREDITO) LOOP
                         IF ((V_NRADQUIRENTEVD <> C_ADQUIRENTE.NRADQUIRENTE) OR (V_NRPRODUTOADQVD <> C_AJUSTES.NRPRODUTOADQ)) THEN
                            V_NRADQUIRENTEVD := C_ADQUIRENTE.NRADQUIRENTE;
                            V_NRPRODUTOADQVD := C_AJUSTES.NRPRODUTOADQ;
                            V_CDREDUCONT := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_AJUSTES.NRADQUIRENTE, C_AJUSTES.NRPRODUTOADQ, 'CONTCORR', 'N', NULL, NULL);
                         END IF;
                         /* ABAIXO SERO PROCESSADAS AS MOVIMENTAES QUE DEVEM IR PARA O BCO.
                           "P"AGAMENTO DE ALUGUEL;
                           "C"ANCELAMENTO DE VENDA;
                           "E"STORNO DE ALGUM VALOR POSITIVO. */
                         IF C_AJUSTES.IDSTATUSVENDA = 'C' THEN
                            V_DESCMOV := 'CANCELAMENTO DE VENDA';
                            V_DESCMOVBANC := 'CancelamentoVenda';
                            V_IDDEBCRED := 'D';
                            V_CDTPDEBIBANC := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_AJUSTES.NRADQUIRENTE, C_AJUSTES.NRPRODUTOADQ, 'TIPODEB', 'N', NULL, NULL);
                            SELECT CDCLASSFINA, IDCTBLDBBANC, DSTPDEBIBANC
                              INTO V_CDCLASSFINA, V_CTBTIPODEBI, V_NMAUX
                              FROM TPDEBIBANC
                             WHERE CDTPDEBIBANC = V_CDTPDEBIBANC;
                         ELSE
                            V_DESCMOV := 'ESTORNO DE VALOR DE ADQUIRENTE';
                            V_DESCMOVBANC := 'EstornoAdquirente';
                            V_IDDEBCRED := 'C';
                            V_CDTPDEBIBANC := BUSCA_PARAMETRO_CNC(P_SEQESTABELEC, C_AJUSTES.NRADQUIRENTE, C_AJUSTES.NRPRODUTOADQ, 'TIPOCRED', 'N', NULL, NULL);
                            SELECT CDCLASSFINA, IDCTBLCRBANC, DSTPCREDBANC
                              INTO V_CDTPCREDBANC, V_CTBTIPOCRED, V_NMAUX
                              FROM TPCREDBANC
                             WHERE CDTPCREDBANC = V_CDTPCREDBANC;
                         END IF;
                         /* SE A CONTA NAO ESTIVER NULA  PORQUE A MOVIMENTAO J FOI PROCESSADA E SER REPROCESSADA. */
                         IF C_AJUSTES.CDREDUCONT IS NOT NULL THEN
                            /* SE A CONTA FOR DIFERENTE  PORQUE A PARAMETRIZACAO FOI ALTERADA. E A MOVIMENTAO NO BCO
                               DEVER SER REFEITA. */
                            IF C_AJUSTES.CDREDUCONT <> V_CDREDUCONT THEN
                               /* APAGA AS MOVIMENTAES, DE CRDITO OU DBITO. */
                               IF V_IDDEBCRED = 'C' THEN
                                  ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, 0, ABS(C_AJUSTES.VRLIQPGTO));
                                  ATUALIZA_SALDO_BANCARIO(C_AJUSTES.CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO)*-1, '1');
                                  DELETE
                                    FROM LANCCONT L
                                   WHERE EXISTS (SELECT 1
                                                   FROM MOVCREDBANC M
                                                  WHERE L.CDEMPRESA = M.CDEMPRESA
                                                    AND L.NRLANCCONT = M.NRLCTBMCRED
                                                    AND M.CDREDUCONT = C_AJUSTES.CDREDUCONT
                                                    AND M.NRMOVBANC = C_AJUSTES.NRMOVBANC);
                                  DELETE FROM MOVCREDBANC WHERE CDREDUCONT = C_AJUSTES.CDREDUCONT AND NRMOVBANC = C_AJUSTES.NRMOVBANC;
                               ELSE
                                  ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, ABS(C_AJUSTES.VRLIQPGTO), 0);
                                  ATUALIZA_SALDO_BANCARIO(C_AJUSTES.CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO), '1');
                                  DELETE
                                    FROM LANCCONT L
                                   WHERE EXISTS (SELECT 1
                                                   FROM MOVDEBBANC M
                                                  WHERE L.CDEMPRESA = M.CDEMPRESA
                                                    AND L.NRLANCCONT = M.NRLCTBMDEB
                                                    AND M.CDREDUCONT = C_AJUSTES.CDREDUCONT
                                                    AND M.NRMOVBANC = C_AJUSTES.NRMOVBANC);
                                  DELETE
                                    FROM MOVDEBBANC
                                   WHERE CDREDUCONT = C_AJUSTES.CDREDUCONT
                                     AND NRMOVBANC = C_AJUSTES.NRMOVBANC;
                               END IF;
                               /* DESVINCULA A MOVIMENTAO DO BCO COM A VENDA. PARA GERAR UM NOVO SEQUENCIAL DE ACORDO COM A NOVA CONTA. */
                               UPDATE RETFINANCADQ
                                  SET CDREDUCONT = NULL,
                                      NRMOVBANC = NULL
                                WHERE NRRETFINANCADQ = C_AJUSTES.NRRETFINANCADQ;
                               /* DELETA A MOVIMENTAO BANCRIA */
                               DELETE
                                 FROM MOVBANCARIO
                                WHERE CDREDUCONT = C_AJUSTES.CDREDUCONT
                                  AND NRMOVBANC = C_AJUSTES.NRMOVBANC;
                               /* REFAZ A MOVIMENTAO BANCRIA */
                               NOVO_CODIGO_NT('MOVBANCARIO'||V_CDREDUCONT, V_NRMOVBANC);
                               V_NRMOVBANC  := SUBSTR(V_NRMOVBANC, 11, 10);
                               INSERT INTO MOVBANCARIO
                                 (CDREDUCONT, NRMOVBANC, DTMOVBANC, IDMOVBANC, DSHISMBANC, VRMOVBANC, IDORIGMBANC, IDSTCONEXT,
                                  IDSTATUSCTBBANC, NRORG, NRDOCMBANC)
                               VALUES
                                 (V_CDREDUCONT, V_NRMOVBANC, C_AJUSTES.DTCREDITO, V_IDDEBCRED, V_DESCMOVBANC, ABS(C_AJUSTES.VRLIQPGTO), 'P', '0',
                                  'P', V_NRORG, SUBSTR(C_AJUSTES.CDNSU, 1, 10));
                               /* VINCULA NOVAMENTE A MOVIMENTAO BANCRIA  VENDA. */
                               UPDATE RETFINANCADQ
                                  SET CDREDUCONT = V_CDREDUCONT,
                                      NRMOVBANC = V_NRMOVBANC
                                WHERE NRRETFINANCADQ = C_AJUSTES.NRRETFINANCADQ;
                            ELSE
                               /* SE FOR A MESMA CONTA, A MOVIMENTAO MANTER O SEQUENCIAL DA MOVBANCARIO.
                                  AS MOVIMENTAES SERO APAGADAS E SEUS NOVOS SEQUENCIAIS SERO OS MESMOS. POR ISSO
                                  O USO DO SELECT INTO ABAIXO. */
                               V_NRMOVBANC := C_AJUSTES.NRMOVBANC;
                               IF V_IDDEBCRED = 'C' THEN
                                  V_NRMOVIBCO := NULL;
                                  BEGIN
                                     SELECT NRMOVICRED
                                       INTO V_NRMOVIBCO
                                       FROM MOVCREDBANC
                                      WHERE CDREDUCONT = V_CDREDUCONT
                                        AND NRMOVBANC = V_NRMOVBANC;
                                  EXCEPTION
                                     WHEN NO_DATA_FOUND THEN
                                        V_NRMOVIBCO := NULL;
                                  END;
                                  ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, 0, ABS(C_AJUSTES.VRLIQPGTO));
                                  ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO)*-1, '1');
                                  DELETE
                                    FROM LANCCONT L
                                   WHERE EXISTS (SELECT 1
                                                   FROM MOVCREDBANC M
                                                  WHERE L.CDEMPRESA = M.CDEMPRESA
                                                    AND L.NRLANCCONT = M.NRLCTBMCRED
                                                    AND M.CDREDUCONT = C_AJUSTES.CDREDUCONT
                                                    AND M.NRMOVBANC = C_AJUSTES.NRMOVBANC);
                                  DELETE FROM MOVCREDBANC WHERE CDREDUCONT = C_AJUSTES.CDREDUCONT AND NRMOVBANC = C_AJUSTES.NRMOVBANC;
                               ELSE
                                  V_NRMOVIBCO := NULL;
                                  BEGIN
                                     SELECT NRMOVIDEBI
                                       INTO V_NRMOVIBCO
                                       FROM MOVDEBBANC
                                      WHERE CDREDUCONT = V_CDREDUCONT
                                        AND NRMOVBANC = V_NRMOVBANC;
                                  EXCEPTION
                                     WHEN NO_DATA_FOUND THEN
                                        V_NRMOVIBCO := NULL;
                                  END;
                                  ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, ABS(C_AJUSTES.VRLIQPGTO), 0);
                                  ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO), '1');
                                  DELETE
                                    FROM LANCCONT L
                                   WHERE EXISTS (SELECT 1
                                                   FROM MOVDEBBANC M
                                                  WHERE L.CDEMPRESA = M.CDEMPRESA
                                                    AND L.NRLANCCONT = M.NRLCTBMDEB
                                                    AND M.CDREDUCONT = C_AJUSTES.CDREDUCONT
                                                    AND M.NRMOVBANC = C_AJUSTES.NRMOVBANC);
                                  DELETE FROM MOVDEBBANC WHERE CDREDUCONT = C_AJUSTES.CDREDUCONT AND NRMOVBANC = C_AJUSTES.NRMOVBANC;
                               END IF;
                            END IF;
                         ELSE
                            /* CASO A CONTA ESTEJA NULA  PORQUE  A PRIMEIRA VEZ QUE O REGISTRO SER PROCESSADO.
                               SENDO ASSIM,  PRECISO GERAR UM SEQUENCIAL PARA A MOVBANCRIO PARA A CONTA PARAMETRIZADA. */
                            NOVO_CODIGO_NT('MOVBANCARIO'||V_CDREDUCONT, V_NRMOVBANC);
                            V_NRMOVBANC  := SUBSTR(V_NRMOVBANC, 11, 10);
                            INSERT INTO MOVBANCARIO
                              (CDREDUCONT, NRMOVBANC, DTMOVBANC, IDMOVBANC, DSHISMBANC, VRMOVBANC, IDORIGMBANC, IDSTCONEXT,
                               IDSTATUSCTBBANC, NRORG, NRDOCMBANC)
                            VALUES
                              (V_CDREDUCONT, V_NRMOVBANC, C_AJUSTES.DTCREDITO, V_IDDEBCRED, V_DESCMOVBANC, ABS(C_AJUSTES.VRLIQPGTO), 'P', '0',
                               'P', V_NRORG, SUBSTR(C_AJUSTES.CDNSU, 1, 10));
                            /* RELACIONA O SEQUENCIAL GERADO  VENDA.*/
                            UPDATE RETFINANCADQ
                               SET CDREDUCONT = V_CDREDUCONT,
                                   NRMOVBANC = V_NRMOVBANC
                             WHERE NRRETFINANCADQ = C_AJUSTES.NRRETFINANCADQ;
                         END IF;
                         /* SE A CONTA DA VENDA FOR NULA OU FOR ALTERADA,  PRECISO GERAR NOVOS SEQUENCIAIS
                            PARA AS MOVIMENTAES. */
                         IF (C_AJUSTES.CDREDUCONT IS NULL) OR (C_AJUSTES.CDREDUCONT <> V_CDREDUCONT) THEN
                            IF V_IDDEBCRED = 'D' THEN
                               NOVO_CODIGO_NT('MOVDEBBANC' ||V_CDREDUCONT, V_NRMOVIBCO);
                               V_NRMOVIBCO := SUBSTR(V_NRMOVIBCO, 11, 10);
                            ELSE
                               NOVO_CODIGO_NT('MOVCREDBANC' ||V_CDREDUCONT, V_NRMOVIBCO);
                               V_NRMOVIBCO := SUBSTR(V_NRMOVIBCO, 11, 10);
                            END IF;
                         END IF;
                         /* SE FOR UMA MOVIMENTAO DE PAGAMENTO OU CANCELAMENTO DE VENDA, SERO
                            FEITAS AS MOVIMENTAES DE DBITO. */
                         IF C_AJUSTES.IDSTATUSVENDA = 'C' THEN
                            DELETE
                              FROM LANCCONT L
                             WHERE EXISTS (SELECT 1
                                             FROM MOVDEBBANC MD
                                            WHERE MD.CDECTBMDEB = C_ESTABELEC.CDEMPRESA
                                              AND MD.NRMOVIDEBI = V_NRMOVIBCO
                                              AND MD.CDREDUCONT = V_CDREDUCONT
                                              AND MD.CDECTBMDEB = L.CDEMPRESA
                                              AND MD.NRLCTBMDEB = L.NRLANCCONT);
                            /* FAZ/REFAZ AS MOVIMENTAES DE DBITO E ATUALIZA O FLUXO DE CAIXA E SALDO BANCRIO. */
                            ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, ABS(C_AJUSTES.VRLIQPGTO), 0);
                            ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO), '1');
                            DELETE
                              FROM MOVDEBBANC
                             WHERE CDREDUCONT = V_CDREDUCONT
                               AND NRMOVBANC = V_NRMOVBANC;
                            ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, 0, ABS(C_AJUSTES.VRLIQPGTO));
                            ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO)*-1, '1');
                            INSERT INTO MOVDEBBANC
                              (CDREDUCONT, NRMOVIDEBI, CDCLASSFINA, CDEMPRESA, CDFILIAL, NRMOVBANC, CDTPDEBIBANC,
                               DTMOVIDEBI, DSMOVIDEBI, VRMOVIDEBI, IDLANCOMCONTPAG, NRORG, CDCLIENTE,
                               CDFILILANDEB)
                            VALUES
                              (V_CDREDUCONT, V_NRMOVIBCO, V_CDCLASSFINA, C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, V_NRMOVBANC, V_CDTPDEBIBANC,
                               C_AJUSTES.DTCREDITO, V_DESCMOV, ABS(C_AJUSTES.VRLIQPGTO), 'N', V_NRORG, C_ADQUIRENTE.CDCLIENTE,
                               C_ESTABELEC.CDFILIAL);
                            /* CASO SEJA NECESSRIA, A CONTABILIZAO  FEITA. */
                            IF V_CTBTIPODEBI = 'S' THEN
                               CTB_BCO_LANC(V_CDREDUCONT, V_NRMOVIBCO, 'D', NULL, 0, V_NRLANCCONT);
                               V_COUNT := 0;
                               BEGIN
                                  SELECT COUNT(*)
                                    INTO V_COUNT
                                    FROM ERROCTBTEMP
                                   WHERE CDEMPRESA = C_ESTABELEC.CDEMPRESA
                                     AND NRLANCCTBTEMP = V_NRLANCCONT;
                               EXCEPTION
                                  WHEN NO_DATA_FOUND THEN
                                    V_COUNT := 0;
                               END;
                               IF V_COUNT <> 0 THEN
                                  /* CASO D ALGUM ERRO DE CONTABILIZAO, A TABELA DE ERROS  PREENCHIDA
                                     PARA QUE A ROTINA NAO D COMMIT E GRAVE OS ERROS PARA QUE O DESENVOLVIMENTO POSSA VER O QUE ACONTECEU. */
                                  V_DSAUX := '[TIPO DE DEBITO BACARIO: '||V_CDTPDEBIBANC||' - '||V_NMAUX||']';
                                  ERROSTEMP(C_ESTABELEC.CDEMPRESA, V_NRLANCCONT);
                               END IF;
                            END IF;
                         ELSE
                            /* PROCESSAMENTO DAS OPERAES DE ESTORNO (AJUSTE POSITIVO) NO BCO */
                            DELETE
                              FROM LANCCONT L
                             WHERE EXISTS (SELECT 1
                                             FROM MOVCREDBANC MC
                                            WHERE MC.CDECTBMCRED = C_ESTABELEC.CDEMPRESA
                                              AND MC.NRMOVICRED = V_NRMOVIBCO
                                              AND MC.CDREDUCONT = V_CDREDUCONT
                                              AND MC.CDECTBMCRED = L.CDEMPRESA
                                              AND MC.NRLCTBMCRED = L.NRLANCCONT);
                            /* FAZ/REFAZ AS MOVIMENTALES DE CRDITO E ATUALIZA O FLUXO DE CAIXA E SALDO BANCRIO. */
                            ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, 0, ABS(C_AJUSTES.VRLIQPGTO));
                            ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO)*-1, '1');
                            DELETE
                              FROM MOVCREDBANC
                             WHERE CDREDUCONT = V_CDREDUCONT
                               AND NRMOVBANC = V_NRMOVBANC;
                            ATUALIZA_FLUXO_DE_CAIXA(C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, C_AJUSTES.DTCREDITO, 'E', V_CDCLASSFINA, ABS(C_AJUSTES.VRLIQPGTO), 0);
                            ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_AJUSTES.DTCREDITO, ABS(C_AJUSTES.VRLIQPGTO), '1');
                            INSERT INTO MOVCREDBANC
                              (CDREDUCONT, NRMOVICRED, CDCLASSFINA, CDEMPRESA, CDFILIAL, NRMOVBANC, CDTPCREDBANC,
                               DTMOVICRED, DSMOVICRED, VRMOVICRED, IDLANCOMCONTREC, NRORG, CDCLIENTE,
                               CDFILILANCRE)
                            VALUES
                              (V_CDREDUCONT, V_NRMOVIBCO, V_CDCLASSFINA, C_ESTABELEC.CDEMPRESA, C_ESTABELEC.CDFILIAL, V_NRMOVBANC, V_CDTPCREDBANC,
                               C_AJUSTES.DTCREDITO, V_DESCMOV, ABS(C_AJUSTES.VRLIQPGTO), 'N', V_NRORG, C_ADQUIRENTE.CDCLIENTE,
                               C_ESTABELEC.CDFILIAL);
                            /* CASO SEJA NECESSRIA, A CONTABILIZAO  FEITA. */
                            IF V_CTBTIPOCRED = 'S' THEN
                               CTB_BCO_LANC(V_CDREDUCONT, V_NRMOVIBCO, 'C', NULL, 0, V_NRLANCCONT);
                               V_COUNT := 0;
                               BEGIN
                                  SELECT COUNT(*)
                                    INTO V_COUNT
                                    FROM ERROCTBTEMP
                                   WHERE CDEMPRESA = C_ESTABELEC.CDEMPRESA
                                     AND NRLANCCTBTEMP = V_NRLANCCONT;
                               EXCEPTION
                                  WHEN NO_DATA_FOUND THEN
                                    V_COUNT := 0;
                               END;
                               IF V_COUNT <> 0 THEN
                                  /* CASO D ALGUM ERRO DE CONTABILIZAO, A TABELA DE ERROS  PREENCHIDA
                                     PARA QUE A ROTINA NAO D COMMIT E GRAVE OS ERROS PARA QUE O DESENVOLVIMENTO POSSA VER O QUE ACONTECEU. */
                                  V_DSAUX := '[TIPO CREDITO BANCARIO '||V_CDTPCREDBANC||' - '||V_NMAUX||']';
                                  ERROSTEMP(C_ESTABELEC.CDEMPRESA, V_NRLANCCONT);
                               END IF;
                            END IF;
                         END IF;
                      END LOOP;
                   END IF;
                END LOOP;
                IF V_EXISTEREGRAEST = 'S' THEN
                   CLOSE C_REGRAS_EST;
                ELSE
                   CLOSE C_REGRAS;
                END IF;
             END LOOP;
           END LOOP;
           /* RECONTABILIZA AS VENDAS QUE FORAM CONCILIADAS */
           FOR C_CTB IN
              (SELECT DISTINCT C.CDFILIAL, C.DTVENDA, C.CDTIPORECE, R.NRPRODUTOADQ
                 FROM CONSMOVCAIXA C, RETVENDAADQ R
                WHERE C.DTVENDA = V_DTATUAL
                  AND R.NRESTABELEC = P_SEQESTABELEC
                  AND C.NRCONCLANC = R.NRCONCLANC) LOOP
              /* CONTABILIZA AS VENDAS NOVAMENTE */
              CONTABILIZA_CONTAS_CNC(C_CTB.CDFILIAL, C_CTB.DTVENDA, C_CTB.CDTIPORECE);
              /* CONTABILIZA AS VENDAS QUE TIVERAM SEU TIPO DE RECEBIMENTO ALTERADOS APOS A CONCILIACAO */
              FOR C_CTB_OLD IN
                 (SELECT DISTINCT C.CDFILIAL, C.DTVENDA, C.CDTIPORECE, D.VRESPERADO
                    FROM CONSMOVCAIXA C, RETVENDAADQ R, TIPODIVERGENCIA T, DIVCONCILIACAO D
                   WHERE C.DTVENDA = V_DTATUAL
                     AND R.NRESTABELEC = P_SEQESTABELEC
                     AND C.NRCONCLANC = R.NRCONCLANC
                     AND D.NRCONSMOVCAIXA = C.NRCONSMOVCAIXA
                     AND D.NRRETVENDAADQ = R.NRRETVENDAADQ
                     AND D.NRTPDIVERGENCIA = T.NRTPDIVERGENCIA
                     AND T.IDDIVERGENCIA = 'P'
                     AND TRIM(D.VRENCONTRADO) =  TRIM(TO_CHAR(C_CTB.NRPRODUTOADQ))) LOOP
                 FOR C_TPREC IN
                    (SELECT CDTIPORECE
                       FROM TPRECEPRODADQ
                      WHERE NRPRODUTOADQ = TO_NUMBER(C_CTB_OLD.VRESPERADO)) LOOP
                    CONTABILIZA_CONTAS_CNC(C_CTB_OLD.CDFILIAL, C_CTB_OLD.DTVENDA, C_TPREC.CDTIPORECE);
                 END LOOP;
              END LOOP;
           END LOOP;
           /* ATUALIZA AS CONTABILIZACOES DE VENDAS QUE NAO FORAM CONCILIADAS */
           FOR C_CTB_N_CONC IN
              (SELECT DISTINCT C.CDFILIAL, C.DTVENDA, C.CDTIPORECE
                 FROM CONSMOVCAIXA C, TIPORECE T, TIPOCTRECEBER TC, ESTABELECIMENTO E
                WHERE C.DTVENDA = V_DTATUAL
                  AND E.NRESTABELEC = P_SEQESTABELEC
                  AND C.CDFILIAL = E.CDFILIAL
                  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)
                  AND NOT EXISTS (SELECT 1
                                    FROM RETVENDAADQ R, TPRECEPRODADQ P
                                   WHERE R.NRPRODUTOADQ = P.NRPRODUTOADQ
                                     AND R.NRESTABELEC = E.NRESTABELEC
                                     AND P.CDTIPORECE = C.CDTIPORECE
                                     AND R.DTVENDA = V_DTATUAL
                                     AND R.IDCONCILIADO = 'C')
                ORDER BY C.DTVENDA, C.CDTIPORECE, C.CDFILIAL) LOOP
              CONTABILIZA_CONTAS_CNC(C_CTB_N_CONC.CDFILIAL, C_CTB_N_CONC.DTVENDA, C_CTB_N_CONC.CDTIPORECE);
           END LOOP;
        END IF;
        /* VERIFICA SE A ROTINA ENCONTROU ALGUM ERRO. SE A ROTINA RODOU SEM PROBLEMAS, O COMMIT  FEITO. */
        V_COUNT := 0;
        BEGIN
           SELECT COUNT(*)
             INTO V_COUNT
             FROM LOGERROCTBCNC
            WHERE NRESTABELEC = P_SEQESTABELEC;
        EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_COUNT := 0;
        END;
        IF V_COUNT = 0 THEN
           COMMIT;
        ELSE
           ROLLBACK;
           V_QTERROPERCTB := 0;
           BEGIN
              SELECT COUNT(*)
                INTO V_QTERROPERCTB
                FROM LOGERROCTBCNC
               WHERE NRESTABELEC = P_SEQESTABELEC
                 AND DSERRO LIKE 'PER%ODO EST% FORA DO PER%ODO CONT%BIL.';
           EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_QTERROPERCTB := 0;
           END;
           /* VERIFICA SE A QUANTIDADE DE ERROS GERADOS SO REFERENTES AO PERODO CONTABIL, CASO SEJA, DEVERO SER APAGADOS
              POIS A ROTINA AUTOMTICA PODER PEGAR D-10 E ESSE PERODO PODE ESTAR FORA DO PERODO CONTBIL APS O FECHAMENTO */
           IF V_QTERROPERCTB = V_COUNT THEN
              DELETE
                FROM LOGERROCTBCNC
               WHERE NRESTABELEC = P_SEQESTABELEC;
              COMMIT;
           END IF;
        END IF;
     END IF;
     /* A ROTINA ABAIXO SERVIR PARA FAZER BAIXAS PLANEJADAS PARA OS BOLETOS QUE ESTO VENCENDO NO DIA DA V_DTATUAL */
     /* FILTRA OS BOLETOS QUE FORAM PAGOS NA DATA*/
     V_CHAVEBAIXA := 'XXXX';
     FOR C_BOL_PAGO IN
        (SELECT BOL.CDFILIBOLREC, BOL.NRLANBOLREC, BOL.CDCLIENTE, BOL.CDEMPRESA, BOL.CDTIPORECE,
                BOL.DTCREDITO, BOL.NMTIPORECE, NVL(TF.CDTPBAIXAREC, BOL.CDTPBAIXAREC) CDTPBAIXAREC,
                BOL.VRFINALBREC, BOL.NRESTABELEC, NVL(TF.CDREDUCONT, BOL.CDREDUCONT) CDREDUCONT
           FROM (SELECT DISTINCT C.CDFILIBOLREC, C.NRLANBOLREC, NF.CDCLIENTE, NF.CDEMPRESA, CM.CDTIPORECE,
                                 RF.DTCREDITO, T.NMTIPORECE, T.CDTPBAIXAREC, B.VRFINALBREC,
                                 T.IDBAIXAAUTCNC, RF.NRESTABELEC, T.CDREDUCONT
                   FROM RETFINANCADQ RF, RETVENDAADQ RV, CONTARECEBER C, NOTAFISCAL NF,
                        CONSMOVCAIXA CM, BOLETRECEBER B, TIPORECE T
                  WHERE RF.NRESTABELEC = P_SEQESTABELEC
                    AND RF.DTCREDITO = V_DTATUAL
                    AND RF.NRCONCLANC = RV.NRCONCLANCPGTO
                    AND RF.DTCREDITO = RV.DTCREDITO
                    AND RF.NRADQUIRENTE = RV.NRADQUIRENTE
                    AND RF.NRPRODUTOADQ = RV.NRPRODUTOADQ
                    AND RF.CDNSU = RV.CDNSU
                    AND RV.CDFILIAL = C.CDFILIAL
                    AND RV.NRLANCTONF = C.NRLANCTONF
                    AND C.CDFILIAL = NF.CDFILIAL
                    AND C.NRLANCTONF = NF.NRLANCTONF
                    AND C.CDFILIAL = CM.CDFILIALNF
                    AND C.NRLANCTONF = CM.NRLANCTONF
                    AND CM.CDTIPORECE = T.CDTIPORECE
                    AND C.CDFILIBOLREC = B.CDFILIAL
                    AND C.NRLANBOLREC = B.NRLANBOLREC
                    AND RF.IDSTATUSVENDA = 'L'
                    AND B.IDSTATBREC NOT IN ('B', 'P')
                    AND B.NRBAIXAREC IS NULL) BOL LEFT JOIN TIPORECEFILIAL TF
                                                         ON TF.CDFILIAL = BOL.CDFILIBOLREC
                                                        AND TF.CDTIPORECE = BOL.CDTIPORECE
          WHERE NVL(TF.CDTPBAIXAREC, BOL.CDTPBAIXAREC) IS NOT NULL
            AND NVL(TF.CDREDUCONT, BOL.CDREDUCONT) IS NOT NULL
            AND NVL(TF.IDBAIXAAUTCNC, BOL.IDBAIXAAUTCNC) = 'S'
          ORDER BY BOL.CDFILIBOLREC, BOL.DTCREDITO, NVL(TF.CDREDUCONT, BOL.CDREDUCONT), BOL.CDTIPORECE) LOOP
        /* DOS BOLETOS QUE FORAM PAGOS NA DATA, AS CONTAS QUE NAO FORAM PAGAS E ESTAO ASSOCIADAS A ELES, DEVERAO
           SER SEPARADAS DESSES BOLETOS PARA FICAREM SEM BAIXA. */
        FOR C_CONTA_N_PAGA IN
           (SELECT DISTINCT C.CDFILIAL,C.NRLANCTONF, C.VRATUAREC
              FROM CONTARECEBER C, RETVENDAADQ RV, RETFINANCADQ RF
             WHERE C.CDFILIBOLREC = C_BOL_PAGO.CDFILIBOLREC
               AND C.NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC
               AND C.CDFILIAL = RV.CDFILIAL
               AND C.NRLANCTONF = RV.NRLANCTONF
               AND RF.NRCONCLANC = RV.NRCONCLANCPGTO
               AND RF.DTCREDITO = RV.DTCREDITO
               AND RF.NRADQUIRENTE = RV.NRADQUIRENTE
               AND RF.NRPRODUTOADQ = RV.NRPRODUTOADQ
               AND RF.CDNSU = RV.CDNSU
               AND RF.IDSTATUSVENDA <> 'L'
               AND RF.IDCONCILIADO = 'C') LOOP
           /* DESVINCULA O BOLETO PAGO DA CONTA QUE NAO FOI PAGA */
           UPDATE CONTARECEBER
              SET NRLANBOLREC = NULL,
                  CDFILIBOLREC = NULL
            WHERE CDFILIAL = C_CONTA_N_PAGA.CDFILIAL
              AND NRLANCTONF = C_CONTA_N_PAGA.NRLANCTONF;
           /* SOMA OS VALORES DAS CONTAS QUE AINDA ESTAO VINCULADAS AO BOLETO E
              ATUALIZA O VALOR FINAL DO BOLETO */
           V_VRSOMABOLETO := 0;
           BEGIN
              SELECT NVL(SUM(VRATUAREC), 0)
                INTO V_VRSOMABOLETO
                FROM CONTARECEBER
               WHERE CDFILIBOLREC = C_BOL_PAGO.CDFILIBOLREC
                 AND NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC;
           EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 V_VRSOMABOLETO := 0;
           END;
           /* ATUALIZA O VALOR DO BOLETO PAGO COM O SOMATORIO DAS CONTAS AINDA ASSOCIADAS */
           UPDATE BOLETRECEBER
              SET VRFINALBREC = V_VRSOMABOLETO,
                  VRBOLREC = V_VRSOMABOLETO
            WHERE CDFILIAL = C_BOL_PAGO.CDFILIBOLREC
              AND NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC;
           /* GERA UM BOLETO PARA ASSOCIAR NA CONTA QUE FOI DESVINCULADA POR NAO ESTAR PAGA */
           NOVO_CODIGO_NT('BOLETRECEBER'||C_BOL_PAGO.CDFILIBOLREC, V_NRLANBOL);
           V_NRLANBOL := SUBSTR(V_NRLANBOL, 11, 10);
           GERA_BOLETOS_REC(V_NRLANBOL, /* NUMERO DO BOLETO */
                            C_BOL_PAGO.CDFILIBOLREC, /* FILIAL */
                            C_BOL_PAGO.CDCLIENTE, /* CDIGO DO CLIENTE */
                            C_BOL_PAGO.CDEMPRESA, /* CDIGO DA EMPRESA */
                            C_CONTA_N_PAGA.VRATUAREC, /* VALOR DA CONTA */
                            C_BOL_PAGO.DTCREDITO, /* DATA DE VENCIMENTO */
                            C_BOL_PAGO.CDTIPORECE, /* TIPO DE RECEBIMENTO */
                            NULL, /* NUMERO DO CHEQUE */
                            NULL, /* BANCO DO CHEQUE*/
                            NULL, /* AGENCIA DO CHEQUE */
                            NULL, /* CONTA */
                            C_BOL_PAGO.CDREDUCONT, /* CDREDUCONT */
                            NULL, /* TIPO DE BAIXA */
                            NULL); /* DATA DE MOVIMENTAO */
           /* RELACIONA O NOVO BOLETO A CONTA QUE NAO FOI PAGA */
           UPDATE CONTARECEBER
              SET NRLANBOLREC = V_NRLANBOL,
                  CDFILIAL = C_BOL_PAGO.CDFILIBOLREC
            WHERE CDFILIAL = C_CONTA_N_PAGA.CDFILIAL
              AND NRLANCTONF = C_CONTA_N_PAGA.NRLANCTONF;
        END LOOP;
        V_COUNT := 0;
        BEGIN
           SELECT COUNT(*)
             INTO V_COUNT
             FROM CONTARECEBER
            WHERE CDFILIBOLREC = C_BOL_PAGO.CDFILIBOLREC
              AND NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC;
        EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_COUNT := 0;
        END;
        IF V_COUNT = 0 THEN
           DELETE
             FROM BOLETRECEBER
            WHERE CDFILIAL = C_BOL_PAGO.CDFILIBOLREC
              AND NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC;
        ELSE
           /* ATUALIZA OS STATUS DAS CONTAS QUE SERAO BAIXADAS */
           FOR CONTAS_BX IN
              (SELECT C.CDFILIAL, C.NRLANCTONF, NF.CDEMPRESA, T.CDCLASSFINA, C.VRATUAREC
                 FROM CONTARECEBER C, NOTAFISCAL NF, TIPOCTRECEBER T
                WHERE C.CDFILIAL = NF.CDFILIAL
                  AND C.NRLANCTONF = NF.NRLANCTONF
                  AND C.CDTPCTRECEB = T.CDTPCTRECEB
                  AND C.CDFILIBOLREC = C_BOL_PAGO.CDFILIBOLREC
                  AND C.NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC) LOOP
              ATUALIZA_FLUXO_DE_CAIXA(CONTAS_BX.CDEMPRESA, CONTAS_BX.CDFILIAL, C_BOL_PAGO.DTCREDITO, 'E', CONTAS_BX.CDCLASSFINA, 0, ABS(CONTAS_BX.VRATUAREC));
              UPDATE CONTARECEBER
                 SET IDMOVFLUXO = 'E',
                     IDSTATREC = 'P',
                     DTMOVFLUXO = C_BOL_PAGO.DTCREDITO,
                     DTATUAVENREC = V_DTATUAL
               WHERE CDFILIAL = CONTAS_BX.CDFILIAL
                 AND NRLANCTONF = CONTAS_BX.NRLANCTONF;
           END LOOP;
           IF V_CHAVEBAIXA <> C_BOL_PAGO.CDFILIBOLREC||C_BOL_PAGO.DTCREDITO||C_BOL_PAGO.CDREDUCONT||C_BOL_PAGO.CDTIPORECE THEN
              V_CHAVEBAIXA := C_BOL_PAGO.CDFILIBOLREC||C_BOL_PAGO.DTCREDITO||C_BOL_PAGO.CDREDUCONT||C_BOL_PAGO.CDTIPORECE;
              NOVO_CODIGO_NT('BAIXARECEBIDA'||C_BOL_PAGO.CDFILIBOLREC, V_NOVOCODIGO);
              V_NRBAIXAREC := SUBSTR(V_NOVOCODIGO, 11, 10);
              INSERT INTO BAIXARECEBIDA
                 (CDEMPRESA, NRMOVBANC, NRLCTBBREC, NRBAIXAREC,
                  NRRECIBOREC, IDSTATUSBREC, CDFILIAL, DTBAIXAREC,
                  VRBAIXAREC, CDREDUCONT, CDTPBAIXAREC, CDOPERADOR,
                  DTLANCBAIXAR, DSBAIXAREC)
              VALUES
                 (C_BOL_PAGO.CDEMPRESA, NULL, NULL, V_NRBAIXAREC,
                  NULL, 'P', C_BOL_PAGO.CDFILIBOLREC, C_BOL_PAGO.DTCREDITO,
                  0, C_BOL_PAGO.CDREDUCONT, C_BOL_PAGO.CDTPBAIXAREC, NULL,
                  SYSDATE, 'BAIXA AUTOMATICA (CONCILIADOR) - '||C_BOL_PAGO.NMTIPORECE);
           END IF;
           UPDATE BOLETRECEBER
              SET IDSTATBREC = 'P',
                  NRBAIXAREC = V_NRBAIXAREC,
                  CDTPBAIXAREC = C_BOL_PAGO.CDTPBAIXAREC,
                  CDFILIBAIREC = C_BOL_PAGO.CDFILIBOLREC,
                  DTLIQBOLREC = C_BOL_PAGO.DTCREDITO,
                  CDREDUCONT = C_BOL_PAGO.CDREDUCONT,
                  DTVENBOLREC = V_DTATUAL
            WHERE CDFILIAL = C_BOL_PAGO.CDFILIBOLREC
              AND NRLANBOLREC = C_BOL_PAGO.NRLANBOLREC;
           UPDATE BAIXARECEBIDA
              SET VRBAIXAREC = VRBAIXAREC + C_BOL_PAGO.VRFINALBREC
            WHERE CDREDUCONT = C_BOL_PAGO.CDREDUCONT
              AND NRBAIXAREC = V_NRBAIXAREC
              AND CDFILIAL = C_BOL_PAGO.CDFILIBOLREC;
        END IF;
     END LOOP;
     V_DTATUAL := V_DTATUAL + 1;
  END LOOP;
END;
/