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:
1. Ausência do grupo <ICMSUFDest> (DIFAL) nos ItensNa classe NotaFiscalProduto (em entidades.py), os atributos referentes ao DIFAL do item foram devidamente criados:
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 <ICMSUFDest> foi esquecido. A serialização pula direto para o <impostoDevol>. Com isso, a SEFAZ rejeita notas interestaduais para não contribuintes por falta da partilha do ICMS no item.
2. Ausência de <idCSRT> e <hashCSRT> no Responsável TécnicoNa 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:
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!