DROP FUNCTION RESUMO_GOP
/

DROP TYPE RESUMO_GOP_TABLE
/

DROP TYPE RESUMO_GOP_TYPE
/

CREATE TYPE RESUMO_GOP_TYPE AS
OBJECT (NRRESUMO_GOP        NUMBER,
        DSDESCRICAO         VARCHAR2(40),
        NRTOPICO            VARCHAR2(10),
        DSDESCRICAOTOP      VARCHAR2(50),
        DTORCAMENTO         DATE,
        VRORCADO            FLOAT(126),
        VRPERORCADO         FLOAT(126),
        VRREALIZADO         FLOAT(126),
        VRPERREALIZADO      FLOAT(126),
        VRSALDO             FLOAT(126),
        VRPERSALDO          FLOAT(126),
        VRACUMULADO         FLOAT(126),
        NRORDEM             NUMBER,
        IDSTATUS            VARCHAR2(30),
        NRORG               NUMBER)
/

CREATE TYPE RESUMO_GOP_TABLE AS
TABLE OF RESUMO_GOP_TYPE
/

CREATE OR REPLACE FUNCTION RESUMO_GOP
 (P_LFILIAL       IN VARCHAR2,
  P_LOPERADOR     IN VARCHAR2,
  P_IDPERIODOORCA IN VARCHAR2,
  P_NRPERIODOORCA IN VARCHAR2,
  P_NRANOORCAGOP  IN VARCHAR2,
  P_IDMODELO      IN VARCHAR2 DEFAULT 'P',
  P_IDPERCEN      IN VARCHAR2 DEFAULT NULL,
  P_MES           IN VARCHAR2 DEFAULT '01',
  P_DESCRICAO     IN VARCHAR2 DEFAULT NULL,
  P_EXIBE         IN VARCHAR2 DEFAULT NULL) RETURN RESUMO_GOP_TABLE PIPELINED
IS
  V_IDUTILVERSAOORCA VARCHAR2(01);
  V_DSDESCRICAO      VARCHAR2(40);
  V_VRFATLIQUIDO     FLOAT(126);
  V_VRMARGEMCONTRIB  FLOAT(126);
  V_VRFATLUCRO       FLOAT(126);
  V_RESULTADO        FLOAT(126);
  V_DESPESA          FLOAT(126);
  V_VRCALCPERC       FLOAT(126);
  V_LIQUIDO          FLOAT(126);
  V_MARGEM           FLOAT(126);
  V_PARCIAL          FLOAT(126);

  V_LIQUIDOREAL      FLOAT(126);
  V_MARGEMREAL       FLOAT(126);
  V_PARCIALREAL      FLOAT(126);
  V_RESULTADOREAL    FLOAT(126);

  V_LIQUIDOSALDO     FLOAT(126);
  V_MARGEMSALDO      FLOAT(126);
  V_PARCIALSALDO     FLOAT(126);
  V_RESULTADOSALDO   FLOAT(126);

  V_LIQUIDOACUM      FLOAT(126);
  V_MARGEMACUM       FLOAT(126);
  V_PARCIALACUM      FLOAT(126);
  V_RESULTADOACUM    FLOAT(126);

  V_FATURAMENTO      FLOAT(126);
  V_AUX              FLOAT(126);

  R_FATURAMENTO      FLOAT(126);
  R_IMPOSTO          FLOAT(126);
  R_TAXAADM          FLOAT(126);
  R_CONSUMO          FLOAT(126);
  R_MAOOBRA          FLOAT(126);
  R_INVESTIMENTO     FLOAT(126);
  R_DEPRECIACAO      FLOAT(126);
  R_DESPDIVERSA      FLOAT(126);
  R_DESPENTRADA      FLOAT(126);

  R_FATURAMENTO_ACUM FLOAT(126);
  R_IMPOSTO_ACUM     FLOAT(126);
  R_TAXAADM_ACUM     FLOAT(126);
  R_CONSUMO_ACUM     FLOAT(126);
  R_MAOOBRA_ACUM     FLOAT(126);
  R_INVESTIMENTO_ACUM FLOAT(126);
  R_DEPRECIACAO_ACUM FLOAT(126);
  R_DESPDIVERSA_ACUM FLOAT(126);
  R_DESPENTRADA_ACUM FLOAT(126);

  O_FATURAMENTO_ACUM FLOAT(126);
  O_IMPOSTO_ACUM     FLOAT(126);
  O_CONSUMO_ACUM     FLOAT(126);
  O_DESPENTRADA_ACUM FLOAT(126);
  O_TAXAADM_ACUM     FLOAT(126);
  O_DESPDIVERSA_ACUM FLOAT(126);
  O_INVESTIMENTO_ACUM FLOAT(126);
  O_MAOOBRA_ACUM     FLOAT(126);
  O_DEPRECIACAO_ACUM FLOAT(126);

  V_REALIZADO        FLOAT(126);
  V_ACUMULADO        FLOAT(126);

  V_IDCALCPERCENTFAT VARCHAR2(30);
  V_CDFILIAL         VARCHAR2(04);
  V_DATAINIORCA      DATE;
  V_DATAFINORCA      DATE;

  V_NRRESUMO_ROP     NUMBER;
  V_NRORG            NUMBER;

  V_DTORCAMENTO      DATE;
  V_DTINIORCAPERIODO DATE;

  V_AUXDESC          VARCHAR2(40);
  V_NRORDEM          NUMBER;
  V_IDSTATUS         VARCHAR2(30);
  V_PERCENT          VARCHAR2(01);  

  OUT_RECORD RESUMO_GOP_TYPE := RESUMO_GOP_TYPE(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
                                                NULL, NULL, NULL, NULL, NULL, NULL);

  PROCEDURE RESULT_DRO(P_LFILIAL IN VARCHAR2,
                       P_DATAINIORCA IN DATE, 
                       P_DATAFINORCA IN DATE, 
                       P_CONSOLIDADO IN VARCHAR2, 
                       P_PERCENT IN VARCHAR2, 
                       R_FATURAMENTO OUT FLOAT, 
                       R_IMPOSTO OUT FLOAT, 
                       R_TAXAADM OUT FLOAT, 
                       R_CONSUMO OUT FLOAT,
                       R_MAOOBRA OUT FLOAT,
                       R_INVESTIMENTO OUT FLOAT,
                       R_DEPRECIACAO OUT FLOAT) AS
  BEGIN
     BEGIN
        SELECT NVL(FATURAMENTO,0) FATURAMENTO, NVL(IMPOSTO,0) IMPOSTO, NVL(TAXAADM,0) TAXAADM, 
               NVL(CONSUMO,0) CONSUMO, NVL(MAOOBRA, 0) MAOOBRA, NVL(INVESTIMENTO,0) INVESTIMENTO, NVL(DEPRECIACAO,0) DEPRECIACAO
          INTO R_FATURAMENTO, R_IMPOSTO, R_TAXAADM, R_CONSUMO, R_MAOOBRA, R_INVESTIMENTO,
               R_DEPRECIACAO
          FROM (SELECT R.DSDESCRICAOTOP, SUM(R.VRREAL) VRREAL
                  FROM TABLE(RESUMO_ROP(P_LFILIAL, P_DATAINIORCA, P_DATAFINORCA, P_CONSOLIDADO,'01','M', P_PERCENT)) R
                 GROUP BY R.DSDESCRICAOTOP
                 ORDER BY R.NRORDEM)
         PIVOT (SUM(VRREAL) 
                   FOR DSDESCRICAOTOP IN ('FAT' FATURAMENTO, 'DEDUIM' IMPOSTO, 'TAXADM' TAXAADM, 'CMV' CONSUMO, 'MAOBRA' MAOOBRA,
                                          'INVEST' INVESTIMENTO, 'DEPRE' DEPRECIACAO));
     EXCEPTION
        WHEN NO_DATA_FOUND THEN BEGIN
           R_FATURAMENTO := 0; R_IMPOSTO := 0; R_TAXAADM := 0; R_CONSUMO := 0; R_MAOOBRA := 0; 
           R_INVESTIMENTO := 0; R_DEPRECIACAO := 0;
        END;
     END;
  END;

  PROCEDURE RESULTADO_CONSUMO(P_CDFILIAL IN VARCHAR2, 
                              P_DATAINIORCA IN DATE,
                              P_DATAFINORCA IN DATE,
                              P_DTINIORCAPERIODO IN DATE,
                              P_CDARVPROD IN VARCHAR2,
                              R_CONSUMO OUT FLOAT,
                              R_CONSUMO_ACUM OUT FLOAT) IS
    V_AUXDESC VARCHAR2(30);
  BEGIN
     SELECT MAX(C.IDTIPORCAOP)
       INTO V_AUXDESC
       FROM FILIALCADA F INNER JOIN CONFIGALCADA C ON F.NRCONFIGALCADA = C.NRCONFIGALCADA
      WHERE F.CDFILIAL = P_CDFILIAL
        AND C.IDTIPORCAOP = 'CONSUMO';

     IF V_AUXDESC IS NULL THEN
        SELECT NVL(SUM(VRCONSUMO),0) + NVL(R_CONSUMO,0)
          INTO R_CONSUMO
          FROM DM_RESULT_OPERACIONAL
         WHERE CDFILIAL = P_CDFILIAL
           AND DTRESUMO BETWEEN P_DATAINIORCA AND P_DATAFINORCA           
           AND (CDARVPROD = P_CDARVPROD OR P_CDARVPROD IS NULL);

        SELECT NVL(SUM(VRCONSUMO),0) + NVL(R_CONSUMO_ACUM,0)
          INTO R_CONSUMO_ACUM
          FROM DM_RESULT_OPERACIONAL
         WHERE CDFILIAL = P_CDFILIAL
           AND DTRESUMO BETWEEN P_DTINIORCAPERIODO AND P_DATAFINORCA         
           AND (CDARVPROD = P_CDARVPROD OR P_CDARVPROD IS NULL);
     ELSE
        SELECT NVL(SUM(O.VRREALIZADO),0) + NVL(R_CONSUMO,0)
          INTO R_CONSUMO
          FROM ORCAMENTREALOC O
         WHERE O.CDFILIAL = P_CDFILIAL
           AND O.IDORIGEM = 'CONSUMO'
           AND TRUNC(O.DTMESPERIODO,'MM') = TRUNC(P_DATAINIORCA,'MM')         
           AND (O.CDNVLARVPROD = P_CDARVPROD OR P_CDARVPROD IS NULL);

        SELECT NVL(SUM(O.VRREALIZADO),0) + NVL(R_CONSUMO_ACUM,0)
          INTO R_CONSUMO_ACUM
          FROM ORCAMENTREALOC O
         WHERE O.CDFILIAL = P_CDFILIAL
           AND O.IDORIGEM = 'CONSUMO'
           AND TRUNC(O.DTMESPERIODO,'MM') BETWEEN TRUNC(P_DTINIORCAPERIODO, 'MM') AND TRUNC(P_DATAINIORCA,'MM')         
           AND (O.CDNVLARVPROD = P_CDARVPROD OR P_CDARVPROD IS NULL);
     END IF;
  END;

  PROCEDURE RESULTADO_DESPDIVERSA(P_CDFILIAL IN VARCHAR2,
                                  P_DATAINIORCA IN DATE,
                                  P_DATAFINORCA IN DATE,
                                  P_DTINIORCAPERIODO IN DATE,
                                  P_CDCODIGO IN VARCHAR2,
                                  P_CDARVPROD IN VARCHAR2,
                                  R_DESPDIVERSA OUT FLOAT,
                                  R_DESPDIVERSA_ACUM OUT FLOAT) IS
    V_AUXDESC VARCHAR2(30);
  BEGIN
     SELECT MAX(C.IDTIPORCAOP)
       INTO V_AUXDESC
       FROM FILIALCADA F INNER JOIN CONFIGALCADA C ON F.NRCONFIGALCADA = C.NRCONFIGALCADA
      WHERE F.CDFILIAL = P_CDFILIAL
        AND C.IDTIPORCAOP = 'DESPESA';

     IF V_AUXDESC IS NULL THEN
        SELECT NVL(SUM(CASE WHEN D.IDTIPODESP = 'CONTA_RECEBER' THEN -1 ELSE 1 END * D.VRDESPESA),0) + NVL(R_DESPDIVERSA,0)
          INTO R_DESPDIVERSA
          FROM DESPESASROP D INNER JOIN FILIALROP F ON D.NRFILIALROP = F.NRFILIALROP
                             LEFT  JOIN PRODUTO P ON D.CDPRODUTO = P.CDPRODUTO
         WHERE D.IDTPLANCROP = 'DESPESA'
           AND D.IDTIPODESP IS NULL
           AND F.CDFILIAL = P_CDFILIAL
           AND D.DTDESPESA = F.DTFILIALROP
           AND F.DTFILIALROP BETWEEN P_DATAINIORCA AND P_DATAFINORCA
           AND ((P_CDCODIGO IS NULL AND P_CDARVPROD IS NULL) 
             OR (P_CDCODIGO = D.CDDESPESA AND P.CDARVPROD = P_CDARVPROD)
             OR (P_CDCODIGO = D.CDDESPESA AND P_CDARVPROD IS NULL));

        SELECT NVL(SUM(CASE WHEN D.IDTIPODESP = 'CONTA_RECEBER' THEN -1 ELSE 1 END * D.VRDESPESA),0) + NVL(R_DESPDIVERSA_ACUM,0)
          INTO R_DESPDIVERSA_ACUM
          FROM DESPESASROP D INNER JOIN FILIALROP F ON D.NRFILIALROP = F.NRFILIALROP
                             LEFT  JOIN PRODUTO P ON D.CDPRODUTO = P.CDPRODUTO
         WHERE D.IDTPLANCROP = 'DESPESA'
           AND D.IDTIPODESP IS NULL
           AND F.CDFILIAL = P_CDFILIAL
           AND D.DTDESPESA = F.DTFILIALROP
           AND F.DTFILIALROP BETWEEN P_DTINIORCAPERIODO AND P_DATAFINORCA
           AND ((P_CDCODIGO IS NULL AND P_CDARVPROD IS NULL) 
             OR (P_CDCODIGO = D.CDDESPESA AND P.CDARVPROD = P_CDARVPROD)
             OR (P_CDCODIGO = D.CDDESPESA AND P_CDARVPROD IS NULL));
     ELSE
        SELECT NVL(SUM(O.VRREALIZADO),0) + NVL(R_DESPDIVERSA,0)
          INTO R_DESPDIVERSA
          FROM ORCAMENTREALOC O
         WHERE O.CDFILIAL = P_CDFILIAL
           AND O.IDORIGEM = 'DESPESA'
           AND TRUNC(O.DTMESPERIODO,'MM') = TRUNC(P_DATAINIORCA,'MM')
           AND ((P_CDARVPROD IS NULL) OR (P_CDARVPROD = O.CDNVLARVPROD));

        SELECT NVL(SUM(O.VRREALIZADO),0) + NVL(R_DESPDIVERSA_ACUM,0)
          INTO R_DESPDIVERSA_ACUM
          FROM ORCAMENTREALOC O
         WHERE O.CDFILIAL = P_CDFILIAL
           AND O.IDORIGEM = 'DESPESA'
           AND TRUNC(O.DTMESPERIODO,'MM') BETWEEN TRUNC(P_DTINIORCAPERIODO,'MM') AND TRUNC(P_DATAINIORCA,'MM')
           AND ((P_CDARVPROD IS NULL) OR (P_CDARVPROD = O.CDNVLARVPROD));
     END IF;
  END;

  PROCEDURE RESULTADO_DESPENTRADA(P_CDFILIAL IN VARCHAR2,
                                  P_DATAINIORCA IN DATE,
                                  P_DATAFINORCA IN DATE,
                                  P_DTINIORCAPERIODO IN DATE,
                                  P_CDCODIGO IN VARCHAR2,
                                  P_CDARVPROD IN VARCHAR2,
                                  R_DESPENTRADA OUT FLOAT,
                                  R_DESPENTRADA_ACUM OUT FLOAT) IS
    V_AUXDESC VARCHAR2(30);
  BEGIN
     SELECT NVL(SUM(CASE WHEN D.IDTIPODESP = 'CONTA_RECEBER' THEN -1 ELSE 1 END * D.VRDESPESA),0)
       INTO R_DESPENTRADA
       FROM DESPESASROP D INNER JOIN FILIALROP F ON D.NRFILIALROP = F.NRFILIALROP
                          LEFT  JOIN PRODUTO P ON D.CDPRODUTO = P.CDPRODUTO
      WHERE D.IDTPLANCROP = 'DESPESA'
        AND D.IDTIPODESP = 'LANC_ENTRADA'
        AND F.CDFILIAL = P_CDFILIAL
        AND D.DTDESPESA = F.DTFILIALROP
        AND F.DTFILIALROP BETWEEN P_DATAINIORCA AND P_DATAFINORCA
           AND ((P_CDCODIGO IS NULL AND P_CDARVPROD IS NULL) 
             OR (P_CDCODIGO = D.CDDESPESA AND P.CDARVPROD = P_CDARVPROD)
             OR (P_CDCODIGO = D.CDDESPESA AND P_CDARVPROD IS NULL));

     SELECT NVL(SUM(CASE WHEN D.IDTIPODESP = 'CONTA_RECEBER' THEN -1 ELSE 1 END * D.VRDESPESA),0)
       INTO R_DESPENTRADA_ACUM
       FROM DESPESASROP D INNER JOIN FILIALROP F ON D.NRFILIALROP = F.NRFILIALROP
                          LEFT  JOIN PRODUTO P ON D.CDPRODUTO = P.CDPRODUTO
      WHERE D.IDTPLANCROP = 'DESPESA'
        AND D.IDTIPODESP = 'LANC_ENTRADA'
        AND F.CDFILIAL = P_CDFILIAL
        AND D.DTDESPESA = F.DTFILIALROP
        AND F.DTFILIALROP BETWEEN P_DTINIORCAPERIODO AND P_DATAFINORCA
           AND ((P_CDCODIGO IS NULL AND P_CDARVPROD IS NULL) 
             OR (P_CDCODIGO = D.CDDESPESA AND P.CDARVPROD = P_CDARVPROD)
             OR (P_CDCODIGO = D.CDDESPESA AND P_CDARVPROD IS NULL));
  END;
BEGIN
   SELECT MAX(NRORG)
     INTO V_NRORG
     FROM PARAMORCAOPERAC;

   V_DTORCAMENTO := NULL;
   V_DSDESCRICAO := P_DESCRICAO;
   V_NRRESUMO_ROP := 0;
   V_DESPESA := 0;

   IF NVL(P_IDPERCEN, 'D') = 'D' THEN
      SELECT NVL(MIN(P.IDCALCPERCENTFAT), 'FATURAMENTO_BRUTO') IDCALCPERCENTFAT
        INTO V_IDCALCPERCENTFAT
        FROM PARFILIALROP P, LISTA L
       WHERE L.NRLISTA = P_LFILIAL
         AND P.CDFILIAL = TIPOPARAM_DRO(L.CDLISTA);
   ELSE
      V_IDCALCPERCENTFAT := CASE WHEN P_IDPERCEN = 'B' THEN 'FATURAMENTO_BRUTO' ELSE 'FATURAMENTO_LIQUIDO' END;
   END IF;

   V_PERCENT := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO' THEN 'B' ELSE 'L' END;   

   IF P_IDMODELO = 'P' THEN
   FOR C_ORCAMENTO IN (SELECT I.IDTIPOORCAOP, M.DTORCAMENTO, SUM(M.VRORCAMENTO) VRORCAMENTO, A.IDAPROVACAOGOP, O.NRORG
                         FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                             INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                                             INNER JOIN LISTA L ON L.CDLISTA = O.CDFILIAL
                                             INNER JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                        WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
                          AND O.IDPERIODOORCA = P_IDPERIODOORCA
                          AND O.NRPERIODOORCA = P_NRPERIODOORCA
                          AND L.NRLISTA = P_LFILIAL
                     --     AND A.IDAPROVACAOGOP = 'APROVADO'
                        GROUP BY I.IDTIPOORCAOP, M.DTORCAMENTO, A.IDAPROVACAOGOP, O.NRORG
                        ORDER BY M.DTORCAMENTO, CASE I.IDTIPOORCAOP 
                                                   WHEN 'FATURAMENTO' THEN 1
                                                   WHEN 'IMPOSTO' THEN 2
                                                   WHEN 'IMPOSTOARECUPERAR' THEN 3
                                                   WHEN 'TAXAADM' THEN 4
                                                   WHEN 'CONSUMO' THEN 5
                                                   WHEN 'DESPDIVERSA' THEN 6
                                                   WHEN 'DESPENTRADA' THEN 7
                                                   WHEN 'DESPMATRIZ' THEN 8
                                                   WHEN 'MAOOBRA' THEN 9
                                                   WHEN 'DEPRECIACAO' THEN 10
                                                   WHEN 'INVESTIMENTO' THEN 11
                                                   WHEN 'IMPOSTOSOBLUCRO' THEN 12
                                                END) LOOP

      IF C_ORCAMENTO.DTORCAMENTO <> NVL(V_DTORCAMENTO, C_ORCAMENTO.DTORCAMENTO-1) THEN
         IF V_DTORCAMENTO IS NOT NULL THEN
            OUT_RECORD.NRORDEM         := 4;
            OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
            OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
            OUT_RECORD.NRTOPICO        := '(=)';
            OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
            OUT_RECORD.DSDESCRICAOTOP  := 'FATLIQUIDO';
            OUT_RECORD.VRORCADO        := V_VRFATLIQUIDO;
            OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                               THEN V_VRFATLIQUIDO / V_VRCALCPERC
                                               ELSE 0
                                          END;
            OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
            PIPE ROW (OUT_RECORD);

            OUT_RECORD.NRORDEM         := 7;
            OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
            OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
            OUT_RECORD.NRTOPICO        := '(=)';
            OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
            OUT_RECORD.DSDESCRICAOTOP  := 'MARGEMCONTRIB';
            OUT_RECORD.VRORCADO        := V_VRMARGEMCONTRIB;
            OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                               THEN V_VRMARGEMCONTRIB / V_VRCALCPERC
                                               ELSE 0
                                          END;
            OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
            PIPE ROW (OUT_RECORD);

            OUT_RECORD.NRORDEM         := 8;
            OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
            OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
            OUT_RECORD.NRTOPICO        := '(=)';
            OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
            OUT_RECORD.DSDESCRICAOTOP  := 'DESPESATOTAL';
            OUT_RECORD.VRORCADO        := V_DESPESA;
            OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                               THEN V_DESPESA / V_VRCALCPERC
                                               ELSE 0
                                          END;
            OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
            PIPE ROW (OUT_RECORD);

            V_DESPESA := 0;

            OUT_RECORD.NRORDEM         := 13;
            OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
            OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
            OUT_RECORD.NRTOPICO        := '(=)';
            OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
            OUT_RECORD.DSDESCRICAOTOP  := 'FATLUCRO';
            OUT_RECORD.VRORCADO        := V_RESULTADO;
            OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                               THEN V_RESULTADO / V_VRCALCPERC
                                               ELSE 0
                                          END;
            OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
            PIPE ROW (OUT_RECORD);

            OUT_RECORD.NRORDEM         := 17;
            OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
            OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
            OUT_RECORD.NRTOPICO        := '(=)';
            OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
            OUT_RECORD.DSDESCRICAOTOP  := 'RESULTADO';
            OUT_RECORD.VRORCADO        := V_VRFATLUCRO;
            OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                               THEN V_VRFATLUCRO / V_VRCALCPERC
                                               ELSE 0
                                          END;
            OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         V_VRFATLIQUIDO := 0;
         V_VRMARGEMCONTRIB := 0;
         V_VRFATLUCRO := 0;
         V_RESULTADO := 0;

         V_DTORCAMENTO := C_ORCAMENTO.DTORCAMENTO;         

         SELECT NVL(SUM(CASE WHEN I.IDTIPOORCAOP = 'IMPOSTO'
                             THEN M.VRORCAMENTO*(-1)
                             ELSE M.VRORCAMENTO
                        END),0) VRORCAMENTO
           INTO V_VRCALCPERC
           FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                               INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                               INNER JOIN LISTA L ON L.CDLISTA = O.CDFILIAL
                               INNER JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
          WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
            AND O.IDPERIODOORCA = P_IDPERIODOORCA
            AND O.NRPERIODOORCA = P_NRPERIODOORCA
            AND L.NRLISTA = P_LFILIAL
            AND A.IDAPROVACAOGOP = 'APROVADO'
            AND M.DTORCAMENTO = C_ORCAMENTO.DTORCAMENTO
            AND ((V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO' AND I.IDTIPOORCAOP IN ('FATURAMENTO')) OR
                  V_IDCALCPERCENTFAT = 'FATURAMENTO_LIQUIDO' AND I.IDTIPOORCAOP IN ('FATURAMENTO', 'IMPOSTO', 'IMPOSTOARECUPERAR'));
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'FATURAMENTO' THEN            
         V_VRFATLIQUIDO := C_ORCAMENTO.VRORCAMENTO;
         V_VRMARGEMCONTRIB := C_ORCAMENTO.VRORCAMENTO;
         V_VRFATLUCRO := C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 1;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(+)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'FATUBRUTO';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'IMPOSTO' THEN
         V_VRFATLIQUIDO := V_VRFATLIQUIDO - C_ORCAMENTO.VRORCAMENTO;
         V_VRMARGEMCONTRIB := V_VRMARGEMCONTRIB - C_ORCAMENTO.VRORCAMENTO;
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 2;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'IMPOSTO';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'IMPOSTOARECUPERAR' THEN
         V_VRFATLIQUIDO := V_VRFATLIQUIDO + C_ORCAMENTO.VRORCAMENTO;
         V_VRMARGEMCONTRIB := V_VRMARGEMCONTRIB + C_ORCAMENTO.VRORCAMENTO;
         V_VRFATLUCRO := V_VRFATLUCRO + C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO + C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 3;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(+)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'IMPOSTOARECUPERAR';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'TAXAADM' THEN
         V_VRMARGEMCONTRIB := V_VRMARGEMCONTRIB - C_ORCAMENTO.VRORCAMENTO;
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 5;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'TAXAADM';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN
         V_VRMARGEMCONTRIB := V_VRMARGEMCONTRIB - C_ORCAMENTO.VRORCAMENTO;
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 6;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'CONSUMO';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'DESPDIVERSA' THEN
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;
         V_DESPESA := C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 9;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'DESPDIVERSA';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'DESPENTRADA' THEN
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;
         V_DESPESA := C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 10;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'DESPENTRADA';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'DESPMATRIZ' THEN
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;
         V_DESPESA := C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 11;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'DESPMATRIZ';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;      

      IF C_ORCAMENTO.IDTIPOORCAOP = 'MAOOBRA' THEN
         V_VRFATLUCRO := V_VRFATLUCRO - C_ORCAMENTO.VRORCAMENTO;
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 12;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'MAOOBRA';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'DEPRECIACAO' THEN
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 14;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'DEPRECIACAO';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'INVESTIMENTO' THEN
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 15;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'INVESTIMENTO';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      IF C_ORCAMENTO.IDTIPOORCAOP = 'IMPOSTOSOBLUCRO' THEN
         V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

         OUT_RECORD.NRORDEM         := 16;
         OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
         OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
         OUT_RECORD.NRTOPICO        := '(-)';
         OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
         OUT_RECORD.DSDESCRICAOTOP  := 'IMPOSTOSOBLUCRO';
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                            THEN C_ORCAMENTO.VRORCAMENTO / V_VRCALCPERC
                                            ELSE 0
                                       END;
         OUT_RECORD.NRORG := C_ORCAMENTO.NRORG;
         PIPE ROW (OUT_RECORD);
      END IF;

      V_NRORG := C_ORCAMENTO.NRORG;
   END LOOP;

   IF V_NRORG IS NOT NULL THEN
      OUT_RECORD.NRORDEM         := 4;
      OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
      OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
      OUT_RECORD.NRTOPICO        := '(=)';
      OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
      OUT_RECORD.DSDESCRICAOTOP  := 'FATLIQUIDO';
      OUT_RECORD.VRORCADO        := V_VRFATLIQUIDO;
      OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                         THEN V_VRFATLIQUIDO / V_VRCALCPERC
                                         ELSE 0
                                    END;
      OUT_RECORD.NRORG := V_NRORG;
      PIPE ROW (OUT_RECORD);

      OUT_RECORD.NRORDEM         := 7;
      OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
      OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
      OUT_RECORD.NRTOPICO        := '(=)';
      OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
      OUT_RECORD.DSDESCRICAOTOP  := 'MARGEMCONTRIB';
      OUT_RECORD.VRORCADO        := V_VRMARGEMCONTRIB;
      OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                         THEN V_VRMARGEMCONTRIB / V_VRCALCPERC
                                         ELSE 0
                                    END;
      OUT_RECORD.NRORG := V_NRORG;
      PIPE ROW (OUT_RECORD);      

      IF V_DESPESA IS NULL THEN
         V_DESPESA := 0;
      END IF;

      OUT_RECORD.NRORDEM         := 8;
      OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
      OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
      OUT_RECORD.NRTOPICO        := '(=)';
      OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
      OUT_RECORD.DSDESCRICAOTOP  := 'DESPESATOTAL';
      OUT_RECORD.VRORCADO        := V_DESPESA;
      OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                         THEN V_DESPESA / V_VRCALCPERC
                                         ELSE 0
                                    END;
      OUT_RECORD.NRORG := V_NRORG;
      PIPE ROW (OUT_RECORD);

      OUT_RECORD.NRORDEM         := 13;
      OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
      OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
      OUT_RECORD.NRTOPICO        := '(=)';
      OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
      OUT_RECORD.DSDESCRICAOTOP  := 'FATLUCRO';
      OUT_RECORD.VRORCADO        := V_RESULTADO;
      OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                         THEN V_RESULTADO / V_VRCALCPERC
                                         ELSE 0
                                    END;
      OUT_RECORD.NRORG := V_NRORG;
      PIPE ROW (OUT_RECORD);

      OUT_RECORD.NRORDEM         := 17;
      OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
      OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
      OUT_RECORD.NRTOPICO        := '(=)';
      OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
      OUT_RECORD.DSDESCRICAOTOP  := 'RESULTADO';
      OUT_RECORD.VRORCADO        := V_VRFATLUCRO;
      OUT_RECORD.VRPERORCADO     := CASE WHEN V_VRCALCPERC <> 0
                                         THEN V_VRFATLUCRO / V_VRCALCPERC
                                         ELSE 0
                                    END;
      OUT_RECORD.NRORG := V_NRORG;
      PIPE ROW (OUT_RECORD);
   END IF;
   ELSIF P_IDMODELO = 'M' OR P_IDMODELO = 'M03' THEN
      V_LIQUIDO := 0;
      V_MARGEM := 0;
      V_PARCIAL := 0;
      V_RESULTADO := 0;

      V_LIQUIDOREAL := 0;
      V_MARGEMREAL := 0;
      V_PARCIALREAL := 0;
      V_RESULTADOREAL := 0;

      V_LIQUIDOSALDO := 0;
      V_MARGEMSALDO := 0;
      V_PARCIALSALDO := 0;
      V_RESULTADOSALDO := 0;

      V_LIQUIDOACUM := 0;
      V_MARGEMACUM := 0;
      V_PARCIALACUM := 0;
      V_RESULTADOACUM := 0;

      V_AUX := 0;

      R_FATURAMENTO := 0; R_IMPOSTO := 0;
      R_TAXAADM := 0;     R_CONSUMO := 0;
      R_MAOOBRA := 0;     R_INVESTIMENTO := 0;
      R_DEPRECIACAO := 0;

      IF P_IDMODELO NOT IN ('M03') THEN
         SELECT MAX(CDFILIAL), TO_DATE(TO_CHAR(MAX(P.DTINIPERIORCA),'DD/MM')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'),
                TO_DATE(TO_CHAR(MAX(P.DTINIPERIORCA),'DD')||'/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'),
                ADD_MONTHS(TO_DATE(TO_CHAR(MAX(P.DTINIPERIORCA),'DD')||'/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'),1)-1,
                TO_DATE('01/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP, 'DD/MM/YYYY')
           INTO V_CDFILIAL, V_DTINIORCAPERIODO,
                V_DATAINIORCA,
                V_DATAFINORCA,
                V_DTORCAMENTO
           FROM PERIODOORCAGOP P LEFT JOIN LISTA L ON L.NRLISTA = P_LFILIAL
          WHERE P.IDPERIODOORCA = P_IDPERIODOORCA
            AND P.NRPERIODO = P_NRPERIODOORCA
            AND P.CDFILIAL = NVL((SELECT MAX(X.CDFILIAL) FROM PERIODOORCAGOP X WHERE X.CDFILIAL = L.CDLISTA),'P')
            AND LAST_DAY(TO_DATE('01/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP, 'DD/MM/YYYY'))
                BETWEEN TO_DATE(TO_CHAR(P.DTINIPERIORCA,'DD/MM')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY')
                    AND ADD_MONTHS(TO_DATE(TO_CHAR(P.DTINIPERIORCA,'DD/MM')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'), ROUND(MONTHS_BETWEEN(P.DTFIMPERIORCA,P.DTINIPERIORCA),0))-1;

         RESULT_DRO(P_LFILIAL, V_DATAINIORCA, V_DATAFINORCA,'N', V_PERCENT,
                    R_FATURAMENTO, R_IMPOSTO, R_TAXAADM, R_CONSUMO, R_MAOOBRA, R_INVESTIMENTO,
                    R_DEPRECIACAO);

         BEGIN
            SELECT FATURAMENTO, IMPOSTO, CONSUMO, DESPENTRADA, TAXAADM,
                   DESPDIVERSA, INVESTIMENTO, MAOOBRA, DEPRECIACAO
              INTO O_FATURAMENTO_ACUM, O_IMPOSTO_ACUM, O_CONSUMO_ACUM, O_DESPENTRADA_ACUM, O_TAXAADM_ACUM,
                   O_DESPDIVERSA_ACUM, O_INVESTIMENTO_ACUM, O_MAOOBRA_ACUM, O_DEPRECIACAO_ACUM
              FROM (SELECT I.IDTIPOORCAOP, NVL(M.VRORCAMENTO,0) VRORCAMENTO
                      FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                          INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                                          INNER JOIN LISTA L ON L.CDLISTA = O.CDFILIAL
                                          LEFT  JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                    AND A.IDTIPOORCAOP = I.IDTIPOORCAOP
                     WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
                       AND O.IDPERIODOORCA = P_IDPERIODOORCA
                       AND O.NRPERIODOORCA = P_NRPERIODOORCA
                       AND L.NRLISTA = P_LFILIAL
                       AND TRUNC(M.DTORCAMENTO,'MM') <= V_DTORCAMENTO)
             PIVOT (SUM(VRORCAMENTO)
                    FOR IDTIPOORCAOP IN ('FATURAMENTO' FATURAMENTO, 'IMPOSTO' IMPOSTO, 'CONSUMO' CONSUMO, 'DESPENTRADA' DESPENTRADA,
                                         'TAXAADM' TAXAADM, 'DESPDIVERSA' DESPDIVERSA, 'INVESTIMENTO' INVESTIMENTO,
                                         'MAOOBRA' MAOOBRA, 'DEPRECIACAO' DEPRECIACAO));
         EXCEPTION
            WHEN NO_DATA_FOUND THEN BEGIN
               O_FATURAMENTO_ACUM := 0; O_IMPOSTO_ACUM := 0; O_CONSUMO_ACUM := 0; O_DESPENTRADA_ACUM := 0;
               O_TAXAADM_ACUM := 0; O_DESPDIVERSA_ACUM := 0; O_INVESTIMENTO_ACUM := 0; O_MAOOBRA_ACUM := 0;
               O_DEPRECIACAO_ACUM := 0;
            END;
         END;

         RESULT_DRO(V_CDFILIAL, V_DTINIORCAPERIODO, V_DATAFINORCA, 'S', V_PERCENT, 
                    R_FATURAMENTO_ACUM, R_IMPOSTO_ACUM, R_TAXAADM_ACUM, R_CONSUMO_ACUM, R_MAOOBRA_ACUM, R_INVESTIMENTO_ACUM,
                    R_DEPRECIACAO_ACUM);

         FOR C_ORCAMENTO IN (SELECT X.IDTIPOORCAOP, MAX(X.DTORCAMENTO) DTORCAMENTO, NVL(SUM(X.VRORCAMENTO),0) VRORCAMENTO, 
                                    MAX(X.IDAPROVACAOGOP) IDAPROVACAOGOP, MAX(X.NRORG) NRORG, X.ORDEM
                               FROM (SELECT I.IDTIPOORCAOP, M.DTORCAMENTO, NVL(SUM(M.VRORCAMENTO),0) VRORCAMENTO, A.IDAPROVACAOGOP, O.NRORG, 
                                            CASE I.IDTIPOORCAOP WHEN 'FATURAMENTO' THEN 0
                                                                ELSE 1
                                            END ORDEM
                                       FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                           INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                                                           INNER JOIN LISTA L ON L.CDLISTA = O.CDFILIAL
                                                           LEFT  JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                                     AND A.IDTIPOORCAOP = I.IDTIPOORCAOP
                                      WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
                                        AND O.IDPERIODOORCA = P_IDPERIODOORCA
                                        AND O.NRPERIODOORCA = P_NRPERIODOORCA
                                        AND L.NRLISTA = P_LFILIAL
                                        AND TRUNC(M.DTORCAMENTO,'MM') = V_DTORCAMENTO
                                      GROUP BY I.IDTIPOORCAOP, M.DTORCAMENTO, A.IDAPROVACAOGOP, O.NRORG
                                      UNION ALL 
                                     SELECT 'FATURAMENTO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 0 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'IMPOSTO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'CONSUMO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'MAOOBRA' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'DESPDIVERSA' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'DESPENTRADA' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'TAXAADM' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'INVESTIMENTO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL
                                      UNION ALL 
                                     SELECT 'DEPRECIACAO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 1 ORDEM
                                       FROM DUAL) X
                              GROUP BY X.IDTIPOORCAOP, X.ORDEM
                              UNION 
                             SELECT 'LIQUIDO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 2 ORDEM
                               FROM DUAL
                              UNION 
                             SELECT 'MARGEM' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 3 ORDEM
                               FROM DUAL
                              UNION 
                             SELECT 'PARCIAL' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 4 ORDEM
                               FROM DUAL
                              UNION 
                             SELECT 'RESULTADO' IDTIPOORCAOP, NULL DTORCAMENTO, 0 VRORCAMENTO, NULL IDAPROVACAOGOP, NULL NRORG, 5 ORDEM
                               FROM DUAL
                              ORDER BY ORDEM) LOOP

            IF C_ORCAMENTO.IDTIPOORCAOP = 'FATURAMENTO' THEN            
               V_FATURAMENTO := C_ORCAMENTO.VRORCAMENTO;

               OUT_RECORD.NRORDEM         := 0;
               OUT_RECORD.NRRESUMO_GOP    := 1;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(+)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'FATURAMENTO';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRREALIZADO     := R_FATURAMENTO;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_FATURAMENTO / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_FATURAMENTO / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_FATURAMENTO_ACUM - R_FATURAMENTO_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_LIQUIDO := V_LIQUIDO + C_ORCAMENTO.VRORCAMENTO;
               V_MARGEM := V_MARGEM + C_ORCAMENTO.VRORCAMENTO;
               V_PARCIAL := V_PARCIAL + C_ORCAMENTO.VRORCAMENTO;
               V_RESULTADO := V_RESULTADO + C_ORCAMENTO.VRORCAMENTO;

               V_LIQUIDOREAL := V_LIQUIDOREAL + R_FATURAMENTO;
               V_MARGEMREAL := V_MARGEMREAL + R_FATURAMENTO;
               V_PARCIALREAL := V_PARCIALREAL + R_FATURAMENTO;
               V_RESULTADOREAL := V_RESULTADOREAL + R_FATURAMENTO;

               V_LIQUIDOSALDO := V_LIQUIDOSALDO + (C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO);
               V_MARGEMSALDO := V_MARGEMSALDO + (C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO);
               V_PARCIALSALDO := V_PARCIALSALDO + (C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO);
               V_RESULTADOSALDO := V_RESULTADOSALDO + (C_ORCAMENTO.VRORCAMENTO - R_FATURAMENTO);

               V_LIQUIDOACUM := V_LIQUIDOACUM + (O_FATURAMENTO_ACUM - R_FATURAMENTO_ACUM);
               V_MARGEMACUM := V_MARGEMACUM + (O_FATURAMENTO_ACUM - R_FATURAMENTO_ACUM);
               V_PARCIALACUM := V_PARCIALACUM + (O_FATURAMENTO_ACUM - R_FATURAMENTO_ACUM);
               V_RESULTADOACUM := V_RESULTADOACUM + (O_FATURAMENTO_ACUM - R_FATURAMENTO_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'IMPOSTO' THEN
               OUT_RECORD.NRORDEM         := 1;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(+/-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'IMPOSTO';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_IMPOSTO;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_IMPOSTO / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_IMPOSTO / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_IMPOSTO_ACUM + R_IMPOSTO_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_LIQUIDO := V_LIQUIDO - C_ORCAMENTO.VRORCAMENTO;
               V_MARGEM := V_MARGEM - C_ORCAMENTO.VRORCAMENTO;
               V_PARCIAL := V_PARCIAL - C_ORCAMENTO.VRORCAMENTO;
               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_LIQUIDOREAL := V_LIQUIDOREAL + R_IMPOSTO;
               V_MARGEMREAL := V_MARGEMREAL + R_IMPOSTO;
               V_PARCIALREAL := V_PARCIALREAL + R_IMPOSTO;
               V_RESULTADOREAL := V_RESULTADOREAL + R_IMPOSTO;

               V_LIQUIDOSALDO := V_LIQUIDOSALDO - C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO;
               V_MARGEMSALDO := V_MARGEMSALDO - C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO;
               V_PARCIALSALDO := V_PARCIALSALDO - C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO;
               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO - R_IMPOSTO;

               V_LIQUIDOACUM := V_LIQUIDOACUM - (O_IMPOSTO_ACUM - R_IMPOSTO_ACUM);
               V_MARGEMACUM := V_MARGEMACUM - (O_IMPOSTO_ACUM - R_IMPOSTO_ACUM);
               V_PARCIALACUM := V_PARCIALACUM - (O_IMPOSTO_ACUM - R_IMPOSTO_ACUM);
               V_RESULTADOACUM := V_RESULTADOACUM - (O_IMPOSTO_ACUM - R_IMPOSTO_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'LIQUIDO' THEN
               OUT_RECORD.NRORDEM         := 2;
               OUT_RECORD.NRRESUMO_GOP    := 2;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(=)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'LIQUIDO';
               OUT_RECORD.VRORCADO        := V_LIQUIDO;
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_LIQUIDO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_LIQUIDO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRREALIZADO     := V_LIQUIDOREAL;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN V_LIQUIDOREAL / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN V_LIQUIDOREAL / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := V_LIQUIDOSALDO;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_LIQUIDOSALDO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_LIQUIDOSALDO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := V_LIQUIDOACUM;
               OUT_RECORD.NRORG := V_NRORG;

               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN
               R_CONSUMO := 0;
               R_CONSUMO_ACUM := 0;

               FOR C_FIL IN (SELECT CDLISTA CDFILIAL
                               FROM LISTA
                              WHERE NRLISTA = P_LFILIAL) LOOP

                  RESULTADO_CONSUMO(C_FIL.CDFILIAL, V_DATAINIORCA, V_DATAFINORCA, V_DTINIORCAPERIODO, NULL, R_CONSUMO, R_CONSUMO_ACUM);
               END LOOP;

               OUT_RECORD.NRORDEM         := 3;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'CONSUMO';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_CONSUMO*(-1);
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_CONSUMO / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_CONSUMO / V_LIQUIDOREAL ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRSALDO         := (C_ORCAMENTO.VRORCAMENTO - R_CONSUMO)*(-1);
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_CONSUMO) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_CONSUMO) / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRACUMULADO     := (O_CONSUMO_ACUM - R_CONSUMO_ACUM)*(-1);
               OUT_RECORD.NRORG := V_NRORG;

               V_MARGEM := V_MARGEM - C_ORCAMENTO.VRORCAMENTO;
               V_PARCIAL := V_PARCIAL - C_ORCAMENTO.VRORCAMENTO;
               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_MARGEMREAL := V_MARGEMREAL + (R_CONSUMO *(-1));
               V_PARCIALREAL := V_PARCIALREAL + (R_CONSUMO *(-1));
               V_RESULTADOREAL := V_RESULTADOREAL + (R_CONSUMO *(-1));

               V_MARGEMSALDO := V_MARGEMSALDO - C_ORCAMENTO.VRORCAMENTO - (R_CONSUMO *(-1));
               V_PARCIALSALDO := V_PARCIALSALDO - C_ORCAMENTO.VRORCAMENTO - (R_CONSUMO *(-1));
               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO - (R_CONSUMO *(-1));

               V_MARGEMACUM := V_MARGEMACUM - (O_CONSUMO_ACUM - R_CONSUMO_ACUM);
               V_PARCIALACUM := V_PARCIALACUM - (O_CONSUMO_ACUM - R_CONSUMO_ACUM);
               V_RESULTADOACUM := V_RESULTADOACUM - (O_CONSUMO_ACUM - R_CONSUMO_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'MAOOBRA' THEN
               OUT_RECORD.NRORDEM         := 4;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'MAOOBRA';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_MAOOBRA;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_MAOOBRA / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_MAOOBRA / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO + R_MAOOBRA;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_MAOOBRA) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_MAOOBRA) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_MAOOBRA_ACUM + R_MAOOBRA_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_MARGEM := V_MARGEM - C_ORCAMENTO.VRORCAMENTO;
               V_PARCIAL := V_PARCIAL - C_ORCAMENTO.VRORCAMENTO;
               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_MARGEMREAL := V_MARGEMREAL + R_MAOOBRA;
               V_PARCIALREAL := V_PARCIALREAL + R_MAOOBRA;
               V_RESULTADOREAL := V_RESULTADOREAL + R_MAOOBRA;

               V_MARGEMSALDO := V_MARGEMSALDO - C_ORCAMENTO.VRORCAMENTO - R_MAOOBRA;
               V_PARCIALSALDO := V_PARCIALSALDO - C_ORCAMENTO.VRORCAMENTO - R_MAOOBRA;
               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO - R_MAOOBRA;

               V_MARGEMACUM := V_MARGEMACUM - (O_MAOOBRA_ACUM - R_MAOOBRA_ACUM);
               V_PARCIALACUM := V_PARCIALACUM - (O_MAOOBRA_ACUM - R_MAOOBRA_ACUM);
               V_RESULTADOACUM := V_RESULTADOACUM - (O_MAOOBRA_ACUM - R_MAOOBRA_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'MARGEM' THEN
               OUT_RECORD.NRORDEM         := 5;
               OUT_RECORD.NRRESUMO_GOP    := 3;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(=)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'MARGEM';
               OUT_RECORD.VRORCADO        := V_MARGEM;
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_MARGEM / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_MARGEM / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRREALIZADO     := V_MARGEMREAL;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN V_MARGEMREAL / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN V_MARGEMREAL / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := V_MARGEMSALDO;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_MARGEMSALDO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_MARGEMSALDO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := V_MARGEMACUM;
               OUT_RECORD.NRORG := V_NRORG;

               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'DESPDIVERSA' THEN
               R_DESPDIVERSA := 0;
               R_DESPDIVERSA_ACUM := 0;

               FOR C_FIL IN (SELECT CDLISTA CDFILIAL
                               FROM LISTA
                              WHERE NRLISTA = P_LFILIAL) LOOP

                  RESULTADO_DESPDIVERSA(C_FIL.CDFILIAL, V_DATAINIORCA, V_DATAFINORCA, V_DTINIORCAPERIODO, NULL, NULL, R_DESPDIVERSA, R_DESPDIVERSA_ACUM);
               END LOOP;

               OUT_RECORD.NRORDEM         := 6;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'DESPDIVERSA';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_DESPDIVERSA*(-1);
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_DESPDIVERSA / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_DESPDIVERSA / V_LIQUIDOREAL ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO - R_DESPDIVERSA;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_DESPDIVERSA) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO - R_DESPDIVERSA) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_DESPDIVERSA_ACUM + (R_DESPDIVERSA_ACUM*(-1));
               OUT_RECORD.NRORG := V_NRORG;

               V_PARCIAL := V_PARCIAL - (C_ORCAMENTO.VRORCAMENTO*(-1));
               V_RESULTADO := V_RESULTADO - (C_ORCAMENTO.VRORCAMENTO*(-1));

               V_PARCIALREAL := V_PARCIALREAL + (R_DESPDIVERSA*(-1));
               V_RESULTADOREAL := V_RESULTADOREAL + (R_DESPDIVERSA*(-1));

               V_PARCIALSALDO := V_PARCIALSALDO - ((C_ORCAMENTO.VRORCAMENTO + R_DESPDIVERSA)*(-1));
               V_RESULTADOSALDO := V_RESULTADOSALDO - ((C_ORCAMENTO.VRORCAMENTO + R_DESPDIVERSA)*(-1));

               V_PARCIALACUM := V_PARCIALACUM - (O_DESPDIVERSA_ACUM + R_DESPDIVERSA_ACUM)*(-1);
               V_RESULTADOACUM := V_RESULTADOACUM - (O_DESPDIVERSA_ACUM + R_DESPDIVERSA_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'DESPENTRADA' THEN
               R_DESPENTRADA := 0;
               R_DESPENTRADA_ACUM := 0;

               FOR C_FIL IN (SELECT CDLISTA CDFILIAL
                               FROM LISTA
                              WHERE NRLISTA = P_LFILIAL) LOOP

                  RESULTADO_DESPENTRADA(C_FIL.CDFILIAL, V_DATAINIORCA, V_DATAFINORCA, V_DTINIORCAPERIODO, 
                                        NULL, NULL, R_DESPENTRADA, R_DESPENTRADA_ACUM);
               END LOOP;

               OUT_RECORD.NRORDEM         := 7;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'DESPENTRADA';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_DESPENTRADA;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_DESPENTRADA / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_DESPENTRADA / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO + R_DESPENTRADA;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_DESPENTRADA) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_DESPENTRADA) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_DESPENTRADA_ACUM + R_DESPENTRADA_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_PARCIAL := V_PARCIAL - C_ORCAMENTO.VRORCAMENTO;
               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_PARCIALREAL := V_PARCIALREAL + R_DESPENTRADA;
               V_RESULTADOREAL := V_RESULTADOREAL + R_DESPENTRADA;

               V_PARCIALSALDO := V_PARCIALSALDO - C_ORCAMENTO.VRORCAMENTO + R_DESPENTRADA;
               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO + R_DESPENTRADA;

               V_PARCIALACUM := V_PARCIALACUM - (O_DESPENTRADA_ACUM + R_DESPENTRADA_ACUM);
               V_RESULTADOACUM := V_RESULTADOACUM - (O_DESPENTRADA_ACUM + R_DESPENTRADA_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'TAXAADM' THEN
               OUT_RECORD.NRORDEM         := 8;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'TAXAADM';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_TAXAADM;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_TAXAADM / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_TAXAADM / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO + R_TAXAADM;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_TAXAADM) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_TAXAADM) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_TAXAADM_ACUM + R_TAXAADM_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_PARCIAL := V_PARCIAL - C_ORCAMENTO.VRORCAMENTO;
               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_PARCIALREAL := V_PARCIALREAL + R_TAXAADM;
               V_RESULTADOREAL := V_RESULTADOREAL + R_TAXAADM;

               V_PARCIALSALDO := V_PARCIALSALDO - C_ORCAMENTO.VRORCAMENTO + R_TAXAADM;
               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO + R_TAXAADM;

               V_PARCIALACUM := V_PARCIALACUM - (O_TAXAADM_ACUM + R_TAXAADM_ACUM);
               V_RESULTADOACUM := V_RESULTADOACUM - (O_TAXAADM_ACUM + R_TAXAADM_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'PARCIAL' THEN
               OUT_RECORD.NRORDEM         := 9;
               OUT_RECORD.NRRESUMO_GOP    := 4;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(=)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'PARCIAL';
               OUT_RECORD.VRORCADO        := V_PARCIAL;
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_PARCIAL / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_PARCIAL / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRREALIZADO     := V_PARCIALREAL;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN V_PARCIALREAL / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN V_PARCIALREAL / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := V_PARCIAL + V_PARCIALREAL;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_PARCIALSALDO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_PARCIALSALDO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := V_PARCIALACUM;
               OUT_RECORD.NRORG := V_NRORG;

               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'INVESTIMENTO' THEN
               OUT_RECORD.NRORDEM         := 10;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'INVESTIMENTO';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_INVESTIMENTO;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_INVESTIMENTO / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_INVESTIMENTO / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO + R_INVESTIMENTO;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_INVESTIMENTO) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_INVESTIMENTO) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_INVESTIMENTO_ACUM - R_INVESTIMENTO_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_RESULTADOREAL := V_RESULTADOREAL + R_INVESTIMENTO;

               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO + R_INVESTIMENTO;

               V_RESULTADOACUM := V_RESULTADOACUM - O_INVESTIMENTO_ACUM + R_INVESTIMENTO_ACUM;
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'DEPRECIACAO' THEN
               OUT_RECORD.NRORDEM         := 11;
               OUT_RECORD.NRRESUMO_GOP    := V_NRRESUMO_ROP;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(-)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'DEPRECIACAO';
               OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO*(-1);
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN C_ORCAMENTO.VRORCAMENTO / V_LIQUIDO ELSE 0 END
                                             END*(-1);
               OUT_RECORD.VRREALIZADO     := R_DEPRECIACAO;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN R_DEPRECIACAO / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN R_DEPRECIACAO / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO + R_DEPRECIACAO;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_DEPRECIACAO) / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN (C_ORCAMENTO.VRORCAMENTO + R_DEPRECIACAO) / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := O_DEPRECIACAO_ACUM + R_DEPRECIACAO_ACUM;
               OUT_RECORD.NRORG := V_NRORG;

               V_RESULTADO := V_RESULTADO - C_ORCAMENTO.VRORCAMENTO;

               V_RESULTADOREAL := V_RESULTADOREAL + R_DEPRECIACAO;

               V_RESULTADOSALDO := V_RESULTADOSALDO - C_ORCAMENTO.VRORCAMENTO + R_DEPRECIACAO;

               V_RESULTADOACUM := V_RESULTADOACUM - (O_DEPRECIACAO_ACUM + R_DEPRECIACAO_ACUM);
               PIPE ROW (OUT_RECORD);
            END IF;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'RESULTADO' THEN
               OUT_RECORD.NRORDEM         := 12;
               OUT_RECORD.NRRESUMO_GOP    := 5;
               OUT_RECORD.DSDESCRICAO     := V_DSDESCRICAO;
               OUT_RECORD.NRTOPICO        := '(=)';
               OUT_RECORD.DTORCAMENTO     := V_DTORCAMENTO;
               OUT_RECORD.DSDESCRICAOTOP  := 'RESULTADO';
               OUT_RECORD.VRORCADO        := V_RESULTADO;
               OUT_RECORD.VRPERORCADO     := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_RESULTADO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_RESULTADO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRREALIZADO     := V_RESULTADOREAL;
               OUT_RECORD.VRPERREALIZADO  := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN R_FATURAMENTO <> 0 THEN V_RESULTADOREAL / R_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDOREAL <> 0 THEN V_RESULTADOREAL / V_LIQUIDOREAL ELSE 0 END
                                             END;
               OUT_RECORD.VRSALDO         := V_RESULTADO + V_RESULTADOREAL;
               OUT_RECORD.VRPERSALDO      := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                                  THEN CASE WHEN V_FATURAMENTO <> 0 THEN V_RESULTADOSALDO / V_FATURAMENTO ELSE 0 END
                                                  ELSE CASE WHEN V_LIQUIDO <> 0 THEN V_RESULTADOSALDO / V_LIQUIDO ELSE 0 END
                                             END;
               OUT_RECORD.VRACUMULADO     := V_RESULTADOACUM;
               OUT_RECORD.NRORG := V_NRORG;

               PIPE ROW (OUT_RECORD);
            END IF;
         END LOOP;
      ELSE
         FOR C_ORCAMENTO IN (SELECT O.CDFILIAL, M.DTORCAMENTO, NVL(SUM(M.VRORCAMENTO),0) VRORCAMENTO,
                                    I.IDTIPOORCAOP, F.NMFILIAL
                               FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                           AND I.IDTIPOORCAOP IN ('CONSUMO','DESPDIVERSA','DESPENTRADA')
                                                   INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                                                   INNER JOIN LISTA L ON L.CDLISTA = O.CDFILIAL
                                                   INNER JOIN FILIAL F ON F.CDFILIAL = O.CDFILIAL
                              WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
                                AND O.IDPERIODOORCA = P_IDPERIODOORCA
                                AND O.NRPERIODOORCA = P_NRPERIODOORCA
                                AND L.NRLISTA = P_LFILIAL
                              GROUP BY O.CDFILIAL, M.DTORCAMENTO, I.IDTIPOORCAOP, F.NMFILIAL
                              ORDER BY O.CDFILIAL, M.DTORCAMENTO) LOOP

            R_CONSUMO := 0;
            R_CONSUMO_ACUM := 0;
            R_DESPDIVERSA := 0;
            R_DESPDIVERSA_ACUM := 0;
            R_DESPENTRADA := 0;
            R_DESPENTRADA_ACUM := 0;

            IF C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN
               RESULTADO_CONSUMO(C_ORCAMENTO.CDFILIAL, C_ORCAMENTO.DTORCAMENTO, ADD_MONTHS(C_ORCAMENTO.DTORCAMENTO,1),
                                 C_ORCAMENTO.DTORCAMENTO, NULL, R_CONSUMO, R_CONSUMO_ACUM);
            ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'DESPDIVERSA' THEN
               RESULTADO_DESPDIVERSA(C_ORCAMENTO.CDFILIAL, C_ORCAMENTO.DTORCAMENTO, ADD_MONTHS(C_ORCAMENTO.DTORCAMENTO,1),
                                     C_ORCAMENTO.DTORCAMENTO, NULL, NULL, R_DESPDIVERSA, R_DESPDIVERSA_ACUM);
            ELSE
               RESULTADO_DESPENTRADA(C_ORCAMENTO.CDFILIAL, C_ORCAMENTO.DTORCAMENTO, ADD_MONTHS(C_ORCAMENTO.DTORCAMENTO,1),
                                     C_ORCAMENTO.DTORCAMENTO, NULL, NULL, R_DESPENTRADA, R_DESPENTRADA_ACUM);
            END IF;

            OUT_RECORD.NRORDEM         := 0;
            OUT_RECORD.NRRESUMO_GOP    := 0;
            OUT_RECORD.DSDESCRICAO     := C_ORCAMENTO.CDFILIAL || ' - ' || C_ORCAMENTO.NMFILIAL;
            OUT_RECORD.NRTOPICO        := '(-)';
            OUT_RECORD.DTORCAMENTO     := C_ORCAMENTO.DTORCAMENTO;
            OUT_RECORD.DSDESCRICAOTOP  := C_ORCAMENTO.IDTIPOORCAOP;
            OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
            OUT_RECORD.VRPERORCADO     := 0;
            OUT_RECORD.VRREALIZADO     := NVL(R_CONSUMO,0) + NVL(R_DESPDIVERSA,0) + NVL(R_DESPENTRADA,0);
            OUT_RECORD.VRPERREALIZADO  := 0;
            OUT_RECORD.VRSALDO         := 0;
            OUT_RECORD.VRPERSALDO      := 0;
            OUT_RECORD.VRACUMULADO     := CASE WHEN C_ORCAMENTO.VRORCAMENTO = 0
                                               THEN 0
                                               ELSE CASE WHEN (NVL(R_CONSUMO,0) + NVL(R_DESPDIVERSA,0) + NVL(R_DESPENTRADA,0)) = 0
                                                         THEN 0
                                                         ELSE ((C_ORCAMENTO.VRORCAMENTO - (NVL(R_CONSUMO,0) + NVL(R_DESPDIVERSA,0)
                                                              + NVL(R_DESPENTRADA,0))) * 100) / C_ORCAMENTO.VRORCAMENTO
                                                    END
                                          END;
            OUT_RECORD.NRORG := V_NRORG;

            PIPE ROW (OUT_RECORD);
         END LOOP;
      END IF;
   ELSIF P_IDMODELO = 'D' THEN
      V_AUX := 0;
      V_NRORDEM := 0;
      V_IDSTATUS := 'PENDENTE';

      SELECT MAX(CDFILIAL), TO_DATE(TO_CHAR(MAX(P.DTINIPERIORCA),'DD/MM')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'),
             TO_DATE(TO_CHAR(MAX(P.DTINIPERIORCA),'DD')||'/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'),
             ADD_MONTHS(TO_DATE(TO_CHAR(MAX(P.DTINIPERIORCA),'DD')||'/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'),1)-1,
             TO_DATE('01/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP, 'DD/MM/YYYY')
        INTO V_CDFILIAL, V_DTINIORCAPERIODO,
             V_DATAINIORCA,
             V_DATAFINORCA,
             V_DTORCAMENTO
        FROM PERIODOORCAGOP P LEFT JOIN LISTA L ON L.NRLISTA = P_LFILIAL
       WHERE P.IDPERIODOORCA = P_IDPERIODOORCA
         AND P.NRPERIODO = P_NRPERIODOORCA
         AND P.CDFILIAL = NVL((SELECT MAX(X.CDFILIAL) FROM PERIODOORCAGOP X WHERE X.CDFILIAL = L.CDLISTA),'P')
         AND LAST_DAY(TO_DATE('01/'||LPAD(P_MES,2,'0')||'/'||P_NRANOORCAGOP, 'DD/MM/YYYY'))
             BETWEEN TO_DATE(TO_CHAR(P.DTINIPERIORCA,'DD/MM')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY')
                 AND ADD_MONTHS(TO_DATE(TO_CHAR(P.DTINIPERIORCA,'DD/MM')||'/'||P_NRANOORCAGOP,'DD/MM/YYYY'), MONTHS_BETWEEN(P.DTFIMPERIORCA,P.DTINIPERIORCA))-1;

      FOR C_ORCAMENTO IN (SELECT I.IDTIPOORCAOP, M.DTORCAMENTO, NVL(SUM(M.VRORCAMENTO),0) VRORCAMENTO, O.NRORG,
                                 I.CDIMPOSTO, P.CDARVPROD, D.CDFILIALMO, D.CDDESPADMFAT, D.CDORCAMENTOMO,
                                 I.CDINVEST, P.CDPRODUTO, D.CDCONTCTBL,
                                 NVL(A.IDAPROVACAOGOP, NVL(MAX(C.IDSTATUS), 'PENDENTE')) IDSTATUS,
                                 I.CDDESPPREV
                            FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                                                INNER JOIN LISTA L ON L.CDLISTA = O.CDFILIAL
                                                LEFT  JOIN ITDETALORCAMESGOP D ON D.NRITORCAMESGOP = M.NRITORCAMESGOP
                                                                              AND I.IDTIPOORCAOP NOT IN ('FATURAMENTO')
                                                LEFT  JOIN PRODUTO P ON D.CDPRODUTO = P.CDPRODUTO
                                                LEFT  JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                          AND A.IDTIPOORCAOP = I.IDTIPOORCAOP
                                                LEFT  JOIN CONCPREORCAGOP C ON C.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                           AND C.CDFILIAL = O.CDFILIAL
                                                                           AND C.IDTIPOORCAOP = I.IDTIPOORCAOP
                           WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
                             AND O.IDPERIODOORCA = P_IDPERIODOORCA
                             AND O.NRPERIODOORCA = P_NRPERIODOORCA
                             AND L.NRLISTA = P_LFILIAL
                             AND TRUNC(M.DTORCAMENTO,'MM') = V_DTORCAMENTO
                             AND I.IDTIPOORCAOP IN ('FATURAMENTO', 'IMPOSTO', 'CONSUMO', 'MAOOBRA', 'DESPDIVERSA',
                                                    'DESPENTRADA', 'TAXAADM', 'INVESTIMENTO', 'DEPRECIACAO')
                           GROUP BY I.IDTIPOORCAOP, M.DTORCAMENTO, O.NRORG, I.CDIMPOSTO, P.CDARVPROD, D.CDFILIALMO, D.CDDESPADMFAT, D.CDORCAMENTOMO,
                                    I.CDINVEST, P.CDPRODUTO, D.CDCONTCTBL, A.IDAPROVACAOGOP, I.CDDESPPREV
                           ORDER BY I.IDTIPOORCAOP) LOOP

         V_NRORDEM := NULL;
         V_ACUMULADO := 0;
         V_REALIZADO := 0;
         V_AUXDESC := '';

         SELECT NVL(SUM(M.VRORCAMENTO),0) VRORCAMENTO
           INTO V_ACUMULADO
           FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                               INNER JOIN ITORCAMESGOP M ON M.NRITEMORCAOP = I.NRITEMORCAOP
                               LEFT  JOIN ITDETALORCAMESGOP D ON D.NRITORCAMESGOP = M.NRITORCAMESGOP
                                                             AND I.IDTIPOORCAOP NOT IN ('FATURAMENTO')
          WHERE O.NRANOORCAGOP = P_NRANOORCAGOP
            AND O.IDPERIODOORCA = P_IDPERIODOORCA
            AND O.NRPERIODOORCA = P_NRPERIODOORCA
            AND O.CDFILIAL = V_CDFILIAL
            AND TRUNC(M.DTORCAMENTO,'MM') <= C_ORCAMENTO.DTORCAMENTO
            AND I.IDTIPOORCAOP = C_ORCAMENTO.IDTIPOORCAOP
            AND (C_ORCAMENTO.IDTIPOORCAOP IN ('FATURAMENTO')
              OR (C_ORCAMENTO.IDTIPOORCAOP IN ('IMPOSTO') AND (I.CDIMPOSTO = C_ORCAMENTO.CDIMPOSTO OR I.CDIMPOSTO IS NULL))
              OR (C_ORCAMENTO.IDTIPOORCAOP IN ('CONSUMO') AND (D.CDPRODUTO = C_ORCAMENTO.CDPRODUTO OR D.CDPRODUTO IS NULL))
              OR (C_ORCAMENTO.IDTIPOORCAOP IN ('MAOOBRA') AND ((D.CDFILIALMO = C_ORCAMENTO.CDFILIALMO AND
                                                                D.CDDESPADMFAT = C_ORCAMENTO.CDDESPADMFAT AND
                                                                D.CDORCAMENTOMO = C_ORCAMENTO.CDORCAMENTOMO) OR D.CDDESPADMFAT IS NULL))
              OR (C_ORCAMENTO.IDTIPOORCAOP IN ('DESPDIVERSA') AND ((D.CDPRODUTO = C_ORCAMENTO.CDPRODUTO AND
                                                                    D.CDCONTCTBL = C_ORCAMENTO.CDCONTCTBL) OR (D.CDPRODUTO IS NULL AND D.CDCONTCTBL IS NULL)))
              OR (C_ORCAMENTO.IDTIPOORCAOP IN ('DESPENTRADA') AND (D.CDPRODUTO = C_ORCAMENTO.CDPRODUTO OR D.CDPRODUTO IS NULL))
              OR C_ORCAMENTO.IDTIPOORCAOP IN ('TAXAADM')
              OR (C_ORCAMENTO.IDTIPOORCAOP IN ('INVESTIMENTO') AND (I.CDINVEST = C_ORCAMENTO.CDINVEST OR I.CDINVEST IS NULL))
              OR C_ORCAMENTO.IDTIPOORCAOP IN ('DEPRECIACAO'));

         IF C_ORCAMENTO.IDTIPOORCAOP = 'FATURAMENTO' THEN
            SELECT NVL(SUM(D.VRFATBRUTO),0)
              INTO V_REALIZADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DATAINIORCA AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL;

            SELECT NVL(SUM(D.VRFATBRUTO),0) + V_ACUMULADO
              INTO V_ACUMULADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DTINIORCAPERIODO AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL;

            V_AUXDESC := NULL;
            V_NRORDEM := 0;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'IMPOSTO' THEN
            SELECT MAX(I.CDIMPOSTO || ' - ' || I.NMIMPOSTO)
              INTO V_AUXDESC
              FROM IMPOSTO I
             WHERE I.CDIMPOSTO = C_ORCAMENTO.CDIMPOSTO;

            SELECT NVL(SUM(D.VRIMPOSTO),0)
              INTO V_REALIZADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DATAINIORCA AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDIMPOSTO = C_ORCAMENTO.CDIMPOSTO OR C_ORCAMENTO.CDIMPOSTO IS NULL);

            SELECT NVL(SUM(D.VRIMPOSTO),0) + V_ACUMULADO
              INTO V_ACUMULADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DTINIORCAPERIODO AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDIMPOSTO = C_ORCAMENTO.CDIMPOSTO OR C_ORCAMENTO.CDIMPOSTO IS NULL);     

            V_NRORDEM := 1;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN
            SELECT MAX(P.CDARVPROD || ' - ' || P.NMPRODUTO)
              INTO V_AUXDESC
              FROM PRODUTO P
             WHERE P.CDPRODUTO = C_ORCAMENTO.CDPRODUTO;

            RESULTADO_CONSUMO(V_CDFILIAL, V_DATAINIORCA, V_DATAFINORCA,
                              V_DTINIORCAPERIODO, C_ORCAMENTO.CDARVPROD, V_REALIZADO, V_ACUMULADO);

            V_NRORDEM := 2;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'MAOOBRA' THEN
            --SELECT MAX(P.CDARVPROD || ' - ' || P.NMPRODUTO)

            /*SELECT NVL(SUM(D.VRFATBRUTO),0), MAX(D.CDARVPROD || ' - ' || D.NMPRODUTO)
              INTO V_REALIZADO, V_AUXDESC
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DATAINIORCA AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDARVPROD = C_ORCAMENTO.CDARVPROD OR C_ORCAMENTO.CDARVPROD IS NULL);

            SELECT NVL(SUM(D.VRFATBRUTO),0) + V_ACUMULADO, MAX(D.CDARVPROD || ' - ' || D.NMPRODUTO)
              INTO V_ACUMULADO, V_AUXDESC
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DTINIORCAPERIODO AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDARVPROD = C_ORCAMENTO.CDARVPROD OR C_ORCAMENTO.CDARVPROD IS NULL); */

            V_NRORDEM := 3;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'DESPDIVERSA' THEN
            SELECT MAX(P.CDARVPROD || ' - ' || P.NMPRODUTO)
              INTO V_AUXDESC
              FROM PRODUTO P
             WHERE P.CDPRODUTO = C_ORCAMENTO.CDPRODUTO;

            IF V_AUXDESC IS NULL THEN
               SELECT MAX(C.CDCONTCTBL || ' - ' || C.NMCONTCTBL)
                 INTO V_AUXDESC
                 FROM CONTCTBL C
                WHERE C.CDCONTCTBL = C_ORCAMENTO.CDCONTCTBL;
            END IF;

            RESULTADO_DESPDIVERSA(V_CDFILIAL, V_DATAINIORCA, V_DATAFINORCA, V_DTINIORCAPERIODO, 
                                  C_ORCAMENTO.CDDESPPREV, C_ORCAMENTO.CDARVPROD, V_REALIZADO, V_ACUMULADO);

            V_NRORDEM := 4;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'DESPENTRADA' THEN
            SELECT MAX(P.CDARVPROD || ' - ' || P.NMPRODUTO)
              INTO V_AUXDESC
              FROM PRODUTO P
             WHERE P.CDPRODUTO = C_ORCAMENTO.CDPRODUTO;

            RESULTADO_DESPENTRADA(V_CDFILIAL, V_DATAINIORCA, V_DATAFINORCA, V_DTINIORCAPERIODO, 
                                  C_ORCAMENTO.CDDESPPREV, C_ORCAMENTO.CDARVPROD, V_REALIZADO, V_ACUMULADO);

            V_NRORDEM := 5;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'TAXAADM' THEN
            SELECT NVL(SUM(D.VRTAXAADM),0)
              INTO V_REALIZADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DATAINIORCA AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL;

            SELECT NVL(SUM(D.VRTAXAADM),0) + V_ACUMULADO
              INTO V_ACUMULADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DTINIORCAPERIODO AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL;

            V_NRORDEM := 6;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'INVESTIMENTO' THEN
            SELECT MAX(I.CDINVEST || ' - ' || I.NMINVEST)
              INTO V_AUXDESC
              FROM INVESTIMENTOS I
             WHERE I.CDINVEST = C_ORCAMENTO.CDINVEST;

            SELECT NVL(SUM(D.VRINVESTIMENTO),0)
              INTO V_REALIZADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DATAINIORCA AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDINVESTIMENTO = C_ORCAMENTO.CDINVEST OR C_ORCAMENTO.CDINVEST IS NULL);

            SELECT NVL(SUM(D.VRINVESTIMENTO),0) + V_ACUMULADO
              INTO V_ACUMULADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DTINIORCAPERIODO AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDINVESTIMENTO = C_ORCAMENTO.CDINVEST OR C_ORCAMENTO.CDINVEST IS NULL);

            V_NRORDEM := 7;
         ELSIF C_ORCAMENTO.IDTIPOORCAOP = 'DEPRECIACAO' THEN
            SELECT NVL(SUM(D.VRDEPRECIACAO),0)
              INTO V_REALIZADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DATAINIORCA AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDARVPROD = C_ORCAMENTO.CDARVPROD OR C_ORCAMENTO.CDARVPROD IS NULL);

            SELECT NVL(SUM(D.VRDEPRECIACAO),0) + V_ACUMULADO
              INTO V_ACUMULADO
              FROM DM_RESULT_OPERACIONAL D
             WHERE D.DTRESUMO BETWEEN V_DTINIORCAPERIODO AND V_DATAFINORCA
               AND D.CDFILIAL = V_CDFILIAL
               AND (D.CDARVPROD = C_ORCAMENTO.CDARVPROD OR C_ORCAMENTO.CDARVPROD IS NULL);

            V_NRORDEM := 8;
         END IF;

         OUT_RECORD.NRORDEM         := V_NRORDEM;
         OUT_RECORD.NRRESUMO_GOP    := 0;
         OUT_RECORD.DSDESCRICAO     := V_AUXDESC;
         OUT_RECORD.NRTOPICO        := NULL;
         OUT_RECORD.DTORCAMENTO     := NULL;
         OUT_RECORD.DSDESCRICAOTOP  := C_ORCAMENTO.IDTIPOORCAOP;
         OUT_RECORD.VRORCADO        := C_ORCAMENTO.VRORCAMENTO;
         OUT_RECORD.VRPERORCADO     := NULL;
         OUT_RECORD.VRREALIZADO     := V_REALIZADO;
         OUT_RECORD.VRPERREALIZADO  := NULL;
         OUT_RECORD.VRSALDO         := C_ORCAMENTO.VRORCAMENTO - V_REALIZADO;
         OUT_RECORD.VRPERSALDO      := CASE WHEN C_ORCAMENTO.VRORCAMENTO <> 0
                                            THEN (C_ORCAMENTO.VRORCAMENTO - V_REALIZADO)/C_ORCAMENTO.VRORCAMENTO
                                            ELSE 0
                                       END;
         OUT_RECORD.VRACUMULADO     := V_ACUMULADO;
         OUT_RECORD.IDSTATUS        := C_ORCAMENTO.IDSTATUS;
         OUT_RECORD.NRORG := V_NRORG;

         PIPE ROW (OUT_RECORD);
      END LOOP;
   END IF;
END;
/