[Bug/Melhoria] Omissão na serialização do grupo ICMSUFDest (DIFAL) nos itens e do CSRT no infRespTec #451
Ckistian-dev
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Olá, time do PyNFe! Tudo bem?
Primeiramente, parabéns e muito obrigado pelo excelente trabalho na biblioteca. Tem nos ajudado muito na emissão das notas!
Estou abrindo esta issue para reportar dois pontos que identifiquei no motor de serialização do XML (pynfe/utils/xml_writer.py ou serializacao.py). Notei que os atributos já foram previstos e existem nas classes de entidade, porém não estão sendo renderizados no XML final, o que causa rejeição na SEFAZ (especialmente no PR e em operações interestaduais para consumidor final).
Como workaround, estou injetando as tags manualmente via LXML após a geração da nota, mas seria fantástico ter isso nativo na lib.
Abaixo os detalhes de cada caso:
Na classe NotaFiscalProduto (em entidades.py), os atributos referentes ao DIFAL do item foram devidamente criados:
fcp_destino_valor = Decimal()
icms_inter_destino_valor = Decimal()
icms_inter_remetente_valor = Decimal()
O Problema: No processo de serialização (função _serializar_produto_servico), são chamados os métodos de todos os impostos (_serializar_imposto_icms, ipi, pis, cofins, ibscbs), mas o grupo foi esquecido. A serialização pula direto para o . Com isso, a SEFAZ rejeita notas interestaduais para não contribuintes por falta da partilha do ICMS no item.
Na classe NotaFiscalResponsavelTecnico, o atributo csrt = str() está presente corretamente.
O Problema: Na função _serializar_responsavel_tecnico, apenas os dados básicos são montados:
def _serializar_responsavel_tecnico(self, responsavel_tecnico, tag_raiz="infRespTec", retorna_string=True):
raiz = etree.Element(tag_raiz)
etree.SubElement(raiz, "CNPJ").text = responsavel_tecnico.cnpj
etree.SubElement(raiz, "xContato").text = responsavel_tecnico.contato
etree.SubElement(raiz, "email").text = responsavel_tecnico.email
etree.SubElement(raiz, "fone").text = responsavel_tecnico.fone
# As tags e não são geradas
Para que seja aceito em estados que exigem o CSRT (como o Paraná), é necessário que o serializador receba também a Chave de Acesso (para gerar o hash SHA1 em Base64 do CSRT + Chave) e crie as duas respectivas tags.
Se precisarem de ajuda com algum PR para implementar essas renderizações no serializacao.py, fico à disposição.
Obrigado mais uma vez pelo ótimo projeto!
Beta Was this translation helpful? Give feedback.
All reactions