/* 

SELECT D.CDUNIDADE, D.NMUNIDADE, D.NRMES, TO_CHAR(TO_DATE(D.NRMES,'MM'),'MONTH') MES, D.CDTIPOITEM, D.DSTIPOITEM,
       D.CDEMPRESA, D.DSEMPRESA, D.CDREGIONAL, D.DSREGIONAL, D.CDSEGMENTO, D.DSSEGMENTO, D.CDSUPERVISOR,
       D.DSSUPERVISOR, NVL(D.VRREAL, 0) VRREAL, NVL(D.VRPERCREAL,0) VRPERCREAL, NVL(D.VRORCADO,0) VRORCADO,
       NVL(D.VRPERCORCA, 0) VRPERCORCA, D.NRORG
  FROM TABLE(ANALISE_DRO(NULL, TO_DATE('01/07/2021','DD/MM/YYYY'),TO_DATE('30/09/2021','DD/MM/YYYY'), NULL)) D
 ORDER BY D.CDUNIDADE, D.NRANALISE_DRO;

- O PRIMEIRO PARAMETRO E REFERENTE A UNIDADE, SE ESTIVER NULO VAI RETORNAR DADOS DE TODAS UNIDADES QUE TENHAM O DRO APURADO.
- O SEGUNDO E TERCEIRO PARAMETROS SAO REFERENTES A DATA INICIAL E DATA FINAL, SERA RETORNADO A APURACAO DO PERIODO QUE FOR INFORMADO.
- O ULTIMO PARAMETRO E REFERENTE AO ITEM, CASO NAO SEJA INFORMADO SERA RETORNADA TODOS OS ITENS DO RESUMO DO DRO.

*/

DROP FUNCTION ANALISE_DRO
/

DROP TYPE ANALISE_DRO_TABLE
/

DROP TYPE ANALISE_DRO_TYPE
/

CREATE TYPE ANALISE_DRO_TYPE AS
OBJECT (NRANALISE_DRO       NUMBER,
        CDUNIDADE           VARCHAR2(04),
        NMUNIDADE           VARCHAR2(30),
        NRMES               VARCHAR2(02),
        NRANO               VARCHAR2(04),
        CDTIPOITEM          VARCHAR2(30),
        DSTIPOITEM          VARCHAR2(50),
        CDGRUPOUNI          VARCHAR2(10),
        DSGRUPOUNI          VARCHAR2(40),
        CDEMPRESA           VARCHAR2(02),
        DSEMPRESA           VARCHAR2(40),
        CDREGIONAL          VARCHAR2(03),
        DSREGIONAL          VARCHAR2(30),
        CDSEGMENTO          VARCHAR2(05),
        DSSEGMENTO          VARCHAR2(40),
        CDSUPERVISOR        VARCHAR2(12),
        DSSUPERVISOR        VARCHAR2(40),
        VRREAL              FLOAT(126),
        VRPERCREAL          FLOAT(126),
        VRORCADO            FLOAT(126),
        VRPERCORCA          FLOAT(126),
        NRORG               NUMBER)
/

CREATE TYPE ANALISE_DRO_TABLE AS
TABLE OF ANALISE_DRO_TYPE
/

CREATE OR REPLACE FUNCTION ANALISE_DRO
 (P_CDFILIAL     IN VARCHAR2,
  P_DATAINI      IN DATE,
  P_DATAFIN      IN DATE,
  P_CDTIPOITEM   IN VARCHAR2 DEFAULT NULL) RETURN ANALISE_DRO_TABLE PIPELINED
IS
  V_IDCALCPERCENTFAT      VARCHAR2(30);
  V_SEQUENCIAL            NUMBER;
  V_CDTIPOITEM            VARCHAR2(30);
  V_DSTIPOITEM            VARCHAR2(50);
  V_VRREAL                FLOAT(126);
  V_VRORCADO              FLOAT(126);

  OUT_RECORD ANALISE_DRO_TYPE := ANALISE_DRO_TYPE(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                                                  NULL);
BEGIN   
   FOR C_UNIDADE IN (SELECT F.CDFILIAL, F.NMFILIAL, O.CDOPERADOR CDSUPERVISOR, O.NMOPERADOR DSSUPERVISOR,
                            R.CDAREAGERE CDREGIONAL, R.NMAREAGERE DSREGIONAL, S.CDSEGMER CDSEGMENTO, S.DSSEGMER DSSEGMENTO,
                            E.CDEMPRESA, E.NMEMPRESA DSEMPRESA, F.NRORG
                       FROM FILIAL F LEFT  JOIN OPERADOR O ON O.CDOPERADOR = F.CDSUPERVISOR
                                     LEFT  JOIN AREAGERE R ON R.CDAREAGERE = F.CDAREAGERE
                                     LEFT  JOIN SEGMERCADO S ON S.CDSEGMER = F.CDSEGMER
                                     LEFT  JOIN EMPRESA E ON E.CDEMPRESA = F.CDEMPRESA
                      WHERE F.CDFILIAL = NVL(P_CDFILIAL,F.CDFILIAL)
                        AND EXISTS (SELECT 1
                                      FROM FILIALROP FR
                                     WHERE FR.CDFILIAL = F.CDFILIAL)) LOOP
                                     
      V_SEQUENCIAL := 0;

      SELECT NVL(MAX(P.IDCALCPERCENTFAT),'FATURAMENTO_BRUTO')
        INTO V_IDCALCPERCENTFAT
        FROM PARFILIALROP P
       WHERE P.CDFILIAL = TIPOPARAM_DRO(C_UNIDADE.CDFILIAL);
      
      FOR C_REGISTROS IN (SELECT SUM(D.VRFATBRUTO) VRFATBRUTO, NVL(SUM(D.VRFATBRUTOORCA), 0) VRFATBRUTOORC,
                                 SUM(D.VRFATUREFET) VRFATUREFET, NVL(SUM(D.VRFATUREFETORCA), 0) VRFATUREFETORC,
                                 SUM(D.VRFATURNF) VRFATURNF, NVL(SUM(D.VRFATURNFORCA), 0) VRFATURNFORC,
                                 SUM(D.VRFATURFOSBRUT) VRFATURFOSBRUT, NVL(SUM(D.VRFATURFOSBRUTORCA), 0) VRFATURFOSBRUTORC,
                                 SUM(D.VRFATURDIV) VRFATURDIV, NVL(SUM(D.VRFATURDIVORCA), 0) VRFATURDIVORC,
                                 SUM(D.VRFATRECEXTRA) VRFATRECEXTRA, NVL(SUM(D.VRFATRECEXTRAORCA), 0) VRFATRECEXTRAORC,
                                 SUM(D.VRDEDURECEITA) VRDEDURECEITA, NVL(SUM(D.VRDEDURECEITAORCA), 0) VRDEDURECEITAORC,
                                 SUM(D.VRIMPOSTO) VRIMPOSTO, NVL(SUM(D.VRIMPOSTOORCA), 0) VRIMPOSTOORC,
                                 SUM(D.VRIMPOFOS) VRIMPOSFOS, NVL(SUM(D.VRIMPOFOSORCA), 0) VRIMPOSFOSORC,
                                 SUM(D.VRCREDIMPOSTO) VRCREDIMPOSTO, NVL(SUM(D.VRCREDIMPOSTOORCA), 0) VRCREDIMPOSTOORC,
                                 SUM(D.VRDEVOLUESTOR) VRDEVOLUESTOR, NVL(SUM(D.VRDEVOLUESTORORCA), 0) VRDEVOLUESTORORC,
                                 SUM(D.VRDEDUSOBVENDA) VRDEDUSOBVENDA, NVL(SUM(D.VRDEDUSOBVENDAORCA), 0) VRDEDUSOBVENDAORC,
                                 SUM(D.VRENCARGO) VRENCARGO, NVL(SUM(D.VRENCARGOORCA), 0) VRENCARGOORC,
                                 SUM(D.VRFATLIQUIDO) VRFATLIQUIDO, NVL(SUM(D.VRFATLIQUIDOORCA), 0) VRFATLIQUIDOORC,
                                 SUM(D.VRTAXAADM) VRTAXAADM, NVL(SUM(D.VRTAXAADMORCA), 0) VRTAXAADMORC,
                                 SUM(D.VRMARGEMCONTR) VRMARGEMCONTR, NVL(SUM(D.VRMARGEMCONTRORCA), 0) VRMARGEMCONTRORC,
                                 SUM(D.VRDESPESATOT) VRDESPESATOT, NVL(SUM(D.VRDESPESATOTORCA), 0) VRDESPESATOTORC,
                                 SUM(D.VRDESPESA) VRDESPESA, NVL(SUM(D.VRDESPESAORCA), 0) VRDESPESAORC,
                                 SUM(D.VRAJUSTE) VRAJUSTE, NVL(SUM(D.VRAJUSTEORCA), 0) VRAJUSTEORC,
                                 SUM(D.VRDEBITOBCO)+SUM(D.VRCREDITOBCO) VRBCO, NVL(SUM(D.VRDEBITOBCOORCA), 0) + NVL(SUM(D.VRCREDITOBCOORCA), 0) VRBCOORC,
                                 SUM(D.VRMAOOBRA) VRMAOOBRA, SUM(D.VRMAOOBRAPROJ), NVL(SUM(D.VRMAOOBRAORCA), 0) VRMAOOBRAORC,
                                 SUM(D.VRRESULTPARC) VRRESULTPARC, NVL(SUM(D.VRRESULTPARCORCA), 0) VRRESULTPARCORC,
                                 SUM(D.VRDEPRECIACAO) VRDEPRECIACAO, NVL(SUM(D.VRDEPRECIACAOORCA), 0) VRDEPRECIACAOORC,
                                 SUM(D.VRINVESTIMENTO) VRINVESTIMENTO, NVL(SUM(D.VRINVESTIMENTOORCA), 0) VRINVESTIMENTOORC,
                                 SUM(D.VRRESULTFINAL) VRRESULTFINAL, NVL(SUM(D.VRRESULTFINALORCA), 0) VRRESULTFINALORC,
                                 SUM(D.VRCONSUMO) VRCONSUMO, NVL(SUM(D.VRCONSUMOORCA), 0) VRCONSUMOORC,
                                 TO_CHAR(D.DTRESUMO,'MM') MES,
                                 TO_CHAR(D.DTRESUMO,'YYYY') ANO
                            FROM DM_RESULT_OPERACIONAL D
                           WHERE D.DTRESUMO BETWEEN P_DATAINI AND P_DATAFIN
                             AND D.CDFILIAL = C_UNIDADE.CDFILIAL
                           GROUP BY TO_CHAR(D.DTRESUMO,'MM'), TO_CHAR(D.DTRESUMO,'YYYY')) LOOP
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_BRUTO') = 'FATURAMENTO_BRUTO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_BRUTO';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento Bruto';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATBRUTO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN 1
                                             ELSE NULL
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATBRUTOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN 1
                                             ELSE NULL
                                        END;
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_EFETIVO') = 'FATURAMENTO_EFETIVO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_EFETIVO';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento Efetivos';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATUREFET;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRFATUREFET / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRFATUREFET / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATUREFETORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRFATUREFETORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRFATUREFETORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_NF') = 'FATURAMENTO_NF' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_NF';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento NF';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATURNF;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRFATURNF / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRFATURNF / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATURNFORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRFATURNFORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRFATURNFORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_FORSALE') = 'FATURAMENTO_FORSALE' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_FORSALE';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento ForSale';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATURFOSBRUT;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRFATURFOSBRUT / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRFATURFOSBRUT / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATURFOSBRUTORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRFATURFOSBRUTORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRFATURFOSBRUTORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_DIVERSO') = 'FATURAMENTO_DIVERSO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_DIVERSO';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento Diversos';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATURDIV;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRFATURDIV / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRFATURDIV / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATURDIVORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRFATURDIVORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRFATURDIVORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_EXTRA') = 'FATURAMENTO_EXTRA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_EXTRA';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento Extra';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATRECEXTRA;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRFATRECEXTRA / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRFATRECEXTRA / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATRECEXTRAORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRFATRECEXTRAORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRFATRECEXTRAORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'DEDUCAO_RECEITA') = 'DEDUCAO_RECEITA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'DEDUCAO_RECEITA';
            OUT_RECORD.DSTIPOITEM    := 'Deducoes';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRDEDURECEITA;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRDEDURECEITA / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRDEDURECEITA / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRDEDURECEITAORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRDEDURECEITAORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRDEDURECEITAORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;                                        
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'IMPOSTO') = 'IMPOSTO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'IMPOSTO';
            OUT_RECORD.DSTIPOITEM    := 'Imposto';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRIMPOSTO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRIMPOSTO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRIMPOSTO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRIMPOSTOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRIMPOSTOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRIMPOSTOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;
                                        
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'IMPOSTO_FORSALE') = 'IMPOSTO_FORSALE' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'IMPOSTO_FORSALE';
            OUT_RECORD.DSTIPOITEM    := 'Imposto ForSale';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRIMPOSFOS;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRIMPOSFOS / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRIMPOSFOS / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRIMPOSFOSORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRIMPOSFOSORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRIMPOSFOSORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'CREDITO_IMPOSTO') = 'CREDITO_IMPOSTO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'CREDITO_IMPOSTO';
            OUT_RECORD.DSTIPOITEM    := 'Cr�dito de Imposto';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRCREDIMPOSTO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRCREDIMPOSTO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRCREDIMPOSTO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRCREDIMPOSTOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRCREDIMPOSTOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRCREDIMPOSTOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'DEVOLUCAO_ESTORNO') = 'DEVOLUCAO_ESTORNO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'DEVOLUCAO_ESTORNO';
            OUT_RECORD.DSTIPOITEM    := 'Devolu��es/Estornos';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRDEVOLUESTOR;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRDEVOLUESTOR / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRDEVOLUESTOR / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRDEVOLUESTORORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRDEVOLUESTORORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRDEVOLUESTORORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'DESCONTO_VENDA') = 'DESCONTO_VENDA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'DESCONTO_VENDA';
            OUT_RECORD.DSTIPOITEM    := 'Descontos sobre Vendas';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRDEDUSOBVENDA;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRDEDUSOBVENDA / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRDEDUSOBVENDA / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRDEDUSOBVENDAORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRDEDUSOBVENDAORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRDEDUSOBVENDAORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'ENCARGO') = 'ENCARGO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
            
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'ENCARGO';
            OUT_RECORD.DSTIPOITEM    := 'Encargos';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRENCARGO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRENCARGO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRENCARGO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRENCARGOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRENCARGOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRENCARGOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'FATURAMENTO_LIQUIDO') = 'FATURAMENTO_LIQUIDO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
            
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'FATURAMENTO_LIQUIDO';
            OUT_RECORD.DSTIPOITEM    := 'Faturamento L�quido';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRFATLIQUIDO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRFATLIQUIDO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRFATLIQUIDO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRFATLIQUIDOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRFATLIQUIDOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRFATLIQUIDOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'TAXA_ADMINISTRATIVA') = 'TAXA_ADMINISTRATIVA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'TAXA_ADMINISTRATIVA';
            OUT_RECORD.DSTIPOITEM    := 'Taxa Administrativa';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRTAXAADM;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRTAXAADM / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRTAXAADM / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRTAXAADMORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRTAXAADMORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRTAXAADMORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'CONSUMO') = 'CONSUMO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'CONSUMO';
            OUT_RECORD.DSTIPOITEM    := 'Consumo';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRCONSUMO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRCONSUMO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRCONSUMO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRCONSUMOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRCONSUMOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRCONSUMOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'MARGEM_CONTRIBUICAO') = 'MARGEM_CONTRIBUICAO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'MARGEM_CONTRIBUICAO';
            OUT_RECORD.DSTIPOITEM    := 'Margem de Contribui��o';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRMARGEMCONTR;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRMARGEMCONTR / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRMARGEMCONTR / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRMARGEMCONTRORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRMARGEMCONTRORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRMARGEMCONTRORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'TOTAL_DESPESA') = 'TOTAL_DESPESA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'TOTAL_DESPESA';
            OUT_RECORD.DSTIPOITEM    := 'Total de Despesas';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRDESPESATOT;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRDESPESATOT / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRDESPESATOT / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRDESPESATOTORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRDESPESATOTORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRDESPESATOTORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'DESPESA') = 'DESPESA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'DESPESA';
            OUT_RECORD.DSTIPOITEM    := 'Despesas';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRDESPESA;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRDESPESA / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRDESPESA / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRDESPESAORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRDESPESAORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRDESPESAORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'AJUSTE') = 'AJUSTE' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'AJUSTE';
            OUT_RECORD.DSTIPOITEM    := 'Ajustes PAG/REC';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRAJUSTE;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRAJUSTE / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRAJUSTE / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRAJUSTEORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRAJUSTEORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRAJUSTEORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'AJUSTE_BCO') = 'AJUSTE_BCO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'AJUSTE_BCO';
            OUT_RECORD.DSTIPOITEM    := 'Ajustes Constrole Banc�rio';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRBCO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRBCO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRBCO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRBCOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRBCOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRBCOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'MAO_OBRA') = 'MAO_OBRA' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'MAO_OBRA';
            OUT_RECORD.DSTIPOITEM    := 'M�o de Obra';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRMAOOBRA;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRMAOOBRA / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRMAOOBRA / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRMAOOBRAORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRMAOOBRAORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRMAOOBRAORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'RESULTADO_PARCIAL') = 'RESULTADO_PARCIAL' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'RESULTADO_PARCIAL';
            OUT_RECORD.DSTIPOITEM    := 'Resultado Parcial';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRRESULTPARC;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRRESULTPARC / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRRESULTPARC / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRRESULTPARCORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRRESULTPARCORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRRESULTPARCORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'DEPRECIACAO') = 'DEPRECIACAO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'DEPRECIACAO';
            OUT_RECORD.DSTIPOITEM    := 'Deprecia��o';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRDEPRECIACAO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRDEPRECIACAO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRDEPRECIACAO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRDEPRECIACAOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRDEPRECIACAOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRDEPRECIACAOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'INVESTIMENTO') = 'INVESTIMENTO' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'INVESTIMENTO';
            OUT_RECORD.DSTIPOITEM    := 'Investimento';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRINVESTIMENTO;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRINVESTIMENTO / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRINVESTIMENTO / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRINVESTIMENTOORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRINVESTIMENTOORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRINVESTIMENTOORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
         
         IF NVL(P_CDTIPOITEM,'RESULTADO_FINAL') = 'RESULTADO_FINAL' THEN
            V_SEQUENCIAL := V_SEQUENCIAL+1;
         
            OUT_RECORD.NRANALISE_DRO := V_SEQUENCIAL;
            OUT_RECORD.CDTIPOITEM    := 'RESULTADO_FINAL';
            OUT_RECORD.DSTIPOITEM    := 'Resultado Final';
            OUT_RECORD.VRREAL        := C_REGISTROS.VRRESULTFINAL;
            OUT_RECORD.VRPERCREAL    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTO <> 0
                                                       THEN C_REGISTROS.VRRESULTFINAL / C_REGISTROS.VRFATBRUTO
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDO <> 0
                                                       THEN C_REGISTROS.VRRESULTFINAL / C_REGISTROS.VRFATLIQUIDO
                                                       ELSE 0
                                                  END
                                        END;
            OUT_RECORD.VRORCADO      := C_REGISTROS.VRRESULTFINALORC;
            OUT_RECORD.VRPERCORCA    := CASE WHEN V_IDCALCPERCENTFAT = 'FATURAMENTO_BRUTO'
                                             THEN CASE WHEN C_REGISTROS.VRFATBRUTOORC <> 0
                                                       THEN C_REGISTROS.VRRESULTFINALORC / C_REGISTROS.VRFATBRUTOORC
                                                       ELSE 0
                                                  END
                                             ELSE CASE WHEN C_REGISTROS.VRFATLIQUIDOORC <> 0
                                                       THEN C_REGISTROS.VRRESULTFINALORC / C_REGISTROS.VRFATLIQUIDOORC
                                                       ELSE 0
                                                  END
                                        END;   
            OUT_RECORD.CDUNIDADE     := C_UNIDADE.CDFILIAL;
            OUT_RECORD.NMUNIDADE     := C_UNIDADE.NMFILIAL;
            OUT_RECORD.NRMES         := C_REGISTROS.MES;
            OUT_RECORD.NRANO         := C_REGISTROS.ANO;
            OUT_RECORD.CDGRUPOUNI    := NULL;
            OUT_RECORD.DSGRUPOUNI    := NULL;
            OUT_RECORD.CDEMPRESA     := C_UNIDADE.CDEMPRESA;
            OUT_RECORD.DSEMPRESA     := C_UNIDADE.DSEMPRESA;
            OUT_RECORD.CDREGIONAL    := C_UNIDADE.CDREGIONAL;
            OUT_RECORD.DSREGIONAL    := C_UNIDADE.DSREGIONAL;
            OUT_RECORD.CDSEGMENTO    := C_UNIDADE.CDSEGMENTO;
            OUT_RECORD.DSSEGMENTO    := C_UNIDADE.DSSEGMENTO;
            OUT_RECORD.CDSUPERVISOR  := C_UNIDADE.CDSUPERVISOR;
            OUT_RECORD.DSSUPERVISOR  := C_UNIDADE.DSSUPERVISOR;
            OUT_RECORD.NRORG         := C_UNIDADE.NRORG;
            PIPE ROW (OUT_RECORD);
         END IF;
      END LOOP;
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('ANALISE_DRO','6.45.xxx'); END;
/
