Repository navigation
fix(danfse): adequar identificação do município e UF no cabeçalho à NT 008 #117
Description
Problema
O cabeçalho superior direito do DANFSe v2 apresenta apenas o nome do município, sem a sigla da UF. Além disso, a regra de estilo atual aplica font-size: 5.7pt à célula inteira, sem distinguir a identificação do município das informações de ambiente.
A NT SE/CGNFS-e nº 008/2026, versão 1.02, estabelece:
- Item 2.4.3: identificação do município do emitente com fonte de 8 pt; ambiente gerador e tipo de ambiente com 6 pt, com a tipografia prevista para conteúdos do cabeçalho.
- Tabela do item 2.4.5, quadro Município/Ambiente: composição da identificação com
infNFSe/xLocEmieinfNFSe/emit/enderNac/UF, apresentada no formatoMunicípio: <nome> / <UF>. - Exceção da mesma tabela: não exibir a identificação do município quando o item do código de tributação nacional informado for 99.
Essa é uma regra genérica de renderização, não uma configuração de uma empresa ou localidade específica.
Evidências no código atual
src/Danfse/DanfseTemplate.php:buildData()montamunicipio_emissaoexclusivamente a partir deinfNFSe/xLocEmi, embora a UF do emitente já seja lida deinfNFSe/emit/enderNac/UFpara outros campos.src/Danfse/HTMLTemplate.php: o cabeçalho imprimeMunicípio: <?= $data['municipio_emissao'] ?>, enquanto.municipality-celldefine uma única fonte de5.7ptpara município e dados de ambiente.- A condição de supressão para o item nacional 99 não está contemplada nesse bloco.
Comportamento esperado
- Para documentos em que o município deva ser exibido, compor a identificação a partir dos campos do XML autorizado, no formato
Município: <nome> / <UF>, sem valores fixos e sem depender da empresa ativa, de cadastro externo ou de configurações específicas da aplicação consumidora. - Respeitar a regra de não exibição do município quando o item do código de tributação nacional for 99, mantendo a apresentação adequada dos demais dados do cabeçalho.
- Aplicar os tamanhos e a hierarquia tipográfica especificados na NT 008 para o município e os campos de ambiente, sem prejudicar a legibilidade, a identificação do DANFSe ou o aviso de produção restrita.
- Tratar campos incompletos sem inventar município ou UF, com resultado previsível e coberto por testes.
- Manter a geração exclusivamente a partir do XML autorizado, sem alterar o XML, os dados da DPS ou o protocolo de emissão.
Distinção importante: o cabeçalho Município/Ambiente não é um campo de país. A exibição do código ISO do país nos quadros de Local da Prestação e Incidência do ISSQN é outro contrato, já tratado no PR #116. Não duplicar nem desfazer essa correção.
Testes e verificação
- Testar com fixtures inteiramente sintéticas de municípios e UFs distintos, assegurando que o valor renderizado acompanha o XML informado.
- Testar o item nacional 99, verificando a supressão do município e a permanência dos dados de ambiente.
- Testar campos ausentes/incompletos sem preenchimento artificial.
- Verificar ambientes de produção e produção restrita, incluindo a advertência de ausência de validade jurídica somente quando cabível.
- Cobrir
buildData(), HTML e geração local de PDF porDanfseGenerator::generateFromXml(), aproveitando a suíte de referências já existente. - Fazer inspeção visual de PDF sintético para confirmar proporção, fontes, alinhamento e ausência de sobreposição; disponibilizar evidência sem dados reais no PR.
- Executar testes, lint, análise estática e os checks aplicáveis ao repositório.
- Atualizar
docs/danfse-v2-rendering.mdcom o contrato estável de apresentação do cabeçalho, sem narrativas de implementação.
Não emitir nem retransmitir NFS-e para verificar o leiaute e não substituir automaticamente PDFs fiscais previamente arquivados.
Referências e escopo
- NT 008/2026 v1.02 — Especificações Técnicas do DANFSe, itens 2.4.3 e 2.4.5.
- Validate DANFSe v2 rendering against official NT 008 reference cases #57 — testes de referência do DANFSe v2 existentes, a reutilizar.
- fix(nfse): restore NT 007 consolidated social retentions in XML and DANFSe #116 — revisão em andamento para outros campos de apresentação fiscal; esta correção do cabeçalho é independente.
Fora de escopo: mudanças em tributos, país da prestação, série/número da DPS, integração ao Akaunting e revisão geral de outros blocos do DANFSe.
Activity
vitormattos commentedon Oct 12, 2026
Implementação isolada em draft PR #122 (commit
44f240a, assinatura verificada, DCO válido). Corrige município/UF, supressão item 99 e hierarquia da fonte, com testes sintéticos. CI parcial: Psalm, PHP-CS, REUSE e job visual concluíram com sucesso; PHPUnit pendente. PDF visual foi gerado pelo CI, mas inspeção visual e prova de página única não concluídas; não fechar issue/merge até validação.vitormattos commentedon Oct 12, 2026
Validação final da entrega do cabeçalho: município/UF derivados do XML autorizado, supressão para item nacional 99, ambiente exibido, casos ausente/incompleto, formatos de produção/restrita e rótulos de identificação com 7 pt. A implementação passou pela integração do PR #136 (merge
11fa63d, CI 10/10), e os PDFs sintéticos são A4 em uma página. O PR original #122 já havia sido integrado. Encerramento funcional desta issue: a obrigação transversal de fontes exatas (Arial / Microsoft Sans Serif) ainda não é demonstrada no PDF padrão; permanece explicitamente pendente no épico #118, e não é ocultada por este fechamento.