dacte: ICMS ST lê vICMSST em vez de repetir o vICMS - #185
Conversation
A coluna ICMS ST do DACTE vinha da tag vICMS, então imprimia o próprio ICMS. Em CT-e sem ST (CST 00) o DACTE mostrava um ICMS ST que não existe; quando o XML declarava vICMSST, o valor declarado nunca era exibido. Passa a ler vICMSSTRet (ST retido anteriormente) e, na ausência, vICMSST, caindo para zero quando nenhum dos dois é declarado. Os PDFs de referência foram regerados: a coluna ICMS ST deles estava errada.
|
@andmit10 boa, consegue só arrumar o pre-commit? |
|
Obrigado, @andmit10 — o bug que você achou aqui é dos bons: um CT-e sem substituição tributária nenhuma exibindo o ICMS próprio na coluna ICMS ST, em documento fiscal auxiliar. Confirmei tudo e refiz em #193, com sua autoria preservada no commit. O que mudou em relação a esta: 1. Tirei o fallback 2. Troquei a fixture do teste. O Ela é inválida de propósito (existe pra exercitar todo campo do layout), então não servia de prova. Criei a 3. 4. Teste golden pra fixture nova, travando a renderização completa de um CT-e com ST. Sobre os goldens: mantive sua decisão de regerar (eles vinham confirmando o valor errado), mas conferi o escopo antes de aceitar — 15 dos 16 mudaram exatamente um trecho, do Um achado adjacente que virou item de backlog, não entrou na #193: num CT-e Fechando em favor da #193. Valeu pela contribuição — essa e a #186 renderam quatro PRs. |
Problema
No DACTE, a coluna ICMS ST é preenchida com a tag
vICMS— o ICMS próprio — em vez do ICMS ST:https://github.com/Engenere/BrazilFiscalReport/blob/main/brazilfiscalreport/dacte/dacte.py#L1292-L1293
Duas consequências, ambas em documento fiscal auxiliar:
CST 00(tributação normal) o XML traz sóvICMS; o DACTE imprime esse mesmo valor na coluna ICMS ST. Quem confere o documento lê uma substituição tributária inexistente.vICMSST, o valor declarado nunca aparece.Como reproduzir
Com uma fixture que já existe no repositório —
tests/fixtures/dacte/dacte_test_overload.xmldeclaravICMS=26.54evICMSST=20.00:O que muda
v_icms_stpassa a lervICMSSTRet(ICMS ST retido anteriormente) e, na ausência dele,vICMSST— caindo para zero quando nenhum dos dois é declarado, que é o caso do CST 00.A ordem
vICMSSTRet→vICMSSTsegue o leiaute do CT-e: emICMSSN/ICMSOutraUFo ST retido vem emvICMSSTRet, enquantovICMSSTaparece nos grupos com ST próprio.Testes
Dois testes novos em
tests/test_dacte.py, ambos direto no atributo (sem depender de comparação de PDF):test_dacte_icms_st_le_a_tag_correta— comdacte_test_overload.xml, garantev_icms == "26,54"ev_icms_st == "20,00".test_dacte_icms_st_zero_quando_nao_declarado— comdacte_test_1.xml(semvICMSST), garantev_icms_st == "0,00".Verifiquei que ambos falham sem a correção (
AssertionError: assert '26,54' == '20,00').PDFs de referência
Os 15 PDFs de
tests/generated/dacte/foram regerados comBFR_GENERATE_EXPECTED=1, porque a coluna ICMS ST deles estava errada — os testes golden vinham confirmando o valor incorreto.Suíte completa: 94 passed.