CREATE OR REPLACE PROCEDURE VERIFICA_INCONS_NF(
   P_NRACESSONFE  IN NOTAFISCAL.NRACESSONFE%TYPE, 
   P_IDGERNFIGUALXML  IN PARAMGERAL.IDGERNFIGUALXML%TYPE, 
   P_LANCAMENTO   VARCHAR2,
   P_NRLANCTONF   IN NOTAFISCAL.NRLANCTONF%TYPE,
   P_CDFILIAL     IN NOTAFISCAL.CDFILIAL%TYPE,
   P_LIBERAXML    IN PARAMGERAL.IDGERNFIGUALXML%TYPE DEFAULT 'N',
   P_CDTIPOOPER   VARCHAR2 DEFAULT 'N',
   P_LIBERAOPER   VARCHAR2 DEFAULT 'N',
   P_ERRO         OUT NoCopy VARCHAR2
  )

AS                                                                     
   V_CDFORNECED        VARCHAR2(21);
   V_CONSISTE          VARCHAR2(01);
   V_SITUACAO          VARCHAR2(01);
   V_NRSEQINCONS       VARCHAR2(05);
   V_SEQUENCIAL        NUMERIC;
   V_CDINSCESTA        VARCHAR2(25);
   V_CDINSCMUNI        VARCHAR2(16);
   V_CDINSCESTAAF      VARCHAR2(25);
   V_CDFILDEST         VARCHAR2(04);
   V_CDFILLANC         VARCHAR2(04);
   V_NRAUTOFORN        VARCHAR2(10);
   V_CDTIPOOPER        VARCHAR2(02);
   V_CDTPOPRELAC       VARCHAR2(02);
   V_IDAFEXPIRADA      VARCHAR2(01);
   V_ERRO              VARCHAR2(01);
   V_CDEMPRESA         VARCHAR2(02);
   V_CDFILIRECE        VARCHAR2(04);
   V_CDFILIRELAC       VARCHAR2(04);
   V_CDMODDOCFISC      VARCHAR2(05);
   V_DTENTRSAID        DATE;
   V_CDARVPROD         VARCHAR2(20);
   V_DTEMISSAO         DATE;
   V_CDSERIEENTR       VARCHAR2(03);
   V_CDSERIEXML        VARCHAR2(03);
   V_QTDAFANTIGA       FLOAT;
   V_EXISTEAF          VARCHAR2(01);
   V_UTILDTPROC        VARCHAR2(01);
   V_EXISTENF          VARCHAR2(20);
   V_BLOQNFSEMAFFOR    VARCHAR2(01);
   V_IDEXIGEAF         VARCHAR2(01);
   V_IDEXIGEAFTPOP     VARCHAR2(01);
   V_IDBLOQCMPSAFFIL   VARCHAR2(01);
   V_IDUTBLOQOPAF      VARCHAR2(01);
   V_PARAMCMPPROD      NUMBER;
   V_DTMINVAZIA        VARCHAR2(01);
   V_DTPROCINI         DATE;
   V_DTMAXVAZIA        VARCHAR2(01);
   V_DTPROCFIM         DATE;
   V_DTPROCESSA        DATE;
   V_IDBLOQTPOPER      VARCHAR2(01);
   V_DATAVENCXML       DATE;
   V_DATAVENCNF        DATE;
   V_VRNOTAFISC        FLOAT;
   V_VRNOTAFISCXML     FLOAT;
   V_QTDPARCXML        NUMBER;
   V_QTDPARCNF         NUMBER;
   V_VRVENCXML         FLOAT;
   V_VRVENCNF          FLOAT;
   V_QTDITRELAC        NUMBER;
   V_QTDITXML          NUMBER;
   V_IDERROS           VARCHAR2(10);
   V_IDAVISOS          VARCHAR2(10);
   V_BLOQAVIS          VARCHAR2(01);
   V_PERMLIBOPER       VARCHAR2(01);
   V_ITRELACXMLAF      NUMBER;
   V_IDUTINSCNFFILORI  VARCHAR2(01); /* Utilizar a inscricao estadual para verificar a filial de destino (V_CDFILIRECE)*/

   V_IDFUNCAOFILI      VARCHAR2(01);

   V_CDFILIRECEO  FILIAL.CDFILIAL%TYPE;      /* Produto oriundo de AF*/
   V_CDARVPRODO   PRODUTO.CDARVPROD%TYPE;  
   V_CDTIPOOPERO  TIPOOPERAC.CDTIPOOPER%TYPE;
   V_MAXPRODUTO   ITEMAUTF.CDPRODUTO%TYPE;
   V_IDBLOQNFSAF  PARAMCMPPROD.IDBLOQNFSAF%TYPE;
   V_COUNTAF      NUMBER;

   V_IDUTCTRFISC    VARCHAR2(01);
BEGIN

   V_ERRO := 'N';

   /*Exclui as inconsistencias referentes ao xml a ser lancado*/
   DELETE
     FROM INTG_INCONSISTENCIA
    WHERE NRACESSONFE = P_NRACESSONFE;

   V_SEQUENCIAL := 1;
   V_EXISTENF   := NULL;

   BEGIN
      SELECT MAX(NRLANCTONF)
        INTO V_EXISTENF
        FROM NOTAFISCAL
       WHERE NRACESSONFE = P_NRACESSONFE
         AND CDFILIAL||NRLANCTONF <> NVL(P_CDFILIAL, '0000') || NVL(P_NRLANCTONF, '0000000000')
         AND NVL(IDENTRSAIDOP, 'E') <> 'S';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_EXISTENF := NULL;
   END;

   IF (V_EXISTENF IS NOT NULL) THEN
      V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
      INSERT
        INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
      VALUES (P_NRACESSONFE, V_NRSEQINCONS, '030','Nota fiscal ja cadastrada no sistema.');

      V_SEQUENCIAL := V_SEQUENCIAL + 1;
      V_ERRO := 'S';
   ELSE

      IF (NVL(P_CDTIPOOPER, 'N') = 'N') THEN
         BEGIN
            SELECT CDTIPOOPER
              INTO V_CDTPOPRELAC
              FROM INTG_ITEMPRODUTO I, CFOPXMLTPOPER C
             WHERE I.NRACESSONFE = P_NRACESSONFE
               AND IDENTRSAIDOP  = 'E'
               AND I.CDFISOPEITEM = C.CDFISCOPER
               AND ROWNUM = 1
             ORDER BY NRSEQITPROD;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_CDTPOPRELAC := NULL;
         END;
      ELSE
         V_CDTPOPRELAC := P_CDTIPOOPER;
         UPDATE INTG_NOTAFISCAL
            SET CDTIPOOPER  = V_CDTPOPRELAC
          WHERE NRACESSONFE = P_NRACESSONFE;
      END IF;

      BEGIN
         SELECT I.CDFILIRECE, NVL(CDTIPOOPER, V_CDTPOPRELAC), I.CDINSCESTA, I.DTEMISSAO,
                I.CDMODDOCFISC, I.CDFORNECED, I.CDSERIEENTR, LPAD(IP.NRAUTOFORN, 10, '0') AS NRAUTOFORN
           INTO V_CDFILIRECE, V_CDTIPOOPER, V_CDINSCESTA, V_DTEMISSAO,
                V_CDMODDOCFISC, V_CDFORNECED, V_CDSERIEXML, V_NRAUTOFORN
           FROM INTG_NOTAFISCAL I,
                (SELECT MIN(NRAUTOFORN) AS NRAUTOFORN
                   FROM INTG_ITEMPRODUTO
                  WHERE NRACESSONFE = P_NRACESSONFE) IP
          WHERE I.NRACESSONFE = P_NRACESSONFE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDFILIRECE := NULL; V_CDTIPOOPER := NULL; V_CDINSCESTA := NULL; V_DTEMISSAO := NULL;
            V_CDMODDOCFISC := NULL; V_CDFORNECED := NULL; V_CDSERIEXML := NULL; V_NRAUTOFORN := NULL;
      END;

      IF (V_NRAUTOFORN IS NOT NULL) THEN
         BEGIN
            SELECT COUNT(1)
              INTO V_QTDAFANTIGA
              FROM AUTOFORNE
             WHERE NRAUTOFORN = V_NRAUTOFORN;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_QTDAFANTIGA := 0;
         END;

         IF (V_QTDAFANTIGA = 1) THEN
            SELECT CDFILDEST
              INTO V_CDFILIRECE
              FROM AUTOFORNE
             WHERE NRAUTOFORN = V_NRAUTOFORN;
         END IF;
      END IF;

      /* BUSCAR A FILIAL RELACIONADA A INSCRICAO ESTADUAL DO ARQUIVO XML CASO A FILIAL
         NAO TENHA SIDO PREENCHIDA E O PARAMETRO IDUTINSCNFFILORI ESTEJA MARCADO*/
      IF (V_CDINSCESTA IS NOT NULL) AND (V_CDFILIRECE IS NULL) THEN
         BEGIN
            SELECT NVL(IDUTINSCNFFILORI, 'N') AS IDUTINSCNFFILORI
              INTO V_IDUTINSCNFFILORI
              FROM PARAMGERAL
             WHERE CDPARGERAL = '0001';
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_IDUTINSCNFFILORI := 'N';
         END;

         IF (V_IDUTINSCNFFILORI = 'S') THEN
            BEGIN
               SELECT MAX(CDFILIAL)
                 INTO V_CDFILIRECE
                 FROM FILIAL
                WHERE CDINSCESTA = V_CDINSCESTA;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDFILIRECE := NULL;
            END;

            IF V_CDFILIRECE IS NOT NULL THEN
               UPDATE INTG_NOTAFISCAL
                  SET CDFILIRECE = V_CDFILIRECE
                WHERE NRACESSONFE = P_NRACESSONFE;
            END IF;       
         END IF;
      END IF;
      /* BUSCAR A FILIAL RELACIONADA A INSCRICAO ESTADUAL DO ARQUIVO XML CASO A FILIAL
         NAO TENHA SIDO PREENCHIDA E O PARAMETRO IDUTINSCNFFILORI ESTEJA MARCADO*/

      V_IDFUNCAOFILI := 'N';
      BEGIN
         SELECT NVL(IDFUNCAOFILI, 'N')
           INTO V_IDFUNCAOFILI
           FROM FILIAL
          WHERE CDFILIAL = V_CDFILIRECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDFUNCAOFILI := 'N';
      END;

      /* BUSCAR TIPO DE OPERACAO RELACIONADO A FILIAL */
      IF (NVL(P_CDTIPOOPER, 'N') = 'N') THEN
         IF (V_CDFILIRECE IS NOT NULL) THEN
            BEGIN
               SELECT NVL(MAX(CDTIPOOPERFIL), V_CDTIPOOPER)
                 INTO V_CDTIPOOPER
                 FROM INTG_ITEMPRODUTO I, CFOPXMLTPOPFIL C
                WHERE I.NRACESSONFE = P_NRACESSONFE
                  AND IDENTRSAIDOPFIL  = 'E'
                  AND I.CDFISOPEITEM = C.CDFISCOPERFIL
                  AND C.CDFILIAL = V_CDFILIRECE
                  AND ROWNUM = 1
                ORDER BY NRSEQITPROD;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDTIPOOPER := V_CDTIPOOPER;
            END;
         END IF;
      END IF;   

      IF (V_CDFILIRECE IS NOT NULL) THEN

         BEGIN
            SELECT DECODE(PG.IDUTILDTPROC,'S',DECODE(PF.DTPROCESSA, NULL, TO_DATE(SYSDATE), PF.DTPROCESSA),TO_DATE(SYSDATE)) AS DTPROCESSA,
                   DECODE(PF.IDUTBLOQOPAFPF, 'N', IDUTBLOQOPAFPG, PF.IDUTBLOQOPAFPF) IDBLOQTPOPER,
                   DECODE(PG.IDUTCTRLFISENTR, 'S', PG.IDUTCTRLFISENTR, PF.IDUTCTRLFISENTR) IDUTCTRLFISENTR
              INTO V_DTPROCESSA, V_IDBLOQTPOPER, V_IDUTCTRFISC
              FROM PARAMGERAL PG, PARAMFILIAL PF
             WHERE PG.CDPARGERAL = '0001'
               AND PF.CDFILIAL = V_CDFILIRECE;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_DTPROCESSA := TO_DATE(SYSDATE); V_IDBLOQTPOPER := 'N'; V_IDUTCTRFISC := 'N'; 
         END;

         SELECT DECODE(PF.IDUTBLOQOPAFPF, 'N', PG.IDUTBLOQOPAFPG, 'S') AS IDEXIGEAF,
                PF.IDBLOQCMPSAFFIL,
                DECODE(SUBSTR(PF.DSPARFILFIS, 2, 1), 'N', PG.IDBLOQCMPSAF, 'S') AS IDUTBLOQOPAF,
                DECODE(NRMAXDIAANTDTAF, NULL, 'T', 'N') AS DTMINVAZIA,
                DECODE(NRMAXDIAANTDTAF, NULL, NULL, V_DTPROCESSA - NRMAXDIAANTDTAF) AS DTPROCINI,
                DECODE(NRMAXDIAPOSDTAF, NULL, 'T', 'N') AS DTMAXVAZIA,
                DECODE(NRMAXDIAPOSDTAF, NULL, NULL, V_DTPROCESSA + NRMAXDIAPOSDTAF) AS DTPROCFIM
           INTO V_IDEXIGEAF,
                V_IDBLOQCMPSAFFIL,
                V_IDUTBLOQOPAF,
                V_DTMINVAZIA,
                V_DTPROCINI,
                V_DTMAXVAZIA,
                V_DTPROCFIM
           FROM PARAMGERAL PG, PARAMFILIAL PF
          WHERE PG.CDPARGERAL = '0001'
            AND PF.CDFILIAL = V_CDFILIRECE;
      END IF;

      IF (P_LANCAMENTO = 'N') THEN

         FOR C_ITEMPRODUTO IN (SELECT LPAD(NRAUTOFORN, 10, '0') AS NRAUTOFORN
                                 FROM INTG_ITEMPRODUTO
                                WHERE NRACESSONFE = P_NRACESSONFE
                                  AND NRAUTOFORN IS NOT NULL) LOOP

            /* == Verificar se a AF esta dentro do periodo == */

            BEGIN
               SELECT COUNT(1)
                 INTO V_QTDAFANTIGA
                 FROM AUTOFORNE A
                WHERE (A.CDFORNECED  = V_CDFORNECED)
                  AND (A.IDBAIXAAF = '1' OR A.IDBAIXAAF IS NULL)
                  AND (A.NRAUTOFORN  = C_ITEMPRODUTO.NRAUTOFORN)
                  AND (A.IDAFFORALIM = 'N')
                  AND (A.IDSITUATUAAF IS NULL)
                  AND (NVL(A.IDAFOPERLOG,'1') = '1')
                  AND (NVL(A.IDAFEXPIRADA, 'N') = 'N');
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_QTDAFANTIGA := 0;
            END;

            IF (V_QTDAFANTIGA > 1) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '028','Possui mais de uma AF no sistema conforme AF informada no arquivo XML.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSE
               BEGIN
                  SELECT COUNT(1)
                    INTO V_QTDAFANTIGA
                    FROM AUTOFORNE A, ITEMAUTF I
                   WHERE (A.CDFORNECED  = V_CDFORNECED)
                     AND (A.IDBAIXAAF = '1' OR A.IDBAIXAAF IS NULL)
                     AND (I.IDBAIXITMAF NOT IN ('2','3')  OR I.IDBAIXITMAF IS NULL)
                     AND ((I.DTPROGENTAF >= V_DTPROCINI)
                      OR (V_DTMINVAZIA   = 'T'))
                     AND ((I.DTPROGENTAF <= V_DTPROCFIM)
                      OR (V_DTMAXVAZIA   = 'T'))
                     AND (A.CDFILDEST   = I.CDFILDEST )
                     AND (A.CDFILLANC   = I.CDFILLANC )
                     AND (A.NRAUTOFORN  = I.NRAUTOFORN)
                     AND (A.NRAUTOFORN  = C_ITEMPRODUTO.NRAUTOFORN)
                     AND (A.IDAFFORALIM = 'N')
                     AND (A.IDSITUATUAAF IS NULL)
                     AND (NVL(A.IDAFOPERLOG,'1') = '1')
                     AND (NVL(A.IDAFEXPIRADA, 'N') = 'N');
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_QTDAFANTIGA := 0;
               END;

               IF (V_QTDAFANTIGA = 0) THEN

                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '020','AF: ' || C_ITEMPRODUTO.NRAUTOFORN || ' informada no arquivo XML baixada, inexistente no sistema ou fora do periodo permitido.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               ELSE

                  SELECT CDFILDEST
                    INTO V_CDFILDEST
                    FROM AUTOFORNE
                   WHERE NRAUTOFORN = C_ITEMPRODUTO.NRAUTOFORN;

                  IF (V_CDFILIRECE IS NOT NULL) THEN
                     IF (V_CDFILIRECE <> V_CDFILDEST) THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, '029','Filial informada no arquivo XML diferente da filial informada na AF.');

                        V_SEQUENCIAL := V_SEQUENCIAL + 1;
                        V_ERRO := 'S';
                     END IF;
                  ELSE
                     V_CDFILIRECE := V_CDFILDEST;
                  END IF;
               END IF;
            END IF;
         END LOOP;

         IF (V_ERRO <> 'S') THEN /*Caso a AF informada nao exista o lancamento e nao continua o processo*/

            IF (V_CDFILIRECE IS NULL) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '021','Filial inativa ou nao informada no arquivo XML.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSE
               SELECT DECODE(NVL(IDCNTRRESC, 'N'), 'N', CDFILIAL, NULL)
                 INTO V_CDFILIRECE
                 FROM FILIAL
                WHERE CDFILIAL = V_CDFILIRECE;

               IF (V_CDFILIRECE IS NULL) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '021','Filial inativa ou nao informada no arquivo XML.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               END IF;
            END IF;

            IF (V_CDMODDOCFISC IS NULL) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '022','Modelo nao informado no arquivo XML.');

               V_SEQUENCIAL  := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            END IF;

            IF ((V_CDMODDOCFISC IS NOT NULL) AND (V_CDTIPOOPER IS NOT NULL)) THEN
               BEGIN
                  SELECT MAX(CDMODDOCFISC)
                    INTO V_CDMODDOCFISC
                    FROM MODDOCFISCTPOP
                   WHERE CDTIPOOPER   = V_CDTIPOOPER
                     AND CDMODDOCFISC = V_CDMODDOCFISC
                     AND IDENTRSAIDOP = 'E';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDMODDOCFISC := NULL;
               END;

               IF (V_CDMODDOCFISC IS NULL) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '023','Modelo 55 nao relacionado ao tipo de operacao.');

                  V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               END IF;
            END IF;

            IF (V_CDFILIRECE IS NOT NULL) THEN
               /* Verificar se o fornecedor obriga  importacao de AF */
               BEGIN
                  SELECT COUNT(1)
                    INTO V_COUNTAF
                    FROM INTG_ITEMPRODUTO
                   WHERE NRACESSONFE = P_NRACESSONFE
                     AND NRAUTOFORN IS NULL;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_COUNTAF := 0;
               END;

               IF (V_COUNTAF > 0) THEN
                  V_NRAUTOFORN := NULL;

                  /*Verificar se a filial possuiu parametrizacao para permitir produto sem AF*/
                  SELECT COUNT(1)
                    INTO V_PARAMCMPPROD
                    FROM PARAMCMPPROD P
                   WHERE (P.CDFILIAL = V_CDFILIRECE)
                     AND (P.IDBLOQNFSAF = 'N');
                  /*Verificar se a filial possuiu parametrizacao para permitir produto sem AF*/

                  IF (V_NRAUTOFORN IS NULL) THEN
                     IF (V_CDTIPOOPER IS NOT NULL) THEN
                        IF (V_CDTIPOOPER = '01') THEN   /* Operacao de compra, utiliza os parametros especificos para compra*/

                           V_BLOQNFSEMAFFOR := 'N';
                           BEGIN
                              SELECT NVL(IDBLOQCMPSAFFIL, 'N')
                                INTO V_IDBLOQCMPSAFFIL
                                FROM PARAMFILIAL
                               WHERE CDFILIAL = V_CDFILIRECE;
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_IDBLOQCMPSAFFIL := 'N';
                           END;

                           IF (V_IDBLOQCMPSAFFIL = 'S') THEN
                              BEGIN
                                 SELECT NVL(IDBLOQCMPSAFFOR, 'N')
                                   INTO V_BLOQNFSEMAFFOR
                                   FROM FORNECEDOR
                                  WHERE CDFORNECED = V_CDFORNECED;
                              EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_BLOQNFSEMAFFOR := 'N';
                              END;
                           END IF;

                           IF (V_BLOQNFSEMAFFOR = 'S') AND (V_PARAMCMPPROD > 0) THEN
                              V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                              INSERT
                                INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                              VALUES (P_NRACESSONFE, V_NRSEQINCONS, '031','Operacao bloqueada! Fornecedor exige AF.');

                              V_SEQUENCIAL := V_SEQUENCIAL + 1;
                              V_ERRO := 'S';
                           END IF;

                           IF ((V_BLOQNFSEMAFFOR = 'S') OR (V_IDUTBLOQOPAF = 'S')) AND (V_PARAMCMPPROD = 0) THEN
                              V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                              INSERT
                                INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                              VALUES (P_NRACESSONFE, V_NRSEQINCONS, '031','Operacao bloqueada! Nota fiscal deve possuir AF.');

                              V_SEQUENCIAL := V_SEQUENCIAL + 1;
                              V_ERRO := 'S';
                           END IF;
                        ELSE /* As outras operacoes, verifica a tela tipo de operacao exige AF caso utilizar o parametro*/
                           IF (V_IDBLOQTPOPER = 'S') AND (V_PARAMCMPPROD = 0)THEN
                              BEGIN
                                 SELECT IDEXIGEAF
                                   INTO V_IDEXIGEAFTPOP
                                   FROM PARAMBLOQNFAFIL
                                  WHERE CDTIPOOPER = V_CDTIPOOPER
                                    AND CDFILIAL   = V_CDFILIRECE;
                              EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_IDEXIGEAFTPOP := 'N';
                              END;

                              IF (V_IDEXIGEAFTPOP = 'S') THEN
                                 V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                                 INSERT
                                   INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                                 VALUES (P_NRACESSONFE, V_NRSEQINCONS, '031','Operacao bloqueada! Nota fiscal deve possuir AF.');

                                 V_SEQUENCIAL := V_SEQUENCIAL + 1;
                                 V_ERRO := 'S';
                              END IF;
                           END IF;
                        END IF;
                     END IF;
                  END IF;
               END IF;

               V_DTENTRSAID := TO_DATE(SYSDATE);

               IF (V_DTENTRSAID < V_DTEMISSAO) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '024','Data de entrada anterior a data de emissao.');

                  V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               END IF;

               V_CDFILIRELAC := NULL;
               BEGIN
                  SELECT MAX(A.CDFILIAL), MAX(A.CDEMPRESA), MAX(A.CDINSCMUNI)
                    INTO V_CDFILIRELAC, V_CDEMPRESA, V_CDINSCMUNI
                    FROM(SELECT CDFILIAL, CDEMPRESA, CDINSCMUNI
                           FROM FILIAL
                          WHERE CDFILIAL   = V_CDFILIRECE
                            AND CDINSCESTA = V_CDINSCESTA
                          UNION
                         SELECT CDFILIAL, CDEMPRESA, CDINSCMUNI
                           FROM EMPRCNTRFIL
                          WHERE CDFILIAL   = V_CDFILIRECE
                            AND CDINSCESTA = V_CDINSCESTA) A;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDFILIRELAC := NULL; V_CDEMPRESA:= NULL; V_CDINSCMUNI := NULL;
               END;

               IF (V_CDFILIRELAC IS NULL) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '025','Filial e/ou empresa nao relacionada a inscricao estadual informada no arquivo XML.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               END IF;

               IF (V_CDINSCMUNI IS NULL) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '027','Nao ha inscricao municipal relacionada a filial/inscricao estadual informada no arquivo XML.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               END IF;
            END IF;

            BEGIN
               SELECT CDSERIEENTR
                 INTO V_CDSERIEENTR
                 FROM SERIEENTR
                WHERE CDSERIEENTR = V_CDSERIEXML;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDSERIEENTR := NULL;
            END;

            IF (V_CDSERIEENTR IS NULL) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '026','Serie nao cadastrada.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            END IF;
         END IF;
      END IF;

      /* == Verificacao se todos os itens do XML estao relacionados aos itens do sistema Teknisa == */
      IF (V_ERRO <> 'S') THEN /* Verificacao abaixo feita somente se nao houver erros acima */
         IF (V_CDFORNECED IS NOT NULL) THEN
            BEGIN
               SELECT COUNT(1)
                 INTO V_QTDITRELAC
                 FROM (SELECT PR.CDARVPROD, PR.NMPRODUTO,  I.VRUNITITEM,
                           I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM, 
                           PR.CDPRODUTO, I.QTITEMPROD,  LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN, 
                           I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR, 
                           PR.CDPRODESTO, NVL(PR.VRFATOCONV, 1) AS VRFATOCONV 
                      FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR 
                     WHERE I.NRACESSONFE = P_NRACESSONFE 
                       AND I.CDPRODUTO   = P.CDPRODUTOXML 
                       AND P.CDPRODUTO   = PR.CDPRODUTO 
                       AND P.CDFORNECED  = V_CDFORNECED 
                       AND V_IDFUNCAOFILI <> 'O' 
                     UNION ALL 
                    SELECT DISTINCT PR.CDARVPROD, PR.NMPRODUTO,  I.VRUNITITEM,
                           I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM, 
                           PR.CDPRODUTO, I.QTITEMPROD,  LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN, 
                           I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR, 
                           PR.CDPRODESTO, NVL(PR.VRFATOCONV, 1) AS VRFATOCONV 
                      FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR, RELACPRODOL R, ITEMAUTF IT 
                     WHERE I.NRACESSONFE = P_NRACESSONFE 
                       AND I.CDPRODUTO   = P.CDPRODUTOXML 
                       AND R.CDPRARVORIG = P.CDPRODUTO
                       AND R.CDPRODARVOL = PR.CDPRODUTO 
                       AND P.CDFORNECED  = V_CDFORNECED
                       AND IT.CDPRODUTO  = R.CDPRODARVOL
                       AND IT.NRAUTOFORN = I.NRAUTOFORN
                       AND IT.CDPRODUTO  = PR.CDPRODUTO
                       AND IT.CDMARCA    = R.CDMARCA
                       AND V_IDFUNCAOFILI = 'O'
                       AND I.NRAUTOFORN IS NOT NULL
                   UNION ALL 
                    SELECT DISTINCT PR.CDARVPROD, PR.NMPRODUTO,  I.VRUNITITEM, 
                           I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM, 
                           PR.CDPRODUTO, I.QTITEMPROD,  LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN, 
                           I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR, 
                           PR.CDPRODESTO, NVL(PR.VRFATOCONV, 1) AS VRFATOCONV 
                      FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR, RELACPRODOL R
                     WHERE I.NRACESSONFE = P_NRACESSONFE 
                       AND I.CDPRODUTO   = P.CDPRODUTOXML 
                       AND R.CDPRARVORIG = P.CDPRODUTO 
                       AND R.CDPRODARVOL = PR.CDPRODUTO 
                       AND P.CDFORNECED  = V_CDFORNECED                     
                       AND V_IDFUNCAOFILI = 'O'    
                       AND I.NRAUTOFORN IS NULL);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_QTDITRELAC := 0;
            END;

            BEGIN
               SELECT COUNT(1)
                 INTO V_QTDITXML
                 FROM INTG_ITEMPRODUTO
                WHERE NRACESSONFE = P_NRACESSONFE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_QTDITXML := 0;
            END;

            IF (V_QTDITRELAC = 0) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '014','Produtos do XML nao relacionados aos produtos da arvore Teknisa.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSE
               IF (V_QTDITRELAC <> V_QTDITXML) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '032','Todos os produtos devem estar relacionados aos produtos da arvore Teknisa.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               ELSE
                  IF (P_LANCAMENTO = 'N') THEN

                     FOR C_ITEMPRODUTO IN (SELECT PR.CDARVPROD, PR.NMPRODUTO,  I.VRUNITITEM,
                                                  I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM,
                                                  PR.CDPRODUTO, I.QTITEMPROD,  LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN,
                                                  I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR,
                                                  PR.CDPRODESTO
                                             FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR
                                            WHERE I.NRACESSONFE = P_NRACESSONFE
                                              AND I.CDPRODUTO   = P.CDPRODUTOXML
                                              AND P.CDPRODUTO   = PR.CDPRODUTO
                                              AND P.CDFORNECED  = V_CDFORNECED
                                              AND V_IDFUNCAOFILI <> 'O'
                                            UNION ALL
                                           SELECT DISTINCT PR.CDARVPROD, PR.NMPRODUTO,  I.VRUNITITEM,
                                                  I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM,
                                                  PR.CDPRODUTO, I.QTITEMPROD,  LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN,
                                                  I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR,
                                                  PR.CDPRODESTO
                                             FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR, RELACPRODOL R
                                            WHERE I.NRACESSONFE = P_NRACESSONFE
                                              AND I.CDPRODUTO   = P.CDPRODUTOXML
                                              AND R.CDPRARVORIG = P.CDPRODUTO
                                              AND R.CDPRODARVOL = PR.CDPRODUTO
                                              AND P.CDFORNECED  = V_CDFORNECED
                                              AND V_IDFUNCAOFILI = 'O'
                                              AND I.NRAUTOFORN IS NULL
                                            UNION ALL
                                           SELECT DISTINCT PR.CDARVPROD, PR.NMPRODUTO,  I.VRUNITITEM,
                                                  I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM,
                                                  PR.CDPRODUTO, I.QTITEMPROD,  LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN,
                                                  I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR,
                                                  PR.CDPRODESTO
                                             FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR, RELACPRODOL R, ITEMAUTF IT
                                            WHERE I.NRACESSONFE = P_NRACESSONFE
                                              AND I.CDPRODUTO   = P.CDPRODUTOXML
                                              AND R.CDPRARVORIG = P.CDPRODUTO
                                              AND R.CDPRODARVOL = PR.CDPRODUTO
                                              AND P.CDFORNECED  = V_CDFORNECED
                                              AND V_IDFUNCAOFILI = 'O'
                                              AND IT.CDPRODUTO  = R.CDPRODARVOL
                                              AND IT.NRAUTOFORN = I.NRAUTOFORN
                                              AND IT.CDPRODUTO  = PR.CDPRODUTO
                                              AND IT.CDMARCA    = R.CDMARCA
                                              AND I.NRAUTOFORN IS NOT NULL) LOOP

                        IF (C_ITEMPRODUTO.NRAUTOFORN IS NOT NULL) THEN
                           SELECT CDFILLANC, CDFILDEST
                             INTO V_CDFILLANC, V_CDFILDEST
                             FROM AUTOFORNE
                            WHERE NRAUTOFORN = C_ITEMPRODUTO.NRAUTOFORN
                              AND (IDAFFORALIM = 'N')
                              AND (IDSITUATUAAF IS NULL)
                              AND (NVL(IDAFOPERLOG,'1') = '1')
                              AND (NVL(IDAFEXPIRADA, 'N') = 'N');

                           V_ITRELACXMLAF := 0;

                           SELECT COUNT(1)
                             INTO V_ITRELACXMLAF
                             FROM ITEMAUTF I, PRODUTO P
                            WHERE I.CDFILLANC   = V_CDFILLANC
                              AND I.CDFILDEST   = V_CDFILDEST
                              AND I.NRAUTOFORN  = C_ITEMPRODUTO.NRAUTOFORN
                              AND P.CDPRODESTO  = C_ITEMPRODUTO.CDPRODESTO
                              AND (IDBAIXITMAF NOT IN ('2','3') OR IDBAIXITMAF IS NULL)
                              AND (QTPROGENTAF - NVL(QTEFETENTRAF, 0)) > 0
                              AND I.CDPRODUTO = P.CDPRODUTO;

                           IF (V_ITRELACXMLAF = 0) THEN
                              V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                              INSERT
                                INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                              VALUES (P_NRACESSONFE, V_NRSEQINCONS, '071','Produto relacionado '||C_ITEMPRODUTO.CDARVPROD||'-'||C_ITEMPRODUTO.NMPRODUTO|| ' nao corresponte com o produto da AF.');

                              V_SEQUENCIAL := V_SEQUENCIAL + 1;
                              V_ERRO := 'S';
                           END IF;
                        END IF;
                     END LOOP;
                  END IF;
               END IF;
            END IF;
         END IF;
      END IF;

      IF (P_LANCAMENTO = 'S') THEN

         IF NOT (P_IDGERNFIGUALXML = 'S') THEN

            /*VERIFICA SE O FORNECEDOR ESTA PARAMETRIZADO PARA REALIZAR CONSISTENCIAS*/
            BEGIN
               SELECT NVL(IDREACONSIMPXML, 'N')
                 INTO V_CONSISTE
                 FROM PARAMFORNE
                WHERE CDFORNECED = V_CDFORNECED;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CONSISTE := 'N';
            END;

            IF (V_CONSISTE = 'S') THEN

               /*Consistencias Nota fiscal */
               FOR C_CONSISTENCIA IN (SELECT C.CDCONSISTXML, C.DSCONSISTXML, I.IDCONSISTXML, P.CDPAINEL
                                        FROM CONSISTXML C, ITPANCONSXML I, PAINELCONSXML P
                                       WHERE I.CDCONSISTXML = C.CDCONSISTXML
                                         AND I.CDPAINEL     = P.CDPAINEL
                                       ORDER BY P.CDPAINEL
               )LOOP

                  IF (C_CONSISTENCIA.CDCONSISTXML = '001') THEN -- ('001','Fornecedor Inativo')

                     BEGIN
                        SELECT NVL(IDSITUCADA, 'A')
                          INTO V_SITUACAO
                          FROM FORNECEDOR
                         WHERE CDFORNECED = V_CDFORNECED
                           AND IDSITUCADA = 'I';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_SITUACAO := 'A';
                     END;

                     IF (V_SITUACAO = 'I') THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                        V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                        IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;
                     END IF;

                  END IF;

                  IF (C_CONSISTENCIA.CDCONSISTXML = '004') THEN -- ('004','AF nao pertence a inscricao informada no XML.')


                     FOR C_ITEMPRODUTO IN (SELECT LPAD(NRAUTOFORN, 10, '0') AS NRAUTOFORN
                                 FROM INTG_ITEMPRODUTO
                                WHERE NRACESSONFE = P_NRACESSONFE
                                  AND NRAUTOFORN IS NOT NULL) LOOP

                        SELECT CDFILDEST
                          INTO V_CDFILDEST
                          FROM AUTOFORNE
                         WHERE NRAUTOFORN = C_ITEMPRODUTO.NRAUTOFORN;

                         BEGIN
                            SELECT MAX(CDINSCESTA)
                              INTO V_CDINSCESTAAF
                              FROM (SELECT CDINSCESTA
                                      FROM EMPRCNTRFIL
                                     WHERE CDFILIAL   = V_CDFILDEST
                                       AND CDINSCESTA = V_CDINSCESTA
                                     UNION
                                    SELECT CDINSCESTA
                                      FROM FILIAL
                                     WHERE CDFILIAL   = V_CDFILDEST
                                       AND CDINSCESTA = V_CDINSCESTA
                                   );
                         EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                               V_CDINSCESTAAF := NULL;
                         END;
                         IF (V_CDINSCESTAAF IS NULL) THEN
                            V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                            INSERT
                              INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                            VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                            V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                            IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                               V_ERRO := 'S';
                            END IF;
                         END IF;

                     END LOOP;
                  END IF;

                  IF (C_CONSISTENCIA.CDCONSISTXML = '010') THEN -- ('010','Valor da nota no arquivo XML difere do valor calculado pelo sistema.')
                     SELECT ROUND(N.VRNOTAFISC, 2), ROUND(I.VRNOTAFISC, 2)
                       INTO V_VRNOTAFISC, V_VRNOTAFISCXML
                       FROM NOTAFISCAL N, INTG_NOTAFISCAL I
                      WHERE I.NRACESSONFE = P_NRACESSONFE
                        AND N.NRACESSONFE = I.NRACESSONFE
                        AND NVL(N.IDENTRSAIDOP, 'E') <> 'S';

                     IF (V_VRNOTAFISC) <> (V_VRNOTAFISCXML) THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                        V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                        IF (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;
                     END IF;
                  END IF;


                  IF (C_CONSISTENCIA.CDCONSISTXML = '011') THEN -- ('011','Numero de parcelas do vencimento do arquivo xml difere do numero de parcelas calculado pelo sistema.')
                     BEGIN
                        SELECT COUNT(1)
                          INTO V_QTDPARCXML
                          FROM INTG_CONTAPAGAR
                         WHERE NRACESSONFE = P_NRACESSONFE;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_QTDPARCXML := 0;
                     END;

                     BEGIN
                        SELECT COUNT(1)
                          INTO V_QTDPARCNF
                          FROM CONTAPAGAR
                         WHERE CDFILIAL   = P_CDFILIAL
                           AND NRLANCTONF = P_NRLANCTONF;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_QTDPARCXML := 0;
                     END;

                     IF (V_QTDPARCXML <> V_QTDPARCNF) THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                        V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                        IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;
                     END IF;
                  END IF;

                  IF (C_CONSISTENCIA.CDCONSISTXML = '012') THEN -- ('012','Valor do vencimento do arquivo xml difere do valor calculado pelo sistema.')
                     BEGIN
                        SELECT NVL(SUM(VRORIGPAG), 0)
                          INTO V_VRVENCXML
                          FROM INTG_CONTAPAGAR
                         WHERE NRACESSONFE = P_NRACESSONFE;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_VRVENCXML := 0;
                     END;

                     BEGIN
                        SELECT NVL(SUM(VRORIGPAG), 0)
                          INTO V_VRVENCNF
                          FROM CONTAPAGAR
                         WHERE CDFILIAL   = P_CDFILIAL
                           AND NRLANCTONF = P_NRLANCTONF;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_VRVENCNF := 0;
                     END;

                     --raise_application_error(-20501, V_ERRO||'Sou louco'||P_LIBERAXML||'***'|| C_CONSISTENCIA.DSCONSISTXML||'***'||C_CONSISTENCIA.IDCONSISTXML, true);

                     IF (V_VRVENCNF <> V_VRVENCXML) THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                        V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                        IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;
                     END IF;
                  END IF;

                  IF (C_CONSISTENCIA.CDCONSISTXML = '013') THEN -- ('013','Data do vencimento do arquivo xml difere da data calculada pelo sistema.')
                     BEGIN
                        SELECT MIN(DTORIGVENPAG)
                          INTO V_DATAVENCXML
                          FROM INTG_CONTAPAGAR
                         WHERE NRACESSONFE = P_NRACESSONFE;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_DATAVENCXML := NULL;
                     END;

                     BEGIN
                        SELECT MIN(DTORIGVENPAG)
                          INTO V_DATAVENCNF
                          FROM CONTAPAGAR
                         WHERE CDFILIAL   = P_CDFILIAL
                           AND NRLANCTONF = P_NRLANCTONF;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_DATAVENCNF := NULL;
                     END;

                     IF (NVL(V_DATAVENCXML, SYSDATE) <>  NVL(V_DATAVENCNF, SYSDATE)) THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                        V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                        IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;
                     END IF;
                  END IF;

                  IF (C_CONSISTENCIA.CDCONSISTXML = '016') THEN -- ('016','AF relacionada expirada.')
                     FOR C_ITEMPRODUTO IN (SELECT LPAD(NRAUTOFORN, 10, '0') AS NRAUTOFORN
                                 FROM INTG_ITEMPRODUTO
                                WHERE NRACESSONFE = P_NRACESSONFE
                                  AND NRAUTOFORN IS NOT NULL) LOOP
                        BEGIN
                           SELECT NVL(IDAFEXPIRADA, 'N')
                             INTO V_IDAFEXPIRADA
                             FROM AUTOFORNE
                            WHERE NRAUTOFORN = C_ITEMPRODUTO.NRAUTOFORN;
                        EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_IDAFEXPIRADA := 'N';
                        END;

                        IF (V_IDAFEXPIRADA = 'S') THEN
                           V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                           INSERT
                             INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                           VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML, C_CONSISTENCIA.DSCONSISTXML);

                           V_SEQUENCIAL  := V_SEQUENCIAL + 1;
                           IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                              V_ERRO := 'S';
                           END IF;
                        END IF;
                     END LOOP;
                  END IF;

               END LOOP;

               /*Consistencias por Produto */

               FOR C_CONSISTENCIA IN (SELECT C.CDCONSISTXML, C.DSCONSISTXML, I.IDCONSISTXML, P.CDPAINEL
                                        FROM CONSISTXML C, ITPANCONSXML I, PAINELCONSXML P
                                       WHERE I.CDCONSISTXML = C.CDCONSISTXML
                                         AND I.CDPAINEL     = P.CDPAINEL
                                       ORDER BY P.CDPAINEL
               )LOOP

                  IF (C_CONSISTENCIA.CDCONSISTXML = '008') THEN -- ('008','Valor do imposto difere do valor calculado pelo sistema.')
                     FOR C_IMPODIF IN (SELECT I.CDIMPOSTOIT, I.VRALIQITEM, I.NRSEQIMPOIT, IPR.CDPRODEMIS
                                         FROM INTG_TRABITPROIMPOS I, NOTAFISCAL N, ITEMPRODUTO IPR
                                        WHERE N.NRACESSONFE   = P_NRACESSONFE
                                          AND N.NRACESSONFE   = I.NRACESSONFE
                                          AND N.CDFILIAL      = IPR.CDFILIAL
                                          AND N.NRLANCTONF    = IPR.NRLANCTONF
                                          AND IPR.NRSEQITPROD = LPAD(I.NRSEQIMPOIT, 4, '0')
                                          AND N.CDFILIAL      = P_CDFILIAL
                                          AND N.NRLANCTONF    = P_NRLANCTONF
                                          AND EXISTS (SELECT CDFILIAL
                                                            FROM ITEMPROIMPOS IP
                                                           WHERE IP.CDFILIAL    = N.CDFILIAL
                                                             AND IP.NRLANCTONF  = N.NRLANCTONF
                                                             AND IP.NRSEQITPROD = LPAD(I.NRSEQIMPOIT, 4, '0')
                                                             AND IP.CDIMPOSTO = I.CDIMPOSTOIT
                                                             AND IP.NRITPROIMPOS = '1'
                                                             AND IP.VRIMPOSTOIT <> I.VRIMPOSTOIT))LOOP

                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML,'Valor do imposto ' || C_IMPODIF.CDIMPOSTOIT|| ' difere do valor calculado pelo sistema para o item '||C_IMPODIF.CDPRODEMIS);

                        V_SEQUENCIAL := V_SEQUENCIAL + 1;
                        IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;

                     END LOOP;
                  END IF;

                  IF (C_CONSISTENCIA.CDCONSISTXML = '009') THEN -- ('009','Aliquota do imposto difere da aliquota parametrizada no sistema.')
                     FOR C_ALIQDIF IN (SELECT I.CDIMPOSTOIT, I.VRALIQITEM, I.NRSEQIMPOIT, IPR.CDPRODEMIS
                                         FROM INTG_TRABITPROIMPOS I, NOTAFISCAL N, ITEMPRODUTO IPR
                                        WHERE N.NRACESSONFE   = P_NRACESSONFE
                                          AND N.NRACESSONFE   = I.NRACESSONFE
                                          AND N.CDFILIAL      = IPR.CDFILIAL
                                          AND N.NRLANCTONF    = IPR.NRLANCTONF
                                          AND IPR.NRSEQITPROD = LPAD(I.NRSEQIMPOIT, 4, '0')
                                          AND N.CDFILIAL      = P_CDFILIAL
                                          AND N.NRLANCTONF    = P_NRLANCTONF
                                          AND EXISTS (SELECT CDFILIAL
                                                            FROM ITEMPROIMPOS IP
                                                           WHERE IP.CDFILIAL    = N.CDFILIAL
                                                             AND IP.NRLANCTONF  = N.NRLANCTONF
                                                             AND IP.NRSEQITPROD = LPAD(I.NRSEQIMPOIT, 4, '0')
                                                             AND IP.CDIMPOSTO = I.CDIMPOSTOIT
                                                             AND IP.NRITPROIMPOS = '1'
                                                             AND IP.VRALIQITEM <> I.VRALIQITEM))LOOP

                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, C_CONSISTENCIA.CDCONSISTXML,'Aliquota do imposto ' || C_ALIQDIF.CDIMPOSTOIT|| ' difere da aliquota parametrizada no sistema para o item '||C_ALIQDIF.CDPRODEMIS);

                        V_SEQUENCIAL := V_SEQUENCIAL + 1;
                        IF (C_CONSISTENCIA.IDCONSISTXML = 'B') AND (P_LIBERAXML = 'N') THEN
                           V_ERRO := 'S';
                        END IF;

                     END LOOP;
                  END IF; 
               END LOOP;
            END IF;
         END IF;
      END IF;
   END IF;
   IF (P_LANCAMENTO = 'S') AND (V_ERRO = 'N') THEN

      SELECT NVL(IDERROS, '0000'), NVL(IDAVISOS, '00000')
        INTO V_IDERROS, V_IDAVISOS
        FROM NOTAFISCAL
       WHERE NRACESSONFE = P_NRACESSONFE
          AND NVL(IDENTRSAIDOP, 'E') <> 'S';

      /* Confere erros nota fiscal */
      IF (V_IDERROS <> '0000') THEN
         /* Total da nota fiscal difere da soma dos itens */
         IF (SUBSTR(V_IDERROS, 3, 1) = '1') AND (SUBSTR(V_IDERROS, 1, 1) = '1') THEN
            BEGIN
               SELECT NVL(IDERROAVISOFIL, 'V')
                 INTO V_BLOQAVIS
                 FROM ERROAVISONFFIL
                WHERE CDERROAVISOFIL = 'ER02'
                  AND CDFILIAL       = P_CDFILIAL;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_BLOQAVIS := 'V';
            END;

            IF (V_BLOQAVIS = 'V') THEN
               BEGIN
                  SELECT NVL(IDERROAVISO, 'N')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'ER02';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'N';
               END;
            END IF;

            BEGIN
               SELECT NVL(IDPERMGRUPO, 'N')
                 INTO V_PERMLIBOPER
                 FROM ERROAVISONF
                WHERE CDERROAVISO = 'ER02';
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_PERMLIBOPER := 'N';
            END;

            IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '046','Total da nota fiscal difere da soma dos itens.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSIF (V_BLOQAVIS = 'C') THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '046','Total da nota fiscal difere da soma dos itens.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
            END IF;
         END IF;
         /* Total de vencimentos difere do valor total da nota fiscal */
         IF SUBSTR(V_IDERROS, 4, 1) = '1' THEN
            BEGIN
               SELECT NVL(IDERROAVISOFIL, 'V')
                 INTO V_BLOQAVIS
                 FROM ERROAVISONFFIL
                WHERE CDERROAVISOFIL = 'ER03'
                  AND CDFILIAL       = V_CDFILIRECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_BLOQAVIS := 'V';
            END;

            IF (V_BLOQAVIS = 'V') THEN
               BEGIN
                  SELECT NVL(IDERROAVISO, 'N')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'ER03';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'N';
               END;
            END IF;

            BEGIN
               SELECT NVL(IDPERMGRUPO, 'N')
                 INTO V_PERMLIBOPER
                 FROM ERROAVISONF
                WHERE CDERROAVISO = 'ER03';
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_PERMLIBOPER := 'N';
            END;

            IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '047','Total de vencimentos difere do valor total da nota fiscal.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSIF (V_BLOQAVIS = 'C') THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '047','Total de vencimentos difere do valor total da nota fiscal.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
            END IF;
         END IF;
      END IF;
      /* Confere avisos nota fiscal */
      IF (V_IDAVISOS <> '00000') THEN
         /* Data de entrada da nota fiscal difere da data programada na AF */
         IF SUBSTR(V_IDAVISOS, 2, 1) = '1' THEN
            BEGIN
               SELECT NVL(IDERROAVISOFIL, 'V')
                 INTO V_BLOQAVIS
                 FROM ERROAVISONFFIL
                WHERE CDERROAVISOFIL = 'AV12'
                  AND CDFILIAL       = V_CDFILIRECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_BLOQAVIS := 'V';
            END;

            IF (V_BLOQAVIS = 'V') THEN
               BEGIN
                  SELECT NVL(IDERROAVISO, 'N')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'AV12';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'N';
               END;
            END IF;

            BEGIN
               SELECT NVL(IDPERMGRUPO, 'N')
                 INTO V_PERMLIBOPER
                 FROM ERROAVISONF
                WHERE CDERROAVISO = 'AV12';
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_PERMLIBOPER := 'N';
            END;

            IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '048','Data de entrada da nota fiscal difere da data programada na AF.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSIF (V_BLOQAVIS = 'C') THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '048','Data de entrada da nota fiscal difere da data programada na AF.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
            END IF;
         END IF;

         /* Fornecedor da nota fiscal difere do fornecedor da AF */
         IF SUBSTR(V_IDAVISOS, 3, 1) = '1' THEN
            BEGIN
               SELECT NVL(IDERROAVISOFIL, 'V')
                 INTO V_BLOQAVIS
                 FROM ERROAVISONFFIL
                WHERE CDERROAVISOFIL = 'AV01'
                  AND CDFILIAL       = V_CDFILIRECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_BLOQAVIS := 'V';
            END;

            IF (V_BLOQAVIS = 'V') THEN
               BEGIN
                  SELECT NVL(IDERROAVISO, 'N')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'AV01';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'N';
               END;
            END IF;

            BEGIN
               SELECT NVL(IDPERMGRUPO, 'N')
                 INTO V_PERMLIBOPER
                 FROM ERROAVISONF
                WHERE CDERROAVISO = 'AV01';
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_PERMLIBOPER := 'N';
            END;

            IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '049','Fornecedor da nota fiscal difere do fornecedor da AF.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSIF (V_BLOQAVIS = 'C') THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '049','Fornecedor da nota fiscal difere do fornecedor da AF.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
            END IF;
         END IF;
         /* Data de vencimento da nota fiscal difere da data programada na AF*/
         IF SUBSTR(V_IDAVISOS, 4, 1) = '1' THEN
            BEGIN
               SELECT NVL(IDERROAVISOFIL, 'V')
                 INTO V_BLOQAVIS
                 FROM ERROAVISONFFIL
                WHERE CDERROAVISOFIL = 'AV15'
                  AND CDFILIAL       = V_CDFILIRECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_BLOQAVIS := 'V';
            END;

            IF (V_BLOQAVIS = 'V') THEN
               BEGIN
                  SELECT NVL(IDERROAVISO, 'N')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'AV15';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'N';
               END;
            END IF;

            BEGIN
               SELECT NVL(IDPERMGRUPO, 'N')
                 INTO V_PERMLIBOPER
                 FROM ERROAVISONF
                WHERE CDERROAVISO = 'AV15';
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_PERMLIBOPER := 'N';
            END;

            IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '050','Data de vencimento da nota fiscal difere da data programada na AF.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSIF (V_BLOQAVIS = 'C') THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '050','Data de vencimento da nota fiscal difere da data programada na AF.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
            END IF;
         END IF;
         /* Data de Vencimento informada anterior a data de processamento */
         IF SUBSTR(V_IDAVISOS, 5, 1) = '1' THEN
            BEGIN
               SELECT NVL(IDERROAVISOFIL, 'V')
                 INTO V_BLOQAVIS
                 FROM ERROAVISONFFIL
                WHERE CDERROAVISOFIL = 'AV17'
                  AND CDFILIAL       = V_CDFILIRECE;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_BLOQAVIS := 'V';
            END;

            IF (V_BLOQAVIS = 'V') THEN
               BEGIN
                  SELECT NVL(IDERROAVISO, 'N')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'AV17';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'N';
               END;
            END IF;

            BEGIN
               SELECT NVL(IDPERMGRUPO, 'N')
                 INTO V_PERMLIBOPER
                 FROM ERROAVISONF
                WHERE CDERROAVISO = 'AV17';
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_PERMLIBOPER := 'N';
            END;

            IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '051','Data de Vencimento informada anterior a data de processamento.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
               V_ERRO := 'S';
            ELSIF (V_BLOQAVIS = 'C') THEN
               V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, V_NRSEQINCONS, '051','Data de Vencimento informada anterior a data de processamento.');

               V_SEQUENCIAL := V_SEQUENCIAL + 1;
            END IF;
         END IF;
      END IF;

      IF (V_ERRO = 'N') THEN
         /* Confere erros dos itens caso nao exista erro na nota fiscal*/

         FOR C_ITEMPRODUTO IN (SELECT NVL(IDAVISOSITEM, '000000') AS IDAVISOSITEM,
                                      NVL(IDERROSITEM, '000000') AS IDERROSITEM,
                                      NRSEQITPROD, CDPRODEMIS, CDPRODUTO
                                 FROM ITEMPRODUTO
                                WHERE CDFILIAL   = P_CDFILIAL
                                  AND NRLANCTONF = P_NRLANCTONF)LOOP

            IF (V_IDUTCTRFISC = 'S') THEN
               FOR C_IMPOSTO IN (SELECT CDIMPOSTO
                                   FROM IMPOBRIGTPOPER
                                  WHERE CDTIPOOPER = V_CDTIPOOPER
                                    AND IDENTRSAIDOP = 'E')LOOP

                  BEGIN
                     SELECT MAX(P.CDARVPROD)
                       INTO V_CDARVPROD
                       FROM ITEMPRODUTO A, PRODUTO P
                      WHERE A.CDFILIAL   = P_CDFILIAL
                        AND A.NRLANCTONF = P_NRLANCTONF
                        AND A.CDPRODUTO  = P.CDPRODUTO
                        AND A.CDPRODUTO  = C_ITEMPRODUTO.CDPRODUTO
                        AND NOT EXISTS (SELECT CDFILIAL
                                          FROM ITEMPROIMPOS I
                                         WHERE I.CDFILIAL    = A.CDFILIAL
                                           AND I.NRLANCTONF  = A.NRLANCTONF
                                           AND I.NRSEQITPROD = A.NRSEQITPROD
                                           AND I.CDIMPOSTO   = C_IMPOSTO.CDIMPOSTO);
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_CDARVPROD := NULL;
                  END;

                  IF (V_CDARVPROD IS NOT NULL) THEN

                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');

                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, 006,'Nao ha incidencia do imposto obrigatorio '|| C_IMPOSTO.CDIMPOSTO || ' para o item ' ||V_CDARVPROD);

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;

                     V_ERRO := 'S';

                  END IF;
               END LOOP;
            END IF;

            BEGIN
               SELECT N.CDTIPOOPER, N.CDFILIRECE, P.CDARVPROD
                 INTO V_CDTIPOOPERO, V_CDFILIRECEO, V_CDARVPRODO
                 FROM NOTAFISCAL N, ITEMPRODUTO I, PRODUTO P
                WHERE N.CDFILIAL     = P_CDFILIAL
                  AND N.NRLANCTONF   = P_NRLANCTONF
                  AND I.CDFILIAL     = N.CDFILIAL
                  AND I.NRLANCTONF   = N.NRLANCTONF
                  AND I.NRSEQITPROD  = C_ITEMPRODUTO.NRSEQITPROD
                  AND P.CDPRODUTO    = I.CDPRODUTO
                  AND P.CDPRODUTO    = C_ITEMPRODUTO.CDPRODUTO
                  AND N.IDORIGDESTNF = 'F'
                  AND NOT EXISTS (SELECT CDFILIAL
                                    FROM NFRELACAF R, PRODUTO P1
                                   WHERE R.CDFILIAL    = I.CDFILIAL
                                     AND R.NRLANCTONF  = I.NRLANCTONF
                                     AND R.CDPRODUTO   = P1.CDPRODUTO
                                     AND P1.CDPRODESTO = P.CDPRODESTO);
            EXCEPTION
               WHEN NO_DATA_FOUND THEN BEGIN
                  V_CDTIPOOPERO := NULL;
                  V_CDFILIRECEO := NULL;
                  V_CDARVPRODO  := NULL;
               END;
            END;

            IF (V_CDARVPRODO IS NOT NULL) THEN
               /* Verificacao de produtos oriundos da AF */

               V_IDBLOQNFSAF := NULL;
               V_MAXPRODUTO  := NULL;

               BEGIN
                  SELECT MAX(CDPRODUTO)
                    INTO V_MAXPRODUTO
                    FROM PARAMCMPPROD
                   WHERE CDFILIAL = V_CDFILIRECEO
                     AND INSTR(V_CDARVPRODO, CDPRODUTO) = 1;
               EXCEPTION
                  When No_Data_Found Then
                     V_MAXPRODUTO := NULL;
               END;

               IF (V_MAXPRODUTO IS NOT NULL) THEN
                  BEGIN
                     SELECT IDBLOQNFSAF
                       INTO V_IDBLOQNFSAF
                       FROM PARAMCMPPROD
                      WHERE CDFILIAL  = V_CDFILIRECEO
                        AND CDPRODUTO = V_MAXPRODUTO;
                  EXCEPTION
                     When No_Data_Found Then
                        V_IDBLOQNFSAF := NULL;
                  END;
               END IF;

               /* Se o produto da nota fiscal necessitar ser oriundo de AF e nao possuir relacionamento com a AF
                  sera retornado erro */

               IF (V_CDTIPOOPER = '01') THEN
                  V_BLOQNFSEMAFFOR := 'N';
                  BEGIN
                     SELECT NVL(IDBLOQCMPSAFFIL, 'N')
                       INTO V_IDBLOQCMPSAFFIL
                       FROM PARAMFILIAL
                      WHERE CDFILIAL = V_CDFILIRECE;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_IDBLOQCMPSAFFIL := 'N';
                  END;

                  IF (V_IDBLOQCMPSAFFIL = 'S') THEN
                     BEGIN
                        SELECT NVL(IDBLOQCMPSAFFOR, 'N')
                          INTO V_BLOQNFSEMAFFOR
                          FROM FORNECEDOR
                         WHERE CDFORNECED = V_CDFORNECED;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQNFSEMAFFOR := 'N';
                     END;
                  END IF;

                  IF (V_BLOQNFSEMAFFOR = 'S') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '031','Operacao bloqueada! Fornecedor exige AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  END IF;

                  IF (V_IDUTBLOQOPAF = 'S') AND (V_BLOQNFSEMAFFOR = 'N')THEN
                     IF (V_IDBLOQNFSAF IS NULL) THEN
                        V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                        INSERT
                          INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                        VALUES (P_NRACESSONFE, V_NRSEQINCONS, '056','Poduto '||V_CDARVPRODO|| ' nao e oriundo de AF.');

                        V_SEQUENCIAL := V_SEQUENCIAL + 1;
                        V_ERRO := 'S';
                     END IF;
                  END IF;
               ELSE
                  V_BLOQNFSEMAFFOR := 'N';
                  BEGIN
                     SELECT NVL(IDBLOQCMPSAFFIL, 'N')
                       INTO V_IDBLOQCMPSAFFIL
                       FROM PARAMFILIAL
                      WHERE CDFILIAL = V_CDFILIRECE;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_IDBLOQCMPSAFFIL := 'N';
                  END;

                  IF (V_IDBLOQCMPSAFFIL = 'S') THEN
                     BEGIN
                        SELECT NVL(IDBLOQCMPSAFFOR, 'N')
                          INTO V_BLOQNFSEMAFFOR
                          FROM FORNECEDOR
                         WHERE CDFORNECED = V_CDFORNECED;
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQNFSEMAFFOR := 'N';
                     END;
                  END IF;

                  IF (V_BLOQNFSEMAFFOR = 'S') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '031','Operacao bloqueada! Fornecedor exige AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  END IF;

                  IF (V_BLOQNFSEMAFFOR = 'N') THEN
                     IF (V_IDBLOQTPOPER = 'S') AND (V_IDBLOQNFSAF IS NULL) THEN
                        BEGIN
                           SELECT IDEXIGEAF
                             INTO V_IDEXIGEAFTPOP
                             FROM PARAMBLOQNFAFIL
                            WHERE CDTIPOOPER = V_CDTIPOOPER
                              AND CDFILIAL   = V_CDFILIRECE;
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_IDEXIGEAFTPOP := 'N';
                        END;

                        IF (V_IDEXIGEAFTPOP = 'S') AND (V_IDBLOQNFSAF IS NULL) THEN
                           V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                           INSERT
                             INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                           VALUES (P_NRACESSONFE, V_NRSEQINCONS, '056','Poduto '||V_CDARVPRODO|| ' nao e oriundo de AF.');

                           V_SEQUENCIAL := V_SEQUENCIAL + 1;
                           V_ERRO := 'S';
                        END IF;
                     END IF;
                  END IF;
               END IF;

               IF V_IDBLOQNFSAF = 'S' THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '056','Poduto '||V_CDARVPRODO|| ' nao e oriundo de AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
               END IF;
            END IF;

            IF (C_ITEMPRODUTO.IDAVISOSITEM <> '000000') THEN
               /* Item com codigo da situacao tributaria invalido */
               IF SUBSTR(C_ITEMPRODUTO.IDAVISOSITEM, 1, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV09'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV09';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV09';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '052','Item '||C_ITEMPRODUTO.CDPRODEMIS||' com codigo da situacao tributaria invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '052','Item '||C_ITEMPRODUTO.CDPRODEMIS||' com codigo da situacao tributaria invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;

               /* Item com codigo fiscal de operacao invalido */
               IF SUBSTR(C_ITEMPRODUTO.IDAVISOSITEM, 2, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV10'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV10';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV10';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '053','Item '||C_ITEMPRODUTO.CDPRODEMIS||' com codigo fiscal de operacao invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '053','Item '||C_ITEMPRODUTO.CDPRODEMIS||' com codigo fiscal de operacao invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;

               /* Quantidade de produto informada difere da quantidade prevista na AF */
               IF SUBSTR(C_ITEMPRODUTO.IDAVISOSITEM, 3, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV11'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV11';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV11';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '054','Quantidade do produto '||C_ITEMPRODUTO.CDPRODEMIS||' difere da quantidade prevista na AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '054','Quantidade do produto '||C_ITEMPRODUTO.CDPRODEMIS||' difere da quantidade prevista na AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;

               /* Valor unitario do produto informado difere do valor unitario previsto na AF */
               IF SUBSTR(C_ITEMPRODUTO.IDAVISOSITEM, 4, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV13'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV13';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV13';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '055','Valor unitario do produto '||C_ITEMPRODUTO.CDPRODEMIS||' difere do valor unitario previsto na AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '055','Valor unitario do produto '||C_ITEMPRODUTO.CDPRODEMIS||' difere do valor unitario previsto na AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;

               /* Item informado na nota fiscal difere do produto programado na AF */
               IF SUBSTR(C_ITEMPRODUTO.IDAVISOSITEM, 6, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV16'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV16';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV16';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '056','Item '||C_ITEMPRODUTO.CDPRODEMIS||' na nota fiscal difere do produto programado na AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '056','Item '||C_ITEMPRODUTO.CDPRODEMIS||' na nota fiscal difere do produto programado na AF.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;
            END IF;
             /* Confere erros/avisos trabitproimpos */
            FOR C_ITEMPROIMPOS IN (SELECT NVL(IDERROSIMPIT, '00000') AS IDERROIMPOSTO,
                                            NVL(IDAVISIMPIT, '00000') AS IDAVISOIMPOSTO, IP.SGIMPOSTO
                                       FROM ITEMPROIMPOS IT, IMPOSTO IP
                                      WHERE IT.CDFILIAL    = P_CDFILIAL
                                        AND IT.NRLANCTONF  = P_NRLANCTONF
                                        AND IT.NRSEQITPROD = C_ITEMPRODUTO.NRSEQITPROD
                                        AND IT.CDIMPOSTO   = IP.CDIMPOSTO
                                      ORDER BY IT.CDIMPOSTO) LOOP

               /* AV04*/
               IF SUBSTR(C_ITEMPROIMPOS.IDAVISOIMPOSTO, 2, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV04'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV04';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV04';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '057','Imposto do item '||C_ITEMPRODUTO.CDPRODEMIS||' da entrada com codigo fiscal invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '057','Imposto do item '||C_ITEMPRODUTO.CDPRODEMIS||' da entrada com codigo fiscal invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;
               /* AV05*/
               IF SUBSTR(C_ITEMPROIMPOS.IDAVISOIMPOSTO, 3, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV05'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV05';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV05';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '058','Imposto do item '||C_ITEMPRODUTO.CDPRODEMIS||' com situacao tributaria(CST) invalida.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '058','Imposto do item '||C_ITEMPRODUTO.CDPRODEMIS||' com situacao tributaria(CST) invalida.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;
               /* AV06*/
               IF SUBSTR(C_ITEMPROIMPOS.IDAVISOIMPOSTO, 4, 1) = '1' THEN
                  BEGIN
                     SELECT NVL(IDERROAVISOFIL, 'V')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONFFIL
                      WHERE CDERROAVISOFIL = 'AV06'
                        AND CDFILIAL       = P_CDFILIAL;
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'V';
                  END;

                  IF (V_BLOQAVIS = 'V') THEN
                     BEGIN
                        SELECT NVL(IDERROAVISO, 'N')
                          INTO V_BLOQAVIS
                          FROM ERROAVISONF
                         WHERE CDERROAVISO = 'AV06';
                     EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                           V_BLOQAVIS := 'N';
                     END;
                  END IF;

                  BEGIN
                     SELECT NVL(IDPERMGRUPO, 'N')
                       INTO V_PERMLIBOPER
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'AV06';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_PERMLIBOPER := 'N';
                  END;

                  IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '059','Imposto do item '||C_ITEMPRODUTO.CDPRODEMIS|| ' com cod. fiscal operacao - CFOp invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                     V_ERRO := 'S';
                  ELSIF (V_BLOQAVIS = 'C') THEN
                     V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                     INSERT
                       INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                     VALUES (P_NRACESSONFE, V_NRSEQINCONS, '059','Imposto do item '||C_ITEMPRODUTO.CDPRODEMIS|| ' com cod. fiscal operacao - CFOp invalido.');

                     V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  END IF;
               END IF;
               /* Fim avisos itemproimpos */

            END LOOP;
         END LOOP;
      END IF;
      IF (V_ERRO = 'N') THEN
         FOR C_IMPOSNFTOT IN (SELECT NVL(IDERROSIMPTT, '00000') AS IDERROSTOT,
                                     NVL(IDAVISIMPTT, '00000') AS IDAVISOSTOT, SGIMPOSTO
                                FROM IMPOSNFTOT IT, IMPOSTO I
                               WHERE CDFILIAL   = P_CDFILIAL
                                 AND NRLANCTONF = P_NRLANCTONF
                                 AND IT.CDIMPOSTO = I.CDIMPOSTO
                               ORDER BY I.CDIMPOSTO) LOOP

            IF SUBSTR(C_IMPOSNFTOT.IDERROSTOT, 1, 1) = '1' THEN
               BEGIN
                  SELECT NVL(IDERROAVISOFIL, 'V')
                    INTO V_BLOQAVIS
                    FROM ERROAVISONFFIL
                   WHERE CDERROAVISOFIL = 'ER01'
                     AND CDFILIAL       = P_CDFILIAL;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_BLOQAVIS := 'V';
               END;

               IF (V_BLOQAVIS = 'V') THEN
                  BEGIN
                     SELECT NVL(IDERROAVISO, 'N')
                       INTO V_BLOQAVIS
                       FROM ERROAVISONF
                      WHERE CDERROAVISO = 'ER01';
                  EXCEPTION
                     WHEN NO_DATA_FOUND THEN
                        V_BLOQAVIS := 'N';
                  END;
               END IF;

               BEGIN
                  SELECT NVL(IDPERMGRUPO, 'N')
                    INTO V_PERMLIBOPER
                    FROM ERROAVISONF
                   WHERE CDERROAVISO = 'ER01';
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_PERMLIBOPER := 'N';
               END;

               IF ((V_BLOQAVIS = 'B') AND (P_LIBERAOPER = 'N')) OR ((V_BLOQAVIS = 'B') AND (V_PERMLIBOPER = 'N')) THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '060', C_IMPOSNFTOT.SGIMPOSTO||' da NF invalido.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
                  V_ERRO := 'S';
               ELSIF (V_BLOQAVIS = 'C') THEN
                  V_NRSEQINCONS := LPAD(TO_CHAR(V_SEQUENCIAL), 5, '0');
                  INSERT
                    INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
                  VALUES (P_NRACESSONFE, V_NRSEQINCONS, '060', C_IMPOSNFTOT.SGIMPOSTO||' da NF invalido.');

                  V_SEQUENCIAL := V_SEQUENCIAL + 1;
               END IF;
            END IF;
         END LOOP;
      END IF;
   END IF;
   P_ERRO := V_ERRO;
END;