Skip to content

fix(nfse): reject obsolete fiscal configuration endpoints and scope ADN view (#419 #421) - #489

Merged
vitormattos merged 6 commits into
mainfrom
fix/nfse-disable-legacy-writes-r
Oct 14, 2026
Merged

vitormattos merged 6 commits into
mainfrom
fix/nfse-disable-legacy-writes-r

Conversation

@vitormattos

@vitormattos vitormattos commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Justificativa

Épico #417 veda escrita na configuração fiscal nfse.* antiga e perfis de certificado por CNPJ. A UI por empresa (#420) não usa esses formulários, mas as rotas HTTP de legado continuavam permitindo gravação de identidades fiscais fora do perfil e de certificados sem vínculo company_id.

Correção delimitada

  • Mantém os nomes das rotas legadas por segurança de compatibilidade HTTP, mas mutações de configuração geral, ISSQN, federal e upload/exclusão de certificados pelo contrato antigo respondem 410 Gone após middleware nativo de permissão.
  • Novo controlador mínimo somente para rejeição. Endpoints de consulta PFX, configuração global Vault e WebDAV nativa permanecem disponíveis.
  • Tela ADN pré-preenche CNPJ exclusivamente pelo perfil empresarial ativo; sem perfil, campo fica vazio em vez de ler dados obsoletos.
  • Testes Feature provam que rotas deprecadas não alteram parâmetros antigos e que Vault global ainda salva normalmente.
  • Documentação operacional atualizada.

Dependências de integração

A confirmação municipal passa a ser administrada pelo perfil no PR #486. Os PRs #483/#482/#484 complementam a remoção dos demais leitores legados. Não integrar esta mudança antes do #486 quando a confirmação municipal for relevante no ambiente.

Validação e governança

Dois commits incrementais Conventional Commits com DCO e assinatura Git Signing MCP. Sem emissão fiscal real. PR draft até CI da SHA final e aprovação independente exigida pelo ruleset; não mudar CODEOWNERS/proteções nem usar bypass/squash.

Revisão adicional de segurança (#421)

  • Todas as entradas administrativas ADN de consulta, revisão e importação agora recusam contexto sem empresa ativa, inclusive o acesso direto ao controller.
  • A fila de revisão e a conciliação local recusam buscas sem proprietário, evitando ampliação de consultas a todos os tenants.
  • Teste Feature sintético reproduz ausência de contexto empresarial, verifica 404 nas operações e ausência de resultados na fila/conciliação.
  • Corrigido por commits incrementais assinados com DCO nesta revisão. A alteração não modifica o protocolo ADN ou emissões fiscais reais.

Falha intermitente identificada na integração

A CI de integração com a main apresentou falha em CompetenceClosingReportTest::testClosingAndCsvExcludeForeignCompanyFiscalDocuments. A falha foi reproduzida com chaves sintéticas iguais por colisão do gerador de fixtures (random_int(1, 8) repetido 50 vezes); não demonstrou vazamento fiscal. A correção isolada e determinística está no PR #494, cuja CI passou. Revalidar os checks de integração desta branch depois que #494 for integrado. Não aumentar timeouts, ignorar asserções nem aprovar este PR com teste falhando.

Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…company

Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
…file

Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
@vitormattos
vitormattos marked this pull request as ready for review October 14, 2026 10:33
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
@vitormattos
vitormattos merged commit f1d693b into main Oct 14, 2026
18 of 20 checks passed
@vitormattos
vitormattos deleted the fix/nfse-disable-legacy-writes-r branch October 14, 2026 19:03
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