create or replace PROCEDURE USR_GERA_NF_REMESSA
IS
   /*VARIAVEIS ROTINA DE REMESSA
   (SAIDA) */
   V_NFS_NRLANCTO    VARCHAR2(20);
   V_NFS_NRLANCESTQ  VARCHAR2(20);
   V_NFS_SERIE       VARCHAR2(05);
   V_DATAINISAIDA    DATE;
   V_DATAFINSAIDA    DATE;

   /*ENTRADA*/
   V_NFE_NRLANCTO    VARCHAR2(20);
   V_NFE_NRLANCESTQ  VARCHAR2(20);
   V_CDINSCESTAREM   VARCHAR2(16);
   V_NFE_CDEMPRESA   VARCHAR2(02);
   V_CDGRUPOFISC     VARCHAR2(03);
   V_NFE_VRNOTAFISC  FLOAT;
   V_DATAINIENTR     DATE;
   V_DATAFINENTR     DATE;

   V_ERRO VARCHAR2(4000);
BEGIN
   FOR C_NOTAS IN (SELECT NF.CDFILIAL, NF.NRLANCTONF, NF.CDFILIRECE, NF.CDEMPRESA,
                          NF.DTENTRSAID, PF.CDFILWMSMHAARM AS CDFILIARMAZEM, NVL(PF.DTPROCESSA, TRUNC(SYSDATE)) DTPROCESSA,
                          PG.CDTPOPREMSAID, PG.CDTPOPREMENTR
                     FROM TIPOOPERREMRET T, NOTAFISCAL NF JOIN FILIAL F
                                          ON NF.CDFILIRECE = F.CDFILIAL
                                        JOIN PARAMFILIAL PF
                                          ON PF.CDFILIAL = F.CDFILIAL
                                        JOIN GERPARAMGERAL PG
                                          ON (NVL(PG.IDNFREMRETAUTO, 'N') = 'S')
                    WHERE NF.IDENTRSAIDOP = 'E'
                      AND NF.IDSTATUS = 'A'
                      AND NVL(NF.IDORIGDESTNF, 'F') IN ('F','L')
                      AND NVL(NF.IDSISTEMA, 'DFE') = 'DFE'
                      AND NF.CDTIPOOPER   = T.CDTIPOOPER
                      AND NF.IDENTRSAIDOP = T.IDENTRSAIDOP
                      AND T.IDENTRREMRET  = 'M'
                      AND PG.CDTPOPREMSAID IS NOT NULL
                      AND PG.CDTPOPREMENTR IS NOT NULL
                      AND NF.USR_DTEXPXML IS NULL
                      AND NF.DTENTRSAID BETWEEN NVL(PF.DTPROCESSA, TRUNC(SYSDATE)) - 10  AND NVL(PF.DTPROCESSA, TRUNC(SYSDATE))
                      AND F.IDFUNCAOFILI = 'O'
                      AND PF.CDFILWMSMHA IS NULL
                      AND NOT PF.CDFILWMSMHAARM IS NULL
                      AND EXISTS(SELECT I.CDFILIAL
                                   FROM ITEMPRODUTO I
                                  WHERE I.CDFILIAL   = NF.CDFILIAL
                                    AND I.NRLANCTONF = NF.NRLANCTONF)
                      AND NOT EXISTS (SELECT I.CDFILIALRET
                                        FROM RELACREMESSARET I
                                       WHERE I.CDFILIALUTIL   = NF.CDFILIAL
                                         AND I.NRLANCTONFUTIL = NF.NRLANCTONF))
   LOOP
      V_ERRO := NULL;

      --Remessa de armazenagem
      NOVO_CODIGO_SC('LANCNF/FILIAL'||C_NOTAS.CDFILIRECE, V_NFS_NRLANCTO);
      NOVO_CODIGO_SC('LANCTOEST'    ||C_NOTAS.CDFILIRECE, V_NFS_NRLANCESTQ);

      V_NFS_NRLANCTO   := SUBSTR(V_NFS_NRLANCTO,   -10);
      V_NFS_NRLANCESTQ := SUBSTR(V_NFS_NRLANCESTQ, -10);

      SELECT CDSERIE
        INTO V_NFS_SERIE
        FROM FILIAL
       WHERE CDFILIAL = C_NOTAS.CDFILIRECE;

      /* Gera corpo nota fiscal de saida */
      BEGIN
         GERA_NOTAFISCAL_CORPO(P_CDFILIAL    => C_NOTAS.CDFILIRECE,
                               P_CDFILIEMIT  => C_NOTAS.CDFILIRECE,
                               P_CDEMPRESA   => C_NOTAS.CDEMPRESA,
                               P_CDTIPOOPER  => C_NOTAS.CDTPOPREMSAID,
                               P_DTENTRSAID  => C_NOTAS.DTENTRSAID,
                               P_IDSISTEMA   => 'DFS',
                               P_PRXLANCTONF => V_NFS_NRLANCTO,
                               P_PRXLANCESTQ => V_NFS_NRLANCESTQ,
                               P_CDSERIE     => V_NFS_SERIE,
                               P_CDCLIENTE   => C_NOTAS.CDFILIARMAZEM,
                               P_NRLANCTONF  => V_NFS_NRLANCTO,
                               P_NRLANCESTQ  => V_NFS_NRLANCESTQ);
      EXCEPTION
         WHEN OTHERS THEN
            V_NFS_NRLANCESTQ := NULL;
            ROLLBACK;
            V_ERRO := SQLERRM(SQLCODE);

            INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
            VALUES('NF Saida (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

            COMMIT;
      END;

      -- Buscar itens da NF de entrada para geracao da Remessa
      FOR C_PRODREM IN (SELECT CDPRODUTO,    CDPRODEMIS, DSPRODEMIS,
                               VRUNITITEM,   VRDESCITEM, CDALMOXARIFE,
                               CDLOCALESTOQ, NRLOTEESTQ, NRSUBLOTE,  QTITEMPROD
                          FROM ITEMPRODUTO
                         WHERE CDFILIAL   = C_NOTAS.CDFILIAL
                           AND NRLANCTONF = C_NOTAS.NRLANCTONF) LOOP

         BEGIN
         GERA_NOTAFISCAL_PRODUTO(P_CDFILIAL     => C_NOTAS.CDFILIRECE,
                                 P_NRLANCTONF   => V_NFS_NRLANCTO,
                                 P_CDPRODUTO    => C_PRODREM.CDPRODUTO,
                                 P_CDPRODEMIS   => C_PRODREM.CDPRODEMIS,
                                 P_DSPRODEMIS   => C_PRODREM.DSPRODEMIS,
                                 P_VRUNITITEM   => C_PRODREM.VRUNITITEM,
                                 P_VRDESCITEM   => C_PRODREM.VRDESCITEM,
                                 P_CDALMOXARIFE => C_PRODREM.CDALMOXARIFE,
                                 P_CDLOCALESTOQ => C_PRODREM.CDLOCALESTOQ,
                                 P_NRLOTEESTQ   => C_PRODREM.NRLOTEESTQ,
                                 P_NRSUBLOTE    => C_PRODREM.NRSUBLOTE,
                                 P_QTITEMPROD   => C_PRODREM.QTITEMPROD);
         EXCEPTION
            WHEN OTHERS THEN
               ROLLBACK;
               V_ERRO := SQLERRM(SQLCODE);

               INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
               VALUES('NF Saida (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

               COMMIT;
         END;
      END LOOP;
      /* Relacionar a nf de compra com a remessa */

      INSERT INTO RELACREMESSARET
        (CDFILIALRET, NRLANCTONFRET, CDFILIALUTIL, NRLANCTONFUTIL)
      VALUES
        (C_NOTAS.CDFILIRECE, V_NFS_NRLANCTO, C_NOTAS.CDFILIAL, C_NOTAS.NRLANCTONF);

      BEGIN
         GERA_NOTAFISCAL_FECHAMENTO(P_CDFILIAL   => C_NOTAS.CDFILIRECE,
                                    P_NRLANCTONF => V_NFS_NRLANCTO,
                                    P_NRLANCESTQ => V_NFS_NRLANCESTQ);
      EXCEPTION
         WHEN OTHERS THEN
            ROLLBACK;
            V_ERRO := SQLERRM(SQLCODE);

            INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
            VALUES('NF Saida (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

            COMMIT;
      END;

      IF (V_ERRO IS NULL) THEN
         IF C_NOTAS.DTENTRSAID >= C_NOTAS.DTPROCESSA THEN
            V_DATAINISAIDA := C_NOTAS.DTPROCESSA;
         ELSE
            V_DATAINISAIDA := C_NOTAS.DTENTRSAID;
         END IF;

         IF C_NOTAS.DTENTRSAID <= C_NOTAS.DTPROCESSA THEN
            V_DATAFINSAIDA := C_NOTAS.DTPROCESSA;
         ELSE
            V_DATAFINSAIDA := C_NOTAS.DTENTRSAID;
         END IF;

         ATUALIZA_ESTOQUE(C_NOTAS.CDFILIRECE, V_DATAINISAIDA, V_DATAFINSAIDA, C_NOTAS.CDFILIRECE, V_NFS_NRLANCESTQ);

         /* Atualizar a Itlanctoest para nao evoluir estoque caso encontre erro ao atualizar o estoque */
         FOR C_PRODIRREG IN (SELECT NRMOVILOTE, CDFILIAL, CDALMOXARIFE, CDLOCALESTOQ,
                                    CDPRODUTO, NRLOTEESTQ, NRSUBLOTE
                               FROM MOVILOTE
                              WHERE NRMOVILOTE = C_NOTAS.CDFILIRECE||V_NFS_NRLANCESTQ
                                AND CDFILIAL   = C_NOTAS.CDFILIRECE) LOOP
            UPDATE ITLANCTOEST
               SET IDEVOLESTOQ  = 'N'
             WHERE CDFILIAL     = C_NOTAS.CDFILIRECE
               AND NRLANCESTQ   = V_NFS_NRLANCESTQ
               AND CDALMOXARIFE = C_PRODIRREG.CDALMOXARIFE
               AND CDLOCALESTOQ = C_PRODIRREG.CDLOCALESTOQ
               AND CDPRODUTO    = C_PRODIRREG.CDPRODUTO
               AND NRLOTEESTQ   = C_PRODIRREG.NRLOTEESTQ
               AND NRSUBLOTE    = C_PRODIRREG.NRSUBLOTE;

            V_ERRO := 'Nota Fiscal de remessa saida. Algum(ns) produto(s) tornariam o estoque irregular.';
         END LOOP;

         IF NOT V_ERRO IS NULL THEN
            INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
            VALUES('NF Saida (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');
         END IF;

         DELETE MOVILOTE
          WHERE NRMOVILOTE = C_NOTAS.CDFILIRECE||V_NFS_NRLANCESTQ;
      END IF;
      /* Gravar dados adicionais */
      IF (V_ERRO IS NULL) THEN
         FOR C_DADOSADIC IN (SELECT N.NRINSJURNF, N.NRNOTAFISC,
                                    T.NMTIPOOPER AS OPERACAO
                               FROM NOTAFISCAL N, TIPOOPERAC T
                              WHERE N.CDFILIAL     = C_NOTAS.CDFILIAL
                                AND N.NRLANCTONF   = C_NOTAS.NRLANCTONF
                                AND N.CDTIPOOPER   = T.CDTIPOOPER
                                AND N.IDENTRSAIDOP = T.IDENTRSAIDOP) LOOP

            BEGIN

               GERA_NOTAFISCAL_DADOSADIC (P_CDFILIAL    => C_NOTAS.CDFILIRECE,
                                          P_NRLANCTONF  => V_NFS_NRLANCTO,
                                          P_DTINICIO    => SYSDATE,
                                          P_DTFINAL     => SYSDATE,
                                          P_MENSAGEM    => 'NF de remessa referente a '||C_DADOSADIC.OPERACAO||
                                                           ' do fornecedor '||C_DADOSADIC.NRINSJURNF||
                                                           ' NF: '||C_DADOSADIC.NRNOTAFISC);

               GERA_NOTAFISCAL_DADOSADIC (P_CDFILIAL    => C_NOTAS.CDFILIRECE,
                                          P_NRLANCTONF  => V_NFS_NRLANCTO,
                                          P_DTINICIO    => SYSDATE,
                                          P_DTFINAL     => SYSDATE,
                                          P_MENSAGEM    => 'NAO INCIDENCIA DO ICMS ART7, INCISO II DO RICMS/SP');
            EXCEPTION
               WHEN OTHERS THEN
                  ROLLBACK;
                  V_ERRO := SQLERRM(SQLCODE);

                  INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
                  VALUES('NF Saida (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

                  COMMIT;
            END;
         END LOOP;
      END IF;

      /* Gerar entrada no OL Armazenagem (C_NOTAS.CDFILIARMAZEM) */
      IF (V_ERRO IS NULL) THEN
         /* Gera corpo nota fiscal de Entrada */
         NOVO_CODIGO_SC('LANCNFPROD/FILIAL' || C_NOTAS.CDFILIARMAZEM, V_NFE_NRLANCTO);
         NOVO_CODIGO_SC('LANCNF/FILIAL'||C_NOTAS.CDFILIARMAZEM, V_NFE_NRLANCTO);
         NOVO_CODIGO_SC('LANCTOEST'    ||C_NOTAS.CDFILIARMAZEM, V_NFE_NRLANCESTQ);

         V_NFE_NRLANCTO   := SUBSTR(V_NFE_NRLANCTO,   -10);
         V_NFE_NRLANCESTQ := SUBSTR(V_NFE_NRLANCESTQ, -10);

         SELECT CDINSCESTA, CDEMPRESA
           INTO V_CDINSCESTAREM, V_NFE_CDEMPRESA
           FROM FILIAL
          WHERE CDFILIAL = C_NOTAS.CDFILIARMAZEM;

         SELECT VRNOTAFISC
           INTO V_NFE_VRNOTAFISC
           FROM NOTAFISCAL
          WHERE CDFILIAL   = C_NOTAS.CDFILIRECE
            AND NRLANCTONF = V_NFS_NRLANCTO;

         BEGIN
            GERA_NOTAFISCAL_CORPO_ENTRADA (P_CDFILIAL    => C_NOTAS.CDFILIARMAZEM,
                                           P_CDFILIRECE  => C_NOTAS.CDFILIARMAZEM,
                                           P_CDEMPRESA   => V_NFE_CDEMPRESA,
                                           P_CDTIPOOPER  => C_NOTAS.CDTPOPREMENTR,
                                           P_CDSERIEENTR => V_NFS_SERIE,
                                           P_CDCLIENTE   => C_NOTAS.CDFILIRECE,
                                           P_DTENTRSAID  => C_NOTAS.DTENTRSAID,
                                           P_IDSISTEMA   => 'DFE',
                                           P_VRNOTAFISC  => V_NFE_VRNOTAFISC,
                                           P_PRXLANCTONF => V_NFE_NRLANCTO,
                                           P_PRXLANCESTQ => V_NFE_NRLANCESTQ,
                                           P_NRLANCTONF  => V_NFE_NRLANCTO,
                                           P_NRLANCESTQ  => V_NFE_NRLANCESTQ);

         EXCEPTION
            WHEN OTHERS THEN
               V_NFE_NRLANCESTQ := NULL;
               ROLLBACK;
               V_ERRO := SQLERRM(SQLCODE);

               INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
               VALUES('NF Entrada (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

               COMMIT;
         END;

         -- Buscar itens da NF de entrada para geracao da Remessa
         FOR C_PRODREM IN (SELECT CDPRODUTO, CDPRODEMIS, DSPRODEMIS,
                                  VRUNITITEM, VRDESCITEM, QTITEMPROD
                             FROM ITEMPRODUTO
                            WHERE CDFILIAL   = C_NOTAS.CDFILIAL
                              AND NRLANCTONF = C_NOTAS.NRLANCTONF) LOOP
            BEGIN
            GERA_NOTAFISCAL_PRODUTO(P_CDFILIAL     => C_NOTAS.CDFILIARMAZEM,
                                    P_NRLANCTONF   => V_NFE_NRLANCTO,
                                    P_CDPRODUTO    => C_PRODREM.CDPRODUTO,
                                    P_CDPRODEMIS   => C_PRODREM.CDPRODEMIS,
                                    P_DSPRODEMIS   => C_PRODREM.DSPRODEMIS,
                                    P_VRUNITITEM   => C_PRODREM.VRUNITITEM,
                                    P_VRDESCITEM   => C_PRODREM.VRDESCITEM,
                                    P_QTITEMPROD   => C_PRODREM.QTITEMPROD);
             EXCEPTION
                WHEN OTHERS THEN
                   ROLLBACK;
                   V_ERRO := SQLERRM(SQLCODE);

                   INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
                   VALUES('NF Entrada (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

                   COMMIT;
             END;
         END LOOP;
         -- Gravar impostos para os itens da nota fisca de entrada
         FOR C_PRODREM IN (SELECT I.CDPRODUTO,  I.CDPRODEMIS,  I.DSPRODEMIS,
                                  I.VRUNITITEM, I.VRDESCITEM,  P.CDARVPROD,
                                  I.QTITEMPROD, I.NRSEQITPROD, I.VRTOTAITEM
                             FROM ITEMPRODUTO I, PRODUTO P
                            WHERE CDFILIAL    = C_NOTAS.CDFILIARMAZEM
                              AND NRLANCTONF  = V_NFE_NRLANCTO
                              AND I.CDPRODUTO = P.CDPRODUTO) LOOP

            CONSULTA_GRUPOFISCAL (P_IDORIGDESTNF => 'L',
                                  P_CDORIGDESTNF => C_NOTAS.CDFILIARMAZEM,
                                  P_CDFILIFATUR  => C_NOTAS.CDFILIARMAZEM,
                                  P_IDENTRSAIDOP => 'E',
                                  P_CDTIPOOPER   => C_NOTAS.CDTPOPREMENTR,
                                  P_CDGRUPOFISC  => V_CDGRUPOFISC);

            IMPOSTO_ENTRADA_PRODUTO(P_EMPRESA      => V_NFE_CDEMPRESA,
                                    P_INSCESTA     => V_CDINSCESTAREM,
                                    P_TIPOOPER     => C_NOTAS.CDTPOPREMENTR,
                                    P_CDFORNECED   => '',
                                    P_FILIAL       => C_NOTAS.CDFILIARMAZEM,
                                    P_LANCTONF     => V_NFE_NRLANCTO,
                                    P_INIVALID     => C_NOTAS.DTENTRSAID,    
                                    P_ENTRSAID     => 'E',
                                    P_CDGRUPOFISC  => V_CDGRUPOFISC,
                                    P_IDINTEREST   => 'N',
                                    P_CDARVPROD    => C_PRODREM.CDARVPROD,
                                    P_CDGRPFISCSV  => '',
                                    P_IDORIGDESTNF => 'L',
                                    P_CDFILIRECE   => C_NOTAS.CDFILIARMAZEM,
                                    P_CDFILIEMIT   => C_NOTAS.CDFILIRECE,
                                    P_CDCLIENTE    => '',
                                    P_VRPRODUTO    => C_PRODREM.VRTOTAITEM);

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

                  INSERT INTO TRABITPROIMPOS
                     (CDFILIMPOIT,  NRLANCIMPOIT,   NRSEQIMPOIT,   CDIMPOSTOIT,
                      VRCONTIMPOIT, VRREDBCIMPOIT,  VRBCALCIMPOIT, VRALIQIMPOIT,
                      VRPDEDIMPOIT, VRIMPOSIT,      CDFISCIMPOIT,  NRSEQITPRO,
                      IDVALORINFO,  VR1REDBCIMPOIT, IDTRIMPSTTI,   VRIMPOSVISUIT)
                  VALUES
                     (C_NOTAS.CDFILIARMAZEM, V_NFE_NRLANCTO,  C_PRODREM.NRSEQITPROD, C_ALIQITEM.CDIMPOSTO,
                     (C_PRODREM.VRTOTAITEM - C_PRODREM.VRDESCITEM), 0, C_PRODREM.VRTOTAITEM, C_ALIQITEM.VRALIQUOTA,
                      0, 0, C_ALIQITEM.CDFISCTEMP, '1',
                      'N', 0, '0', 0);

            END LOOP;
            DELETE
              FROM ALIQTEMPPROD
             WHERE NRALIQTEMP = C_NOTAS.CDFILIARMAZEM||V_NFE_NRLANCTO;

            DELETE
              FROM INCITEMP
             WHERE NRINCITEMP = C_NOTAS.CDFILIARMAZEM||V_NFE_NRLANCTO;
         END LOOP;

         FOR C_TRABIMPOSNFTOT IN (SELECT SUM(T.VRIMPOSIT) VRTOTAIMPO, T.CDIMPOSTOIT
                                    FROM TRABITPROIMPOS T, IMPOSTO I
                                   WHERE CDFILIMPOIT  = C_NOTAS.CDFILIARMAZEM
                                     AND NRLANCIMPOIT = V_NFE_NRLANCTO
                                     AND IDPRODNOTA <> 'C'
                                     AND T.CDIMPOSTOIT = I.CDIMPOSTO
                                   GROUP BY CDIMPOSTOIT
                                   ORDER BY CDIMPOSTOIT)
         LOOP
             INSERT INTO TRABIMPOSNFTOT
                (CDFILIMPTOT, NRLANCIMPTOT, CDIMPOSTOT, VRIMPOSTOT, VRBCALIMPTOT)
             VALUES
                (C_NOTAS.CDFILIARMAZEM, V_NFE_NRLANCTO, C_TRABIMPOSNFTOT.CDIMPOSTOIT, (0 + C_TRABIMPOSNFTOT.VRTOTAIMPO), 0);
         END LOOP;

         BEGIN
            GERA_FECHAMENTO_NFENTRADA(P_CDFILIAL   => C_NOTAS.CDFILIARMAZEM,
                                      P_NRLANCTONF => V_NFE_NRLANCTO,
                                      P_DATAPROC   => C_NOTAS.DTPROCESSA,
                                      P_NRLANCESTQ => V_NFE_NRLANCESTQ);
         EXCEPTION
            WHEN OTHERS THEN
               ROLLBACK;
               V_ERRO := SQLERRM(SQLCODE);

               INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
               VALUES('NF Entrada (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');
               
               COMMIT;
         END;

         IF (V_ERRO IS NULL) THEN
            IF C_NOTAS.DTENTRSAID < C_NOTAS.DTPROCESSA THEN
               V_DATAINIENTR := C_NOTAS.DTENTRSAID;
            ELSE
               V_DATAINIENTR := C_NOTAS.DTPROCESSA;
            END IF;

            IF C_NOTAS.DTENTRSAID > C_NOTAS.DTPROCESSA THEN
               V_DATAFINENTR := C_NOTAS.DTENTRSAID;
            ELSE
               V_DATAFINENTR := C_NOTAS.DTPROCESSA;
            END IF;

            ATUALIZA_ESTOQUE(C_NOTAS.CDFILIARMAZEM, V_DATAINIENTR, V_DATAFINENTR, C_NOTAS.CDFILIARMAZEM, V_NFE_NRLANCESTQ);

            /* Atualizar a Itlanctoest para nao evoluir estoque caso encontre erro ao atualizar o estoque */
            /*FOR C_PRODIRREG IN (SELECT NRMOVILOTE, CDFILIAL, CDALMOXARIFE, CDLOCALESTOQ,
                                       CDPRODUTO, NRLOTEESTQ, NRSUBLOTE
                                  FROM MOVILOTE
                                 WHERE NRMOVILOTE = C_NOTAS.CDFILIARMAZEM||V_NFE_NRLANCESTQ
                                   AND CDFILIAL   = C_NOTAS.CDFILIARMAZEM) LOOP
               UPDATE ITLANCTOEST
                  SET IDEVOLESTOQ  = 'N'
                WHERE CDFILIAL     = C_NOTAS.CDFILIARMAZEM
                  AND NRLANCESTQ   = V_NFE_NRLANCESTQ
                  AND CDALMOXARIFE = C_PRODIRREG.CDALMOXARIFE
                  AND CDLOCALESTOQ = C_PRODIRREG.CDLOCALESTOQ
                  AND CDPRODUTO    = C_PRODIRREG.CDPRODUTO
                  AND NRLOTEESTQ   = C_PRODIRREG.NRLOTEESTQ
                  AND NRSUBLOTE    = C_PRODIRREG.NRSUBLOTE;

               V_ERRO := 'Nota Fiscal de remessa entrada. Algum(ns) produto(s) tornariam o estoque irregular.';
            END LOOP;

            IF NOT V_ERRO IS NULL THEN
               INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
               VALUES('NF Entrada (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');
            END IF;*/

            DELETE MOVILOTE
             WHERE NRMOVILOTE = C_NOTAS.CDFILIARMAZEM||V_NFE_NRLANCESTQ;
         END IF;

         /* Gravar documento de saida que deu origem a entrada*/
         UPDATE NOTAFISCAL
            SET IDDOCREPLIC = C_NOTAS.CDFILIRECE||V_NFS_NRLANCTO
          WHERE CDFILIAL    = C_NOTAS.CDFILIARMAZEM
            AND NRLANCTONF  = V_NFE_NRLANCTO;

         /* Gravar dados adicionais */
         IF (V_ERRO IS NULL) THEN
            FOR C_DADOSADIC IN (SELECT N.NRINSJURNF, N.NRNOTAFISC,
                                       T.NMTIPOOPER AS OPERACAO, N.DTENTRSAID
                                  FROM NOTAFISCAL N, TIPOOPERAC T
                                 WHERE N.CDFILIAL     = C_NOTAS.CDFILIAL
                                   AND N.NRLANCTONF   = C_NOTAS.NRLANCTONF
                                   AND N.CDTIPOOPER   = T.CDTIPOOPER
                                   AND N.IDENTRSAIDOP = T.IDENTRSAIDOP) LOOP

               BEGIN
                  GERA_NOTAFISCAL_DADOSADIC (P_CDFILIAL    => C_NOTAS.CDFILIRECE,
                                             P_NRLANCTONF  => V_NFS_NRLANCTO,
                                             P_DTINICIO    => SYSDATE,
                                             P_DTFINAL     => SYSDATE,
                                             P_MENSAGEM    => 'NF referente a '||C_DADOSADIC.OPERACAO||
                                                              ' do fornecedor '||C_DADOSADIC.NRINSJURNF||
                                                              ' NF: '||C_DADOSADIC.NRNOTAFISC|| ' - '||
                                                              TO_CHAR(C_DADOSADIC.DTENTRSAID, 'DD/MM/YYYY'));

                  GERA_NOTAFISCAL_DADOSADIC (P_CDFILIAL    => C_NOTAS.CDFILIARMAZEM,
                                             P_NRLANCTONF  => V_NFE_NRLANCTO,
                                             P_DTINICIO    => SYSDATE,
                                             P_DTFINAL     => SYSDATE,
                                             P_MENSAGEM    => 'NAO INCIDENCIA DO ICMS ART7, INCISO II DO RICMS/SP');
               EXCEPTION
                  WHEN OTHERS THEN
                     ROLLBACK;
                     V_ERRO := SQLERRM(SQLCODE);

                     INSERT INTO HMA_MONITORAINT(DSTABELA, CDDADOS, DSERRO, IDPROCESSO)
                     VALUES('NF Entrada (Remesssa)', C_NOTAS.CDFILIAL||C_NOTAS.NRLANCTONF, V_ERRO, '1');

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

      IF (V_ERRO IS NULL) THEN
         UPDATE NOTAFISCAL
            SET USR_DTEXPXML = SYSDATE
          WHERE CDFILIAL     = C_NOTAS.CDFILIAL
            AND NRLANCTONF   = C_NOTAS.NRLANCTONF;
      END IF;
   COMMIT;
   END LOOP;
END;
/