Skip to content

[IMP] l10n_br_nfse_paulistana: serializador parametrizado para schema v02 (Reforma Tributária)#733

Draft
mileo wants to merge 1 commit into
18.0-paulistana-fix-testsfrom
18.0-paulistana-v03-serializer
Draft

[IMP] l10n_br_nfse_paulistana: serializador parametrizado para schema v02 (Reforma Tributária)#733
mileo wants to merge 1 commit into
18.0-paulistana-fix-testsfrom
18.0-paulistana-v03-serializer

Conversation

@mileo

@mileo mileo commented Jul 3, 2026

Copy link
Copy Markdown
Member

Contexto

Preparação para a emissão de NFS-e paulistana com os schemas da Reforma Tributária 2026 (IBS/CBS). Empilhado sobre #732 (fix dos testes) — mergear aquele primeiro.

Na nfselib.paulistana, o pacote v03 contém as bindings do schema v02 da prefeitura (zip schemas-reformatributaria-v02-4, Manual WS v3.3.7).

O que muda

  • Novo registro PAULISTANA_BINDINGS mapeando nfse_version → módulo de bindings + Versao do cabeçalho (v02→1, v03→2).
  • serialize_nfse_paulistana(nfse_version="v02")default mantém o comportamento atual (schema legado). Com `"v03"", gera o lote no schema novo.
  • No schema v02, tpAssinatura virou xs:base64Binary (o export do generateDS aplica b64encode e exige bytes) → a string de 86 posições do RPS é codificada em ascii antes da atribuição. Mesmo ponto do bug latente no [IMP] paulistana: reforma tributaria erpbrasil/erpbrasil.edoc#94, que perdeu o .encode("ascii").
  • Teste novo test_serialize_nfse_paulistana_v03 validando módulo de binding, Versao=2, assinatura em bytes e export do XML.

⚠️ Gap conhecido (follow-up necessário antes de emissão real com v03)

No schema v02 os campos de valores mudaram de estrutura: ValorTotalServicos/ValorTotalDeducoes (Cabecalho) e ValorServicos (RPS) não são mais aceitos com esses nomes — o construtor do generateDS engole kwargs desconhecidos silenciosamente e o XML sai sem os valores de serviço. O mapeamento dos valores e dos grupos novos (IBS/CBS, tpValores, RetencaoPisCofins/NT-007) fica para PR subsequente.

Testes

invoke test -m l10n_br_nfse_paulistana num doodba 18.0: 6 testes, 0 failed, 0 errors.

…(RT 2026)

Add PAULISTANA_BINDINGS registry mapping nfse_version to the nfselib
bindings module and header Versao:
- v02: schema v01 (legacy, taxable events until 2025-12-31), Versao=1
- v03: schema v02 (Reforma Tributaria IBS/CBS), Versao=2

serialize_nfse_paulistana(nfse_version=...) keeps v02 as default, so
current behavior is unchanged. In the v03 bindings tpAssinatura is
xs:base64Binary (generateDS export b64encodes and requires bytes), so
the RPS signature string is ascii-encoded before assignment.

KNOWN GAP (follow-up): in schema v02 the service amount fields moved
to new groups; ValorTotalServicos/ValorTotalDeducoes (Cabecalho) and
ValorServicos (RPS) are silently swallowed by the generateDS
constructor kwargs and are absent from the v03 output. Mapping the
amounts (and the new IBS/CBS groups) is required before using v03 for
real emission.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant