01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:Livros Fiscais (SIGAFIS)
Função:FISXFUN.PRX
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :DSERFIS1-16725


02. SITUAÇÃO/REQUISITO

Quando houver ICMS Diferido para o ESTADO do Rio de Janeiro o valor do FECP diferido deverá ser apresentado de forma majorado no valor do diferimento.

03. SOLUÇÃO

Foram implementados melhorias na função xFisRetFCP para apresentar os valores do ICMS Diferido e FECP de acordo com as regras abaixo:

Exemplo:

Grupo de tributação: 51

No campo “base de cálculo do ICMS” deverá constar o valor da base integral, sem redução;
No campo “valor do ICMS” deverá constar o ICMS devido após o diferimento (100 - 33,33%), se for este tipo de
diferimento;
Na linha do item, no campo de alíquota do ICMS preencher com a alíquota interna do ICMS para o produto;
Em dados adicionais, informações complementares, fazer constar a seguinte mensagem:
"ICMS COM DIFERIMENTO PARCIAL EM 33,33% CONFORME RICMS XXXXX"

Cálculo:

a) Valor da Mercadoria R$ 1000,00
b) Alíquota do ICMS 18% + 2%(FECP)
c) Valor do ICMS da operação (20% de R$ 1.000,00) R$ 200,00
d) Percentual do ICMS diferido 33,33% (Previsto na legislação do Estado ou no Regime Especial concedido)
e) Valor do ICMS diferido (33,33% de R$ 200,00) R$ 66,66 (e) = (c) x (d)
f) Valor do ICMS devido (R$ 200,00 – R$ 66,66) R$ 133,34 (f) = (c) – (d)
O valor do ICMS da operação é R$ 200,00, mas a legislação permite o diferimento parcial de 33,33% deste valor, sendo
devido o ICMS no valor de R$ 133,34, que corresponde à diferença do ICMS da operação (R$ 200,00) e a parcela do
ICMS diferido (R$ 66,66), já considerando a parcela referente ao FECP, que deverão ser demonstrados nas tags próprias
a parcela do ICMS e do FECP devido.

Apresentação dos valores na NF-e:

<ICMS>
<ICMS51>
<orig>0</orig>
<CST>51</CST>
<modBC>3</modBC>
<vBC>1000.00</vBC>
<pICMS>20.00</pICMS>
<vICMSOp>200.00</vICMSOp> Valor do ICMS da Operação + FECP ( Valor como se não tivesse o diferimento)
<pDif>33.33</pDif > Percentual de diferimento
<vICMSDif>66.66</vICMSDif> Valor do ICMS diferido (ICMS+FECP)
<vICMS>120.01</vICMS> Valor do ICMS realmente devido
<vBCFCP>666.70</vBCFCP>
<pFCP>2.00</pFCP>
<vFCP>13.33</vFCP> Valor do FECP realmente devido
<ICMS51>
<ICMS>


O Estado do Rio de Janeiro, através do Manual de Preenchimento de documentos fiscais e escrituração - Benefícios
Fiscais, orienta que deve ser utilizado a forma completa descrita acima na 1ª forma, nas situações de diferimento total
(100%).


No Manual temos a informação que devido não haver campos para informar o valor relativo ao adicional do FECP diferido,
o contribuinte deverá informar a alíquota de ICMS, acrescida do percentual destinado ao FECP e os campos referente
ao FECP não deverão ser preenchidos, conforme demostrado a seguir, em uma operação com alíquota de ICMS de 18%
e adicional de 2% referente ao FECP:

Apresentação dos valores na NF-e:

<ICMS>
<ICMS51>
<orig>0</orig>
<CST>51</CST>
<modBC>3</modBC>
<vBC>1000.00</vBC>
<pICMS>20.00</pICMS>
<vICMSOp>200.00</vICMSOp> Valor do ICMS da Operação + FECP( Valor como se não tivesse o diferimento)
<pDif>100.00</pDif > Percentual de diferimento
<vICMSDif>200.00</vICMSDif> Valor do ICMS diferido
<vICMS>0.00</vICMS> Valor do ICMS realmente devido
<vBCFCP>0.00</vBCFCP>
<pFCP>0.00</pFCP>
<vFCP>0.00</vFCP>
<ICMS51>
<ICMS>


Função:

xFisRetFCP(cVerNFE, cAls, cCampo, cArred, nCasasDec)

Parâmetros:

VariávelTipoDescriçãoOpçõesExemploPadrão
cVerNFECVersão da NFE
xFisRetFCP("4.0")
cAlsCAlias da tabela
xFisRetFCP(,"CD2")
cCampoCCampo para consulta e retorno do valor
xFisRetFCP(,,"CD2_PFCP")
cArredCOpções de arredondamento1 - Não arredonda; 2 - Arredonda; 3 - TruncaxFisRetFCP(,,,"1")Utiliza o parâmetro MV_RNDICM. Se .T. irá arredondar, se .F. irá truncar.
nCasasDecNQuantidade de casas decimais
xFisRetFCP(,,,,2)2

Utilizando para retorno das tags:

TagExemplo de uso
vICMSDifxFisRetFCP('4.0','SFT','FT_ICMSDIF',"2")
vICMSOpxFisRetFCP('4.0','SFT','FT_VOPDIF',"2")
vFCPxFisRetFCP('4.0','CD2','CD2_VFCP',"2")
pFCPxFisRetFCP('4.0','CD2','CD2_PFCP',"2")
vBCFCPxFisRetFCP('4.0','CD2','CD2_BFCP',"2")
vICMSxFisRetFCP('4.0','CD2','CD2_VLTRIB',"2")
pDifxFisRetFCP('4.0','CD2','CD2_PICMDF',"2")
vBCxFisRetFCP('4.0','CD2','CD2_BC',"2")
pICMSxFisRetFCP('4.0','CD2','CD2_ALIQ',"2")

Importante:

O uso da função depende do pré-posicionamento nas tabelas ao qual se deseja passar o Alias.

Exemplo:

Para uso dos campos das tabelas CD2 ou SFT, deve estar posicionado no registro para consumo da função.

Código:

User function MeuTeste()

Local cDoc      := "000000007','000000005','000000006"
Local cSerie    := "199"
Local cCli      := "RJ0001"
Local cLoja     := "01"


//////INCLUSAO DE CAMPOS NA QUERY////////////
        
cField := "%"
If SD1->(FieldPos("D1_ICMSDIF")) > 0
    cField += ",D1_ICMSDIF"

EndIf

If SD1->(FieldPos("D1_FILORI")) > 0
    cField += ",D1_FILORI"
EndIf

If SD1->(FieldPos("D1_DESCZFR")) > 0
    cField += ",D1_DESCZFR"
EndIf

If SD1->(FieldPos("D1_DESCZFP")) > 0
    cField += ",D1_DESCZFP"
EndIf

If SD1->(FieldPos("D1_DESCZFC")) > 0
    cField += ",D1_DESCZFC"
EndIf
If SD1->(FieldPos("D1_GRPCST"))<>0 //Grupo de tributação de ipi
    cField  +=",D1_GRPCST"                  
EndIf

If SD1->( ColumnPos('D1_AFRMIMP') ) > 0 //Campo específico para despesa de importação
    cField  +=",D1_AFRMIMP"                 
EndIf           

If SD1->( ColumnPos('D1_VOPDIF') ) > 0
    cField  +=",D1_VOPDIF"                  
EndIf

cField += "%"

dbSelectArea("SD1")
dbSetOrder(1)   

    lQuery  := .T.
    cAliasSD1 := GetNextAlias()
    BeginSql Alias cAliasSD1            
            SELECT D1_FILIAL,D1_DOC,D1_SERIE,D1_FORNECE,D1_LOJA,D1_COD,D1_ITEM,D1_TES,D1_TIPO,D1_NFORI,D1_SERIORI,D1_ITEMORI,
            D1_CF,D1_QUANT,D1_TOTAL,D1_VALDESC,D1_VALFRE,D1_SEGURO,D1_DESPESA,D1_CODISS,D1_VALISS,D1_VALIPI,D1_ICMSRET,
            D1_VUNIT,D1_CLASFIS,D1_VALICM,D1_TIPO_NF,D1_PEDIDO,D1_ITEMPC,D1_VALIMP5,D1_VALIMP6,D1_BASEIRR,D1_VALIRR,D1_LOTECTL, 
            D1_NUMLOTE,D1_CUSTO,D1_ORIGLAN,D1_DESCICM,D1_II,D1_FORMUL,D1_VALPS3,D1_ORIGLAN,D1_VALCF3,D1_TESACLA,D1_IDENTB6,D1_PICM,D1_DESC  %Exp:cField%
            FROM %Table:SD1% SD1
            WHERE
            SD1.D1_FILIAL  = %xFilial:SD1% AND
            SD1.D1_SERIE   = %Exp:cSerie% AND
            SD1.D1_DOC     IN (%Exp:cDoc%) AND
            SD1.D1_FORNECE = %Exp:cCli% AND
            SD1.D1_LOJA    = %Exp:cLoja% AND
            SD1.%NotDel%
            ORDER BY D1_FILIAL,D1_DOC,D1_SERIE,D1_FORNECE,D1_LOJA,D1_ITEM,D1_COD
    EndSql


DbSelectArea("SF1")
DbSetOrder(1)

While !(cAliasSD1)->(Eof())

    //Posiciona novente na SF1 do documento que esta sendo processado               
    SF1->(MsSeek(xFilial("SF1")+(cAliasSD1)->(D1_DOC+D1_SERIE+D1_FORNECE+D1_LOJA+D1_TIPO)))
    
    DbSelectArea("SFT")
    DbSetOrder(1)
    SFT->(DbSeek(xFilial("SFT")+"E"+(cAliasSD1)->(D1_SERIE+D1_DOC+D1_FORNECE+D1_LOJA+PadR(D1_ITEM,TamSx3("FT_ITEM")[1])+D1_COD)))    
    
    CD2->(DbSetOrder(2))
    CD2->(MsSeek(xFilial("CD2")+"E"+SF1->F1_SERIE+SF1->F1_DOC+SF1->F1_FORNECE+SF1->F1_LOJA+PadR((cAliasSD1)->D1_ITEM,4)+(cAliasSD1)->D1_COD))
    
    While !CD2->(Eof()) .And. xFilial("CD2") == CD2->CD2_FILIAL .And.;
        "E" == CD2->CD2_TPMOV .And.;
        SF1->F1_SERIE == CD2->CD2_SERIE .And.;
        SF1->F1_DOC == CD2->CD2_DOC .And.;
        SF1->F1_FORNECE == IIF(!(cAliasSD1)->D1_TIPO $ "DB",CD2->CD2_CODFOR,CD2->CD2_CODCLI) .And.;
        SF1->F1_LOJA == IIF(!(cAliasSD1)->D1_TIPO $ "DB",CD2->CD2_LOJFOR,CD2->CD2_LOJCLI) .And.;                
        (cAliasSD1)->D1_ITEM == SubStr(CD2->CD2_ITEM,1,Len((cAliasSD1)->D1_ITEM)) .And.;
        (cAliasSD1)->D1_COD == CD2->CD2_CODPRO
        
        alert("Nota: "+(cAliasSD1)->D1_DOC+CRLF+;
            "Valor Base: "+cvaltochar(CD2->CD2_BC)+CRLF+;
            "% Diferimento: "+cvaltochar(CD2->CD2_PICMDF)+CRLF+;
            "% FECP: "+cvaltochar(CD2->CD2_PFCP)+CRLF+;
            "CD2_VLTRIB / vICMS : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_VLTRIB',"2"))+CRLF+;
            "CD2_BFCP / vBCFCP : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_BFCP',"2"))+CRLF+;
            "CD2_PFCP / pFCP : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_PFCP',"2"))+CRLF+;
            "CD2_VFCP / vFCP : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_VFCP',"2"))+CRLF+;
            "FT_VOPDIF / vICMSOp : "+cvaltochar(xFisRetFCP('4.0','SFT','FT_VOPDIF',"2"))+CRLF+;
            "FT_ICMSDIF / vICMSDif : "+cvaltochar(xFisRetFCP('4.0','SFT','FT_ICMSDIF',"2")))

        CD2->(DbSkip())
    Enddo   

    (cAliasSD1)->(DbSkip())
Enddo

Return

O conceito demonstrado neste documento sobre os valores com ICMS Diferido + FECP para a função xFisRetFCP, funcionará somente para notas fiscais com CST 51 e MV_ESTADO = RJ e versão NFE 4.0


04. DEMAIS INFORMAÇÕES

Orientações Consultoria de Segmentos


05. ASSUNTOS RELACIONADOS

https://tdn.totvs.com/display/PROT/FIS0069_DIFERIMENTO_ICMS

https://tdn.totvs.com/display/public/PROT/FECP+-+Fundo+Estadual+de+Combate+a+Pobreza+--+112399



<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}
</style>