CREATE OR REPLACE PROCEDURE GERA_FINANCEIRO_ECF(
   P_CDFILIAL      IN NOTAFISCAL.CDFILIAL%TYPE,
   P_NRLANCTONF    IN NOTAFISCAL.NRLANCTONF%TYPE,
   P_CDOPERADOR    IN OPERADOR.CDOPERADOR%TYPE,
   P_CDFILIEMIT    IN NOTAFISCAL.CDFILIAL%TYPE,
   P_VRTAXASERVICO IN NOTAFISCAL.VRNOTAFISC%TYPE,
   P_IDORIGEMREDZ  IN VARCHAR2,
   P_IDAPROVEXTEMP IN VENDA.IDAPROVEXTEMP%TYPE,
   P_RETORNO       OUT VARCHAR2)
AS
   V_NRLANBOL        VARCHAR2(20);
   /*DADOS DO TIPO DE RECEBIMENTO */
   V_CDTIPOCONTA     CONTARECEBER.CDTPCTRECEB%TYPE;
   V_CDCLASSFINA     CLASSFINANC.CDCLASSFINA%TYPE;
   V_IDTIPORECE      TIPORECE.IDTIPORECE%TYPE;
   V_CDTPAJUSTE      AJCTRECEBER.CDAJUCTREC%TYPE;
   V_VRPETAXA        TIPORECE.VRTAXAADMI%TYPE;
   V_NRDIASADMI      TIPORECE.NRDIASADMI%TYPE;
   V_CDFORMPGTO      TIPORECE.CDFORMPGTO%TYPE;
   /*DADOS DA FORMA DE PAGAMENTO */
   V_IDTIPODTPGTO    FORMPGTO.IDTIPODTPGTO%TYPE;
   V_IDTPPERIODO     FORMPGTO.IDTPPERIODO%TYPE;
   /* VALOR DO AJUSTE (TAXA DO CARTAO) */
   V_VRAJUSTE        AJCTRECEBER.VRAJUSTEREC%TYPE;
   /* DADOS PARA GERAR A BAIXA */
   V_CDCONTCORR      PARAMEMPRESA.CDREDUGBEMPR%TYPE;
   V_CDTIPOBAIXA     PARAMEMPRESA.CDTPBAIXAREC%TYPE;
   /*DADOS PARA GERAR A CONTA */
   V_DTVENCIMENTO    CONTARECEBER.DTORIGVENREC%TYPE;
   V_VRACUMCONTA     FLOAT;
   V_VRACUMAJUSTE    FLOAT;
   V_VRCONTA         FLOAT;
   V_COUNT           FLOAT;
   V_COUNTSEQVEN     FLOAT;
   V_QTPARCELAS      FLOAT;
   V_INTEGRAEEXTR    VARCHAR2(1);
   V_IDGERABAIXAAUTO VARCHAR2(1);
   V_CDEMPRESA       VARCHAR2(02);
   V_FORMAPUREMPR    VARCHAR2(1);
   V_VRSANGRIAREC    FLOAT;
   V_VRAJSANGRIA     FLOAT;
   V_CDTPAJUSANGR    AJCTRECEBER.CDAJUCTREC%TYPE;
   V_CDTPAJUSANGRRED AJCTRECEBER.CDAJUCTREC%TYPE;
   V_IDTPAPUFIL      VARCHAR2(1);
   V_IDCONTTXSERVSEP VARCHAR2(1);
   V_CDTPAJTXSERV    AJCTRECEBER.CDAJUCTREC%TYPE;
   V_VRTAXAADMISERV  FLOAT;
   V_CDTPAJTXADMSERV AJCTRECEBER.CDAJUCTREC%TYPE;
   V_VRTXADMINSERV   FLOAT;
   V_VRTAXASERVICO   FLOAT;
   V_VRVENDA         FLOAT;         
   V_MINPARC         CONTARECEBER.NRPARCELAREC%TYPE;
   V_IDORCLVERSAOANT VARCHAR2(1);
   V_COUNTAJUSTE     FLOAT;
   /*CORRIGE A DATA DE VENCIMENTO CONSIDERANDO FERIADO BANCARIO*/
   PROCEDURE CONSISTE_FERI_BANC(P_CDFILIEMIRECE IN VARCHAR2,
                                P_DTVENCIMENTO IN DATE,
                                P_DTVENC OUT DATE,
                                P_IDTIPODTPGTO IN VARCHAR2,
                                P_DTEMISSAO IN DATE)
   IS
      V_BOFERI BOOLEAN;
      V_NRDIASFERI NUMBER;
      V_DTANTERIOR DATE;
      V_IDCONSCALVENNF VARCHAR2(1);
   BEGIN
      V_BOFERI := TRUE;
      P_DTVENC := P_DTVENCIMENTO;

      BEGIN
         SELECT IDCONSCALVENNF
           INTO V_IDCONSCALVENNF
           FROM PARAMFILIAL
          WHERE CDFILIAL = P_CDFILIEMIRECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
              V_IDCONSCALVENNF := NULL;
      END;
      WHILE V_BOFERI LOOP
         IF P_IDTIPODTPGTO = 'UEME' THEN
            BEGIN
               IF V_IDCONSCALVENNF = 'F' THEN
                  SELECT COUNT(*)
                    INTO V_NRDIASFERI
                    FROM FERIFILI
                   WHERE CDFILIAL = P_CDFILIEMIRECE
                     AND DTFERIFILI BETWEEN P_DTEMISSAO+1 AND P_DTVENC;
               ELSIF V_IDCONSCALVENNF = 'C' THEN
                  SELECT COUNT(*)
                    INTO V_NRDIASFERI
                    FROM FERICOMP
                   WHERE CDFILIAL = P_CDFILIEMIRECE
                     AND DTFERICOMP BETWEEN P_DTEMISSAO+1 AND P_DTVENC;
               ELSE
                  SELECT COUNT(*)
                    INTO V_NRDIASFERI
                    FROM FERIBANC
                   WHERE CDFILIAL = P_CDFILIEMIRECE
                     AND DTFERIBANC BETWEEN P_DTEMISSAO+1 AND P_DTVENC;
               END IF;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_NRDIASFERI := 0;
            END;
         ELSE
            BEGIN
               IF V_IDCONSCALVENNF = 'F' THEN
                  SELECT COUNT(*)
                    INTO V_NRDIASFERI
                    FROM FERIFILI
                   WHERE CDFILIAL = P_CDFILIEMIRECE
                     AND DTFERIFILI BETWEEN P_DTEMISSAO AND P_DTVENC;
               ELSIF V_IDCONSCALVENNF = 'C' THEN
                  SELECT COUNT(*)
                    INTO V_NRDIASFERI
                    FROM FERICOMP
                   WHERE CDFILIAL = P_CDFILIEMIRECE
                     AND DTFERICOMP BETWEEN P_DTEMISSAO AND P_DTVENC;
               ELSE
                  SELECT COUNT(*)
                    INTO V_NRDIASFERI
                    FROM FERIBANC
                   WHERE CDFILIAL = P_CDFILIEMIRECE
                     AND DTFERIBANC BETWEEN P_DTEMISSAO AND P_DTVENC;
               END IF;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_NRDIASFERI := 0;
            END;
         END IF;
         IF NOT(V_NRDIASFERI = 0) THEN
            V_DTANTERIOR := P_DTVENC;
            P_DTVENC := P_DTVENC + V_NRDIASFERI;
            WHILE V_BOFERI LOOP
               V_DTANTERIOR := V_DTANTERIOR+1;
               BEGIN
                  IF V_IDCONSCALVENNF = 'F' THEN
                     SELECT COUNT(*)
                       INTO V_NRDIASFERI
                       FROM FERIFILI
                      WHERE CDFILIAL = P_CDFILIEMIRECE
                        AND DTFERIFILI BETWEEN V_DTANTERIOR AND P_DTVENC;
                  ELSIF V_IDCONSCALVENNF = 'C' THEN
                     SELECT COUNT(*)
                       INTO V_NRDIASFERI
                       FROM FERICOMP
                      WHERE CDFILIAL = P_CDFILIEMIRECE
                        AND DTFERICOMP BETWEEN V_DTANTERIOR AND P_DTVENC;
                  ELSE
                     SELECT COUNT(*)
                       INTO V_NRDIASFERI
                       FROM FERIBANC
                      WHERE CDFILIAL = P_CDFILIEMIRECE
                        AND DTFERIBANC BETWEEN V_DTANTERIOR AND P_DTVENC;
                  END IF;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_NRDIASFERI := 0;
               END;
               IF V_NRDIASFERI > 0 THEN
                  V_DTANTERIOR := P_DTVENC;
                  P_DTVENC := P_DTVENC + V_NRDIASFERI;
               ELSE
                  V_BOFERI := FALSE;
               END IF;
            END LOOP;
         ELSE
            V_BOFERI := FALSE;
         END IF;
      END LOOP;
   END;
BEGIN
   /*BUSCA AS VENDAS DA NOTA FISCAL*/
   V_COUNTSEQVEN := 1;
   V_COUNT       := 0;
   P_RETORNO     := 'N';

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

   BEGIN
      SELECT CDTPAJTXSERV, CDTPAJTXADMSERV, IDCONTTXSERVSEP, VRTAXAADMISERV
        INTO V_CDTPAJTXSERV, V_CDTPAJTXADMSERV, V_IDCONTTXSERVSEP, V_VRTAXAADMISERV
        FROM PARAVEND
       WHERE CDFILIAL = P_CDFILIEMIT;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDTPAJTXSERV    := NULL;
         V_CDTPAJTXADMSERV := NULL;
         V_IDCONTTXSERVSEP := 'N';
         V_VRTAXAADMISERV  := NULL;
   END;
   V_QTPARCELAS := 0;
   FOR C_VENDASPARC IN (SELECT SUM(MV.VRPARCRECEB) AS VRMOVIVEN, MV.DTVENCIMENTO, MV.NRSEQMOVPAG, NF.VRNOTAFISC, MO.CDTIPORECE,
                               DECODE(P_IDAPROVEXTEMP,'S',NF.DTEMISSAO,CASE WHEN P_IDORIGEMREDZ IN ('NFCE','SAT') THEN DECODE(PA.IDTPAPUFIL,'S',NF.DTENTRSAID,NF.DTEMISSAO) ELSE NF.DTENTRSAID END) AS DATA_MOVIMENTACAO,
                               NF.CDCLIENTE, NF.CDFILIEMIT, CL.NRINSJURCLIE, CL.NMRAZSOCCLIE, NF.CDEMPRESA,
                               MO.NRCHEQUEVEND, MO.CDBANCHEQVEN, MO.CDAGECHEQVEN, MO.CDCNTCHEQVEN
                          FROM NOTAFISCAL NF, MOVCAIXA MO, CLIENTE CL, PARAVEND PA, MOVCAIXAPAG MV
                         WHERE NF.CDFILIAL     = P_CDFILIAL
                           AND NF.NRLANCTONF   = P_NRLANCTONF
                           AND NF.CDFILIAL     = MO.CDFILIALNF
                           AND NF.NRLANCTONF   = MO.NRLANCTONF
                           AND PA.CDFILIAL     = MO.CDFILIAL
                           AND PA.CDFILIAL     = NF.CDFILIEMIT
                           AND NF.CDCLIENTE    = CL.CDCLIENTE
                           AND MV.CDFILIAL     = MO.CDFILIAL
                           AND MV.CDCAIXA      = MO.CDCAIXA
                           AND MV.NRSEQVENDA   = MO.NRSEQVENDA
                           AND MV.NRSEQUMOVI   = MO.NRSEQUMOVI
                           AND MV.DTABERCAIX   = MO.DTABERCAIX
                         GROUP BY MV.DTVENCIMENTO, MV.NRSEQMOVPAG, NF.VRNOTAFISC, MO.CDTIPORECE,
                               DECODE(P_IDAPROVEXTEMP,'S',NF.DTEMISSAO,CASE WHEN P_IDORIGEMREDZ IN ('NFCE','SAT') THEN DECODE(PA.IDTPAPUFIL,'S',NF.DTENTRSAID,NF.DTEMISSAO) ELSE NF.DTENTRSAID END),
                               NF.CDCLIENTE, NF.CDFILIEMIT, CL.NRINSJURCLIE, CL.NMRAZSOCCLIE, NF.CDEMPRESA,
                               MO.NRCHEQUEVEND, MO.CDBANCHEQVEN, MO.CDAGECHEQVEN, MO.CDCNTCHEQVEN
                         ORDER BY 3) LOOP

      V_VRAJSANGRIA := 0;
      --RAISE_APPLICATION_ERROR(-20501,C_VENDASPARC.CDTIPORECE,TRUE);

      /*VERIFICA SE O PARAMETRO DE INTEGRACAO E-EXTRATO ESTA MARCADO E SE A FILIAL ESTA PARAMETRIZADA PARA UTILIZAR SANGRIA*/
      SELECT MAX(NVL(IDINTEGRAEEXTRA,'N'))
        INTO V_INTEGRAEEXTR
        FROM PARAVEND
       WHERE CDFILIAL = C_VENDASPARC.CDFILIEMIT;

      /*BUSCA PARAMETRIZACAO DA TAXA POR PARCELA FILIAL E TIPO DE RECEBIMENTO*/
      BEGIN
         SELECT TFIL.VRPERCENTAXA
           INTO V_VRPETAXA
           FROM TAXAADMPARCFIL TFIL
          WHERE TFIL.CDTIPORECE      = C_VENDASPARC.CDTIPORECE
            AND TFIL.CDFILIAL        = C_VENDASPARC.CDFILIEMIT
            AND TFIL.NUMPARCTAXA     = C_VENDASPARC.NRSEQMOVPAG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
              V_VRPETAXA := NULL;
      END;
      IF NVL(V_VRPETAXA ,0 ) = 0 THEN
         BEGIN
            SELECT TX.VRPERCENTAXA
              INTO V_VRPETAXA
              FROM TAXAADMPARC TX
             WHERE TX.CDTIPORECE        = C_VENDASPARC.CDTIPORECE
               AND TX.NUMPARCTAXA       = C_VENDASPARC.NRSEQMOVPAG;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
                 V_VRPETAXA := NULL;
         END;
      END IF;
      V_QTPARCELAS := C_VENDASPARC.NRSEQMOVPAG;
      BEGIN
         SELECT NVL(TRF.CDTPCTRECEB,TR.CDTPCTRECEB) AS CDTPCTRECEB,
                TR.IDTIPORECE, NVL(TRF.CDAJTXADMREC, TR.CDAJTXADMREC) AS CDAJTXADMREC,
                NVL(TRF.VRTAXAADMFIL,  TR.VRTAXAADMI) AS VALOR_TAXA,
                NVL(TRF.NRDIASADMIFIL, TR.NRDIASADMI) AS NRDIASADMI,
                NVL(TRF.CDFORMPGTO,    TR.CDFORMPGTO) AS CDFORMPGTO
           INTO V_CDTIPOCONTA, V_IDTIPORECE, V_CDTPAJUSTE,
                V_VRPETAXA, V_NRDIASADMI, V_CDFORMPGTO
           FROM TIPORECE TR, TIPORECEFILIAL TRF
          WHERE TR.CDTIPORECE     = C_VENDASPARC.CDTIPORECE
            AND TRF.CDFILIAL(+)   = C_VENDASPARC.CDFILIEMIT
            AND TRF.CDTIPORECE(+) = TR.CDTIPORECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDTIPOCONTA := NULL;  V_IDTIPORECE := NULL;  V_CDTPAJUSTE := NULL;
            V_VRPETAXA := 0; V_NRDIASADMI := 0; V_CDFORMPGTO := 0;
      END;
      BEGIN
	     SELECT CDCLASSFINA
	  	    INTO V_CDCLASSFINA
		    FROM TIPOCTRECEBER
		   WHERE CDTPCTRECEB = V_CDTIPOCONTA;
      EXCEPTION
	      WHEN NO_DATA_FOUND THEN
		      V_CDCLASSFINA := NULL;
      END;

      /*VERIFICA SE O TIPO DE RECEBIMENTO TEM TIPO DE CONTA RELACIONADO */
      IF V_CDTIPOCONTA IS NOT NULL THEN
         /* VERIFICA SE EXISTE DIAS PARA RECEBIMENTOS */
         IF V_NRDIASADMI IS NULL THEN
            V_NRDIASADMI := 0;
         END IF;
         /* VERIFICA A FORMA DE PAGAMENTO PARA O TIPO DE RECEBIMENTO*/
         IF V_CDFORMPGTO IS NOT NULL THEN
            SELECT IDTIPODTPGTO, IDTPPERIODO
              INTO V_IDTIPODTPGTO, V_IDTPPERIODO
              FROM FORMPGTO
             WHERE CDFORMPGTO = V_CDFORMPGTO;
            IF V_IDTPPERIODO = 'M' THEN
               V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIAMES(V_CDFORMPGTO,
                                                            C_VENDASPARC.DATA_MOVIMENTACAO);
            ELSIF V_IDTPPERIODO = 'S' THEN
               V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIASEMANA(V_CDFORMPGTO,
                                                               C_VENDASPARC.DATA_MOVIMENTACAO);
            ELSE
               V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIASEMANAMES(V_CDFORMPGTO,
                                                                  C_VENDASPARC.DATA_MOVIMENTACAO);
            END IF;
            V_DTVENCIMENTO := V_DTVENCIMENTO + V_NRDIASADMI;
            IF (V_IDTIPODTPGTO = 'UEMI') OR (V_IDTIPODTPGTO = 'UEME') THEN
               CONSISTE_FERI_BANC(C_VENDASPARC.CDFILIEMIT,
                                  V_DTVENCIMENTO,
                                  V_DTVENCIMENTO,
                                  V_IDTIPODTPGTO,
                                  C_VENDASPARC.DATA_MOVIMENTACAO);
            END IF;
         ELSE
            V_DTVENCIMENTO := C_VENDASPARC.DTVENCIMENTO;
         END IF;
         V_CDCONTCORR := '';
         V_CDTIPOBAIXA := '';
         /*RECEBE DADOS DA "CONTA CORRENTE" E "TIPO DE BAIXA CT. RECEBER" */

         IF (V_CDCONTCORR IS NULL) AND (V_CDTIPOBAIXA IS NULL)  THEN
            BEGIN
               SELECT CDREDUCONT, CDTPBAIXAREC, IDGERABAIXAUTO
                 INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                 FROM TIPORECEFILIAL
                WHERE CDFILIAL = C_VENDASPARC.CDFILIEMIT
                  AND CDTIPORECE = C_VENDASPARC.CDTIPORECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
            END;
         END IF;
         IF (V_CDCONTCORR IS NULL) AND (V_CDTIPOBAIXA IS NULL)  THEN
            IF V_IDTIPORECE = '4' THEN
               BEGIN
                  SELECT CDREDUCONT, CDTPBAIXAREC, 'S'
                    INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                    FROM PARAVEND
                   WHERE CDFILIAL = C_VENDASPARC.CDFILIEMIT;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
               END;
               IF (V_CDCONTCORR IS NULL) AND (V_CDTIPOBAIXA IS NULL)  THEN
                  BEGIN
                     SELECT CDREDUCONT, CDTPBAIXAREC, IDGERABAIXAUTO
                       INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                       FROM TIPORECE
                      WHERE CDTIPORECE = C_VENDASPARC.CDTIPORECE;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
                  END;
               END IF;
             ELSE
                BEGIN
                   SELECT CDREDUCONT, CDTPBAIXAREC, IDGERABAIXAUTO
                     INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                     FROM TIPORECE
                    WHERE CDTIPORECE = C_VENDASPARC.CDTIPORECE;
                EXCEPTION
                   WHEN NO_DATA_FOUND THEN
                      V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
                END;
             END IF;
         END IF;
         IF C_VENDASPARC.NRCHEQUEVEND IS NOT NULL THEN
            INSERT INTO CHEQUERECE
              (NRCHEQUERECE, CDBANCHEQREC, CDAGECHEQREC, CDCNTCHEQREC,
               VRCHEQUERECE, NRCOMCHEQREC, DTRECECHEQUE, DTVENCHEQREC,
               CDCLIENTE,    IDTIPCHEQREC, NRCEDCHEQREC, NMCEDCHEQREC,
               IDSITCHEQREC, CDREDUCONT, CDEMPRESA)
            VALUES
              (C_VENDASPARC.NRCHEQUEVEND, C_VENDASPARC.CDBANCHEQVEN, C_VENDASPARC.CDAGECHEQVEN, C_VENDASPARC.CDCNTCHEQVEN,
               C_VENDASPARC.VRMOVIVEN, '001', C_VENDASPARC.DATA_MOVIMENTACAO, V_DTVENCIMENTO,
               C_VENDASPARC.CDCLIENTE, 'P', C_VENDASPARC.NRINSJURCLIE, C_VENDASPARC.NMRAZSOCCLIE,
               'A', V_CDCONTCORR, C_VENDASPARC.CDEMPRESA);
         END IF;
      END IF;
      /*GERA A CONTA DE ACORDO COM O NUMERO DE PARCELA*/
      /* BUSCA O NUMERO DO BOLETO */
      NOVO_CODIGO_NT('BOLETRECEBER' || P_CDFILIAL, V_NRLANBOL, V_QTPARCELAS);
      V_NRLANBOL := SUBSTR(V_NRLANBOL, 11, 10);
      /*VALOR DE CADA CONTA*/
      
      V_VRCONTA := ROUND(C_VENDASPARC.VRMOVIVEN,2);
      /*GERA O BOLETO DA CONTA*/
      GERA_BOLETOS_REC(V_NRLANBOL, P_CDFILIAL, C_VENDASPARC.CDCLIENTE,
                       C_VENDASPARC.CDEMPRESA, V_VRCONTA, V_DTVENCIMENTO,
                       C_VENDASPARC.CDTIPORECE, C_VENDASPARC.NRCHEQUEVEND, C_VENDASPARC.CDBANCHEQVEN,
                       C_VENDASPARC.CDAGECHEQVEN, C_VENDASPARC.CDCNTCHEQVEN, V_CDCONTCORR, V_CDTIPOBAIXA, C_VENDASPARC.DATA_MOVIMENTACAO);
      /*ATUALIZA O FLUXO DE CAIXA DA CONTA*/
      ATUALIZA_FLUXO_DE_CAIXA(C_VENDASPARC.CDEMPRESA,
                              C_VENDASPARC.CDFILIEMIT,
                              V_DTVENCIMENTO,
                              'E',
                              V_CDCLASSFINA,
                              V_VRCONTA,
                              0);
      /*INCLUI A CONTA A RECEBER*/
      INCLUI_CONTA('S', C_VENDASPARC.CDEMPRESA, P_CDFILIAL, P_NRLANCTONF,
                   LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), V_VRCONTA, V_DTVENCIMENTO,
                   'MOVIMENTACAO DE CAIXA', V_CDTIPOCONTA,
                   0, LPAD(TO_CHAR(V_QTPARCELAS), 2, '0'), 'A',
                   V_CDCLASSFINA, V_NRLANBOL, C_VENDASPARC.CDFILIEMIT,'S');

        /*GERA AJUSTE IMPOSTOS RETIDOS*/
        GERA_AJUSTE_BOLIMP(P_CDFILIAL,
                           P_NRLANCTONF,
                            C_VENDASPARC.CDFILIEMIT);
      /*GERA O AJUSTE DE ACRESCIMO REFERENTE A TAXA DE SERVICO (GORJETA) E A TAXA DE ADMINISTRACAO SOBRE A TAXA DE SERVICO*/
      IF (V_IDCONTTXSERVSEP = 'S') AND (P_VRTAXASERVICO > 0) THEN
         V_VRTAXASERVICO := P_VRTAXASERVICO;
         IF V_VRTAXAADMISERV > 0 THEN
            V_VRTXADMINSERV := ROUND((V_VRTAXASERVICO * V_VRTAXAADMISERV / 100),2);
            V_VRTAXASERVICO := V_VRTAXASERVICO - V_VRTXADMINSERV;
            IF V_VRTXADMINSERV > 0 THEN
               /*INSERE O AJUSTE DE ACRESCIMO - TAXA DE ADMINISTRACAO SOBRE A TAXA DE SERVICO*/
               INSERT INTO AJCTRECEBER
                  (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                   DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                   DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
               VALUES
                  (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_QTPARCELAS), 2, '0'), V_DTVENCIMENTO, V_CDTPAJTXADMSERV,
                   'TX ADMIN DA TX SERV', V_VRTXADMINSERV, V_CDCLASSFINA, C_VENDASPARC.CDEMPRESA, C_VENDASPARC.CDFILIEMIT,
                   V_DTVENCIMENTO, 'E', '', '', 'N');
               /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
               UPDATE CONTARECEBER
                  SET VRATUAREC    = VRATUAREC + V_VRTXADMINSERV
                WHERE CDFILIAL     = P_CDFILIAL
                  AND NRLANCTONF   = P_NRLANCTONF
                  AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_QTPARCELAS), 2, '0');
               /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC + V_VRTXADMINSERV,
                      VRBOLREC    = VRBOLREC + V_VRTXADMINSERV
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
               /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR + V_VRTXADMINSERV
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         END IF;
         /*INSERE O AJUSTE DE ACRESCIMO - TAXA DE SERVICO*/
         INSERT INTO AJCTRECEBER
            (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
             DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
             DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
         VALUES
            (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_QTPARCELAS), 2, '0'), V_DTVENCIMENTO, V_CDTPAJTXSERV,
             'TAXA DE SERVICO', V_VRTAXASERVICO, V_CDCLASSFINA, C_VENDASPARC.CDEMPRESA, C_VENDASPARC.CDFILIEMIT,
             V_DTVENCIMENTO, 'E', '', '', 'N');
         /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
         UPDATE CONTARECEBER
            SET VRATUAREC    = VRATUAREC + V_VRTAXASERVICO
          WHERE CDFILIAL     = P_CDFILIAL
            AND NRLANCTONF   = P_NRLANCTONF
            AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
            AND NRPARCELAREC = LPAD(TO_CHAR(V_QTPARCELAS), 2, '0');
         /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
         UPDATE BOLETRECEBER
            SET VRFINALBREC = VRFINALBREC + V_VRTAXASERVICO,
                VRBOLREC    = VRBOLREC + V_VRTAXASERVICO
          WHERE CDFILIAL    = P_CDFILIAL
            AND NRLANBOLREC = V_NRLANBOL;
         /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
         UPDATE TPRECBOLETO
            SET VRTPRECBOLR = VRTPRECBOLR + V_VRTAXASERVICO
          WHERE CDFILIAL    = P_CDFILIAL
            AND NRLANBOLREC = V_NRLANBOL;
      END IF;
      BEGIN
         SELECT SUM(NVL(VRATUAREC,0))
           INTO V_VRACUMCONTA
           FROM CONTARECEBER
          WHERE CDFILIAL   = P_CDFILIAL
            AND NRLANCTONF = P_NRLANCTONF;
      EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_VRACUMCONTA := NULL;
      END;
      /* CALCULA VALOR DO AJUSTE (TAXA DO CARTAO)*/
      V_VRAJUSTE := 0;
      IF (V_CDTPAJUSTE IS NOT NULL) AND (V_VRPETAXA > 0)  THEN
         V_VRAJUSTE := ROUND(V_VRPETAXA *  V_VRACUMCONTA/ 100, 2);
      END IF;
      /*ATUALIZA O FLUXO DE CAIXA DA CONTA*/
      ATUALIZA_FLUXO_DE_CAIXA(C_VENDASPARC.CDEMPRESA,
                              C_VENDASPARC.CDFILIEMIT,
                              V_DTVENCIMENTO,
                              'E',
                              V_CDCLASSFINA,
                              V_VRACUMCONTA - V_VRAJUSTE,
                              0);
      /*GERA O AJUSTE DA CONTA A RECEBER*/
      IF (V_CDTPAJUSTE IS NOT NULL) AND (V_VRAJUSTE <> 0) THEN
         /*INSERE O AJUSTE*/
         INSERT INTO AJCTRECEBER
               (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
         VALUES
               (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_QTPARCELAS), 2, '0'), V_DTVENCIMENTO, V_CDTPAJUSTE,
                'AJUSTE', V_VRAJUSTE, V_CDCLASSFINA, C_VENDASPARC.CDEMPRESA, C_VENDASPARC.CDFILIEMIT,
                V_DTVENCIMENTO, 'E', '', '', 'S');
         /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
         IF V_IDORCLVERSAOANT = 'S' THEN
            FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                     FROM CONTARECEBER
                                    WHERE CDFILIAL     = P_CDFILIAL
                                      AND NRLANCTONF   = P_NRLANCTONF
                                      AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                      AND NRPARCELAREC = LPAD(TO_CHAR(V_QTPARCELAS), 2, '0'))
            LOOP
               UPDATE CONTARECEBER
                  SET VRATUAREC    = VRATUAREC - V_VRAJUSTE
                WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                  AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                  AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                  AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;

            END LOOP;
         ELSE
            UPDATE CONTARECEBER
               SET VRATUAREC    = VRATUAREC - V_VRAJUSTE
             WHERE CDFILIAL     = P_CDFILIAL
               AND NRLANCTONF   = P_NRLANCTONF
               AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
               AND NRPARCELAREC = LPAD(TO_CHAR(V_QTPARCELAS), 2, '0');
         END IF;

         /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
         IF V_IDORCLVERSAOANT = 'S' THEN
            FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                     FROM BOLETRECEBER
                                    WHERE CDFILIAL    = P_CDFILIAL
                                      AND NRLANBOLREC = V_NRLANBOL)
            LOOP
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC - V_VRAJUSTE,
                      VRBOLREC    = VRBOLREC - V_VRAJUSTE
                WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                  AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
            END LOOP;
         ELSE
            UPDATE BOLETRECEBER
               SET VRFINALBREC = VRFINALBREC - V_VRAJUSTE,
                   VRBOLREC    = VRBOLREC - V_VRAJUSTE
             WHERE CDFILIAL    = P_CDFILIAL
               AND NRLANBOLREC = V_NRLANBOL;
         END IF;

         /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
         IF V_IDORCLVERSAOANT = 'S' THEN
            FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                    FROM TPRECBOLETO
                                   WHERE CDFILIAL    = P_CDFILIAL
                                     AND NRLANBOLREC = V_NRLANBOL)
            LOOP
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJUSTE
                WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                  AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                  AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
            END LOOP;
         ELSE
            UPDATE TPRECBOLETO
               SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJUSTE
             WHERE CDFILIAL    = P_CDFILIAL
               AND NRLANBOLREC = V_NRLANBOL;
         END IF;
      END IF;
      /*GERA O RATEIO DA CONTA*/
      GERA_RATEIO_CONTA('S', P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'),
                        LPAD(TO_CHAR(V_QTPARCELAS), 2, '0'), V_VRACUMCONTA - V_VRAJUSTE, V_CDTIPOCONTA, C_VENDASPARC.CDFILIEMIT);

      /*A PRINCIPIO A BAIXA DAS CONTAS PARCELADAS NAO SERA GERADA AUTOMATICAMENTE
      IF NOT(V_CDCONTCORR IS NULL)   AND
         NOT(V_CDTIPOBAIXA IS NULL)  AND
         (V_INTEGRAEEXTR = 'N' OR V_IDTIPORECE IN ('3','4')) AND
         (V_IDGERABAIXAAUTO = 'S') THEN
         GERA_BAIXA('S', C_VENDASPARC.CDEMPRESA, P_CDFILIAL,
                    V_NRLANBOL, P_CDFILIAL, C_VENDASPARC.DATA_MOVIMENTACAO,
                    V_CDCONTCORR, V_CDTIPOBAIXA, P_CDOPERADOR);
      END IF;*/
      P_RETORNO := 'S';
   END LOOP;
   /*FIM LOOP DE VENDAS PARCELADAS*/
   V_QTPARCELAS := 0;
   /* INICIO DE LOOP DE VENDAS SEM PARCELAMENTO*/
   FOR C_VENDAS IN (SELECT DISTINCT SUM(TRUNC(DECODE(MO.IDTIPOMOVIVE,'T',VRMOVIVEND,DECODE(MO.IDTIPOMOVIVE, 'E',VRMOVIVEND, DECODE(MO.IDTIPOMOVIVE, 'S',-VRMOVIVEND,0))),2)) AS VRMOVIVEN, MO.CDTIPORECE,
                           DECODE(P_IDAPROVEXTEMP,'S',NF.DTEMISSAO,CASE WHEN P_IDORIGEMREDZ IN ('NFCE','SAT') THEN DECODE(PA.IDTPAPUFIL,'S',NF.DTENTRSAID,NF.DTEMISSAO) ELSE NF.DTENTRSAID END) AS DATA_MOVIMENTACAO,
                           NF.CDCLIENTE, NF.CDFILIEMIT, CL.NRINSJURCLIE, CL.NMRAZSOCCLIE, NF.CDEMPRESA,
                           MO.NRCHEQUEVEND, MO.CDBANCHEQVEN, MO.CDAGECHEQVEN, MO.CDCNTCHEQVEN
                      FROM NOTAFISCAL NF, MOVCAIXA MO, CLIENTE CL, PARAVEND PA
                     WHERE NF.CDFILIAL     = P_CDFILIAL
                       AND NF.NRLANCTONF   = P_NRLANCTONF
                       AND NF.CDFILIAL     = MO.CDFILIALNF
                       AND NF.NRLANCTONF   = MO.NRLANCTONF
                       AND PA.CDFILIAL     = MO.CDFILIAL
                       AND PA.CDFILIAL     = NF.CDFILIEMIT
                       AND NF.CDCLIENTE    = CL.CDCLIENTE
                       AND MO.NRSEQVENDA  IS NOT NULL
                       AND NOT EXISTS (SELECT 1
                                         FROM MOVCAIXAPAG MV
                                        WHERE MV.CDFILIAL     = MO.CDFILIAL
                                          AND MV.CDCAIXA      = MO.CDCAIXA
                                          AND MV.NRSEQVENDA   = MO.NRSEQVENDA
                                          AND MV.NRSEQUMOVI   = MO.NRSEQUMOVI
                                          AND MV.DTABERCAIX   = MO.DTABERCAIX)
                     GROUP BY MO.CDTIPORECE,
                           DECODE(P_IDAPROVEXTEMP,'S',NF.DTEMISSAO,CASE WHEN P_IDORIGEMREDZ IN ('NFCE','SAT') THEN DECODE(PA.IDTPAPUFIL,'S',NF.DTENTRSAID,NF.DTEMISSAO) ELSE NF.DTENTRSAID END),
                           NF.CDCLIENTE, NF.CDFILIEMIT, CL.NRINSJURCLIE, CL.NMRAZSOCCLIE, NF.CDEMPRESA,
                           MO.NRCHEQUEVEND, MO.CDBANCHEQVEN, MO.CDAGECHEQVEN, MO.CDCNTCHEQVEN) LOOP

      V_VRAJSANGRIA := 0;
      --RAISE_APPLICATION_ERROR(-20501,C_VENDAS.CDTIPORECE,TRUE);

      /*BUSCA OS TIPOS DE AJUSTE DA DIFERENCA DA SANGRIA PARA O TIPO DE RECEBIMENTO*/
      BEGIN
         SELECT CDTPAJUSANGRACR, CDTPAJUSANGRRED
           INTO V_CDTPAJUSANGR, V_CDTPAJUSANGRRED
           FROM TIPORECE
          WHERE CDTIPORECE   = C_VENDAS.CDTIPORECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDTPAJUSANGR    := NULL;
            V_CDTPAJUSANGRRED := NULL;
      END;

      /*BUSCA OS TIPOS DE AJUSTE DA DIFERENCA DA SANGRIA, PARA A FILIAL*/
      IF (V_CDTPAJUSANGR IS NULL) THEN
         SELECT CDTPAJUSANGRACR
           INTO V_CDTPAJUSANGR
           FROM PARAVEND
          WHERE CDFILIAL = C_VENDAS.CDFILIEMIT;
      END IF;
      IF (V_CDTPAJUSANGRRED IS NULL) THEN
         SELECT CDTPAJUSANGRRED
           INTO V_CDTPAJUSANGRRED
           FROM PARAVEND
          WHERE CDFILIAL = C_VENDAS.CDFILIEMIT;
      END IF;

      /*VERIFICA SE O PARAMETRO DE INTEGRACAO E-EXTRATO ESTA MARCADO E SE A FILIAL ESTA PARAMETRIZADA PARA UTILIZAR SANGRIA*/
      SELECT MAX(NVL(IDINTEGRAEEXTRA,'N')), MAX(IDTPAPUFIL)
        INTO V_INTEGRAEEXTR, V_IDTPAPUFIL
        FROM PARAVEND
       WHERE CDFILIAL = C_VENDAS.CDFILIEMIT;

      /*BUSCA OS VALORES DA SANGRIA, SE A FILIAL ESTA PARAMETRIZADA PARA UTILIZAR SANGRIA*/
      IF NVL(V_IDTPAPUFIL,'V') = 'S' THEN
         SELECT TRUNC(SUM(DECODE(MO.IDTIPOMOVIVE, 'G', MO.VRMOVIVEND,0)),2) AS VRMOVIVEN
           INTO V_VRSANGRIAREC
           FROM NOTAFISCAL NF, MOVCAIXA MO, TIPORECE TP, PARAVEND PA
          WHERE NF.CDFILIAL     = P_CDFILIAL
            AND NF.NRLANCTONF   = P_NRLANCTONF
            AND NF.CDFILIAL     = MO.CDFILIALNF
            AND NF.NRLANCTONF   = MO.NRLANCTONF
            AND PA.CDFILIAL     = MO.CDFILIAL
            AND MO.IDTIPOMOVIVE = 'G'
            AND MO.CDTIPORECE   = TP.CDTIPORECE
            AND MO.CDTIPORECE   = C_VENDAS.CDTIPORECE;
         V_VRVENDA := NVL(C_VENDAS.VRMOVIVEN,0)+NVL(P_VRTAXASERVICO,0);
         /*VERIFICA SE O VALOR DA VENDA E DIFERENTE DO VALOR DA SANGRIA PARA O MESMO TIPO DE RECEBIMENTO*/
         IF NVL(V_VRVENDA,0) <> NVL(V_VRSANGRIAREC,0) THEN
            IF NVL(V_VRVENDA,0) < 0 THEN
              V_VRVENDA := 0;           
            END IF;
            V_VRAJSANGRIA := V_VRVENDA - NVL(V_VRSANGRIAREC,0);
            UPDATE NOTAFISCAL
               SET VRPRODUTOS = VRPRODUTOS - V_VRAJSANGRIA
             WHERE CDFILIAL   = P_CDFILIAL
               AND NRLANCTONF = P_NRLANCTONF;
         END IF;
      END IF;

      /*BUSCA PARAMETRIZACAO DO TIPO DE RECEBIMENTO*/
      BEGIN
         SELECT NVL(TRF.CDTPCTRECEB,TR.CDTPCTRECEB) AS CDTPCTRECEB,
                TR.IDTIPORECE, NVL(TRF.CDAJTXADMREC, TR.CDAJTXADMREC) AS CDAJTXADMREC,
                NVL(TRF.VRTAXAADMFIL,  TR.VRTAXAADMI) AS VALOR_TAXA,
                NVL(TRF.NRDIASADMIFIL, TR.NRDIASADMI) AS NRDIASADMI,
                NVL(TRF.CDFORMPGTO,    TR.CDFORMPGTO) AS CDFORMPGTO
           INTO V_CDTIPOCONTA, V_IDTIPORECE, V_CDTPAJUSTE,
                V_VRPETAXA, V_NRDIASADMI, V_CDFORMPGTO
           FROM TIPORECE TR, TIPORECEFILIAL TRF
          WHERE TR.CDTIPORECE   = C_VENDAS.CDTIPORECE
            AND TRF.CDFILIAL(+) = C_VENDAS.CDFILIEMIT
            AND TRF.CDTIPORECE(+)   = TR.CDTIPORECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDTIPOCONTA := NULL;  V_IDTIPORECE := NULL;  V_CDTPAJUSTE := NULL;
            V_VRPETAXA := 0; V_NRDIASADMI := 0; V_CDFORMPGTO := 0;
      END;
      BEGIN
	     SELECT CDCLASSFINA
		    INTO V_CDCLASSFINA
		    FROM TIPOCTRECEBER
		   WHERE CDTPCTRECEB = V_CDTIPOCONTA;
      EXCEPTION
	       WHEN NO_DATA_FOUND THEN
		    V_CDCLASSFINA := NULL;
      END;
      /*VERIFICA SE O TIPO DE RECEBIMENTO TEM TIPO DE CONTA RELACIONADO */
      IF V_CDTIPOCONTA IS NOT NULL THEN
         /* VERIFICA SE EXISTE DIAS PARA RECEBIMENTOS */
         IF V_NRDIASADMI IS NULL THEN
            V_NRDIASADMI := 0;
         END IF;
         /* VERIFICA A FORMA DE PAGAMENTO PARA O TIPO DE RECEBIMENTO*/
         IF V_CDFORMPGTO IS NOT NULL THEN
            SELECT IDTIPODTPGTO, IDTPPERIODO
              INTO V_IDTIPODTPGTO, V_IDTPPERIODO
              FROM FORMPGTO
             WHERE CDFORMPGTO = V_CDFORMPGTO;
            IF V_IDTPPERIODO = 'M' THEN
               V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIAMES(V_CDFORMPGTO,
                                                            C_VENDAS.DATA_MOVIMENTACAO);
            ELSIF V_IDTPPERIODO = 'S' THEN
               V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIASEMANA(V_CDFORMPGTO,
                                                               C_VENDAS.DATA_MOVIMENTACAO);
            ELSE
               V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIASEMANAMES(V_CDFORMPGTO,
                                                                  C_VENDAS.DATA_MOVIMENTACAO);
            END IF;
            V_DTVENCIMENTO := V_DTVENCIMENTO + V_NRDIASADMI;
            IF (V_IDTIPODTPGTO = 'UEMI') OR (V_IDTIPODTPGTO = 'UEME') THEN
               CONSISTE_FERI_BANC(C_VENDAS.CDFILIEMIT,
                                  V_DTVENCIMENTO,
                                  V_DTVENCIMENTO,
                                  V_IDTIPODTPGTO,
                                  C_VENDAS.DATA_MOVIMENTACAO);
            END IF;
         ELSE
            V_DTVENCIMENTO := C_VENDAS.DATA_MOVIMENTACAO + V_NRDIASADMI;
         END IF;
         V_CDCONTCORR := '';
         V_CDTIPOBAIXA := '';
         /*RECEBE DADOS DA "CONTA CORRENTE" E "TIPO DE BAIXA CT. RECEBER" */

         IF (V_CDCONTCORR IS NULL) AND (V_CDTIPOBAIXA IS NULL)  THEN
            BEGIN
               SELECT CDREDUCONT, CDTPBAIXAREC, IDGERABAIXAUTO
                 INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                 FROM TIPORECEFILIAL
                WHERE CDFILIAL = C_VENDAS.CDFILIEMIT
                  AND CDTIPORECE = C_VENDAS.CDTIPORECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
            END;
         END IF;
         IF (V_CDCONTCORR IS NULL) AND (V_CDTIPOBAIXA IS NULL)  THEN
            IF V_IDTIPORECE = '4' THEN
               BEGIN
                  SELECT CDREDUCONT, CDTPBAIXAREC, 'S'
                    INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                    FROM PARAVEND
                   WHERE CDFILIAL = C_VENDAS.CDFILIEMIT;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
               END;
               IF (V_CDCONTCORR IS NULL) AND (V_CDTIPOBAIXA IS NULL)  THEN
                  BEGIN
                     SELECT CDREDUCONT, CDTPBAIXAREC, IDGERABAIXAUTO
                       INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                       FROM TIPORECE
                      WHERE CDTIPORECE = C_VENDAS.CDTIPORECE;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
                  END;
               END IF;
             ELSE
                BEGIN
                   SELECT CDREDUCONT, CDTPBAIXAREC, IDGERABAIXAUTO
                     INTO V_CDCONTCORR, V_CDTIPOBAIXA, V_IDGERABAIXAAUTO
                     FROM TIPORECE
                    WHERE CDTIPORECE = C_VENDAS.CDTIPORECE;
                EXCEPTION
                   WHEN NO_DATA_FOUND THEN
                      V_CDCONTCORR := NULL; V_CDTIPOBAIXA := NULL;
                END;
             END IF;
         END IF;
      END IF;
      /*GERA A CONTA DE ACORDO COM O NUMERO DE PARCELA*/
      BEGIN
         SELECT COUNT(*)
           INTO V_QTPARCELAS
           FROM CONTARECEBER
          WHERE CDFILIAL   = P_CDFILIAL
            AND NRLANCTONF = P_NRLANCTONF;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
         V_QTPARCELAS := 0;
      END;
      IF NVL(V_QTPARCELAS,0) = 0  THEN

        IF C_VENDAS.NRCHEQUEVEND IS NOT NULL THEN
            INSERT INTO CHEQUERECE
              (NRCHEQUERECE, CDBANCHEQREC, CDAGECHEQREC, CDCNTCHEQREC,
               VRCHEQUERECE, NRCOMCHEQREC, DTRECECHEQUE, DTVENCHEQREC,
               CDCLIENTE,    IDTIPCHEQREC, NRCEDCHEQREC, NMCEDCHEQREC,
               IDSITCHEQREC, CDREDUCONT, CDEMPRESA)
            VALUES
              (C_VENDAS.NRCHEQUEVEND, C_VENDAS.CDBANCHEQVEN, C_VENDAS.CDAGECHEQVEN, C_VENDAS.CDCNTCHEQVEN,
               C_VENDAS.VRMOVIVEN, '001', C_VENDAS.DATA_MOVIMENTACAO, V_DTVENCIMENTO,
               C_VENDAS.CDCLIENTE, 'P', C_VENDAS.NRINSJURCLIE, C_VENDAS.NMRAZSOCCLIE,
               'A', V_CDCONTCORR, C_VENDAS.CDEMPRESA);
         END IF;
         V_QTPARCELAS := 1;
         /* BUSCA O NUMERO DO BOLETO */
         NOVO_CODIGO_NT('BOLETRECEBER' || P_CDFILIAL, V_NRLANBOL, V_QTPARCELAS);
         V_NRLANBOL := SUBSTR(V_NRLANBOL, 11, 10);
         /*VALOR DE CADA CONTA*/
         IF ROUND(C_VENDAS.VRMOVIVEN,2) >= 0 THEN
            V_VRCONTA := ROUND(C_VENDAS.VRMOVIVEN,2);
         ELSE 
            V_VRCONTA := 0;
         END IF;
         /*GERA O BOLETO DA CONTA*/
         GERA_BOLETOS_REC(V_NRLANBOL, P_CDFILIAL, C_VENDAS.CDCLIENTE,
                          C_VENDAS.CDEMPRESA, V_VRCONTA, V_DTVENCIMENTO,
                          C_VENDAS.CDTIPORECE, C_VENDAS.NRCHEQUEVEND, C_VENDAS.CDBANCHEQVEN,
                          C_VENDAS.CDAGECHEQVEN, C_VENDAS.CDCNTCHEQVEN, V_CDCONTCORR, V_CDTIPOBAIXA, C_VENDAS.DATA_MOVIMENTACAO);
         /*ATUALIZA O FLUXO DE CAIXA DA CONTA*/
         ATUALIZA_FLUXO_DE_CAIXA(C_VENDAS.CDEMPRESA,
                                 C_VENDAS.CDFILIEMIT,
                                 V_DTVENCIMENTO,
                                 'E',
                                 V_CDCLASSFINA,
                                 V_VRCONTA,
                                 0);
         /*INCLUI A CONTA A RECEBER*/
         INCLUI_CONTA('S', C_VENDAS.CDEMPRESA, P_CDFILIAL, P_NRLANCTONF,
                      LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), V_VRCONTA, V_DTVENCIMENTO,
                      'MOVIMENTACAO DE CAIXA', V_CDTIPOCONTA,
                      0, LPAD(TO_CHAR(V_COUNT), 2, '0'), 'A',
                      V_CDCLASSFINA, V_NRLANBOL, C_VENDAS.CDFILIEMIT);
         /*GERA AJUSTE IMPOSTOS RETIDOS*/
         GERA_AJUSTE_BOLIMP(P_CDFILIAL,
                           P_NRLANCTONF,
                            C_VENDAS.CDFILIEMIT);
         /*GERA O AJUSTE DE ACRESCIMO REFERENTE A TAXA DE SERVICO (GORJETA) E A TAXA DE ADMINISTRACAO SOBRE A TAXA DE SERVICO*/
         IF (V_IDCONTTXSERVSEP = 'S') AND (P_VRTAXASERVICO > 0) THEN
            V_VRTAXASERVICO := P_VRTAXASERVICO;
            IF V_VRTAXAADMISERV > 0 THEN
               V_VRTXADMINSERV := ROUND((V_VRTAXASERVICO * V_VRTAXAADMISERV / 100),2);
               V_VRTAXASERVICO := V_VRTAXASERVICO - V_VRTXADMINSERV;
               IF V_VRTXADMINSERV > 0 THEN
                  /*INSERE O AJUSTE DE ACRESCIMO - TAXA DE ADMINISTRACAO SOBRE A TAXA DE SERVICO*/
                  INSERT INTO AJCTRECEBER
                     (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                      DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                      DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
                  VALUES
                     (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_COUNT), 2, '0'), V_DTVENCIMENTO, V_CDTPAJTXADMSERV,
                      'TX ADMIN DA TX SERV', V_VRTXADMINSERV, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                      V_DTVENCIMENTO, 'E', '', '', 'N');
                  /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
                 IF V_IDORCLVERSAOANT = 'S' THEN
                    FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                             FROM CONTARECEBER
                                            WHERE CDFILIAL     = P_CDFILIAL
                                              AND NRLANCTONF   = P_NRLANCTONF
                                              AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                              AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0'))
                    LOOP
                       UPDATE CONTARECEBER
                          SET VRATUAREC    = VRATUAREC + V_VRTXADMINSERV
                        WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                          AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                          AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                          AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
  
                    END LOOP;
                 ELSE
                    UPDATE CONTARECEBER
                       SET VRATUAREC    = VRATUAREC + V_VRTXADMINSERV
                     WHERE CDFILIAL     = P_CDFILIAL
                       AND NRLANCTONF   = P_NRLANCTONF
                       AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                       AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0');
                 END IF;

				/*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
                IF V_IDORCLVERSAOANT = 'S' THEN
                   FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                            FROM BOLETRECEBER
                                           WHERE CDFILIAL    = P_CDFILIAL
                                             AND NRLANBOLREC = V_NRLANBOL)
                   LOOP
                      UPDATE BOLETRECEBER
                         SET VRFINALBREC = VRFINALBREC + V_VRTXADMINSERV,
                             VRBOLREC    = VRBOLREC + V_VRTXADMINSERV
                       WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                         AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
                   END LOOP;
                ELSE
                   UPDATE BOLETRECEBER
                      SET VRFINALBREC = VRFINALBREC + V_VRTXADMINSERV,
                          VRBOLREC    = VRBOLREC + V_VRTXADMINSERV
                    WHERE CDFILIAL    = P_CDFILIAL
                      AND NRLANBOLREC = V_NRLANBOL;
                END IF;
				
                  /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
                  IF V_IDORCLVERSAOANT = 'S' THEN
                     FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                             FROM TPRECBOLETO
                                            WHERE CDFILIAL    = P_CDFILIAL
                                              AND NRLANBOLREC = V_NRLANBOL)
                     LOOP
                        UPDATE TPRECBOLETO
                           SET VRTPRECBOLR = VRTPRECBOLR + V_VRTXADMINSERV
                         WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                           AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                           AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
                     END LOOP;
                  ELSE
                     UPDATE TPRECBOLETO
                        SET VRTPRECBOLR = VRTPRECBOLR + V_VRTXADMINSERV
                      WHERE CDFILIAL    = P_CDFILIAL
                        AND NRLANBOLREC = V_NRLANBOL;
                  END IF;
               END IF;
            END IF;
            /*INSERE O AJUSTE DE ACRESCIMO - TAXA DE SERVICO*/
            INSERT INTO AJCTRECEBER
               (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
            VALUES
               (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_COUNT), 2, '0'), V_DTVENCIMENTO, V_CDTPAJTXSERV,
                'TAXA DE SERVICO', V_VRTAXASERVICO, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                V_DTVENCIMENTO, 'E', '', '', 'N');
            /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                        FROM CONTARECEBER
                                       WHERE CDFILIAL     = P_CDFILIAL
                                         AND NRLANCTONF   = P_NRLANCTONF
                                         AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                         AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0'))
               LOOP
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC + V_VRTAXASERVICO
                   WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                     AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                     AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                     AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
   
               END LOOP;
            ELSE
               UPDATE CONTARECEBER
                  SET VRATUAREC    = VRATUAREC + V_VRTAXASERVICO
                WHERE CDFILIAL     = P_CDFILIAL
                  AND NRLANCTONF   = P_NRLANCTONF
                  AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0');
            END IF;

    	    /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                        FROM BOLETRECEBER
                                       WHERE CDFILIAL    = P_CDFILIAL
                                         AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC + V_VRTAXASERVICO,
                         VRBOLREC    = VRBOLREC + V_VRTAXASERVICO
                   WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                     AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
               END LOOP;
            ELSE
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC + V_VRTAXASERVICO,
                      VRBOLREC    = VRBOLREC + V_VRTAXASERVICO
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;

   		    /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                       FROM TPRECBOLETO
                                      WHERE CDFILIAL    = P_CDFILIAL
                                        AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR = VRTPRECBOLR + V_VRTXADMINSERV
                   WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                     AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                     AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
               END LOOP;
            ELSE
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR + V_VRTAXASERVICO
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         END IF;
		 
         /*GERA O AJUSTE DA CONTA A RECEBER REFERENTE A DIFERENCA DA SANGRIA*/
         IF V_VRAJSANGRIA > 0 AND V_CDTPAJUSANGRRED IS NOT NULL THEN
            /*INSERE O AJUSTE DE REDUCAO*/
            INSERT INTO AJCTRECEBER
                  (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                   DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                   DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
            VALUES
                  (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_COUNT), 2, '0'), V_DTVENCIMENTO, V_CDTPAJUSANGRRED,
                   'AJUSTE DIF-SANGRIA', V_VRAJSANGRIA, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                   V_DTVENCIMENTO, 'E', '', '', 'N');
            /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                        FROM CONTARECEBER
                                       WHERE CDFILIAL     = P_CDFILIAL
                                         AND NRLANCTONF   = P_NRLANCTONF
                                         AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                         AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0'))
               LOOP
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC - V_VRAJSANGRIA
                   WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                     AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                     AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                     AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
   
               END LOOP;
            ELSE
               UPDATE CONTARECEBER
                  SET VRATUAREC    = VRATUAREC - V_VRAJSANGRIA
                WHERE CDFILIAL     = P_CDFILIAL
                  AND NRLANCTONF   = P_NRLANCTONF
                  AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0');
            END IF;

            /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                        FROM BOLETRECEBER
                                       WHERE CDFILIAL    = P_CDFILIAL
                                         AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC - V_VRAJSANGRIA,
                         VRBOLREC    = VRBOLREC - V_VRAJSANGRIA
                   WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                     AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
               END LOOP;
            ELSE
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC - V_VRAJSANGRIA,
                      VRBOLREC    = VRBOLREC - V_VRAJSANGRIA
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;

    		/*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                       FROM TPRECBOLETO
                                      WHERE CDFILIAL    = P_CDFILIAL
                                        AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJSANGRIA
                   WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                     AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                     AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
               END LOOP;
            ELSE
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJSANGRIA
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         ELSIF V_VRAJSANGRIA < 0 AND V_CDTPAJUSANGR IS NOT NULL THEN
             /*INSERE O AJUSTE DE ACRESCIMO*/
            INSERT INTO AJCTRECEBER
                  (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                   DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                   DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
            VALUES
                  (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_COUNT), 2, '0'), V_DTVENCIMENTO, V_CDTPAJUSANGR,
                   'AJUSTE DIF-SANGRIA', ABS(V_VRAJSANGRIA), V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                   V_DTVENCIMENTO, 'E', '', '', 'N');
            /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                        FROM CONTARECEBER
                                       WHERE CDFILIAL     = P_CDFILIAL
                                         AND NRLANCTONF   = P_NRLANCTONF
                                         AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                         AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0'))
               LOOP
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC + ABS(V_VRAJSANGRIA)
                   WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                     AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                     AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                     AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
   
               END LOOP;
            ELSE
               UPDATE CONTARECEBER
                  SET VRATUAREC = VRATUAREC + ABS(V_VRAJSANGRIA)
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = P_NRLANCTONF
                  AND NRSEQVENREC = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0');
            END IF;

            /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                        FROM BOLETRECEBER
                                       WHERE CDFILIAL    = P_CDFILIAL
                                         AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC + ABS(V_VRAJSANGRIA),
                         VRBOLREC    = VRBOLREC + ABS(V_VRAJSANGRIA)
                   WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                     AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
               END LOOP;
            ELSE
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC + ABS(V_VRAJSANGRIA),
                      VRBOLREC    = VRBOLREC + ABS(V_VRAJSANGRIA)
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;

            /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                       FROM TPRECBOLETO
                                      WHERE CDFILIAL    = P_CDFILIAL
                                        AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR  = VRTPRECBOLR + ABS(V_VRAJSANGRIA)
                   WHERE CDFILIAL     = C_TPRECBOLETO.CDFILIAL
                     AND NRLANBOLREC  = C_TPRECBOLETO.NRLANBOLREC
                     AND NRSEQTPRECBO = C_TPRECBOLETO.NRSEQTPRECBO;
               END LOOP;
            ELSE
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR + ABS(V_VRAJSANGRIA)
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         END IF;
         BEGIN
            SELECT SUM(NVL(VRATUAREC,0))
              INTO V_VRACUMCONTA
              FROM CONTARECEBER
             WHERE CDFILIAL   = P_CDFILIAL
               AND NRLANCTONF = P_NRLANCTONF;
         EXCEPTION
               WHEN NO_DATA_FOUND THEN
                 V_VRACUMCONTA := NULL;
         END;
         /* CALCULA VALOR DO AJUSTE (TAXA DO CARTAO)*/
         V_VRAJUSTE := 0;
         IF (V_CDTPAJUSTE IS NOT NULL) AND (V_VRPETAXA > 0)  THEN
            V_VRAJUSTE := ROUND(V_VRPETAXA *  V_VRACUMCONTA/ 100, 2);
         END IF;
         /*ATUALIZA O FLUXO DE CAIXA DA CONTA*/
         ATUALIZA_FLUXO_DE_CAIXA(C_VENDAS.CDEMPRESA,
                                 C_VENDAS.CDFILIEMIT,
                                 V_DTVENCIMENTO,
                                 'E',
                                 V_CDCLASSFINA,
                                 V_VRACUMCONTA - V_VRAJUSTE,
                                 0);
         /*GERA O AJUSTE DA CONTA A RECEBER*/
         IF (V_CDTPAJUSTE IS NOT NULL) AND (V_VRAJUSTE <> 0) THEN
            /*INSERE O AJUSTE*/
            INSERT INTO AJCTRECEBER
                  (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                   DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                   DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
            VALUES
                  (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_COUNT), 2, '0'), V_DTVENCIMENTO, V_CDTPAJUSTE,
                   'AJUSTE', V_VRAJUSTE, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                   V_DTVENCIMENTO, 'E', '', '', 'S');
            /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                        FROM CONTARECEBER
                                       WHERE CDFILIAL     = P_CDFILIAL
                                         AND NRLANCTONF   = P_NRLANCTONF
                                         AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                         AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0'))
               LOOP
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC - V_VRAJUSTE
                   WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                     AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                     AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                     AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
            
               END LOOP;
            ELSE
               UPDATE CONTARECEBER
                  SET VRATUAREC = VRATUAREC - V_VRAJUSTE
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = P_NRLANCTONF
                  AND NRSEQVENREC = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_COUNT), 2, '0');
            END IF;
		 
            /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                        FROM BOLETRECEBER
                                       WHERE CDFILIAL    = P_CDFILIAL
                                         AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC - V_VRAJUSTE,
                         VRBOLREC    = VRBOLREC - V_VRAJUSTE
                   WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                     AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
               END LOOP;
            ELSE
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC - V_VRAJUSTE,
                      VRBOLREC    = VRBOLREC - V_VRAJUSTE
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;

            /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                       FROM TPRECBOLETO
                                      WHERE CDFILIAL    = P_CDFILIAL
                                        AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJUSTE
                   WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                     AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                     AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
               END LOOP;
            ELSE
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJUSTE
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         END IF;
         /*GERA O RATEIO DA CONTA*/
         GERA_RATEIO_CONTA('S', P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'),
                           LPAD(TO_CHAR(V_COUNT), 2, '0'), V_VRACUMCONTA - V_VRAJUSTE, V_CDTIPOCONTA, C_VENDAS.CDFILIEMIT);
         /*VENCIMENTO DA PROXIMA CONTA*/
         V_DTVENCIMENTO := ADD_MONTHS(V_DTVENCIMENTO, 1);
         /*GERA A BAIXA*/
         IF NOT(V_CDCONTCORR IS NULL)   AND
            NOT(V_CDTIPOBAIXA IS NULL)  AND
            (V_INTEGRAEEXTR = 'N' OR V_IDTIPORECE IN ('3','4')) AND
            (V_IDGERABAIXAAUTO = 'S') THEN
            GERA_BAIXA('S', C_VENDAS.CDEMPRESA, P_CDFILIAL,
                       V_NRLANBOL, P_CDFILIAL, C_VENDAS.DATA_MOVIMENTACAO,
                       V_CDCONTCORR, V_CDTIPOBAIXA, P_CDOPERADOR);
         END IF;
         P_RETORNO := 'S';
      ELSE
         SELECT MIN(NRPARCELAREC), MIN(DTATUAVENREC) , MIN(NRLANBOLREC), TO_NUMBER(MIN(NRSEQVENREC))
           INTO V_MINPARC , V_DTVENCIMENTO, V_NRLANBOL, V_COUNTSEQVEN
           FROM CONTARECEBER
          WHERE CDFILIAL   = P_CDFILIAL
            AND NRLANCTONF = P_NRLANCTONF;
          /*VALOR DE CADA CONTA*/
          V_VRCONTA := ROUND(C_VENDAS.VRMOVIVEN,2);
         /*ATUALIZA O FLUXO DE CAIXA DA CONTA*/
         ATUALIZA_FLUXO_DE_CAIXA(C_VENDAS.CDEMPRESA,
                                 C_VENDAS.CDFILIEMIT,
                                 V_DTVENCIMENTO,
                                 'E',
                                 V_CDCLASSFINA,
                                 V_VRCONTA,
                                 0);
         UPDATE CONTARECEBER
            SET VRORIGREC    = VRORIGREC + NVL(V_VRCONTA ,0),
                VRATUAREC    = VRATUAREC + NVL(V_VRCONTA ,0)
          WHERE CDFILIAL     = P_CDFILIAL
            AND NRLANCTONF   = P_NRLANCTONF
            AND NRPARCELAREC = V_MINPARC ;
         UPDATE BOLETRECEBER
            SET VRBOLREC    = VRBOLREC + NVL(V_VRCONTA ,0),
                VRFINALBREC = VRFINALBREC + NVL(V_VRCONTA ,0)
          WHERE CDFILIAL    =  P_CDFILIAL
            AND NRLANBOLREC =  V_NRLANBOL;
          /*GERA O AJUSTE DE ACRESCIMO REFERENTE A TAXA DE SERVICO (GORJETA) E A TAXA DE ADMINISTRACAO SOBRE A TAXA DE SERVICO*/
         IF (V_IDCONTTXSERVSEP = 'S') AND (P_VRTAXASERVICO > 0) THEN
            V_VRTAXASERVICO := P_VRTAXASERVICO;
            IF V_VRTAXAADMISERV > 0 THEN
               V_VRTXADMINSERV := ROUND((V_VRTAXASERVICO * V_VRTAXAADMISERV / 100),2);
               V_VRTAXASERVICO := V_VRTAXASERVICO - V_VRTXADMINSERV;
               IF V_VRTXADMINSERV > 0 THEN
                  /*INSERE O AJUSTE DE ACRESCIMO - TAXA DE ADMINISTRACAO SOBRE A TAXA DE SERVICO*/
                  INSERT INTO AJCTRECEBER
                     (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                      DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                      DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
                  VALUES
                     (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_MINPARC), 2, '0'), V_DTVENCIMENTO, V_CDTPAJTXADMSERV,
                      'TX ADMIN DA TX SERV', V_VRTXADMINSERV, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                      V_DTVENCIMENTO, 'E', '', '', 'N');
                  /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC + V_VRTXADMINSERV
                   WHERE CDFILIAL     = P_CDFILIAL
                     AND NRLANCTONF   = P_NRLANCTONF
                     AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                     AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0');
                  /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC + V_VRTXADMINSERV,
                         VRBOLREC    = VRBOLREC + V_VRTXADMINSERV
                   WHERE CDFILIAL    = P_CDFILIAL
                     AND NRLANBOLREC = V_NRLANBOL;
                  /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR = VRTPRECBOLR + V_VRTXADMINSERV
                   WHERE CDFILIAL    = P_CDFILIAL
                     AND NRLANBOLREC = V_NRLANBOL;
               END IF;
            END IF;
            /*INSERE O AJUSTE DE ACRESCIMO - TAXA DE SERVICO*/
            INSERT INTO AJCTRECEBER
               (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
            VALUES
               (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_MINPARC), 2, '0'), V_DTVENCIMENTO, V_CDTPAJTXSERV,
                'TAXA DE SERVICO', V_VRTAXASERVICO, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                V_DTVENCIMENTO, 'E', '', '', 'N');
            /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                        FROM CONTARECEBER
                                       WHERE CDFILIAL     = P_CDFILIAL
                                         AND NRLANCTONF   = P_NRLANCTONF
                                         AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                         AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0'))
               LOOP
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC + V_VRTAXASERVICO
                   WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                     AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                     AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                     AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
   
               END LOOP;
            ELSE
               UPDATE CONTARECEBER
                  SET VRATUAREC    = VRATUAREC + V_VRTAXASERVICO
                WHERE CDFILIAL     = P_CDFILIAL
                  AND NRLANCTONF   = P_NRLANCTONF
                  AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0');
            END IF;
		 
            /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                        FROM BOLETRECEBER
                                       WHERE CDFILIAL    = P_CDFILIAL
                                         AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC + V_VRTAXASERVICO,
                         VRBOLREC    = VRBOLREC + V_VRTAXASERVICO
                   WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                     AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
               END LOOP;
            ELSE
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC + V_VRTAXASERVICO,
                      VRBOLREC    = VRBOLREC + V_VRTAXASERVICO
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
		 
            /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                       FROM TPRECBOLETO
                                      WHERE CDFILIAL    = P_CDFILIAL
                                        AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR = VRTPRECBOLR + V_VRTXADMINSERV
                   WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                     AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                     AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
               END LOOP;
            ELSE
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR + V_VRTAXASERVICO
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         END IF;
         BEGIN
            SELECT SUM(NVL(VRATUAREC,0))
              INTO V_VRACUMCONTA
              FROM CONTARECEBER
             WHERE CDFILIAL     = P_CDFILIAL
               AND NRLANCTONF   = P_NRLANCTONF
               AND NRPARCELAREC = V_MINPARC
               AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0');
         EXCEPTION
               WHEN NO_DATA_FOUND THEN
                 V_VRACUMCONTA := NULL;
         END;
         /* CALCULA VALOR DO AJUSTE (TAXA DO CARTAO)*/
         V_VRAJUSTE := 0;
         IF (V_CDTPAJUSTE IS NOT NULL) AND (V_VRPETAXA > 0)  THEN
            V_VRAJUSTE := ROUND(V_VRPETAXA *  V_VRACUMCONTA/ 100, 2);
         END IF;
         /*ATUALIZA O FLUXO DE CAIXA DA CONTA*/
         ATUALIZA_FLUXO_DE_CAIXA(C_VENDAS.CDEMPRESA,
                                 C_VENDAS.CDFILIEMIT,
                                 V_DTVENCIMENTO,
                                 'E',
                                 V_CDCLASSFINA,
                                 V_VRACUMCONTA - V_VRAJUSTE,
                                 0);
         /*GERA O AJUSTE DA CONTA A RECEBER*/
         BEGIN
          SELECT COUNT(*)
            INTO V_COUNTAJUSTE
            FROM AJCTRECEBER
           WHERE CDFILIAL = P_CDFILIAL
             AND NRLANCTONF =  P_NRLANCTONF
             AND NRSEQVENREC = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
             AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0')
             AND CDAJUCTREC   = V_CDTPAJUSTE;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
              V_COUNTAJUSTE := 0;
         END;
         IF (V_CDTPAJUSTE IS NOT NULL) AND (V_VRAJUSTE <> 0) THEN
            IF V_COUNTAJUSTE = 0 THEN
            /*INSERE O AJUSTE*/
            INSERT INTO AJCTRECEBER
                  (CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, DTAJUSTEREC, CDAJUCTREC,
                   DSAJUSTEREC, VRAJUSTEREC, CDCLASSFINA, CDEMMFAJCNTR, CDFIMFAJCNTR,
                   DTMOVFLUXO, IDMOVFLUXO, CDECTBAJREC, NRLCTBAJREC, IDAJTXADMECF)
            VALUES
                  (P_CDFILIAL, P_NRLANCTONF, LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'), LPAD(TO_CHAR(V_MINPARC), 2, '0'), V_DTVENCIMENTO, V_CDTPAJUSTE,
                   'AJUSTE', V_VRAJUSTE, V_CDCLASSFINA, C_VENDAS.CDEMPRESA, C_VENDAS.CDFILIEMIT,
                   V_DTVENCIMENTO, 'E', '', '', 'S');
            ELSE
               UPDATE AJCTRECEBER
                  SET VRAJUSTEREC = VRAJUSTEREC + V_VRAJUSTE
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF =  P_NRLANCTONF
                  AND NRSEQVENREC = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0')
                  AND CDAJUCTREC   = V_CDTPAJUSTE;
            END IF;
            /*ATUALIZA O VALOR DA CONTA COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_CONTARECEBER IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC
                                        FROM CONTARECEBER
                                       WHERE CDFILIAL     = P_CDFILIAL
                                         AND NRLANCTONF   = P_NRLANCTONF
                                         AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                                         AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0'))
               LOOP
                  UPDATE CONTARECEBER
                     SET VRATUAREC    = VRATUAREC - V_VRAJUSTE
                   WHERE CDFILIAL     = C_CONTARECEBER.CDFILIAL
                     AND NRLANCTONF   = C_CONTARECEBER.NRLANCTONF
                     AND NRSEQVENREC  = C_CONTARECEBER.NRSEQVENREC
                     AND NRPARCELAREC = C_CONTARECEBER.NRPARCELAREC;
            
               END LOOP;
            ELSE
               UPDATE CONTARECEBER
                  SET VRATUAREC = VRATUAREC - V_VRAJUSTE
                WHERE CDFILIAL = P_CDFILIAL
                  AND NRLANCTONF = P_NRLANCTONF
                  AND NRSEQVENREC = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0')
                  AND NRPARCELAREC = LPAD(TO_CHAR(V_MINPARC), 2, '0');
            END IF;
		 
            /*ATUALIZA O VALOR DO BOLETO COM O AJUSTE GERADO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_BOLETRECEBER IN (SELECT CDFILIAL, NRLANBOLREC
                                        FROM BOLETRECEBER
                                       WHERE CDFILIAL    = P_CDFILIAL
                                         AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE BOLETRECEBER
                     SET VRFINALBREC = VRFINALBREC - V_VRAJUSTE,
                         VRBOLREC    = VRBOLREC - V_VRAJUSTE
                   WHERE CDFILIAL    = C_BOLETRECEBER.CDFILIAL
                     AND NRLANBOLREC = C_BOLETRECEBER.NRLANBOLREC;
               END LOOP;
            ELSE
               UPDATE BOLETRECEBER
                  SET VRFINALBREC = VRFINALBREC - V_VRAJUSTE,
                      VRBOLREC    = VRBOLREC - V_VRAJUSTE
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;

            /*ATUALIZA VALOR DO TIPO DE RECEBIMENTO DO BOLETO*/
            IF V_IDORCLVERSAOANT = 'S' THEN
               FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANBOLREC, NRSEQTPRECBO
                                       FROM TPRECBOLETO
                                      WHERE CDFILIAL    = P_CDFILIAL
                                        AND NRLANBOLREC = V_NRLANBOL)
               LOOP
                  UPDATE TPRECBOLETO
                     SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJUSTE
                   WHERE CDFILIAL    = C_TPRECBOLETO.CDFILIAL
                     AND NRLANBOLREC = C_TPRECBOLETO.NRLANBOLREC
                     AND NRSEQTPRECBO= C_TPRECBOLETO.NRSEQTPRECBO;
               END LOOP;
            ELSE
               UPDATE TPRECBOLETO
                  SET VRTPRECBOLR = VRTPRECBOLR - V_VRAJUSTE
                WHERE CDFILIAL    = P_CDFILIAL
                  AND NRLANBOLREC = V_NRLANBOL;
            END IF;
         END IF;

         IF V_IDORCLVERSAOANT = 'S' THEN
            FOR C_TPRECBOLETO IN (SELECT CDFILIAL, NRLANCTONF, NRSEQVENREC, NRPARCELAREC, CDCENTCUST, CDFIRATCTREC
                                    FROM RATCTRECEBER
                                   WHERE CDFILIAL     = P_CDFILIAL
                                     AND NRLANCTONF   = P_NRLANCTONF
                                     AND NRPARCELAREC = V_MINPARC
                                     AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0'))
            LOOP
              UPDATE RATCTRECEBER
                 SET VRRATCCCTREC = V_VRACUMCONTA - V_VRAJUSTE
                WHERE CDFILIAL     = C_TPRECBOLETO.CDFILIAL    
                  AND NRLANCTONF   = C_TPRECBOLETO.NRLANCTONF  
                  AND NRSEQVENREC  = C_TPRECBOLETO.NRSEQVENREC 
                  AND NRPARCELAREC = C_TPRECBOLETO.NRPARCELAREC
                  AND CDCENTCUST   = C_TPRECBOLETO.CDCENTCUST  
                  AND CDFIRATCTREC = C_TPRECBOLETO.CDFIRATCTREC;
            END LOOP;
         ELSE
              UPDATE RATCTRECEBER
                 SET VRRATCCCTREC = V_VRACUMCONTA - V_VRAJUSTE
               WHERE CDFILIAL     = P_CDFILIAL
                 AND NRLANCTONF   = P_NRLANCTONF
                 AND NRPARCELAREC = V_MINPARC
                 AND NRSEQVENREC  = LPAD(TO_CHAR(V_COUNTSEQVEN), 2, '0');
         END IF;	
      END IF;
   END LOOP;
   /*FIM LOOP DE VENDAS */
EXCEPTION
   WHEN OTHERS THEN BEGIN
      RAISE_APPLICATION_ERROR(-20501,SQLERRM(SQLCODE),TRUE);
   END;
END;
/