/*

   Função criada para exibir as inconsistências da AF
   
	Validações de Limite (Fora do Limite) - L

   08   - Valor da AF acima do valor máximo para o comprador.
   09   - Valor de AF(s) no mês acima do valor máximo para o comprador.
   12   - Valor do produto acima do valor máximo para o comprador
   13   - Valor do produto no mês acima do valor máximo para o comprador
   20   - Orçamento da filial para consumo ultrapassado.
   23   - Orçamento da filial para despesa ultrapassado.
   24   - Valor por nível do produto acima do valor máximo para o comprado.
   25   - Valor por nível de produto no mês acima do valor máximo para o comprador.

	Inconsistência - I

   10   - Quantidade total da AF  abaixo da quantidade minima para o fornecedor.
   11   - Valor total da AF  abaixo do valor minimo para o fornecedor.
   14   - Quantidade do produto abaixo do minimo para o fornecedor
   15   - Quantidade do produto não atende ao valor de arredondamento do fornecedor
   16-1 - Marca Obrigatória
   16-2 - Marca Preferencial
   16-3 - Restrição a  Marca
   16-4 - Fornecedor Obrigatório
   16-5 - Fornecedor Preferencial
   16-6 - Restrição ao Fornecedor
   16-7 - Marca/Fornecedor Obrigatórios
   16-8 - Marca/Fornecedor Preferenciais
   16-9 - Restrição a Marca/Fornecedor
   17   - Produto Preferencial
   18   - Quantidade total da AF  abaixo da quantidade minima para o fornecedor na região.
   19   - Valor total da AF  abaixo do valor minimo para o fornecedor na região.
   21   - Quantidade de cotação do produto (igual a %s)  abaixo da quantidade minima de cotações exigidas.
   22   - Preço unitário unidade de estoque acima do preço de custo objetivo.
   26   - Preço unitário (unidade de estoque) maior que o ultimo preço utilizado (unidade de estoque).
   30   - Calendário de compras não calculado
   32   - AF automática extra gerada para fornecedor não extra
   33   - Obriga liberação de AF manual devido ao parâmetro "Exigir Liberação para as AF's Manuais".

	Validação específica de cliente - I

   28   - Quantidade máxima de fornecedores com entrega no mesmo dia.
   29   - Limite máximo por entrega no OL no mesmo dia.
   31   - Quantidade disponível do fornecedor.


*/

DROP TYPE INCONSISTENCIA_AF_TABLE
/

DROP TYPE INCONSISTENCIA_AF_TYPE
/

CREATE TYPE INCONSISTENCIA_AF_TYPE AS OBJECT(
   NRORG       NUMBER,
   CDFILDEST   VARCHAR2(4),
   CDFILLANC   VARCHAR2(4),
   NRAUTOFORN  VARCHAR2(10),
   CDPRODUTO   VARCHAR2(10),
   CDMARCA     VARCHAR2(5),
   DTPROGENTAF DATE,
   CDFORNECED  VARCHAR2(21),
   CDERRO      VARCHAR2(5),
   VRLIMITE    FLOAT,
   VRERROR     FLOAT
)
/

CREATE TYPE INCONSISTENCIA_AF_TABLE AS TABLE OF INCONSISTENCIA_AF_TYPE
/

CREATE OR REPLACE FUNCTION INCONSISTENCIA_AF(
   P_CDFILDEST   IN VARCHAR2,
   P_CDFILLANC   IN VARCHAR2,
   P_NRAUTOFORN  IN VARCHAR2,
   P_CDFILCENT   IN VARCHAR2,
   P_NRORG       IN VARCHAR2 DEFAULT '1') RETURN INCONSISTENCIA_AF_TABLE PIPELINED
IS
   OUT_RECORD INCONSISTENCIA_AF_TYPE := INCONSISTENCIA_AF_TYPE (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

   V_IDCONORCAF      VARCHAR2(1);
   V_IDCONSAFORCFIL  VARCHAR2(1);
   V_IDQTCOTPROD     VARCHAR2(1);
   V_IDINCONSPRECSUP VARCHAR2(1);
   V_CDFORNECED      VARCHAR2(21);
   V_VRQTDCOTACAO    NUMERIC;
   V_QTDCOTACAO      NUMERIC;
   V_CDFORNECEDOL    VARCHAR2(21);
   V_QTLIMFORNECDIA  NUMERIC;
   V_VRLIMPESOENTRE  FLOAT;
   V_COUNT           NUMERIC;
   V_NRSEQAPURAF     VARCHAR2(10);
   V_FORNEX          NUMERIC;
   V_IDOBLIBAFMAN    VARCHAR2(1);
   V_IDTIPOLANCAF    VARCHAR2(1);
BEGIN
	/*08 - Valor da AF acima do valor maximo para o comprador.*/
   FOR C_VR_AF_M_COMPRADOR IN
      (SELECT AUTOFORNE.VRTOTALAF, COMPRADOR.VRLIMAFCOMP
         FROM AUTOFORNE, COMPRADOR
        WHERE AUTOFORNE.CDFILDEST   = P_CDFILDEST
          AND AUTOFORNE.CDFILLANC   = P_CDFILLANC
          AND AUTOFORNE.NRAUTOFORN  = P_NRAUTOFORN
          AND AUTOFORNE.CDOPERADOR  = COMPRADOR.CDOPERADOR
          AND AUTOFORNE.VRTOTALAF > COMPRADOR.VRLIMAFCOMP
          AND AUTOFORNE.NRORG       = P_NRORG
          AND COMPRADOR.NRORG       = P_NRORG
      )
   LOOP
      OUT_RECORD.NRORG       := P_NRORG;
      OUT_RECORD.CDFILDEST   := P_CDFILDEST;
      OUT_RECORD.CDFILLANC   := P_CDFILLANC;
      OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
      OUT_RECORD.CDPRODUTO   := '';
      OUT_RECORD.CDMARCA     := '';
      OUT_RECORD.DTPROGENTAF := '';
      OUT_RECORD.CDFORNECED  := '';
      OUT_RECORD.CDERRO      := 'L08';
      OUT_RECORD.VRLIMITE    := C_VR_AF_M_COMPRADOR.VRLIMAFCOMP;
      OUT_RECORD.VRERROR     := C_VR_AF_M_COMPRADOR.VRTOTALAF;
      
      PIPE ROW (OUT_RECORD);
   END LOOP;

	/*09 - Valor de AF(s) no mes acima do valor maximo para o comprador.*/
   FOR C_VR_AF_MES_M_COMPRADOR IN
      ( SELECT SOMAAF, COMPRADOR.VRLIMAFMES
          FROM COMPRADOR, AUTOFORNE,
               (SELECT SUM(VRTOTALAF) AS SOMAAF
                  FROM AUTOFORNE, (SELECT AUTOFORNE.CDOPERADOR
                                     FROM AUTOFORNE, COMPRADOR
                                    WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                                      AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                                      AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                                      AND AUTOFORNE.CDOPERADOR = COMPRADOR.CDOPERADOR
                                      AND AUTOFORNE.NRORG      = P_NRORG
                                      AND COMPRADOR.NRORG      = P_NRORG) COMPRADOR
                 WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                   AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                   AND AUTOFORNE.NRORG      = P_NRORG
                   AND TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY') = (SELECT TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY')
                                                                FROM AUTOFORNE
                                                               WHERE CDFILDEST  = P_CDFILDEST
                                                                 AND CDFILLANC  = P_CDFILLANC
                                                                 AND NRAUTOFORN = P_NRAUTOFORN
                                                                 AND NRORG      = P_NRORG)
               ) SUMAUTF
         WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
           AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
           AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
           AND AUTOFORNE.NRORG      = P_NRORG
           AND COMPRADOR.NRORG      = P_NRORG
           AND AUTOFORNE.CDOPERADOR = COMPRADOR.CDOPERADOR
           AND SOMAAF > COMPRADOR.VRLIMAFMES
      )
   LOOP
      OUT_RECORD.NRORG       := P_NRORG;
      OUT_RECORD.CDFILDEST   := P_CDFILDEST;
      OUT_RECORD.CDFILLANC   := P_CDFILLANC;
      OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
      OUT_RECORD.CDPRODUTO   := '';
      OUT_RECORD.CDMARCA     := '';
      OUT_RECORD.DTPROGENTAF := '';
      OUT_RECORD.CDFORNECED  := '';
      OUT_RECORD.CDERRO      := 'L09';
      OUT_RECORD.VRLIMITE    := C_VR_AF_MES_M_COMPRADOR.VRLIMAFMES;
      OUT_RECORD.VRERROR     := C_VR_AF_MES_M_COMPRADOR.SOMAAF;
      PIPE ROW (OUT_RECORD);
   END LOOP;

	/*10 - Quantidade total da AF  abaixo da quantidade minima para o fornecedor.*/
   FOR C_QT_M_MIN_FORN IN
      (SELECT Quant_total, FORNECEDOR.QTMINAUTFOT
         FROM AUTOFORNE, FORNECEDOR,
              (SELECT SUM(QUANT) AS QUANT_TOTAL
                 FROM (SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV) AS QUANT
                         FROM ITEMAUTF, AUTOFORNE, FORNECEDOR, PRODUTO, PRODUTO PRODESTO
                        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                          AND ITEMAUTF.NRORG       = P_NRORG
                          AND AUTOFORNE.NRORG      = P_NRORG
                          AND FORNECEDOR.NRORG     = P_NRORG
                          AND PRODUTO.NRORG        = P_NRORG
                          AND PRODESTO.NRORG       = P_NRORG
                          AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                          AND AUTOFORNE.CDFORNECED = FORNECEDOR.CDFORNECED
                          AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                          AND PRODUTO.CDPRODESTO   = PRODESTO.CDPRODUTO
                          AND PRODESTO.SGUNIDADE   =  FORNECEDOR.SGUNIDADE
                       UNION ALL
                       SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV / CONVPRODUTO.VRFATOCONVES) AS QUANT
                         FROM ITEMAUTF, AUTOFORNE, FORNECEDOR, PRODUTO, PRODUTO PRODESTO, CONVPRODUTO
                        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                          AND ITEMAUTF.NRORG       = P_NRORG
                          AND AUTOFORNE.NRORG      = P_NRORG
                          AND FORNECEDOR.NRORG     = P_NRORG
                          AND PRODUTO.NRORG        = P_NRORG
                          AND PRODESTO.NRORG       = P_NRORG
                          AND CONVPRODUTO.NRORG    = P_NRORG
                          AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                          AND AUTOFORNE.CDFORNECED = FORNECEDOR.CDFORNECED
                          AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                          AND PRODUTO.CDPRODESTO   =  PRODESTO.CDPRODUTO
                          AND PRODESTO.SGUNIDADE   <> FORNECEDOR.SGUNIDADE
                          AND CONVPRODUTO.CDPRODUTO = PRODUTO.CDPRODESTO
                          AND CONVPRODUTO.SGUNIDADE = FORNECEDOR.SGUNIDADE)
              )
        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
          AND AUTOFORNE.NRORG      = P_NRORG
          AND FORNECEDOR.NRORG     = P_NRORG
          AND AUTOFORNE.CDFORNECED = FORNECEDOR.CDFORNECED
          AND Quant_total < FORNECEDOR.QTMINAUTFOT
          AND NOT EXISTS(SELECT MINFORNREG.CDREGIAO
                           FROM MINFORNREG, FILIAL
                          WHERE FILIAL.CDFILIAL          = AUTOFORNE.CDFILDEST
                            AND MINFORNREG.CDREGIAO      = FILIAL.CDREGIAO
                            AND MINFORNREG.CDFORNECED    = AUTOFORNE.CDFORNECED
                            AND MINFORNREG.NRORG         = P_NRORG
                            AND FILIAL.NRORG             = P_NRORG
                            AND MINFORNREG.QTMINFORNREG >= 0
                            AND MINFORNREG.QTMINFORNREG IS NOT NULL)
      )
   LOOP
      OUT_RECORD.NRORG       := P_NRORG;
      OUT_RECORD.CDFILDEST   := P_CDFILDEST;
      OUT_RECORD.CDFILLANC   := P_CDFILLANC;
      OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
      OUT_RECORD.CDPRODUTO   := '';
      OUT_RECORD.CDMARCA     := '';
      OUT_RECORD.DTPROGENTAF := '';
      OUT_RECORD.CDFORNECED  := '';
      OUT_RECORD.CDERRO      := 'I10';
      OUT_RECORD.VRLIMITE    := C_QT_M_MIN_FORN.QTMINAUTFOT;
      OUT_RECORD.VRERROR     := C_QT_M_MIN_FORN.Quant_total;
      PIPE ROW (OUT_RECORD);
   END LOOP;

	/*11 - Valor total da AF  abaixo do valor minimo para o fornecedor.*/
   FOR C_VR_M_MIN_FORN IN
      (  SELECT  AUTOFORNE.VRTOTALAF, FORNECEDOR.VRMINAUTFOR
           FROM AUTOFORNE, FORNECEDOR
          WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
            AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
            AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
            AND AUTOFORNE.NRORG      = P_NRORG
            AND FORNECEDOR.NRORG     = P_NRORG
            AND AUTOFORNE.CDFORNECED = FORNECEDOR.CDFORNECED
            AND AUTOFORNE.VRTOTALAF  < FORNECEDOR.VRMINAUTFOR
            AND NOT EXISTS(SELECT MINFORNREG.CDREGIAO
                             FROM MINFORNREG, FILIAL
                            WHERE FILIAL.CDFILIAL          = AUTOFORNE.CDFILDEST
                              AND MINFORNREG.CDREGIAO      = FILIAL.CDREGIAO
                              AND MINFORNREG.CDFORNECED    = AUTOFORNE.CDFORNECED
                              AND MINFORNREG.NRORG         = P_NRORG
                              AND FILIAL.NRORG             = P_NRORG
                              AND MINFORNREG.VRMINFORNREG >= 0
                              AND MINFORNREG.VRMINFORNREG IS NOT NULL)
      )
   LOOP
      OUT_RECORD.NRORG       := P_NRORG;
      OUT_RECORD.CDFILDEST   := P_CDFILDEST;
      OUT_RECORD.CDFILLANC   := P_CDFILLANC;
      OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
      OUT_RECORD.CDPRODUTO   := '';
      OUT_RECORD.CDMARCA     := '';
      OUT_RECORD.DTPROGENTAF := '';
      OUT_RECORD.CDFORNECED  := '';
      OUT_RECORD.CDERRO      := 'I11';
      OUT_RECORD.VRLIMITE    := C_VR_M_MIN_FORN.VRMINAUTFOR;
      OUT_RECORD.VRERROR     := C_VR_M_MIN_FORN.VRTOTALAF;
      PIPE ROW (OUT_RECORD);
   END LOOP;

   /*18 - Quantidade total da AF  abaixo da quantidade minima para o fornecedor na regiao.*/
   FOR C_QT_AF_M_MIN_FORN_REG IN
      (SELECT Quant_total, MINFORNREG.QTMINFORNREG
         FROM AUTOFORNE, MINFORNREG, FILIAL,
              (SELECT SUM(QUANT) AS QUANT_TOTAL
                 FROM (SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV) AS QUANT
                         FROM ITEMAUTF, AUTOFORNE, FORNECEDOR, PRODUTO, PRODUTO PRODESTO
                        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                          AND ITEMAUTF.NRORG       = P_NRORG
                          AND AUTOFORNE.NRORG      = P_NRORG
                          AND FORNECEDOR.NRORG     = P_NRORG
                          AND PRODUTO.NRORG        = P_NRORG
                          AND PRODESTO.NRORG       = P_NRORG
                          AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                          AND AUTOFORNE.CDFORNECED = FORNECEDOR.CDFORNECED
                          AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                          AND PRODUTO.CDPRODESTO   = PRODESTO.CDPRODUTO
                          AND PRODESTO.SGUNIDADE   =  FORNECEDOR.SGUNIDADE
                       UNION ALL
                       SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV / CONVPRODUTO.VRFATOCONVES) AS QUANT
                         FROM ITEMAUTF, AUTOFORNE, FORNECEDOR, PRODUTO, PRODUTO PRODESTO, CONVPRODUTO
                        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                          AND ITEMAUTF.NRORG       = P_NRORG
                          AND AUTOFORNE.NRORG      = P_NRORG
                          AND FORNECEDOR.NRORG     = P_NRORG
                          AND PRODUTO.NRORG        = P_NRORG
                          AND PRODESTO.NRORG       = P_NRORG
                          AND CONVPRODUTO.NRORG    = P_NRORG
                          AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                          AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                          AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                          AND AUTOFORNE.CDFORNECED = FORNECEDOR.CDFORNECED
                          AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                          AND PRODUTO.CDPRODESTO   =  PRODESTO.CDPRODUTO
                          AND PRODESTO.SGUNIDADE   <> FORNECEDOR.SGUNIDADE
                          AND CONVPRODUTO.CDPRODUTO = PRODUTO.CDPRODESTO
                          AND CONVPRODUTO.SGUNIDADE = FORNECEDOR.SGUNIDADE
                      ) TOT
              ) TOTAL
        WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
          AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
          AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
          AND AUTOFORNE.NRORG      = P_NRORG
          AND MINFORNREG.NRORG     = P_NRORG
          AND FILIAL.NRORG         = P_NRORG
          AND AUTOFORNE.CDFILDEST  = FILIAL.CDFILIAL
          AND AUTOFORNE.CDFORNECED = MINFORNREG.CDFORNECED
          AND FILIAL.CDREGIAO      = MINFORNREG.CDREGIAO
          AND Quant_total < MINFORNREG.QTMINFORNREG
      )
   LOOP
      OUT_RECORD.NRORG       := P_NRORG;
      OUT_RECORD.CDFILDEST   := P_CDFILDEST;
      OUT_RECORD.CDFILLANC   := P_CDFILLANC;
      OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
      OUT_RECORD.CDPRODUTO   := '';
      OUT_RECORD.CDMARCA     := '';
      OUT_RECORD.DTPROGENTAF := '';
      OUT_RECORD.CDFORNECED  := '';
      OUT_RECORD.CDERRO      := 'I18';
      OUT_RECORD.VRLIMITE    := C_QT_AF_M_MIN_FORN_REG.QTMINFORNREG;
      OUT_RECORD.VRERROR     := C_QT_AF_M_MIN_FORN_REG.Quant_total;
      PIPE ROW (OUT_RECORD);
   END LOOP;

   /*19 - Valor total da AF  abaixo do valor minimo para o fornecedor na regiao.*/
   FOR C_VR_AF_M_MIN_FORN IN
      (  SELECT AUTOFORNE.VRTOTALAF, MINFORNREG.VRMINFORNREG
           FROM AUTOFORNE, MINFORNREG, FILIAL
          WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
            AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
            AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
            AND AUTOFORNE.NRORG      = P_NRORG
            AND MINFORNREG.NRORG     = P_NRORG
            AND FILIAL.NRORG         = P_NRORG
            AND AUTOFORNE.CDFILDEST  = FILIAL.CDFILIAL
            AND AUTOFORNE.CDFORNECED = MINFORNREG.CDFORNECED
            AND FILIAL.CDREGIAO      = MINFORNREG.CDREGIAO
            AND AUTOFORNE.VRTOTALAF  < MINFORNREG.VRMINFORNREG
      )
   LOOP
      OUT_RECORD.NRORG       := P_NRORG;
      OUT_RECORD.CDFILDEST   := P_CDFILDEST;
      OUT_RECORD.CDFILLANC   := P_CDFILLANC;
      OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
      OUT_RECORD.CDPRODUTO   := '';
      OUT_RECORD.CDMARCA     := '';
      OUT_RECORD.DTPROGENTAF := '';
      OUT_RECORD.CDFORNECED  := '';
      OUT_RECORD.CDERRO      := 'I19';
      OUT_RECORD.VRLIMITE    := C_VR_AF_M_MIN_FORN.VRMINFORNREG;
      OUT_RECORD.VRERROR     := C_VR_AF_M_MIN_FORN.VRTOTALAF;
      PIPE ROW (OUT_RECORD);
   END LOOP;

   BEGIN
      SELECT IDCONORCAF, IDQTCOTPROD, IDINCONSPRECSUP
        INTO V_IDCONORCAF, V_IDQTCOTPROD, V_IDINCONSPRECSUP
        FROM PARASUPRI
       WHERE CDFILIAL = P_CDFILCENT
         AND NRORG    = P_NRORG;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_IDCONORCAF      := 'N';
         V_IDQTCOTPROD     := 'N';
         V_IDINCONSPRECSUP := 'N';
   END;

   BEGIN
      SELECT IDCONSAFORCFIL
        INTO V_IDCONSAFORCFIL
        FROM FILIAL
       WHERE CDFILIAL = P_CDFILDEST
         AND NRORG    = P_NRORG;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_IDCONSAFORCFIL := 'N';
   END;

   FOR C_ITEMAUTF IN
      (SELECT ITEMAUTF.CDPRODUTO, PRODUTO.CDARVPROD, PRODUTO.CDPRODESTO,
              ITEMAUTF.DTPROGENTAF, ITEMAUTF.VRPREUNIAF, ITEMAUTF.CDMARCA,
              PRODUTO.VRFATOCONV, AUTOFORNE.CDOPERADOR
         FROM AUTOFORNE, ITEMAUTF, PRODUTO
        WHERE PRODUTO.CDPRODUTO   = ITEMAUTF.CDPRODUTO
          AND ITEMAUTF.CDFILDEST  = P_CDFILDEST
          AND ITEMAUTF.CDFILLANC  = P_CDFILLANC
          AND ITEMAUTF.NRAUTOFORN = P_NRAUTOFORN
          AND ITEMAUTF.NRORG      = P_NRORG
          AND AUTOFORNE.NRORG     = P_NRORG
          AND PRODUTO.NRORG       = P_NRORG
          AND ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
          AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
          AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
      )
   LOOP
      /*12 - Valor do produto acima do valor maximo para o comprador.*/
      FOR C_VR_PROD_M_COMPRADOR IN
         (  SELECT SOMAAF, LIMPRODAF.VRLIMPRODAF
              FROM LIMPRODAF, AUTOFORNE, PRODUTO, PRODUTO P,
                   (SELECT PRODUTO, SUM(VRPRODUTO) - NVL(SUM(VRDESCONTO), 0) + NVL(SUM(VRIMPOSTO), 0) AS SOMAAF
                      FROM (SELECT SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF) AS VRPRODUTO,
                                   SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF * ITEMAUTF.VRPERDESAF) / 100) AS VRDESCONTO,
                                   SUM(0) AS VRIMPOSTO,
                                   ITEMAUTF.CDPRODUTO AS PRODUTO
                              FROM ITEMAUTF
                             WHERE ITEMAUTF.CDFILDEST  = P_CDFILDEST
                               AND ITEMAUTF.CDFILLANC  = P_CDFILLANC
                               AND ITEMAUTF.NRAUTOFORN = P_NRAUTOFORN
                               AND ITEMAUTF.NRORG      = P_NRORG
                               AND ITEMAUTF.CDPRODUTO  = C_ITEMAUTF.CDPRODUTO
                             GROUP BY ITEMAUTF.CDPRODUTO
                            UNION
                            SELECT SUM(0) AS VRPRODUTO,
                                   SUM(0) AS VRDESCONTO,
                                   SUM(IMPITMAF.VRADIMPAF) AS VRIMPOSTO,
                                   ITEMAUTF.CDPRODUTO AS PRODUTO
                              FROM IMPITMAF, ITEMAUTF
                             WHERE IMPITMAF.CDFILDEST   = P_CDFILDEST
                               AND IMPITMAF.CDFILLANC   = P_CDFILLANC
                               AND IMPITMAF.NRAUTOFORN  = P_NRAUTOFORN
                               AND ITEMAUTF.NRORG       = P_NRORG
                               AND IMPITMAF.NRORG       = P_NRORG
                               AND IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST
                               AND IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC
                               AND IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN
                               AND IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO
                               AND IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA
                               AND IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF
                               AND ITEMAUTF.CDPRODUTO   = C_ITEMAUTF.CDPRODUTO
                             GROUP BY ITEMAUTF.CDPRODUTO
                           )
                     GROUP BY PRODUTO)
              WHERE PRODUTO.CDPRODUTO    = PRODUTO
                AND AUTOFORNE.CDFILDEST  = P_CDFILDEST
                AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                AND LIMPRODAF.NRORG      = P_NRORG
                AND AUTOFORNE.NRORG      = P_NRORG
                AND PRODUTO.NRORG        = P_NRORG
                AND P.NRORG              = P_NRORG
                AND AUTOFORNE.CDOPERADOR = LIMPRODAF.CDOPERADOR
                AND P.CDPRODUTO          = LIMPRODAF.CDPRODUTO
                AND P.CDARVPROD          = (SELECT MAX(PR.CDARVPROD)
                                              FROM LIMPRODAF, PRODUTO PR
                                             WHERE PR.CDPRODUTO         = LIMPRODAF.CDPRODUTO
                                               AND LIMPRODAF.CDOPERADOR = C_ITEMAUTF.CDOPERADOR
                                               AND LIMPRODAF.NRORG      = P_NRORG
                                               AND P.NRORG              = P_NRORG
                                               AND INSTR(PRODUTO.CDARVPROD, PR.CDARVPROD)= 1)
                AND SOMAAF > LIMPRODAF.VRLIMPRODAF
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'L12';
         OUT_RECORD.VRLIMITE    := C_VR_PROD_M_COMPRADOR.VRLIMPRODAF;
         OUT_RECORD.VRERROR     := C_VR_PROD_M_COMPRADOR.SOMAAF;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      /*13 - Valor do produto no mes acima do valor maximo para o comprador.*/
      FOR C_VR_PROD_MES_M_COMPRADOR IN
         (SELECT SOMAAF, LIMPRODAF.VRLIMPRAFMES
            FROM LIMPRODAF, AUTOFORNE, PRODUTO, PRODUTO P,
                 (SELECT PRODUTO, SUM(VRPRODUTO) - NVL(SUM(VRDESCONTO), 0) + NVL(SUM(VRIMPOSTO), 0) AS SOMAAF
                    FROM ( SELECT SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF) AS VRPRODUTO,
                                SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF * ITEMAUTF.VRPERDESAF) / 100) AS VRDESCONTO,
                                  SUM(0) AS VRIMPOSTO, ITEMAUTF.CDPRODUTO AS PRODUTO
                             FROM ITEMAUTF, AUTOFORNE
                            WHERE AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                              AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                              AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                              AND ITEMAUTF.CDPRODUTO   = C_ITEMAUTF.CDPRODUTO
                              AND ITEMAUTF.NRORG       = P_NRORG
                              AND AUTOFORNE.NRORG      = P_NRORG
                              AND TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY') = (SELECT TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY')
                                                                                FROM AUTOFORNE
                                                                               WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                                                                                 AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                                                                                 AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                                                                                 AND AUTOFORNE.NRORG      = P_NRORG)
                              AND AUTOFORNE.CDFILDEST = P_CDFILDEST
                              AND AUTOFORNE.CDOPERADOR = C_ITEMAUTF.CDOPERADOR
                            GROUP BY ITEMAUTF.CDPRODUTO
                           UNION
                           SELECT SUM(0) AS VRPRODUTO,
                                  SUM(0) AS VRDESCONTO,
                                  SUM(IMPITMAF.VRADIMPAF) AS VRIMPOSTO,
                                  ITEMAUTF.CDPRODUTO AS PRODUTO
                             FROM IMPITMAF, ITEMAUTF, AUTOFORNE
                            WHERE IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST
                              AND IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC
                              AND IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN
                              AND IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO
                              AND IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA
                              AND IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF
                              AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                              AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                              AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                              AND ITEMAUTF.CDPRODUTO   = C_ITEMAUTF.CDPRODUTO
                              AND IMPITMAF.NRORG       = P_NRORG
                              AND ITEMAUTF.NRORG       = P_NRORG
                              AND AUTOFORNE.NRORG      = P_NRORG
                              AND TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY') = (SELECT TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY')
                                                                                FROM AUTOFORNE
                                                                               WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                                                                                 AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                                                                                 AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                                                                                 AND AUTOFORNE.NRORG      = P_NRORG)
                              AND AUTOFORNE.CDFILDEST = P_CDFILDEST
                              AND AUTOFORNE.CDOPERADOR = C_ITEMAUTF.CDOPERADOR
                            GROUP BY ITEMAUTF.CDPRODUTO
                         )
                   GROUP BY PRODUTO
                 )
           WHERE PRODUTO.CDPRODUTO    = PRODUTO
             AND AUTOFORNE.CDFILDEST  = P_CDFILDEST
             AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
             AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
             AND LIMPRODAF.NRORG      = P_NRORG
             AND AUTOFORNE.NRORG      = P_NRORG
             AND PRODUTO.NRORG        = P_NRORG
             AND P.NRORG              = P_NRORG
             AND AUTOFORNE.CDOPERADOR = LIMPRODAF.CDOPERADOR
             AND P.CDPRODUTO          = LIMPRODAF.CDPRODUTO
             AND P.CDARVPROD          = (SELECT MAX(PR.CDARVPROD)
                                           FROM LIMPRODAF, PRODUTO PR
                                          WHERE PR.CDPRODUTO          = LIMPRODAF.CDPRODUTO
                                            AND LIMPRODAF.CDOPERADOR  = C_ITEMAUTF.CDOPERADOR
                                            AND LIMPRODAF.NRORG       = P_NRORG
                                            AND PR.NRORG              = P_NRORG
                                            AND INSTR(PRODUTO.CDARVPROD, PR.CDARVPROD)= 1)
             AND SOMAAF > LIMPRODAF.VRLIMPRAFMES
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'L13';
         OUT_RECORD.VRLIMITE    := C_VR_PROD_MES_M_COMPRADOR.VRLIMPRAFMES;
         OUT_RECORD.VRERROR     := C_VR_PROD_MES_M_COMPRADOR.SOMAAF;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      IF (V_IDCONORCAF = 'S' AND V_IDCONSAFORCFIL = 'S') THEN
         /*	20 - Orcamento da filial para consumo ultrapassado.
            23 - Orcamento da filial para despesa ultrapassado.*/
         FOR C_ORCAMENTO IN
            (  SELECT NRSEQERCONSORCA, DSERROCONSORCA, CDPRODUTO
                 FROM (SELECT ERROCONSORCA.NRSEQERCONSORCA, ERROCONSORCA.DSERROCONSORCA, ERROCONSORCA.CDPRODUTO
                         FROM ERROCONSORCA, ITEMAUTF
                        WHERE ITEMAUTF.CDFILDEST  = ERROCONSORCA.CDFILDEST
                          AND ITEMAUTF.CDFILLANC  = ERROCONSORCA.CDFILLANC
                          AND ITEMAUTF.NRAUTOFORN = ERROCONSORCA.NRAUTOFORN
                          AND ITEMAUTF.CDPRODUTO  = ERROCONSORCA.CDPRODUTO
                          AND TO_CHAR(ITEMAUTF.DTPROGENTAF, 'MM/YYYY') = TO_CHAR(ERROCONSORCA.DTPROGENTAF, 'MM/YYYY')
                          AND ITEMAUTF.CDFILDEST  = P_CDFILDEST
                          AND ITEMAUTF.CDFILLANC  = P_CDFILLANC
                          AND ITEMAUTF.NRAUTOFORN = P_NRAUTOFORN
                          AND ERROCONSORCA.NRORG  = P_NRORG
                          AND ITEMAUTF.NRORG      = P_NRORG
                          AND ITEMAUTF.CDPRODUTO  = C_ITEMAUTF.CDPRODUTO
                          AND DSERROCONSORCA IS NOT NULL
                        ORDER BY ERROCONSORCA.NRSEQERCONSORCA DESC)
                WHERE ROWNUM = 1
            )
         LOOP
            OUT_RECORD.NRORG       := P_NRORG;
            OUT_RECORD.CDFILDEST   := P_CDFILDEST;
            OUT_RECORD.CDFILLANC   := P_CDFILLANC;
            OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
            OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
            OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
            OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
            OUT_RECORD.CDFORNECED  := '';
            IF(INSTR(C_ORCAMENTO.DSERROCONSORCA, 'despesa') > 0) THEN
               OUT_RECORD.CDERRO      := 'L23';
            ELSE
               IF(INSTR(C_ORCAMENTO.DSERROCONSORCA, 'consumo') > 0) THEN
                  OUT_RECORD.CDERRO      := 'L20';
               END IF;
            END IF;
            OUT_RECORD.VRLIMITE    := 0;
            OUT_RECORD.VRERROR     := 0;
            PIPE ROW (OUT_RECORD);
         END LOOP;
      END IF;

      /*24 - Valor por nivel do produto acima do valor maximo para o comprado.*/
      FOR C_VR_NIV_PROD_M_COMPRADOR IN
         (SELECT SUM(SOMAAF) SOMAAF, VRLIMNIVELAF
            FROM (SELECT SOMAAF, LIMNIVELAF.VRLIMNIVELAF
                    FROM LIMNIVELAF, AUTOFORNE, PRODUTO, PRODUTO P,
                         (SELECT PRODUTO, SUM(VRPRODUTO) - NVL(SUM(VRDESCONTO), 0) + NVL(SUM(VRIMPOSTO), 0) AS SOMAAF
                            FROM (SELECT SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF) AS VRPRODUTO,
                                         SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF * ITEMAUTF.VRPERDESAF) / 100) AS VRDESCONTO,
                                         SUM(0) AS VRIMPOSTO, ITEMAUTF.CDPRODUTO AS PRODUTO
                                    FROM ITEMAUTF, PRODUTO
                                   WHERE ITEMAUTF.CDFILDEST  = P_CDFILDEST
                                     AND ITEMAUTF.CDFILLANC  = P_CDFILLANC
                                     AND ITEMAUTF.NRAUTOFORN = P_NRAUTOFORN
                                     AND ITEMAUTF.NRORG      = P_NRORG
                                     AND PRODUTO.NRORG       = P_NRORG
                                     AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                     AND PRODUTO.CDARVPROD   LIKE C_ITEMAUTF.CDARVPROD||'%'
                                   GROUP BY ITEMAUTF.CDPRODUTO
                                  UNION
                                  SELECT SUM(0) AS VRPRODUTO,
                                         SUM(0) AS VRDESCONTO,
                                         SUM(IMPITMAF.VRADIMPAF) AS VRIMPOSTO, ITEMAUTF.CDPRODUTO AS PRODUTO
                                    FROM IMPITMAF, ITEMAUTF, PRODUTO
                                   WHERE IMPITMAF.CDFILDEST   = P_CDFILDEST
                                     AND IMPITMAF.CDFILLANC   = P_CDFILLANC
                                     AND IMPITMAF.NRAUTOFORN  = P_NRAUTOFORN
                                     AND IMPITMAF.NRORG       = P_NRORG
                                     AND ITEMAUTF.NRORG       = P_NRORG
                                     AND PRODUTO.NRORG        = P_NRORG
                                     AND IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST
                                     AND IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC
                                     AND IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN
                                     AND IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO
                                     AND IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA
                                     AND IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF
                                     AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                                     AND PRODUTO.CDARVPROD    LIKE C_ITEMAUTF.CDARVPROD||'%'
                                    GROUP BY ITEMAUTF.CDPRODUTO
                                 )
                           GROUP BY PRODUTO
                         )
                   WHERE PRODUTO.CDPRODUTO    = PRODUTO
                     AND AUTOFORNE.CDFILDEST  = P_CDFILDEST
                     AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                     AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                     AND LIMNIVELAF.NRORG     = P_NRORG
                     AND AUTOFORNE.NRORG      = P_NRORG
                     AND PRODUTO.NRORG        = P_NRORG
                     AND P.NRORG              = P_NRORG
                     AND AUTOFORNE.CDOPERADOR = LIMNIVELAF.CDOPERADOR
                     AND P.CDPRODUTO          = LIMNIVELAF.CDPRODUTO
                     AND INSTR(C_ITEMAUTF.CDARVPROD, P.CDARVPROD) > 0
                 ) AF
           GROUP BY VRLIMNIVELAF
          HAVING SUM(SOMAAF) > VRLIMNIVELAF
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'L24';
         OUT_RECORD.VRLIMITE    := C_VR_NIV_PROD_M_COMPRADOR.VRLIMNIVELAF;
         OUT_RECORD.VRERROR     := C_VR_NIV_PROD_M_COMPRADOR.SOMAAF;
         PIPE ROW (OUT_RECORD);
      END LOOP;


      /*22 - Valor por nivel de produto no mes acima do valor maximo para o comprador.*/
      FOR C_VR_NIV_PROD_MES_M_COMPR IN
         (SELECT SUM(SOMA.SOMAAF) SOMAAF, LIMNIVELAF.VRLIMNIVPRAFMES
            FROM LIMNIVELAF, PRODUTO,
                 (SELECT CDPRODUTO, SUM(VRPRODUTO) - NVL(SUM(VRDESCONTO), 0) + NVL(SUM(VRIMPOSTO), 0) AS SOMAAF
                    FROM (SELECT SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF) AS VRPRODUTO,
                                 SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF *  ITEMAUTF.VRPERDESAF) / 100) AS VRDESCONTO,
                                 SUM(0) AS VRIMPOSTO,
                                 ITEMAUTF.CDPRODUTO AS CDPRODUTO
                            FROM ITEMAUTF, AUTOFORNE, PRODUTO
                           WHERE AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                             AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                             AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                             AND ITEMAUTF.NRORG       = P_NRORG
                             AND AUTOFORNE.NRORG      = P_NRORG
                             AND PRODUTO.NRORG        = P_NRORG
                             AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                             AND AUTOFORNE.CDOPERADOR = C_ITEMAUTF.CDOPERADOR
                             AND PRODUTO.CDARVPROD    LIKE C_ITEMAUTF.CDARVPROD ||'%'
                             AND TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY') = ( SELECT TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY')
                                                                                FROM AUTOFORNE
                                                                               WHERE CDFILDEST  = P_CDFILDEST
                                                                                 AND CDFILLANC  = P_CDFILLANC
                                                                                 AND NRAUTOFORN = P_NRAUTOFORN
                                                                                 AND NRORG      = P_NRORG)
                           GROUP BY ITEMAUTF.CDPRODUTO
                           UNION
                           SELECT SUM(0) AS VRPRODUTO,
                                  SUM(0) AS VRDESCONTO,
                                  SUM(IMPITMAF.VRADIMPAF) AS VRIMPOSTO,
                                  ITEMAUTF.CDPRODUTO AS PRODUTO
                             FROM IMPITMAF, ITEMAUTF, AUTOFORNE, PRODUTO
                            WHERE IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST
                              AND IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC
                              AND IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN
                              AND IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO
                              AND IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA
                              AND IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF
                              AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                              AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                              AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                              AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND AUTOFORNE.CDOPERADOR = C_ITEMAUTF.CDOPERADOR
                              AND IMPITMAF.NRORG       = P_NRORG
                              AND ITEMAUTF.NRORG       = P_NRORG
                              AND AUTOFORNE.NRORG      = P_NRORG
                              AND PRODUTO.NRORG        = P_NRORG
                              AND PRODUTO.CDARVPROD    LIKE C_ITEMAUTF.CDARVPROD||'%'
                              AND TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY') = (  SELECT TO_CHAR(AUTOFORNE.DTAUTOFORN, 'MM/YYYY')
                                                                                  FROM AUTOFORNE
                                                                                 WHERE CDFILDEST  = P_CDFILDEST
                                                                                   AND CDFILLANC  = P_CDFILLANC
                                                                                   AND NRAUTOFORN = P_NRAUTOFORN
                                                                                   AND NRORG      = P_NRORG)
                           GROUP BY ITEMAUTF.CDPRODUTO
                         )
                GROUP BY CDPRODUTO) SOMA
          WHERE SOMA.CDPRODUTO        = PRODUTO.CDPRODUTO
            AND LIMNIVELAF.CDOPERADOR = C_ITEMAUTF.CDOPERADOR
            AND LIMNIVELAF.NRORG      = P_NRORG
            AND PRODUTO.NRORG         = P_NRORG
            AND INSTR(C_ITEMAUTF.CDARVPROD, LIMNIVELAF.CDPRODUTO) > 0
          GROUP BY LIMNIVELAF.VRLIMNIVPRAFMES)
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'L22';
         OUT_RECORD.VRLIMITE    := C_VR_NIV_PROD_MES_M_COMPR.VRLIMNIVPRAFMES;
         OUT_RECORD.VRERROR     := C_VR_NIV_PROD_MES_M_COMPR.SOMAAF;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      /*14 - Quantidade do produto abaixo do minimo para o fornecedor.*/
      FOR C_QT_PROD_M_MIN_FORN IN
         (SELECT QUANT_PROD, PRODFORN.QTMINAF
            FROM PRODFORN, AUTOFORNE, PRODUTO, PRODUTO PROD,
                 (SELECT PRODUTO, SUM(QUANT) AS QUANT_PROD
                    FROM (SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV) AS QUANT,
                                 ITEMAUTF.CDPRODUTO AS PRODUTO
                            FROM ITEMAUTF, AUTOFORNE, PRODFORN, PRODUTO , PRODUTO P, PRODUTO PRODESTO
                           WHERE AUTOFORNE.CDFILDEST  = P_CDFILDEST
                             AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
                             AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
                             AND ITEMAUTF.NRORG       = P_NRORG
                             AND AUTOFORNE.NRORG      = P_NRORG
                             AND PRODFORN.NRORG       = P_NRORG
                             AND PRODUTO.NRORG        = P_NRORG
                             AND P.NRORG              = P_NRORG
                             AND PRODESTO.NRORG       = P_NRORG
                             AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                             AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                             AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                             AND AUTOFORNE.CDFORNECED = PRODFORN.CDFORNECED
                             AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                             AND ITEMAUTF.CDPRODUTO   = C_ITEMAUTF.CDPRODUTO
                             AND PRODUTO.CDPRODESTO   = PRODESTO.CDPRODESTO
                             AND PRODESTO.SGUNIDADE   = PRODFORN.SGUNIDADE
                             AND P.CDPRODUTO          = PRODFORN.CDPRODUTO
                             AND P.CDARVPROD          = (SELECT MAX(PR.CDARVPROD)
                                                           FROM PRODFORN, PRODUTO PR
                                                          WHERE PRODFORN.CDPRODUTO   = PR.CDPRODUTO
                                                            AND AUTOFORNE.CDFORNECED = PRODFORN.CDFORNECED
                                                            AND PRODFORN.NRORG       = P_NRORG
                                                            AND PR.NRORG             = P_NRORG
                                                            AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%'
                                                 )
                           GROUP BY ITEMAUTF.CDPRODUTO, PRODUTO.CDARVPROD
                          UNION
                          SELECT SUM(ITEMAUTF.QTPROGENTAF * PRODUTO.VRFATOCONV / CONVPRODUTO.VRFATOCONVES) AS QUANT,
                                 ITEMAUTF.CDPRODUTO AS PRODUTO
                            FROM ITEMAUTF, AUTOFORNE, PRODFORN, PRODUTO, PRODUTO P, PRODUTO PRODESTO, CONVPRODUTO
                           WHERE AUTOFORNE.CDFILDEST   = P_CDFILDEST
                             AND AUTOFORNE.CDFILLANC   = P_CDFILLANC
                             AND AUTOFORNE.NRAUTOFORN  = P_NRAUTOFORN
                             AND ITEMAUTF.NRORG        = P_NRORG
                             AND AUTOFORNE.NRORG       = P_NRORG
                             AND PRODFORN.NRORG        = P_NRORG
                             AND PRODUTO.NRORG         = P_NRORG
                             AND P.NRORG               = P_NRORG
                             AND PRODESTO.NRORG        = P_NRORG
                             AND CONVPRODUTO.NRORG     = P_NRORG
                             AND AUTOFORNE.CDFILDEST   = ITEMAUTF.CDFILDEST
                             AND AUTOFORNE.CDFILLANC   = ITEMAUTF.CDFILLANC
                             AND AUTOFORNE.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN
                             AND AUTOFORNE.CDFORNECED  = PRODFORN.CDFORNECED
                             AND ITEMAUTF.CDPRODUTO    = PRODUTO.CDPRODUTO
                             AND ITEMAUTF.CDPRODUTO    = C_ITEMAUTF.CDPRODUTO
                             AND PRODUTO.CDPRODESTO    = PRODESTO.CDPRODUTO
                             AND PRODESTO.SGUNIDADE   <> PRODFORN.SGUNIDADE
                             AND CONVPRODUTO.CDPRODUTO = PRODUTO.CDPRODESTO
                             AND CONVPRODUTO.SGUNIDADE = PRODFORN.SGUNIDADE
                             AND P.CDPRODUTO           = PRODFORN.CDPRODUTO
                             AND P.CDARVPROD           = (SELECT MAX(PR.CDARVPROD)
                                                            FROM PRODFORN, PRODUTO PR
                                                           WHERE PRODFORN.CDPRODUTO   = PR.CDPRODUTO
                                                             AND AUTOFORNE.CDFORNECED = CDFORNECED
                                                             AND PRODFORN.NRORG       = P_NRORG
                                                             AND PR.NRORG             = P_NRORG
                                                             AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%'
                                                 )
                           GROUP BY ITEMAUTF.CDPRODUTO, PRODUTO.CDARVPROD
                         )
                   GROUP BY PRODUTO
                 )
           WHERE PRODUTO = PRODUTO.CDPRODUTO
             AND AUTOFORNE.CDFILDEST  = P_CDFILDEST
             AND AUTOFORNE.CDFILLANC  = P_CDFILLANC
             AND AUTOFORNE.NRAUTOFORN = P_NRAUTOFORN
             AND PRODFORN.NRORG       = P_NRORG
             AND AUTOFORNE.NRORG      = P_NRORG
             AND PRODUTO.NRORG        = P_NRORG
             AND PROD.NRORG           = P_NRORG
             AND AUTOFORNE.CDFORNECED = PRODFORN.CDFORNECED
             AND PROD.CDPRODUTO       = PRODFORN.CDPRODUTO
             AND PROD.CDARVPROD       = (SELECT MAX(PR.CDARVPROD)
                                           FROM PRODFORN, PRODUTO PR
                                          WHERE PR.CDPRODUTO         = PRODFORN.CDPRODUTO
                                            AND AUTOFORNE.CDFORNECED = CDFORNECED
                                            AND PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%')
             AND QUANT_PROD < PRODFORN.QTMINAF
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'I14';
         OUT_RECORD.VRLIMITE    := C_QT_PROD_M_MIN_FORN.QTMINAF;
         OUT_RECORD.VRERROR     := C_QT_PROD_M_MIN_FORN.QUANT_PROD;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      /*15 - Quantidade do produto nao atende ao valor de arredondamento do fornecedor*/
      FOR C_QT_PROD_N_ARREND IN
         (SELECT ITEMAUTF.DTPROGENTAF, ITEMAUTF.CDMARCA,
                 ITEMAUTF.QTPROGENTAF, PRODFORNCOMP.VRARREDCMPFO
            FROM PARCMPSUP, PRODFORNCOMP, AUTOFORNE, ITEMAUTF
           WHERE ITEMAUTF.CDFILDEST       = P_CDFILDEST
             AND ITEMAUTF.CDFILLANC       = P_CDFILLANC
             AND ITEMAUTF.NRAUTOFORN      = P_NRAUTOFORN
             AND PARCMPSUP.NRORG          = P_NRORG
             AND PRODFORNCOMP.NRORG       = P_NRORG
             AND AUTOFORNE.NRORG          = P_NRORG
             AND ITEMAUTF.NRORG           = P_NRORG
             AND ITEMAUTF.CDPRODUTO       = C_ITEMAUTF.CDPRODUTO
             AND AUTOFORNE.CDFILDEST      = ITEMAUTF.CDFILDEST
             AND AUTOFORNE.CDFILLANC      = ITEMAUTF.CDFILLANC
             AND AUTOFORNE.NRAUTOFORN     = ITEMAUTF.NRAUTOFORN
             AND PRODFORNCOMP.CDFORNECED  = AUTOFORNE.CDFORNECED
             AND PRODFORNCOMP.CDPRODCOMPL = ITEMAUTF.CDPRODUTO
             AND PARCMPSUP.CDFILIAL       = ITEMAUTF.CDFILDEST
             AND PARCMPSUP.IDUTARCMPFOR   = 'S'
             AND MOD(ITEMAUTF.QTPROGENTAF, PRODFORNCOMP.VRARREDCMPFO) <> 0
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'I15';
         OUT_RECORD.VRLIMITE    := C_QT_PROD_N_ARREND.VRARREDCMPFO;
         OUT_RECORD.VRERROR     := C_QT_PROD_N_ARREND.QTPROGENTAF;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      /*16 - Verica se os produtos atendem as particularidades cadastradas
         Particular = '1' >>>>>>>>> Marca Obrigatória
         particular = '2' >>>>>>>>> Marca Preferencial
         Particular = '3' >>>>>>>>> Restrição à Marca
         Particular = '4' >>>>>>>>> Fornecedor Obrigatório
         Particular = '5' >>>>>>>>> Fornecedor Preferencial
         Particular = '6' >>>>>>>>> Restrição ao Fornecedor
         Particular = '7' >>>>>>>>> Marca/Fornecedor Obrigatórios
         Particular = '8' >>>>>>>>> Marca/Fornecedor Preferenciais
         Particular = '9' >>>>>>>>> Restrição à Marca/Fornecedor*/
      FOR C_PARTICULARIDADES IN
         (  SELECT PARTICULAR, FORNECEDOR, MARCA, PART_MARCA, PART_FORN
              FROM PRODUTO, (SELECT DISTINCT ITEMAUTF.CDPRODUTO AS PRODUTO,
                                    ITEMAUTF.CDMARCA            AS MARCA,
                                    ITEMAUTF.CDSEGMARCA         AS SEGMARCA,
                                    AUTOFORNE.CDFORNECED        AS FORNECEDOR,
                                    PARTFILI.CDTIPPART          AS PARTICULAR,
                                    PARTFILI.CDMARCA            AS PART_MARCA,
                                    PARTFILI.CDFORNECED         AS PART_FORN,
                                    PARTFILI.CDPRODUTO          AS PROD_PART
                               FROM ITEMAUTF, AUTOFORNE, PARTFILI
                              WHERE ITEMAUTF.CDFILDEST   = P_CDFILDEST
                                AND ITEMAUTF.CDFILLANC   = P_CDFILLANC
                                AND ITEMAUTF.NRAUTOFORN  = P_NRAUTOFORN
                                AND ITEMAUTF.NRORG       = P_NRORG
                                AND AUTOFORNE.NRORG      = P_NRORG
                                AND PARTFILI.NRORG       = P_NRORG
                                AND ITEMAUTF.CDPRODUTO   = C_ITEMAUTF.CDPRODUTO
                                AND AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                                AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                                AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                AND ITEMAUTF.CDPRODUTO   = PARTFILI.CDPRODUTO
                                AND ITEMAUTF.CDFILDEST   = PARTFILI.CDFILIAL
                            ) PROD
             WHERE PRODUTO       = PRODUTO.CDPRODUTO
               AND PRODUTO.NRORG = P_NRORG
               AND PRODUTO IS NOT NULL

               AND (
                        (PARTICULAR = '1' AND PRODUTO = PROD_PART
                                          AND ((MARCA  <> PART_MARCA) OR (SEGMARCA IS NOT NULL AND SEGMARCA <> PART_MARCA)))

                     OR (PARTICULAR = '2' AND (NOT EXISTS (SELECT CDTIPPART
                                                             FROM PARTFILI
                                                            WHERE CDFILIAL  = P_CDFILDEST
                                                              AND NRORG     = P_NRORG
                                                              AND CDPRODUTO = PRODUTO
                                                              AND CDTIPPART = '2'
                                                              AND CDMARCA   = MARCA))
                                          AND NOT EXISTS (SELECT CDTIPPART
                                                            FROM PARTFILI PMF
                                                           WHERE PMF.CDFILIAL   = P_CDFILDEST
                                                             AND PMF.NRORG      = P_NRORG
                                                             AND PMF.CDPRODUTO  = PRODUTO
                                                             AND PMF.CDMARCA    = MARCA
                                                             AND PMF.CDTIPPART  = '8'
                                                             AND PMF.CDFORNECED = FORNECEDOR))

                     OR (PARTICULAR = '2' AND SEGMARCA IS NOT NULL
                                          AND NOT EXISTS  (SELECT CDTIPPART
                                                             FROM PARTFILI
                                                            WHERE CDFILIAL  = P_CDFILDEST
                                                              AND NRORG     = P_NRORG
                                                              AND CDPRODUTO = PRODUTO
                                                              AND CDTIPPART = '2'
                                                              AND CDMARCA   = SEGMARCA)
                                          AND NOT EXISTS  (SELECT CDTIPPART
                                                             FROM PARTFILI PMF
                                                            WHERE PMF.CDFILIAL   = P_CDFILDEST
                                                              AND PMF.NRORG      = P_NRORG
                                                              AND PMF.CDPRODUTO  = PRODUTO
                                                              AND PMF.CDMARCA    = SEGMARCA
                                                              AND PMF.CDTIPPART  = '8'
                                                              AND PMF.CDFORNECED = FORNECEDOR))

                     OR (PARTICULAR =  '3' AND PRODUTO = PROD_PART
                                           AND (MARCA  = PART_MARCA OR (SEGMARCA IS NOT NULL AND SEGMARCA = PART_MARCA)))

                     OR (PARTICULAR =  '4' AND PRODUTO = PROD_PART AND FORNECEDOR <> PART_FORN)

                     OR (PARTICULAR = '5' AND NOT EXISTS (SELECT CDTIPPART
                                                            FROM PARTFILI
                                                           WHERE CDFILIAL   = P_CDFILDEST
                                                             AND NRORG      = P_NRORG
                                                             AND CDPRODUTO  = PRODUTO
                                                             AND CDTIPPART  = '5'
                                                             AND CDFORNECED = FORNECEDOR)
                                          AND NOT EXISTS (SELECT CDTIPPART
                                                            FROM PARTFILI PMF
                                                           WHERE PMF.CDFILIAL   = P_CDFILDEST
                                                             AND PMF.NRORG      = P_NRORG
                                                             AND PMF.CDPRODUTO  = PRODUTO
                                                             AND PMF.CDMARCA    = MARCA
                                                             AND PMF.CDTIPPART  = '8'
                                                             AND PMF.CDFORNECED = FORNECEDOR))

                     OR (PARTICULAR =  '6' AND PRODUTO = PROD_PART AND FORNECEDOR  = PART_FORN)

                     OR (PARTICULAR =  '7' AND PRODUTO = PROD_PART
                                           AND ((MARCA  <> PART_MARCA OR (SEGMARCA IS NOT NULL AND SEGMARCA <> PART_MARCA))
                                                                      OR (FORNECEDOR <> PART_FORN)))

                     OR (PARTICULAR = '8' AND NOT EXISTS(SELECT CDTIPPART
                                                           FROM PARTFILI
                                                          WHERE CDFILIAL   = P_CDFILDEST
                                                            AND NRORG      = P_NRORG
                                                            AND CDPRODUTO  = PRODUTO
                                                            AND CDTIPPART  = '8'
                                                            AND CDMARCA    = MARCA
                                                            AND CDFORNECED = FORNECEDOR))

                     OR (PARTICULAR = '8' AND SEGMARCA IS NOT NULL
                                          AND NOT EXISTS (SELECT CDTIPPART
                                                            FROM PARTFILI
                                                           WHERE CDFILIAL   = P_CDFILDEST
                                                             AND NRORG      = P_NRORG
                                                             AND CDPRODUTO  = PRODUTO
                                                             AND CDTIPPART  = '8'
                                                             AND CDMARCA    = SEGMARCA
                                                             AND CDFORNECED = FORNECEDOR))

                     OR (PARTICULAR =  '9' AND PRODUTO = PROD_PART
                                           AND ((MARCA  = PART_MARCA) OR (SEGMARCA IS NOT NULL AND SEGMARCA = PART_MARCA))
                                           AND FORNECEDOR  = PART_FORN)
                   )
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDERRO      := 'I16'||'-'||C_PARTICULARIDADES.PARTICULAR;
         IF C_PARTICULARIDADES.PARTICULAR = '4' THEN
            BEGIN
               SELECT CDFORNECED
                 INTO V_CDFORNECED
                 FROM ( SELECT CDFORNECED
                          FROM PARTFILI
                         WHERE PARTFILI.CDFILIAL   = P_CDFILDEST
                           AND PARTFILI.NRORG      = P_NRORG
                           AND PARTFILI.CDPRODUTO  = C_ITEMAUTF.CDPRODUTO
                           AND PARTFILI.CDTIPPART  = '4'
                           AND PARTFILI.CDFORNECED <> C_PARTICULARIDADES.FORNECEDOR
                           AND PARTFILI.NRCOLEPRECO IS NULL
                        UNION ALL
                        SELECT CDFORNECED
                          FROM PARTFILI
                         WHERE PARTFILI.CDFILIAL   = P_CDFILDEST
                           AND PARTFILI.NRORG      = P_NRORG
                           AND PARTFILI.CDPRODUTO  = C_ITEMAUTF.CDPRODUTO
                           AND PARTFILI.CDTIPPART  = '4'
                           AND PARTFILI.CDFORNECED <> C_PARTICULARIDADES.FORNECEDOR
                           AND PARTFILI.NRCOLEPRECO IS NOT NULL
                           AND EXISTS (SELECT 1
                                         FROM ITEMAUTF
                                        WHERE ITEMAUTF.CDFILDEST     = P_CDFILDEST
                                          AND ITEMAUTF.CDFILLANC     = P_CDFILLANC
                                          AND ITEMAUTF.NRAUTOFORN    = P_NRAUTOFORN
                                          AND ITEMAUTF.NRORG         = P_NRORG
                                          AND ITEMAUTF.CDPRODUTO     = C_ITEMAUTF.CDPRODUTO
                                          AND EXISTS (SELECT 1
                                                        FROM COLETAPR
                                                       WHERE COLETAPR.CDFILIAL    = PARTFILI.CDFILCOTA
                                                         AND COLETAPR.NRORG       = P_NRORG
                                                         AND COLETAPR.NRCOLEPRECO = PARTFILI.NRCOLEPRECO
                                                         AND ITEMAUTF.DTENTRITMSOL BETWEEN COLETAPR.DTINIVALCOL AND COLETAPR.DTFINVALCOL
                                                     )
                                      )
                      );
               OUT_RECORD.CDFORNECED := V_CDFORNECED;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDFORNECED := '';
            END ;
         END IF;
         OUT_RECORD.VRLIMITE    := 0;
         OUT_RECORD.VRERROR     := 0;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      /*17 - Produto Preferencial*/
      FOR C_PROD_PREF IN
         (SELECT PRODUTO.CDARVPROD AS CDPRODPREF,
                 PRODUTO.NMPRODUTO AS NMPRODPREF
            FROM PRODPREFMED, PARCMPSUP, PRODUTO
           WHERE PARCMPSUP.CDFILIAL     = P_CDFILDEST
             AND PRODPREFMED.NRORG      = P_NRORG
             AND PARCMPSUP.NRORG        = P_NRORG
             AND PRODUTO.NRORG          = P_NRORG
             AND PARCMPSUP.IDUTPRODPREF = 'S'
             AND PRODPREFMED.CDFILIAL   = P_CDFILDEST
             AND PRODPREFMED.CDPRODUTO  = C_ITEMAUTF.CDPRODESTO
             AND PRODUTO.CDPRODUTO      <> C_ITEMAUTF.CDPRODUTO
             AND PRODPREFMED.CDPRODPREF = PRODUTO.CDPRODUTO
         )
      LOOP
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
         OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
         OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'I17';
         OUT_RECORD.VRLIMITE    := 0;
         OUT_RECORD.VRERROR     := 0;
         PIPE ROW (OUT_RECORD);
      END LOOP;

      /*21 - Quantidade de cotacao do produto (igual a %s)  abaixo da quantidade minima de cotacoes exigidas.*/
      IF V_IDQTCOTPROD = 'S' THEN
         BEGIN
            SELECT QUANTCOTPROD.VRQTDCOTACAO
              INTO V_VRQTDCOTACAO
              FROM QUANTCOTPROD, PRODUTO
             WHERE QUANTCOTPROD.CDFILIAL  = P_CDFILDEST
               AND QUANTCOTPROD.NRORG     = P_NRORG
               AND PRODUTO.NRORG          = P_NRORG
               AND QUANTCOTPROD.CDPRODUTO = PRODUTO.CDPRODUTO
               AND PRODUTO.CDARVPROD      = (SELECT MAX(B.CDARVPROD)
                                               FROM QUANTCOTPROD A, PRODUTO B
                                              WHERE A.CDPRODUTO = B.CDPRODUTO
                                                AND A.CDFILIAL  = P_CDFILDEST
                                                AND A.NRORG     = P_NRORG
                                                AND B.NRORG     = P_NRORG
                                                AND INSTR(C_ITEMAUTF.CDPRODUTO, B.CDARVPROD) = 1);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRQTDCOTACAO := 0;
         END;
         BEGIN
            SELECT COUNT(*) QTDCOTACAO
              INTO V_QTDCOTACAO
              FROM ITEMCOLE
             WHERE CDPRODUTO = C_ITEMAUTF.CDPRODUTO
               AND CDFILIAL  = P_CDFILCENT
               AND NRORG     = P_NRORG
               AND C_ITEMAUTF.DTPROGENTAF BETWEEN DTINIVALITM AND DTFINVALITM
               AND NOT EXISTS (SELECT CDREGIAO
                                 FROM REFOREG
                                WHERE ITEMCOLE.CDFORNECED = REFOREG.CDFORNECED
                                  AND ITEMCOLE.CDREGIAO   = REFOREG.CDREGIAO
                                  AND REFOREG.NRORG       = P_NRORG)
               AND NOT EXISTS (SELECT CDFORNECED
                                 FROM REFORFIL
                                WHERE CDFILIAL       = P_CDFILDEST
                                  AND CDFORNECED     = ITEMCOLE.CDFORNECED
                                  AND REFORFIL.NRORG = P_NRORG
                                  AND CDPERIENTR IS NULL);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_QTDCOTACAO := 0;
         END;

         IF V_VRQTDCOTACAO > V_QTDCOTACAO THEN
            OUT_RECORD.NRORG       := P_NRORG;
            OUT_RECORD.CDFILDEST   := P_CDFILDEST;
            OUT_RECORD.CDFILLANC   := P_CDFILLANC;
            OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
            OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
            OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
            OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
            OUT_RECORD.CDFORNECED  := '';
            OUT_RECORD.CDERRO      := 'I21';
            OUT_RECORD.VRLIMITE    := V_VRQTDCOTACAO;
            OUT_RECORD.VRERROR     := V_QTDCOTACAO;
            PIPE ROW (OUT_RECORD);
         END IF;
      END IF;

      /*25 - Preco unitario unidade de estoque acima do preco de custo objetivo.*/
      FOR C_VRUNIT_MEN_VROBJET IN
         (  SELECT MIN(VRPRECOBJETIVO) VRPRECOBJETIVO
              FROM ITEMPRECOJETIVO, FILIAL
             WHERE FILIAL.CDFILIAL                = P_CDFILDEST
               AND ITEMPRECOJETIVO.NRORG          = P_NRORG
               AND FILIAL.NRORG                   = P_NRORG
               AND ITEMPRECOJETIVO.CDFILIAL       = FILIAL.CDFILIAL
               AND ITEMPRECOJETIVO.CDREGIAO       = FILIAL.CDREGIAO
               AND ITEMPRECOJETIVO.CDPRODUTO      = C_ITEMAUTF.CDPRODESTO
               AND C_ITEMAUTF.DTPROGENTAF BETWEEN ITEMPRECOJETIVO.DTINIVALITMOBJ AND ITEMPRECOJETIVO.DTFINVALITMOBJ
         )
      LOOP
         IF C_VRUNIT_MEN_VROBJET.VRPRECOBJETIVO < (C_ITEMAUTF.VRPREUNIAF / C_ITEMAUTF.VRFATOCONV) THEN
            OUT_RECORD.NRORG       := P_NRORG;
            OUT_RECORD.CDFILDEST   := P_CDFILDEST;
            OUT_RECORD.CDFILLANC   := P_CDFILLANC;
            OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
            OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
            OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
            OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
            OUT_RECORD.CDFORNECED  := '';
            OUT_RECORD.CDERRO      := 'I25';
            OUT_RECORD.VRLIMITE    := C_VRUNIT_MEN_VROBJET.VRPRECOBJETIVO;
            OUT_RECORD.VRERROR     := C_ITEMAUTF.VRPREUNIAF / C_ITEMAUTF.VRFATOCONV;
            PIPE ROW (OUT_RECORD);
         END IF;
      END LOOP;

      /*26 - Preco unitario (unidade de estoque) maior que o ultimo preco utilizado (unidade de estoque).*/
      IF V_IDINCONSPRECSUP = 'S' THEN
         FOR C_VRUNIT_MAIOR_ULT IN
            (SELECT VRUNITITEM, VRPREUNIAF
               FROM (SELECT MIN(C.VRBRUCMPPROD) AS VRUNITITEM,
                            MIN(I.VRPREUNIAF)   AS VRPREUNIAF
                       FROM CUSTOCMPPROD C, ITEMAUTF I, FILIAL F, FILIAL FC
                      WHERE I.CDFILDEST    = P_CDFILDEST
                        AND I.CDFILLANC    = P_CDFILLANC
                        AND I.NRAUTOFORN   = P_NRAUTOFORN
                        AND C.NRORG        = P_NRORG
                        AND I.NRORG        = P_NRORG
                        AND F.NRORG        = P_NRORG
                        AND FC.NRORG       = P_NRORG
                        AND I.DTPROGENTAF  = C_ITEMAUTF.DTPROGENTAF
                        AND I.CDMARCA      = C_ITEMAUTF.CDMARCA
                        AND I.CDPRODUTO    = C_ITEMAUTF.CDPRODUTO
                        AND C.CDPRODUTO    = C_ITEMAUTF.CDPRODESTO
                        AND I.CDFILDEST    = F.CDFILIAL
                        AND C.CDFILIAL     = FC.CDFILIAL
                        AND F.CDREGIAO     = FC.CDREGIAO
                        AND I.VRPREUNIAF   > 0
                        AND C.VRBRUCMPPROD > 0
                        AND C.VRBRUCMPPROD < (I.VRPREUNIAF/C_ITEMAUTF.VRFATOCONV)
                        AND DTCUSTCMPPRO   = (SELECT /*+ ORDERED*/ MAX(D.DTCUSTCMPPRO)
                                                FROM FILIAL FIL, CUSTOCMPPROD D
                                               WHERE D.CDPRODUTO      = C_ITEMAUTF.CDPRODESTO
                                                 AND D.VRBRUCMPPROD   > 0
                                                 AND D.CDFILIAL       = FIL.CDFILIAL
                                                 AND FIL.CDREGIAO     = FC.CDREGIAO
                                                 AND D.DTCUSTCMPPRO  <= I.DTPROGENTAF
                                                 AND FIL.NRORG        = P_NRORG
                                                 AND D.NRORG          = P_NRORG)) I
              WHERE NVL(VRUNITITEM, 0) > 0
                AND NVL(VRPREUNIAF, 0) > 0
            )
         LOOP
            OUT_RECORD.NRORG       := P_NRORG;
            OUT_RECORD.CDFILDEST   := P_CDFILDEST;
            OUT_RECORD.CDFILLANC   := P_CDFILLANC;
            OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
            OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
            OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
            OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
            OUT_RECORD.CDFORNECED  := '';
            OUT_RECORD.CDERRO      := 'I26';
            OUT_RECORD.VRLIMITE    := C_VRUNIT_MAIOR_ULT.VRUNITITEM;
            OUT_RECORD.VRERROR     := C_VRUNIT_MAIOR_ULT.VRPREUNIAF;
            PIPE ROW (OUT_RECORD);
         END LOOP;
      END IF;
      /*{Validação específica de cliente}
      28 - Quantidade máxima de fornecedores com entrega no mesmo dia.
      29 - Limite máximo por entrega no OL no mesmo dia.
      31 - Quantidade disponível do fornecedor.*/
      BEGIN
         SELECT CDFORNECED
           INTO V_CDFORNECEDOL
           FROM FORNECEDOR, FILIAL, PARAMGERAL
          WHERE IDVERPLANLOGI       = 'S'
            AND FILIAL.CDFILIAL     = P_CDFILDEST
            AND FILIAL.CDFORNOPELOG = FORNECEDOR.CDFORNECED
            AND FILIAL.IDFUNCAOFILI = 'O'
            AND PARAMGERAL.IDSISDOS = '3';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDFORNECEDOL := NULL;
      END;
      IF LENGTH(V_CDFORNECEDOL) > 0 THEN
         BEGIN
            SELECT NRSEQAPURAF
              INTO V_NRSEQAPURAF
              FROM AUTOFORNE
             WHERE AUTOFORNE.CDFILDEST   = P_CDFILDEST
               AND AUTOFORNE.CDFILLANC   = P_CDFILLANC
               AND AUTOFORNE.NRAUTOFORN  = P_NRAUTOFORN;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_NRSEQAPURAF  := NULL;
         END;
         BEGIN
            SELECT NVL(G.VRLIMPESOENTRE, 0) VRLIMPESOENTRE, NVL(G.QTLIMFORNECDIA, 0) QTLIMFORNECDIA
              INTO V_VRLIMPESOENTRE, V_QTLIMFORNECDIA
              FROM GRSPARAMFORN G
             WHERE G.CDFORNECED = V_CDFORNECEDOL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRLIMPESOENTRE  := 0;
               V_QTLIMFORNECDIA  := 0;
         END;
         IF V_QTLIMFORNECDIA > 0 THEN
            FOR C_QT_LIMI_FORNE_DIA IN
               (SELECT COUNT(DISTINCT AUTOFORNE.CDFORNECED) QTLIMFORNECDIA
                  FROM AUTOFORNE, ITEMAUTF
                 WHERE AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                   AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                   AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                   AND AUTOFORNE.CDFILDEST  = P_CDFILDEST
                   AND ITEMAUTF.DTPROGENTAF = C_ITEMAUTF.DTPROGENTAF
                   AND NVL(ITEMAUTF.IDBAIXITMAF, '1') = '1'
                   AND NVL(AUTOFORNE.IDBAIXAAF, '1')  IN ('1', '6', '7')
                HAVING COUNT(DISTINCT AUTOFORNE.CDFORNECED) > V_QTLIMFORNECDIA
               )
            LOOP
               IF C_QT_LIMI_FORNE_DIA.QTLIMFORNECDIA > 0 THEN
                  OUT_RECORD.NRORG       := P_NRORG;
                  OUT_RECORD.CDFILDEST   := P_CDFILDEST;
                  OUT_RECORD.CDFILLANC   := P_CDFILLANC;
                  OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
                  OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
                  OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
                  OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
                  OUT_RECORD.CDFORNECED  := V_CDFORNECEDOL;
                  OUT_RECORD.CDERRO      := 'I28';
                  OUT_RECORD.VRLIMITE    := V_QTLIMFORNECDIA;
                  OUT_RECORD.VRERROR     := C_QT_LIMI_FORNE_DIA.QTLIMFORNECDIA;
                  PIPE ROW (OUT_RECORD);
               END IF;
            END LOOP;
         END IF;
         IF V_VRLIMPESOENTRE > 0 THEN
            FOR C_VR_LIMI_PESO_ENTRE IN
               (SELECT SUM((ITEMAUTF.QTPROGENTAF-NVL(ITEMAUTF.QTEFETENTRAF, 0))*CASE NVL(PRODUTO.VRPESOUNID, 0)
                                                                                   WHEN 0 THEN 1
                                                                                   ELSE NVL(PRODUTO.VRPESOUNID, 0)
                                                                                 END) VRLIMPESOENTRE
                  FROM AUTOFORNE, ITEMAUTF, PRODUTO
                 WHERE AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST
                   AND AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC
                   AND AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                   AND AUTOFORNE.CDFILDEST  = P_CDFILDEST
                   AND ITEMAUTF.DTPROGENTAF = C_ITEMAUTF.DTPROGENTAF
                   AND ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                   AND NVL(ITEMAUTF.IDBAIXITMAF, '1') = '1'
                   AND NVL(AUTOFORNE.IDBAIXAAF, '1')  IN ('1', '6', '7')
                HAVING SUM((ITEMAUTF.QTPROGENTAF-NVL(ITEMAUTF.QTEFETENTRAF, 0))*CASE NVL(PRODUTO.VRPESOUNID, 0)
                                                                                   WHEN 0 THEN 1
                                                                                   ELSE NVL(PRODUTO.VRPESOUNID, 0)
                                                                                END) > V_VRLIMPESOENTRE
               )
            LOOP
               IF C_VR_LIMI_PESO_ENTRE.VRLIMPESOENTRE > 0 THEN
                  OUT_RECORD.NRORG       := P_NRORG;
                  OUT_RECORD.CDFILDEST   := P_CDFILDEST;
                  OUT_RECORD.CDFILLANC   := P_CDFILLANC;
                  OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
                  OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
                  OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
                  OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
                  OUT_RECORD.CDFORNECED  := V_CDFORNECEDOL;
                  OUT_RECORD.CDERRO      := 'I29';
                  OUT_RECORD.VRLIMITE    := V_VRLIMPESOENTRE;
                  OUT_RECORD.VRERROR     := C_VR_LIMI_PESO_ENTRE.VRLIMPESOENTRE;
                  PIPE ROW (OUT_RECORD);
               END IF;
            END LOOP;
         END IF;
         FOR C_QT_DISP_FORNE IN
            (SELECT I.CDPRODUTO, I.CDMARCA, NVL(MAX(P.QTDISPPRODMARC), 0) QTDISPPRODMARC , SUM(I.QTPROGENTAF) QTTOTALPROD
               FROM ITEMAUTF I, AUTOFORNE A, ITMAPURPREC P, RELACPRODOL R
              WHERE I.CDFILDEST    = P_CDFILDEST
                AND I.CDFILLANC    = P_CDFILLANC
                AND A.NRSEQAPURAF  = V_NRSEQAPURAF
                AND I.CDFILDEST    = A.CDFILDEST
                AND I.CDFILLANC    = A.CDFILLANC
                AND I.CDPRODUTO    = C_ITEMAUTF.CDPRODUTO
                AND I.NRAUTOFORN   = A.NRAUTOFORN
                AND A.CDFILLANC    = P.CDCENTITMAP
                AND A.NRSEQAPURAF  = P.NRSEQITMAP
                AND I.CDPRODUTO    = R.CDPRODARVOL
                AND R.CDPRARVORIG  = P.CDPRODITMAP
                AND I.CDMARCA      = P.CDMARCITMAP
                AND I.CDFILDEST    = P.CDFILIAP
                AND A.CDFORNECED   = P.CDFORNITMAP
                AND I.DTENTRITMSOL = P.DTENTRAPUT
                AND NVL(P.IDITMSELAPUR, 'N') = 'S'
              GROUP BY CDPRODUTO, I.CDMARCA
              )
         LOOP
            IF C_QT_DISP_FORNE.QTDISPPRODMARC < C_QT_DISP_FORNE.QTTOTALPROD THEN
               OUT_RECORD.NRORG       := P_NRORG;
               OUT_RECORD.CDFILDEST   := P_CDFILDEST;
               OUT_RECORD.CDFILLANC   := P_CDFILLANC;
               OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
               OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
               OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
               OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
               OUT_RECORD.CDFORNECED  := V_CDFORNECEDOL;
               OUT_RECORD.CDERRO      := 'I31';
               OUT_RECORD.VRLIMITE    := C_QT_DISP_FORNE.QTDISPPRODMARC;
               OUT_RECORD.VRERROR     := C_QT_DISP_FORNE.QTTOTALPROD;
               PIPE ROW (OUT_RECORD);
            END IF;
         END LOOP;
      END IF;
      /* 30 - Calendário de compras não calculado*/
      FOR C_CALE_VAZIO IN
          (SELECT RF.CDPERIENTR, RF.IDUTCALENDCMPGERACAOAF
             FROM AUTOFORNE AF INNER JOIN REFORFIL RF ON AF.CDFORNECED = RF.CDFORNECED
                                                     AND AF.CDFILDEST  = RF.CDFILIAL
            WHERE AF.CDFILDEST  = P_CDFILDEST
              AND AF.CDFILLANC  = P_CDFILLANC
              AND AF.NRAUTOFORN = P_NRAUTOFORN
           )
      LOOP
         IF (C_CALE_VAZIO.IDUTCALENDCMPGERACAOAF = 'S') THEN
            BEGIN
               SELECT COUNT(F.DTFERICOMP)
                 INTO V_COUNT
                 FROM FERICOMP F
                WHERE F.CDFILIAL   = P_CDFILDEST
                  AND F.DTFERICOMP = C_ITEMAUTF.DTPROGENTAF
                  AND NOT EXISTS (SELECT 1
                                    FROM CALECOMP C
                                   WHERE C.CDFILIAL    = F.CDFILIAL
                                     AND C.CDPERIENTR  = C_CALE_VAZIO.CDPERIENTR
                                     AND C.DTENTREGA  <= F.DTFERICOMP);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_COUNT  := 0;
            END;
            IF V_COUNT > 0 THEN
               OUT_RECORD.NRORG       := P_NRORG;
               OUT_RECORD.CDFILDEST   := P_CDFILDEST;
               OUT_RECORD.CDFILLANC   := P_CDFILLANC;
               OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
               OUT_RECORD.CDPRODUTO   := C_ITEMAUTF.CDPRODUTO;
               OUT_RECORD.CDMARCA     := C_ITEMAUTF.CDMARCA;
               OUT_RECORD.DTPROGENTAF := C_ITEMAUTF.DTPROGENTAF;
               OUT_RECORD.CDFORNECED  := V_CDFORNECEDOL;
               OUT_RECORD.CDERRO      := 'I30';
               OUT_RECORD.VRLIMITE    := 0;
               OUT_RECORD.VRERROR     := 0;
               PIPE ROW (OUT_RECORD);
            END IF;
         END IF;
      END LOOP;
   END LOOP;
   /*32   - AF automática extra gerada para fornecedor não extra*/
   FOR C_FORNE_EXTRA IN
      (SELECT AUTOFORNE.IDAUTOFORNEX,
              AUTOFORNE.CDFORNECED,
              ENDEFILI.CDPAIS,
              ENDEFILI.SGESTADO,
              ENDEFILI.CDMUNICIPIO,
              ENDEFILI.NRORG
         FROM AUTOFORNE, ENDEFILI
        WHERE AUTOFORNE.CDFILDEST    = P_CDFILDEST
          AND AUTOFORNE.CDFILLANC    = P_CDFILLANC
          AND AUTOFORNE.NRAUTOFORN   = P_NRAUTOFORN
          AND ENDEFILI.CDFILIAL      = P_CDFILDEST
          AND AUTOFORNE.NRORG        = P_NRORG
          AND AUTOFORNE.NRORG        = ENDEFILI.NRORG
          AND ENDEFILI.IDTPENDEFILI  = 'P')
   LOOP
      IF C_FORNE_EXTRA.IDAUTOFORNEX = 'S' THEN
         BEGIN
            SELECT 1
              INTO V_FORNEX
              FROM FORNECMPEXTRA
             WHERE FORNECMPEXTRA.CDFORNECED  = C_FORNE_EXTRA.CDFORNECED
               AND FORNECMPEXTRA.CDPAIS      = C_FORNE_EXTRA.CDPAIS
               AND FORNECMPEXTRA.SGESTADO    = C_FORNE_EXTRA.SGESTADO
               AND FORNECMPEXTRA.CDMUNICIPIO = C_FORNE_EXTRA.CDMUNICIPIO
               AND FORNECMPEXTRA.NRORG       = C_FORNE_EXTRA.NRORG;
         EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_FORNEX  := 0;
         END;
         IF V_FORNEX > 0 THEN
            OUT_RECORD.NRORG       := P_NRORG;
            OUT_RECORD.CDFILDEST   := P_CDFILDEST;
            OUT_RECORD.CDFILLANC   := P_CDFILLANC;
            OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
            OUT_RECORD.CDPRODUTO   := '';
            OUT_RECORD.CDMARCA     := '';
            OUT_RECORD.DTPROGENTAF := '';
            OUT_RECORD.CDFORNECED  := '';
            OUT_RECORD.CDERRO      := 'I32';
            OUT_RECORD.VRLIMITE    := 0;
            OUT_RECORD.VRERROR     := 0;
            PIPE ROW (OUT_RECORD);
         END IF;
      END IF;
   END LOOP;
   BEGIN
      BEGIN
         SELECT IDOBLIBAFMAN
           INTO V_IDOBLIBAFMAN
           FROM PARCMPSUP
          WHERE CDFILIAL = P_CDFILDEST
            AND NRORG    = P_NRORG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDOBLIBAFMAN  := 'N';
      END;
      BEGIN
         SELECT IDTIPOLANCAF
           INTO V_IDTIPOLANCAF
           FROM AUTOFORNE
          WHERE AUTOFORNE.CDFILDEST    = P_CDFILDEST
            AND AUTOFORNE.CDFILLANC    = P_CDFILLANC
            AND AUTOFORNE.NRAUTOFORN   = P_NRAUTOFORN
            AND AUTOFORNE.NRORG        = P_NRORG;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDTIPOLANCAF  := 'M';
      END;
      IF ((V_IDOBLIBAFMAN = 'S') AND (V_IDTIPOLANCAF = 'M')) THEN
         OUT_RECORD.NRORG       := P_NRORG;
         OUT_RECORD.CDFILDEST   := P_CDFILDEST;
         OUT_RECORD.CDFILLANC   := P_CDFILLANC;
         OUT_RECORD.NRAUTOFORN  := P_NRAUTOFORN;
         OUT_RECORD.CDPRODUTO   := '';
         OUT_RECORD.CDMARCA     := '';
         OUT_RECORD.DTPROGENTAF := '';
         OUT_RECORD.CDFORNECED  := '';
         OUT_RECORD.CDERRO      := 'I33';
         OUT_RECORD.VRLIMITE    := 0;
         OUT_RECORD.VRERROR     := 0;
         PIPE ROW (OUT_RECORD);
      END IF;
   END;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('INCONSISTENCIA_AF','6.35.009'); END;
/