CREATE TABLE PRODPEDXAF
(
 CDFILLANC    		VARCHAR2(4),
 CDFILDEST    		VARCHAR2(4),
 NRAUTOFORN   		VARCHAR2(10),
 CDPRODUTO    		VARCHAR2(10),
 DTPROGENTAF  		DATE,
 CDMARCA      		VARCHAR2(5),
 CDFILIAL     		VARCHAR2(4),
 NRPEDIDO     		VARCHAR2(10),
 NRRELACPEDAF 		VARCHAR2(10),
 NRORG 			 	NUMBER		    DEFAULT SYS_CONTEXT('nrorg_ctx','nrorg') 		NOT NULL,
 IDATIVO            VARCHAR2(1)   	DEFAULT 'S' 									NOT NULL,
    CONSTRAINT CKC_IDATIVO_PRODPEDXAF CHECK (IDATIVO IN ('S','N')),
 DTINCLUSAO        	DATE                   											NULL,
 DTULTATU          	DATE                 											NULL,
 NRORGINCLUSAO     	NUMBER        	DEFAULT 1 										NULL,
 CDOPERINCLUSAO    	VARCHAR2(12)  	DEFAULT '1' 									NULL,
 NRORGULTATU       	NUMBER        	DEFAULT 1 										NULL,
 CDOPERULTATU 	 	VARCHAR2(12)  	DEFAULT '1'
)
/

ALTER TABLE PRODPEDXAF
  ADD CONSTRAINT FKPED00430RELPRAF FOREIGN KEY (CDFILIAL, NRPEDIDO)
REFERENCES PEDIDO(CDFILIAL, NRPEDIDO) ON DELETE CASCADE
/

ALTER TABLE PRODPEDXAF ADD DATA_IMP DATE
/

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 inscrição 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';
   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 já 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 INSCRIÇÃO ESTADUAL DO ARQUIVO XML CASO A FILIAL
         NÃO TENHA SIDO PREENCHIDA E O PARÂMETRO 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 INSCRIÇÃO ESTADUAL DO ARQUIVO XML CASO A FILIAL
         NÃO TENHA SIDO PREENCHIDA E O PARÂMETRO 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 OPERAÇÃO RELACIONADO A FILIAL */
      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;

      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 está dentro do período == */

            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 período 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 não exista o lançamento é não 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 não 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 não 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 não 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 não relacionado ao tipo de operação.');

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

            IF (V_CDFILIRECE IS NOT NULL) THEN
               /* Verificar se o fornecedor obriga  importação 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 parametrização 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 parametrização para permitir produto sem AF*/

                  IF (V_NRAUTOFORN IS NULL) THEN
                     IF (V_CDTIPOOPER IS NOT NULL) THEN
                        IF (V_CDTIPOOPER = '01') THEN   /* Operação de compra, utiliza os parâmetros específicos 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','Operação 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','Operação bloqueada! Nota fiscal deve possuir AF.');

                              V_SEQUENCIAL := V_SEQUENCIAL + 1;
                              V_ERRO := 'S';
                           END IF;
                        ELSE /* As outras operações, verifica a tela tipo de operação exige AF caso utilizar o parâmetro*/
                           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','Operação 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 emissão.');

                  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 não relacionada a inscrição 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','Não há inscrição municipal relacionada a filial/inscrição 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','Série não cadastrada.');

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

      /* == Verificação se todos os itens do XML estão relacionados aos ítens do sistema Teknisa == */
      IF (V_ERRO <> 'S') THEN /* Verificação abaixo feita somente se não 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 não relacionados aos produtos da árvore 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 árvore 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|| ' não 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 ESTÁ PARAMETRIZADO PARA REALIZAR CONSISTÊNCIAS*/
            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

               /*Consistências 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 não pertence a inscrição 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','Número de parcelas do vencimento do arquivo xml difere do número 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;

                     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;

               /*Consistências 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','Alíquota do imposto difere da alíquota 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,'Alíquota do imposto ' || C_ALIQDIF.CDIMPOSTOIT|| ' difere da alíquota 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 ítens */
         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 ítens.');

               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 ítens.');

               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 à 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 à 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 à data de processamento.');

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

      IF (V_ERRO = 'N') THEN
         /* Confere erros dos itens caso não 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,'Não há incidência do imposto obrigatório '|| 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
               /* Verificação 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 não possuir relacionamento com a AF
                  será 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','Operação 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|| ' não é 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','Operação 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|| ' não é 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|| ' não é oriundo de AF.');

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

            IF (C_ITEMPRODUTO.IDAVISOSITEM <> '000000') THEN
               /* Ítem com código da situação tributária inválido */
               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','Ítem '||C_ITEMPRODUTO.CDPRODEMIS||' com código da situação tributária inválido.');

                     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','Ítem '||C_ITEMPRODUTO.CDPRODEMIS||' com código da situação tributária inválido.');

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

               /* Ítem com código fiscal de operação inválido */
               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','Ítem '||C_ITEMPRODUTO.CDPRODEMIS||' com código fiscal de operação inválido.');

                     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','Ítem '||C_ITEMPRODUTO.CDPRODEMIS||' com código fiscal de operação inválido.');

                     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 unitário do produto informado difere do valor unitário 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 unitário do produto '||C_ITEMPRODUTO.CDPRODEMIS||' difere do valor unitário 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 unitário do produto '||C_ITEMPRODUTO.CDPRODEMIS||' difere do valor unitário 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 código fiscal inválido.');

                     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 código fiscal inválido.');

                     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 situação tributária(CST) inválida.');

                     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 situação tributária(CST) inválida.');

                     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 cód. fiscal operação - CFOp inválido.');

                     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 cód. fiscal operação - CFOp inválido.');

                     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 inválido.');

                  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 inválido.');

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

create or replace PROCEDURE GERA_NOTAFISCAL_CORPO_NFE(
   P_NRACESSONFE  IN NOTAFISCAL.NRACESSONFE%TYPE,
   P_GERAIGUALXML IN PARAMGERAL.IDGERNFIGUALXML%TYPE,
   P_LIBERAXML    IN PARAMGERAL.IDGERNFIGUALXML%TYPE DEFAULT 'N',
   P_CDTIPOOPER   VARCHAR2 DEFAULT 'N',
   P_LIBERAOPER   VARCHAR2 DEFAULT 'N'
   )
AS

   V_IDORIGDESTNF VARCHAR2(01);
   V_IDTPIJURNF   VARCHAR2(01);
   V_NRINSJURNF   VARCHAR2(20);
   V_CDFORNECED   VARCHAR2(21);
   V_CDCLIENTE    VARCHAR2(21);
   V_CDFILIEMIT   VARCHAR2(21);
   V_CDINSCESTA   VARCHAR2(16);
   V_CDINSCMUNI   VARCHAR2(16);
   V_IDDOCFATUR   VARCHAR2(01);
   V_IDDOCFISCENT VARCHAR2(01);
   V_IDDOCESTOQUE VARCHAR2(01);
   V_CDMODDOCFISC VARCHAR2(05);
   V_NRLANCTONF   VARCHAR2(20);
   V_NRLANCESTQ   VARCHAR2(20);
   V_CDTIPOOPER   VARCHAR2(02);
   V_CDTPOPRELAC  VARCHAR2(02);
   V_CDFILIRECE   VARCHAR2(04);
   V_CDFILIAL     VARCHAR2(04);
   V_CDFILLANC    VARCHAR2(04);
   V_CDFILDEST    VARCHAR2(04);
   V_CDEMPRESA    VARCHAR2(02);
   V_ATUAESTOQUE  VARCHAR2(01);
   V_DTENTRSAID   DATE;
   V_DTEMISSAO    DATE;
   V_NRNOTAFISC   VARCHAR2(20);
   V_CDSERIEENTR  VARCHAR2(05);
   V_IDTPIJURTRAN VARCHAR2(01);
   V_VRNOTAFISC   NUMBER;
   V_VRPRODUTOS   NUMBER;
   V_TAMNOTAFISC  NUMBER;
   V_VRDESPERITEM NUMBER;
   V_QTPROGENTAF  NUMBER;
   V_QTITEMPROD   NUMBER;
   V_VRPREUNIAF   FLOAT;
   V_CDMARCA      VARCHAR2(10);
   V_INSPROD      VARCHAR2(01);
   V_IDIMPIMPOXML VARCHAR2(01);
   V_PRODATUEST   VARCHAR2(01);
   V_FILIATUEST   VARCHAR2(01);
   V_CDALMOXARIFE VARCHAR2(10);
   V_CDLOCALESTOQ VARCHAR2(10);
   V_IDUTILALMOX  VARCHAR2(01);
   V_IDUTILLCESTQ VARCHAR2(01);
   V_IDUTILLOTE   VARCHAR2(01);
   V_CLIENT_INFO  VARCHAR2(64);
   V_CDOPERADOR   VARCHAR2(20);
   V_ERRO         VARCHAR2(01);
   V_ERROAF       VARCHAR2(01);
   V_CDPAISORIG   VARCHAR2(04);
   V_CDPAISDEST   VARCHAR2(04);
   V_SGESTAORIG   VARCHAR2(02);
   V_SGESTADEST   VARCHAR2(02);
   V_CDGRUPOFISC  VARCHAR2(05);
   V_IDINTEREST   VARCHAR2(01);
   V_CDFISCALIT   VARCHAR2(01);
   V_DIG1CST      VARCHAR2(01);
   V_CODIGOCST    VARCHAR2(03);

   V_QTDCFOP      NUMBER;
   V_EXPRODAF     NUMBER;
   V_RELACAF      NUMBER;
   V_CDCFOPNF     VARCHAR2(10);
   V_CFOP1DIGT    VARCHAR2(01);
   V_CFOPXML      VARCHAR2(10);
   V_PAISDEST     VARCHAR2(04);
   V_ESTADEST     VARCHAR2(02);
   V_MUNIDEST     VARCHAR2(04);
   V_PAISORIG     VARCHAR2(04);
   V_ESTAORIG     VARCHAR2(02);
   V_MUNIORIG     VARCHAR2(04);
   V_PAISCFOP     VARCHAR2(04);
   V_ESTACFOP     VARCHAR2(02);
   V_IDENDCFOP    VARCHAR2(01);
   V_IMPVENCXML   VARCHAR2(01);
   V_ROLLBACK     VARCHAR2(01);
   V_TOTALNOTA    NUMBER;
   V_COUNTINCONS  NUMBER;
   V_NRAUTOFORN   VARCHAR2(10);
   V_QTDAFANTIGA  FLOAT;
   V_IDUTINSCNFFILORI  VARCHAR2(01); /* Utilizar a inscrição estadual para verificar a filial de destino (V_CDFILIRECE)*/
   V_IDBAIXAFTOTLANNF  VARCHAR2(01);

   V_IDFUNCAOFILI  VARCHAR2(01);
   V_CDENCARGOIMPXML  VARCHAR2(02);

   V_NRINSJURTRANXML  VARCHAR2(20);
   V_NRPLACAVEICXML   VARCHAR2(07);
   V_SGUFVEICXML      VARCHAR2(02);
   V_IDPGTOFRETEXML   VARCHAR2(01);
   V_DSQTDEVOLUXML    VARCHAR2(10);
   V_DSESPECVOLUXML   VARCHAR2(10);
   V_DSMARCAVOLUXML   VARCHAR2(120);
   V_DSNUMEVOLUXML    VARCHAR2(15);
   V_VRPBRUTOVOLUXML  FLOAT;
   V_VRPLIQUVOLUXML   FLOAT;
   V_MAISDE1AF        NUMBER;
   V_NRAUTOFORNIT     VARCHAR2(10);  
   V_LIBERAOPER       VARCHAR2(01);
   V_LIBERAXML        VARCHAR2(01);
   V_QTITEMPRODAF     NUMBER;
   V_QTITEMPRODXML    NUMBER;
   V_QTITEMPRODRES    NUMBER;
   V_QTITBAIXADA      NUMBER;

   C_NRSEQINCONS   INTG_INCONSISTENCIA.NRSEQINCONS%TYPE;
   C_CDCONSISTXML  INTG_INCONSISTENCIA.CDCONSISTXML%TYPE;
   C_DSINCONSIS    INTG_INCONSISTENCIA.DSINCONSIS%TYPE;

   CURSOR C_INCONS IS
      SELECT NRSEQINCONS, CDCONSISTXML, DSINCONSIS
        FROM INTG_INCONSISTENCIA
       WHERE NRACESSONFE = P_NRACESSONFE
       ORDER BY NRSEQINCONS;

BEGIN
   V_CDCLIENTE    := NULL;
   V_CDFORNECED   := NULL;
   V_CDFILIEMIT   := NULL;
   V_ERRO         := 'N';
   V_IDINTEREST   := 'N';

   V_LIBERAOPER := P_LIBERAOPER;
   V_LIBERAXML  := P_LIBERAXML;

   IF V_LIBERAOPER IS NULL THEN
      V_LIBERAOPER := 'N';
   END IF;

   IF V_LIBERAXML IS NULL THEN
      V_LIBERAXML := 'N';
   END IF;

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

   VERIFICA_INCONS_NF(P_NRACESSONFE, P_GERAIGUALXML, 'N', NULL, NULL, P_LIBERAXML, P_CDTIPOOPER, V_LIBERAOPER, V_ERRO);

   IF (V_ERRO = 'N') THEN

      DBMS_APPLICATION_INFO.READ_CLIENT_INFO(V_CLIENT_INFO);
      V_CDOPERADOR := SUBSTR(V_CLIENT_INFO,45,12);

      BEGIN
         SELECT CDOPERADOR
           INTO V_CDOPERADOR
           FROM OPERADOR
          WHERE CDOPERADOR = V_CDOPERADOR;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDOPERADOR := SUBSTR(V_CLIENT_INFO,1,12);
      END;

      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;
      END IF;

      SELECT I.CDFORNECED,  I.CDFILIRECE, NVL(I.CDTIPOOPER, V_CDTPOPRELAC), I.CDINSCESTA,
             I.NRNOTAFISC,  I.DTEMISSAO,  I.VRNOTAFISC, I.VRPRODUTOS,
             I.CDSERIEENTR, I.CDMODDOCFISC, LPAD(IP.NRAUTOFORN, 10, '0') AS NRAUTOFORN,
             I.NRINSJURTRANXML, I.NRPLACAVEICXML, I.SGUFVEICXML,   I.IDPGTOFRETEXML,  I.DSQTDEVOLUXML,
             I.DSESPECVOLUXML,  I.DSMARCAVOLUXML, I.DSNUMEVOLUXML, I.VRPBRUTOVOLUXML, I.VRPLIQUVOLUXML
        INTO V_CDFORNECED, V_CDFILIRECE, V_CDTIPOOPER, V_CDINSCESTA,
             V_NRNOTAFISC, V_DTEMISSAO,  V_VRNOTAFISC, V_VRPRODUTOS,
             V_CDSERIEENTR, V_CDMODDOCFISC, V_NRAUTOFORN,
             V_NRINSJURTRANXML, V_NRPLACAVEICXML, V_SGUFVEICXML,   V_IDPGTOFRETEXML,  V_DSQTDEVOLUXML,
             V_DSESPECVOLUXML,  V_DSMARCAVOLUXML, V_DSNUMEVOLUXML, V_VRPBRUTOVOLUXML, V_VRPLIQUVOLUXML
        FROM INTG_NOTAFISCAL I,
                (SELECT MIN(NRAUTOFORN) AS NRAUTOFORN
                   FROM INTG_ITEMPRODUTO
                  WHERE NRACESSONFE = P_NRACESSONFE) IP
       WHERE NRACESSONFE = P_NRACESSONFE;

      IF V_NRAUTOFORN IS NULL THEN
         BEGIN
            SELECT MAX(NRAUTOFORNE)
              INTO V_NRAUTOFORN
              FROM INTG_ITEMAF
             WHERE NRACESSONFE = P_NRACESSONFE;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_NRAUTOFORN := NULL;
         END;
      END IF;
      
      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, CDFILLANC
              INTO V_CDFILIRECE, V_CDFILLANC
              FROM AUTOFORNE
             WHERE NRAUTOFORN = V_NRAUTOFORN;
             
            UPDATE INTG_NOTAFISCAL
               SET CDFILIRECE = V_CDFILIRECE
             WHERE NRACESSONFE = P_NRACESSONFE;
         END IF;
      END IF;

      /* BUSCAR A FILIAL RELACIONADA A INSCRIÇÃO ESTADUAL DO ARQUIVO XML CASO A FILIAL
         NÃO TENHA SIDO PREENCHIDA E O PARÂMETRO IDUTINSCNFFILORI ESTEJA MARCADO*/
      IF (V_CDINSCESTA IS NOT NULL) AND (V_CDFILIRECE IS NULL) THEN
         BEGIN
            SELECT NVL(IDUTINSCNFFILORI, 'N') AS IDUTINSCNFFILORI, NVL(IDBAIXAFTOTLANNF, 'N') AS IDBAIXAFTOTLANNF
              INTO V_IDUTINSCNFFILORI, V_IDBAIXAFTOTLANNF
              FROM PARAMGERAL
             WHERE CDPARGERAL = '0001';
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_IDUTINSCNFFILORI := 'N'; V_IDBAIXAFTOTLANNF:= '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 INSCRIÇÃO ESTADUAL DO ARQUIVO XML CASO A FILIAL
         NÃO TENHA SIDO PREENCHIDA E O PARÂMETRO 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;

      SELECT MIN(A.CDEMPRESA), MIN(A.CDINSCMUNI)
        INTO V_CDEMPRESA, V_CDINSCMUNI
        FROM(SELECT CDEMPRESA, CDINSCMUNI
               FROM FILIAL
              WHERE CDFILIAL   = V_CDFILIRECE
                AND CDINSCESTA = V_CDINSCESTA
              UNION
             SELECT CDEMPRESA, CDINSCMUNI
               FROM EMPRCNTRFIL
              WHERE CDFILIAL   = V_CDFILIRECE
                AND CDINSCESTA = V_CDINSCESTA) A;

      --VARIÁVEIS PARA CONSULTA DE ALÍQUOTA, INCIDÊNCIA, CFOP
      BEGIN
         SELECT CDPAIS,     SGESTADO,   CDMUNICIPIO
           INTO V_PAISDEST, V_ESTADEST, V_MUNIDEST
           FROM INSCRESTAD
          WHERE (CDEMPRESA  = V_CDEMPRESA)
            AND (CDINSCESTA = V_CDINSCESTA);
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_PAISDEST := NULL; V_ESTADEST := NULL; V_MUNIDEST := NULL;
      END;

      BEGIN
         SELECT NVL(IDENDCFOPFOR, 'P')
           INTO V_IDENDCFOP
           FROM FORNECEDOR
          WHERE (CDFORNECED = V_CDFORNECED);
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDENDCFOP := 'P';
      END;
      IF V_IDENDCFOP = 'I' THEN
         BEGIN
            SELECT CDPAIS    , SGESTADO
              INTO   V_PAISCFOP, V_ESTACFOP
              FROM INSCRESTAD
             WHERE CDEMPRESA  = V_CDEMPRESA
               AND CDINSCESTA = V_CDINSCESTA;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_PAISCFOP := NULL; V_ESTACFOP := NULL;
         END;
      ELSE
         BEGIN
            SELECT CDPAIS, SGESTADO
              INTO V_PAISCFOP, V_ESTACFOP
              FROM ENDEFORN
             WHERE (CDFORNECED   = V_CDFORNECED)
               AND (IDTPENDEFORN = V_IDENDCFOP);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_PAISCFOP := NULL; V_ESTACFOP := NULL;
         END;
      END IF;

      BEGIN
         SELECT CDPAIS, SGESTADO, CDMUNICIPIO
           INTO V_PAISORIG, V_ESTAORIG, V_MUNIORIG
           FROM ENDEFORN
          WHERE (CDFORNECED   = V_CDFORNECED)
            AND (IDTPENDEFORN = 'P');
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_PAISORIG := NULL; V_ESTAORIG := NULL; V_MUNIORIG := NULL;
      END;

      IF (V_PAISORIG = V_PAISDEST) AND (V_ESTAORIG <> V_ESTADEST) THEN
         V_IDINTEREST := 'S';
      END IF;

      /* Verifica primeiro digito do CFOP */
      V_CFOP1DIGT := '';

      IF V_PAISCFOP = V_PAISDEST THEN
         IF V_ESTACFOP = V_ESTADEST THEN
            V_CFOP1DIGT := '1';
         ELSE
            V_CFOP1DIGT := '2';
         END IF;
      ELSE
         V_CFOP1DIGT := '3';
      END IF;

      BEGIN
         SELECT NVL(MAX(NRTAMNUMNFUTDFE), 9)
           INTO V_TAMNOTAFISC
           FROM PARAMFILIAL
          WHERE CDFILIAL = V_CDFILIRECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_TAMNOTAFISC := 9;
      END;

      BEGIN
         SELECT MAX(IDTPIJURFORN), MAX(NRINSJURFORN)
           INTO V_IDTPIJURNF, V_NRINSJURNF
           FROM FORNECEDOR
          WHERE CDFORNECED = V_CDFORNECED;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDTPIJURNF := NULL; V_NRINSJURNF := NULL;
      END;

      BEGIN
         SELECT NVL(IDCTRLESTQ, 'S')
           INTO V_ATUAESTOQUE
           FROM PARAMFILIAL
          WHERE CDFILIAL = V_CDFILIRECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_ATUAESTOQUE := 'S';
      END;

      BEGIN
         SELECT NVL(IDATUESTTPOP, V_ATUAESTOQUE)
           INTO V_ATUAESTOQUE
           FROM TIPOOPERAC
          WHERE CDTIPOOPER   = V_CDTIPOOPER
            AND IDENTRSAIDOP = 'E';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_ATUAESTOQUE := V_ATUAESTOQUE;
      END;

      BEGIN
         SELECT DECODE(PG.IDUTILDTPROC,'S',DECODE(PF.DTPROCESSA, NULL, TO_DATE(SYSDATE), PF.DTPROCESSA),TO_DATE(SYSDATE)) AS DTPROCESSA
           INTO V_DTENTRSAID
           FROM PARAMGERAL PG, PARAMFILIAL PF
          WHERE PG.CDPARGERAL = '0001'
            AND PF.CDFILIAL = V_CDFILIRECE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_DTENTRSAID := TO_DATE(SYSDATE);
      END;

      V_DTENTRSAID := TO_DATE(SYSDATE);

      V_NRNOTAFISC := LPAD(V_NRNOTAFISC, V_TAMNOTAFISC, '0');

      V_IDDOCFISCENT := 'S';

      V_IDDOCESTOQUE := 'N';

      IF (V_NRAUTOFORN IS NOT NULL) THEN
         V_CDFILIAL := V_CDFILLANC;
      ELSE
         V_CDFILIAL := V_CDFILIRECE;
      END IF;

      NOVO_CODIGO('LANCNFPROD/FILIAL' || V_CDFILIAL, V_NRLANCTONF);
      NOVO_CODIGO('LANCNF/FILIAL' || V_CDFILIAL, V_NRLANCTONF);

      V_NRLANCTONF := SUBSTR(V_NRLANCTONF, 11, 10);

      IF V_ATUAESTOQUE = 'S' THEN
         NOVO_CODIGO('LANCTOEST' || V_CDFILIAL, V_NRLANCESTQ);
         V_NRLANCESTQ := SUBSTR(V_NRLANCESTQ, 11, 10);
      ELSE
         V_NRLANCESTQ := '';
      END IF;

      CONSULTA_GRUPOFISCAL('F', V_CDFORNECED, V_CDFILIRECE, 'E', V_CDTIPOOPER, V_CDGRUPOFISC);

      IF (V_NRINSJURTRANXML IS NOT NULL) THEN
         BEGIN
            SELECT NRINSJURTRAN, IDTPIJURTRAN
              INTO V_NRINSJURTRANXML, V_IDTPIJURTRAN
              FROM TRANSPORT
             WHERE NRINSJURTRAN = V_NRINSJURTRANXML
               AND ROWNUM = 1;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_NRINSJURTRANXML := NULL; V_IDTPIJURTRAN := NULL;
         END;
      END IF;

      INSERT INTO NOTAFISCAL
         (CDFILIAL,     NRLANCTONF,   CDEMPRESA,    CDINSCESTA,   CDINSCMUNI,
          CDFILIEMIT,   CDFILIRECE,   IDTPIJURNF,   NRINSJURNF,   CDFORNECED,
          CDCLIENTE,    IDBLOQUEADO,  IDDOCFISCAL,  IDDOCFINANC,  DTENTRSAID,
          VRPRODUTOS,   VRNOTAFISC,   NRPLACAVEIC,  SGUFVEIC,     IDPGTOFRETE,
          DSQTDEVOLU,   DSESPECVOLU,  DSMARCAVOLU,  DSNUMEVOLU,   VRPBRUTOVOLU,
          VRPLIQUVOLU,  IDENTRSAIDOP, CDTIPOOPER,   CDSERIEENTR,  IDTPIJURTRAN,
          NRINSJURTRAN, IDDOCCONTAB,  IDSTATUS,     IDDOCFATUR,   IDDOCFISCENT,
          IDDOCFISCSAI, IDDOCESTOQUE, IDSISTEMA,    CDMODDOCFISC, IDORIGDESTNF,
          NRAPURACFAT,  CDINTEGRACAO, DTLANCAMENNF, NRNOTAFISC,   DTEMISSAO,
          NRACESSONFE,  CDOPERGERA,   IDNFGERADAVIAXML)
      VALUES
         (V_CDFILIAL,        V_NRLANCTONF,     V_CDEMPRESA,      V_CDINSCESTA,    V_CDINSCMUNI,
          V_CDFILIEMIT,      V_CDFILIRECE,     V_IDTPIJURNF,     V_NRINSJURNF,    V_CDFORNECED,
          V_CDCLIENTE,       'N',              'S',              'S',             TO_DATE(V_DTENTRSAID),
          0,                 V_VRNOTAFISC,     V_NRPLACAVEICXML, V_SGUFVEICXML,   V_IDPGTOFRETEXML,
          V_DSQTDEVOLUXML,   V_DSESPECVOLUXML, V_DSMARCAVOLUXML, V_DSNUMEVOLUXML, V_VRPBRUTOVOLUXML,
          V_VRPLIQUVOLUXML,  'E',              V_CDTIPOOPER,     V_CDSERIEENTR,   V_IDTPIJURTRAN,
          V_NRINSJURTRANXML, 'S',              'I',              V_IDDOCFATUR,    'N',
          V_IDDOCFISCENT,    V_IDDOCESTOQUE,   'DFE',            V_CDMODDOCFISC,  'F',
          NULL,              NULL,             SYSDATE,          V_NRNOTAFISC,    TO_DATE(V_DTEMISSAO),
          P_NRACESSONFE,     V_CDOPERADOR,     'S');

      INSERT INTO ITEMENCARGO
         (CDFILIAL, NRLANCTONF, CDENCARGO, VRITEMENCA)
         (SELECT V_CDFILIAL, V_NRLANCTONF, CDENCARGO, 0
            FROM ENCARGO
           WHERE NOT EXISTS(SELECT CDENCARGO
                              FROM ITEMENCARGO
                             WHERE CDFILIAL   = V_CDFILIAL
                               AND NRLANCTONF = V_NRLANCTONF
                               AND CDENCARGO  = ENCARGO.CDENCARGO));

      FOR C_ITEMENCARGO IN (SELECT CDFILIAL, NRLANCTONF, I.CDENCARGO, I.VRITEMENCA, E.NMENCARGO, E.IDENCARGO
                                 FROM INTG_ITEMENCARGO I, ENCARGO E
                                WHERE I.CDENCARGO = E.CDENCARGO
                                  AND I.VRITEMENCA > 0
                                  AND I.NRACESSONFE = P_NRACESSONFE)LOOP

         UPDATE ITEMENCARGO
            SET VRITEMENCA = VRITEMENCA + C_ITEMENCARGO.VRITEMENCA
          WHERE CDENCARGO  = C_ITEMENCARGO.CDENCARGO
            AND CDFILIAL   = V_CDFILIAL
            AND NRLANCTONF = V_NRLANCTONF;

      END LOOP;   

      FOR C_ITEMPRODUTO IN (SELECT PR.CDARVPROD, PR.NMPRODUTO,  P.CDMARCAREL, I.VRUNITITEM, P.CDPRODUTOXML,
                                   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 PR.CDARVPROD, PR.NMPRODUTO, P.CDMARCAREL,
                                   (I.VRTOTAITEM - I.VRDESCITEM)/ (I.QTITEMPROD/NVL(P.VRFATCONVOL, 1)) AS VRUNITITEM, P.CDPRODUTOXML,
                                   I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM,
                                   PR.CDPRODUTO, ROUND((I.QTITEMPROD/NVL(P.VRFATCONVOL, 1)), 3) AS QTITEMPROD,
                                   LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN,
                                   I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR,
                                   PR.CDPRODESTO, NVL(P.VRFATCONVOL, 1) AS VRFATOCONV
                              FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR, RELACPRODOL R, PRODUTO PR2
                             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 PR2.CDPRODUTO = P.CDPRODUTO
                               AND I.NRAUTOFORN IS NULL
                             UNION ALL
                            SELECT PR.CDARVPROD, PR.NMPRODUTO, P.CDMARCAREL,
                                   (I.VRTOTAITEM - I.VRDESCITEM)/ (I.QTITEMPROD/NVL(P.VRFATCONVOL, 1)) AS VRUNITITEM, P.CDPRODUTOXML,
                                   I.VRDESCITEM, I.NRSEQITPROD, I.VRTOTAITEM, 
                                   PR.CDPRODUTO, ROUND((I.QTITEMPROD/NVL(P.VRFATCONVOL, 1)), 3) AS QTITEMPROD, 
                                   LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN, 
                                   I.IDORIGEMPROD, I.CDFISOPEITEM, I.CDSITUTRIBPR, 
                                   PR.CDPRODESTO, NVL(P.VRFATCONVOL, 1) AS VRFATOCONV 
                              FROM INTG_ITEMPRODUTO I, PRODFORNXML P, PRODUTO PR, RELACPRODOL R, PRODUTO PR2, 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 PR2.CDPRODUTO = P.CDPRODUTO 
                               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
                             ORDER BY NRSEQITPROD) LOOP


         SELECT NVL(MAX(P.IDCNTRESTOQ),NVL(MAX(F.IDCTRLESTQ),'N')) AS CNTRESTOQ,
                NVL(MAX(F.IDCTRLESTQ),'N') AS IDCTRLESTQ,
                NVL(MAX(DECODE(B.IDUTILBALANCA, 'S', DECODE(P.IDUTILPESAGEM, 'S', RTRIM(P.CDALMOCONFPESMP), RTRIM(P.CDALMOXARIFE)), RTRIM(P.CDALMOXARIFE))), ' ') AS CDALMOXARIFE,
                NVL(MAX(DECODE(B.IDUTILBALANCA, 'S', DECODE(P.IDUTILPESAGEM, 'S', RTRIM(P.CDLOCACONFPESMP), RTRIM(P.CDLOCALESTOQ)), RTRIM(P.CDLOCALESTOQ))), ' ') AS CDLOCALESTOQ,
                NVL(MAX(F.IDUTILALMOX),'N'),
                NVL(MAX(F.IDUTILLCESTQ),'N'),
                NVL(MAX(F.IDUTILLOTE),'N')
           INTO V_PRODATUEST,
                V_FILIATUEST,
                V_CDALMOXARIFE,
                V_CDLOCALESTOQ,
                V_IDUTILALMOX,
                V_IDUTILLCESTQ,
                V_IDUTILLOTE
           FROM PRODFILI P, PARAMFILIAL F, PRODUTO D, PARAMINTBALANCA B
          WHERE P.CDFILIAL    = V_CDFILIRECE
            AND P.CDFILIAL    = F.CDFILIAL
            AND D.CDPRODUTO   = C_ITEMPRODUTO.CDPRODUTO
            AND P.CDPRODUTO   = D.CDPRODESTO
            AND F.CDFILIAL    = B.CDFILIAL (+)
            AND (F.IDCTRLESTQ = 'S' OR F.IDCTRLESTQ IS NULL);

         V_CFOPXML := SUBSTR(C_ITEMPRODUTO.CDFISOPEITEM, 2, 3);

         V_MAISDE1AF := 0;

         SELECT COUNT(1)
           INTO V_MAISDE1AF
           FROM INTG_ITEMAF
          WHERE NRACESSONFE = P_NRACESSONFE;

         IF ((C_ITEMPRODUTO.NRAUTOFORN IS NULL) OR (V_MAISDE1AF > 0)) THEN
            BEGIN
               SELECT MAX(NRAUTOFORNE)
                 INTO V_NRAUTOFORNIT
                 FROM INTG_ITEMAF
                WHERE NRACESSONFE  = P_NRACESSONFE
                  AND CDPRODUTOXML = C_ITEMPRODUTO.CDPRODUTOXML
                  AND NRSEQITPROD  = C_ITEMPRODUTO.NRSEQITPROD;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_NRAUTOFORNIT := NULL;
            END;
         END IF;

         INSERT INTO ITEMPRODUTO
            (CDFILIAL,  CDPRODEMIS,  VRUNITITEM, IDCONFORITEM, NRLANCTONF,
             DSPRODEMIS, VRDESCITEM, NRSEQITPROD, IDATUVRESTOQ,
             VRTOTAITEM, CDPRODUTO, QTITEMPROD, VRCONTITEM, CDFISOPEITEM,
             IDAVISOSITEM, VRBRUTITEM, CDFILDEST, NRAUTOFORN, CDSITUTRIBPR,
             CDMARCA, DTPROGENTAF, CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,
             NRSUBLOTE, CDFILIMOVI, VRDESPERITEM, CDOPERADOR, IDITEMORIGEM,
             IDORIGEMPROD, VRENCARGOIMPXML)
         VALUES
            (V_CDFILIAL, C_ITEMPRODUTO.CDARVPROD, C_ITEMPRODUTO.VRUNITITEM, 'S', V_NRLANCTONF,
             C_ITEMPRODUTO.NMPRODUTO, C_ITEMPRODUTO.VRDESCITEM, LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0'), V_PRODATUEST,
             C_ITEMPRODUTO.VRTOTAITEM, C_ITEMPRODUTO.CDPRODUTO,  C_ITEMPRODUTO.QTITEMPROD, 0, V_CFOP1DIGT||V_CFOPXML,
             '000000', (C_ITEMPRODUTO.VRTOTAITEM - C_ITEMPRODUTO.VRDESCITEM), V_CDFILIRECE, NVL(C_ITEMPRODUTO.NRAUTOFORN, V_NRAUTOFORNIT),
             C_ITEMPRODUTO.CDSITUTRIBPR, NULL, NULL, V_CDALMOXARIFE, V_CDLOCALESTOQ, ' ',
             ' ', V_CDFILIRECE, V_VRDESPERITEM, V_CDOPERADOR, NULL,
             C_ITEMPRODUTO.IDORIGEMPROD, 0);

         IF (C_ITEMPRODUTO.NRAUTOFORN IS NOT NULL) OR (V_NRAUTOFORNIT IS NOT NULL) THEN    /* AND EXISTE AF NO SISTEMA*/

            IF (C_ITEMPRODUTO.NRAUTOFORN IS NULL) THEN
               SELECT MAX(A.CDFILLANC), MAX(A.CDFILDEST)
                 INTO V_CDFILLANC, V_CDFILDEST
                 FROM AUTOFORNE A, INTG_ITEMAF II
                WHERE A.NRAUTOFORN = II.NRAUTOFORNE
                  AND II.NRACESSONFE = P_NRACESSONFE
                  AND II.NRSEQITPROD = C_ITEMPRODUTO.NRSEQITPROD
                  AND (A.IDAFFORALIM = 'N')
                  AND (A.IDSITUATUAAF IS NULL)
                  AND (NVL(A.IDAFOPERLOG,'1') = '1')
                  AND (NVL(A.IDAFEXPIRADA, 'N') = 'N');
            ELSE
               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');
            END IF;

            V_EXPRODAF := 0;

            BEGIN
               SELECT COUNT(1)
                 INTO V_EXPRODAF
                 FROM ITEMAUTF I, PRODUTO P
                WHERE I.CDFILLANC   = V_CDFILLANC
                  AND I.CDFILDEST   = V_CDFILDEST
                  AND I.NRAUTOFORN  = NVL(C_ITEMPRODUTO.NRAUTOFORN, V_NRAUTOFORNIT)
                  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;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_EXPRODAF := 0;
            END;

            IF V_EXPRODAF = 0 THEN
               BEGIN
                  SELECT COUNT(1)
                    INTO V_EXPRODAF
                    FROM ITEMAUTF I, PRODUTO P, INTG_ITEMAF II
                   WHERE I.CDFILLANC     = V_CDFILLANC
                     AND I.CDFILDEST     = V_CDFILDEST
                     AND II.NRACESSONFE  = P_NRACESSONFE
                     AND II.CDPRODUTOXML = C_ITEMPRODUTO.CDPRODUTOXML
                     AND II.NRSEQITPROD  = C_ITEMPRODUTO.NRSEQITPROD
                     AND I.NRAUTOFORN    = II.NRAUTOFORNE
                     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;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_EXPRODAF := 0;
               END;
            END IF;

            IF (V_EXPRODAF > 0) THEN
               V_INSPROD := 'S';
               V_QTITEMPRODAF  := 0;
               V_QTITEMPRODXML := 0;
               V_QTITEMPRODRES := 0;
               V_QTITBAIXADA   := 0;
               V_INSPROD       := 'S';

               FOR C_INTG_RELACAF IN (SELECT NRAUTOFORNE AS NRAUTOFORN, CDPRODUTOAF
                                        FROM INTG_ITEMAF
                                       WHERE NRACESSONFE = P_NRACESSONFE
                                         AND NRSEQITPROD = C_ITEMPRODUTO.NRSEQITPROD) LOOP

                  FOR C_ITEMAUTF IN(SELECT CDMARCA, DTPROGENTAF, (QTPROGENTAF - NVL(QTEFETENTRAF, 0)) AS QTPROGENTAF,
                                           VRPREUNIAF, P.CDPRODUTO, P.CDARVPROD, NVL(P.VRFATOCONV, 1) AS VRFATOCONVAF
                                      FROM ITEMAUTF I, PRODUTO P
                                     WHERE I.CDFILLANC   = V_CDFILLANC
                                       AND I.CDFILDEST   = V_CDFILDEST
                                       AND I.NRAUTOFORN  = NVL(C_INTG_RELACAF.NRAUTOFORN, V_NRAUTOFORNIT)
                                       AND P.CDPRODESTO  = C_ITEMPRODUTO.CDPRODESTO
                                       AND I.CDPRODUTO   = NVL(C_INTG_RELACAF.CDPRODUTOAF, I.CDPRODUTO)
                                       AND ((I.CDMARCA   = C_ITEMPRODUTO.CDMARCAREL) OR (NVL(C_ITEMPRODUTO.CDMARCAREL, I.CDMARCA) = I.CDMARCA))
                                       AND (IDBAIXITMAF NOT IN ('2','3') OR IDBAIXITMAF IS NULL)
                                       AND (QTPROGENTAF - NVL(QTEFETENTRAF, 0)) > 0
                                       AND I.CDPRODUTO = P.CDPRODUTO
                                     ORDER BY I.DTPROGENTAF) LOOP

                     IF V_INSPROD = 'S' THEN

                        V_INSPROD := 'N';

                        IF (C_ITEMPRODUTO.CDPRODUTO = C_ITEMAUTF.CDPRODUTO) OR (V_IDFUNCAOFILI = 'O') THEN
                           V_QTITEMPROD := C_ITEMPRODUTO.QTITEMPROD;
                        ELSE
                           V_QTITEMPROD := (C_ITEMPRODUTO.QTITEMPROD * C_ITEMPRODUTO.VRFATOCONV)/C_ITEMAUTF.VRFATOCONVAF;
                        END IF;

                        IF (C_INTG_RELACAF.NRAUTOFORN IS NOT NULL) THEN
                           V_RELACAF := 0;

                           BEGIN
                              SELECT COUNT(1)
                                INTO V_RELACAF
                                FROM NFRELACAF
                               WHERE CDFILIAL    = V_CDFILIAL
                                 AND CDFILLANC   = V_CDFILLANC
                                 AND NRLANCTONF  = V_NRLANCTONF
                                 AND CDFILDEST   = V_CDFILDEST
                                 AND NRAUTOFORN  = C_INTG_RELACAF.NRAUTOFORN
                                 AND CDPRODUTO   = C_ITEMAUTF.CDPRODUTO
                                 AND CDMARCA     = C_ITEMAUTF.CDMARCA
                                 AND DTPROGENTAF = C_ITEMAUTF.DTPROGENTAF;
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_RELACAF := 0;
                           END;

                           IF V_RELACAF = 0 THEN
                              INSERT INTO NFRELACAF
                                 (CDFILIAL, CDFILLANC, NRLANCTONF, CDFILDEST,
                                  NRAUTOFORN, CDPRODUTO, CDMARCA,
                                  DTPROGENTAF, QTNFRELACAF, VRNFRELACAF)
                                 VALUES
                                 (V_CDFILIAL, V_CDFILLANC, V_NRLANCTONF, V_CDFILDEST,
                                  C_INTG_RELACAF.NRAUTOFORN, C_ITEMAUTF.CDPRODUTO, C_ITEMAUTF.CDMARCA,
                                  C_ITEMAUTF.DTPROGENTAF, C_ITEMAUTF.QTPROGENTAF /*V_QTITEMPROD*/, C_ITEMAUTF.VRPREUNIAF);
                           END IF;
                        END IF;

                        UPDATE ITEMPRODUTO
                           SET CDMARCA     = C_ITEMAUTF.CDMARCA,
                               DTPROGENTAF = C_ITEMAUTF.DTPROGENTAF,
                               NRAUTOFORN  = NVL(C_INTG_RELACAF.NRAUTOFORN, V_NRAUTOFORNIT)
                         WHERE CDFILIAL    = V_CDFILIAL
                           AND NRLANCTONF  = V_NRLANCTONF
                           AND NRSEQITPROD = LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0');

                        UPDATE INTG_ITEMPRODUTO
                           SET NRAUTOFORN  = NVL(C_INTG_RELACAF.NRAUTOFORN, V_NRAUTOFORNIT)
                         WHERE NRACESSONFE = P_NRACESSONFE
                           AND NRSEQITPROD = C_ITEMPRODUTO.NRSEQITPROD;


                        V_CDMARCA := C_ITEMAUTF.CDMARCA;

                        IF (V_QTITEMPRODRES IS NULL) OR (V_QTITEMPRODRES = 0) THEN
                           NF_BAIXA_AF(V_CDFILIAL, V_NRLANCTONF, LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0'), 'I', C_ITEMAUTF.CDARVPROD, C_ITEMAUTF.CDARVPROD,
                                       C_ITEMAUTF.CDPRODUTO, C_ITEMAUTF.CDPRODUTO, V_CDMARCA, V_CDMARCA, V_QTITEMPROD, V_QTITEMPROD, V_ERROAF);
                        ELSE
                           V_QTITEMPRODRES := (V_QTITEMPRODRES/C_ITEMAUTF.VRFATOCONVAF);
                           V_QTITBAIXADA   := (V_QTITBAIXADA  /C_ITEMAUTF.VRFATOCONVAF);

                           NF_BAIXA_AF(V_CDFILIAL, V_NRLANCTONF, LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0'), 'I', C_ITEMAUTF.CDARVPROD, C_ITEMAUTF.CDARVPROD,
                                       C_ITEMAUTF.CDPRODUTO, C_ITEMAUTF.CDPRODUTO, V_CDMARCA, V_CDMARCA, V_QTITEMPRODRES, V_QTITEMPRODRES, V_ERROAF);
                        END IF;

                        V_QTITEMPRODAF  := C_ITEMAUTF.QTPROGENTAF;
                        V_QTITEMPRODXML := V_QTITEMPROD;

                        IF (V_QTITEMPRODAF < (V_QTITEMPROD - V_QTITBAIXADA)) THEN
                           V_QTITEMPRODRES := V_QTITEMPROD - V_QTITEMPRODAF - V_QTITBAIXADA;
                           V_QTITBAIXADA   := V_QTITBAIXADA + C_ITEMAUTF.QTPROGENTAF * C_ITEMAUTF.VRFATOCONVAF;
                           V_QTITEMPRODRES := V_QTITEMPRODRES * C_ITEMAUTF.VRFATOCONVAF;
                           V_INSPROD       := 'S';
                        ELSE
                           V_QTITEMPRODRES := NULL;
                           V_QTITEMPROD    := NULL;
                           V_QTITEMPRODAF  := NULL;
                           V_QTITBAIXADA   := NULL;
                           V_INSPROD       := 'N';
                        END IF;

                     END IF;
                  END LOOP;
               END LOOP;
            END IF;
         END IF;

         BEGIN
            SELECT NVL(NVL(P.CDCSTDIG1PROD ,F.CDCSTDIG1ENT), '0') AS CDCSTDIG1
              INTO V_DIG1CST
              FROM ITEMPRODUTO I, NOTAFISCAL N, FORNECEDOR F, PRODUTO P
             WHERE I.CDFILIAL    = V_CDFILIAL
               AND I.NRLANCTONF  = V_NRLANCTONF
               AND I.NRSEQITPROD = LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0')
               AND N.CDFILIAL    = I.CDFILIAL
               AND N.NRLANCTONF  = I.NRLANCTONF
               AND F.CDFORNECED  = N.CDFORNECED
               AND P.CDPRODUTO   = I.CDPRODUTO;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_DIG1CST := 0;
         END;

         IF (P_GERAIGUALXML = 'S') THEN
            FOR C_TRABITPROIMPOS IN(SELECT IT.CDFILIAL, IT.NRLANCTONF, IT.NRSEQIMPOIT, IT.CDIMPOSTOIT,
                                           B.SGIMPOSTO, B.IDTRATIMPO, B.IDPREIMPENTR, B.IDCONSISTENT,
                                           IT.VRCONTITIMP, IT.VRPERREDBCIT, IT.VRBASECALCIT, IT.VRALIQITEM,
                                           IT.VRIMPOSTOIT, IT.CDFISCALIT, IT.CDSITUTRIBIT, IT.CDFISCOPERIT,
                                           IT.NRITPROIMPOS, IT.IDMODBCITNFE, IT.IDMODBCSTITNFE,
                                           NVL(IT.VRADICALIQFECP, 0) AS VRADICALIQFECP,
                                           NVL(IT.VRADICFECP, 0) AS VRADICFECP
                                      FROM INTG_TRABITPROIMPOS IT, IMPOSTO B
                                     WHERE NRACESSONFE    = P_NRACESSONFE
                                       AND B.CDIMPOSTO    = IT.CDIMPOSTOIT
                                       AND IT.NRSEQIMPOIT = C_ITEMPRODUTO.NRSEQITPROD
                                     ORDER BY IT.CDFILIAL, IT.NRLANCTONF, IT.NRSEQIMPOIT, IT.CDIMPOSTOIT) LOOP


               IF(C_TRABITPROIMPOS.VRIMPOSTOIT > 0) THEN
                  V_CDFISCALIT := '1';
               ELSE
                  V_CDFISCALIT := '2';
               END IF;

               IF (LENGTH(C_TRABITPROIMPOS.CDSITUTRIBIT) = 2) THEN
                  V_CODIGOCST := C_TRABITPROIMPOS.CDSITUTRIBIT;
               ELSE
                  IF (LENGTH(C_TRABITPROIMPOS.CDSITUTRIBIT) > 2) THEN
                     V_CODIGOCST := SUBSTR(C_TRABITPROIMPOS.CDSITUTRIBIT, 2,2);
                  END IF;
               END IF;

               V_CFOPXML := SUBSTR(C_ITEMPRODUTO.CDFISOPEITEM, 2, 3);

               BEGIN
                  SELECT NVL(CDENCARGOIMPXML, NULL)
                    INTO V_CDENCARGOIMPXML
                    FROM IMPOSTO
                   WHERE CDIMPOSTO = C_TRABITPROIMPOS.CDIMPOSTOIT;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDENCARGOIMPXML := NULL;
               END;

               IF (V_CDENCARGOIMPXML IS NULL) THEN

                  INSERT INTO TRABITPROIMPOS
                     (CDFILIMPOIT, NRLANCIMPOIT, NRSEQIMPOIT, CDIMPOSTOIT, VRCONTIMPOIT,
                      VRREDBCIMPOIT, VRBCALCIMPOIT, VRALIQIMPOIT, VRPDEDIMPOIT, VRIMPOSIT,
                      CDFISCIMPOIT,  CDSTRIBIMPOIT, CDFOPERIMPOIT, NRSEQITPRO, IDVALORINFO,
                      VR1REDBCIMPOIT, IDTRIMPSTTI, VRIMPOSVISUIT, CDSTRIBITNFE, VRADICALIQFECP, VRADICFECP)
                  VALUES
                     (V_CDFILIAL, V_NRLANCTONF, LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0'), C_TRABITPROIMPOS.CDIMPOSTOIT, (C_ITEMPRODUTO.VRTOTAITEM - C_ITEMPRODUTO.VRDESCITEM),
                      NVL(C_TRABITPROIMPOS.VRPERREDBCIT,  0), NVL(C_TRABITPROIMPOS.VRBASECALCIT, 0), C_TRABITPROIMPOS.VRALIQITEM, 0, C_TRABITPROIMPOS.VRIMPOSTOIT,
                      V_CDFISCALIT, V_DIG1CST||V_CODIGOCST, V_CFOP1DIGT||V_CFOPXML, C_TRABITPROIMPOS.NRITPROIMPOS, 'S',
                       0, '0', C_TRABITPROIMPOS.VRIMPOSTOIT, V_CODIGOCST, C_TRABITPROIMPOS.VRADICALIQFECP, C_TRABITPROIMPOS.VRADICFECP);

               ELSE
                  UPDATE ITEMENCARGO
                     SET VRITEMENCA = VRITEMENCA + C_TRABITPROIMPOS.VRIMPOSTOIT + C_TRABITPROIMPOS.VRADICFECP
                   WHERE CDENCARGO  = V_CDENCARGOIMPXML
                     AND CDFILIAL   = V_CDFILIAL
                     AND NRLANCTONF = V_NRLANCTONF;

                  UPDATE ITEMPRODUTO
                     SET VRENCARGOIMPXML  = VRENCARGOIMPXML + C_TRABITPROIMPOS.VRIMPOSTOIT + C_TRABITPROIMPOS.VRADICFECP
                   WHERE NRSEQITPROD = LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0')
                     AND CDFILIAL    = V_CDFILIAL
                     AND NRLANCTONF  = V_NRLANCTONF;
               END IF;
            END LOOP;

         ELSE
            IMPOSTO_ENTRADA_PRODUTO(V_CDEMPRESA, V_CDINSCESTA, V_CDTIPOOPER, V_CDFORNECED, V_CDFILIAL, V_NRLANCTONF,
                                    V_DTENTRSAID, 'E', V_CDOPERADOR, V_CDGRUPOFISC, V_IDINTEREST, C_ITEMPRODUTO.CDARVPROD,
                                    '', 'F', V_CDFILIRECE, NULL, NULL, C_ITEMPRODUTO.VRTOTAITEM, C_ITEMPRODUTO.IDORIGEMPROD);


            FOR C_ALIQITEM IN(SELECT IM.CDIMPOSTO, IM.SGIMPOSTO, IM.IDTRATIMPO, IM.IDPREIMPENTR,
                                     I.CDFISCTEMP, NVL(AL.VRALIQUTMP, 0) AS VRALIQUOTA,
                                     NVL(AL.VRADICALIQFECP, 0) AS VRADICALIQFECP
                                FROM INCITEMP I, IMPOSTO IM, ALIQTEMPPROD AL
                               WHERE I.CDIMPOTEMP  = IM.CDIMPOSTO
                                 AND I.NRINCITEMP  = V_CDFILIAL||V_NRLANCTONF
                                 AND I.NRINCITEMP  = AL.NRALIQTEMP(+)
                                 AND I.CDIMPOTEMP  = AL.CDIMPOTEMP(+)
                                 AND IM.IDPRODNOTA <> 'C') LOOP

               BEGIN
                  SELECT NVL(IDIMPORTAIMPXML , 'N')
                    INTO V_IDIMPIMPOXML
                    FROM IMPOSTO
                   WHERE CDIMPOSTO = C_ALIQITEM.CDIMPOSTO;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_IDIMPIMPOXML := 'N';
               END;

               IF (V_IDIMPIMPOXML = 'N') THEN
                  INSERT INTO TRABITPROIMPOS
                     (CDFILIMPOIT, NRLANCIMPOIT, NRSEQIMPOIT, CDIMPOSTOIT, VRCONTIMPOIT,
                     VRREDBCIMPOIT, VRBCALCIMPOIT, VRALIQIMPOIT, VRPDEDIMPOIT, VRIMPOSIT,
                     CDFISCIMPOIT,  NRSEQITPRO, IDVALORINFO,
                     VR1REDBCIMPOIT, IDTRIMPSTTI, VRIMPOSVISUIT, VRADICALIQFECP)

                  VALUES
                     (V_CDFILIAL, V_NRLANCTONF,   LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0'), C_ALIQITEM.CDIMPOSTO, (C_ITEMPRODUTO.VRTOTAITEM - C_ITEMPRODUTO.VRDESCITEM),
                      0, C_ITEMPRODUTO.VRTOTAITEM, C_ALIQITEM.VRALIQUOTA, 0, 0,
                      C_ALIQITEM.CDFISCTEMP, '1', 'N',
                      0, '0', 0, C_ALIQITEM.VRADICALIQFECP);
               ELSE
                  FOR C_TRABITPROIMPOS IN(SELECT IT.CDFILIAL, IT.NRLANCTONF, IT.NRSEQIMPOIT, IT.CDIMPOSTOIT,
                                                 B.SGIMPOSTO, B.IDTRATIMPO, B.IDPREIMPENTR, B.IDCONSISTENT,
                                                 IT.VRCONTITIMP, IT.VRPERREDBCIT, IT.VRBASECALCIT, IT.VRALIQITEM,
                                                 IT.VRIMPOSTOIT, IT.CDFISCALIT, IT.CDSITUTRIBIT, IT.CDFISCOPERIT,
                                                 IT.NRITPROIMPOS, IT.IDMODBCITNFE, IT.IDMODBCSTITNFE,
                                                 NVL(IT.VRADICALIQFECP, 0) AS VRADICALIQFECP,
                                                 NVL(IT.VRADICFECP, 0) AS VRADICFECP
                                            FROM INTG_TRABITPROIMPOS IT, IMPOSTO B
                                           WHERE NRACESSONFE    = P_NRACESSONFE
                                             AND B.CDIMPOSTO    = IT.CDIMPOSTOIT
                                             AND IT.NRSEQIMPOIT = C_ITEMPRODUTO.NRSEQITPROD
                                             AND IT.CDIMPOSTOIT = C_ALIQITEM.CDIMPOSTO
                                             AND B.CDENCARGOIMPXML IS NULL
                                           ORDER BY IT.CDFILIAL, IT.NRLANCTONF, IT.NRSEQIMPOIT, IT.CDIMPOSTOIT) LOOP


                     IF(C_TRABITPROIMPOS.VRIMPOSTOIT > 0) THEN
                        V_CDFISCALIT := '1';
                     ELSE
                        V_CDFISCALIT := '2';
                     END IF;

                     IF (LENGTH(C_TRABITPROIMPOS.CDSITUTRIBIT) = 2) THEN
                        V_CODIGOCST := C_TRABITPROIMPOS.CDSITUTRIBIT;
                     ELSE
                        IF (LENGTH(C_TRABITPROIMPOS.CDSITUTRIBIT) > 2) THEN
                           V_CODIGOCST := SUBSTR(C_TRABITPROIMPOS.CDSITUTRIBIT, 2,2);
                        END IF;
                     END IF;

                     V_CFOPXML := SUBSTR(C_ITEMPRODUTO.CDFISOPEITEM, 2, 3);

                     INSERT INTO TRABITPROIMPOS
                        (CDFILIMPOIT, NRLANCIMPOIT, NRSEQIMPOIT, CDIMPOSTOIT, VRCONTIMPOIT,
                         VRREDBCIMPOIT, VRBCALCIMPOIT, VRALIQIMPOIT, VRPDEDIMPOIT, VRIMPOSIT,
                         CDFISCIMPOIT,  CDSTRIBIMPOIT, CDFOPERIMPOIT, NRSEQITPRO, IDVALORINFO,
                         VR1REDBCIMPOIT, IDTRIMPSTTI, VRIMPOSVISUIT, CDSTRIBITNFE, VRADICALIQFECP, VRADICFECP)
                     VALUES
                        (V_CDFILIAL, V_NRLANCTONF, LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0'), C_TRABITPROIMPOS.CDIMPOSTOIT, (C_ITEMPRODUTO.VRTOTAITEM - C_ITEMPRODUTO.VRDESCITEM),
                         NVL(C_TRABITPROIMPOS.VRPERREDBCIT,  0), NVL(C_TRABITPROIMPOS.VRBASECALCIT, 0), C_TRABITPROIMPOS.VRALIQITEM, 0, C_TRABITPROIMPOS.VRIMPOSTOIT,
                         V_CDFISCALIT, V_DIG1CST||V_CODIGOCST, V_CFOP1DIGT||V_CFOPXML, C_TRABITPROIMPOS.NRITPROIMPOS, 'S',
                          0, '0', C_TRABITPROIMPOS.VRIMPOSTOIT, V_CODIGOCST, C_TRABITPROIMPOS.VRADICALIQFECP, C_TRABITPROIMPOS.VRADICFECP);

                  END LOOP;
               END IF;
            END LOOP;
            /* Caso algum imposto esteja marcado para que seja gerado como encarego */
            FOR C_TRABITPROIMPOS IN(SELECT IT.CDFILIAL, IT.NRLANCTONF, IT.NRSEQIMPOIT, IT.CDIMPOSTOIT,
                                           B.SGIMPOSTO, B.IDTRATIMPO, B.IDPREIMPENTR, B.IDCONSISTENT,
                                           IT.VRCONTITIMP, IT.VRPERREDBCIT, IT.VRBASECALCIT, IT.VRALIQITEM,
                                           IT.VRIMPOSTOIT, IT.CDFISCALIT, IT.CDSITUTRIBIT, IT.CDFISCOPERIT,
                                           IT.NRITPROIMPOS, IT.IDMODBCITNFE, IT.IDMODBCSTITNFE, B.CDENCARGOIMPXML,
                                           NVL(IT.VRADICALIQFECP, 0) AS VRADICALIQFECP,
                                           NVL(IT.VRADICFECP, 0) AS VRADICFECP
                                      FROM INTG_TRABITPROIMPOS IT, IMPOSTO B
                                     WHERE NRACESSONFE    = P_NRACESSONFE
                                       AND B.CDIMPOSTO    = IT.CDIMPOSTOIT
                                       AND IT.NRSEQIMPOIT = C_ITEMPRODUTO.NRSEQITPROD
                                       AND B.CDENCARGOIMPXML IS NOT NULL
                                     ORDER BY IT.CDFILIAL, IT.NRLANCTONF, IT.NRSEQIMPOIT, IT.CDIMPOSTOIT) LOOP


               UPDATE ITEMENCARGO
                  SET VRITEMENCA = VRITEMENCA + C_TRABITPROIMPOS.VRIMPOSTOIT + C_TRABITPROIMPOS.VRADICFECP
                WHERE CDENCARGO  = C_TRABITPROIMPOS.CDENCARGOIMPXML
                  AND CDFILIAL   = V_CDFILIAL
                  AND NRLANCTONF = V_NRLANCTONF;

               UPDATE ITEMPRODUTO
                  SET VRENCARGOIMPXML  = VRENCARGOIMPXML + C_TRABITPROIMPOS.VRIMPOSTOIT + C_TRABITPROIMPOS.VRADICFECP
                WHERE NRSEQITPROD = LPAD(C_ITEMPRODUTO.NRSEQITPROD, 4, '0')
                  AND CDFILIAL    = V_CDFILIAL
                  AND NRLANCTONF  = V_NRLANCTONF;


            END LOOP;
            /* Caso algum imposto esteja marcado para que seja gerado como encarego */

            DELETE
              FROM ALIQTEMPPROD
             WHERE NRALIQTEMP = V_CDFILIAL||V_NRLANCTONF;

            DELETE
              FROM INCITEMP
             WHERE NRINCITEMP = V_CDFILIAL||V_NRLANCTONF;
         END IF;

      END LOOP;

      /*  Baixar todos os itens da AF caso o parâmetro “Baixa total da AF no Lançamento da Nota Fiscal” esteja marcado*/
      BEGIN
         SELECT NVL(IDBAIXAFTOTLANNF, 'N') AS IDBAIXAFTOTLANNF
           INTO V_IDBAIXAFTOTLANNF
           FROM PARAMGERAL
          WHERE CDPARGERAL = '0001';
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IDBAIXAFTOTLANNF:= 'N';
      END;

      IF (V_IDBAIXAFTOTLANNF = 'S') THEN
         FOR C_ITEMPRODUTO IN (SELECT DISTINCT LPAD(I.NRAUTOFORN, 10, '0') AS NRAUTOFORN,
                                               CDFILLANC, CDFILDEST
                                 FROM INTG_ITEMPRODUTO I, AUTOFORNE A
                                WHERE I.NRACESSONFE = P_NRACESSONFE
                                  AND LPAD(I.NRAUTOFORN, 10, '0') = A.NRAUTOFORN) LOOP

           UPDATE ITEMAUTF
              SET IDBAIXITMAF = '2',
                  QTEFETENTRAF = QTPROGENTAF
            WHERE CDFILDEST   = C_ITEMPRODUTO.CDFILDEST   AND
                  CDFILLANC   = C_ITEMPRODUTO.CDFILLANC   AND
                  NRAUTOFORN  = C_ITEMPRODUTO.NRAUTOFORN;

           UPDATE AUTOFORNE
              SET IDBAIXAAF = '2'
            WHERE CDFILDEST   = C_ITEMPRODUTO.CDFILDEST   AND
                  CDFILLANC   = C_ITEMPRODUTO.CDFILLANC   AND
                  NRAUTOFORN  = C_ITEMPRODUTO.NRAUTOFORN;

         END LOOP;
      END IF;


      IF (P_GERAIGUALXML = 'S') THEN
         FOR C_CONTAPAGAR IN(SELECT CDFILIAL, NRLANCTONF, NRSEQVENPAG, NRPARCELAPAG,
                                    CDTPCTPAGAR, QTDIASVENPAG, DTORIGVENPAG, VRORIGPAG
                               FROM INTG_CONTAPAGAR
                              WHERE NRACESSONFE = P_NRACESSONFE)LOOP

            INSERT INTO CONTAPAGAR
               (CDFILIAL,    NRLANCTONF,   NRSEQVENPAG,  NRPARCELAPAG,
                CDTPCTPAGAR, QTDIASVENPAG, DTORIGVENPAG, VRORIGPAG, VRATUAPAG, DTATUAVENPAG)
            VALUES
               (V_CDFILIAL, V_NRLANCTONF, LPAD(C_CONTAPAGAR.NRSEQVENPAG, 2, '0'), C_CONTAPAGAR.NRPARCELAPAG,
                C_CONTAPAGAR.CDTPCTPAGAR, (C_CONTAPAGAR.DTORIGVENPAG - SYSDATE), C_CONTAPAGAR.DTORIGVENPAG,
                C_CONTAPAGAR.VRORIGPAG, C_CONTAPAGAR.VRORIGPAG, C_CONTAPAGAR.DTORIGVENPAG);
         END LOOP;
      ELSE
         BEGIN
            SELECT NVL(IMPVENCXML, 'N')
              INTO V_IMPVENCXML
              FROM PARAMFORNE
             WHERE CDFORNECED = V_CDFORNECED;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_IMPVENCXML := 'N';
         END;

         IF (V_IMPVENCXML = 'S') THEN
            FOR C_CONTAPAGAR IN(SELECT CDFILIAL, NRLANCTONF, NRSEQVENPAG, NRPARCELAPAG,
                                       CDTPCTPAGAR, QTDIASVENPAG, DTORIGVENPAG, VRORIGPAG
                                  FROM INTG_CONTAPAGAR
                                 WHERE NRACESSONFE = P_NRACESSONFE)LOOP
               INSERT INTO CONTAPAGAR
                  (CDFILIAL,    NRLANCTONF,   NRSEQVENPAG,  NRPARCELAPAG,
                   CDTPCTPAGAR, QTDIASVENPAG, DTORIGVENPAG, VRORIGPAG, VRATUAPAG, DTATUAVENPAG)
               VALUES
                  (V_CDFILIAL, V_NRLANCTONF, LPAD(C_CONTAPAGAR.NRSEQVENPAG, 2, '0'), C_CONTAPAGAR.NRPARCELAPAG,
                   C_CONTAPAGAR.CDTPCTPAGAR, (C_CONTAPAGAR.DTORIGVENPAG - SYSDATE), C_CONTAPAGAR.DTORIGVENPAG,
                   C_CONTAPAGAR.VRORIGPAG, C_CONTAPAGAR.VRORIGPAG, C_CONTAPAGAR.DTORIGVENPAG);
            END LOOP;
         END IF;
      END IF;   

      SELECT COUNT (DISTINCT CDFISOPEITEM), MIN(CDFISOPEITEM)
        INTO V_QTDCFOP, V_CDCFOPNF
        FROM ITEMPRODUTO
       WHERE CDFILIAL   = V_CDFILIAL
         AND NRLANCTONF = V_NRLANCTONF;

      IF (V_QTDCFOP > 1) THEN
         UPDATE NOTAFISCAL
            SET CDFISOPENTF  = '***'
          WHERE CDFILIAL     = V_CDFILIAL
            AND NRLANCTONF   = V_NRLANCTONF;

         UPDATE NOTAFISCAL
            SET DSCDFISOPENF = SUBSTR(DESCRICAO_CFOP(V_CDCFOPNF),1,45)
          WHERE (CDFILIAL    = V_CDFILIAL)
            AND (NRLANCTONF  = V_NRLANCTONF)
            AND DSCDFISOPENF IS NULL;

      ELSIF (V_QTDCFOP = 1) THEN
         UPDATE NOTAFISCAL
            SET CDFISOPENTF  = V_CDCFOPNF
          WHERE (CDFILIAL    = V_CDFILIAL)
            AND (NRLANCTONF  = V_NRLANCTONF);

         UPDATE NOTAFISCAL
            SET DSCDFISOPENF = SUBSTR(DESCRICAO_CFOP(V_CDCFOPNF),1,45)
          WHERE (CDFILIAL    = V_CDFILIAL)
            AND (NRLANCTONF  = V_NRLANCTONF)
            AND DSCDFISOPENF IS NULL;
      END IF;

      FOR C_TRABIMPOSNFTOT IN (SELECT SUM(T.VRIMPOSIT) VRTOTAIMPO, T.CDIMPOSTOIT
                                 FROM TRABITPROIMPOS T, IMPOSTO I
                                WHERE CDFILIMPOIT  = V_CDFILIAL
                                  AND NRLANCIMPOIT = V_NRLANCTONF
                                  AND IDPRODNOTA <> 'C'
                                  AND T.CDIMPOSTOIT = I.CDIMPOSTO
                                GROUP BY CDIMPOSTOIT
                                ORDER BY CDIMPOSTOIT)LOOP

          INSERT INTO TRABIMPOSNFTOT
                     (CDFILIMPTOT, NRLANCIMPTOT, CDIMPOSTOT, VRIMPOSTOT, VRBCALIMPTOT)

               VALUES(V_CDFILIAL, V_NRLANCTONF, C_TRABIMPOSNFTOT.CDIMPOSTOIT, (0 + C_TRABIMPOSNFTOT.VRTOTAIMPO), 0);
      END LOOP;

      GERA_FECHAMENTO_NFENTRADA(V_CDFILIAL, V_NRLANCTONF, V_DTENTRSAID, V_NRLANCESTQ, V_CDOPERADOR);

      UPDATE ITLANCTOEST
         SET IDEVOLESTOQ  = 'N'
       WHERE CDFILIAL     = V_CDFILIAL
         AND NRLANCESTQ   = V_NRLANCESTQ;

      VERIFICA_INCONS_NF(P_NRACESSONFE, P_GERAIGUALXML, 'S', V_NRLANCTONF, V_CDFILIAL, P_LIBERAXML, P_CDTIPOOPER, V_LIBERAOPER, V_ERRO);

      IF (V_ERRO = 'S') THEN
         V_ROLLBACK := 'S';

         OPEN C_INCONS;
         LOOP
         BEGIN
            FETCH C_INCONS INTO C_NRSEQINCONS,
                                C_CDCONSISTXML,
                                C_DSINCONSIS;

            IF V_ROLLBACK = 'S' THEN
               ROLLBACK;
               V_ROLLBACK := 'N';
            END IF;

            EXIT WHEN C_INCONS%NOTFOUND;
               INSERT
                 INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
               VALUES (P_NRACESSONFE, C_NRSEQINCONS, C_CDCONSISTXML, C_DSINCONSIS);

               UPDATE INTG_NOTAFISCAL
                  SET IDSTATUS = 'I'
                WHERE NRACESSONFE = P_NRACESSONFE;
         EXCEPTION
            WHEN OTHERS THEN
            IF (V_ROLLBACK = 'N') THEN
               COMMIT;
            END IF;
         END;

         END LOOP;

         CLOSE C_INCONS;

         /*FOR C_INCONS IN (SELECT NRSEQINCONS, CDCONSISTXML, DSINCONSIS
                            FROM INTG_INCONSISTENCIA
                           WHERE NRACESSONFE = P_NRACESSONFE
                           ORDER BY NRSEQINCONS)LOOP

            IF V_ROLLBACK = 'S' THEN
               ROLLBACK;
               V_ROLLBACK := 'N';
            END IF;
            INSERT
              INTO INTG_INCONSISTENCIA (NRACESSONFE, NRSEQINCONS, CDCONSISTXML, DSINCONSIS)
            VALUES (P_NRACESSONFE, C_INCONS.NRSEQINCONS, C_INCONS.CDCONSISTXML, C_INCONS.DSINCONSIS);

            UPDATE INTG_NOTAFISCAL
               SET IDSTATUS = 'I'
             WHERE NRACESSONFE = P_NRACESSONFE;
         END LOOP; */
      ELSE
         V_COUNTINCONS := 0;
         BEGIN
            SELECT COUNT(1)
              INTO V_COUNTINCONS
              FROM INTG_INCONSISTENCIA
             WHERE NRACESSONFE = P_NRACESSONFE;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_COUNTINCONS := 0;
         END;
         IF (V_COUNTINCONS > 0) THEN
            UPDATE INTG_NOTAFISCAL
               SET CDFILIAL     = V_CDFILIAL,
                   NRLANCTONF   = V_NRLANCTONF,
                   DTUTILIZAXML = SYSDATE,
                   IDIMPORTADA  = 'S',
                   IDSTATUSNFE  = 'U',
                   IDSTATUS     = 'I'
             WHERE NRACESSONFE  = P_NRACESSONFE;
         ELSE
            UPDATE INTG_NOTAFISCAL
               SET CDFILIAL     = V_CDFILIAL,
                   NRLANCTONF   = V_NRLANCTONF,
                   DTUTILIZAXML = SYSDATE,
                   IDIMPORTADA  = 'S',
                   IDSTATUSNFE  = 'U',
                   IDSTATUS     = 'L'
             WHERE NRACESSONFE  = P_NRACESSONFE;
             
            UPDATE NOTAFISCAL
               SET IDSTATUS     = 'L'
             WHERE NRACESSONFE  = P_NRACESSONFE
               AND IDENTRSAIDOP = 'E';

         END IF;
      END IF;
   ELSE
      UPDATE INTG_NOTAFISCAL
         SET IDSTATUS = 'I'
       WHERE NRACESSONFE = P_NRACESSONFE;
   END IF;
   COMMIT;
END;