create or replace PROCEDURE CRIA_VENCIMENTO_GAS(
          P_CDFILIAL      IN VARCHAR2,
          P_NRLANCTONF    IN VARCHAR2,
          P_VRPAGTO       IN FLOAT,
          P_DTEMISSAO     IN DATE,
          P_DTENTRSAID    IN DATE,
          P_CDCLIEFORN    IN VARCHAR2,
          P_CDFILIEMIRECE IN VARCHAR2,
          P_CDTIPORECE    IN VARCHAR2,
          P_CODIGO        IN VARCHAR2,
          P_NRORG         IN NUMBER)
AS
   V_COUNT         NUMBER;

   V_VRPARCVENC      NUMBER;
   V_NRPARCELASST    NUMBER;
   V_INDIAS          NUMBER;
   V_INGUARDANRDIAS  NUMBER;

   V_DTVENCIMENTO    DATE;
   V_DTBASE          DATE;

   V_VRPAGTO         NUMBER;

   V_CODIGO VARCHAR2(1);
   V_IDTIPODTPGT VARCHAR2(4);
   V_NRDIAPOSEMDOCST NUMBER;
   V_VRTOTIMPONF   NUMBER;
   V_VRTOTIMPONFPR NUMBER;

   V_IDTPPERIODO VARCHAR2(1);

   V_CDFORMPGTO VARCHAR2(2);

   V_CONSDIAUTILAUX VARCHAR2(1);
   V_DTEMISSAOAUX   DATE;
   V_DTVENC         DATE;

   CURSOR C_PARCELAS (P_CDCLIEFORN VARCHAR2,
                      P_CDTIPORECE VARCHAR2,
                      P_NRORG NUMBER)
       IS
      (SELECT NVL(NVL(PP.NRDIASVENCIMENTOVENDA, TRGP.NRDIASVENCIMENTOVENDA), 0) AS NRDIASVENDA, NVL(NVL(PP.NRDIASVENCIMENTOFATURAM, TRGP.NRDIASVENCIMENTOFATURAM), 0) AS NRDIASFATUR
        FROM CLIENTE C
      JOIN PARCNEGOCIO P 
       ON P.NRINSCRICAOPARC = C.NRINSJURCLIE
       AND P.NRORG = C.NRORG
       AND P.IDATIVO = C.IDATIVO
       LEFT JOIN VND_PARAMPARCEIRO PP
       ON PP.NRPARCNEGOCIO = P.NRPARCNEGOCIO
       AND PP.NRORG = P.NRORG
       AND PP.IDATIVO = P.IDATIVO
       LEFT JOIN VND_PARCNEGOCIOGRUPOPARCEIRO PGP
       ON PGP.NRPARCNEGOCIO = P.NRPARCNEGOCIO
       AND PGP.NRORG = P.NRORG
       AND PGP.IDATIVO = P.IDATIVO
       LEFT JOIN VND_TIPORECEGRUPOPARCEIRO TRGP
       ON PGP.NRGRUPOPARCEIRO = TRGP.NRGRUPOPARCEIRO
       AND PGP.NRORG = TRGP.NRORG
       AND PGP.IDATIVO = TRGP.IDATIVO
       AND TRGP.CDTIPORECE = P_CDTIPORECE
       WHERE C.CDCLIENTE = P_CDCLIEFORN
       AND C.NRORG = P_NRORG
       AND C.IDATIVO = 'S');

   --DETERMINA O DIA DA SEMANA OU DO MÊS EM QUE O PAGAMENTO DEVE CAIR--
   FUNCTION DIAPGTO (P_DTBASE IN DATE,
                     P_IDTPPERIODO IN VARCHAR2,
                     P_CDFORMPGTO IN VARCHAR2) RETURN DATE
   IS
      V_DTVENCIMENTO DATE;
   BEGIN
      V_DTVENCIMENTO := P_DTBASE;
      IF P_IDTPPERIODO = 'M' THEN
         V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIAMES(P_CDFORMPGTO,
                                                      P_DTBASE);
      ELSIF p_IDTPPERIODO = 'S' THEN
         V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIASEMANA(P_CDFORMPGTO,
                                                         P_DTBASE);
      ELSE
         V_DTVENCIMENTO := UTIL_CRIAVENCIMENTO.DIASEMANAMES(P_CDFORMPGTO,
                                                            P_DTBASE);
      END IF;
      RETURN V_DTVENCIMENTO;
   END;


   -- DETERMINA A DATA REFERÊNCIA DA FORMA DE PAGAMENTO --
   FUNCTION DATAREFERENCIA(P_DTBASEREF IN DATE,
                 P_IDREFECALCPARC IN VARCHAR2)
            RETURN DATE
   IS
   P_DTBASE DATE;
   V_DIASEMANA NUMBER;
   BEGIN
      IF P_IDREFECALCPARC = 'FORA_SEMANA' THEN
         V_DIASEMANA := 8 - TO_CHAR(P_DTBASEREF, 'D');
         P_DTBASE := P_DTBASEREF + V_DIASEMANA;
        -- P_DTBASE := TO_DATE(TO_CHAR(P_DTBASEREF, 'DD') + V_DIASEMANA||TO_CHAR(P_DTBASEREF, '/MM/YYYY'), 'DD/MM/YYYY');  --
      ELSIF P_IDREFECALCPARC = 'FORA_DEZENA' THEN
         IF ((TO_CHAR(P_DTBASEREF, 'DD') >= 01) AND (TO_CHAR(P_DTBASEREF, 'DD') <= 10)) THEN
            P_DTBASE := TO_DATE('11/'||TO_CHAR(P_DTBASEREF, 'MM/YYYY'), 'DD/MM/YYYY');
         ELSIF ((TO_CHAR(P_DTBASEREF, 'DD') >= 11) AND (TO_CHAR(P_DTBASEREF, 'DD') <= 20)) THEN
            P_DTBASE := TO_DATE('21/'||TO_CHAR(P_DTBASEREF, 'MM/YYYY'), 'DD/MM/YYYY');
         ELSIF ((TO_CHAR(P_DTBASEREF, 'DD') >= 21) AND (TO_CHAR(P_DTBASEREF, 'DD') <= 31)) THEN
            P_DTBASE := TO_DATE('01/'||TO_CHAR(P_DTBASEREF, 'MM/YYYY'), 'DD/MM/YYYY');
            P_DTBASE := ADD_MONTHS(P_DTBASE, 1);
         END IF;
      ELSIF P_IDREFECALCPARC = 'FORA_QUINZENA' THEN
         IF ((TO_CHAR(P_DTBASEREF, 'DD') >= 01) AND (TO_CHAR(P_DTBASEREF, 'DD') <= 15)) THEN
            P_DTBASE := TO_DATE('16/'||TO_CHAR(P_DTBASEREF, 'MM/YYYY'), 'DD/MM/YYYY');
         ELSIF ((TO_CHAR(P_DTBASEREF, 'DD') >= 16) AND (TO_CHAR(P_DTBASEREF, 'DD') <= 31)) THEN
            P_DTBASE := TO_DATE('01/'||TO_CHAR(P_DTBASEREF, 'MM/YYYY'), 'DD/MM/YYYY');
            P_DTBASE := ADD_MONTHS(P_DTBASE, 1);
         END IF;
      ELSIF P_IDREFECALCPARC = 'FORA_MES' THEN
         P_DTBASE := TO_DATE('01/'||TO_CHAR(P_DTBASEREF, 'MM/YYYY'), 'DD/MM/YYYY');
         P_DTBASE := ADD_MONTHS(P_DTBASE, 1);
      ELSIF P_IDREFECALCPARC = 'DIA_DE_REFERENCIA' THEN
         P_DTBASE := P_DTBASEREF;
      END IF;
      RETURN(P_DTBASE);
   END;


   --DETEMINA A DATA BASE E O NÚMERO DE DIAS A PARTIR DO TIPO DA FORMA DE PAGAMENTO E DO TIPO DA DATA DE PAGAMENTO--
   PROCEDURE FORMAPGTO(P_INDIAS OUT NUMBER,
                       P_DTBASE OUT DATE,
                       P_DTEMISSAO IN DATE,
                       P_DTENTRSAID IN DATE,
                       P_IDTIPODTPGT IN VARCHAR2,
                       P_CDFORMPGTO IN VARCHAR2,
                       P_IDREFECALCPARC IN VARCHAR2)
   IS
   V_DTAUX DATE;
   BEGIN
      IF NOT P_CDFORMPGTO IS NULL THEN
          IF P_IDTIPODTPGT = 'EMIN' THEN
             P_INDIAS := 0;
             P_DTBASE := P_DTEMISSAO;
          ELSIF P_IDTIPODTPGT = 'EMEX' THEN
             P_INDIAS := 1;
             P_DTBASE := P_DTEMISSAO;
          ELSIF P_IDTIPODTPGT = 'ENIN' THEN
             P_INDIAS := 0;
             P_DTBASE := P_DTENTRSAID;
          ELSIF P_IDTIPODTPGT = 'ENEX' THEN
             P_INDIAS := 1;
             P_DTBASE := P_DTENTRSAID;
          ELSIF P_IDTIPODTPGT = 'DSIN' THEN
             P_INDIAS := 0;
             P_DTBASE := P_DTENTRSAID;
          ELSIF P_IDTIPODTPGT = 'DSEX' THEN
             P_INDIAS := 1;
             P_DTBASE := P_DTENTRSAID;
          END IF;

          -- CHAMA A FUNÇÃO PARA GERAR A DATA DE REFERÊNCIA DA FORMA DE PAGAMENTO--
           IF NOT (P_DTBASE IS NULL) THEN
             P_DTBASE := DATAREFERENCIA(P_DTBASE, P_IDREFECALCPARC);
           END IF;
          V_DTAUX := P_DTBASE + P_INDIAS;
          V_DTAUX := V_DTAUX - 1;
       END IF;

     P_INDIAS := TRUNC(V_DTAUX - P_DTBASE);
     IF (P_INDIAS IS NULL) THEN
        P_INDIAS := 0;
     END IF;
   END;


   --CORRIGE A DATA DE VENCIMENTO CONSIDERANDO FERIADO BANCÁRIO--
   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 = 'EMEX' OR P_IDTIPODTPGTO = 'ENEX' OR P_IDTIPODTPGTO = 'DSEX' 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;

   --ALTERAÇÃO DOS PARÂMETROS NECESSÁRIOS PARA GERAÇÃO DO FINANCEIRO QUANTIDADE DE DIAS, DATA BASE, FORMA DE PAGAMENTO,NÚMERO DE PARCELAS--
   PROCEDURE SET_PARAMETROS (P_CDCLIEFORN IN VARCHAR2,
                             P_DTEMISSAO IN DATE,
                             P_DTENTRSAID IN DATE,
                             P_CDTIPORECE IN VARCHAR2,
                             P_NRORG IN NUMBER,
                             P_INDIAS OUT NUMBER,
                             P_DTBASE OUT DATE,
                             P_IDTIPODTPGT OUT VARCHAR2,
                             P_IDTPPERIODO OUT VARCHAR2,
                             P_CDFORMPGTO OUT VARCHAR2,
                             P_CONSDIAUTIL OUT VARCHAR2)
   IS
      V_IDTPFORPGT     VARCHAR2(1);
      V_IDUTDIAPGT     VARCHAR2(1);
      V_NRDIAFIXO      VARCHAR2(2);
      V_IDREFECALCPARC VARCHAR2(30);
      V_DTAUX          DATE;
      --PARÂMETROS GERAIS PARA GERAÇÃO DA DATA BASE E QUANTIDADE DE DIAS--
      CURSOR C_PARAMETRIZACAO_PGTO (P_CDCLIEFORN VARCHAR2,
                                    P_CDTIPORECE VARCHAR2,
                                    P_NRORG NUMBER)
          IS
         SELECT NVL(PP.CDFORMPGTO, TRGP.CDFORMPGTO) AS CDFORMPGTO, FP.IDTIPODTPGTO IDTIPODTPGT,
                FP.IDTPPERIODO IDTPPERIODO, FP.IDREFECALCPARC, FP.IDCONSDIAUTIL
                FROM CLIENTE C
              JOIN PARCNEGOCIO P 
               ON P.NRINSCRICAOPARC = C.NRINSJURCLIE
               AND P.NRORG = C.NRORG
               AND P.IDATIVO = C.IDATIVO
               LEFT JOIN VND_PARAMPARCEIRO PP
               ON PP.NRPARCNEGOCIO = P.NRPARCNEGOCIO
               AND PP.NRORG = P.NRORG
               AND PP.IDATIVO = P.IDATIVO
               LEFT JOIN VND_PARCNEGOCIOGRUPOPARCEIRO PGP
               ON PGP.NRPARCNEGOCIO = P.NRPARCNEGOCIO
               AND PGP.NRORG = P.NRORG
               AND PGP.IDATIVO = P.IDATIVO
               LEFT JOIN VND_TIPORECEGRUPOPARCEIRO TRGP
               ON PGP.NRGRUPOPARCEIRO = TRGP.NRGRUPOPARCEIRO
               AND PGP.NRORG = TRGP.NRORG
               AND PGP.IDATIVO = TRGP.IDATIVO
               AND TRGP.CDTIPORECE = P_CDTIPORECE
               LEFT JOIN FORMPGTO FP 
               ON FP.CDFORMPGTO = NVL(PP.CDFORMPGTO, TRGP.CDFORMPGTO) 
               AND FP.IDATIVO = C.IDATIVO
               WHERE C.CDCLIENTE = P_CDCLIEFORN
               AND C.NRORG = P_NRORG
               AND C.IDATIVO = 'S';
   BEGIN
      OPEN C_PARAMETRIZACAO_PGTO(P_CDCLIEFORN,
                                 P_CDTIPORECE,
                                 P_NRORG);
      FETCH C_PARAMETRIZACAO_PGTO INTO
         P_CDFORMPGTO,
         P_IDTIPODTPGT,
         P_IDTPPERIODO,
         V_IDREFECALCPARC,
         P_CONSDIAUTIL;

      IF NOT (P_CDFORMPGTO IS NULL) AND C_PARAMETRIZACAO_PGTO%FOUND THEN
         --DETEMINA A DATA BASE E O NÚMERO DE DIAS A PARTIR DO TIPO DA DATA DE PAGAMENTO--
         FORMAPGTO(P_INDIAS,
                   P_DTBASE,
                   P_DTEMISSAO,
                   P_DTENTRSAID,
                   P_IDTIPODTPGT,
                   P_CDFORMPGTO,
                   V_IDREFECALCPARC);
      ELSE
         P_INDIAS := 0;
         P_DTBASE := P_DTEMISSAO;
         P_IDTIPODTPGT := NULL;
         P_IDTPPERIODO := NULL;
      END IF;

      CLOSE C_PARAMETRIZACAO_PGTO;
   END;
BEGIN
   -- VERIFICA GERAÇÃO DE PARCELA DE SUBST. TRIBUTÁRIA--
     --BUSCA SE EXISTE ALGUEM IMPOSTO ACRESCER PARA GERAR PARCELA SEPADARA--
     Begin
      SELECT COUNT(1)
        INTO V_COUNT
        FROM IMPOSNFTOT IT, IMPOSTO I
       WHERE IT.CDFILIAL = P_CDFILIAL
         AND IT.NRLANCTONF = P_NRLANCTONF
         AND IT.CDIMPOSTO= I.CDIMPOSTO
         AND I.IDTRATIMPO = 'A'
         AND I.IDGERAPARCFIN = 'S';
     Exception
        When No_Data_Found Then
           V_COUNT := 0;
     End;

     --BUSCA  VALOR DO IMPOSTO ACRESCER PARA SOMAR NA PRIMEIRA PARCELA --
     Begin
        SELECT NVL(SUM(N.VRTOTIMPONF), 0)
          INTO V_VRTOTIMPONFPR
          FROM IMPOSNFTOT N, IMPOSTO I
         WHERE N.CDFILIAL = P_CDFILIAL
           AND N.NRLANCTONF = P_NRLANCTONF
           AND N.CDIMPOSTO= I.CDIMPOSTO
           AND I.IDTRATIMPO = 'A'
           AND IDGERAPARCFIN = 'P';
     Exception
        When No_Data_Found Then
           V_VRTOTIMPONFPR := 0;
     End;

   --VALOR DA PARCELA DE SUBST. TRIBUTÁRIA--
   V_VRTOTIMPONF  := 0;
   V_NRPARCELASST := 0;
   IF V_COUNT > 0 THEN
      Begin
         SELECT SUM(NVL(N.VRTOTIMPONF, 0)), MAX(NRDIASEMISDOC)
           INTO V_VRTOTIMPONF, V_NRDIAPOSEMDOCST
           FROM IMPOSNFTOT N, IMPOSTO I
          WHERE N.CDFILIAL = P_CDFILIAL
            AND N.NRLANCTONF = P_NRLANCTONF
            AND N.CDIMPOSTO= I.CDIMPOSTO
            AND I.IDTRATIMPO = 'A'
            AND IDGERAPARCFIN = 'S';
      Exception
         When No_Data_Found Then
            V_VRTOTIMPONF := 0;
      End;

      --LANÇA VENCIMENTO PARA O VALOR DA SUBST. TRIBUTÁRIA--
      IF NOT (V_VRTOTIMPONF = 0) THEN
         V_NRPARCELASST := 1;

         INSERT INTO TRAB_VENCIMENTO
           (CDFILIALVENC, NRLANCTONFVENC, DTVENCIMENTO, VRVENCIMENTO, QTDIASVENC, NRSEQVENC, IDTPCONTATRABVEN)
         VALUES
           (P_CDFILIAL, P_NRLANCTONF, (P_DTEMISSAO + V_NRDIAPOSEMDOCST), ROUND(V_VRTOTIMPONF, 2), NVL(V_NRDIAPOSEMDOCST, 0), LPAD(TO_CHAR(V_NRPARCELASST), 5, '0'), 'S');
      END IF;
   END IF;

   V_INDIAS := 0;
   V_DTVENCIMENTO := NULL;

   --DETERMINA A DATA BASE E O NÚMERO DE DIAS APÓS A EMISSÃO--
   SET_PARAMETROS(P_CDCLIEFORN,
                  P_DTEMISSAO,
                  P_DTENTRSAID,
                  P_CDTIPORECE,
                  P_NRORG,
                  V_INGUARDANRDIAS,
                  V_DTBASE,
                  V_IDTIPODTPGT,
                  V_IDTPPERIODO,
                  V_CDFORMPGTO,
                  V_CONSDIAUTILAUX);

   --ABATE A PARCELA DE IMPOSTO--
   IF V_VRTOTIMPONFPR IS NULL THEN
      V_VRTOTIMPONFPR := 0;
   END IF;
   --ABATE A PARCELA DE IMPOSTO--
   V_VRPAGTO := ROUND(P_VRPAGTO - V_VRTOTIMPONF, 2);
   IF V_CDFORMPGTO IS NULL THEN -- SEM FORMA DE PAGAMENTO--
      V_DTVENC := P_DTEMISSAO;

      INSERT INTO TRAB_VENCIMENTO
         (CDFILIALVENC, NRLANCTONFVENC, DTVENCIMENTO, VRVENCIMENTO, QTDIASVENC, NRSEQVENC, IDTPCONTATRABVEN)
      VALUES
         (P_CDFILIAL, P_NRLANCTONF, V_DTVENC, ROUND(V_VRPAGTO, 2), 0, LPAD(TO_CHAR(1+V_NRPARCELASST),5, '0'), 'N');
   ELSE --FORMA DE PAGAMENTO VARIÁVEL--

      --PARCELAS PARA GERAÇÃO DE TIPO DE PAGAMENTO VARIÁVEL--
      FOR C_PARC IN C_PARCELAS(P_CDCLIEFORN,
                                P_CDTIPORECE,
                                P_NRORG) LOOP

         V_VRPARCVENC := ROUND(V_VRPAGTO,2);

         IF P_CODIGO = 'F' THEN 
           IF C_PARC.NRDIASFATUR = 0 THEN
              V_INDIAS := V_INGUARDANRDIAS +1;
           ELSE
              V_INDIAS := V_INGUARDANRDIAS + C_PARC.NRDIASFATUR;
           END IF;
         ELSE   
           IF C_PARC.NRDIASVENDA = 0 THEN
              V_INDIAS := V_INGUARDANRDIAS +1;
           ELSE
              V_INDIAS := V_INGUARDANRDIAS + C_PARC.NRDIASVENDA;
           END IF; 
         END IF;  


         IF NOT V_DTBASE IS NULL THEN
            V_DTVENCIMENTO := V_DTBASE + V_INDIAS;
         END IF;

         IF V_IDTIPODTPGT = 'ENEX' OR V_IDTIPODTPGT = 'DSEX' OR
            V_IDTIPODTPGT = 'ENIN' OR V_IDTIPODTPGT = 'DSIN' THEN
            V_DTEMISSAOAUX := P_DTENTRSAID;
         ELSE
            V_DTEMISSAOAUX := P_DTEMISSAO;
         END IF;

         IF V_CONSDIAUTILAUX = 'S' THEN
            CONSISTE_FERI_BANC(P_CDFILIEMIRECE,
                               V_DTVENCIMENTO,
                               V_DTVENCIMENTO,
                               V_IDTIPODTPGT,
                               V_DTEMISSAOAUX);
         END IF;

         --CONSIDERA DIA DE PAGAMENTO. CASO FOR NOTA FISCAL DE SERVIÇO, O DIA DE PAGAMENTO JÁ FOI CONSISTIDO ANTERIORMENTE--
         IF NOT (V_DTVENCIMENTO IS NULL) THEN
            V_DTVENCIMENTO := DIAPGTO(V_DTVENCIMENTO,
                                      V_IDTPPERIODO,
                                      V_CDFORMPGTO);
         END IF;

         INSERT INTO TRAB_VENCIMENTO
            (CDFILIALVENC, NRLANCTONFVENC, DTVENCIMENTO, VRVENCIMENTO, QTDIASVENC, NRSEQVENC, IDTPCONTATRABVEN)
         VALUES
            (P_CDFILIAL, P_NRLANCTONF, V_DTVENCIMENTO, ROUND(V_VRPARCVENC+V_VRTOTIMPONFPR, 2), NVL(TRUNC(V_DTVENCIMENTO-P_DTEMISSAO), 0), LPAD(TO_CHAR(1+V_NRPARCELASST), 5, '0'), 'N');
      END LOOP;
   END IF;

   IF C_PARCELAS%ISOPEN THEN
      CLOSE C_PARCELAS;
   END IF;
END;
