CREATE OR REPLACE PROCEDURE FCT_GERAR_PARCELAS_APURACAO (
    P_NRSEQCONTRATO   IN VARCHAR2,
    P_NRMEDICAOFATURA IN VARCHAR2,
    P_NRORG           IN NUMBER,
    P_CDOPERADOR      IN VARCHAR2
)
AS

    V_NRFATURACONT       NOVOCODIGO.NRSEQUENCIAL%TYPE;
    V_NRITFATURACONT     NOVOCODIGO.NRSEQUENCIAL%TYPE;
    V_AGRUPAMENTO        FCT_AGRUPAMENTO.NRAGRUPAMENTO%TYPE;
    V_NRFATURACONTAGRUP  FCT_FATURACONT.NRFATURACONT%TYPE;
    V_DTINICOMPET        FCT_FATURACONT.DTINICOMPET%TYPE;
    V_DTFINCOMPET        FCT_FATURACONT.DTFINCOMPET%TYPE;
    V_VRVENCIMENTO       FCT_FATURACONT.VRVENCIMENTO%TYPE;
    V_TOTALPARCGERADAS   INTEGER;
    V_TOTALPARCELA       INTEGER;
    V_NRAGRUPCONTFAT     FCT_RELACAGRUPCONTFAT.NRAGRUPCONTFAT%TYPE;
    V_IDPARCAGRUP        FCT_RELACAGRUPCONTFAT.IDPARCAGRUP%TYPE;
    V_NRSEQCONTRATO      FCT_CONTRATO.NRSEQCONTRATO%TYPE;
    V_QTDIASCOMPETATUAL  NUMBER;
    V_QTDIASCOMPET       NUMBER;
    V_PERIODOINCOMP      CHAR(1);
    V_VRITEMMEDICAO      FLOAT(126);

    -- RATEIO
    V_NRRATEIOITEMFAT   FCT_RATEIOITFATURACONT.NRRATEIOITEMFAT%TYPE;
    V_COUNTITENSRATEIO  NUMBER;
    V_IDGERARATEIO      VARCHAR2(1);

    V_GEROU_PARCELA NUMBER;

    -- VARIAVEIS DE NEGOCIACAO DE CONTRATO APROVADO
    V_NRPARCELASNEGCONTR   FCT_PARCELASNEGCONTR.NRPARCELASNEGCONTR%TYPE;
    V_VRPARCELANEGOCIA     FCT_PARCELASNEGCONTR.VRPARCELANEGOCIA%TYPE;
    V_IDTIPONEGOCIA        FCT_NEGCONTRATO.IDTIPONEGOCIA%TYPE;
    V_VRNEGOCIADO          FLOAT;
    V_VRNEGOCIADOIT        FLOAT;
    V_SOMA_VRNEGOCIADOIT   FLOAT;
    V_SOMA_VRCONSIDERADOIT FLOAT;
BEGIN

    FOR C_APUR IN (
        SELECT NRMEDICAOFATURA , NRSEQCONTRATO  , CDFILIALFATURA , NRPARCFATURA , CDTIPOOPERFATURA ,
               CDSERIENF       , CDEMPRESA      , CDINSCESTA     , CDINSCMUNI   , IDSITUACAO       ,
               DTINICOMPET     , DTFINCOMPET    , DTLIMITEAPU    , DTVENCIMENTO , NRDIASVENCIMENTO ,
               QTDIASFATUVENC  , VRMEDICAO      , IDATIVO        , NRORG        , VRNEGCONTR       ,
               NRESTRUTURAM    , CDTRIBPRODPADR , CDPAISFAT      , SGESTADOFAT  , CDMUNICIPIOFAT
                    FROM FCT_MEDICAOFATURA
                    WHERE ((INSTR(P_NRSEQCONTRATO, '_' || TO_CHAR(FCT_MEDICAOFATURA.NRSEQCONTRATO) || '_') > 0) OR (P_NRSEQCONTRATO IS NULL))
                       AND ((INSTR(P_NRMEDICAOFATURA, '_' || TO_CHAR(FCT_MEDICAOFATURA.NRMEDICAOFATURA) || '_') > 0) OR (P_NRMEDICAOFATURA IS NULL))
                       AND NRORG      = P_NRORG
                       AND IDSITUACAO = '3'
    ) LOOP

        V_DTINICOMPET   := C_APUR.DTINICOMPET;
        V_DTFINCOMPET   := C_APUR.DTFINCOMPET;
        V_VRVENCIMENTO  := C_APUR.VRMEDICAO;
        V_IDPARCAGRUP   := 'N';
        V_NRSEQCONTRATO := NULL;
        V_PERIODOINCOMP := 'N';

        SELECT COUNT(*)
          INTO V_GEROU_PARCELA
          FROM FCT_RELACAGRUPCONTFAT
         WHERE NRMEDICAOFATURA = C_APUR.NRMEDICAOFATURA
           AND NRORG           = P_NRORG;

        IF (V_GEROU_PARCELA = 0) THEN

            V_VRVENCIMENTO := ROUND(V_VRVENCIMENTO, 2);

            -- VERIFICA SE O CONTRATO EST LIGADO A UM AGRUPAMENTO
            BEGIN
              SELECT NRAGRUPAMENTO
              INTO V_AGRUPAMENTO
              FROM FCT_RELACAGRUPAMENTOCONT
              WHERE NRSEQCONTRATO = C_APUR.NRSEQCONTRATO;
            EXCEPTION WHEN NO_DATA_FOUND THEN
              V_AGRUPAMENTO := NULL;
            END;

            V_VRNEGOCIADO := C_APUR.VRNEGCONTR;

            IF(V_AGRUPAMENTO IS NOT NULL) THEN
                V_IDPARCAGRUP  := 'S';

                IF (V_VRNEGOCIADO IS NULL) THEN

                    -- VERIFICA SE EXISTE UMA NEGOCIACAO DE CONTRATO PARA ESTE CLIENTE COM ESTE GRUPO DE FATURAMENTO - INICIO
                    BEGIN
                        SELECT PARC.NRPARCELASNEGCONTR,
                               PARC.VRPARCELANEGOCIA,
                               NEG.IDTIPONEGOCIA
                          INTO V_NRPARCELASNEGCONTR,
                               V_VRPARCELANEGOCIA,
                               V_IDTIPONEGOCIA
                          FROM FCT_PARCELASNEGCONTR PARC
                         INNER JOIN FCT_NEGCONTRATO NEG
                            ON PARC.NRNEGCONTRATO = NEG.NRNEGCONTRATO
                         WHERE ( TRUNC(C_APUR.DTINICOMPET) BETWEEN TRUNC(PARC.DTINIPARCNEGOCIA) AND TRUNC(PARC.DTFIMPARCNEGOCIA)
                                OR TRUNC(C_APUR.DTFINCOMPET) BETWEEN TRUNC(PARC.DTINIPARCNEGOCIA) AND TRUNC(PARC.DTFIMPARCNEGOCIA) )
                           AND NEG.NRPARCNEGOCIO    = C_APUR.NRPARCFATURA
                           AND NEG.NRAGRUPAMENTO    = V_AGRUPAMENTO
                           AND NEG.CDTIPOOPERFATURA = C_APUR.CDTIPOOPERFATURA
                           AND NEG.CDSERIENF        = C_APUR.CDSERIENF
                           AND NEG.CDEMPRESA        = C_APUR.CDEMPRESA
                           AND NEG.CDINSCESTA       = C_APUR.CDINSCESTA
                           AND NEG.CDINSCMUNI       = C_APUR.CDINSCMUNI
                           AND NEG.NRORG            = P_NRORG
                           AND NEG.NRITEMOCONTRATO  IS NULL
                           AND NEG.IDATIVO          = 'S'
                           AND PARC.IDATIVO         = 'S';
                    EXCEPTION WHEN NO_DATA_FOUND THEN
                        V_NRPARCELASNEGCONTR := NULL;
                        V_VRPARCELANEGOCIA := NULL;
                        V_IDTIPONEGOCIA := NULL;
                    END;
                    -- VERIFICA SE EXISTE UMA NEGOCIACAO DE CONTRATO PARA ESTE CLIENTE COM ESTE GRUPO DE FATURAMENTO - FIM

                END IF; --V_VRNEGOCIADO IS NULL

                -- VERIFICA SE EXISTEM PARCELAS CRIADAS PARA ELE
                BEGIN
                    SELECT DISTINCT PARCELA.NRFATURACONT
                      INTO V_NRFATURACONTAGRUP
                      FROM FCT_FATURACONT PARCELA
                      JOIN FCT_RELACAGRUPCONTFAT RELACFAT
                        ON PARCELA.NRFATURACONT = RELACFAT.NRFATURACONT
                       AND PARCELA.NRORG        = RELACFAT.NRORG
                      JOIN FCT_RELACAGRUPAMENTOCONT RELACCONT
                        ON RELACFAT.NRSEQCONTRATO = RELACCONT.NRSEQCONTRATO
                       AND RELACFAT.NRORG         = RELACCONT.NRORG
                      JOIN FCT_AGRUPAMENTO AGRUP
                        ON RELACCONT.NRAGRUPAMENTO = AGRUP.NRAGRUPAMENTO
                       AND RELACCONT.NRORG         = AGRUP.NRORG
                     WHERE AGRUP.NRAGRUPAMENTO        = V_AGRUPAMENTO
                       AND TRUNC(PARCELA.DTINICOMPET) = TRUNC(V_DTINICOMPET)
                       AND TRUNC(PARCELA.DTFINCOMPET) = TRUNC(V_DTFINCOMPET)
                       AND PARCELA.IDTPFATURA         = 'X'
                       AND PARCELA.IDSITUACAO         = '1'
                       AND RELACFAT.IDPARCAGRUP       = 'S';

                EXCEPTION WHEN NO_DATA_FOUND THEN
                  V_NRFATURACONTAGRUP := NULL;
                END;

                V_NRFATURACONT := V_NRFATURACONTAGRUP;
                IF (V_NRFATURACONTAGRUP IS NOT NULL) THEN
                    V_IDPARCAGRUP  := 'S';
                END IF;

            ELSE
                V_NRPARCELASNEGCONTR := NULL;
                V_VRPARCELANEGOCIA := NULL;
                V_IDTIPONEGOCIA := NULL;

                BEGIN
                    SELECT NRFATURACONT
                    INTO V_NRFATURACONT
                    FROM FCT_RELACAGRUPCONTFAT RELACFAT
                    WHERE RELACFAT.NRMEDICAOFATURA = C_APUR.NRMEDICAOFATURA
                      AND RELACFAT.NRSEQCONTRATO   = C_APUR.NRSEQCONTRATO
                      AND RELACFAT.NRORG           = P_NRORG;
                EXCEPTION WHEN NO_DATA_FOUND THEN
                    V_NRFATURACONT := NULL;
                END;
            END IF;

            IF (V_NRFATURACONT IS NULL) THEN

                NOVO_CODIGO_SC('FCT_FATURACONT', V_NRFATURACONT, 1, P_NRORG);
                INSERT INTO FCT_FATURACONT (
                    NRFATURACONT,
                    NRSEQCONTRATO,
                    CDFILIALFATURA,
                    NRPARCFATURA,
                    CDTIPOOPERFATURA,
                    CDSERIENF,
                    CDEMPRESA,
                    CDINSCESTA,
                    CDINSCMUNI,
                    IDTPFATURA,
                    IDSITUACAO,
                    DTINICOMPET,
                    DTFINCOMPET,
                    DTLIMITEAPU,
                    DTVENCIMENTO,
                    NRDIASVENCIMENTO,
                    QTDIASFATUVENC,
                    VRVENCIMENTO,
                    VRFATURADO,
                    VRFALTAFATURAR,
                    IDFORMAFATURA,
                    DSJUSTIFICATIVA,
                    NRAPURACAO,
                    NRMEDICAOFATURA,
                    IDALTUSUARIO,
                    IDATIVO,
                    NRORG,
                    DTINCLUSAO,
                    NRORGINCLUSAO,
                    CDOPERINCLUSAO,
                    VRNEGCONTR,
                    NRPARCELASNEGCONTR,
                    NRESTRUTURAM,
                    CDTRIBPRODPADR,
                    CDPAISFAT,
                    SGESTADOFAT,
                    CDMUNICIPIOFAT
                ) VALUES (
                    V_NRFATURACONT,
                    NULL,
                    C_APUR.CDFILIALFATURA,
                    C_APUR.NRPARCFATURA,
                    C_APUR.CDTIPOOPERFATURA,
                    C_APUR.CDSERIENF,
                    C_APUR.CDEMPRESA,
                    C_APUR.CDINSCESTA,
                    C_APUR.CDINSCMUNI,
                    'X',
                    '1',
                    V_DTINICOMPET,
                    V_DTFINCOMPET,
                    C_APUR.DTLIMITEAPU,
                    C_APUR.DTVENCIMENTO,
                    C_APUR.NRDIASVENCIMENTO,
                    C_APUR.QTDIASFATUVENC,
                    ROUND(V_VRVENCIMENTO, 2),
                    0,
                    ROUND(NVL(V_VRNEGOCIADO, V_VRVENCIMENTO), 2),
                    NULL,
                    NULL,
                    NULL,
                    NULL,
                    'N',
                    'S',
                    P_NRORG,
                    SYSDATE,
                    P_NRORG,
                    P_CDOPERADOR,
                    V_VRNEGOCIADO,
                    V_NRPARCELASNEGCONTR,
                    C_APUR.NRESTRUTURAM,
                    C_APUR.CDTRIBPRODPADR,
                    C_APUR.CDPAISFAT,
                    C_APUR.SGESTADOFAT,
                    C_APUR.CDMUNICIPIOFAT
                );

            ELSE
                
                UPDATE FCT_FATURACONT
                   SET VRVENCIMENTO       = VRVENCIMENTO + V_VRVENCIMENTO,
                       VRFALTAFATURAR     = VRFALTAFATURAR + V_VRVENCIMENTO,
                       DTINICOMPET        = V_DTINICOMPET,
                       DTFINCOMPET        = V_DTFINCOMPET,
                       NRPARCELASNEGCONTR = V_NRPARCELASNEGCONTR
                 WHERE NRFATURACONT = V_NRFATURACONT
                   AND NRORG        = P_NRORG;
                
            END IF; --V_NRFATURACONT IS NULL

            UPDATE FCT_MEDICAOFATURA
               SET IDSITUACAO  = '4',
                   NRORGULTATU  = P_NRORG,
                   DTULTATU     = SYSDATE,
                   CDOPERULTATU = P_CDOPERADOR
            WHERE NRMEDICAOFATURA = C_APUR.NRMEDICAOFATURA
                AND NRORG         = P_NRORG;

            NOVO_CODIGO_SC('FCT_RELACAGRUPCONTFAT', V_NRAGRUPCONTFAT, 1, P_NRORG);
            INSERT INTO FCT_RELACAGRUPCONTFAT (
                NRAGRUPCONTFAT,     NRFATURACONT, IDPARCAGRUP,  NRSEQCONTRATO,
                NRORG,              IDATIVO,      DTINCLUSAO,   DTULTATU,
                CDOPERINCLUSAO,     NRORGULTATU,  CDOPERULTATU, NRMEDICAOFATURA,
                NRORGINCLUSAO
            ) VALUES (
                V_NRAGRUPCONTFAT,     V_NRFATURACONT, V_IDPARCAGRUP,       C_APUR.NRSEQCONTRATO,
                C_APUR.NRORG,         'S',            SYSDATE,             NULL,
                P_CDOPERADOR,          NULL,          NULL,                C_APUR.NRMEDICAOFATURA,
                C_APUR.NRORG
            );

            IF (V_IDPARCAGRUP = 'S') THEN

                UPDATE FCT_RELACAGRUPCONTFAT
                   SET IDPARCAGRUP = 'S'
                 WHERE NRFATURACONT = V_NRFATURACONT
                   AND NRORG        = P_NRORG;

            END IF;

            FOR C_ITENS IN (
                SELECT NRITMEDICAOFATURA, NRMEDICAOFATURA, NRSEQCONTRATO, NRITEMOCONTRATO, CDSERVORCA,
                       CDPRODFATURA, IDSITUACAO, VRTOTITEMCONT, IDATIVO, NRORG, VRITEMCONT, VRNEGCONTR, NRPARCELASNEGCONTR
                  FROM FCT_ITMEDICAOFATURA
                 WHERE NRMEDICAOFATURA = C_APUR.NRMEDICAOFATURA
                   AND NRSEQCONTRATO   = C_APUR.NRSEQCONTRATO
                   AND NRORG           = P_NRORG
            ) LOOP

                V_VRITEMMEDICAO := NVL(C_ITENS.VRITEMCONT, C_ITENS.VRTOTITEMCONT);
                V_VRNEGOCIADOIT := C_ITENS.VRNEGCONTR;

                IF (V_PERIODOINCOMP = 'S') THEN 
                    V_VRITEMMEDICAO := (V_VRITEMMEDICAO / V_QTDIASCOMPET) * V_QTDIASCOMPETATUAL;
                    V_VRNEGOCIADOIT := (V_VRNEGOCIADOIT / V_QTDIASCOMPET) * V_QTDIASCOMPETATUAL;
                END IF;

                NOVO_CODIGO_SC('FCT_ITFATURACONT', V_NRITFATURACONT, 1, P_NRORG);
                INSERT INTO FCT_ITFATURACONT (
                    NRITFATURACONT,    NRFATURACONT,     NRSEQCONTRATO,
                    NRITEMOCONTRATO,   CDPRODFATURA,     IDSITUACAO,
                    VRVENCIMENTO,      VRFATURADO,       VRFALTAFATURAR,
                    IDFORMAFATURA,     DSJUSTIFICATIVA,  NRAPURACAO,
                    IDATIVO,           NRORG,            DTINCLUSAO,
                    NRORGINCLUSAO,     CDOPERINCLUSAO,   VRNEGCONTR,
                    NRPARCELASNEGCONTR
                )
                VALUES (
                    V_NRITFATURACONT,          V_NRFATURACONT,        C_ITENS.NRSEQCONTRATO,
                    C_ITENS.NRITEMOCONTRATO,   C_ITENS.CDPRODFATURA, '1',
                    ROUND(V_VRITEMMEDICAO, 2), 0,                     ROUND(NVL(V_VRNEGOCIADOIT, V_VRITEMMEDICAO), 2),
                    NULL,                      NULL,                  NULL,
                    'S',                       P_NRORG,               SYSDATE,
                    P_NRORG,                   P_CDOPERADOR,          V_VRNEGOCIADOIT,
                    C_ITENS.NRPARCELASNEGCONTR
                );

            END LOOP;

            /** GERAR RATEIO ITENS **/
            BEGIN
                SELECT ESCOPO.IDGERARATEIO
                INTO V_IDGERARATEIO
                FROM FCT_CAPAPARAMFATESC ESCOPO
                JOIN FCT_CONTRATO CONT
                    ON ESCOPO.NRTIPOORCAMENTO = CONT.NRTIPOORCAMENTO
                    AND ESCOPO.NRORG          = CONT.NRORG
                WHERE CONT.NRSEQCONTRATO = C_APUR.NRSEQCONTRATO
                    AND ESCOPO.NRORG     = P_NRORG;
            EXCEPTION WHEN NO_DATA_FOUND THEN
                V_IDGERARATEIO := 'N';
            END;

            IF (V_IDGERARATEIO = 'S') THEN
                BEGIN
                    SELECT COUNT(NRESTRUTURAM)
                    INTO V_COUNTITENSRATEIO
                    FROM (SELECT DISTINCT  NRESTRUTURAM
                          FROM FCT_RELACESTRUTURACONT ESTCONT
                          WHERE ESTCONT.NRSEQCONTRATO = C_APUR.NRSEQCONTRATO
                            AND ESTCONT.NRORG         = P_NRORG
                            AND ESTCONT.NRESTRUTURAM IS NOT NULL
                            AND ESTCONT.IDRELACESTRUTURA = 'RATEIO'
                            AND (SELECT COUNT(*)
                                 FROM FCT_ITEMCONTRATO ITEM
                                 LEFT JOIN FCT_RELACESTRUTURACONT EST
                                    ON ITEM.NRITEMOCONTRATO = EST.NRITEMOCONTRATO
                                    AND ITEM.NRORG          = EST.NRORG
                                 WHERE ITEM.NRSEQCONTRATO  = C_APUR.NRSEQCONTRATO
                                    AND ITEM.NRORG         = P_NRORG
                                    AND EST.NRESTRUTURAM IS NULL) = 0);
                END;

                IF V_COUNTITENSRATEIO > 1 THEN
                    FOR C_ITENSRATEIO IN (
                      SELECT ESTCONT.NRESTRUTURAM,
                        LOCALM.CDCENTCUST,
                        ESTCONT.NRITEMOCONTRATO,
                        ITFATURA.VRVENCIMENTO,
                        ITFATURA.NRFATURACONT,
                        ITFATURA.NRITFATURACONT,
                        ESTCONT.VRPERCRATEIO,
                        ITFATURA.IDSITUACAO
                      FROM FCT_ITFATURACONT ITFATURA
                      JOIN FCT_RELACESTRUTURACONT ESTCONT
                        ON ITFATURA.NRITEMOCONTRATO  = ESTCONT.NRITEMOCONTRATO
                        AND ITFATURA.NRORG           = ESTCONT.NRORG
                        AND ESTCONT.IDRELACESTRUTURA = 'RATEIO'
                      LEFT JOIN ESTRUTURAM LOCALM
                        ON ESTCONT.NRESTRUTURAM = LOCALM.NRESTRUTURAM
                        AND ESTCONT.NRORG       = LOCALM.NRORG
                      WHERE ITFATURA.NRSEQCONTRATO = C_APUR.NRSEQCONTRATO
                        AND ITFATURA.NRORG         = P_NRORG
                  ) LOOP

                      NOVO_CODIGO_NT('FCT_RATEIOITFATURACONT', V_NRRATEIOITEMFAT, 1);
                      INSERT INTO FCT_RATEIOITFATURACONT (
                          NRRATEIOITEMFAT, NRITFATURACONT,  NRFATURACONT,
                          NRSEQCONTRATO,   NRITEMOCONTRATO, NRESTRUTURAM,
                          CDCENTCUST,      VRPERCENTRATEIO, VRRATEADO,
                          NRORG,           IDATIVO,         DTINCLUSAO,
                          DTULTATU,        NRORGINCLUSAO,   CDOPERINCLUSAO,
                          NRORGULTATU,     CDOPERULTATU,    IDSITUVENCRATEIO,
                          NRAPURACAO
                      ) VALUES (
                          V_NRRATEIOITEMFAT,          C_ITENSRATEIO.NRITFATURACONT,         C_ITENSRATEIO.NRFATURACONT,
                          C_APUR.NRSEQCONTRATO,       C_ITENSRATEIO.NRITEMOCONTRATO,        C_ITENSRATEIO.NRESTRUTURAM,
                          C_ITENSRATEIO.CDCENTCUST,   ROUND(C_ITENSRATEIO.VRPERCRATEIO, 2), ROUND(C_ITENSRATEIO.VRVENCIMENTO * (C_ITENSRATEIO.VRPERCRATEIO/100), 2),
                          P_NRORG,                    'S',                                  SYSDATE,
                          NULL,                       P_NRORG,                              P_CDOPERADOR,
                          NULL,                       NULL,                                 C_ITENSRATEIO.IDSITUACAO,
                          NULL
                      );
                  END LOOP; --C_ITENSRATEIO
                END IF;
            END IF;

            
            SELECT VRVENCIMENTO
              INTO V_VRVENCIMENTO
              FROM FCT_FATURACONT
             WHERE NRFATURACONT = V_NRFATURACONT
               AND NRORG        = P_NRORG;

            -- Se existe uma negociacao para este cliente com este grupo de faturamento (select feito mais acima), os valores sao calculados e aplicados - INICIO
            IF (V_NRPARCELASNEGCONTR IS NOT NULL) THEN

                IF (V_IDTIPONEGOCIA = 'VF') THEN
                    V_VRNEGOCIADO := V_VRPARCELANEGOCIA;

                ELSIF (V_IDTIPONEGOCIA = 'DP') THEN
                    V_VRNEGOCIADO := V_VRVENCIMENTO - (V_VRVENCIMENTO * V_VRPARCELANEGOCIA / 100);

                ELSIF (V_IDTIPONEGOCIA = 'DV') THEN
                    V_VRNEGOCIADO := V_VRVENCIMENTO - V_VRPARCELANEGOCIA;

                ELSIF (V_IDTIPONEGOCIA = 'AP') THEN
                    V_VRNEGOCIADO := V_VRVENCIMENTO + (V_VRVENCIMENTO * V_VRPARCELANEGOCIA / 100);

                ELSIF (V_IDTIPONEGOCIA = 'AV') THEN
                    V_VRNEGOCIADO := V_VRVENCIMENTO + V_VRPARCELANEGOCIA;

                END IF;

                V_VRNEGOCIADO := ROUND(V_VRNEGOCIADO, 2);

                IF (V_VRNEGOCIADO < 0) THEN
                    V_VRNEGOCIADO := 0;
                END IF;

                UPDATE FCT_FATURACONT
                   SET VRNEGCONTR     = V_VRNEGOCIADO,
                       VRFALTAFATURAR = V_VRNEGOCIADO
                  WHERE NRFATURACONT = V_NRFATURACONT
                    AND NRORG        = P_NRORG;

                FOR C_ITENS IN (
                    SELECT NRITFATURACONT,
                           VRVENCIMENTO,
                           VRNEGCONTR,
                           VRFALTAFATURAR,
                           VRFATURADO
                      FROM FCT_ITFATURACONT
                     WHERE NRFATURACONT = V_NRFATURACONT
                       AND NRORG        = P_NRORG
                ) LOOP

                    IF (V_VRNEGOCIADO = 0 OR V_VRVENCIMENTO = 0) THEN
                        V_VRNEGOCIADOIT := 0;

                    ELSIF (V_IDTIPONEGOCIA = 'VF') THEN
                        V_VRNEGOCIADOIT := V_VRNEGOCIADO / V_VRVENCIMENTO * C_ITENS.VRVENCIMENTO;

                    ELSIF (V_IDTIPONEGOCIA = 'DP') THEN
                        V_VRNEGOCIADOIT := C_ITENS.VRVENCIMENTO - (C_ITENS.VRVENCIMENTO * V_VRPARCELANEGOCIA / 100);

                    ELSIF (V_IDTIPONEGOCIA = 'DV') THEN
                        V_VRNEGOCIADOIT := C_ITENS.VRVENCIMENTO - (V_VRPARCELANEGOCIA / V_VRVENCIMENTO * C_ITENS.VRVENCIMENTO);

                    ELSIF (V_IDTIPONEGOCIA = 'AP') THEN
                        V_VRNEGOCIADOIT := C_ITENS.VRVENCIMENTO + (C_ITENS.VRVENCIMENTO * V_VRPARCELANEGOCIA / 100);

                    ELSIF (V_IDTIPONEGOCIA = 'AV') THEN
                        V_VRNEGOCIADOIT := C_ITENS.VRVENCIMENTO + (V_VRPARCELANEGOCIA / V_VRVENCIMENTO * C_ITENS.VRVENCIMENTO);

                    END IF;

                    V_VRNEGOCIADOIT := ROUND(V_VRNEGOCIADOIT, 2);

                    UPDATE FCT_ITFATURACONT
                       SET VRNEGCONTR     = V_VRNEGOCIADOIT,
                           VRFALTAFATURAR = V_VRNEGOCIADOIT
                     WHERE NRITFATURACONT = C_ITENS.NRITFATURACONT
                       AND NRORG          = P_NRORG;

                END LOOP;

            END IF;

            SELECT SUM(NVL(VRNEGCONTR, VRVENCIMENTO)) AS SOMAVRCONSIDERADO,
                   SUM(VRNEGCONTR) AS SOMAVRNEGCONTR
              INTO V_SOMA_VRCONSIDERADOIT,
                   V_SOMA_VRNEGOCIADOIT
              FROM FCT_ITFATURACONT
             WHERE NRFATURACONT = V_NRFATURACONT
               AND NRORG        = P_NRORG;

            IF (V_SOMA_VRNEGOCIADOIT IS NOT NULL) THEN
                V_SOMA_VRNEGOCIADOIT := V_SOMA_VRCONSIDERADOIT;
            END IF;

            UPDATE FCT_FATURACONT
               SET VRNEGCONTR     = V_SOMA_VRNEGOCIADOIT,
                   VRFALTAFATURAR = V_SOMA_VRCONSIDERADOIT
             WHERE NRFATURACONT = V_NRFATURACONT
               AND NRORG        = P_NRORG;
            -- Se existe uma negociacao para este cliente com este grupo de faturamento (select feito mais acima), os valores sao calculados e aplicados - FIM

        END IF; --V_GEROU_PARCELA = 0

    END LOOP; --C_APUR
END;
/