DROP TYPE tabela_comensais_dia
/

DROP TYPE tipo_comensais_dia
/
/*OBJETO CRIADO PARA BUSCAR COMENSAIS POR CLIENTE/PONTO DE ENTREGA QUE SERA USADO NO CONSUMO POR SERVICO*/
CREATE TYPE tipo_comensais_dia AS OBJECT ( 
    DTCARDAPIO   DATE,
    CDCLIENTE    VARCHAR2(21),
    CDDESTFILI   VARCHAR2(3),
    QTCOMENSAIS  FLOAT(126),
    QTESTITURNO1 FLOAT(126),
    QTESTITURNO2 FLOAT(126),
    QTESTITURNO3 FLOAT(126),
    QTESTITURNO4 FLOAT(126)
  )
/  
CREATE TYPE tabela_comensais_dia AS TABLE OF tipo_comensais_dia           
/
create or replace PROCEDURE CONSUMO_PLANEJADO_PLA
  (P_FILIAL       IN VARCHAR2,
   P_SERVICOS     IN CLOB,
   P_DTINICIAL    IN DATE,
   P_DTFINAL      IN DATE,
   P_IDARQUIVO    IN VARCHAR2,
   P_IDPRODUTOS   IN VARCHAR2,
   P_IDSEPPRATO   IN VARCHAR2,
   P_PEACRESCIMO  IN NUMBER,
   P_IDARREDOND   IN VARCHAR2,
   P_NRCONSPLAN   IN VARCHAR2,
   P_CDPRODUTOINI IN VARCHAR2,
   P_CDPRODUTOFIN IN VARCHAR2,
   P_CDOPERADOR   IN VARCHAR2,
   P_STDTINICIAL  IN VARCHAR2 DEFAULT NULL,
   P_STDTFINAL    IN VARCHAR2 DEFAULT NULL) IS
   
   TYPE REC_CARDTYPE IS RECORD (
      CDFILIAL     VARCHAR2(4),
      CDSERVFILI   VARCHAR2(5),
      DTCARDAPIO   DATE,
      QTCOMESTICAR FLOAT(126), 
      CDDIETPAD    VARCHAR2(4), 
      QTESTITURNO1 FLOAT(126), 
      QTESTITURNO2 FLOAT(126), 
      QTESTITURNO3 FLOAT(126), 
      QTESTITURNO4 FLOAT(126), 
      CDPRODUTO    VARCHAR2(20), 
      CDPRATO      VARCHAR2(20), 
      CDFILAUXPRAT VARCHAR2(4), 
      CDTIPOPRAT   VARCHAR2(2),
      VRPECONSCARD FLOAT(126), 
      QTPRODUTO    FLOAT(126), 
      SGUNIDADE    VARCHAR2(10), 
      VRPEFATCOR   FLOAT(126), 
      HRTEMPPREP   VARCHAR2(5), 
      CDAPRERECE   VARCHAR2(3), 
      QTCOMPLPROD  FLOAT(126), 
      QTBRUTAUNR   FLOAT(126), 
      IDTPREQPROD  VARCHAR2(1), 
      CDCLIENTE    VARCHAR2(21), 
      CDDESTFILI   VARCHAR2(3), 
      QTCOMESTICLI FLOAT(126)
   );
   TYPE CUR_CARDTYPE IS REF CURSOR RETURN REC_CARDTYPE;
   C_CARD   REC_CARDTYPE;
   CUR_CARD CUR_CARDTYPE;
   
   V_IDCARDAPIO   VARCHAR2(1);
   V_IDCONSFIXO   VARCHAR2(1);
   V_IDCONSPERC   VARCHAR2(1);
   V_DTLIMITE     DATE;
   V_HRLIMITE     VARCHAR2(4);
   V_CDTPRCONSFIX VARCHAR2(2);
   V_CDFILCONSFIX VARCHAR2(4);
   V_CDPRACONSFIX VARCHAR2(20);
   V_CDTPRCONSPER VARCHAR2(2);
   V_CDFILCONSPER VARCHAR2(4);
   V_CDPRACONSPER VARCHAR2(20);
   
   V_CDTIPOPRAT_CONSPLAN   VARCHAR2(2);
   V_CDTIPOPRAT_PREVRETI   VARCHAR2(2);
   V_CDFILAUXPRAT_CONSPLAN VARCHAR2(4);
   V_CDFILAUXPRAT_PREVRETI VARCHAR2(4);
   V_CDPRATO_CONSPLAN      VARCHAR2(20);
   V_CDPRATO_PREVRETI      VARCHAR2(20);
   V_CDSETORCOZ_CONSPLAN   VARCHAR2(2);
   
   V_QTPRODUTO    FLOAT(126);
   V_QTBRUTAUNR   FLOAT(126);
   V_QTPRODTURNO1 FLOAT(126);
   V_QTPRODTURNO2 FLOAT(126);
   V_QTPRODTURNO3 FLOAT(126);
   V_QTPRODTURNO4 FLOAT(126);
   
   V_QTPRODUTO_CONSPLAN    FLOAT(126);
   V_QTPRODTURNO1_CONSPLAN FLOAT(126);
   V_QTPRODTURNO2_CONSPLAN FLOAT(126);
   V_QTPRODTURNO3_CONSPLAN FLOAT(126);
   V_QTPRODTURNO4_CONSPLAN FLOAT(126);
   
   V_TAM_MASCARA    NUMBER;
   V_TODOS_SERV     VARCHAR2(1);
   V_QTTURNO1       NUMBER;
   V_QTTURNO2       NUMBER;
   V_QTTURNO3       NUMBER;
   V_QTTURNO4       NUMBER;
   V_FILIAL_INATIVA VARCHAR2(1);

   CONSUMO_P        VARCHAR2(1);
   CONSUMO_F        VARCHAR2(1);
   V_IDTIPOCONS     VARCHAR2(1);

   /*VARIAVEIS PARA CONTROLE NA PREVRETI*/
   PR_CDSERVFILI     VARCHAR2(5);
   PR_DTCARDAPIO     DATE;
   PR_CDPRODUTO      VARCHAR2(20);
   PR_CDPRATO        VARCHAR2(20);
   PR_CDFILAUXPRAT   VARCHAR2(4);
   PR_CDTIPOPRAT     VARCHAR2(2);
   PR_CDDIETPAD      VARCHAR2(4);   
   PR_DTLIMITERETI   DATE; 
   PR_HRLIMITERETI   VARCHAR2(4);
   PR_QTPREVRETI     FLOAT(126);
   PR_QTPRERETT1     FLOAT(126);
   PR_QTPRERETT2     FLOAT(126);
   PR_QTPRERETT3     FLOAT(126);
   PR_QTPRERETT4     FLOAT(126);
   PR_QTPREVRETISA   FLOAT(126); 
   PR_QTPRERETT1SA   FLOAT(126); 
   PR_QTPRERETT2SA   FLOAT(126); 
   PR_QTPRERETT3SA   FLOAT(126); 
   PR_QTPRERETT4SA   FLOAT(126);
   PR_VRPEFATCORRETI FLOAT(126); 
   PR_QTPREVBRUTAUNR FLOAT(126); 
   PR_SGPREVUNIADIC  VARCHAR2(5);
   PR_IDTIPOREQUI     VARCHAR2(1);
   PR_NRREQUISICAO   VARCHAR2(4);
   
   /*VARIAVEIS PARA CONTROLE NA CONSPLAN*/
   CP_CDSERVFILI     VARCHAR2(5);
   CP_DTCARDAPIO     DATE;
   CP_CDPRODUTO      VARCHAR2(20);
   CP_CDPRATO        VARCHAR2(20);
   CP_CDFILAUXPRAT   VARCHAR2(4);
   CP_CDTIPOPRAT     VARCHAR2(2);
   CP_CDCLIENTE      VARCHAR2(21);
   CP_CDDESTFILI     VARCHAR2(3);
   CP_CDDIETPAD      VARCHAR2(4);   
   CP_DTLIMITECPLA    DATE;
   CP_HRLIMITECPLA    VARCHAR2(4);
   CP_CDSETOCONSPL    VARCHAR2(3);
   CP_QTCONSPLAN      FLOAT(126);
   CP_QTCONSPLANT1    FLOAT(126);
   CP_QTCONSPLANT2    FLOAT(126);
   CP_QTCONSPLANT3    FLOAT(126);
   CP_QTCONSPLANT4    FLOAT(126);
   CP_QTCONSPLANSA    FLOAT(126);
   CP_QTCONPLAT1SA    FLOAT(126);
   CP_QTCONPLAT2SA    FLOAT(126);
   CP_QTCONPLAT3SA    FLOAT(126);
   CP_QTCONPLAT4SA    FLOAT(126);
   CP_VRPECONSPLAN    FLOAT(126);
   CP_QTCONSBRUTAUNR  FLOAT(126);
   CP_SGCONSUNIADIC   VARCHAR(5);
   CP_VRPEFATCORCONS  FLOAT(126);
   CP_CDAPRECONSPL    VARCHAR2(5);
   CP_QTCOMPLPRODCPLA FLOAT(126);
   CP_IDTPREQPROD     VARCHAR2(1);
   CP_QTCOMESTCPLA    FLOAT(126);
   CP_QTCOMESTDIE     FLOAT(126);
   CP_QTUTILCENTRAL   FLOAT(126);
   
   V_PRIMVEZ_PREV BOOLEAN  := TRUE;
   V_PRIMVEZ_CONSP BOOLEAN := TRUE;
   V_QTCOMENSAIS_PRATO FLOAT(126);
   V_BOOL BOOLEAN;
   V_EXISTE_CP BOOLEAN := FALSE;
   V_EXISTE_PR BOOLEAN := FALSE;
   V_EXISTE_COMENSAL BOOLEAN := FALSE;
   V_EXISTE_PT_ENTREGA BOOLEAN := FALSE;
   comensais_dia tabela_comensais_dia;
   
   PROCEDURE OPEN_CARDAPIO (CUR_CARD IN OUT CUR_CARDTYPE, P_CDFILIAL IN VARCHAR2, P_CDSERVFILI IN VARCHAR2, P_DTCARDAPIO IN DATE, P_CDPRODUTOINI IN VARCHAR2, P_CDPRODUTOFIN IN VARCHAR2, P_IDCLIENTE IN VARCHAR2) IS
   BEGIN
      IF P_IDCLIENTE = 'S' THEN /*SELECT PARA BUSCAR PRATOS QUEBRANDO POR CLIENTE E PONTO DE ENTREGA, NESTE CASO NAO RETORNA SERVICOS COM DIETA*/
         OPEN CUR_CARD FOR SELECT R.CDFILIAL, R.CDSERVFILI, R.DTCARDAPIO, R.QTCOMESTICAR, NULL AS CDDIETPAD, R.QTESTITURNO1, R.QTESTITURNO2, R.QTESTITURNO3, R.QTESTITURNO4, R.CDPRODUTO, R.CDPRATO, R.CDFILAUXPRAT, R.CDTIPOPRAT, 
                                  R.VRPECONSCARD, R.QTPRODUTO, R.SGUNIDADE, R.VRPEFATCOR, R.HRTEMPPREP, R.CDAPRERECE, R.QTCOMPLPROD, R.QTBRUTAUNR, R.IDTPREQPROD, CL.CDCLIENTE, CL.CDDESTFILI, CL.QTCOMESTICLI 
                             FROM PRODUTO INNER JOIN (SELECT CARDADIA.CDFILIAL, CARDADIA.CDSERVFILI, CARDADIA.NRCARDAPIO, CARDADIA.DTCARDAPIO, CARDADIA.QTCOMESTICAR, CARDADIA.QTESTITURNO1, CARDADIA.QTESTITURNO2,
                                                           CARDADIA.QTESTITURNO3, CARDADIA.QTESTITURNO4, COMPCARD.CDTIPOPRAT, COMPCARD.VRPECONSCARD, RECESERV.CDPRATO, RECESERV.CDFILAUXPRAT, RECESERV.CDPRODUTO, RECESERV.QTBRUTASE AS QTPRODUTO,
                                                           RECESERV.SGUNIDADE, RECESERV.VRPEFATCORSE AS VRPEFATCOR, RECESERV.HRTEMPPREPSE AS HRTEMPPREP, RECESERV.CDAPRERECE, RECESERV.QTCOMPLPRODSERV AS QTCOMPLPROD, RECESERV.QTBRUTASEUNR AS QTBRUTAUNR,
                                                           RECESERV.IDTPREQPRODSERV AS IDTPREQPROD
                                                      FROM RECESERV INNER JOIN COMPCARD ON RECESERV.CDFILAUXPRAT = COMPCARD.CDFILAUXPRAT AND RECESERV.CDPRATO = COMPCARD.CDPRATO AND RECESERV.CDFILIAL = COMPCARD.CDFILIAL
                                                                    INNER JOIN CARDADIA ON CARDADIA.NRCARDAPIO = COMPCARD.NRCARDAPIO AND CARDADIA.CDFILIAL = COMPCARD.CDFILIAL AND
                                                                                           RECESERV.CDFILIAL = CARDADIA.CDFILIAL AND RECESERV.CDSERVFILI = CARDADIA.CDSERVFILI
                                                     WHERE (CARDADIA.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDSERVFILI = P_CDSERVFILI) AND
                                                           (CARDADIA.DTCARDAPIO = P_DTCARDAPIO) AND
                                                           (CARDADIA.QTCOMESTICAR > 0)                 
                                                    UNION ALL
                                                    SELECT CARDADIA.CDFILIAL, CARDADIA.CDSERVFILI, CARDADIA.NRCARDAPIO, CARDADIA.DTCARDAPIO, CARDADIA.QTCOMESTICAR, CARDADIA.QTESTITURNO1, CARDADIA.QTESTITURNO2, 
                                                           CARDADIA.QTESTITURNO3, CARDADIA.QTESTITURNO4, COMPCARD.CDTIPOPRAT, COMPCARD.VRPECONSCARD, RECEFILI.CDPRATO, RECEFILI.CDFILAUXPRAT, RECEFILI.CDPRODUTO, RECEFILI.QTBRUTALO AS QTPRODUTO,
                                                           RECEFILI.SGUNIDADE, RECEFILI.VRPEFATCORLO AS VRPEFATCOR, RECEFILI.HRTEMPPREPLO AS HRTEMPPREP, RECEFILI.CDAPRERECE, RECEFILI.QTCOMPLPRODFILI AS QTCOMPLPROD, RECEFILI.QTBRUTALOUNR AS QTBRUTAUNR,
                                                           RECEFILI.IDTPREQPRODFILI AS IDTPREQPROD
                                                      FROM RECEFILI INNER JOIN COMPCARD ON RECEFILI.CDFILAUXPRAT = COMPCARD.CDFILAUXPRAT AND RECEFILI.CDPRATO = COMPCARD.CDPRATO AND RECEFILI.CDFILIAL = COMPCARD.CDFILIAL
                                                                    INNER JOIN CARDADIA ON CARDADIA.NRCARDAPIO = COMPCARD.NRCARDAPIO AND CARDADIA.CDFILIAL = COMPCARD.CDFILIAL 
                                                     WHERE (RECEFILI.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDSERVFILI = P_CDSERVFILI) AND
                                                           (CARDADIA.DTCARDAPIO = P_DTCARDAPIO) AND
                                                           (CARDADIA.QTCOMESTICAR > 0) AND
                                                           NOT EXISTS (SELECT CDPRATO FROM RECESERV WHERE (CDFILAUXPRAT = RECEFILI.CDFILAUXPRAT) AND (CDPRATO = RECEFILI.CDPRATO) AND (CDFILIAL = P_CDFILIAL) AND (CDSERVFILI = P_CDSERVFILI))
                                                    UNION ALL
                                                    SELECT CARDADIA.CDFILIAL, CARDADIA.CDSERVFILI, CARDADIA.NRCARDAPIO, CARDADIA.DTCARDAPIO, CARDADIA.QTCOMESTICAR, CARDADIA.QTESTITURNO1, CARDADIA.QTESTITURNO2, 
                                                           CARDADIA.QTESTITURNO3, CARDADIA.QTESTITURNO4, COMPCARD.CDTIPOPRAT, COMPCARD.VRPECONSCARD, RECEPADR.CDPRATO, RECEPADR.CDFILAUXPRAT, RECEPADR.CDPRODUTO, RECEPADR.QTBRUTAPR AS QTPRODUTO,
                                                           RECEPADR.SGUNIDADE, RECEPADR.VRPEFATCORPR AS VRPEFATCOR, RECEPADR.HRTEMPPREPPR AS HRTEMPPREP, RECEPADR.CDAPRERECE, RECEPADR.QTCOMPLPRODPADR AS QTCOMPLPROD, RECEPADR.QTBRUTAPRUNR AS QTBRUTAUNR,
                                                           RECEPADR.IDTPREQPRODPADR AS IDTPREQPROD
                                                      FROM RECEPADR INNER JOIN COMPCARD ON RECEPADR.CDFILAUXPRAT = COMPCARD.CDFILAUXPRAT AND RECEPADR.CDPRATO = COMPCARD.CDPRATO 
                                                                    INNER JOIN CARDADIA ON CARDADIA.NRCARDAPIO = COMPCARD.NRCARDAPIO AND CARDADIA.CDFILIAL = COMPCARD.CDFILIAL
                                                     WHERE (CARDADIA.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDSERVFILI = P_CDSERVFILI) AND 
                                                           (CARDADIA.DTCARDAPIO = P_DTCARDAPIO) AND
                                                           (CARDADIA.QTCOMESTICAR > 0) AND
                                                           NOT EXISTS (SELECT CDPRATO FROM RECEFILI WHERE (CDFILAUXPRAT = RECEPADR.CDFILAUXPRAT) AND (CDPRATO = RECEPADR.CDPRATO) AND (CDFILIAL = P_CDFILIAL)) AND
                                                           NOT EXISTS (SELECT CDPRATO FROM RECESERV WHERE (CDFILAUXPRAT = RECEPADR.CDFILAUXPRAT) AND (CDPRATO = RECEPADR.CDPRATO) AND (CDFILIAL = P_CDFILIAL) AND (CDSERVFILI = P_CDSERVFILI))
                                                   ) R ON (R.CDPRODUTO = PRODUTO.CDPRODUTO) AND (PRODUTO.CDARVPROD BETWEEN P_CDPRODUTOINI AND P_CDPRODUTOFIN)
                                        INNER JOIN CARDACLI CL ON CL.NRCARDAPIO = R.NRCARDAPIO AND CL.CDFILIAL = R.CDFILIAL AND CL.QTCOMESTICLI > 0
                         ORDER BY R.DTCARDAPIO, R.CDPRODUTO, CL.CDCLIENTE, CL.CDDESTFILI, R.CDPRATO, R.CDFILAUXPRAT, R.CDTIPOPRAT;
      ELSE /*SELECT PARA BUSCAR PRATOS SEM QUEBRAR POR CLIENTE/PONTO DE ENTREGA. PODE TER OU NAO QUEBRA POR DIETA - COMO A DIETA NAO � */
         OPEN CUR_CARD FOR SELECT R.CDFILIAL, R.CDSERVFILI, R.DTCARDAPIO, R.QTCOMESTICAR, R.CDDIETPAD, R.QTESTITURNO1, R.QTESTITURNO2, R.QTESTITURNO3, R.QTESTITURNO4, R.CDPRODUTO, R.CDPRATO, R.CDFILAUXPRAT, R.CDTIPOPRAT, 
                                  R.VRPECONSCARD, R.QTPRODUTO, R.SGUNIDADE, R.VRPEFATCOR, R.HRTEMPPREP, R.CDAPRERECE, R.QTCOMPLPROD, R.QTBRUTAUNR, R.IDTPREQPROD, 'XXX' AS CDCLIENTE, 'XXX' AS CDDESTFILI, R.QTCOMESTICAR AS QTCOMESTICLI 
                             FROM PRODUTO INNER JOIN (SELECT CARDADIA.CDFILIAL, CARDADIA.CDSERVFILI, CARDADIA.NRCARDAPIO, CARDADIA.DTCARDAPIO, CARDADIA.QTCOMESTICAR, CARDADIA.CDDIETPAD, CARDADIA.QTESTITURNO1, CARDADIA.QTESTITURNO2,
                                                           CARDADIA.QTESTITURNO3, CARDADIA.QTESTITURNO4, COMPCARD.CDTIPOPRAT, COMPCARD.VRPECONSCARD, RECESERV.CDPRATO, RECESERV.CDFILAUXPRAT, RECESERV.CDPRODUTO, RECESERV.QTBRUTASE AS QTPRODUTO,
                                                           RECESERV.SGUNIDADE, RECESERV.VRPEFATCORSE AS VRPEFATCOR, RECESERV.HRTEMPPREPSE AS HRTEMPPREP, RECESERV.CDAPRERECE, RECESERV.QTCOMPLPRODSERV AS QTCOMPLPROD, RECESERV.QTBRUTASEUNR AS QTBRUTAUNR,
                                                           RECESERV.IDTPREQPRODSERV AS IDTPREQPROD
                                                      FROM RECESERV INNER JOIN COMPCARD ON RECESERV.CDFILAUXPRAT = COMPCARD.CDFILAUXPRAT AND RECESERV.CDPRATO = COMPCARD.CDPRATO AND RECESERV.CDFILIAL = COMPCARD.CDFILIAL
                                                                    INNER JOIN CARDADIA ON CARDADIA.NRCARDAPIO = COMPCARD.NRCARDAPIO AND CARDADIA.CDFILIAL = COMPCARD.CDFILIAL AND
                                                                                           RECESERV.CDFILIAL = CARDADIA.CDFILIAL AND RECESERV.CDSERVFILI = CARDADIA.CDSERVFILI
                                                     WHERE (CARDADIA.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDSERVFILI = P_CDSERVFILI) AND
                                                           (CARDADIA.DTCARDAPIO = P_DTCARDAPIO) AND
                                                           (CARDADIA.QTCOMESTICAR > 0)                 
                                                    UNION ALL
                                                    SELECT CARDADIA.CDFILIAL, CARDADIA.CDSERVFILI, CARDADIA.NRCARDAPIO, CARDADIA.DTCARDAPIO, CARDADIA.QTCOMESTICAR,  CARDADIA.CDDIETPAD, CARDADIA.QTESTITURNO1, CARDADIA.QTESTITURNO2, 
                                                           CARDADIA.QTESTITURNO3, CARDADIA.QTESTITURNO4, COMPCARD.CDTIPOPRAT, COMPCARD.VRPECONSCARD, RECEFILI.CDPRATO, RECEFILI.CDFILAUXPRAT, RECEFILI.CDPRODUTO, RECEFILI.QTBRUTALO AS QTPRODUTO,
                                                           RECEFILI.SGUNIDADE, RECEFILI.VRPEFATCORLO AS VRPEFATCOR, RECEFILI.HRTEMPPREPLO AS HRTEMPPREP, RECEFILI.CDAPRERECE, RECEFILI.QTCOMPLPRODFILI AS QTCOMPLPROD, RECEFILI.QTBRUTALOUNR AS QTBRUTAUNR,
                                                           RECEFILI.IDTPREQPRODFILI AS IDTPREQPROD
                                                      FROM RECEFILI INNER JOIN COMPCARD ON RECEFILI.CDFILAUXPRAT = COMPCARD.CDFILAUXPRAT AND RECEFILI.CDPRATO = COMPCARD.CDPRATO AND RECEFILI.CDFILIAL = COMPCARD.CDFILIAL
                                                                    INNER JOIN CARDADIA ON CARDADIA.NRCARDAPIO = COMPCARD.NRCARDAPIO AND CARDADIA.CDFILIAL = COMPCARD.CDFILIAL 
                                                     WHERE (RECEFILI.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDSERVFILI = P_CDSERVFILI) AND
                                                           (CARDADIA.DTCARDAPIO = P_DTCARDAPIO) AND
                                                           (CARDADIA.QTCOMESTICAR > 0) AND
                                                           NOT EXISTS (SELECT CDPRATO FROM RECESERV WHERE (CDFILAUXPRAT = RECEFILI.CDFILAUXPRAT) AND (CDPRATO = RECEFILI.CDPRATO) AND (CDFILIAL = P_CDFILIAL) AND (CDSERVFILI = P_CDSERVFILI))
                                                    UNION ALL
                                                    SELECT CARDADIA.CDFILIAL, CARDADIA.CDSERVFILI, CARDADIA.NRCARDAPIO, CARDADIA.DTCARDAPIO, CARDADIA.QTCOMESTICAR, CARDADIA.CDDIETPAD, CARDADIA.QTESTITURNO1, CARDADIA.QTESTITURNO2, 
                                                           CARDADIA.QTESTITURNO3, CARDADIA.QTESTITURNO4, COMPCARD.CDTIPOPRAT, COMPCARD.VRPECONSCARD, RECEPADR.CDPRATO, RECEPADR.CDFILAUXPRAT, RECEPADR.CDPRODUTO, RECEPADR.QTBRUTAPR AS QTPRODUTO,
                                                           RECEPADR.SGUNIDADE, RECEPADR.VRPEFATCORPR AS VRPEFATCOR, RECEPADR.HRTEMPPREPPR AS HRTEMPPREP, RECEPADR.CDAPRERECE, RECEPADR.QTCOMPLPRODPADR AS QTCOMPLPROD, RECEPADR.QTBRUTAPRUNR AS QTBRUTAUNR,
                                                           RECEPADR.IDTPREQPRODPADR AS IDTPREQPROD
                                                      FROM RECEPADR INNER JOIN COMPCARD ON RECEPADR.CDFILAUXPRAT = COMPCARD.CDFILAUXPRAT AND RECEPADR.CDPRATO = COMPCARD.CDPRATO 
                                                                    INNER JOIN CARDADIA ON CARDADIA.NRCARDAPIO = COMPCARD.NRCARDAPIO AND CARDADIA.CDFILIAL = COMPCARD.CDFILIAL
                                                     WHERE (CARDADIA.CDFILIAL = P_CDFILIAL) AND
                                                           (CARDADIA.CDSERVFILI = P_CDSERVFILI) AND 
                                                           (CARDADIA.DTCARDAPIO = P_DTCARDAPIO) AND
                                                           (CARDADIA.QTCOMESTICAR > 0) AND
                                                           NOT EXISTS (SELECT CDPRATO FROM RECEFILI WHERE (CDFILAUXPRAT = RECEPADR.CDFILAUXPRAT) AND (CDPRATO = RECEPADR.CDPRATO) AND (CDFILIAL = P_CDFILIAL)) AND
                                                           NOT EXISTS (SELECT CDPRATO FROM RECESERV WHERE (CDFILAUXPRAT = RECEPADR.CDFILAUXPRAT) AND (CDPRATO = RECEPADR.CDPRATO) AND (CDFILIAL = P_CDFILIAL) AND (CDSERVFILI = P_CDSERVFILI))
                                                   ) R ON (R.CDPRODUTO = PRODUTO.CDPRODUTO) AND (PRODUTO.CDARVPROD BETWEEN P_CDPRODUTOINI AND P_CDPRODUTOFIN)
                         ORDER BY R.DTCARDAPIO, R.CDPRODUTO, R.CDPRATO, R.CDFILAUXPRAT, R.CDTIPOPRAT, R.CDDIETPAD;
      END IF;
   END OPEN_CARDAPIO;
   
   /*PROCEDURE PARA REALIZAR ARREDONDAMENTO DE PRODUTOS*/   
   PROCEDURE ARREDONDAMENTO (V_CDPRODUTO IN VARCHAR2, V_QTPRODUTO IN OUT FLOAT, V_QTPRODUTOT1 IN OUT FLOAT, V_QTPRODUTOT2 IN OUT FLOAT, V_QTPRODUTOT3 IN OUT FLOAT, V_QTPRODUTOT4 IN OUT FLOAT) IS
      V_ARRED        NUMBER;
      V_VRARREDREQ         PRODUTO.VRARREDREQ%TYPE;
      V_VRARREDCMP         PRODUTO.VRARREDCMP%TYPE;
   BEGIN
      IF (P_IDARREDOND = 'S') OR (P_IDARREDOND = 'C') THEN 
         SELECT MAX(VRARREDREQ), MAX(VRARREDCMP)
           INTO V_VRARREDREQ, V_VRARREDCMP
           FROM PRODUTO
          WHERE CDPRODUTO = V_CDPRODUTO;

         V_ARRED := CASE WHEN P_IDARREDOND = 'S' THEN V_VRARREDREQ ELSE V_VRARREDCMP END;

         IF NOT (V_ARRED IS NULL) AND (V_ARRED <> 0) THEN
            IF (V_QTPRODUTO > 0) AND (MOD(V_QTPRODUTO, V_ARRED) > 0) THEN
               V_QTPRODUTO := (FLOOR(V_QTPRODUTO/V_ARRED) + 1) * V_ARRED;
            END IF;
            IF (V_QTPRODUTOT1 > 0) AND (MOD(V_QTPRODUTOT1, V_ARRED) > 0) THEN
               V_QTPRODUTOT1 := (FLOOR(V_QTPRODUTOT1/V_ARRED) + 1) * V_ARRED;
            END IF; 
            IF (V_QTPRODUTOT2 > 0) AND (MOD(V_QTPRODUTOT2, V_ARRED) > 0) THEN
               V_QTPRODUTOT2 := (FLOOR(V_QTPRODUTOT2/V_ARRED) + 1) * V_ARRED;
            END IF; 
            IF (V_QTPRODUTOT3 > 0) AND (MOD(V_QTPRODUTOT3, V_ARRED) > 0) THEN
               V_QTPRODUTOT3 := (FLOOR(V_QTPRODUTOT3/V_ARRED) + 1) * V_ARRED;
            END IF; 
            IF (V_QTPRODUTOT4 > 0) AND (MOD(V_QTPRODUTOT4, V_ARRED) > 0) THEN
               V_QTPRODUTOT4 := (FLOOR(V_QTPRODUTOT4/V_ARRED) + 1) * V_ARRED;
            END IF;                         
         END IF; 
      END IF; 
   END;
   
   /*PROCEDURE PARA CONTROLE DO NRO DE SEQUENCIAL DO ITEM DE REQUISICAO - QDO FOR POR PRODUTO, NAO CONTROLA = 0000 SE FOR POR PRATO ENTAO ZERA A CADA TIPO DE REQUISICAO, DATA, SERVICO*/
   FUNCTION RETORNA_PROX_NRREQUISICAO (P_IDUTRETIPRAT IN VARCHAR2, P_CDSERVFILI IN VARCHAR2, P_DATA IN DATE, P_TIPOREQUI VARCHAR2) RETURN VARCHAR2 IS
   BEGIN
      IF P_IDUTRETIPRAT = 'N' THEN /*SE FAZ REQUISICAO POR PRODUTO, NAO CONTROLA SEQUENCIAL*/
         PR_NRREQUISICAO := '0000';
      ELSE
         /*SE FAZ REQUISICAO POR PRATO ENTAO ZERA O SEQUENCIAL A CADA VEZ QUE TROCAR DE SERVICO, DATA OU TIPO DA REQUISICAO(CFP)*/
         IF P_CDSERVFILI <> PR_CDSERVFILI OR PR_DTCARDAPIO <> P_DATA OR PR_IDTIPOREQUI <> P_TIPOREQUI THEN 
            PR_NRREQUISICAO := '0000';
            PR_CDSERVFILI := P_CDSERVFILI;
            PR_DTCARDAPIO := P_DATA;
            PR_IDTIPOREQUI := P_TIPOREQUI;
         ELSE
            PR_NRREQUISICAO := LPAD(TO_CHAR(TO_NUMBER(PR_NRREQUISICAO) + 1), 4, 0);
         END IF;
      END IF;
      RETURN PR_NRREQUISICAO;
   END;
   
   /*PROCEDURE PARA CONTROLE DAS VARIAVEIS REFERENTE A PREVRETI. A CADA NOVO PRODUTO/PRATO AS VARIAVEIS SAO ATUALIZADAS. CASO O PRODUTO NO LOOP SE REPITA, AS QUANTIDADES SAO ACUMULADAS PARA ENTAO INSERIR APENAS UMA VEZ NA TABELA PREVRETI*/
   FUNCTION VERIFICA_PREVRETI_QUEBRA (P_IDUTRETIPRAT IN VARCHAR2, P_CDSERVFILI IN VARCHAR2, P_DTCARDAPIO IN DATE, P_CDPRODUTO IN VARCHAR2, P_CDFILAUXPRAT IN VARCHAR2, P_CDPRATO IN VARCHAR2, P_CDTIPOPRAT IN VARCHAR2, P_DTLIMITERETI DATE,P_HRLIMITERETI VARCHAR2,
   P_QTPREVRETI FLOAT, P_QTPRERETT1 FLOAT, P_QTPRERETT2 FLOAT, P_QTPRERETT3 FLOAT, P_QTPRERETT4 FLOAT, P_VRPEFATCORRETI FLOAT, P_QTPREVBRUTAUNR FLOAT, P_SGPREVUNIADIC VARCHAR2, P_CDDIETPAD IN VARCHAR2) RETURN BOOLEAN IS
   BEGIN
      IF V_PRIMVEZ_PREV THEN
         V_PRIMVEZ_PREV    := FALSE;
         PR_CDSERVFILI      := P_CDSERVFILI;
         PR_DTCARDAPIO      := P_DTCARDAPIO;
         PR_CDPRODUTO       := P_CDPRODUTO;
         PR_CDFILAUXPRAT    := CASE WHEN P_IDUTRETIPRAT = 'S' THEN P_CDFILAUXPRAT ELSE NULL END;
         PR_CDPRATO         := CASE WHEN P_IDUTRETIPRAT = 'S' THEN P_CDPRATO ELSE NULL END;
         PR_CDTIPOPRAT      := CASE WHEN P_IDUTRETIPRAT = 'S' THEN P_CDTIPOPRAT ELSE NULL END;
         PR_CDDIETPAD       := CASE WHEN P_IDARQUIVO = 'A' THEN NULL ELSE P_CDDIETPAD END;  /*SE INSERE SOMENTE NA PREVRETI ENTAO VAI INSERIR QUEBRANDO AS QTDE POR DIETA (OBS PARA MANTER IGUAL A ORIGINAL)*/
         PR_DTLIMITERETI   := P_DTLIMITERETI; 
         PR_HRLIMITERETI   := P_HRLIMITERETI;
         PR_QTPREVRETI     := P_QTPREVRETI;
         PR_QTPRERETT1     := P_QTPRERETT1;
         PR_QTPRERETT2     := P_QTPRERETT2;
         PR_QTPRERETT3     := P_QTPRERETT3;
         PR_QTPRERETT4     := P_QTPRERETT4;
         PR_QTPREVRETISA   := P_QTPREVRETI;
         PR_QTPRERETT1SA   := P_QTPRERETT1;
         PR_QTPRERETT2SA   := P_QTPRERETT2;
         PR_QTPRERETT3SA   := P_QTPRERETT3;   
         PR_QTPRERETT4SA   := P_QTPRERETT4;
         PR_VRPEFATCORRETI := P_VRPEFATCORRETI;
         PR_QTPREVBRUTAUNR := P_QTPREVBRUTAUNR;
         PR_SGPREVUNIADIC  := P_SGPREVUNIADIC;
         RETURN FALSE;
      ELSE
         IF ((P_IDUTRETIPRAT = 'S' AND P_DTCARDAPIO = PR_DTCARDAPIO AND P_CDPRODUTO = PR_CDPRODUTO AND P_CDFILAUXPRAT = PR_CDFILAUXPRAT AND P_CDPRATO = PR_CDPRATO AND P_CDTIPOPRAT = PR_CDTIPOPRAT AND
             (P_IDARQUIVO = 'A' OR (P_IDARQUIVO = 'P' AND NVL(PR_CDDIETPAD,'_') = NVL(P_CDDIETPAD,'_')))) OR
             (P_IDUTRETIPRAT = 'N' AND P_DTCARDAPIO = PR_DTCARDAPIO AND P_CDSERVFILI = PR_CDSERVFILI AND P_CDPRODUTO = PR_CDPRODUTO)) THEN
               PR_DTLIMITERETI   := CASE WHEN P_DTLIMITERETI < PR_DTLIMITERETI THEN P_DTLIMITERETI ELSE PR_DTLIMITERETI END; 
               PR_HRLIMITERETI   := CASE WHEN P_DTLIMITERETI < PR_DTLIMITERETI THEN P_HRLIMITERETI ELSE PR_HRLIMITERETI END;
               PR_QTPREVRETI     := PR_QTPREVRETI + P_QTPREVRETI;
               PR_QTPRERETT1     := PR_QTPRERETT1 + P_QTPRERETT1;
               PR_QTPRERETT2     := PR_QTPRERETT2 + P_QTPRERETT2;
               PR_QTPRERETT3     := PR_QTPRERETT3 + P_QTPRERETT3;
               PR_QTPRERETT4     := PR_QTPRERETT4 + P_QTPRERETT4;
               PR_QTPREVRETISA   := PR_QTPREVRETI;
               PR_QTPRERETT1SA   := PR_QTPRERETT1;
               PR_QTPRERETT2SA   := PR_QTPRERETT2;
               PR_QTPRERETT3SA   := PR_QTPRERETT3;   
               PR_QTPRERETT4SA   := PR_QTPRERETT4; 
               PR_QTPREVBRUTAUNR := PR_QTPREVBRUTAUNR + P_QTPREVBRUTAUNR;
               RETURN FALSE;
         ELSE 
            RETURN TRUE;
         END IF;
      END IF;
   END;
   
   /*REALIZA INSERT NA TABELA PREVRETI DE ACORDO COM AS VARIAVEIS QUE JA FORAM ATUALIZADAS*/
   PROCEDURE INSERE_PREVRETI(P_CDFILIAL IN VARCHAR2, P_IDPREVRETI IN VARCHAR2, P_IDPREVTPPRAT IN VARCHAR2, P_CDOPERADOR IN VARCHAR2) AS
   BEGIN
      INSERT INTO PREVRETI (
         CDFILIAL, CDSERVFILI, DTPREVRETI, NRREQUEXTR, IDPREVRETI, CDPRODUTO, DTLIMITERETI, HRLIMITERETI, NRPRPREVRETI, QTPREVRETI, QTPRERETT1, QTPRERETT2, QTPRERETT3, QTPRERETT4, CDOPERADOR, 
         QTPREVRETISA, QTPRERETT1SA, QTPRERETT2SA, QTPRERETT3SA, QTPRERETT4SA, CDTIPOPRAT, CDFILAUXPRAT, CDPRATO, IDPREVTPPRAT, VRPEFATCORRETI, QTPREVBRUTAUNR, SGPREVUNIADIC
         )VALUES (
         P_CDFILIAL, PR_CDSERVFILI, PR_DTCARDAPIO, '0000000000', P_IDPREVRETI, PR_CDPRODUTO, TRUNC(PR_DTLIMITERETI), PR_HRLIMITERETI, PR_NRREQUISICAO, PR_QTPREVRETI, PR_QTPRERETT1, PR_QTPRERETT2, PR_QTPRERETT3, PR_QTPRERETT4, P_CDOPERADOR,
         PR_QTPREVRETISA, PR_QTPRERETT1SA, PR_QTPRERETT2SA, PR_QTPRERETT3SA, PR_QTPRERETT4SA, PR_CDTIPOPRAT, PR_CDFILAUXPRAT, PR_CDPRATO, P_IDPREVTPPRAT, PR_VRPEFATCORRETI, PR_QTPREVBRUTAUNR, PR_SGPREVUNIADIC);
      V_PRIMVEZ_PREV := TRUE;
   END;

   /*PROCEDURE PARA CONTROLE DAS VARIAVEIS REFERENTE A CONSPLAN. A CADA NOVO PRODUTO/PRATO AS VARIAVEIS SAO ATUALIZADAS. CASO O PRODUTO NO LOOP SE REPITA, AS QUANTIDADES SAO ACUMULADAS PARA ENTAO INSERIR APENAS UMA VEZ NA TABELA CONSPLAN*/
   FUNCTION VERIFICA_CONSPLAN_QUEBRA (P_CDFILIAL IN VARCHAR2, P_CDSERVFILI IN VARCHAR2, P_DTCARDAPIO IN DATE, P_CDPRODUTO IN VARCHAR2, P_CDFILAUXPRAT IN VARCHAR2, P_CDPRATO IN VARCHAR2, P_CDTIPOPRAT IN VARCHAR2, P_DTLIMITECPLA DATE, P_HRLIMITECPLA VARCHAR2,
                                      P_QTCONSPLAN FLOAT, P_QTCONSPLANT1 FLOAT, P_QTCONSPLANT2 FLOAT, P_QTCONSPLANT3 FLOAT, P_QTCONSPLANT4 FLOAT, P_VRPEFATCORCONS FLOAT, P_QTCONSBRUTAUNR FLOAT, P_SGCONSUNIADIC VARCHAR2, 
                                      P_CDCLIENTE VARCHAR2, P_CDDESTFILI VARCHAR2, P_CDDIETPAD IN VARCHAR2, P_VRPECONSPLAN IN FLOAT, P_CDAPRECONSPL IN VARCHAR2,
                                      P_QTCOMPLPRODCPLA IN FLOAT, P_IDTPREQPROD IN VARCHAR2, P_QTCOMESTICAR IN FLOAT, P_QTUTILCENTRAL IN FLOAT DEFAULT NULL, P_IDCONSSERV IN VARCHAR DEFAULT 'N') RETURN BOOLEAN IS
   BEGIN
      IF V_PRIMVEZ_CONSP THEN
         V_PRIMVEZ_CONSP    := FALSE;
         CP_CDSERVFILI       := P_CDSERVFILI;
         CP_DTCARDAPIO       := P_DTCARDAPIO;
         CP_CDPRODUTO        := P_CDPRODUTO;
         CP_CDFILAUXPRAT     := CASE WHEN P_IDSEPPRATO <> 'N' OR P_IDCONSSERV = 'S' THEN P_CDFILAUXPRAT ELSE ' ' END; /*SE A CHAMADA A FUNCAO VEIO DA SESSAO DE CONSUMO POR SERVICO, ENTAO CONSIDERA O CDFILAUXPRAT QUE VEIO JA TRATADO*/
         CP_CDPRATO          := CASE WHEN P_IDSEPPRATO <> 'N' OR P_IDCONSSERV = 'S' THEN P_CDPRATO ELSE '          ' END; /*SE A CHAMADA A FUNCAO VEIO DA SESSAO DE CONSUMO POR SERVICO, ENTAO CONSIDERA O CDPRATO QUE VEIO JA TRATADO*/
         CP_CDTIPOPRAT       := CASE WHEN P_IDSEPPRATO <> 'N' OR P_IDCONSSERV = 'S' THEN P_CDTIPOPRAT ELSE '  ' END; /*SE A CHAMADA A FUNCAO VEIO DA SESSAO DE CONSUMO POR SERVICO, ENTAO CONSIDERA O CDTIPOPRAT QUE VEIO JA TRATADO*/
         CP_CDDIETPAD        := P_CDDIETPAD;
         CP_CDCLIENTE        := P_CDCLIENTE;
         CP_CDDESTFILI       := P_CDDESTFILI;
         CP_DTLIMITECPLA    := P_DTLIMITECPLA;
         CP_HRLIMITECPLA    := P_HRLIMITECPLA;
         CP_CDSETOCONSPL    := CASE WHEN P_IDSEPPRATO <> 'S' THEN '  ' ELSE NVL(VERIFICA_SETORCOZ_COZ(P_CDFILIAL, P_CDTIPOPRAT, P_CDPRODUTO),'  ') END; 
         CP_QTCONSPLAN      := P_QTCONSPLAN;
         CP_QTCONSPLANT1    := P_QTCONSPLANT1;
         CP_QTCONSPLANT2    := P_QTCONSPLANT2;
         CP_QTCONSPLANT3    := P_QTCONSPLANT3;
         CP_QTCONSPLANT4    := P_QTCONSPLANT4;
         CP_QTCONSPLANSA    := P_QTCONSPLAN;
         CP_QTCONPLAT1SA    := P_QTCONSPLANT1;
         CP_QTCONPLAT2SA    := P_QTCONSPLANT2;
         CP_QTCONPLAT3SA    := P_QTCONSPLANT3;
         CP_QTCONPLAT4SA    := P_QTCONSPLANT4;
         CP_VRPECONSPLAN    := P_VRPECONSPLAN;
         CP_QTCONSBRUTAUNR  := P_QTCONSBRUTAUNR;
         CP_SGCONSUNIADIC   := P_SGCONSUNIADIC;
         CP_VRPEFATCORCONS  := P_VRPEFATCORCONS;
         CP_CDAPRECONSPL    := P_CDAPRECONSPL;
         CP_QTCOMPLPRODCPLA := P_QTCOMPLPRODCPLA;
         CP_IDTPREQPROD     := P_IDTPREQPROD;
         CP_QTCOMESTCPLA    := P_QTCOMESTICAR; 
         CP_QTCOMESTDIE     := CASE WHEN P_CDDIETPAD IS NOT NULL THEN (P_QTCOMESTICAR * P_VRPECONSPLAN) / 100 ELSE NULL END; /*SO GRAVA COMENSAIS POR DIETA SE DIETA EXISTIR*/
         CP_QTUTILCENTRAL   := P_QTUTILCENTRAL;
         RETURN FALSE;
      ELSE
         IF (P_IDSEPPRATO = 'N' AND CP_CDSERVFILI = P_CDSERVFILI AND CP_DTCARDAPIO = P_DTCARDAPIO AND CP_CDPRODUTO = P_CDPRODUTO AND CP_CDCLIENTE = P_CDCLIENTE AND CP_CDDESTFILI = P_CDDESTFILI) OR 
            (P_IDSEPPRATO IN ('P','S') AND CP_CDSERVFILI = P_CDSERVFILI AND CP_DTCARDAPIO = P_DTCARDAPIO AND CP_CDPRODUTO = P_CDPRODUTO AND CP_CDCLIENTE = P_CDCLIENTE AND CP_CDDESTFILI = P_CDDESTFILI AND
            CP_CDFILAUXPRAT = P_CDFILAUXPRAT AND CP_CDPRATO = P_CDPRATO AND CP_CDTIPOPRAT = P_CDTIPOPRAT) THEN
            
            CP_DTLIMITECPLA    := CASE WHEN P_DTLIMITECPLA < CP_DTLIMITECPLA THEN P_DTLIMITECPLA ELSE CP_DTLIMITECPLA END;       
            CP_HRLIMITECPLA    := TO_CHAR(CP_DTLIMITECPLA, 'HH24MI');
            CP_VRPECONSPLAN    := CASE WHEN P_IDSEPPRATO = 'N' OR P_CDDIETPAD IS NOT NULL THEN CP_VRPECONSPLAN ELSE CP_VRPECONSPLAN + P_VRPECONSPLAN END; /*SE SEPARA POR PRODUTO NAO SOMA O PERCENTUAL PARA MANTER IGUAL A PROCEDURE ORIGINAL*/
            CP_QTCOMESTCPLA    := CASE WHEN P_IDSEPPRATO = 'N' THEN CP_QTCOMESTCPLA ELSE CP_QTCOMESTCPLA + P_QTCOMESTICAR END; /*SE SEPARA POR PRODUTO NAO SOMA OS COMENSAIS PARA MANTER IGUAL A PROCEDURE ORIGINAL*/
            CP_QTCOMESTDIE     := CASE WHEN P_CDDIETPAD IS NULL THEN NULL ELSE CASE WHEN P_IDSEPPRATO = 'N' THEN CP_QTCOMESTDIE ELSE CP_QTCOMESTDIE + (P_QTCOMESTICAR * P_VRPECONSPLAN) / 100 END END;        
            CP_QTCONSPLAN      := CP_QTCONSPLAN + P_QTCONSPLAN;
            CP_QTCONSPLANT1    := CP_QTCONSPLANT1 + P_QTCONSPLANT1;
            CP_QTCONSPLANT2    := CP_QTCONSPLANT2 + P_QTCONSPLANT2;
            CP_QTCONSPLANT3    := CP_QTCONSPLANT3 + P_QTCONSPLANT3;
            CP_QTCONSPLANT4    := CP_QTCONSPLANT4 + P_QTCONSPLANT4;
            CP_QTCONSPLANSA    := CP_QTCONSPLANSA + P_QTCONSPLAN;
            CP_QTCONPLAT1SA    := CP_QTCONPLAT1SA + P_QTCONSPLANT1; 
            CP_QTCONPLAT2SA    := CP_QTCONPLAT2SA + P_QTCONSPLANT2;  
            CP_QTCONPLAT3SA    := CP_QTCONPLAT3SA + P_QTCONSPLANT3;
            CP_QTCONPLAT4SA    := CP_QTCONPLAT4SA + P_QTCONSPLANT4;
            CP_QTCONSBRUTAUNR  := CP_QTCONSBRUTAUNR + P_QTCONSBRUTAUNR;
            CP_QTCOMPLPRODCPLA := CP_QTCOMPLPRODCPLA + P_QTCOMPLPRODCPLA;
            RETURN FALSE;
         ELSE
            RETURN TRUE;
         END IF;
      END IF;   
   END;
   
   /*REALIZA INSERT NA TABELA CONSPLAN DE ACORDO COM AS VARIAVEIS QUE JA FORAM ATUALIZADAS*/
   PROCEDURE INSERE_CONSPLAN(P_NRCONSPLAN IN VARCHAR2, P_CDFILIAL IN VARCHAR2, P_IDCONSPLAN IN VARCHAR2) AS
   BEGIN
      INSERT INTO CONSPLAN (
          NRCONSPLAN, CDFILICPLA, CDSERVCPLA, DTCONSPLAN, IDCONSPLAN, CDFAPRATCPLA, CDPRATCONSPL, CDAPRECONSPL, CDSETOCONSPL, CDPRODCPLA, DTLIMITECPLA, HRLIMITECPLA,
          CDTPPRATCPLA, CDCLIECPLA, CDDESTFICPLA, QTCONSPLAN, QTCONSPLANT1, QTCONSPLANT2, QTCONSPLANT3, QTCONSPLANT4, QTCONSPLANSA, QTCONPLAT1SA, QTCONPLAT2SA, QTCONPLAT3SA, QTCONPLAT4SA,
          VRPECONSPLAN, QTCOMESTCPLA, QTCOMESTDIE, QTCOMPLPRODCPLA, VRPEFATCORCONS, QTCONSBRUTAUNR, SGCONSUNIADIC, IDTPREQPROD, QTUTILCENTRAL)
      VALUES (
          P_NRCONSPLAN, P_CDFILIAL, CP_CDSERVFILI, CP_DTCARDAPIO, P_IDCONSPLAN, CP_CDFILAUXPRAT, CP_CDPRATO, CP_CDAPRECONSPL, CP_CDSETOCONSPL, CP_CDPRODUTO, TRUNC(CP_DTLIMITECPLA), CP_HRLIMITECPLA,
          CP_CDTIPOPRAT, CP_CDCLIENTE, CP_CDDESTFILI, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2,CP_QTCONSPLANT3, CP_QTCONSPLANT4, CP_QTCONSPLANSA, CP_QTCONPLAT1SA, 
          CP_QTCONPLAT2SA, CP_QTCONPLAT3SA, CP_QTCONPLAT4SA,
          CP_VRPECONSPLAN, CP_QTCOMESTCPLA, CP_QTCOMESTDIE, CP_QTCOMPLPRODCPLA, CP_VRPEFATCORCONS, CP_QTCONSBRUTAUNR, CP_SGCONSUNIADIC, CP_IDTPREQPROD, NULL);
      V_PRIMVEZ_CONSP := TRUE;
   END;    
BEGIN
   /* --------------------- IDENTIFICADORES DE CALCULO ---------------------- */
   V_IDCARDAPIO   := SUBSTR(P_IDPRODUTOS, 1, 1);         /* CARDAPIO          */
   V_IDCONSFIXO   := SUBSTR(P_IDPRODUTOS, 2, 1);         /* CONSUMO FIXO      */
   V_IDCONSPERC   := SUBSTR(P_IDPRODUTOS, 3, 1);         /* CONSUMO PERCAPITA */
   PR_IDTIPOREQUI := '_';
   PR_CDSERVFILI := '_';
   PR_DTCARDAPIO := NULL;
   PR_NRREQUISICAO := '0000';
   
   /*SE FILIAL COM CONTRATO RESCINDIDO ENTAO ABORTA O CALCULO*/
   SELECT NVL(IDCNTRRESC,'N')
     INTO V_FILIAL_INATIVA
     FROM FILIAL
    WHERE CDFILIAL = P_FILIAL; 

   IF V_FILIAL_INATIVA = 'S' THEN
      RETURN; 
   END IF;
   
   /* - BUSCA VARIAVEIS DE CONSUMO FIXO E PER CAPITA ------------------- */
   SELECT MAX(CDTPRCONSFIX), MAX(CDFILCONSFIX), MAX(CDPRACONSFIX),
          MAX(CDTPRCONSPER), MAX(CDFILCONSPER), MAX(CDPRACONSPER) 
   INTO V_CDTPRCONSFIX, V_CDFILCONSFIX, V_CDPRACONSFIX, 
        V_CDTPRCONSPER, V_CDFILCONSPER, V_CDPRACONSPER
   FROM PARAMPLANEJA
   WHERE CDFILIAL = P_FILIAL;

   SELECT LENGTH(CDPICTPRAT) - (A.NIVEL - 1) INTO V_TAM_MASCARA
   FROM PARAMGERAL, (SELECT MAX(CDNVPRATO) AS NIVEL FROM PRATO) A;

   /*COMANDO CRIADO POR QUE CAMPOS DO TIPO CLOB NAO PODEM SER COMPARADOS A VALOR EM CONSULTAS SQL*/
   IF P_SERVICOS = 'T' THEN
      V_TODOS_SERV := 'T';
   END IF;   

   /*LOOP NOS SERVICOS FILTRADOS PARA REALIZAR O CALCULO DA CONSPLAN E/OU PREVRETI*/
   FOR CUR_SERVICO IN
      (SELECT
          CDFILIAL,
          CDSERVFILI,
          NVL(IDUTRETIPRAT,'N') AS IDUTRETIPRAT,
          RPAD(NVL(HRINICATEN,0), 4, 0) AS HRINICATEN
       FROM
          SERVICO
       WHERE
          (CDFILIAL = P_FILIAL) AND
          ((INSTR(P_SERVICOS, CDSERVFILI) > 0) OR (V_TODOS_SERV = 'T'))
       ORDER BY
           CDSERVFILI)
   LOOP
      /*LIMPA A PREVRETI CASO ANTES DE INICIAR O SERVICO*/
      IF (P_IDARQUIVO IN ('P', 'A')) THEN
         DELETE FROM PREVRETI
         WHERE
            (CDFILIAL   = CUR_SERVICO.CDFILIAL)            AND
            (CDSERVFILI = CUR_SERVICO.CDSERVFILI)          AND
            (DTPREVRETI BETWEEN P_DTINICIAL AND P_DTFINAL) AND
            (NRREQUEXTR = '0000000000')                    AND
            (IDPREVRETI IN (V_IDCARDAPIO,V_IDCONSFIXO,V_IDCONSPERC));
         COMMIT; /* SOLIC 28995*/   
      END IF;

      /*CONSULTA RETORNA CADA TURNO EXISTENTE NO CADASTRO DO SERVICO*/
      SELECT * 
      INTO V_QTTURNO1, V_QTTURNO2, V_QTTURNO3, V_QTTURNO4
      FROM (
         SELECT CDTURNO, QTCOMESTTSEG 
         FROM TURNOSERV T1
       WHERE CDFILIAL = CUR_SERVICO.CDFILIAL AND 
             CDSERVFILI = CUR_SERVICO.CDSERVFILI
      )
      PIVOT
      (
         COUNT(QTCOMESTTSEG)
         FOR CDTURNO IN ('1' AS TURNO1,'2' AS TURNO2,'3' AS TURNO3,'4' AS TURNO4)
      );

      /***============================================= CONSUMO DE CARDAPIO =====================================================================================**/
      IF (V_IDCARDAPIO = 'C') THEN
         /*PARA CADA DIA IRA DEFINIR SE RODA POR CLIENTE OU SO POR SERVICO/DIETA*/
         FOR C_DATA IN (SELECT DT.DTDATA, MAX(CL.CDCLIENTE) AS CDCLIENTE, MAX(C.CDDIETPAD) AS CDDIETPAD
                           FROM DATA DT INNER JOIN CARDADIA C ON C.CDFILIAL = CUR_SERVICO.CDFILIAL AND C.CDSERVFILI = CUR_SERVICO.CDSERVFILI AND C.DTCARDAPIO = DT.DTDATA
                                        LEFT JOIN CARDACLI CL ON CL.NRCARDAPIO = C.NRCARDAPIO AND CL.CDFILIAL = C.CDFILIAL
                          WHERE DT.DTDATA BETWEEN P_DTINICIAL AND P_DTFINAL AND
                                (NVL2(CL.CDCLIENTE,CL.QTCOMESTICLI,1) > 0) AND (C.QTCOMESTICAR > 0)
                         GROUP BY DT.DTDATA
                         ORDER BY DT.DTDATA
         ) LOOP
            V_EXISTE_CP := FALSE;
            V_EXISTE_PR := FALSE;
            /*COMECA O CALCULO CONSIDERANDO OS DADOS DE CARDAPIO POR SERVICO*/
            IF P_IDARQUIVO IN ('A','P') OR C_DATA.CDCLIENTE IS NULL THEN /*SE VAI INSERIR NA PREVRETI OU NAO TEM CLIENTE*/
               BEGIN
                   OPEN_CARDAPIO(CUR_CARD, CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_DATA.DTDATA, P_CDPRODUTOINI, P_CDPRODUTOFIN, 'N');
                   LOOP
                      FETCH CUR_CARD INTO C_CARD;
                      EXIT WHEN CUR_CARD%NOTFOUND;
                      V_EXISTE_PR := TRUE;
                      V_QTPRODUTO  := (C_CARD.QTPRODUTO  * ((C_CARD.QTCOMESTICAR * C_CARD.VRPECONSCARD)/100)) * (1 + (P_PEACRESCIMO / 100));
                      V_QTBRUTAUNR := (C_CARD.QTBRUTAUNR * ((C_CARD.QTCOMESTICAR * C_CARD.VRPECONSCARD)/100)) * (1 + (P_PEACRESCIMO / 100));
                      
                      V_DTLIMITE := TO_DATE(TO_CHAR(C_CARD.DTCARDAPIO, 'DD/MM/YYYY')||CUR_SERVICO.HRINICATEN, 'DD/MM/YYYYHH24MI'); SUBTHTOD_PLA(V_DTLIMITE,NVL(C_CARD.HRTEMPPREP,'0000'),V_DTLIMITE);
                      V_HRLIMITE := TO_CHAR(V_DTLIMITE, 'HH24MI');
                      
                      V_QTPRODTURNO1 := (CASE WHEN V_QTTURNO1 > 0 AND C_CARD.QTESTITURNO1 > 0 AND C_DATA.CDCLIENTE IS NULL THEN V_QTPRODUTO * (C_CARD.QTESTITURNO1 / C_CARD.QTCOMESTICAR) ELSE 0 END) * (1 + (P_PEACRESCIMO / 100));
                      V_QTPRODTURNO2 := (CASE WHEN V_QTTURNO2 > 0 AND C_CARD.QTESTITURNO2 > 0 AND C_DATA.CDCLIENTE IS NULL THEN V_QTPRODUTO * (C_CARD.QTESTITURNO2 / C_CARD.QTCOMESTICAR) ELSE 0 END) * (1 + (P_PEACRESCIMO / 100));
                      V_QTPRODTURNO3 := (CASE WHEN V_QTTURNO3 > 0 AND C_CARD.QTESTITURNO3 > 0 AND C_DATA.CDCLIENTE IS NULL THEN V_QTPRODUTO * (C_CARD.QTESTITURNO3 / C_CARD.QTCOMESTICAR) ELSE 0 END) * (1 + (P_PEACRESCIMO / 100));
                      V_QTPRODTURNO4 := (CASE WHEN V_QTTURNO4 > 0 AND C_CARD.QTESTITURNO4 > 0 AND C_DATA.CDCLIENTE IS NULL THEN V_QTPRODUTO * (C_CARD.QTESTITURNO4 / C_CARD.QTCOMESTICAR) ELSE 0 END) * (1 + (P_PEACRESCIMO / 100));  
                      
                      IF P_IDARQUIVO IN ('A','P') THEN /*INSERE SOMENTE NA PREVRETI*/                     
                         IF VERIFICA_PREVRETI_QUEBRA(CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, C_CARD.CDPRODUTO, C_CARD.CDFILAUXPRAT, C_CARD.CDPRATO, C_CARD.CDTIPOPRAT, V_DTLIMITE, V_HRLIMITE,
                                                     V_QTPRODUTO, V_QTPRODTURNO1, V_QTPRODTURNO2, V_QTPRODTURNO3, V_QTPRODTURNO4, C_CARD.VRPEFATCOR, V_QTBRUTAUNR, C_CARD.SGUNIDADE, C_CARD.CDDIETPAD) THEN
                            
                            /*ARREDONDA QUANTIDADES DO PRODUTO*/
                            ARREDONDAMENTO (PR_CDPRODUTO, PR_QTPREVRETI, PR_QTPRERETT1, PR_QTPRERETT2, PR_QTPRERETT3, PR_QTPRERETT4);
                            /*RETORNA NRO DE CONTROLE DO SEQUENCIAL DA PRERVETI*/
                            PR_NRREQUISICAO := RETORNA_PROX_NRREQUISICAO(CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, 'C');
                            /*INSERE NA PREVRETI*/   
                            INSERE_PREVRETI (CUR_SERVICO.CDFILIAL, 'C', CUR_SERVICO.IDUTRETIPRAT, P_CDOPERADOR);
                            /*CHAMA NOVAMENTE PARA PODER INCIALIZAR O PROXIMO REGISTRO*/
                            V_BOOL := VERIFICA_PREVRETI_QUEBRA(CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, C_CARD.CDPRODUTO, C_CARD.CDFILAUXPRAT, C_CARD.CDPRATO, C_CARD.CDTIPOPRAT, V_DTLIMITE, V_HRLIMITE,
                                                     V_QTPRODUTO, V_QTPRODTURNO1, V_QTPRODTURNO2, V_QTPRODTURNO3, V_QTPRODTURNO4, C_CARD.VRPEFATCOR, V_QTBRUTAUNR, C_CARD.SGUNIDADE, C_CARD.CDDIETPAD);
                         END IF;                                                 
                      END IF;
                      IF P_IDARQUIVO <> 'P' AND C_DATA.CDCLIENTE IS NULL THEN /*INSERE NA CONSPLAN*/
                         V_EXISTE_CP := TRUE;
                         V_QTCOMENSAIS_PRATO := CASE WHEN C_CARD.CDDIETPAD IS NOT NULL THEN C_CARD.QTCOMESTICAR ELSE (C_CARD.QTCOMESTICAR * C_CARD.VRPECONSCARD)/100 END;
                         
                         IF VERIFICA_CONSPLAN_QUEBRA(CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, C_CARD.CDPRODUTO, C_CARD.CDFILAUXPRAT, C_CARD.CDPRATO, C_CARD.CDTIPOPRAT, V_DTLIMITE, V_HRLIMITE, V_QTPRODUTO, V_QTPRODTURNO1, V_QTPRODTURNO2, 
                                                     V_QTPRODTURNO3, V_QTPRODTURNO4, C_CARD.VRPEFATCOR, V_QTBRUTAUNR, C_CARD.SGUNIDADE, C_CARD.CDCLIENTE, C_CARD.CDDESTFILI, C_CARD.CDDIETPAD, C_CARD.VRPECONSCARD, C_CARD.CDAPRERECE,
                                                     C_CARD.QTCOMPLPROD, C_CARD.IDTPREQPROD, V_QTCOMENSAIS_PRATO) THEN
                            /*ARREDONDA QUANTIDADES DO PRODUTO*/
                            ARREDONDAMENTO (CP_CDPRODUTO, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2, CP_QTCONSPLANT3, CP_QTCONSPLANT4);
                            /*INSERE NA CONSPLAN*/   
                            INSERE_CONSPLAN(P_NRCONSPLAN, CUR_SERVICO.CDFILIAL, 'C');
                            /*CHAMA NOVAMENTE PARA PODER INCIALIZAR O PROXIMO REGISTRO*/
                            V_BOOL := VERIFICA_CONSPLAN_QUEBRA(CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, C_CARD.CDPRODUTO, C_CARD.CDFILAUXPRAT, C_CARD.CDPRATO, C_CARD.CDTIPOPRAT, V_DTLIMITE, V_HRLIMITE, V_QTPRODUTO, V_QTPRODTURNO1, V_QTPRODTURNO2, 
                                                               V_QTPRODTURNO3, V_QTPRODTURNO4, C_CARD.VRPEFATCOR, V_QTBRUTAUNR, C_CARD.SGUNIDADE, C_CARD.CDCLIENTE, C_CARD.CDDESTFILI, C_CARD.CDDIETPAD, C_CARD.VRPECONSCARD, C_CARD.CDAPRERECE,
                                                               C_CARD.QTCOMPLPROD, C_CARD.IDTPREQPROD, V_QTCOMENSAIS_PRATO);                    
                         END IF;                   
                      END IF;
                  END LOOP;
               EXCEPTION
                  WHEN OTHERS THEN
                     RAISE_APPLICATION_ERROR(-20001, SQLERRM || 'Erro calcular os dados da unidade: '|| CUR_SERVICO.CDFILIAL ||' servico: '||CUR_SERVICO.CDSERVFILI||' data: '|| C_DATA.DTDATA);
                     IF CUR_CARD%ISOPEN THEN
                        CLOSE CUR_CARD;
                     END IF;     
               END;
               /*APOS TERMINAR O LOOP FAZ ULTIMO INSERT DO ULTIMO ITEM QUE FOI ATUALIZADO APOS A ULTIMA INSERCAO*/
               IF P_IDARQUIVO IN ('A','P') AND V_EXISTE_PR THEN
                  /*ARREDONDA QUANTIDADES DO PRODUTO*/
                  ARREDONDAMENTO (PR_CDPRODUTO, PR_QTPREVRETI, PR_QTPRERETT1, PR_QTPRERETT2, PR_QTPRERETT3, PR_QTPRERETT4);
                  /*RETORNA NRO DE CONTROLE DO SEQUENCIAL DA PRERVETI*/
                  PR_NRREQUISICAO := RETORNA_PROX_NRREQUISICAO(CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, PR_DTCARDAPIO, 'C');
                  /*INSERE NA PREVRETI*/
                  INSERE_PREVRETI (CUR_SERVICO.CDFILIAL, 'C', CUR_SERVICO.IDUTRETIPRAT, P_CDOPERADOR);
               END IF; 
               IF P_IDARQUIVO <> 'P' AND C_DATA.CDCLIENTE IS NULL AND V_EXISTE_CP THEN
                  /*ARREDONDA QUANTIDADES DO PRODUTO*/
                  ARREDONDAMENTO (CP_CDPRODUTO, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2, CP_QTCONSPLANT3, CP_QTCONSPLANT4);
                  /*INSERE NA CONSPLAN*/   
                  INSERE_CONSPLAN(P_NRCONSPLAN, CUR_SERVICO.CDFILIAL, 'C');
               END IF;               
            END IF;
            V_EXISTE_CP := FALSE;

            IF C_DATA.CDCLIENTE IS NOT NULL AND P_IDARQUIVO <> 'P' THEN  /*POR CLIENTE SE HOUVER SO VAI INSERIR NA CONSPLAN, POIS NA PREVRETI SO INSERE SEM CLIENTE*/
               BEGIN
                  OPEN_CARDAPIO(CUR_CARD, CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_DATA.DTDATA, P_CDPRODUTOINI, P_CDPRODUTOFIN, 'S');
                  LOOP
                     FETCH CUR_CARD INTO C_CARD;
                     EXIT WHEN CUR_CARD%NOTFOUND;
                     V_EXISTE_CP := TRUE;
                     V_QTCOMENSAIS_PRATO := (C_CARD.QTCOMESTICLI * C_CARD.VRPECONSCARD)/100;
                     V_QTPRODUTO  := (C_CARD.QTPRODUTO  * V_QTCOMENSAIS_PRATO) * (1 + (P_PEACRESCIMO / 100));
                     V_QTBRUTAUNR := (C_CARD.QTBRUTAUNR * V_QTCOMENSAIS_PRATO) * (1 + (P_PEACRESCIMO / 100));
                     
                     V_DTLIMITE := TO_DATE(TO_CHAR(C_CARD.DTCARDAPIO, 'DD/MM/YYYY')||CUR_SERVICO.HRINICATEN, 'DD/MM/YYYYHH24MI'); SUBTHTOD_PLA(V_DTLIMITE,NVL(C_CARD.HRTEMPPREP,'0000'),V_DTLIMITE);
                     V_HRLIMITE := TO_CHAR(V_DTLIMITE, 'HH24MI');
                     
                     V_QTPRODTURNO1 := 0; 
                     V_QTPRODTURNO2 := 0; 
                     V_QTPRODTURNO3 := 0; 
                     V_QTPRODTURNO4 := 0;
         
                     IF VERIFICA_CONSPLAN_QUEBRA(CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, C_CARD.CDPRODUTO, C_CARD.CDFILAUXPRAT, C_CARD.CDPRATO, C_CARD.CDTIPOPRAT, V_DTLIMITE, V_HRLIMITE, V_QTPRODUTO, 
                                                 V_QTPRODTURNO1, V_QTPRODTURNO2, V_QTPRODTURNO3, V_QTPRODTURNO4, C_CARD.VRPEFATCOR, V_QTBRUTAUNR, C_CARD.SGUNIDADE, C_CARD.CDCLIENTE, C_CARD.CDDESTFILI, NULL, 
                                                 C_CARD.VRPECONSCARD, C_CARD.CDAPRERECE, C_CARD.QTCOMPLPROD, C_CARD.IDTPREQPROD, V_QTCOMENSAIS_PRATO) THEN
                        
                        /*ARREDONDA QUANTIDADES DO PRODUTO*/
                        ARREDONDAMENTO (CP_CDPRODUTO, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2, CP_QTCONSPLANT3, CP_QTCONSPLANT4);
      
                        /*INSERE NA CONSPLAN*/   
                        INSERE_CONSPLAN(P_NRCONSPLAN, CUR_SERVICO.CDFILIAL, 'C');
                        
                        /*CHAMA NOVAMENTE PARA PODER INCIALIZAR O PROXIMO REGISTRO*/
                        V_BOOL := VERIFICA_CONSPLAN_QUEBRA(CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_CARD.DTCARDAPIO, C_CARD.CDPRODUTO, C_CARD.CDFILAUXPRAT, C_CARD.CDPRATO, C_CARD.CDTIPOPRAT, V_DTLIMITE, V_HRLIMITE, V_QTPRODUTO, 
                                                           V_QTPRODTURNO1, V_QTPRODTURNO2, V_QTPRODTURNO3, V_QTPRODTURNO4, C_CARD.VRPEFATCOR, V_QTBRUTAUNR, C_CARD.SGUNIDADE, C_CARD.CDCLIENTE, C_CARD.CDDESTFILI, NULL, 
                                                           C_CARD.VRPECONSCARD, C_CARD.CDAPRERECE, C_CARD.QTCOMPLPROD, C_CARD.IDTPREQPROD, V_QTCOMENSAIS_PRATO);
                     END IF;      
                  END LOOP;
               EXCEPTION
                  WHEN OTHERS THEN
                     RAISE_APPLICATION_ERROR(-20001, SQLERRM || 'Erro calcular os dados da unidade: '|| CUR_SERVICO.CDFILIAL ||' servico: '||CUR_SERVICO.CDSERVFILI||' data: '|| C_DATA.DTDATA);
                     IF CUR_CARD%ISOPEN THEN
                        CLOSE CUR_CARD;
                     END IF;     
               END;
               IF P_IDARQUIVO <> 'P' AND V_EXISTE_CP THEN
                  /*ARREDONDA QUANTIDADES DO PRODUTO*/
                  ARREDONDAMENTO (CP_CDPRODUTO, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2, CP_QTCONSPLANT3, CP_QTCONSPLANT4);
                  /*INSERE NA CONSPLAN*/   
                  INSERE_CONSPLAN(P_NRCONSPLAN, CUR_SERVICO.CDFILIAL, 'C');
               END IF;
            END IF;
            COMMIT; /*AO FINAL DE CADA DIA DE CADA SERVICO RODA UM COMMIT*/
         END LOOP; /*FIM DO LOOP PARA DATAS DE CARDAPIO*/
      END IF; /* ------------------- FIM CALCULO DOS CARDAPIOS ---------------- */
      
      /***============================================= CONSUMO FIXO E PER CAPITA =====================================================================================**/
      
      /*VAMOS INSERIR AGORA OS PRODUTOS DE CONSUMO POR SERVICO (FIXO E/OU PERCAPITA)*/
      IF (V_IDCONSFIXO = 'F' OR V_IDCONSPERC = 'P') THEN
         /*RETORNA TODOS OS DIAS DO PERIODO INFORMANDO SE E FERIADO OU NAO. SO RETORNA O DIA CASO EXISTA CONSUMO PER CAPITA OU FIXO*/
         FOR C_DATA IN (SELECT DT.DTDATA AS DTCONSUMO, NVL2(F.DTFERIFILI,'S','N') AS IDFERIADO, NVL(IDTCONSSERV,'X') AS ID_SEMCONSUMO, MAX(CA.NRCARDAPIO) AS CARD, 
                               (SELECT MAX(CS.DTCONSSERV) FROM CONSSERV CS WHERE CS.CDFILIAL = CUR_SERVICO.CDFILIAL AND CS.CDSERVFILI = CUR_SERVICO.CDSERVFILI AND CS.DTCONSSERV <= DT.DTDATA AND IDTIPOCONS <> '9') AS DT_VIGENCIA
                          FROM DATA DT LEFT JOIN CARDADIA CA ON CA.DTCARDAPIO = DT.DTDATA AND CA.CDFILIAL = CUR_SERVICO.CDFILIAL AND CA.CDSERVFILI = CUR_SERVICO.CDSERVFILI
                                       LEFT JOIN FERIFILI F ON F.CDFILIAL = CUR_SERVICO.CDFILIAL AND F.DTFERIFILI = DT.DTDATA
                                       LEFT JOIN DIASEMCONS DS ON DS.DTSCONSSERV = DT.DTDATA AND DS.CDFILIAL = CUR_SERVICO.CDFILIAL AND DS.CDSERVFILI = CUR_SERVICO.CDSERVFILI
                         WHERE (DT.DTDATA BETWEEN P_DTINICIAL AND P_DTFINAL) AND
                               (NVL(DS.IDTCONSSERV,'X') <> 'A')
                        GROUP BY DT.DTDATA, F.DTFERIFILI, IDTCONSSERV
                        ORDER BY 1
         )LOOP
            CONSUMO_P := CASE WHEN V_IDCONSPERC = 'P' AND C_DATA.ID_SEMCONSUMO <> 'P' AND C_DATA.CARD IS NOT NULL THEN 'P' ELSE 'X' END; /*SE PARAMETRO PERCAPITA ESTA MARCADO E PERMITE CONSUMO PERCAPITA, ENTAO RETORNA P SENAO X*/
            CONSUMO_F := CASE WHEN V_IDCONSFIXO = 'F' AND C_DATA.ID_SEMCONSUMO <> 'F' THEN 'F' ELSE 'X' END; /*SE PARAMETRO FIXO ESTA MARCADO E PERMITE CONSUMO FIXO, ENTAO RETORNA P SENAO X*/
            V_IDTIPOCONS := CASE WHEN C_DATA.IDFERIADO = 'N' THEN TO_CHAR(C_DATA.DTCONSUMO, 'D') ELSE 8 END; /*TRAS O NRO CORRESPONDENTE AO DIA, SE FOR FERIADO O NRO = 8*/
            
            IF C_DATA.CARD IS NOT NULL THEN
               /*INSTANCIA TABELA PARA COMENSAIS*/
               comensais_dia := tabela_comensais_dia();
               /*objeto criado para realizar loop nos clientes/ponto de entrega para inserir no consumo percapita ou fixo por ponto de entrega*/
               SELECT tipo_comensais_dia(DTCARDAPIO, CDCLIENTE, CDDESTFILI, QTCOMENSAIS, QTESTITURNO1, QTESTITURNO2, QTESTITURNO3, QTESTITURNO4)
               BULK COLLECT INTO comensais_dia
               FROM (SELECT CA.DTCARDAPIO , NVL(CL.CDCLIENTE,'XXX') AS CDCLIENTE, NVL(CL.CDDESTFILI,'XXX') AS CDDESTFILI, SUM(NVL(CL.QTCOMESTICLI, CA.QTCOMESTICAR)) AS QTCOMENSAIS, SUM(NVL(CA.QTESTITURNO1,0)) AS QTESTITURNO1, 
                            SUM(NVL(CA.QTESTITURNO2,0)) AS QTESTITURNO2, SUM(NVL(CA.QTESTITURNO3,0)) AS QTESTITURNO3, SUM(NVL(CA.QTESTITURNO4,0)) AS QTESTITURNO4
                       FROM CARDADIA CA LEFT JOIN CARDACLI CL ON CA.CDFILIAL = CL.CDFILIAL AND CA.NRCARDAPIO = CL.NRCARDAPIO AND NVL(CL.QTCOMESTICLI, 0) > 0
                      WHERE CA.CDFILIAL = CUR_SERVICO.CDFILIAL AND 
                            CA.CDSERVFILI = CUR_SERVICO.CDSERVFILI AND
                            CA.DTCARDAPIO = C_DATA.DTCONSUMO AND
                            CA.QTCOMESTICAR > 0
                     GROUP BY CA.DTCARDAPIO, CL.CDCLIENTE, CDDESTFILI);

               /*SE O SELECT ACIMA NAO RETORNAR NENHUMA LINHA, E PQ NAO TEM CARDAPIO NO DIA COM COMENSAL, OU TODOS OS CLIENTES QUE EXISTEM ESTAO COM COMENSAIS ZERADOS, ASSIM O SISTEMA VAI CONSIDERAR QUE O DIA NÃO TEM PONTO DE ENTREGA*/
               V_EXISTE_COMENSAL := CASE WHEN comensais_dia.COUNT = 0 THEN FALSE ELSE TRUE END;
               IF V_EXISTE_COMENSAL THEN  V_EXISTE_PT_ENTREGA := comensais_dia(1).CDCLIENTE <> 'XXX'; ELSE V_EXISTE_PT_ENTREGA := FALSE; END IF;   
            END IF;
            /*LOOP PARA BUSCAR OS PRODUTOS DE CONSUMO FIXO, PER CAPITA E/OU FIXO POR PONTO DE ENTREGA*/
            FOR C_CONS IN (
               SELECT C.IDQTDECONS, C.CDPRODUTO, C.QTCONSSERV, C.IDPRODCONSFPE, C.IDTPREQPROD, CASE WHEN C.IDQTDECONS = 'F' AND C.IDTPREQPROD = 'D' THEN C.QTUTILCENTRAL ELSE 0 END AS QTUTILCENTRAL
                 FROM CONSSERV C INNER JOIN PRODUTO P ON P.CDPRODUTO = C.CDPRODUTO
                WHERE (C.CDFILIAL = CUR_SERVICO.CDFILIAL) AND
                      (C.CDSERVFILI = CUR_SERVICO.CDSERVFILI) AND
                      (C.DTCONSSERV = C_DATA.DTCONSUMO) AND
                      (C.IDTIPOCONS = '9') AND
                      (C.IDQTDECONS IN (CONSUMO_P, CONSUMO_F)) AND
                      (P.CDARVPROD BETWEEN P_CDPRODUTOINI AND P_CDPRODUTOFIN)
               UNION ALL
               SELECT C.IDQTDECONS,C.CDPRODUTO, C.QTCONSSERV, C.IDPRODCONSFPE, C.IDTPREQPROD,  CASE WHEN C.IDQTDECONS = 'F' AND C.IDTPREQPROD = 'D' THEN C.QTUTILCENTRAL ELSE 0 END AS QTUTILCENTRAL
                 FROM CONSSERV C INNER JOIN PRODUTO P ON P.CDPRODUTO = C.CDPRODUTO
                WHERE (C.CDFILIAL = CUR_SERVICO.CDFILIAL) AND
                      (C.CDSERVFILI = CUR_SERVICO.CDSERVFILI) AND
                      (C.DTCONSSERV = C_DATA.DT_VIGENCIA) AND
                      (C.IDTIPOCONS = V_IDTIPOCONS) AND
                      (C.IDQTDECONS IN (CONSUMO_P, CONSUMO_F)) AND
                      (P.CDARVPROD BETWEEN P_CDPRODUTOINI AND P_CDPRODUTOFIN) AND
                      (NOT EXISTS(SELECT CDFILIAL
                                   FROM CONSSERV CS
                                  WHERE CS.CDFILIAL = C.CDFILIAL AND
                                        CS.CDSERVFILI = C.CDSERVFILI AND
                                        CS.DTCONSSERV = C_DATA.DTCONSUMO AND
                                        CS.IDTIPOCONS = '9' AND
                                        CS.IDQTDECONS = C.IDQTDECONS))
               ORDER BY 1        
            )LOOP

               /*PREENCHE AS VARIAVEIS DE QUEBRA POR PRODUTO/TIPO DE PRATO NA PREVRETI*/
               V_CDTIPOPRAT_PREVRETI   := CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN CASE WHEN C_CONS.IDQTDECONS = 'F' THEN V_CDTPRCONSFIX ELSE V_CDTPRCONSPER END ELSE NULL END;
               V_CDFILAUXPRAT_PREVRETI := CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN CASE WHEN C_CONS.IDQTDECONS = 'F' THEN V_CDFILCONSFIX ELSE V_CDFILCONSPER END ELSE NULL END;         
               V_CDPRATO_PREVRETI      := CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN CASE WHEN C_CONS.IDQTDECONS = 'F' THEN V_CDPRACONSFIX ELSE V_CDPRACONSPER END ELSE NULL END;
               
               IF C_CONS.IDQTDECONS = 'F' THEN  /*PREENCHE AS VARIAVEIS DE QUEBRA POR PRODUTO/TIPO DE PRATO NA CONSPLAN*/
                  V_CDFILAUXPRAT_CONSPLAN := CASE WHEN P_IDSEPPRATO = 'N' THEN ' '  ELSE CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN V_CDFILCONSFIX ELSE 'P' END END;
                  V_CDTIPOPRAT_CONSPLAN   := CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN V_CDTPRCONSFIX ELSE 'FF' END;     
                  V_CDPRATO_CONSPLAN      := CASE WHEN P_IDSEPPRATO = 'N' THEN '          ' ELSE CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN V_CDPRACONSFIX ELSE RPAD('F', V_TAM_MASCARA, 'F') END END;
               ELSE
                  V_CDFILAUXPRAT_CONSPLAN := CASE WHEN P_IDSEPPRATO = 'N' THEN ' '  ELSE CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN V_CDFILCONSPER ELSE 'P' END END;
                  V_CDTIPOPRAT_CONSPLAN   := CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN V_CDTPRCONSPER ELSE 'PP' END;     
                  V_CDPRATO_CONSPLAN      := CASE WHEN P_IDSEPPRATO = 'N' THEN '          ' ELSE CASE WHEN CUR_SERVICO.IDUTRETIPRAT = 'S' THEN V_CDPRACONSPER ELSE RPAD('P', V_TAM_MASCARA, 'P') END END;
               END IF;

               /*CONSUMO FIXO*/
               IF CONSUMO_F = 'F' AND C_CONS.IDQTDECONS = 'F' AND C_CONS.IDPRODCONSFPE = 'N' THEN /*INSERE CONSUMO FIXO SEM REPLICAR POR PONTO DE ENTREGA*/
                  V_QTPRODUTO := C_CONS.QTCONSSERV *  (1 + (P_PEACRESCIMO / 100));

                  IF P_IDARQUIVO IN ('P','A') THEN /*INSERE NA PREVRETI*/
                     /*ATUALIZA VARIAVEIS DA PREVRETI*/
                     V_BOOL := VERIFICA_PREVRETI_QUEBRA (CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_DATA.DTCONSUMO, C_CONS.CDPRODUTO, V_CDFILAUXPRAT_PREVRETI, V_CDPRATO_PREVRETI, V_CDTIPOPRAT_PREVRETI, C_DATA.DTCONSUMO,CUR_SERVICO.HRINICATEN,
                                                         V_QTPRODUTO, 0,0,0,0,0,0, NULL, NULL);
                     /*REALIZA ARREDONDAMENTO*/                                  
                     ARREDONDAMENTO (PR_CDPRODUTO, PR_QTPREVRETI, PR_QTPRERETT1, PR_QTPRERETT2, PR_QTPRERETT3, PR_QTPRERETT4);                
                     /*RETORNA NRO DE CONTROLE DO SEQUENCIAL DA PRERVETI*/
                     PR_NRREQUISICAO := RETORNA_PROX_NRREQUISICAO(CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_DATA.DTCONSUMO, C_CONS.IDQTDECONS);
                     /*INSERE NA PREVRETI*/
                     INSERE_PREVRETI(CUR_SERVICO.CDFILIAL, C_CONS.IDQTDECONS, CUR_SERVICO.IDUTRETIPRAT, P_CDOPERADOR);                                                  
                  END IF;
                  IF P_IDARQUIVO <> 'P' THEN /*INSERE NA CONSPLAN*/
                     /*ATUALIZA VARIAVEIS DA CONSPLAN*/
                     V_BOOL := VERIFICA_CONSPLAN_QUEBRA (CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_DATA.DTCONSUMO, C_CONS.CDPRODUTO, V_CDFILAUXPRAT_CONSPLAN, V_CDPRATO_CONSPLAN, V_CDTIPOPRAT_CONSPLAN, C_DATA.DTCONSUMO, CUR_SERVICO.HRINICATEN,
                                      V_QTPRODUTO, 0, 0, 0, 0, 0, 0, NULL, 'XXX', 'XXX', NULL, 100, NULL, 0, C_CONS.IDTPREQPROD, 1, C_CONS.QTUTILCENTRAL, 'S');                                        
                     /*REALIZA ARREDONDAMENTO*/
                     ARREDONDAMENTO (CP_CDPRODUTO, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2, CP_QTCONSPLANT3, CP_QTCONSPLANT4); 
                     /*INSERE NA CONSPLAN*/
                     INSERE_CONSPLAN(P_NRCONSPLAN, CUR_SERVICO.CDFILIAL, C_CONS.IDQTDECONS);      
                  END IF;
               END IF;

               IF (C_DATA.CARD IS NOT NULL) AND 
                  ((CONSUMO_F = 'F' AND C_CONS.IDQTDECONS = 'F' AND C_CONS.IDPRODCONSFPE = 'S' AND V_EXISTE_PT_ENTREGA) OR (CONSUMO_P = 'P' AND C_CONS.IDQTDECONS = 'P' AND V_EXISTE_COMENSAL)) THEN /*INSERE CONSUMO FIXO REPLICANDO POR PONTO DE ENTREGA OU CONSUMO PER CAPITA*/
                  
                  /*VARIAVEIS PARA AS QUANTIDADES DOS PRODUTOS INICIALIZADAS ZERADAS PARA LOOP*/
                  V_QTPRODUTO := 0; V_QTPRODTURNO1 := 0; V_QTPRODTURNO2 := 0; V_QTPRODTURNO3 := 0; V_QTPRODTURNO4 := 0;
                  
                  /*LOOP PARA FAZER A QUEBRA POR CLIENTE/DESTINO E INSERIR NA CONSPLAN*/
                  FOR i IN comensais_dia.FIRST .. comensais_dia.LAST LOOP
                     /*ACUMULA AS QUANTIDADES DE PRODUTO RATEADAS POR PONTO DE ENTREGA E TURNO SE HOUVER PARA INSERIR NA PREVRETI*/
                     V_QTPRODUTO := V_QTPRODUTO + ((C_CONS.QTCONSSERV * CASE WHEN CONSUMO_P = 'P' THEN comensais_dia(i).QTCOMENSAIS ELSE 1 END) * (1 + (P_PEACRESCIMO / 100)));
                     V_QTPRODTURNO1 := V_QTPRODTURNO1 + (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO1 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO1 END) * (1 + (P_PEACRESCIMO / 100));
                     V_QTPRODTURNO2 := V_QTPRODTURNO2 + (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO2 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO2 END) * (1 + (P_PEACRESCIMO / 100));
                     V_QTPRODTURNO3 := V_QTPRODTURNO3 + (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO3 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO3 END) * (1 + (P_PEACRESCIMO / 100));
                     V_QTPRODTURNO4 := V_QTPRODTURNO4 + (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO4 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO4 END) * (1 + (P_PEACRESCIMO / 100));        
                     IF P_IDARQUIVO <> 'P' THEN /*INSERE NA CONSPLAN*/
                        
                        /*SE CONSUMO PER CAPITA, ENTAO QTPRODUTO X COMENSAIS + ACRESCIMO, SENAO QTPRODUTO + ACRESCIMO*/
                        V_QTPRODUTO_CONSPLAN := (C_CONS.QTCONSSERV * CASE WHEN CONSUMO_P = 'P' THEN comensais_dia(i).QTCOMENSAIS ELSE 1 END) * (1 + (P_PEACRESCIMO / 100)); 
                        V_QTPRODTURNO1_CONSPLAN := (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO1 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO1 END) * (1 + (P_PEACRESCIMO / 100));
                        V_QTPRODTURNO2_CONSPLAN := (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO2 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO2 END) * (1 + (P_PEACRESCIMO / 100));
                        V_QTPRODTURNO3_CONSPLAN := (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO3 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO3 END) * (1 + (P_PEACRESCIMO / 100));
                        V_QTPRODTURNO4_CONSPLAN := (CASE WHEN (comensais_dia(i).CDCLIENTE <> 'XXX' OR V_QTTURNO4 = 0 OR C_CONS.IDQTDECONS = 'F') THEN 0 ELSE C_CONS.QTCONSSERV * comensais_dia(i).QTESTITURNO4 END) * (1 + (P_PEACRESCIMO / 100));        
                        
                        /*ATUALIZA VARIAVEIS DA CONSPLAN*/
                        V_BOOL := VERIFICA_CONSPLAN_QUEBRA (CUR_SERVICO.CDFILIAL, CUR_SERVICO.CDSERVFILI, C_DATA.DTCONSUMO, C_CONS.CDPRODUTO, V_CDFILAUXPRAT_CONSPLAN, V_CDPRATO_CONSPLAN, V_CDTIPOPRAT_CONSPLAN, C_DATA.DTCONSUMO, CUR_SERVICO.HRINICATEN,
                                         V_QTPRODUTO_CONSPLAN, V_QTPRODTURNO1_CONSPLAN, V_QTPRODTURNO2_CONSPLAN, V_QTPRODTURNO3_CONSPLAN, V_QTPRODTURNO4_CONSPLAN, 0, 0, NULL, 
                                         comensais_dia(i).CDCLIENTE, comensais_dia(i).CDDESTFILI, NULL, 100, NULL, 0, C_CONS.IDTPREQPROD, comensais_dia(i).QTCOMENSAIS, C_CONS.QTUTILCENTRAL,'S');
                        /*REALIZA ARREDONDAMENTO*/
                        ARREDONDAMENTO (CP_CDPRODUTO, CP_QTCONSPLAN, CP_QTCONSPLANT1, CP_QTCONSPLANT2, CP_QTCONSPLANT3, CP_QTCONSPLANT4); 
                        /*INSERE NA CONSPLAN*/
                        INSERE_CONSPLAN(P_NRCONSPLAN, CUR_SERVICO.CDFILIAL, C_CONS.IDQTDECONS);  
                     END IF;
                  END LOOP;

                  IF P_IDARQUIVO IN ('P','A') THEN /*INSERE NA PREVRETI*/
                     /*ATUALIZA VARIAVEIS DA PREVRETI*/
                     V_BOOL := VERIFICA_PREVRETI_QUEBRA (CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_DATA.DTCONSUMO, C_CONS.CDPRODUTO, V_CDFILAUXPRAT_PREVRETI, V_CDPRATO_PREVRETI, V_CDTIPOPRAT_PREVRETI, C_DATA.DTCONSUMO,CUR_SERVICO.HRINICATEN,
                                                         V_QTPRODUTO, V_QTPRODTURNO1,V_QTPRODTURNO2,V_QTPRODTURNO3,V_QTPRODTURNO4,0,0, NULL, NULL);
                     /*REALIZA ARREDONDAMENTO*/ 
                     ARREDONDAMENTO (PR_CDPRODUTO, PR_QTPREVRETI, PR_QTPRERETT1, PR_QTPRERETT2, PR_QTPRERETT3, PR_QTPRERETT4);                 
                     /*RETORNA NRO DE CONTROLE DO SEQUENCIAL DA PRERVETI*/
                     PR_NRREQUISICAO := RETORNA_PROX_NRREQUISICAO(CUR_SERVICO.IDUTRETIPRAT, CUR_SERVICO.CDSERVFILI, C_DATA.DTCONSUMO, C_CONS.IDQTDECONS);
                     /*INSERE NA PREVRETI*/
                     INSERE_PREVRETI(CUR_SERVICO.CDFILIAL, C_CONS.IDQTDECONS, CUR_SERVICO.IDUTRETIPRAT, P_CDOPERADOR);       
                  END IF;
               END IF;
            END LOOP;
            /*AO FINAL DE CADA DIA O OBJETO PARA A TABELA DE COMENSAIS POR CLIENTE E LIBERADA*/
            comensais_dia := NULL;
            COMMIT;
         END LOOP; /*FIM DO LOOP PARA DIAS DE CONSUMO POR SERVICO*/     
      END IF;  /***============================================= FIM CONSUMO FIXO E PER CAPITA =====================================================================================**/
   END LOOP; /*FIM DO LOOP DE SERVICOS*/
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CONSUMO_PLANEJADO_PLA','6.49.000'); END;
/
