Ir para conteúdo
  • Cadastre-se

dev botao

NFe 4.0 - CST 60 e CSOSN 500 nova tag pST


Adryelle
Ver Solução Respondido por Agnaldo Prates,
  • Este tópico foi criado há 2223 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde,

Na nota técnica que estabelece o layout 4.0 da NFe, foi criada uma nova tag para informarmos alíquota suportada pelo consumidor Final, pST, sendo que no Acbr esse valor está sendo preenchido caso o campo vBCSTRet  ou vICMSSTRET for maior que zero para cst60, conforme trecho abaixo, na unit pcnNFeW:

if (nfe.Det[i].Imposto.ICMS.vBCSTRET > 0) or (nfe.Det[i].Imposto.ICMS.vICMSSTRET > 0) then
  begin
    Gerador.wCampo(tcDe2, 'N26', 'vBCSTRet  ', 01, 15, 1, nfe.Det[i].Imposto.ICMS.vBCSTRET, DSC_VBCSTRET);

    if (NFe.infNFe.Versao >= 4) then
      Gerador.wCampo(IIf(Usar_tcDe4,tcDe4,tcDe2), 'N26.1', 'pST', 01, IIf(Usar_tcDe4,07,05), 0, nfe.Det[i].Imposto.ICMS.pST, DSC_PST);

    Gerador.wCampo(tcDe2, 'N27', 'vICMSSTRet', 01, 15, 1, nfe.Det[i].Imposto.ICMS.vICMSSTRET, DSC_VICMSSTRET);
end;

 

Porém antes da geração dessas tags existe uma verificação que está sendo feita que altera o cst de cst60 para cstRep60, para que seja gerado o grupo de repasse(ICMSST), e logo não gera o grupo ICMS60 e a nova tag pST, conforme o código abaixo:

if (nfe.infNFe.Versao >= 4) and
   (nfe.Ide.modelo = 55) and
   (nfe.Det[i].Imposto.ICMS.CST = cst60) and       //Ajuste para funcionar no ACBrNFeMonitor
   ((nfe.Det[i].Imposto.ICMS.vBCSTRet <> 0) or     //Qdo passar CST 60 e algum campo de repasse de ICMS ST
    (nfe.Det[i].Imposto.ICMS.vICMSSTRet <> 0) or   //estiver preenchido será trocado o cst para cstRep60
    (nfe.Det[i].Imposto.ICMS.vBCSTDest <> 0) or
    (nfe.Det[i].Imposto.ICMS.vICMSSTDest <> 0)) then
   nfe.Det[i].Imposto.ICMS.CST := cstRep60;

 

Porém analisando a documentação da nota, creio que esse grupo de repasse teria que ser gerado apenas para operações interestaduais, já que na nota técnica fala que ele deve ser gerado nessa situação:

image.thumb.png.eb5536cd6a2468c86d40a453ee359393.png

 

Diante disso imagino que na verificação para mudar o cst de cst60 para cstRep60, deveria conter a condição abaixo, para ser gerado o grupo ICMSST apenas nas operações interestaduais, e grupo ICMS60 e a nova tag pST serem gerados corretamente:

(nfe.Dest.EnderDest.UF <> nfe.Emit.EnderEmit.UF)

 

 

Adryelle Silva Soares
Analista de Sistemas
email: [email protected]
Montes Claros / MG

Link para o comentário
Compartilhar em outros sites

  • Solution
Em 24/11/2017 at 17:15, Adryelle disse:

Diante disso imagino que na verificação para mudar o cst de cst60 para cstRep60, deveria conter a condição abaixo, para ser gerado o grupo ICMSST apenas nas operações interestaduais, e grupo ICMS60 e a nova tag pST serem gerados corretamente:


(nfe.Dest.EnderDest.UF <> nfe.Emit.EnderEmit.UF)

 

Em princípio parece pertinente. No entanto, caso o emitente necessite emitir uma contra nota dele para ele mesmo,  com o objetivo de anular um lançamento, o cálculo não será feito, portanto me parece razoável o estudo de outra alternativa.

_____________

Prates, Agnaldo

Link para o comentário
Compartilhar em outros sites

 

22 horas atrás, Agnaldo Prates disse:

Em princípio parece pertinente. No entanto, caso o emitente necessite emitir uma contra nota dele para ele mesmo,  com o objetivo de anular um lançamento, o cálculo não será feito, portanto me parece razoável o estudo de outra alternativa.

Realmente, nessa situação específica apenas a condição verificando o estado do emitente e destinatário não iria resolver. Penso que seria interessante criar uma propriedade booleana ou algo similar, onde fosse possível definir na aplicação qual o grupo deveria ser gerado, e colocar essa propriedade na verificação, como no exemplo abaixo:

if (GerarGrupoRepasse) and
   (nfe.infNFe.Versao >= 4) and
   (nfe.Ide.modelo = 55) and
   (nfe.Det[i].Imposto.ICMS.CST = cst60) and       //Ajuste para funcionar no ACBrNFeMonitor
   ((nfe.Det[i].Imposto.ICMS.vBCSTRet <> 0) or     //Qdo passar CST 60 e algum campo de repasse de ICMS ST
    (nfe.Det[i].Imposto.ICMS.vICMSSTRet <> 0) or   //estiver preenchido será trocado o cst para cstRep60
    (nfe.Det[i].Imposto.ICMS.vBCSTDest <> 0) or
    (nfe.Det[i].Imposto.ICMS.vICMSSTDest <> 0)) then
   nfe.Det[i].Imposto.ICMS.CST := cstRep60;

Assim na aplicação poderíamos verificar se a operação é interestadual ou se a nota é com objetivo de anular o lançamento, ou qualquer outra situação que fosse necessário gerar esse grupo, e nessas situações setaria a opção como True para poder gerar o grupo de repasse. 

Acha que seria válida essa opção Agnaldo?

Adryelle Silva Soares
Analista de Sistemas
email: [email protected]
Montes Claros / MG

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Adryelle disse:

Acha que seria válida essa opção Agnaldo?

Bom dia.

Imagino que sim. Ou algo do tipo:
if  ( nfe.Ide.tpNF = tnEntrada ) and  (nfe.Dest.EnderDest.UF = nfe.Emit.EnderEmit.UF)  then

else
if (nfe.Dest.EnderDest.UF <> nfe.Emit.EnderEmit.UF)  then
(...)
Talvez algo deste sentido.

 

_____________

Prates, Agnaldo

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

à solução apresentada por @Adryelle, não podemos esquecer a CST 041, conforme NT 2016/002 1.42, ficando assim:

if (GerarGrupoRepasse) and
   (nfe.infNFe.Versao >= 4) and
   (nfe.Ide.modelo = 55) and
   ((nfe.Det[i].Imposto.ICMS.CST = cst60) or nfe.Det[i].Imposto.ICMS.CST = cst41) and       //Ajuste para funcionar no ACBrNFeMonitor
   ((nfe.Det[i].Imposto.ICMS.vBCSTRet <> 0) or     //Qdo passar CST 60 e algum campo de repasse de ICMS ST
    (nfe.Det[i].Imposto.ICMS.vICMSSTRet <> 0) or   //estiver preenchido será trocado o cst para cstRep60
    (nfe.Det[i].Imposto.ICMS.vBCSTDest <> 0) or
    (nfe.Det[i].Imposto.ICMS.vICMSSTDest <> 0)) then
   nfe.Det[i].Imposto.ICMS.CST := cstRep60;

 

nelconsult 3d.png

Desenvolvedor e Consultor

[email protected]

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2223 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.