create or replace PROCEDURE ETLRESUFOOD (P_DTINI  IN DATE,
                       P_DTFINA IN DATE)
IS
   V_COUNTER            NUMBER NOT NULL := 0;
   V_DTFIM              DATE;
   V_DTINI              DATE;
   V_DTINIANT           DATE;
   V_DATAFINAL          DATE;
   V_NRTIPOCUSTO1       NUMBER;
   V_NRTIPOCUSTO2       NUMBER;
   V_NRTIPOCUSTO3       NUMBER;
   V_NRTIPOCUSTOPLA     NUMBER;
   V_NRTIPOCUSTOREAL    NUMBER;
   V_VRCUSTPADR         FLOAT NOT NULL := 0;
   V_VRPRECVENDA        FLOAT NOT NULL := 0;
   V_ZERO               FLOAT := 0;
   V_CDSEQUENCIAL       VARCHAR2(20);
   V_CDCLIENTE          VARCHAR2(21) := NULL;
   V_MES                VARCHAR2(10);
   V_ANO                VARCHAR2(10);
   V_ANOANT             VARCHAR2(04);
   V_MESANT             VARCHAR2(02);
   V_BIM                VARCHAR2(10);
   V_TRI                VARCHAR2(10);
   V_SEM                VARCHAR2(10);
   V_DATACUSTOBI        VARCHAR2(01);
   V_VRCUSTPLANTOTAL1   FLOAT;
   V_VRCUSTPLANTOTAL2   FLOAT;
   V_VRCUSTPLANTOTAL3   FLOAT;
   V_VRCUSTPLANTOTAL4   FLOAT;
   V_VRPERCPLANTOTAL1   FLOAT;
   V_VRPERCPLANTOTAL2   FLOAT;
   V_VRPERCPLANTOTAL3   FLOAT;
   V_VRPERCPLANTOTAL4   FLOAT;
   V_VRPERCREALTOTAL1   FLOAT;
   V_VRPERCREALTOTAL2   FLOAT;
   V_VRPERCREALTOTAL3   FLOAT;
   V_VRPERCREALTOTAL4   FLOAT;
   V_VRCUSTREALTOTAL1   FLOAT;
   V_VRCUSTREALTOTAL2   FLOAT;
   V_VRCUSTREALTOTAL3   FLOAT;
   V_VRCUSTREALTOTAL4   FLOAT;
   V_VRTOTALCUSTOSTD    FLOAT;
   V_VRTOTFCPLAN1       FLOAT;
   V_VRTOTFCPLAN2       FLOAT;
   V_VRTOTFCPLAN3       FLOAT;
   V_VRTOTFCPLAN4       FLOAT;
   V_VRTOTFCREAL1       FLOAT;
   V_VRTOTFCREAL2       FLOAT;
   V_VRTOTFCREAL3       FLOAT;
   V_VRTOTFCREAL4       FLOAT;
   V_VRTOTVENDSERV      FLOAT;
   V_VRTOTCUSTPADREST   FLOAT;
   V_VRTOTCUSTPADREFE   FLOAT;
   V_NMTIPOCUSTO1       TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_NMTIPOCUSTO2       TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_NMTIPOCUSTO3       TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_NMTIPOCUSTOPLA     TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_NMTIPOCUSTOREAL    TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_DTULTCOMEFE        DATE;

BEGIN

   V_MES  :=  TO_CHAR(P_DTINI,'MM');
   V_ANO  :=  TO_CHAR(P_DTINI,'YYYY');
   V_NMTIPOCUSTO1 := ' ';
   V_NMTIPOCUSTO2 := ' ';
   V_NMTIPOCUSTO3 := ' ';   
   V_DTINI := ADD_MONTHS(LAST_DAY(P_DTINI) + 1, -1);

-----------------------------INICIO DA ROTINA DE DELECAO DE DADOS------------------------------------
  
   FOR C_DEL_SRV IN (SELECT ROWID REG_DEL
                     FROM ETL_RESUSERV
                     WHERE TO_DATE('01'||CDMESBI||CDANOBI, 'DD/MM/YYYY') >= V_DTINI)

   LOOP
      V_COUNTER := V_COUNTER +1;
      DELETE
      FROM ETL_RESUSERV
      WHERE C_DEL_SRV.REG_DEL = ROWID;

      IF V_COUNTER >= 2000 THEN
         COMMIT;
         V_COUNTER := 0;
      END IF;
   END LOOP;
   COMMIT;
   V_COUNTER := 0;
   
  ----------------------------------------FIM DA DELECAO DOS DADOS--------------------------------------

   SELECT IDDATACUSTOBI 
   INTO V_DATACUSTOBI
   FROM PARAMGERAL;

   FOR C_NRTPCUS IN --> Seleciona 3 tipos de custo parametrizados
      (SELECT ROWNUM AS LINHA, NRTIPOCUSTO, NMTIPOCUSTO
       FROM(SELECT TO_NUMBER(CDTIPOCUSTO) NRTIPOCUSTO, NMTIPOCUSTO
            FROM TIPOCUSTO
            WHERE IDTPCUSTOGSC = 'S'
            ORDER BY NRTIPOCUSTO
            )
      )
   LOOP
      IF C_NRTPCUS.LINHA    = 1 THEN
         V_NRTIPOCUSTO1    := C_NRTPCUS.NRTIPOCUSTO;
         V_NMTIPOCUSTO1    := C_NRTPCUS.NMTIPOCUSTO;
      ELSIF C_NRTPCUS.LINHA = 2 THEN
         V_NRTIPOCUSTO2    := C_NRTPCUS.NRTIPOCUSTO;
         V_NMTIPOCUSTO2    := C_NRTPCUS.NMTIPOCUSTO;
      ELSIF C_NRTPCUS.LINHA = 3 THEN
         V_NRTIPOCUSTO3    := C_NRTPCUS.NRTIPOCUSTO;
         V_NMTIPOCUSTO3    := C_NRTPCUS.NMTIPOCUSTO;
      END IF;
   END LOOP;
   
   
   WHILE (V_DTINI  <=  P_DTFINA) 
   LOOP
      V_DTFIM      :=   LAST_DAY( V_DTINI);
      V_MES        :=   TO_CHAR(V_DTFIM,'MM');
      V_ANO        :=   TO_CHAR(V_DTFIM,'YYYY');
      V_BIM        :=   TO_CHAR(TRUNC((V_MES - 1) / 2) + 1);
      V_TRI        :=   TO_CHAR(TRUNC((V_MES - 1) / 3) + 1);
      V_SEM        :=   TO_CHAR(TRUNC((V_MES - 1) / 6) + 1);

      FOR C_ETL IN
         (SELECT
            FL.CDFILIAL, FL.NMFILIAL, FL.CDAREAGERE, FL.DTINICIALBI,
            FL.CDSUPERVISOR, FL.CDGOPERAC, FL.CDEMPRESA, EM.NMEMPRESA,
            FL.CDSEGMER, P.IDCOMCUSPERC, CDPLANEJADORA, CDGUNIDADE,
            TRUNC(DECODE(PG.IDUTILDTPROC, 'N', SYSDATE, NVL(P.DTPROCESSA,SYSDATE))) AS DTPROCESSA
          FROM
            FILIAL FL, PARAMFILIAL P, EMPRESA EM, PARAMGERAL PG
          WHERE P.CDFILIAL = FL.CDFILIAL
            AND EM.CDEMPRESA = FL.CDEMPRESA
            AND FL.IDFUNCAOFILI IS NULL
            AND FL.DTINICIALBI  IS NOT NULL
         )
      LOOP
         /*Seleciona o quarto tipo de custo, planejado e real, que esta no planejamento*/
         BEGIN
           SELECT CUSPLA.CDTIPOCUSTOPLA,CUSPLA.NMTIPOCUSTOPLA,
                  CUSREAL.CDTIPOCUSTOREA,CUSREAL.NMTIPOCUSTOREAL
             INTO V_NRTIPOCUSTOPLA,V_NMTIPOCUSTOPLA, V_NRTIPOCUSTOREAL,V_NMTIPOCUSTOREAL
             FROM (SELECT P.CDTIPOCUSTOPLA, P.CDTIPOCUSTOREA,TP.NMTIPOCUSTO NMTIPOCUSTOPLA
                    FROM PARAMPLANEJA P, PARAMFILIAL F,TIPOCUSTO TP
                   WHERE (P.CDFILIAL = C_ETL.CDFILIAL)
                     AND (F.CDFILIAL  = P.CDFILIAL) 
                     AND (P.CDTIPOCUSTOPLA = TP.CDTIPOCUSTO)
                  )CUSPLA,
                  (SELECT P.CDTIPOCUSTOREA,TP.NMTIPOCUSTO NMTIPOCUSTOREAL
                     FROM PARAMPLANEJA P, PARAMFILIAL F,TIPOCUSTO TP
                    WHERE (P.CDFILIAL = C_ETL.CDFILIAL)
                      AND (F.CDFILIAL  = P.CDFILIAL) 
                      AND (P.CDTIPOCUSTOREA = TP.CDTIPOCUSTO)
                  )CUSREAL;
			EXCEPTION 
            WHEN NO_DATA_FOUND THEN
                V_NRTIPOCUSTOPLA  := NULL;
                V_NMTIPOCUSTOPLA  := NULL;
                V_NRTIPOCUSTOREAL := NULL;
                V_NMTIPOCUSTOREAL := NULL;
         END;

         
        IF ADD_MONTHS(LAST_DAY(C_ETL.DTINICIALBI) + 1, -1) <= V_DTINI THEN
            NOVO_CODIGO('CONSPLAN'||C_ETL.CDFILIAL, V_CDSEQUENCIAL,1);
            V_CDSEQUENCIAL := SUBSTR(V_CDSEQUENCIAL,11,10);
            IF (TRUNC(C_ETL.DTPROCESSA - 1) <= TRUNC(V_DTFIM)) THEN  --> CONSIDERA UM DIA ANTES DA DATA DE PROCESSAMENTO
               V_DATAFINAL := TRUNC(C_ETL.DTPROCESSA - 1);
            ELSE
               V_DATAFINAL := TRUNC(V_DTFIM);
            END IF;
            
            /*PREENCHE OS DADOS NECESSARIOS PARA CUSTO PLANEJADO - TABELA CONSPLAN*/
            CONSUMO_PLANEJADO_PLA(
                                  C_ETL.CDFILIAL,
                                  'T',
                                  V_DTINI,
                                  V_DATAFINAL,
                                  'T',
                                  'CFP',
                                  'N',
                                   0,
                                  'N',
                                   V_CDSEQUENCIAL,
                                  '0',
                                  'zzzzzzzzzz',
                                  '', --> Nenhum operador sera necessario aqui
                                  '_'||TO_CHAR(V_DTINI, 'YYYYMMDD')||'_',
                                  '_'||TO_CHAR(V_DATAFINAL, 'YYYYMMDD')||'_'
                                  );

            FOR C_SERVICO IN             /*DADOS EM NIVEL DE SERVICO*/
               (SELECT SE.CDSERVFILI, SE.NMSERVICO, SE.CDGRUPSERV,  SE.IDSERVPRINC, SE.IDINDICADOR,
                       SUM(DECODE(C_ETL.IDCOMCUSPERC, 'C', CA.QTCLIESTICAR, CA.QTCOMESTICAR) ) AS QTCOMESTICAR,
                       SUM(DECODE(C_ETL.IDCOMCUSPERC, 'C', CA.QTCLIEFETCAR, CA.QTCOMEFETCAR) ) AS QTCOMEFETCAR
                FROM CARDADIA CA, SERVICO SE
                WHERE CA.CDFILIAL = C_ETL.CDFILIAL
                  AND CA.CDFILIAL = SE.CDFILIAL
                  AND CA.CDSERVFILI = SE.CDSERVFILI
                  AND CA.DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL
                GROUP BY SE.CDSERVFILI, SE.NMSERVICO, SE.CDGRUPSERV, SE.IDSERVPRINC, SE.IDINDICADOR
               )
            LOOP  
               --Verifica Data do ultimo COMENSAIS EFETIVOS para o Servico--
               BEGIN
                  SELECT MAX(DTCARDAPIO) DTULTCOMEFE
                  INTO V_DTULTCOMEFE
                  FROM CARDADIA CA, SERVICO SE
                  WHERE CA.CDFILIAL = C_ETL.CDFILIAL
                    AND CA.CDFILIAL = SE.CDFILIAL
                    AND CA.CDSERVFILI = SE.CDSERVFILI
                    AND QTCOMEFETCAR > 0
                    AND CA.DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL
                    AND SE.CDSERVFILI = C_SERVICO.CDSERVFILI
                  GROUP BY SE.CDSERVFILI;
               EXCEPTION
                  WHEN OTHERS THEN
                     V_DTULTCOMEFE := '';
               END;

               BEGIN
                  SELECT VRCUSTPADR
                  INTO   V_VRCUSTPADR
                  FROM   CUSTPADR
                  WHERE  CDFILIAL     = C_ETL.CDFILIAL
                    AND  CDSERVFILI   = C_SERVICO.CDSERVFILI
                    AND  DTREFCUSPADR = V_DTINI;
               EXCEPTION
                  WHEN OTHERS THEN
                     V_VRCUSTPADR := V_ZERO;
               END;

               BEGIN
                  SELECT CF.CDCLIENTE
                  INTO   V_CDCLIENTE
                  FROM   CLIENFILIAL CF, CLIENTE B
                  WHERE  CF.CDFILIAL = C_ETL.CDFILIAL
                    AND CF.CDCLIENTE = B.CDCLIENTE
                    AND CF.IDCLIENPRIN = 'S';
               EXCEPTION
                  WHEN OTHERS THEN
                     V_CDCLIENTE := NULL;
               END;

               /*Preco de Venda - Vem do ultimo valor do historico no modulo de faturamento*/
               V_VRPRECVENDA := V_ZERO;
               IF (V_CDCLIENTE IS NOT NULL) THEN
                  BEGIN
                     SELECT MAX(VRSERVFATHIS) VRPRECOVEND
                     INTO V_VRPRECVENDA
                     FROM HISTSERVFATU
                     WHERE CDFILIAL     = C_ETL.CDFILIAL
                       AND CDSERVFILI   = C_SERVICO.CDSERVFILI
                       AND CDCLIENTE    = V_CDCLIENTE
                       AND DTSRVFATUHIS = (SELECT MAX(DTSRVFATUHIS)
                                           FROM HISTSERVFATU
                                           WHERE CDFILIAL     = C_ETL.CDFILIAL
                                             AND CDCLIENTE    = V_CDCLIENTE
                                             AND CDSERVFILI   = C_SERVICO.CDSERVFILI
                                             AND TRUNC(DTSRVFATUHIS) <= V_DATAFINAL)
                       AND DTALTEFATHIS = (SELECT MAX(DTALTEFATHIS)
                                              FROM HISTSERVFATU H, (SELECT MAX(DTSRVFATUHIS) AS DTSRVFATUHIS
                                                                    FROM HISTSERVFATU
                                                                    WHERE CDFILIAL = C_ETL.CDFILIAL
                                                                      AND CDCLIENTE = V_CDCLIENTE  
                                                                      AND CDSERVFILI = C_SERVICO.CDSERVFILI 
                                                                      AND DTSRVFATUHIS <= V_DATAFINAL) X
                                              WHERE H.CDFILIAL     = C_ETL.CDFILIAL   
                                                AND H.CDCLIENTE    = V_CDCLIENTE  
                                                AND H.CDSERVFILI   = C_SERVICO.CDSERVFILI 
                                                AND H.DTSRVFATUHIS = X.DTSRVFATUHIS);
                  EXCEPTION
                     WHEN OTHERS THEN
                        V_VRPRECVENDA := V_ZERO;
                  END;
               END IF;

               /*DADOS EM NIVEL DE PRODUTO*/
               FOR C_PRODUTO IN
                  (
                  SELECT
                     PR.CDFILIAL,
                     PR.CDSERVFILI,
                     SUM(PR.CUSTOPLAN1) AS CUSTOPLAN1,
                     SUM(PR.CUSTOPLAN2) AS CUSTOPLAN2,
                     SUM(PR.CUSTOPLAN3) AS CUSTOPLAN3,
                     SUM(PR.CUSTOPLAN4) AS CUSTOPLAN4,
                     SUM(PR.CUSTOREAL1) AS CUSTOREAL1,
                     SUM(PR.CUSTOREAL2) AS CUSTOREAL2,
                     SUM(PR.CUSTOREAL3) AS CUSTOREAL3,
                     SUM(PR.CUSTOREAL4) AS CUSTOREAL4,
                     GPS.CDGRUPSERV,
                     SE.IDSERVPRINC
                  FROM
                     FILIAL FI, SERVICO SE, GRUPSERV GPS,
                     (SELECT
                        CDFILIAL,
                        CDSERVFILI,
                        DTCARDAPIO
                      FROM
                        CARDADIA
                      WHERE
                        CDFILIAL = C_ETL.CDFILIAL AND
                        (CDSERVFILI = C_SERVICO.CDSERVFILI) AND
                        (DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL)
                      GROUP BY
                        CDFILIAL,
                        CDSERVFILI,
                        DTCARDAPIO) CD,
                     (SELECT
                        CDFILIAL,
                        CDSERVFILI,
                        DTCARDAPIO,
                        SUM(CUSTOPLAN1) CUSTOPLAN1,
                        SUM(CUSTOPLAN2) CUSTOPLAN2,
                        SUM(CUSTOPLAN3) CUSTOPLAN3,
                        SUM(CUSTOPLAN4) CUSTOPLAN4,
                        SUM(CUSTOREAL1) CUSTOREAL1,
                        SUM(CUSTOREAL2) CUSTOREAL2,
                        SUM(CUSTOREAL3) CUSTOREAL3,
                        SUM(CUSTOREAL4) CUSTOREAL4,
                        CDPRODUTO
                      FROM
                        (SELECT
                           CP.CDFILICPLA CDFILIAL,
                           CP.CDSERVCPLA CDSERVFILI,
                           CP.DTCONSPLAN DTCARDAPIO,
                           (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTO1,DECODE(V_DATACUSTOBI,'0', 
CD.DTREFECUSTMES, CP.DTCONSPLAN),SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN1,
                           (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTO2,DECODE(V_DATACUSTOBI,'0', 
CD.DTREFECUSTMES, CP.DTCONSPLAN),SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN2,
                           (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTO3,DECODE(V_DATACUSTOBI,'0', 
CD.DTREFECUSTMES, CP.DTCONSPLAN),SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN3,
                           (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTOPLA,DECODE(V_DATACUSTOBI,'0', 
CD.DTREFECUSTMES, CP.DTCONSPLAN),SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN4,
                           0 AS CUSTOREAL1,
                           0 AS CUSTOREAL2,
                           0 AS CUSTOREAL3,
                           0 AS CUSTOREAL4,
                           CP.CDPRODCPLA CDPRODUTO
                        FROM
                           CONSPLAN CP, PARAMGERAL PG,
                           (SELECT CD.CDFILIAL, CD.CDSERVFILI, CD.DTMESCARD, MAX(CM.DTREFECUSTMES) AS DTREFECUSTMES
                            FROM CARDADIA CD, CARDAMES CM
                            WHERE (CD.CDFILIAL = C_ETL.CDFILIAL)
                              AND (CD.CDSERVFILI = C_SERVICO.CDSERVFILI)
                              AND (CD.DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL)
                              AND (CD.CDFILIAL   = CM.CDFILIAL(+)     )
                              AND (CD.CDSERVFILI = CM.CDSERVFILI(+)   )
                              AND (CD.DTMESCARD  = CM.DTMESCARDAPIO(+))
                            GROUP BY CD.CDFILIAL, CD.CDSERVFILI, CD.DTMESCARD) CD
                        WHERE
                           (CP.CDFILICPLA   = C_ETL.CDFILIAL)   AND
                           (CP.NRCONSPLAN   = V_CDSEQUENCIAL)   AND
                           (CD.CDFILIAL     = CP.CDFILICPLA)    AND
                           (CD.CDSERVFILI   = CP.CDSERVCPLA) AND
                           (PG.CDPARGERAL   = '0001')        AND
                           (CD.DTMESCARD    = ADD_MONTHS(LAST_DAY(CP.DTCONSPLAN) + 1, -1))
                        UNION ALL
                        SELECT
                           CD.CDFILIAL,
                           CD.CDSERVFILI,
                           CD.DTCARDAPIO,
                           DECODE(V_NRTIPOCUSTO1, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * 
(CD.QTCOMESTICAR/H.TOTCOMEN), 5)) AS CUSTOPLAN1,
                           DECODE(V_NRTIPOCUSTO2, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * 
(CD.QTCOMESTICAR/H.TOTCOMEN), 5)) AS CUSTOPLAN2,
                           DECODE(V_NRTIPOCUSTO3, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * 
(CD.QTCOMESTICAR/H.TOTCOMEN), 5)) AS CUSTOPLAN3,
                           DECODE(V_NRTIPOCUSTOPLA, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * 
(CD.QTCOMESTICAR/H.TOTCOMEN), 5)) AS CUSTOPLAN4,
                           0 AS CUSTOREAL1,
                           0 AS CUSTOREAL2,
                           0 AS CUSTOREAL3,
                           0 AS CUSTOREAL4,
                           CNE.CDPRODUTO AS CDPRODUTO
                        FROM
                           (SELECT
                              DTMESCARD,
                              CDSERVFILI,
                              SUM(QTCOMESTICAR) AS TOTCOMEN
                           FROM
                              CARDADIA
                           WHERE
                              (CDFILIAL   = C_ETL.CDFILIAL      ) AND
                              (CDSERVFILI = C_SERVICO.CDSERVFILI) AND
                              (DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL)
                           GROUP BY
                              DTMESCARD,
                              CDSERVFILI
                           ) H,
                           CARDADIA  CD,
                           RATENESTO RNE,
                           CUSTNESTO CNE,
                           DATA      DT
                        WHERE
                           (DT.DTDATA BETWEEN V_DTINI AND V_DATAFINAL)                            AND
                           (TO_CHAR(DT.DTDATA, 'MMYYYY') = TO_CHAR(CNE.DTCUSTNESTO, 'MMYYYY')) AND
                           (CNE.CDFILIAL     = C_ETL.CDFILIAL)                                AND
                           (RNE.CDSERVFILI   = C_SERVICO.CDSERVFILI)                            AND
                           (CNE.CDPRODUTO    = RNE.CDPRODUTO)                                  AND
                           (CD.CDFILIAL      = RNE.CDFILIAL)                                   AND
                           (CD.CDSERVFILI    = RNE.CDSERVFILI)                                 AND
                           (CD.DTCARDAPIO    = DT.DTDATA)                                      AND
                           (H.DTMESCARD      = CD.DTMESCARD)                                   AND
                           (H.CDSERVFILI     = RNE.CDSERVFILI)                                 AND
                           (NOT H.TOTCOMEN IS NULL AND H.TOTCOMEN <> 0)
                        UNION ALL
                        SELECT
                           C.CDFILIAL,
                           C.CDSERVFILI,
                           C.DTCARDAPIO,
                           0 CUSTOPLAN1,
                           0 CUSTOPLAN2,
                           0 CUSTOPLAN3,
                           0 CUSTOPLAN4,
                           DECODE(V_NRTIPOCUSTO1, NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL, C.CDPRODUTO, V_NRTIPOCUSTO1,C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL1,
                           DECODE(V_NRTIPOCUSTO1, NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL, C.CDPRODUTO, V_NRTIPOCUSTO2, C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL2,
                           DECODE(V_NRTIPOCUSTO1, NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL, C.CDPRODUTO, V_NRTIPOCUSTO3, C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL3,
                           DECODE(V_NRTIPOCUSTOREAL,NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL,C.CDPRODUTO,V_NRTIPOCUSTOREAL, C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL4,
                           C.CDPRODUTO
                        FROM
                           (SELECT 
                           CA.CDFILIAL, 
                           CA.CDSERVFILI, 
                           CA.DTCARDAPIO, 
                           SUM(IR.QTRETIRADA * PRA.VRFATOCONV) AS QTRETIRADA, 
                           PRB.CDPRODUTO 
                         FROM 
                           CARDADIA CA, 
                           PRODUTO  PRA, 
                           PRODUTO  PRB, 
                           ITEMRETI IR,
                           ITLANCTOEST IL
                         WHERE 
                           (IL.CDFILIAL    = IR.CDFIITLANEST)                  AND
                           (IL.NRLANCESTQ  = IR.NRLANCESTQ)                    AND
                           (IL.NRSEQUITEM  = IR.NRSEQUITEM)                    AND
                           (IL.IDEVOLESTOQ = 'S')                              AND
                           (PRB.CDPRODUTO = PRA.CDPRODESTO)                  AND 
                           (NOT IR.QTRETIRADA IS NULL AND IR.QTRETIRADA <> 0)  AND
                           (PRA.CDPRODUTO = IR.CDPRODUTO)                    AND 
                           (CA.CDFILIAL   = IR.CDFILIAL)                     AND 
                           (CA.CDFILIAL   = C_ETL.CDFILIAL )                 AND 
                           (CA.DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL)   AND 
                           (CA.CDSERVFILI = C_SERVICO.CDSERVFILI)            AND 
                           (CA.NRCARDAPIO = IR.NRCARDAPIO) 
                         GROUP BY 
                           CA.CDFILIAL, 
                           CA.CDSERVFILI, 
                           CA.DTCARDAPIO, 
                           PRB.CDPRODUTO 
                           ) C 
                        UNION ALL
                        SELECT
                           RNE.CDFILIAL,
                           RNE.CDSERVFILI,
                           DT.DTDATA AS DTCARDAPIO,
                           0 AS CUSTOPLAN1,
                           0 AS CUSTOPLAN2,
                           0 AS CUSTOPLAN3,
                           0 AS CUSTOPLAN4,
                           DECODE(V_NRTIPOCUSTO1, NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL1,
                           DECODE(V_NRTIPOCUSTO2, NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL2,
                           DECODE(V_NRTIPOCUSTO3, NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL3,
                           DECODE(V_NRTIPOCUSTOREAL,NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL4,
                           CNE.CDPRODUTO AS CDPRODUTO
                        FROM
                           (SELECT
                              DTMESCARD,
                              CDSERVFILI,
                              SUM(QTCOMEFETCAR) AS TOTCOMEN
                           FROM
                              CARDADIA
                           WHERE
                              (CDFILIAL = C_ETL.CDFILIAL) AND
                              (CDSERVFILI = C_SERVICO.CDSERVFILI) AND
                              (DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL)
                           GROUP BY
                              DTMESCARD,
                              CDSERVFILI
                           ) TC,
                           CARDADIA  CA,
                           RATENESTO RNE,
                           CUSTNESTO CNE,
                           DATA DT
                        WHERE
                           (DT.DTDATA BETWEEN V_DTINI AND V_DATAFINAL)                       AND
                           (CNE.CDFILIAL    = C_ETL.CDFILIAL)                                 AND
                           (TO_CHAR(DT.DTDATA, 'MMYYYY') = TO_CHAR(CNE.DTCUSTNESTO, 'MMYYYY')) AND
                           (NOT CNE.VRREALNESTO IS NULL)                                       AND
                           (RNE.CDFILIAL    = C_ETL.CDFILIAL)                                 AND
                           (RNE.CDSERVFILI = C_SERVICO.CDSERVFILI)                            AND
                           (RNE.CDPRODUTO   = CNE.CDPRODUTO)                                   AND
                           (CA.CDFILIAL     = C_ETL.CDFILIAL)                                 AND
                           (CA.CDSERVFILI   = RNE.CDSERVFILI)                                  AND
                           (CA.DTCARDAPIO   = DT.DTDATA)                                       AND
                           (TC.DTMESCARD    = CA.DTMESCARD)                                    AND
                           (TC.CDSERVFILI   = CA.CDSERVFILI)                                   AND
                           (NOT TC.TOTCOMEN IS NULL AND TC.TOTCOMEN <> 0)
                        UNION ALL
                        SELECT
                           RNE.CDFILIAL,
                           RNE.CDSERVFILI,
                           DT.DTDATA       AS DTCARDAPIO,
                           0 AS CUSTOPLAN1,
                           0 AS CUSTOPLAN2,
                           0 AS CUSTOPLAN3,
                           0 AS CUSTOPLAN4,
                           DECODE(V_NRTIPOCUSTO1, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL1,
                           DECODE(V_NRTIPOCUSTO2, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL2,
                           DECODE(V_NRTIPOCUSTO3, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL3,
                           DECODE(V_NRTIPOCUSTOREAL, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) *(CA.QTCOMEFETCAR/TC.TOTCOMEN), 5)) AS CUSTOREAL4,
                           TCN.CDPRODUTO CDPRODUTO
                        FROM
                           DATA DT,
                           RATENESTO RNE,
                           CARDADIA CA,
                           (SELECT
                              DTMESCARD,
                              CDSERVFILI,
                              SUM(QTCOMEFETCAR) AS TOTCOMEN
                            FROM
                              CARDADIA
                            WHERE
                              (CDFILIAL = C_ETL.CDFILIAL) AND
                              (CDSERVFILI = C_SERVICO.CDSERVFILI) AND
                              (DTCARDAPIO BETWEEN V_DTINI AND V_DATAFINAL)
                            GROUP BY
                              DTMESCARD,
                              CDSERVFILI
                           ) TC,
                           (SELECT
                              TO_CHAR(NF.DTENTRSAID, 'MMYYYY') AS DTMESNF,
                              IP.CDPRODUTO,
                              SUM(IP.VRTOTAITEM) AS VRTOTAITEM
                           FROM
                              NOTAFISCAL  NF,
                              ITEMPRODUTO IP
                           WHERE
                              (IP.CDFILIAL     = NF.CDFILIAL)                       AND
                              (IP.NRLANCTONF   = NF.NRLANCTONF)                     AND
                              (NF.CDFILIRECE   = C_ETL.CDFILIAL)                   AND
                              (NF.IDENTRSAIDOP = 'E')                               AND
                              (NF.DTENTRSAID BETWEEN V_DTINI AND V_DATAFINAL)
                           GROUP BY
                              TO_CHAR(NF.DTENTRSAID, 'MMYYYY'),
                              IP.CDPRODUTO
                           ) TCN
                        WHERE
                           (DT.DTDATA BETWEEN V_DTINI AND V_DATAFINAL)    AND
                           (TO_CHAR(DT.DTDATA, 'MMYYYY') = TCN.DTMESNF)   AND
                           (RNE.CDFILIAL    = C_ETL.CDFILIAL)             AND
                           (RNE.CDSERVFILI = C_SERVICO.CDSERVFILI)        AND
                           (CA.CDFILIAL     = C_ETL.CDFILIAL)             AND
                           (CA.CDSERVFILI   = RNE.CDSERVFILI)             AND
                           (CA.DTCARDAPIO   = DT.DTDATA)                  AND
                           (CA.DTCARDAPIO   = DT.DTDATA)                  AND
                           (TCN.CDPRODUTO   = RNE.CDPRODUTO)              AND
                           (TC.DTMESCARD    = CA.DTMESCARD)               AND
                           (TC.CDSERVFILI   = CA.CDSERVFILI)              AND
                           (NOT TC.TOTCOMEN IS NULL AND TC.TOTCOMEN <> 0) AND
                           (NOT EXISTS (SELECT CDFILIAL
                                        FROM CUSTNESTO
                                        WHERE
                                          CDFILIAL    = C_ETL.CDFILIAL AND
                                          DTCUSTNESTO = DT.DTDATA AND
                                          CDPRODUTO   = RNE.CDPRODUTO AND
                                          NOT VRREALNESTO IS NULL))
                        )
                      GROUP BY
                        CDFILIAL,
                        CDSERVFILI,
                        DTCARDAPIO,
                        CDPRODUTO 
                     ) PR
                  WHERE
                     FI.CDFILIAL   = PR.CDFILIAL   AND
                     SE.CDFILIAL   = PR.CDFILIAL   AND
                     SE.CDSERVFILI = PR.CDSERVFILI AND
                     CD.CDFILIAL   = PR.CDFILIAL   AND
                     CD.CDSERVFILI = PR.CDSERVFILI AND
                     CD.DTCARDAPIO = PR.DTCARDAPIO AND
                     SE.CDGRUPSERV = GPS.CDGRUPSERV(+)
                  GROUP BY
                     PR.CDFILIAL,
                     PR.CDSERVFILI,
                     GPS.CDGRUPSERV,
                     SE.IDSERVPRINC
                  ) 
               LOOP
               
                  --------------------------FATOS CALCULADOS----------------------------

                  BEGIN
                     IF C_SERVICO.QTCOMESTICAR > 0 THEN
                        /* PER CAPITA PLANEJADO TOTAL - (Custo Planejado/Comensais Estimados) */
                        V_VRPERCPLANTOTAL1 := (C_PRODUTO.CUSTOPLAN1 / C_SERVICO.QTCOMESTICAR);
                        V_VRPERCPLANTOTAL2 := (C_PRODUTO.CUSTOPLAN2 / C_SERVICO.QTCOMESTICAR);
                        V_VRPERCPLANTOTAL3 := (C_PRODUTO.CUSTOPLAN3 / C_SERVICO.QTCOMESTICAR);
                        V_VRPERCPLANTOTAL4 := (C_PRODUTO.CUSTOPLAN4 / C_SERVICO.QTCOMESTICAR);
                        
                        /* CUSTO PLANEJADO TOTAL - (Custo Planejado*Comensais Estimados) */
                        V_VRCUSTPLANTOTAL1 := (C_PRODUTO.CUSTOPLAN1 * C_SERVICO.QTCOMESTICAR);
                        V_VRCUSTPLANTOTAL2 := (C_PRODUTO.CUSTOPLAN2 * C_SERVICO.QTCOMESTICAR);
                        V_VRCUSTPLANTOTAL3 := (C_PRODUTO.CUSTOPLAN3 * C_SERVICO.QTCOMESTICAR);
                        V_VRCUSTPLANTOTAL4 := (C_PRODUTO.CUSTOPLAN4 * C_SERVICO.QTCOMESTICAR);
                        
                        IF V_VRPRECVENDA > 0 THEN
                           /* PERCENTUAL FC PLAN - (Custo Planejado/Preco de venda*Comensais Estimados) */
                           V_VRTOTFCPLAN1 := (C_PRODUTO.CUSTOPLAN1 / (V_VRPRECVENDA * C_SERVICO.QTCOMESTICAR));
                           V_VRTOTFCPLAN2 := (C_PRODUTO.CUSTOPLAN2 / (V_VRPRECVENDA * C_SERVICO.QTCOMESTICAR));
                           V_VRTOTFCPLAN3 := (C_PRODUTO.CUSTOPLAN3 / (V_VRPRECVENDA * C_SERVICO.QTCOMESTICAR));
                           V_VRTOTFCPLAN4 := (C_PRODUTO.CUSTOPLAN4 / (V_VRPRECVENDA * C_SERVICO.QTCOMESTICAR));
                        ELSE
                           V_VRTOTFCPLAN1  := V_ZERO;
                           V_VRTOTFCPLAN2  := V_ZERO;
                           V_VRTOTFCPLAN3  := V_ZERO;
                           V_VRTOTFCPLAN4  := V_ZERO;
                        END IF;

                     ELSE
                        V_VRPERCPLANTOTAL1 := V_ZERO;
                        V_VRPERCPLANTOTAL2 := V_ZERO;
                        V_VRPERCPLANTOTAL3 := V_ZERO;
                        V_VRPERCPLANTOTAL4 := V_ZERO;
                        V_VRCUSTPLANTOTAL1 := V_ZERO;
                        V_VRCUSTPLANTOTAL2 := V_ZERO;
                        V_VRCUSTPLANTOTAL3 := V_ZERO;
                        V_VRCUSTPLANTOTAL4 := V_ZERO;
                        V_VRTOTFCPLAN1     := V_ZERO;
                        V_VRTOTFCPLAN2     := V_ZERO;
                        V_VRTOTFCPLAN3     := V_ZERO;
                        V_VRTOTFCPLAN4     := V_ZERO;
                     END IF;

                     IF (C_SERVICO.QTCOMEFETCAR > 0)  THEN
                        /*PER CAPITA REALIZADO TOTAL - (Custo Real/Efetivos)*/
                        V_VRPERCREALTOTAL1 := (C_PRODUTO.CUSTOREAL1 / C_SERVICO.QTCOMEFETCAR);
                        V_VRPERCREALTOTAL2 := (C_PRODUTO.CUSTOREAL2 / C_SERVICO.QTCOMEFETCAR);
                        V_VRPERCREALTOTAL3 := (C_PRODUTO.CUSTOREAL3 / C_SERVICO.QTCOMEFETCAR);
                        V_VRPERCREALTOTAL4 := (C_PRODUTO.CUSTOREAL4 / C_SERVICO.QTCOMEFETCAR);
                        /* CUSTO REALIZADO TOTAL - (Custo Real*Efetivos)*/
                        V_VRCUSTREALTOTAL1 := (C_PRODUTO.CUSTOREAL1 * C_SERVICO.QTCOMEFETCAR);
                        V_VRCUSTREALTOTAL2 := (C_PRODUTO.CUSTOREAL2 * C_SERVICO.QTCOMEFETCAR);
                        V_VRCUSTREALTOTAL3 := (C_PRODUTO.CUSTOREAL3 * C_SERVICO.QTCOMEFETCAR);
                        V_VRCUSTREALTOTAL4 := (C_PRODUTO.CUSTOREAL4 * C_SERVICO.QTCOMEFETCAR);
                        
                        IF V_VRPRECVENDA > 0 THEN
                           /* PERCENTUAL FC STD - (Custo Padrao*efetivos/Preco de Venda*Efetivos)*/
                           V_VRTOTALCUSTOSTD := ((V_VRCUSTPADR * C_SERVICO.QTCOMEFETCAR) /
                                                 (V_VRPRECVENDA * C_SERVICO.QTCOMEFETCAR ));
                           /* PERCENTUAL FC REAL - (Custo Real/Preco de venda*Efetivos)*/
                           V_VRTOTFCREAL1 := (C_PRODUTO.CUSTOREAL1 / (V_VRPRECVENDA * C_SERVICO.QTCOMEFETCAR));
                           V_VRTOTFCREAL2 := (C_PRODUTO.CUSTOREAL2 / (V_VRPRECVENDA * C_SERVICO.QTCOMEFETCAR));
                           V_VRTOTFCREAL3 := (C_PRODUTO.CUSTOREAL3 / (V_VRPRECVENDA * C_SERVICO.QTCOMEFETCAR));
                           V_VRTOTFCREAL4 := (C_PRODUTO.CUSTOREAL4 / (V_VRPRECVENDA * C_SERVICO.QTCOMEFETCAR));
                           
                        ELSE
                           V_VRTOTALCUSTOSTD := V_ZERO;
                           V_VRTOTFCREAL1    := V_ZERO;
                           V_VRTOTFCREAL2    := V_ZERO;
                           V_VRTOTFCREAL3    := V_ZERO;
                           V_VRTOTFCREAL4    := V_ZERO;
                        END IF;
                        
                     ELSE
                        V_VRPERCREALTOTAL1 := V_ZERO;
                        V_VRPERCREALTOTAL2 := V_ZERO;
                        V_VRPERCREALTOTAL3 := V_ZERO;
                        V_VRPERCREALTOTAL4 := V_ZERO;
                        V_VRCUSTREALTOTAL1 := V_ZERO;
                        V_VRCUSTREALTOTAL2 := V_ZERO;
                        V_VRCUSTREALTOTAL3 := V_ZERO;
                        V_VRCUSTREALTOTAL4 := V_ZERO;
                        V_VRTOTALCUSTOSTD  := V_ZERO;
                        V_VRTOTFCREAL1     := V_ZERO;
                        V_VRTOTFCREAL2     := V_ZERO;
                        V_VRTOTFCREAL3     := V_ZERO;
                        V_VRTOTFCREAL4     := V_ZERO;
                     END IF;

                     /* TOTAL DE VENDA POR SERVICO - (Preco de Venda*Efetivos)*/
                     V_VRTOTVENDSERV := (V_VRPRECVENDA * C_SERVICO.QTCOMEFETCAR);

                     /* CUSTO PADRAO ESTIMADO - (Custo Padrao*Comensais Estimados)*/
                     V_VRTOTCUSTPADREST := V_VRCUSTPADR * C_SERVICO.QTCOMESTICAR;

                     /* CUSTO PADRAO EFETIVO - (Custo Padrao*Efetivos)*/
                     V_VRTOTCUSTPADREFE := V_VRCUSTPADR * C_SERVICO.QTCOMEFETCAR;

                  END;

                  INSERT INTO ETL_RESUSERV
                        ( CDFILIAL, NMFILIAL, CDAREAGERE,
                          CDSUPERVISOR, CDGOPERAC, CDEMPRESA,
                          NMEMPRESA, CDSEGMER, CDPLANEJADORA,
                          CDGUNIDADE, CDGRUPSERV, CDFILISERVFILI,
                          NMSERVICO, IDINDICADOR, CDANOBI,
                          CDMESBI, QTCOMESTSERV, QTCOMEFESERV,
                          VRCUSPADSERV, DSDTPROCFILI, DSTPSERV,
                          VRCUSVNDSERV, VRPERTOTCUSTSTD, VRTOTAVENDASERV,
                          VRCUSPADEST, VRCUSPADEFE,
                          VRCUSPLASERV1,VRCUSPLASERV2, VRCUSPLASERV3,VRCUSPLASERV4,
                          VRCUSREASERV1,VRCUSREASERV2, VRCUSREASERV3,VRCUSREASERV4,
                          VRPERCPLATOTSER1,VRPERCPLATOTSER2,VRPERCPLATOTSER3,VRPERCPLATOTSER4,
                          VRPERCREATOTSER1,VRPERCREATOTSER2, VRPERCREATOTSER3,VRPERCREATOTSER4,
                          VRCUSPLATOTSER1,VRCUSPLATOTSER2,VRCUSPLATOTSER3,VRCUSPLATOTSER4,
                          VRCUSREATOTSER1,VRCUSREATOTSER2,VRCUSREATOTSER3,VRCUSREATOTSER4,
                          VRPERFCPLANS1,VRPERFCPLANS2,VRPERFCPLANS3,VRPERFCPLANS4,
                          VRPERFCPREALS1,VRPERFCPREALS2, VRPERFCPREALS3,VRPERFCPREALS4,                          
                          DSDTULTCOMEFE,NRFILIALSEMMOV,DTULTAPURAC
                        )
                  VALUES
                        ( C_ETL.CDFILIAL, C_ETL.NMFILIAL, C_ETL.CDAREAGERE,
                          C_ETL.CDSUPERVISOR, C_ETL.CDGOPERAC, C_ETL.CDEMPRESA,
                          C_ETL.NMEMPRESA, C_ETL.CDSEGMER, C_ETL.CDPLANEJADORA,
                          C_ETL.CDGUNIDADE, C_SERVICO.CDGRUPSERV, C_ETL.CDFILIAL||C_SERVICO.CDSERVFILI,
                          C_SERVICO.NMSERVICO, C_SERVICO.IDINDICADOR, V_ANO,
                          V_MES, C_SERVICO.QTCOMESTICAR, C_SERVICO.QTCOMEFETCAR,
                          V_VRCUSTPADR, TO_CHAR(C_ETL.DTPROCESSA, 'DD/MM/YYYY'), DECODE(C_SERVICO.IDSERVPRINC,'S', 'Servico 
Principal','Outros Servicos'),
                          V_VRPRECVENDA, V_VRTOTALCUSTOSTD, V_VRTOTVENDSERV,
                          V_VRTOTCUSTPADREST,V_VRTOTCUSTPADREFE,
                          C_PRODUTO.CUSTOPLAN1, C_PRODUTO.CUSTOPLAN2, C_PRODUTO.CUSTOPLAN3, C_PRODUTO.CUSTOPLAN4,
                          C_PRODUTO.CUSTOREAL1, C_PRODUTO.CUSTOREAL2, C_PRODUTO.CUSTOREAL3, C_PRODUTO.CUSTOREAL4,
                          
                          V_VRPERCPLANTOTAL1,V_VRPERCPLANTOTAL2,V_VRPERCPLANTOTAL3,V_VRPERCPLANTOTAL4,
                          V_VRPERCREALTOTAL1,V_VRPERCREALTOTAL2,V_VRPERCREALTOTAL3,V_VRPERCREALTOTAL4,
                          
                          V_VRCUSTPLANTOTAL1,V_VRCUSTPLANTOTAL2,V_VRCUSTPLANTOTAL3,V_VRCUSTPLANTOTAL4,
                          V_VRCUSTREALTOTAL1,V_VRCUSTREALTOTAL2,V_VRCUSTREALTOTAL3,V_VRCUSTREALTOTAL4,
                          
                          V_VRTOTFCPLAN1,V_VRTOTFCPLAN2,V_VRTOTFCPLAN3,V_VRTOTFCPLAN4,
                          V_VRTOTFCREAL1,V_VRTOTFCREAL2,V_VRTOTFCREAL3,V_VRTOTFCREAL4,                          
                          TO_CHAR(V_DTULTCOMEFE, 'DD/MM/YYYY'),DECODE(C_PRODUTO.CUSTOREAL1, 0, 0, 1),V_DATAFINAL
                        );
               END LOOP; --Fim do loop por produto
            END LOOP;   -- fim do loop por servico

            DELETE FROM CONSPLAN
             WHERE NRCONSPLAN = V_CDSEQUENCIAL;

         END IF;        -- Final da comparacao com data de BI
         COMMIT;        -- Commit para cada Filial
      END LOOP;         -- fim do loop por Filial
      COMMIT;           -- Commit para cada mes

      V_ANOANT := TO_CHAR (ADD_MONTHS(V_DTINI, -1),'YYYY');
      V_MESANT := TO_CHAR (ADD_MONTHS(V_DTINI, -1),'MM');
      FOR ANT IN
         (SELECT * FROM ETL_RESUSERV
          WHERE CDANOBI >= V_ANOANT
            AND  CDMESBI >= V_MESANT
          ORDER BY  CDEMPRESA, CDFILIAL, CDGRUPSERV, CDFILISERVFILI, DSTPSERV, CDANOBI, CDMESBI
         )
      LOOP
         V_DTINIANT := ADD_MONTHS(TO_DATE( (ANT.CDANOBI||ANT.CDMESBI||'01'),'YYYY/MM/DD'),+1);
         V_MES  :=  TO_CHAR(V_DTINIANT,'MM');
         V_ANO  :=  TO_CHAR(V_DTINIANT,'YYYY');
         UPDATE ETL_RESUSERV 
         SET VRPLAMESANT1     = ANT.VRCUSPLASERV1,
             VRREALMESANT1    = ANT.VRCUSREASERV1,
             QTCOMEPLAMESANT  = ANT.QTCOMESTSERV,
             QTCOMEREALMESANT = ANT.QTCOMEFESERV
         WHERE CDEMPRESA = ANT.CDEMPRESA
           AND CDFILIAL  = ANT.CDFILIAL
           AND ((CDGRUPSERV IS NULL AND ANT.CDGRUPSERV IS NULL) OR (CDGRUPSERV = ANT.CDGRUPSERV))
           AND CDFILISERVFILI = ANT.CDFILISERVFILI
           AND DSTPSERV = ANT.DSTPSERV
           AND CDANOBI = V_ANO
           AND CDMESBI = V_MES;
      END LOOP; --loop de mes anterior
      V_DTINI := ADD_MONTHS(V_DTINI,1);
   END LOOP;            -- loop por mes
END;
/

DECLARE V_IDIOMA VARCHAR2(03) NULL;
BEGIN
   SELECT NVL(MAX(DSINSTALLANGUAGE),'POR') --NVL(DSINSTALLANGUAGE,'POR')
   INTO V_IDIOMA
   FROM PARAMGERAL;
   IF (V_IDIOMA = 'POR' OR V_IDIOMA = 'ING') THEN
      BEGIN
         --FATOS ETL_RESUSERV--
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMESTSERV'   		,'Come. Est.'					,'Quantidade de Comensais Estimados'				   	,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMEPLAMESANT'		,'Come. Est. - Mes Ant.'		,'Quantidade de Comensais Estimados Mes Anterior'		,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMEFESERV'   		,'Efetivos'						,'Quantidade de Efetivos'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMEREALMESANT'	   	,'Efetivos - Mes Ant.'			,'Quantidade de Efetivos Mes Anterior'				   	,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPADSERV'   		,'Custo Padrao do Serv.'		,'Custo Padrao do Servico'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSVNDSERV'   		,'Preco de Venda'				,'Preco de Venda(FAI)'								    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERTOTCUSTSTD'		,'Valor STD'					,'(Custo Padrao*Efetivos/Preco de Venda*Efetivos)'		,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRTOTAVENDASERV'		,'Tot. de Venda por Serv.'		,'(Preco de Venda*Efetivos)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPADEST'   			,'Custo Padrao Est.'			,'(Custo Padrao*Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPADEFE'   			,'Custo Padrao Efe.'			,'(Custo Padrao*Efetivos)'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLASERV1'  		,'Custo Plan.1'					,'Primeiro Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLASERV2'  		,'Custo Plan.2'					,'Segundo Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLASERV3'  		,'Custo Plan.3'					,'Terceiro Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPLAMESANT1'  		,'Custo Plan.1 - Mes Ant.'		,'Primeiro Tipo de Custo'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREASERV1'  		,'Custo Real.1'					,'Primeiro Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREASERV2'  		,'Custo Real.2'					,'Segundo Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREASERV3'  		,'Custo Real.3'					,'Terceiro Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRREALMESANT1'  		,'Custo Real.1 - Mes Ant.'		,'Primeiro Tipo de Custo'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPLANS1'    		,'Percentual FC Plan1'			,'(Custo Plan.1/Preco de venda*Come. Est.)'				,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPLANS2'    		,'Percentual FC Plan2'			,'(Custo Plan.2/Preco de venda*Come. Est.)'				,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPLANS3'    		,'Percentual FC Plan3'			,'(Custo Plan.3/Preco de venda*Come. Est.)'				,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPREALS1'    		,'Percentual FC Real1'			,'(Custo Real.1/Preco de venda*Efetivos)'			   	,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPREALS2'    		,'Percentual FC Real2'			,'(Custo Real.2/Preco de venda*Efetivos)'			   	,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPREALS3'    		,'Percentual FC Real3'			,'(Custo Real.3/Preco de venda*Efetivos)'			   	,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCPLATOTSER1'    	,'Custo PerCap. Plan1'			,'(Custo Plan.1/Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCPLATOTSER2'    	,'Custo PerCap. Plan2'			,'(Custo Plan.2/Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCPLATOTSER3'    	,'Custo PerCap. Plan3'			,'(Custo Plan.3/Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCREATOTSER1'    	,'Custo PerCap. Real1'			,'(Custo Real.1/Efetivos)'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCREATOTSER2'    	,'Custo PerCap. Real2'			,'(Custo Real.2/Efetivos)'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCREATOTSER3'    	,'Custo PerCap. Real3'			,'(Custo Real.3/Efetivos)'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLATOTSER1'  		,'Custo Tot. Plan.1'			,'(Custo Plan.1*Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLATOTSER2'  		,'Custo Tot. Plan.2'			,'(Custo Plan.2*Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLATOTSER3'  		,'Custo Tot. Plan.3'			,'(Custo Plan.3*Come. Est.)'						    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREATOTSER1'  		,'Custo Tot. Real.1'			,'(Custo Real.1*Efetivos)'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREATOTSER2'  		,'Custo Tot. Real.2'			,'(Custo Real.2*Efetivos)'							    ,'Planejamento');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREATOTSER3'  		,'Custo Tot. Real.3'			,'(Custo Real.3*Efetivos)'							    ,'Planejamento');
         --DIMENSOES ETL_RESUSERV--
         CRIA_DIME('ETL_RESUSERV',  'CDFILIAL'				,'Filial'				,'FILIAL'		,'CDFILIAL'			,'NMFILIAL'			,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDAREAGERE'				,'Regional'				,'AREAGERE'		,'CDAREAGERE'		,'NMAREAGERE'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDREGIAO'				,'Regiao'				,'REGIAO'		,'CDREGIAO'			,'NMREGIAO'			,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDSUPERVISOR'			,'Supervisor'		    ,'SUPERVISOR'	,'CDSUPERVISOR'		,'NMSUPERVISOR'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDGOPERAC'				,'Gerente Operacional'  ,'GOPERAC'		,'CDGOPERAC'		,'NMGOPERAC'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDEMPRESA'				,'Empresa'				,'EMPRESA'		,'CDEMPRESA'		,'NMEMPRESA'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDSEGMER'				,'Segmento de Mercado'	,'SEGMERCADO'	,'CDSEGMER'			,'DSSEGMER'			,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDGRUPSERV'				,'Grupo de Servico'		,'GRUPSERV'		,'CDGRUPSERV'		,'NMGRUPSERV'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDFILISERVFILI'			,'Servico'				,'FILISERVFILI'	,'FILISERVFILI'		,'NMSERVICO'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDANOBI'				,'Ano'					,NULL			,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDMESBI'				,'Mes'					,NULL			,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'DSDTPROCFILI'			,'Data de Processamento',NULL			,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'DSDTULTCOMEFE'			,'Data do ult. Efetivo'	,NULL			,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'DSTPSERV'				,'Tipo de Servico'		,NULL			,NULL				,NULL				,NULL);
         COMMIT;                                        
      EXCEPTION
         WHEN OTHERS THEN
            RAISE_APPLICATION_ERROR (-20001,'Falha no cadastro dos Itens de Estrutura do CVI');
      END;
   ELSE
      BEGIN
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMESTSERV'   	,'Come. Est.'					,'Cantidad de Comensales Estimados'					       ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMEPLAMESANT'	,'Come. Est. - Mes Ant.'		,'Cantidad de Comensales Estimados Mes Anterior'		   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMEFESERV'   	,'Vtas.Raciones'				,'Cantidad de Vtas.Rac.'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'QTCOMEREALMESANT'	,'Vtas.Rac. - Mes Ant'			,'Cantidad de Vtas.Rac. Mes Anterior'					   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPADSERV'   	,'Costo Estandar del Serv.'		,'Costo Estandar del Servicio'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSVNDSERV'   	,'Precio de Venta'				,'Precio de Venta(FAI)'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERTOTCUSTSTD'	,'Valor STD'				    ,'(Costo Estandar*Vts.Rac./Precio de Venta*Vtas.Rac.)'     ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRTOTAVENDASERV'	,'Tot. de Venta por Serv.'		,'(Precio de Venta*Vtas.Rac.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPADEST'   		,'Costo Estandar Est.'			,'Costo Estandar*Come. Est.'					           ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPADEFE'   		,'Costo Estandar Vtas.Rac.'		,'(Costo Estandar*Vtas.Rac.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLASERV1'  	,'Costo Plan.1'					,'Primer Tipo de Costo'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLASERV2'  	,'Costo Plan.2'					,'Segundo Tipo de Costo'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLASERV3'  	,'Costo Plan.3'					,'Tercer Tipo de Costo'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPLAMESANT1'  		,'Costo Plan.1 - Mes Ant.'		,'Primer Tipo de Costo'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREASERV1'  	,'Costo Real.1'					,'Primer Tipo de Costo'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREASERV2'  	,'Costo Real.2'					,'Segundo Tipo de Costo'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREASERV3'  	,'Costo Real.3'					,'Tercer Tipo de Costo'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRREALMESANT1'  	,'Costo Real.1 - Mes Ant.'		,'Primer Tipo de Costo'									   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPLANS1'    	,'Porcentual FC Plan1'			,'(Costo Plan.1/Precio de venta*Come. Est.)'		       ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPLANS2'    	,'Porcentual FC Plan2'			,'(Costo Plan.2/Precio de venta*Come. Est.)'		       ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPLANS3'    	,'Porcentual FC Plan3'			,'(Costo Plan.3/Precio de venta*Come. Est.)'		       ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPREALS1'    	,'Porcentual FC Real1'			,'(Costo Real.1/Precio de venta*Vtas.Rac.)'		           ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPREALS2'    	,'Porcentual FC Real2'			,'(Costo Real.2/Precio de venta*Vtas.Rac.)'		           ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERFCPREALS3'    	,'Porcentual FC Real3'			,'(Costo Real.3/Precio de venta*Vtas.Rac.)'		           ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCPLATOTSER1'   ,'Costo PerCap. Plan1'			,'(Costo Plan.1/Come. Est.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCPLATOTSER2'   ,'Costo PerCap. Plan2'			,'(Costo Plan.2/Come. Est.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCPLATOTSER3'   ,'Costo PerCap. Plan3'			,'(Costo Plan.3/Come. Est.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCREATOTSER1'   ,'Costo PerCap. Real1'			,'(Costo Real.1/Vtas.Rac.)'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCREATOTSER2'   ,'Costo PerCap. Real2'			,'(Costo Real.2/Vtas.Rac.)'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRPERCREATOTSER3'   ,'Costo PerCap. Real3'			,'(Costo Real.3/Vtas.Rac.)'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLATOTSER1'  	,'Costo Tot. Plan.1'			,'(Costo Plan.1*Come. Est.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLATOTSER2'  	,'Costo Tot. Plan.2'			,'(Costo Plan.2*Come. Est.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSPLATOTSER3'  	,'Costo Tot. Plan.3'			,'(Costo Plan.3*Come. Est.)'							   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREATOTSER1'  	,'Costo Tot. Real.1'			,'(Costo Real.1*Vtas.Rac.)'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREATOTSER2'  	,'Costo Tot. Real.2'			,'(Costo Real.2*Vtas.Rac.)'								   ,'Planificacion');
         CRIA_FATOS('ETL_RESUSERV', 'VRCUSREATOTSER3'  	,'Costo Tot. Real.3'			,'(Costo Real.3*Vtas.Rac.)'								   ,'Planificacion');
         --DIMENSOES ETL_RESUSERV--
         CRIA_DIME('ETL_RESUSERV',  'CDFILIAL'			,'Site'							,'FILIAL'			,'CDFILIAL'			,'NMFILIAL'			,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDAREAGERE'			,'Regional'						,'AREAGERE'			,'CDAREAGERE'		,'NMAREAGERE'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDREGIAO'			,'Region'						,'REGIAO'			,'CDREGIAO'			,'NMREGIAO'			,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDSUPERVISOR'		,'Supervisor'					,'SUPERVISOR'		,'CDSUPERVISOR'		,'NMSUPERVISOR'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDGOPERAC'			,'Gerente Operacional'		    ,'GOPERAC'			,'CDGOPERAC'		,'NMGOPERAC'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDEMPRESA'			,'Empresa'						,'EMPRESA'			,'CDEMPRESA'		,'NMEMPRESA'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDSEGMER'			,'Segmento de Mercado'		   	,'SEGMERCADO'		,'CDSEGMER'			,'DSSEGMER'			,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDGRUPSERV'			,'Grupo de Servicio'			,'GRUPSERV'			,'CDGRUPSERV'		,'NMGRUPSERV'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDFILISERVFILI'		,'Servicio'						,'FILISERVFILI'		,'FILISERVFILI'		,'NMSERVICO'		,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDANOBI'			,'Ano'							,NULL				,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'CDMESBI'			,'Mes'							,NULL				,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'DSDTPROCFILI'		,'Fecha de Procesamiento'		,NULL				,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'DSDTULTCOMEFE'		,'Fecha de la ult. Vta. Rac.'	,NULL				,NULL				,NULL				,NULL);
         CRIA_DIME('ETL_RESUSERV',  'DSTPSERV'			,'Tipo de Servicio'				,NULL				,NULL				,NULL				,NULL);
         COMMIT;
      EXCEPTION
         WHEN OTHERS THEN
            RAISE_APPLICATION_ERROR (-20001,'Falha no cadastro dos Itens de Estrutura do CVI');
      END;
   END IF;
END;
/

DECLARE
    V_JOB NUMBER;    
BEGIN
    FOR C_JOBS IN (SELECT JOB
                    FROM ALL_JOBS
                   WHERE WHAT LIKE '%ETLRESUFOOD%') LOOP
      DBMS_JOB.REMOVE(C_JOBS.JOB);
    END LOOP;
    DBMS_JOB.SUBMIT(V_JOB,
    WHAT => 'BEGIN ETLRESUFOOD(TRUNC(SYSDATE-90), TRUNC(SYSDATE+30) ); END;',
    NEXT_DATE => TO_DATE('22/04/2014 23:00:00','dd/mm/yyyy hh24:mi:ss'),
    INTERVAL => 'SYSDATE + 1');
COMMIT;
END; 
/