Skip to content

fix(danfse): adequar identificação do município e UF no cabeçalho à NT 008 #117

Closed

Description

@vitormattos

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/xLocEmi e infNFSe/emit/enderNac/UF, apresentada no formato Municí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() monta municipio_emissao exclusivamente a partir de infNFSe/xLocEmi, embora a UF do emitente já seja lida de infNFSe/emit/enderNac/UF para outros campos.
  • src/Danfse/HTMLTemplate.php: o cabeçalho imprime Município: <?= $data['municipio_emissao'] ?>, enquanto .municipality-cell define uma única fonte de 5.7pt para 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

  1. 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.
  2. 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.
  3. 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.
  4. Tratar campos incompletos sem inventar município ou UF, com resultado previsível e coberto por testes.
  5. 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 por DanfseGenerator::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.md com 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

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

  1. vitormattos commented on Oct 12, 2026

    @vitormattos
    MemberAuthor

    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.

  2. vitormattos commented on Oct 12, 2026

    @vitormattos
    MemberAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions