IF EXISTS (SELECT * FROM SYSOBJECTS O, SYSUSERS U
           WHERE O.NAME = 'CONTABILIZA_NF_ENTRADA' AND
                 TYPE = 'P' 	         AND
	              U.UID = O.UID      AND
	              U.NAME = USER)
DROP PROCEDURE CONTABILIZA_NF_ENTRADA
GO

CREATE PROCEDURE CONTABILIZA_NF_ENTRADA (
   @P_NRLISTA   VARCHAR(10))
AS
BEGIN
   DECLARE @V_VRCONTITEM        FLOAT;
   DECLARE @V_VRCONTITEMNF      FLOAT;
   DECLARE @V_COUNTITEMPROD     FLOAT;
   DECLARE @V_VRCONTITEMTOT     FLOAT;
   DECLARE @V_VRPARTRATE        FLOAT;
   DECLARE @V_VRRATENF          FLOAT;
   DECLARE @V_VRRATEIO          FLOAT;
   DECLARE @V_VRITEMENCA        FLOAT;
   DECLARE @V_VRIMPOSTONF       FLOAT;
   DECLARE @V_VRIMPOSTONFAJUST  FLOAT;
   DECLARE @V_DBVRPARTIDAS      FLOAT;
   DECLARE @V_DBVRCONTITEM      FLOAT;
   DECLARE @V_VRPECREPREST      FLOAT; 
                                              
   DECLARE @V_COUNTRATEIO       INT;
   DECLARE @V_COUNTITEMNFORIG   INT;
   DECLARE @V_INPARTIDAS        INT;
   DECLARE @V_RATEIO            INT;
   DECLARE @V_NRSEQEXIS         INT;
   DECLARE @V_CONTIMPO          INT;
                                                          
   DECLARE @V_VRFATORMULT       DOUBLE PRECISION;
   DECLARE @V_VRIMPOSRETIDO     DOUBLE PRECISION;
   DECLARE @V_VRLANCCORPO       DOUBLE PRECISION;
   DECLARE @V_VRLANCCORPOAJUST  DOUBLE PRECISION;
   DECLARE @V_VRSUBSTRINGIB     DOUBLE PRECISION;
   DECLARE @V_VRPARTIDAS        DOUBLE PRECISION;
   DECLARE @V_INRATEIO          DOUBLE PRECISION;
                                                 
   DECLARE @V_CDFILICCUST       VARCHAR(4);
   DECLARE @V_NRLANCCONT        VARCHAR(12);
   DECLARE @V_PRXNRLANCCONT     VARCHAR(20);
   DECLARE @V_CDCCTBLCORPO      VARCHAR(20);
   DECLARE @V_CDCCTBLPROD       VARCHAR(20);
   DECLARE @V_CDHISTPADR        VARCHAR(04);
   DECLARE @V_CDMODDOCFISC      VARCHAR(02);
   DECLARE @V_CDFILIORIG        VARCHAR(04);
   DECLARE @V_NRLANCORIG        VARCHAR(04);
   DECLARE @V_IDLANCCOME        VARCHAR(1);
   DECLARE @V_CDCONTCOME        VARCHAR(21);
   DECLARE @V_CDFILIALITEM      VARCHAR(4);
   DECLARE @V_NRLANCTONFITEM    VARCHAR(10); 
   DECLARE @V_CDCENTCUST        VARCHAR(4);
   DECLARE @V_FILIALVRNFORIG    VARCHAR(4);
   DECLARE @V_NRLANCTONF        VARCHAR(10);
   DECLARE @V_CDCTBLENTRPF      VARCHAR(20);
   DECLARE @V_CDCTBLSAIDPF      VARCHAR(20);  
   DECLARE @V_CDIMPOSTRIB       VARCHAR(2);
   DECLARE @V_NRLANCTONFMOD     VARCHAR(10);
   DECLARE @V_CDPRODUTO         VARCHAR(10);
   DECLARE @V_STCONTCTBL        VARCHAR(20);
   DECLARE @V_STCONTCTBLP       VARCHAR(20);
   DECLARE @V_DSHISTPADR        VARCHAR(1000);
   DECLARE @V_CDLOTE            VARCHAR(20);
   DECLARE @V_NRLANCLOTE        VARCHAR(6);
   DECLARE @V_DESCITEMCTBLENTR  VARCHAR(20);
   DECLARE @V_DESCITEMCTBLSAID  VARCHAR(20);
   DECLARE @V_CDARVPROD         VARCHAR(10);
   DECLARE @V_STCONTPASS        VARCHAR(20);
   DECLARE @V_DSMODDOCFISC      VARCHAR(100);
   DECLARE @V_CDTPREGFISC       VARCHAR(20);
   DECLARE @V_CDFILIALMOD       VARCHAR(04);
   DECLARE @V_CDCTBLFORNCLI     VARCHAR(20);
   DECLARE @V_STCONTADIFE       VARCHAR(20);
   DECLARE @V_IDRETORNA         VARCHAR(01);

   /* VAEIAVEIS DO CURSOR C_NF */
   DECLARE @C_NF_CDFILIAL       VARCHAR(4);
   DECLARE @C_NF_NRLANCTONF     VARCHAR(10);
   DECLARE @C_NF_CDEMPRESA      VARCHAR(2);
   DECLARE @C_NF_IDDOCFINANC    VARCHAR(1);
   DECLARE @C_NF_NRNOTAFISC     VARCHAR(20);
   DECLARE @C_NF_CDCLIENTE      VARCHAR(21);
   DECLARE @C_NF_CDFORNECED     VARCHAR(21);
   DECLARE @C_NF_NRLANCTBDOC    VARCHAR(12);
   DECLARE @C_NF_VRNOTAFISC     DOUBLE PRECISION;
   DECLARE @C_NF_CDFILIEMIT     VARCHAR(4);
   DECLARE @C_NF_CDTIPOOPER     VARCHAR(2);
   DECLARE @C_NF_IDCONTABOPER   VARCHAR(1);
   DECLARE @C_NF_IDOPERDEVONF   VARCHAR(1);
   DECLARE @C_NF_IDORIGDESTNF   VARCHAR(1);
   DECLARE @C_NF_VRPRODUTOS     DOUBLE PRECISION;
   DECLARE @C_NF_CDFILIRECE     VARCHAR(4);
   DECLARE @C_NF_DTENTRSAID     DATETIME;
   DECLARE @C_NF_CDINSCESTA     VARCHAR(16);
   DECLARE @C_NF_DTEMISSAO      CHAR(10);
   DECLARE @C_NF_IDPRIPUBCLIE   VARCHAR(1);
   DECLARE @C_NF_IDENTRSAIDOP   VARCHAR(1);
   DECLARE @C_NF_CDCENTCUST     VARCHAR(4);
   DECLARE @C_NF_CDSERIEENTR    VARCHAR(5);
   DECLARE @C_NF_CDSERIE        VARCHAR(5);
   DECLARE @C_NF_IDTPIJURNF     VARCHAR(1);
   DECLARE @C_NF_NRINSJURNF     VARCHAR(20);
   DECLARE @C_NF_IDDTCONTAB     VARCHAR(1);

   /* VARIAVEIS DO CURSOR C_IE */
   DECLARE @C_IE_VRITEMENCA         DOUBLE PRECISION;
   DECLARE @C_IE_VRITEMENCAAJUST    DOUBLE PRECISION;
   DECLARE @C_IE_CDCTBLENTREN       VARCHAR(20);
   DECLARE @C_IE_CDCTBLSAIDEN       VARCHAR(20);
   DECLARE @C_IE_IDENCARGO          VARCHAR(1);

   /* VARIAVEIS DO CURSOR C_IP */
   DECLARE @C_IP_CDIMPOSTO        VARCHAR(2);
   DECLARE @C_IP_VRIMPOSTONFE     DOUBLE PRECISION;
   DECLARE @C_IP_IDTRATIMPO       VARCHAR(1);
   DECLARE @C_IP_IDIMPORECUP      VARCHAR(1);
   DECLARE @C_IP_IDACRPRODENTRNF  VARCHAR(1);
   DECLARE @C_IP_CDCONTATIV       VARCHAR(20);
   DECLARE @C_IP_CDCCONTPASS      VARCHAR(20);
   DECLARE @C_IP_CDCONTDESP       VARCHAR(20);
   DECLARE @C_IP_CDCONTIMPO       VARCHAR(20);
                                               
   /* VARIAVEIS DO CURSOR C_ITEMNFORIG */
   DECLARE @C_ITEMNFORIG_CDFILIAL      VARCHAR(4);
   DECLARE @C_ITEMNFORIG_NRLANCTONF    VARCHAR(10);
   DECLARE @C_ITEMNFORIG_NRSEQITPROD   VARCHAR(4);
   DECLARE @C_ITEMNFORIG_CDPRODUTO     VARCHAR(10);
   DECLARE @C_ITEMNFORIG_CDCTBLENTRPR  VARCHAR(20);
   DECLARE @C_ITEMNFORIG_VRCONTITEM    DOUBLE PRECISION;

   /* VARIAVEIS DO CURSOR C_RATEIONF */
   DECLARE @C_RATEIONF_CDFILICCUST   VARCHAR(4);
   DECLARE @C_RATEIONF_CDCENTCUSNF   VARCHAR(4);                      
   DECLARE @C_RATEIONF_VRRATENF      DOUBLE PRECISION;

   /* VARIAVEIS DO CURSOR C_ITEMPRODUTO */
   DECLARE @C_ITEMPRODUTO_NRSEQITPROD      VARCHAR(4);
   DECLARE @C_ITEMPRODUTO_CDPRODUTO        VARCHAR(10); 
   DECLARE @C_ITEMPRODUTO_VRCONTITEM       DOUBLE PRECISION;
   DECLARE @C_ITEMPRODUTO_CDCTBLENTRPR     VARCHAR(20);
   DECLARE @C_ITEMPRODUTO_CDCTBLSAIDPR     VARCHAR(20);
   DECLARE @C_ITEMPRODUTO_VRDESCITEM       DOUBLE PRECISION;
   DECLARE @C_ITEMPRODUTO_VRDESCITEMAJUST  DOUBLE PRECISION;

   /* VARIAVEIS DO CURSOR C_DESCITEM */
   DECLARE @C_DESCITEM_VRITEMENCA     DOUBLE PRECISION;
   DECLARE @C_DESCITEM_CDCTBLENTREN   VARCHAR(20);
   DECLARE @C_DESCITEM_CDCTBLSAIDEN   VARCHAR(20);

   /* VARIAVEIS DO CURSOR C_IMP */
   DECLARE @C_IMP_CDIMPOSTO          VARCHAR(2);
   DECLARE @C_IMP_VRIMPOSTONFE       DOUBLE PRECISION;
   DECLARE @C_IMP_IDTRATIMPO         VARCHAR(1);
   DECLARE @C_IMP_IDIMPORECUP        VARCHAR(1);
   DECLARE @C_IMP_IDACRPRODENTRNF    VARCHAR(1);
   DECLARE @C_IMP_CDCONTATIV         VARCHAR(20);
   DECLARE @C_IMP_CDCONTPASS         VARCHAR(20);
   DECLARE @C_IMP_CDCONTDESP         VARCHAR(20);
   DECLARE @C_IMP_CDCONTIMPO         VARCHAR(20);
                                                                                                                                         
                                                       
   EXEC EXCLUI_LANCCONTABIL '00', @P_NRLISTA ;

   DECLARE C_NF CURSOR FOR (
      SELECT
         NF.CDFILIAL, NF.NRLANCTONF, NF.CDEMPRESA,
         NF.IDDOCFINANC, NF.NRNOTAFISC, NF.CDCLIENTE,
         NF.CDFORNECED, NF.NRLANCTBDOC, NF.VRNOTAFISC,
         NF.CDFILIEMIT, NF.CDTIPOOPER, TP.IDCONTABOPER,
         TP.IDOPERDEVONF, ISNULL(NF.IDORIGDESTNF,'F') AS IDORIGDESTNF, NF.VRPRODUTOS,
         NF.CDFILIRECE, NF.DTENTRSAID, NF.CDINSCESTA,
         NF.DTEMISSAO, C.IDPRIPUBCLIE, NF.IDENTRSAIDOP,
         ISNULL(FI.CDCENTCUST, EP.CDCENTCUST) AS CDCENTCUST,
         NF.CDSERIEENTR, NF.CDSERIE, NF.IDTPIJURNF, NF.NRINSJURNF, TP.IDDTCONTAB
      FROM  
         NOTAFISCAL NF, FILIAL FI, EMPRESA EP,
         TIPOOPERAC TP, CLIENTE C, LISTA L
      WHERE NF.CDEMPRESA    = EP.CDEMPRESA
        AND NF.IDENTRSAIDOP = TP.IDENTRSAIDOP
        AND NF.CDTIPOOPER   = TP.CDTIPOOPER
        AND ISNULL(TP.IDCONTABOPER,'S') = 'S'
        AND (CASE NF.IDENTRSAIDOP WHEN 'E' THEN NF.CDFILIRECE ELSE NF.CDFILIEMIT END) = FI.CDFILIAL
        AND NF.CDCLIENTE   *= C.CDCLIENTE
        AND NF.CDFILIAL    = SUBSTRING(L.CDLISTA,1,4)
        AND (NF.NRLANCTONF = SUBSTRING(L.CDLISTA,5,10))
        AND (L.NRLISTA = @P_NRLISTA)) 
                                            
    OPEN C_NF;
    FETCH NEXT FROM C_NF INTO @C_NF_CDFILIAL, @C_NF_NRLANCTONF, @C_NF_CDEMPRESA, @C_NF_IDDOCFINANC,
                              @C_NF_NRNOTAFISC, @C_NF_CDCLIENTE, @C_NF_CDFORNECED, @C_NF_NRLANCTBDOC,
                              @C_NF_VRNOTAFISC, @C_NF_CDFILIEMIT, @C_NF_CDTIPOOPER, @C_NF_IDCONTABOPER,
                              @C_NF_IDOPERDEVONF, @C_NF_IDORIGDESTNF, @C_NF_VRPRODUTOS, @C_NF_CDFILIRECE,
                              @C_NF_DTENTRSAID, @C_NF_CDINSCESTA, @C_NF_DTEMISSAO, @C_NF_IDPRIPUBCLIE,
                              @C_NF_IDENTRSAIDOP, @C_NF_CDCENTCUST, @C_NF_CDSERIEENTR, @C_NF_CDSERIE,
                              @C_NF_IDTPIJURNF, @C_NF_NRINSJURNF, @C_NF_IDDTCONTAB;
                                                              
    WHILE (@@FETCH_STATUS = 0) BEGIN     
                                            
      EXEC GERA_LOTECONTABIL @C_NF_CDEMPRESA, '00', '', @C_NF_CDFILIRECE, @C_NF_DTENTRSAID, @C_NF_CDTIPOOPER, '', @V_CDLOTE, @V_NRLANCLOTE;
                                                
      SET @V_NRLANCLOTE = RIGHT(REPLICATE('0', 6) + CONVERT(VARCHAR, (CONVERT(INT, @V_NRLANCLOTE) + 1)), 6);
                                        
      IF @C_NF_IDCONTABOPER <> 'N' BEGIN
         SET @V_VRFATORMULT = 1;
                                             
         IF @C_NF_CDTIPOOPER = '14' BEGIN
           SET @V_VRFATORMULT = -1;
        END;
                              
        SELECT @V_CDCTBLFORNCLI = C.CDCTBLFORNCLI
          FROM CTBPRDTPOPER C,
               (SELECT MAX(PR.CDARVPROD) CDARVPROD
                    FROM CTBPRDTPOPER A, PRODUTO P, ITEMPRODUTO I, PRODUTO PR
                 WHERE IDENTRSAIDOP = 'E'
                   AND CDTIPOOPER   = @C_NF_CDTIPOOPER 
                   AND P.CDARVPROD  LIKE  PR.CDARVPROD + '%'
                   AND P.CDPRODUTO  =  I.CDPRODUTO 
                   AND I.CDFILIAL   = @C_NF_CDFILIAL
                   AND I.NRLANCTONF = @C_NF_NRLANCTONF      
                   AND A.CDCTBLFORNCLI IS NOT NULL     
                   AND A.CDPRODUTO  = PR.CDPRODUTO) PR,
               PRODUTO P
         WHERE IDENTRSAIDOP = 'E'
             AND CDTIPOOPER   = @C_NF_CDTIPOOPER   
           AND C.CDPRODUTO  = P.CDPRODUTO  
           AND P.CDARVPROD  = PR.CDARVPROD;
                                                                        
        IF @C_NF_IDORIGDESTNF = 'F' BEGIN
           SET @V_IDLANCCOME = 'F';
           SET @V_CDCONTCOME = @C_NF_CDFORNECED; 
        /* guilherme */
           
           EXEC CONTCTBL_FORNECEDOR @C_NF_CDEMPRESA, @C_NF_CDTIPOOPER, 'E', @C_NF_CDFILIAL, @C_NF_CDFORNECED, 
                                    @V_STCONTCTBL, @V_STCONTCTBLP, @V_STCONTADIFE, @V_CDHISTPADR;
        END
        ELSE IF @C_NF_IDORIGDESTNF = 'C' BEGIN
                SET @V_IDLANCCOME = 'C';
                SET @V_CDCONTCOME = @C_NF_CDCLIENTE;
        /* GUILHERME */
                                                           
                EXEC CONTCTBL_CLIENTE @C_NF_CDEMPRESA, @C_NF_CDTIPOOPER, 'E', @C_NF_CDFILIAL, @C_NF_CDCLIENTE,
                                      @V_STCONTCTBL, @V_STCONTCTBLP, @V_STCONTADIFE, @V_CDHISTPADR;
             END
             ELSE IF @C_NF_IDORIGDESTNF = 'L' BEGIN
                     SET @V_IDLANCCOME = ' ';
                     SET @V_CDCONTCOME = '';
        /* GUILHERME */
                                          
                     EXEC CONTCTBL_FILIAL @C_NF_CDEMPRESA, @C_NF_CDTIPOOPER, 'E', @C_NF_CDFILIAL, @V_STCONTCTBL, 
                                          @V_STCONTCTBLP, @V_STCONTADIFE, @V_CDHISTPADR; 
                  END;
                                                    
        /*LANCAMENTOS DE CREDITO*/
                                                    
        SELECT @V_VRIMPOSRETIDO = ISNULL(ROUND(SUM(VRIMPOSTONF),2),0)
          FROM IMPOSTONF INF, IMPOSTO I
         WHERE CDFILIAL       = @C_NF_CDFILIAL
           AND NRLANCTONF     = @C_NF_NRLANCTONF
           AND INF.CDIMPOSTO  = I.CDIMPOSTO
           AND I.IDTRATIMPO   = 'R'
           AND I.IDTIPCONTAB  = 'D'
           AND (((IDIMPORECUP = 'S') AND ((CDCCTBLATIV IS NULL) OR (CDFISCALNF <> '1'))) OR (IDIMPORECUP <> 'S'));
                                            
        SET @V_VRLANCCORPO = (@C_NF_VRNOTAFISC - @V_VRIMPOSRETIDO) * (@V_VRFATORMULT);
                                                   
        SELECT @V_VRSUBSTRINGIB = ISNULL(SUM(I.VRTOTIMPONF),0)
          FROM IMPOSNFTOT I,
               (SELECT CDIMPOSTRIB
                  FROM IMPOSTO
                 WHERE CDIMPOSTRIB IS NOT NULL) S
         WHERE I.CDFILIAL   = @C_NF_CDFILIAL
           AND I.NRLANCTONF = @C_NF_NRLANCTONF
           AND I.CDIMPOSTO  = S.CDIMPOSTRIB;
                                                               
        SELECT @V_CDMODDOCFISC = MAX(A.CDMODDOCFISC)
          FROM NOTAFISCAL N, MODDOCFISC A
         WHERE N.CDMODDOCFISC = A.CDMODDOCFISC
           AND A.CDTPREGFISC  = '70'
           AND N.CDFILIAL     = @C_NF_CDFILIAL
           AND N.NRLANCTONF   = @C_NF_NRLANCTONF;
                                       
        IF (@V_VRSUBSTRINGIB > 0) AND (@V_CDMODDOCFISC IS NOT NULL) BEGIN
            SET @V_VRLANCCORPO = @V_VRLANCCORPO - @V_VRSUBSTRINGIB;
        END;
      
        IF @V_CDCTBLFORNCLI IS NOT NULL BEGIN
           SET @V_STCONTCTBL = @V_CDCTBLFORNCLI;
        END;
                                               
        /*MONTA HISTORICO PADRAO*/
                                                    
        EXEC MONTA_HISTORICO @C_NF_CDFILIAL, @C_NF_NRLANCTONF, @V_CDHISTPADR, @C_NF_NRNOTAFISC, @C_NF_DTEMISSAO, '00', '', @V_DSHISTPADR;
                                                                   
        IF (@V_VRLANCCORPO <> 0) BEGIN
        /*INSERE PARTIDA DE CREDITO*/
           SET @V_VRLANCCORPOAJUST = ROUND(@V_VRLANCCORPO,2);
           EXEC NOVA_PARTIDA @C_NF_CDEMPRESA,@V_CDLOTE,@C_NF_DTENTRSAID,@V_NRLANCLOTE, @V_STCONTCTBL, @V_CDHISTPADR,
                             @V_DSHISTPADR, @V_VRLANCCORPOAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                  
        /*INSERE RATEIO*/              
           EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                             @C_NF_CDCENTCUST, @V_VRLANCCORPO;
        END;
                                                                           
        /*LANCAMENTOS DE DEBITO*/
                                                
        DECLARE C_IE CURSOR FOR (
           SELECT ISNULL(VRITEMENCA,0) AS VRITEMENCA, CDCTBLENTREN, CDCTBLSAIDEN, IDENCARGO
             FROM ITEMENCARGO IE, ENCARGO E
            WHERE IE.CDFILIAL   = @C_NF_CDFILIAL
              AND IE.NRLANCTONF = @C_NF_NRLANCTONF
              AND IE.CDENCARGO  = E.CDENCARGO
              AND IE.VRITEMENCA > 0
              AND E.IDENCARGO   IN ('A','D')
              AND CASE 'E' WHEN 'E' THEN CDCTBLENTREN ELSE CDCTBLSAIDEN END IS  NOT NULL)
                                                         
        OPEN C_IE;
                                               
        FETCH NEXT FROM C_IE INTO @C_IE_VRITEMENCA, @C_IE_CDCTBLENTREN, @C_IE_CDCTBLSAIDEN, @C_IE_IDENCARGO;
                                                                                      
        WHILE (@@FETCH_STATUS = 0) BEGIN     
                                            
           IF @C_IE_IDENCARGO = 'A' BEGIN
              SET @V_VRLANCCORPO = @V_VRLANCCORPO - (@C_IE_VRITEMENCA * @V_VRFATORMULT);
           END
           ELSE BEGIN
              SET @V_VRLANCCORPO = @V_VRLANCCORPO + (@C_IE_VRITEMENCA * @V_VRFATORMULT);
           END;
                                                                                          
           FETCH NEXT FROM C_IE INTO @C_IE_VRITEMENCA, @C_IE_CDCTBLENTREN, @C_IE_CDCTBLSAIDEN, @C_IE_IDENCARGO;
        END;
                                           
        DECLARE C_IP CURSOR FOR (
           SELECT A.CDIMPOSTO, ISNULL(ROUND(SUM(A.VRIMPOSTONF),2),0) AS VRIMPOSTONFE,
                  A.IDTRATIMPO, A.IDIMPORECUP, A.IDACRPRODENTRNF,
                  MAX(CDCONTATIV) AS CDCONTATIV, MAX(CDCONTPASS)  AS CDCCONTPASS,
                  MAX(CDCONTDESP)  AS CDCONTDESP, MAX(CDCONTIMPO) AS CDCONTIMPO
             FROM (SELECT INF.CDIMPOSTO, VRIMPOSTONF, ISNULL(IDACRPRODENTRNF, 'N') IDACRPRODENTRNF,
                          PF.IDCARACFIS, I.IDIMPORECUP, I.IDTRATIMPO, INF.CDFISCALNF,
                          TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'A', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) AS CDCONTATIV,
                          TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'P', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) AS CDCONTPASS,
                          TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'D', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) AS CDCONTDESP,
                          TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'E', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) AS CDCONTIMPO
                     FROM IMPOSTONF INF, IMPOSTO I, NOTAFISCAL NF, PARAMFILIAL PF
                    WHERE NF.CDFILIAL     = @C_NF_CDFILIAL
                      AND NF.NRLANCTONF   = @C_NF_NRLANCTONF
                      AND PF.CDFILIAL     =* NF.CDFILIRECE
                      AND INF.CDFILIAL    = @C_NF_CDFILIAL
                      AND INF.NRLANCTONF  = @C_NF_NRLANCTONF
                      AND INF.CDIMPOSTO   = I.CDIMPOSTO
                      AND INF.VRIMPOSTONF > 0
                      AND INF.IDIMPOSTONF IN ('1','4')
                      AND I.IDTIPCONTAB  = 'D') A
            WHERE ((((A.IDIMPORECUP  = 'S' AND A.CDFISCALNF = '1' AND ISNULL(A.IDCARACFIS,'C') = 'C') OR (A.IDCARACFIS = 'A')) AND 
                  (A.CDCONTATIV IS NOT NULL)) OR ((A.IDIMPORECUP <> 'S') AND (A.CDCONTPASS IS NOT NULL)))
            GROUP BY A.CDIMPOSTO, A.IDTRATIMPO,  A.IDIMPORECUP, A.IDACRPRODENTRNF);
                                                  
        OPEN C_IP;
                                               
        FETCH NEXT FROM C_IP INTO @C_IP_CDIMPOSTO, @C_IP_VRIMPOSTONFE, @C_IP_IDTRATIMPO,
                                  @C_IP_IDIMPORECUP, @C_IP_IDACRPRODENTRNF, @C_IP_CDCONTATIV,
                                  @C_IP_CDCCONTPASS, @C_IP_CDCONTDESP, @C_IP_CDCONTIMPO;
                                                                                        
        WHILE (@@FETCH_STATUS = 0) BEGIN 
                                                    
           IF ((@C_NF_IDOPERDEVONF = 'S') OR (@C_NF_CDTIPOOPER = '16')) BEGIN
              IF @C_IP_IDTRATIMPO = 'V' BEGIN
                 SET @V_VRIMPOSTONF = ROUND(@C_IP_VRIMPOSTONFE,2);
              END
              ELSE BEGIN
                 SET @V_VRIMPOSTONF = - ROUND(@C_IP_VRIMPOSTONFE,2);
              END;
                                                         
              IF @C_IP_IDTRATIMPO = 'A' AND @C_IP_IDACRPRODENTRNF = 'N' BEGIN
                 SET @V_VRIMPOSTONF = ROUND(@V_VRIMPOSTONF,2);
              END;
           END
           ELSE BEGIN
              IF @C_IP_IDTRATIMPO = 'V' BEGIN
                 SET @V_VRIMPOSTONF = - ROUND(@C_IP_VRIMPOSTONFE,2);
              END
              ELSE BEGIN
                 SET @V_VRIMPOSTONF = ROUND(@C_IP_VRIMPOSTONFE,2);
              END;
                                                     
              IF @C_IP_IDTRATIMPO = 'A' AND @C_IP_IDACRPRODENTRNF = 'N' BEGIN
                 SET @V_VRIMPOSTONF = - ROUND(@V_VRIMPOSTONF,2);
              END;
           END;
                                                                  
           IF @C_NF_IDOPERDEVONF <> 'S' BEGIN
              SET @V_VRLANCCORPO = @V_VRLANCCORPO + (@V_VRIMPOSTONF * (@V_VRFATORMULT));
           END;
                                                                 
           FETCH NEXT FROM C_IP INTO @C_IP_CDIMPOSTO, @C_IP_VRIMPOSTONFE, @C_IP_IDTRATIMPO,
                                     @C_IP_IDIMPORECUP, @C_IP_IDACRPRODENTRNF, @C_IP_CDCONTATIV,
                                     @C_IP_CDCCONTPASS, @C_IP_CDCONTDESP, @C_IP_CDCONTIMPO;
        END;
      
        /* DESCITEM */
     
        SELECT 
            @V_VRITEMENCA       = (ISNULL(ROUND(SUM(VRDESCITEM),2),0)) /*AS VRITEMENCA*/,
            @V_DESCITEMCTBLENTR = CDCTBLENTREN, 
            @V_DESCITEMCTBLSAID = CDCTBLSAIDEN
          FROM ITEMPRODUTO I,
               (SELECT CDCONTDITEN AS CDCTBLENTREN,
                       CDCONTDITSA AS CDCTBLSAIDEN
                  FROM PARAMCTBL
                 WHERE CASE 'E' WHEN 'E' THEN CDCONTDITEN ELSE CDCONTDITSA END IS NOT NULL) E
         WHERE I.CDFILIAL   = @C_NF_CDFILIAL
           AND I.NRLANCTONF = @C_NF_NRLANCTONF
         GROUP BY CDCTBLENTREN, CDCTBLSAIDEN
        HAVING ROUND(SUM(VRDESCITEM),2) > 0;
                                      
        SET @V_DBVRPARTIDAS = 0;
                                           
        /* ItemNotaFisc */
        SELECT
           @V_CDFILIORIG = I.CDFILIAL,
           @V_NRLANCORIG = I.NRLANCTONF
          FROM ITEMNOTAFISC I, NOTAFISCAL N
         WHERE I.CDFILIALIT   = @C_NF_CDFILIAL
           AND I.NRLANCTONFIT = @C_NF_NRLANCTONF
           AND I.CDFILIAL     = N.CDFILIAL
           AND I.NRLANCTONF   = N.NRLANCTONF
           AND N.IDENTRSAIDOP = 'E'
         ORDER BY I.CDFILIAL, I.NRLANCTONF;
                                 
         IF @V_NRLANCORIG IS NOT NULL BEGIN
            SELECT @V_NRLANCTONF = I.NRLANCTONF
            FROM ITEMPRODUTO I, PRODUTO P, PRODUTO PR, ITEMNOTAFISC IT, NOTAFISCAL N
             WHERE IT.CDFILIAL     = I.CDFILIAL 
               AND IT.NRLANCTONF   = I.NRLANCTONF
               AND N.CDFILIAL      = I.CDFILIAL
               AND N.NRLANCTONF    = I.NRLANCTONF 
               AND N.IDENTRSAIDOP  = 'E' 
               AND IT.CDFILIALIT   = @C_NF_CDFILIAL 
               AND IT.NRLANCTONFIT = @C_NF_NRLANCTONF 
               AND P.CDCTBLENTRPR  IS NOT NULL 
               AND VRCONTITEM      > 0             
               AND (P.CDARVPROD = (SELECT MAX(CDARVPROD)
                                     FROM PRODUTO C
                                    WHERE (CHARINDEX(RTRIM(C.CDARVPROD), PR.CDARVPROD) = 1) 
                                  AND NOT (CDCTBLENTRPR IS NULL)) OR (I.CDPRODUTO = P.CDPRODUTO)) 
               AND I.CDPRODUTO = PR.CDPRODUTO
             GROUP BY I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD, I.CDPRODUTO, P.CDCTBLENTRPR;
                                                          
             SET @V_INPARTIDAS = 1;
                                                           
             IF @V_NRLANCTONF IS NOT NULL BEGIN  
             /* vrtotnforig */
                                                                                     
                SELECT
                   @V_FILIALVRNFORIG = I.CDFILIAL,
                   @V_NRLANCTONFITEM = I.NRLANCTONF,
                   @V_VRCONTITEMNF   = ISNULL(ROUND(SUM(I.VRCONTITEM), 2),0) /*AS VRCONTITEM*/
                  FROM ITEMNOTAFISC IT, ITEMPRODUTO I, NOTAFISCAL N
                 WHERE I.CDFILIAL      = IT.CDFILIAL
                   AND I.NRLANCTONF    = IT.NRLANCTONF
                   AND I.CDFILIAL      = N.CDFILIAL
                   AND I.NRLANCTONF    = N.NRLANCTONF
                   AND N.IDENTRSAIDOP  = 'E' 
                   AND IT.CDFILIALIT   = @C_NF_CDFILIAL
                   AND IT.NRLANCTONFIT = @C_NF_NRLANCTONF
                   GROUP BY I.CDFILIAL, I.NRLANCTONF
                   ORDER BY I.CDFILIAL, I.NRLANCTONF;
                                            
                 /* VrTotContItem */
                SELECT @V_VRCONTITEMTOT = ISNULL(SUM(VRCONTITEM),0) /*AS VRCONTITEM*/
                  FROM ITEMPRODUTO
                 WHERE (CDFILIAL   = @C_NF_CDFILIAL) 
                   AND (NRLANCTONF = @C_NF_NRLANCTONF);  
                 
                /* ItemNFOrig */
                DECLARE C_ITEMNFORIG CURSOR FOR ( 
                   SELECT 
                      I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD,
                      I.CDPRODUTO, P.CDCTBLENTRPR,
                      ISNULL(ROUND(SUM(I.VRCONTITEM), 2),0) AS VRCONTITEM
                     FROM ITEMPRODUTO I, PRODUTO P, PRODUTO PR, ITEMNOTAFISC IT, NOTAFISCAL N
                   WHERE IT.CDFILIAL     = I.CDFILIAL 
                     AND IT.NRLANCTONF   = I.NRLANCTONF
                     AND N.CDFILIAL      = I.CDFILIAL
                     AND N.NRLANCTONF    = I.NRLANCTONF 
                     AND N.IDENTRSAIDOP  = 'E' 
                     AND IT.CDFILIALIT   = @C_NF_CDFILIAL
                     AND IT.NRLANCTONFIT = @C_NF_NRLANCTONF 
                     AND P.CDCTBLENTRPR  IS NOT NULL 
                     AND VRCONTITEM      > 0             
                     AND (P.CDARVPROD    = ( SELECT MAX(CDARVPROD)
                                               FROM PRODUTO C
                                              WHERE (CHARINDEX(RTRIM(C.CDARVPROD), PR.CDARVPROD) = 1) 
                                            AND NOT (CDCTBLENTRPR IS NULL)) OR (I.CDPRODUTO = P.CDPRODUTO)) 
                     AND I.CDPRODUTO = PR.CDPRODUTO
                   GROUP BY I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD, I.CDPRODUTO, P.CDCTBLENTRPR)
                                                           
                OPEN C_ITEMNFORIG;
                FETCH NEXT FROM C_ITEMNFORIG INTO @C_ITEMNFORIG_CDFILIAL, @C_ITEMNFORIG_NRLANCTONF, @C_ITEMNFORIG_NRSEQITPROD,
                                                    @C_ITEMNFORIG_CDPRODUTO, @C_ITEMNFORIG_CDCTBLENTRPR, @C_ITEMNFORIG_VRCONTITEM; 
                                                                
                WHILE (@@FETCH_STATUS = 0) BEGIN 
                                                          
                  /* PRODUTO */
                     SELECT @V_CDARVPROD  = P.CDARVPROD, 
                            @V_CDCENTCUST = ISNULL(ISNULL(ISNULL(PR.CDCCUSTENTRF,P.CDCCUSTENTR),F.CDCENTCUST),E.CDCENTCUST) /*AS CDCENTCUST*/
                     FROM FILIAL F, NOTAFISCAL N, EMPRESA E,
                          PRODUTO P, PRODFILI PR
                     WHERE (P.CDPRODUTO     = @C_ITEMNFORIG_CDPRODUTO)  
                       AND (PR.CDPRODUTO    =* P.CDPRODUTO)
                       AND (PR.CDFILIAL     = @C_NF_CDFILIRECE )
                       AND (F.CDFILIAL      = @C_NF_CDFILIRECE )
                       AND (N.CDFILIAL      = @C_NF_CDFILIAL)
                       AND (N.NRLANCTONF    = @C_NF_NRLANCTONF)
                       AND (N.CDEMPRESA     = @C_NF_CDEMPRESA)
                       AND (N.CDEMPRESA     = E.CDEMPRESA);
                          
                  /* ContProdTp */
                     SELECT @V_CDCCTBLPROD = C.CDCTBLPRODTO
                     FROM CTBPRDTPOPER C,
                          (SELECT MAX(P.CDARVPROD) CDARVPROD
                             FROM CTBPRDTPOPER A, PRODUTO P
                            WHERE IDENTRSAIDOP = 'E'   
                              AND CDTIPOOPER   = @C_NF_CDTIPOOPER
                              AND P.CDPRODUTO  = A.CDPRODUTO
                              AND (CHARINDEX(RTRIM(P.CDARVPROD), @V_CDARVPROD) = 1) 
                              AND A.CDCTBLPRODTO IS NOT NULL) PR,
                          PRODUTO P
                          WHERE IDENTRSAIDOP = 'E'   
                            AND CDTIPOOPER   = @C_NF_CDTIPOOPER
                            AND C.CDPRODUTO  = P.CDPRODUTO
                            AND P.CDARVPROD  = PR.CDARVPROD; 
                       
                         IF @V_CDCCTBLPROD IS NULL BEGIN
                            SET @V_CDCCTBLPROD = @V_STCONTCTBLP;
                                                 
                          IF @V_CDCCTBLPROD IS NULL BEGIN
                             /* PRODUTO */
                             SELECT
                                P.CDARVPROD, ISNULL(ISNULL(ISNULL(PR.CDCCUSTENTRF,P.CDCCUSTENTR),F.CDCENTCUST),E.CDCENTCUST) CDCENTCUST
                             FROM
                                FILIAL F, EMPRESA E, NOTAFISCAL N,
                                PRODUTO P LEFT JOIN PRODFILI PR ON (PR.CDPRODUTO =  @C_ITEMNFORIG_CDPRODUTO)  AND
                                                                   (PR.CDFILIAL  = @C_NF_CDFILIRECE )
                             WHERE
                                (P.CDPRODUTO     = @C_ITEMNFORIG_CDPRODUTO)  AND
                                (F.CDFILIAL      = @C_NF_CDFILIRECE )        AND
                                (N.CDFILIAL      = @C_NF_CDFILIRECE)         AND
                                (N.NRLANCTONF    = @C_NF_CDFILIRECE)         AND
                                (N.CDEMPRESA     = @C_NF_CDEMPRESA)          AND
                                (N.CDEMPRESA     = E.CDEMPRESA);
                                                      
                             /* PRODFILI*/   
                             SELECT @V_CDCTBLENTRPF = MAX(CDCTBLENTRPF),
                                    @V_CDCTBLSAIDPF = MAX(CDCTBLSAIDPF) 
                               FROM PRODFILI PF, PRODUTO P
                              WHERE CDFILIAL      = @C_NF_CDFILIRECE   
                              AND PF.CDPRODUTO  = @V_CDPRODUTO
                              AND (P.CDPRODUTO IN ( SELECT MAX(CDPRODUTO)
                                                      FROM  PRODUTO C
                                                     WHERE (CHARINDEX(RTRIM(C.CDPRODUTO), PF.CDPRODUTO) = 1) 
                                                   AND NOT ((CASE 'E' WHEN 'E' THEN CDCTBLENTRPF ELSE CDCTBLSAIDPF END) IS NULL)) 
                               OR PF.CDPRODUTO = P.CDPRODUTO);
                                                                                   
                           SET @V_CDCCTBLPROD = @V_CDCTBLENTRPF;
                        END;  
                     END;
                     
                     IF @V_CDCCTBLPROD IS NOT NULL BEGIN
                        SET @V_CDCCTBLPROD = @C_ITEMNFORIG_CDCTBLENTRPR;
                     END;
                          
                     IF @C_ITEMNFORIG_VRCONTITEM > 0 BEGIN
                        SET @V_DBVRCONTITEM = (@C_ITEMNFORIG_VRCONTITEM * (@V_VRFATORMULT) / @V_VRCONTITEMNF * @V_VRCONTITEMTOT);
                        SET @V_DBVRPARTIDAS = @V_DBVRPARTIDAS + (@C_ITEMNFORIG_VRCONTITEM * @V_VRFATORMULT / @V_VRCONTITEMNF * @V_VRCONTITEMTOT);
                                                                    
                        /*CONTA ITEMPRODUTO DA NOTA*/
                        SELECT @V_COUNTITEMNFORIG = COUNT(*)
                          FROM ITEMPRODUTO I, PRODUTO P, PRODUTO PR, ITEMNOTAFISC IT, NOTAFISCAL N
                         WHERE IT.CDFILIAL     = I.CDFILIAL 
                           AND IT.NRLANCTONF   = I.NRLANCTONF
                           AND N.CDFILIAL      = I.CDFILIAL
                           AND N.NRLANCTONF    = I.NRLANCTONF 
                           AND N.IDENTRSAIDOP  = 'E' 
                           AND IT.CDFILIALIT   = @C_NF_CDFILIAL 
                           AND IT.NRLANCTONFIT = @C_NF_NRLANCTONF 
                           AND P.CDCTBLENTRPR  IS NOT NULL 
                           AND VRCONTITEM      > 0             
                           AND (P.CDARVPROD    = ( SELECT MAX(CDARVPROD)
                                                     FROM PRODUTO C
                                                    WHERE (CHARINDEX(RTRIM(C.CDARVPROD), PR.CDARVPROD) = 1) 
                                                  AND NOT (CDCTBLENTRPR IS NULL)) OR (I.CDPRODUTO = P.CDPRODUTO)) 
                         AND I.CDPRODUTO = PR.CDPRODUTO
                         GROUP BY I.CDFILIAL, I.NRLANCTONF, I.NRSEQITPROD, I.CDPRODUTO, P.CDCTBLENTRPR;
                                                                           
                         IF @V_INPARTIDAS = @V_COUNTITEMNFORIG BEGIN
                            IF (ABS(ROUND(ABS(@V_DBVRPARTIDAS),2) - ROUND(ABS(@V_VRLANCCORPO),2)) <= 0.1) AND
                               (ROUND(ABS(@V_DBVRPARTIDAS),2) <> ROUND(ABS(@V_VRLANCCORPO),2)) BEGIN
                                   SET @V_DBVRCONTITEM = @V_DBVRCONTITEM - (@V_VRLANCCORPO - @V_DBVRPARTIDAS);
                            END;
                         END;
                              
                         /*NOVA_PARTIDA*/
                              
                         EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @V_STCONTCTBL, @V_CDHISTPADR,
                                           @V_DSHISTPADR, @V_DBVRCONTITEM, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                           
                         SELECT @V_CDFILICCUST = MAX(CDFILICCUST)
                           FROM RATEIONF
                          WHERE CDFILIAL = @C_ITEMNFORIG_CDFILIAL
                            AND NRLANCTONF = @C_ITEMNFORIG_NRLANCTONF 
                            AND NRSEQITPROD = @C_ITEMNFORIG_NRSEQITPROD;
                             
                         SET @V_VRPARTRATE = 0;
                              
                         IF @V_CDFILICCUST IS NOT NULL BEGIN
                            SET @V_RATEIO = 1;
                                                                                         
                            DECLARE C_RATEIONF CURSOR FOR ( 
                                SELECT CDFILICCUST, CDCENTCUSNF, 
                                       ISNULL(ROUND(VRRATENF,2),0) AS VRRATENF
                                  FROM RATEIONF
                                 WHERE CDFILIAL    = @C_ITEMNFORIG_CDFILIAL   
                                   AND NRLANCTONF  = @C_ITEMNFORIG_NRLANCTONF 
                                   AND NRSEQITPROD = @C_ITEMNFORIG_NRSEQITPROD) 
                                                                                   
                            OPEN C_RATEIONF;
                            FETCH NEXT FROM C_RATEIONF INTO @C_RATEIONF_CDFILICCUST, @C_RATEIONF_CDCENTCUSNF, @C_RATEIONF_VRRATENF;
                                                              
                            WHILE (@@FETCH_STATUS = 0) BEGIN    
                                   
                                SET @V_VRRATEIO   = -(@C_RATEIONF_VRRATENF * (@V_VRFATORMULT) / @V_VRCONTITEMNF * @V_VRCONTITEMTOT);
                                SET @V_VRPARTRATE = @V_VRPARTRATE + (@C_RATEIONF_VRRATENF * (@V_VRFATORMULT) / @V_VRCONTITEMNF * @V_VRCONTITEMTOT);
                                    
                                SELECT @V_COUNTRATEIO = COUNT(*)
                                  FROM RATEIONF
                                 WHERE CDFILIAL    = @C_ITEMNFORIG_CDFILIAL
                                   AND NRLANCTONF  = @C_ITEMNFORIG_NRLANCTONF 
                                   AND NRSEQITPROD = @C_ITEMNFORIG_NRSEQITPROD;
                                                                                                  
                                IF @V_RATEIO = @V_COUNTRATEIO BEGIN
                                   IF (ABS(ROUND(ABS(@V_VRPARTRATE),2) - ROUND(ABS(@V_DBVRCONTITEM),2)) <= 0.1) AND
                                      (ROUND(ABS(@V_VRPARTRATE),2) <> ROUND(ABS(@V_DBVRCONTITEM),2)) BEGIN
                                          SET @V_VRRATEIO = @V_VRRATEIO + (@V_VRPARTRATE + @V_DBVRCONTITEM);
                                   END;
                                END;
                                    
                                /* RATEIO PARTIDA */
                                EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, 
                                                    @C_RATEIONF_CDFILICCUST, @C_RATEIONF_CDCENTCUSNF, @V_VRRATEIO;
                                                                                                        
                                FETCH NEXT FROM C_RATEIONF INTO @C_RATEIONF_CDFILICCUST, @C_RATEIONF_CDCENTCUSNF, @C_RATEIONF_VRRATENF;
                            END;
                         END   
                         ELSE BEGIN
                            /* RATEIO PARTIDA */
                               EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                                   @V_CDCENTCUST, @V_VRCONTITEM;    
                         END;
                                                                                         
                    FETCH NEXT FROM C_ITEMNFORIG INTO @C_ITEMNFORIG_CDFILIAL, @C_ITEMNFORIG_NRLANCTONF, @C_ITEMNFORIG_NRSEQITPROD,
                                                      @C_ITEMNFORIG_CDPRODUTO, @C_ITEMNFORIG_CDCTBLENTRPR, @C_ITEMNFORIG_VRCONTITEM; 
                END;
             END;
              SET @V_INPARTIDAS  = @V_INPARTIDAS + 1;
              SET @V_CDCCTBLPROD = '';
           END
           ELSE BEGIN
                   SET @V_CDCCTBLPROD = @V_STCONTCTBLP;
                                                
                   SET @V_VRLANCCORPOAJUST = -(@V_VRLANCCORPO * @V_VRFATORMULT);
                   EXEC NOVA_PARTIDA @C_NF_CDEMPRESA,@V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @V_CDCCTBLPROD, @V_CDHISTPADR, 
                                     @V_DSHISTPADR, @V_VRLANCCORPOAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                      
                   EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                       @C_NF_CDCENTCUST, @V_VRLANCCORPOAJUST;
                END;
           END
           ELSE BEGIN
             SELECT @V_NRSEQEXIS = MAX(IT.NRSEQITPROD)
               FROM ITEMPRODUTO IT, PRODUTO P, PRODUTO PR
              WHERE CDFILIAL     = @C_NF_CDFILIAL     
                AND NRLANCTONF   = @C_NF_NRLANCTONF   
                AND VRCONTITEM   > 0             
                AND (P.CDARVPROD = ( SELECT MAX(CDARVPROD)
                                       FROM PRODUTO C
                                      WHERE (CHARINDEX(RTRIM(C.CDARVPROD), PR.CDARVPROD) = 1) 
                                    AND NOT ((CASE @C_NF_IDENTRSAIDOP WHEN 'E' THEN CDCTBLENTRPR ELSE CDCTBLSAIDPR END) IS NULL)) 
                OR IT.CDPRODUTO = P.CDPRODUTO) 
               AND IT.CDPRODUTO = PR.CDPRODUTO;
                                                                        
             SET @V_INPARTIDAS = 1;
                                                 
             IF @V_NRSEQEXIS IS NOT NULL BEGIN
                                                       
                DECLARE C_ITEMPRODUTO CURSOR FOR (          
                    SELECT IT.NRSEQITPROD, IT.CDPRODUTO,
                           ISNULL(ROUND(VRCONTITEM,2),0) VRCONTITEM,
                           MAX(P.CDCTBLENTRPR) AS CDCTBLENTRPR,
                           MAX(P.CDCTBLSAIDPR) AS CDCTBLSAIDPR,
                           ISNULL(ROUND(VRDESCITEM,2),0) VRDESCITEM
                      FROM ITEMPRODUTO IT, PRODUTO P, PRODUTO PR
                     WHERE CDFILIAL     = @C_NF_CDFILIAL     
                       AND NRLANCTONF   = @C_NF_NRLANCTONF   
                       AND VRCONTITEM   > 0             
                       AND (P.CDARVPROD = ( SELECT MAX(CDARVPROD)
                                              FROM PRODUTO C
                                             WHERE (CHARINDEX(RTRIM(C.CDARVPROD), PR.CDARVPROD) = 1) 
                                           AND NOT ((CASE @C_NF_IDENTRSAIDOP WHEN 'E' THEN CDCTBLENTRPR ELSE CDCTBLSAIDPR END) IS NULL))
                        OR IT.CDPRODUTO = P.CDPRODUTO) 
                       AND IT.CDPRODUTO = PR.CDPRODUTO
                     GROUP BY IT.NRSEQITPROD, IT.CDPRODUTO, VRCONTITEM, VRDESCITEM)
                                                                                                      
                OPEN C_ITEMPRODUTO;
                FETCH NEXT FROM C_ITEMPRODUTO INTO @C_ITEMPRODUTO_NRSEQITPROD, @C_ITEMPRODUTO_CDPRODUTO, @C_ITEMPRODUTO_VRCONTITEM,
                                                   @C_ITEMPRODUTO_CDCTBLENTRPR, @C_ITEMPRODUTO_CDCTBLSAIDPR, @C_ITEMPRODUTO_VRDESCITEM;
                                                                                                                         
                WHILE (@@FETCH_STATUS = 0) BEGIN 
                                      
                /* PRODUTO */
                  SELECT @V_CDARVPROD  = P.CDARVPROD, 
                         @V_CDCENTCUST = ISNULL(ISNULL(ISNULL(PR.CDCCUSTENTRF,P.CDCCUSTENTR),F.CDCENTCUST),E.CDCENTCUST) /*AS CDCENTCUST*/
                    FROM FILIAL F, NOTAFISCAL N, EMPRESA E,
                         PRODUTO P, PRODFILI PR
                   WHERE (P.CDPRODUTO  = @C_ITEMPRODUTO_CDPRODUTO)  
                     AND (PR.CDPRODUTO =* P.CDPRODUTO)
                     AND (PR.CDFILIAL  = @C_NF_CDFILIRECE )
                     AND (F.CDFILIAL   = @C_NF_CDFILIRECE )
                     AND (N.CDFILIAL   = @C_NF_CDFILIAL)
                     AND (N.NRLANCTONF = @C_NF_NRLANCTONF)
                     AND (N.CDEMPRESA  = @C_NF_CDEMPRESA)
                     AND (N.CDEMPRESA  = E.CDEMPRESA);
                                                                
                  SELECT @V_CDCCTBLPROD = C.CDCTBLPRODTO
                    FROM CTBPRDTPOPER C,
                         (SELECT MAX(P.CDARVPROD) AS CDARVPROD
                            FROM CTBPRDTPOPER A, PRODUTO P
                           WHERE IDENTRSAIDOP = 'E'   
                             AND CDTIPOOPER   = @C_NF_CDTIPOOPER
                             AND P.CDPRODUTO  =  A.CDPRODUTO
                             AND (CHARINDEX(RTRIM(P.CDARVPROD), @V_CDARVPROD) = 1) 
                             AND A.CDCTBLPRODTO IS NOT NULL) PR,
                         PRODUTO P
                   WHERE IDENTRSAIDOP = 'E'   
                     AND CDTIPOOPER   = @C_NF_CDTIPOOPER
                     AND C.CDPRODUTO  = P.CDPRODUTO
                     AND P.CDARVPROD  = PR.CDARVPROD; 
                
                  IF @V_CDCCTBLPROD IS NULL BEGIN
                     SET @V_CDCCTBLPROD = @V_STCONTCTBLP;
                                
                     IF @V_CDCCTBLPROD IS NULL BEGIN
                        /* PRODFILI */
                        SELECT @V_CDCTBLENTRPF = MAX(CDCTBLENTRPF) /*AS CDCTBLENTRPF*/,
                               @V_CDCTBLSAIDPF = MAX(CDCTBLSAIDPF) /*AS CDCTBLSAIDPF*/
                          FROM PRODFILI PF, PRODUTO P
                         WHERE CDFILIAL     = @C_NF_CDFILIRECE   
                           AND PF.CDPRODUTO = @C_ITEMPRODUTO_CDPRODUTO
                           AND (P.CDPRODUTO IN (SELECT MAX(CDPRODUTO)
                                                  FROM  PRODUTO C
                                                 WHERE (CHARINDEX(RTRIM(C.CDPRODUTO), PF.CDPRODUTO) = 1) 
                                               AND NOT ((CASE 'E' WHEN 'E' THEN CDCTBLENTRPF ELSE CDCTBLSAIDPF END) IS NULL)) 
                            OR PF.CDPRODUTO = P.CDPRODUTO);
                                                 
                        SET @V_CDCCTBLPROD = @V_CDCTBLENTRPF;
                     END;
                  END;
                
                  IF @V_CDCCTBLPROD IS NULL BEGIN
                     SET @V_CDCCTBLPROD = @C_ITEMPRODUTO_CDCTBLENTRPR;
                  END;
                
                  IF @C_ITEMPRODUTO_VRCONTITEM > 0 BEGIN
                     SET @V_DBVRCONTITEM = - (@C_ITEMPRODUTO_VRCONTITEM * @V_VRFATORMULT);
                     SET @V_DBVRPARTIDAS = @V_DBVRPARTIDAS + (@C_ITEMPRODUTO_VRCONTITEM * @V_VRFATORMULT);
                                                
                     SELECT @V_COUNTITEMPROD = COUNT(*)
                       FROM ITEMPRODUTO IT, PRODUTO P, PRODUTO PR
                      WHERE CDFILIAL     = @C_NF_CDFILIAL     
                        AND NRLANCTONF   = @C_NF_NRLANCTONF   
                        AND VRCONTITEM   > 0             
                        AND (P.CDARVPROD = ( SELECT MAX(CDARVPROD)
                                               FROM PRODUTO C
                                              WHERE (CHARINDEX(RTRIM(C.CDARVPROD), PR.CDARVPROD) = 1) 
                                            AND NOT ((CASE @C_NF_IDENTRSAIDOP WHEN 'E' THEN CDCTBLENTRPR ELSE CDCTBLSAIDPR END) IS NULL))
                         OR IT.CDPRODUTO = P.CDPRODUTO) 
                        AND IT.CDPRODUTO = PR.CDPRODUTO;                 
                     
                     IF @V_INPARTIDAS = @V_COUNTITEMPROD BEGIN
                        IF (ABS(ROUND(ABS(@V_DBVRPARTIDAS),2) - ROUND(ABS(@V_VRLANCCORPO),2)) <= 0.1) AND
                           (ROUND(ABS(@V_DBVRPARTIDAS),2) <> ROUND(ABS(@V_VRLANCCORPO),2)) BEGIN
                               SET @V_DBVRCONTITEM = @V_DBVRCONTITEM - (@V_VRLANCCORPO - @V_DBVRPARTIDAS);
                        END;
                     END;
                                                                
                     EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @V_CDCCTBLPROD, @V_CDHISTPADR,
                                       @V_DSHISTPADR, @V_DBVRCONTITEM, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                   
                     SELECT @V_CDFILICCUST = MAX(CDFILICCUST)
                       FROM RATEIONF
                      WHERE CDFILIAL    = @C_NF_CDFILIAL
                        AND NRLANCTONF  = @C_NF_NRLANCTONF 
                        AND NRSEQITPROD = @C_ITEMPRODUTO_NRSEQITPROD;
                    
                     IF @V_CDFILICCUST IS NOT NULL BEGIN
                        SET @V_RATEIO = 1;
                      
                        DECLARE C_RATEIONF CURSOR FOR ( 
                           SELECT CDFILICCUST, CDCENTCUSNF, 
                                  ISNULL(ROUND(VRRATENF,2),0) AS VRRATENF
                             FROM RATEIONF
                            WHERE CDFILIAL    = @C_NF_CDFILIAL   
                              AND NRLANCTONF  = @C_NF_NRLANCTONF 
                              AND NRSEQITPROD = @C_ITEMPRODUTO_NRSEQITPROD) 
                                                                     
                        OPEN C_RATEIONF;
                        FETCH NEXT FROM C_RATEIONF INTO @C_RATEIONF_CDFILICCUST, @C_RATEIONF_CDCENTCUSNF, @C_RATEIONF_VRRATENF;
                                                                                                      
                        WHILE (@@FETCH_STATUS = 0) BEGIN   
                                                 
                           SET @V_VRRATEIO = -(@C_RATEIONF_VRRATENF*(@V_VRFATORMULT));
                           SET @V_VRPARTRATE = @V_VRPARTRATE + (@C_RATEIONF_VRRATENF*(@V_VRFATORMULT)); 
                                        
                           SELECT @V_COUNTRATEIO = COUNT(*)
                             FROM RATEIONF
                            WHERE CDFILIAL = @C_NF_CDFILIAL
                              AND NRLANCTONF = @C_NF_NRLANCTONF 
                              AND NRSEQITPROD = @C_ITEMPRODUTO_NRSEQITPROD;                          
                          
                           IF @V_RATEIO = @V_COUNTRATEIO BEGIN
                              IF (ABS(ROUND(ABS(@V_VRPARTRATE),2) - ROUND(ABS(@V_DBVRCONTITEM),2)) <= 0.1) AND
                                 (ROUND(ABS(@V_VRPARTRATE),2) <> ROUND(ABS(@V_DBVRCONTITEM),2)) BEGIN
                                     SET @V_VRRATEIO = @V_VRRATEIO + (@V_VRPARTRATE + @V_DBVRCONTITEM);
                              END;
                           END;
                          
                           EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_RATEIONF_CDFILICCUST,
                                               @C_RATEIONF_CDCENTCUSNF, @V_VRRATEIO;

                           FETCH NEXT FROM C_RATEIONF INTO @C_RATEIONF_CDFILICCUST, @C_RATEIONF_CDCENTCUSNF, @C_RATEIONF_VRRATENF;
                        END;               
                     END
                     ELSE BEGIN
                        EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                            @V_CDCENTCUST, @V_DBVRCONTITEM;
                     END;
                  END;
                                                                                  
                  IF (@C_ITEMPRODUTO_VRDESCITEM > 0) AND (@V_DESCITEMCTBLENTR IS NULL) BEGIN
                      SET @C_ITEMPRODUTO_VRDESCITEMAJUST = - @C_ITEMPRODUTO_VRDESCITEM;                                                                          
                      EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @V_CDCCTBLPROD, @V_CDHISTPADR,
                                        @V_DSHISTPADR, @C_ITEMPRODUTO_VRDESCITEMAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                        
                      EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                          @V_CDCENTCUST, @C_ITEMPRODUTO_VRDESCITEMAJUST;
                  END;
                
                  SET @V_INPARTIDAS  = @V_INPARTIDAS + 1;
                  SET @V_CDCCTBLPROD = ''; 
                                                                                              
                  FETCH NEXT FROM C_ITEMPRODUTO INTO @C_ITEMPRODUTO_NRSEQITPROD, @C_ITEMPRODUTO_CDPRODUTO, @C_ITEMPRODUTO_VRCONTITEM,
                                                     @C_ITEMPRODUTO_CDCTBLENTRPR, @C_ITEMPRODUTO_CDCTBLSAIDPR, @C_ITEMPRODUTO_VRDESCITEM;
                END;
             END
             ELSE BEGIN
                SET @V_CDCCTBLPROD = @V_STCONTCTBLP;
                SET @V_VRLANCCORPOAJUST = - (@V_VRLANCCORPO * @V_VRFATORMULT);                                                                 
                EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @V_CDCCTBLPROD, @V_CDHISTPADR,
                                  @V_DSHISTPADR, @V_VRLANCCORPOAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                        
                EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA,@V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                    @V_CDCENTCUST, @V_VRLANCCORPOAJUST;             
             END;
           END;
                                     
       DECLARE C_IE CURSOR FOR (
          SELECT ISNULL(VRITEMENCA,0) AS VRITEMENCA, CDCTBLENTREN, CDCTBLSAIDEN, IDENCARGO
            FROM ITEMENCARGO IE, ENCARGO E
           WHERE IE.CDFILIAL   = @C_NF_CDFILIAL
             AND IE.NRLANCTONF = @C_NF_NRLANCTONF
             AND IE.CDENCARGO  = E.CDENCARGO
             AND IE.VRITEMENCA > 0
             AND E.IDENCARGO   IN ('A','D')
             AND (CASE 'E' WHEN 'E' THEN CDCTBLENTREN ELSE CDCTBLSAIDEN END) IS  NOT NULL)
                                                            
       OPEN C_IE;
                                                                     
       FETCH NEXT FROM C_IE INTO @C_IE_VRITEMENCA, @C_IE_CDCTBLENTREN, @C_IE_CDCTBLSAIDEN, @C_IE_IDENCARGO;
                                                                                      
       WHILE (@@FETCH_STATUS = 0) BEGIN    
                                               
            SET @C_IE_VRITEMENCAAJUST = - (@C_IE_VRITEMENCA * @V_VRFATORMULT);
            IF @C_IE_IDENCARGO = 'A' BEGIN
               EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IE_CDCTBLENTREN, @V_CDHISTPADR,
                                 @V_DSHISTPADR, @C_IE_VRITEMENCAAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                    
               EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                   @V_CDCENTCUST, @C_IE_VRITEMENCAAJUST;                   
            END
            ELSE BEGIN
                                           
               SET @C_IE_VRITEMENCAAJUST = (@C_IE_VRITEMENCA * @V_VRFATORMULT);
               EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IE_CDCTBLENTREN, @V_CDHISTPADR,
                                 @V_DSHISTPADR, @C_IE_VRITEMENCAAJUST , @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                    
               EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                   @V_CDCENTCUST, @C_IE_VRITEMENCAAJUST;
            END;                  
                                                                                       
            FETCH NEXT FROM C_IE INTO @C_IE_VRITEMENCA, @C_IE_CDCTBLENTREN, @C_IE_CDCTBLSAIDEN, @C_IE_IDENCARGO;
       END;
                                                               
       DECLARE C_DESCITEM CURSOR FOR (
          SELECT ISNULL(ROUND(SUM(VRDESCITEM),2),0) AS VRITEMENCA, CDCTBLENTREN, CDCTBLSAIDEN
            FROM ITEMPRODUTO I,
                 (SELECT CDCONTDITEN AS CDCTBLENTREN,
                  CDCONTDITSA AS CDCTBLSAIDEN
                  FROM PARAMCTBL
                  WHERE (CASE 'E' WHEN 'E' THEN CDCONTDITEN ELSE CDCONTDITSA END) IS NOT NULL) E
           WHERE I.CDFILIAL   = @C_NF_CDFILIAL   
             AND I.NRLANCTONF = @C_NF_NRLANCTONF
           GROUP BY CDCTBLENTREN, CDCTBLSAIDEN
          HAVING ROUND(SUM(VRDESCITEM),2) > 0) 
                                                                
       OPEN C_DESCITEM;
                                                                     
       FETCH NEXT FROM C_DESCITEM INTO @C_DESCITEM_VRITEMENCA, @C_DESCITEM_CDCTBLENTREN, @C_DESCITEM_CDCTBLSAIDEN;
                                                                                      
       WHILE (@@FETCH_STATUS = 0) BEGIN 
                                                                               
          EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_DESCITEM_CDCTBLENTREN, @V_CDHISTPADR,
                            @V_DSHISTPADR, @C_DESCITEM_VRITEMENCA, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                    
          EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                              @V_CDCENTCUST, @C_DESCITEM_VRITEMENCA;

          FETCH NEXT FROM C_DESCITEM INTO @C_DESCITEM_VRITEMENCA, @C_DESCITEM_CDCTBLENTREN, @C_DESCITEM_CDCTBLSAIDEN;
       END;
                          
       DECLARE C_IMP CURSOR FOR (
         SELECT A.CDIMPOSTO, ISNULL(ROUND(SUM(A.VRIMPOSTONF),2),0) AS VRIMPOSTONFE,
                A.IDTRATIMPO, A.IDIMPORECUP, A.IDACRPRODENTRNF,
                MAX(CDCONTATIV) AS CDCONTATIV, MAX(CDCONTPASS)  AS CDCONTPASS,
                MAX(CDCONTDESP)  AS CDCONTDESP, MAX(CDCONTIMPO) AS CDCONTIMPO
           FROM (SELECT INF.CDIMPOSTO, VRIMPOSTONF, ISNULL(IDACRPRODENTRNF, 'N') IDACRPRODENTRNF,
                        PF.IDCARACFIS, I.IDIMPORECUP, I.IDTRATIMPO, INF.CDFISCALNF,
                        TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'A', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) CDCONTATIV,
                        TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'P', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) CDCONTPASS,
                        TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'D', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) CDCONTDESP,
                        TEKNISA.CONTCTBL_IMPOSTO(I.CDIMPOSTO, 'E', NF.IDENTRSAIDOP, NF.CDTIPOOPER, NF.IDTPIJURNF) CDCONTIMPO
                   FROM IMPOSTONF INF, IMPOSTO I, NOTAFISCAL NF, PARAMFILIAL PF
                  WHERE NF.CDFILIAL     = @C_NF_CDFILIAL
                    AND NF.NRLANCTONF   = @C_NF_NRLANCTONF
                    AND PF.CDFILIAL     =* NF.CDFILIRECE
                    AND INF.CDFILIAL    = @C_NF_CDFILIAL
                    AND INF.NRLANCTONF  = @C_NF_NRLANCTONF
                    AND INF.CDIMPOSTO   = I.CDIMPOSTO
                    AND INF.VRIMPOSTONF > 0
                    AND INF.IDIMPOSTONF IN ('1','4')
                    AND I.IDTIPCONTAB  = 'D') A
          WHERE ((((A.IDIMPORECUP  = 'S' AND A.CDFISCALNF = '1' AND ISNULL(A.IDCARACFIS,'C') = 'C') OR (A.IDCARACFIS = 'A')) AND (A.CDCONTATIV IS NOT NULL)) OR
                 ((A.IDIMPORECUP <> 'S') AND (A.CDCONTPASS IS NOT NULL)))
          GROUP BY A.CDIMPOSTO, A.IDTRATIMPO,  A.IDIMPORECUP, A.IDACRPRODENTRNF) 
                                                                                       
       OPEN C_IMP;
                                                                     
       FETCH NEXT FROM C_IMP INTO @C_IMP_CDIMPOSTO, @C_IMP_VRIMPOSTONFE, @C_IMP_IDTRATIMPO,
                                  @C_IMP_IDIMPORECUP, @C_IMP_IDACRPRODENTRNF, @C_IMP_CDCONTATIV,
                                  @C_IMP_CDCONTPASS, @C_IMP_CDCONTDESP, @C_IMP_CDCONTIMPO;
                                                                                       
       WHILE (@@FETCH_STATUS = 0) BEGIN
                                                     
           IF ((@C_NF_IDOPERDEVONF = 'S') OR (@C_NF_CDTIPOOPER = '16')) BEGIN
              IF @C_IMP_IDTRATIMPO = 'V' BEGIN
                 SET @V_VRIMPOSTONF = ROUND(@C_IMP_VRIMPOSTONFE,2);
              END
              ELSE BEGIN
                 SET @V_VRIMPOSTONF = - ROUND(@C_IMP_VRIMPOSTONFE,2);
              END;
                                                      
              IF (@C_IMP_IDTRATIMPO = 'A') AND (@C_IMP_IDACRPRODENTRNF = 'N') BEGIN
                 SET @V_VRIMPOSTONF = ROUND(@V_VRIMPOSTONF,2);
              END;
           END
           ELSE BEGIN
              IF @C_IMP_IDTRATIMPO = 'V' BEGIN
                 SET @V_VRIMPOSTONF = - ROUND(@C_IMP_VRIMPOSTONFE,2);
              END
              ELSE BEGIN
                 SET @V_VRIMPOSTONF = ROUND(@C_IMP_VRIMPOSTONFE,2);
              END;
                                                      
              IF (@C_IMP_IDTRATIMPO = 'A') AND (@C_IMP_IDACRPRODENTRNF = 'N') BEGIN
                 SET @V_VRIMPOSTONF = - ROUND(@V_VRIMPOSTONF,2);
              END;
           END;
                                            
           IF @C_NF_IDOPERDEVONF <> 'S' BEGIN
              SET @V_VRLANCCORPO = @V_VRLANCCORPO + (@V_VRIMPOSTONF * (@V_VRFATORMULT));
           END;
                                               
           IF ((@C_NF_IDOPERDEVONF = 'S') OR (@C_NF_CDTIPOOPER = '16')) BEGIN
                                                      
              SELECT @V_CDIMPOSTRIB = MAX(CDIMPOSTO) /*AS CDIMPOSTRIB*/
                FROM IMPOSTO
               WHERE CDIMPOSTRIB = @C_IMP_CDIMPOSTO;
                                             
              IF @V_CDIMPOSTRIB IS NOT NULL BEGIN
                                          
                 SET @V_VRIMPOSTONFAJUST = - ROUND((@V_VRIMPOSTONF),2);
                 EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTATIV, @V_CDHISTPADR,
                                   @V_DSHISTPADR, @V_VRIMPOSTONFAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                
                 EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                     @V_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                                                          
                 SET @V_VRIMPOSTONFAJUST = ROUND((@V_VRIMPOSTONF),2);
                 EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTATIV, @V_CDHISTPADR,
                                   @V_DSHISTPADR, @V_VRIMPOSTONFAJUST , @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                               
                 EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                     @V_CDCENTCUST, @V_VRIMPOSTONFAJUST;
              END  
              ELSE BEGIN
                                          
                 IF (@C_IMP_IDTRATIMPO = 'R') BEGIN
                    SET @V_VRIMPOSTONFAJUST = - (@V_VRIMPOSTONF);
                    EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTATIV, @V_CDHISTPADR,
                                      @V_DSHISTPADR, @V_VRIMPOSTONFAJUST , @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                   
                    EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                        @V_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                 END                                        
                 ELSE IF (@C_IMP_IDTRATIMPO = 'A') BEGIN
                          EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTPASS,
                                            @V_CDHISTPADR, @V_DSHISTPADR, @V_VRIMPOSTONF , @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                       
                          EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                         @V_CDCENTCUST, @V_VRIMPOSTONF;
                      END     
                      ELSE BEGIN
                          EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTDESP,
                                            @V_CDHISTPADR, @V_DSHISTPADR, @V_VRIMPOSTONF , @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                    
                          EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                              @V_CDCENTCUST, @V_VRIMPOSTONF;
                                                                              
                          SET @V_VRIMPOSTONFAJUST = - @V_VRIMPOSTONF;
                          EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTATIV,
                                            @V_CDHISTPADR, @V_DSHISTPADR, @V_VRIMPOSTONFAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                                                   
                          EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                              @V_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                      END;
              END;
           END  
           ELSE BEGIN
                SELECT @V_CDIMPOSTRIB = MAX(CDIMPOSTO) /*AS CDIMPOSTRIB*/
                  FROM IMPOSTO
                 WHERE CDIMPOSTRIB = @C_IMP_CDIMPOSTO;
                                                   
                SELECT
                    @V_CDMODDOCFISC  = A.CDMODDOCFISC,
                    @V_DSMODDOCFISC  = A.DSMODDOCFISC,
                    @V_CDTPREGFISC   = A.CDTPREGFISC,
                    @V_NRLANCTONFMOD = N.NRLANCTONF,
                    @V_CDFILIALMOD   = N.CDFILIAL
                  FROM
                    NOTAFISCAL N, MODDOCFISC A
                 WHERE (N.CDMODDOCFISC = A.CDMODDOCFISC)
                   AND (A.CDTPREGFISC  = '70')
                   AND (N.CDFILIAL     = @C_NF_CDFILIAL)
                   AND (N.NRLANCTONF   = @C_NF_NRLANCTONF)
                 ORDER BY A.CDMODDOCFISC;
                                                    
                 IF (@V_CDIMPOSTRIB IS NOT NULL) AND (@V_NRLANCTONFMOD IS NOT NULL) BEGIN
                    EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTATIV, @V_CDHISTPADR,
                                      @V_DSHISTPADR, @V_VRIMPOSTONF , @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                        
                    SET @V_VRIMPOSTONFAJUST = ROUND((@V_VRIMPOSTONF),2);
                    EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                        @C_NF_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                                                               
                    SET @V_VRIMPOSTONFAJUST = - ROUND((@V_VRIMPOSTONF),2);
                    EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTPASS, @V_CDHISTPADR,
                                      @V_DSHISTPADR, @V_VRIMPOSTONFAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                      
                    EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                        @C_NF_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                                                                        
                    SELECT @V_VRPECREPREST = ISNULL(VRPECREPREST,0) /*AS VRPECREPREST*/
                      FROM FILIAL
                     WHERE CDFILIAL = @C_NF_CDFILIRECE;
                                                         
                    IF (@V_VRPECREPREST > 0) BEGIN
                        SET @V_VRIMPOSTONFAJUST = - ROUND((@V_VRIMPOSTONF),2)* (@V_VRPECREPREST/100);
                        EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTATIV, @V_CDHISTPADR,
                                          @V_DSHISTPADR, @V_VRIMPOSTONFAJUST, @V_IDLANCCOME, @V_CDCONTCOME,
                                          '00', 'S';
                                                   
                        SET @V_VRIMPOSTONFAJUST = ROUND((@V_VRIMPOSTONF),2);
                        EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                            @C_NF_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                                                          
                        SET @V_VRIMPOSTONFAJUST = - ROUND((@V_VRIMPOSTONF),2)* (@V_VRPECREPREST/100);
                        EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTPASS, @V_CDHISTPADR,
                                          @V_DSHISTPADR, @V_VRIMPOSTONFAJUST, @V_IDLANCCOME, @V_CDCONTCOME,
                                          '00', 'S';
                                                                                   
                        SET @V_VRIMPOSTONFAJUST = - ROUND((@V_VRIMPOSTONF),2);                                                               
                        EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIEMIT,
                                    @C_NF_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                    END; 
                 END
                 ELSE BEGIN
                    SET @V_VRIMPOSTONFAJUST = (@V_VRIMPOSTONF * @V_VRFATORMULT);
                    EXEC NOVA_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_IMP_CDCONTIMPO, @V_CDHISTPADR,
                                      @V_DSHISTPADR, @V_VRIMPOSTONFAJUST, @V_IDLANCCOME, @V_CDCONTCOME, '00', 'S';
                                                                    
                    EXEC RATEIO_PARTIDA @C_NF_CDEMPRESA, @V_CDLOTE, @C_NF_DTENTRSAID, @V_NRLANCLOTE, @C_NF_CDFILIRECE,
                                        @V_CDCENTCUST, @V_VRIMPOSTONFAJUST;
                 END; 
           END;       
                                                                     
           FETCH NEXT FROM C_IMP INTO @C_IMP_CDIMPOSTO, @C_IMP_VRIMPOSTONFE, @C_IMP_IDTRATIMPO,
                                      @C_IMP_IDIMPORECUP, @C_IMP_IDACRPRODENTRNF, @C_IMP_CDCONTATIV,
                                      @C_IMP_CDCONTPASS, @C_IMP_CDCONTDESP, @C_IMP_CDCONTIMPO;
       END;           
      END;      
                                                                         
      INSERT INTO RELACNFLANCLOTE 
        (CDEMPRESA, CDLOTE, NRLANCLOTE, NRSEQLANLOTE,CDFILIAL, NRLANCTONF)
      VALUES 
        (@C_NF_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, '00001', @C_NF_CDFILIAL, @C_NF_NRLANCTONF);
       
      IF TEKNISA.CONFERE_PARTIDA(@C_NF_CDEMPRESA, @V_CDLOTE, @V_NRLANCLOTE, @C_NF_DTENTRSAID) = 'TRUE' BEGIN
         UPDATE NOTAFISCAL 
            SET IDSTATUSCTBNF = 'C'
          WHERE CDFILIAL   = @C_NF_CDFILIAL
            AND NRLANCTONF = @C_NF_NRLANCTONF;
      END
      ELSE BEGIN
         UPDATE NOTAFISCAL 
            SET IDSTATUSCTBNF = 'E'
          WHERE CDFILIAL   = @C_NF_CDFILIAL
            AND NRLANCTONF = @C_NF_NRLANCTONF;    
      END;        
                                                                                                    
      FETCH NEXT FROM C_NF INTO @C_NF_CDFILIAL, @C_NF_NRLANCTONF, @C_NF_CDEMPRESA, @C_NF_IDDOCFINANC,
                                @C_NF_NRNOTAFISC, @C_NF_CDCLIENTE, @C_NF_CDFORNECED, @C_NF_NRLANCTBDOC,
                                @C_NF_VRNOTAFISC, @C_NF_CDFILIEMIT, @C_NF_CDTIPOOPER, @C_NF_IDCONTABOPER,
                                @C_NF_IDOPERDEVONF, @C_NF_IDORIGDESTNF, @C_NF_VRPRODUTOS, @C_NF_CDFILIRECE,
                                @C_NF_DTENTRSAID, @C_NF_CDINSCESTA, @C_NF_DTEMISSAO, @C_NF_IDPRIPUBCLIE,
                                @C_NF_IDENTRSAIDOP, @C_NF_CDCENTCUST, @C_NF_CDSERIEENTR, @C_NF_CDSERIE,
                                @C_NF_IDTPIJURNF, @C_NF_NRINSJURNF, @C_NF_IDDTCONTAB;
  END; 
     
  DELETE FROM LISTA
     WHERE NRLISTA = @P_NRLISTA;               
END                  
GO

