Repository navigation
feat(protocol): ativar contrato NT009 somente com versão, XSD e ambiente oficiais comprovados #121
Description
Contexto / problema
A issue #95 entregou fontes, matriz, tooling e um preview estrutural NT009, não um emissor fiscal compatível com ambiente ativo. src/Xml/Nt009DpsPreviewBuilder.php, src/Dto/Nt009DpsPreview.php e docs/nt009.md proíbem explicitamente transmissão. src/Xml/DpsSchemaValidator.php ainda representa a versão de produção atualmente suportada. A aprovação da NT009 v1.01 em outubro de 2026 não comprova implantação imediata em todos os ambientes.
Contrato de ativação (hard gate)
- Confirmar oficialmente, com fonte e data por produção/produção restrita, o XSD efetivamente disponibilizado, checksum, regras de negócio, leiaute, versão técnica e data de ativação. A numeração do schema isolada não é suficiente.
- Auditar o novo pacote XSD contra a matriz e as tabelas já versionadas de Implement version-aware NT009 v1.01 DPS/IBSCBS contract #95: Anexo VI v1.04.01, Anexo VII v1.03.00, atenção a
CST,cClassTrib,cIndOp,finNFSe,indDest,gIBSCBSe condições de presença. Consultas/correlações não viram obrigatoriedade sem suporte oficial. - Somente após confirmação, implementar seleção explícita de contrato e ambiente no emissor, sem mudar em silêncio o
NfseClient::emit(DpsData)atual. Fazer novo DTO/adaptação versionada ou estratégia de serialização apenas se diferenças reais justificarem; não transformar preview em emissor por simples alteração do tipo. - Biblioteca só valida/serializa/assina/transmite conforme contrato; não calcula tributação empresarial nem adivinha alíquotas/CST.
- Garantir que protocolo selecione XSD e catálogos corretos por versão; validação local offline e proteção contra XXE. Identificar compatibilidade/capacidade do consumidor
akaunting-nfsesem atualizar seu pin ou alterá-lo neste PR. - Preservar bytes e interpretação do fluxo anterior para competências históricas. Regra legal por competência/empresa pertence ao módulo e não equivale à versão transportada.
Testes de aceitação
- Evidência documental/endpoint oficial por ambiente e data de implantação; sem evidência, não habilitar emissão e registrar o bloqueio.
- Contratos antigo e novo testados com XMLs sintéticos e XSD oficial aplicável (sucesso, ausência legítima, campo condicional, ordem, valores extremos, desconhecido), assinatura sintética e fake SEFIN.
- XML de preview permanece não transmissível; uso incorreto recebe erro claro; teste garante que versão antiga não se altera.
- Artefato de diagnóstico de migração para módulo demonstra mapeamento de campos e versão sem vazar PII.
- PHPUnit/integração,
composer domains:check,composer domains:contract-matrix,composer cs:check,composer psalme CI de versões PHP aplicáveis passam. Homologação real é opt-in e não substitui testes determinísticos. - PR explica fonte, revisão oficial, checksum, ambiente, riscos e limites. Nada de XSD baixado em runtime, ganchos temporários em workflows ou documentação transitória.
Dependências e fronteiras
Conceitual: #95 (concluída, preservar preview). Para cálculo/seleção legal e onboarding: https://github.com/LibreCodeCoop/akaunting-nfse/issues/427, https://github.com/LibreCodeCoop/akaunting-nfse/issues/361. DANFSe: #118 (separado). NT007 retenções: PR #116 (integrar sem regressão). Não alterar o akaunting-nfse neste trabalho; downstream abre seu PR após contrato revisado.
Referências
- Aprovação NT009 v1.01 em outubro de 2026: https://www.gov.br/nfse/pt-br/noticias/publicado-o-ato-tecnico-conjunto-rfb-cgibs-no-7-aprovando-a-versao-1-01-da-nota-tecnica-009-nfs-e-e-a-nota-tecnica-010-da-nfs-e-via
- NT009 e anexos: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/rtc
- Pacotes de produção: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/documentacao-atual
- Produção restrita: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/producao-restrita
- Cronograma de implantação: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/atualizacoes-e-implantacoes
- Comparação FOSS, não normativa:
https://github.com/nfse-nacional/nfse-php.
Activity
vitormattos commentedon Oct 12, 2026
Auditoria do hard gate NT009 v1.01 — 12/10/2026
Decisão: BLOQUEADO para novo contrato de emissão. Não transformar o preview de #95 em payload transmissível. Esta é uma conclusão sobre evidência insuficiente de compatibilidade e ativação, não a alegação de que a SEFIN necessariamente deixou de implantar algum componente.
Evidência normativa e de implantação, por ambiente
NFSe-ESQUEMAS_XSD-v1.01-20260209(e7935cbd9470527c6cc32984c1b2263e614183bf0139ce2733eaaed2de9a8072); produção restritaNFSe-ESQUEMAS_XSD-PRODREST-v1.01-20260727(6c7e0510d3ecff4454f291f4e10b742d27a4818f23aab181494f96d0ea79f3dc). Não há comprovação de que esses pacotes sejam o XSD efetivo da NT009 v1.01. Versão numérica1.01compartilhada não prova equivalência de leiaute.check-published-files, saídanew_versions: [], oito fontesunchanged(inclusive ambos os XSD e anexos VI/VII). Esse resultado prova integridade/disponibilidade dos URLs monitorados na ocasião, não ausência universal de novo pacote ou implantação; o comunicado governamental veio depois naquele dia. Em 12/10, as páginas dos índices oficiais foram acessadas diretamente via consulta web: produção continua listando somenteNFSe-ESQUEMAS_XSD-v1.01-20260209(página atualizada em 15/08/2026) e produção restrita somenteNFSe-ESQUEMAS_XSD-PRODREST-v1.01-20260727(página atualizada em 28/07/2026). Essa inspeção de índices é independente do monitor de hashes de 09/10; não comprova, por si só, que não há pacote novo disponibilizado em outra URL ou implantado internamente.gIBSCBSAjusteem.../IBSCBS/valores/trib/gIBSCBSAjuste; a matriz derivada do Anexo VI v1.04.01, linhas 428–430, coloca o grupo em.../trib/gIBSCBS/gIBSCBSAjuste. É preciso confrontar o XSD efetivo e eventual esclarecimento oficial, não escolher uma posição por preferência do código. A NT009 PDF ainda cita o Anexo VIIv1.02.01, enquanto a página oficial RTC e o anúncio de 09/10 listamv1.03.00: registrar proveniência/data, não misturar versões.Fontes oficiais: publicação do ato + cronograma, NT009 v1.01 PDF, RTC, índice de produção, índice de produção restrita, cronograma de implantação.
Código e fronteiras revisados
src/Http/NfseClient.php::emit(DpsData)chama somenteXmlBuilder::buildDps, assinatura e POST legado; não aceitaNt009DpsPreviewcomo parâmetro.src/Xml/XmlBuilder.phpmantém DPSversao=1.01;src/Xml/DpsSchemaValidator.phpreconhece apenas o pacote antigo, sem validação falsamente anunciada para NT009. A proteção existente é tipagem do método + API de preview separada, não um emissor NT009 pronto.XmlBuilder::previewNt009Dps/Nt009DpsPreviewBuilder/Nt009DpsPreviewpermanecem review-only. 64 testes emNt009DpsPreviewBuilderTestcobrem regras de presença, ordem, condicionais e dados extremos;testLegacyEmissionOutputIsNotModifiedByPreviewpreserva resultado anterior, etestValidDebitoAdjustmentEmitsConditionalNestedValuesconfirma que preview não valida no XSD de produção antigo. Nenhum desses testes comprova aceite SEFIN no esquema novo.OfficialDomainCatalogmantém Anexo C antigo como padrão e Anexo VII v1.03.00 como escolha explícita; há matriz rastreável emresources/contracts/nt009-dps-v1.04.01-matrix.tsv, fontes/checksums emresources/domains/sources.jsone política estável emdocs/nt009.md. Não duplicar tooling de Implement version-aware NT009 v1.01 DPS/IBSCBS contract #95 nem adicionar diário de auditoria ao repositório.akaunting-nfse/3rdparty/composer.jsonfixadev-main#60c4fad793c6562820e36085eeb8dab2c0f68b1f; nenhuma alteração de pin é necessária ou autorizada neste trabalho. Regime/operação/competência/obrigações fiscais seguem emakaunting-nfse#427/#361, DANFSe em#118/#119/#120e NT007/retenções em PR#116. Nada foi modificado nesses escopos.Testes/CI e revisão de commits
OfficialDpsSchemaValidationTesteOfficialSchemaBundleIntegrityTestprotegem XSD anterior;NfseClientTesttesta transporte fake, resposta SEFIN e falhas sem emissão real; a suíte NT009 citada acima é somente preview.8ed55aabad3077684dc5ab8fb1a41890065186c2: PHPUnit PHP 8.2/8.3/8.4, Psalm, PHP-CS, minimum dependencies, REUSE e conventional commits estão verdes nesse SHA, não constituem CI novo da feat(protocol): ativar contrato NT009 somente com versão, XSD e ambiente oficiais comprovados #121 nem autorização de NT009.8ed55aabad30(fix(nfse): restore NT 007 consolidated social retentions in XML and DANFSe #116),443465b05cef(fix: recover NFS-e number from authorized XML and reject false 2xx success #105),3932a256b9e0efb5a87889ee8(Implement version-aware NT009 v1.01 DPS/IBSCBS contract #95) possuem assinatura verificada por GitHub e trailer Signed-off-by.mainatual60c4fad793c6é merge commit criptograficamente verificado; não possui trailer DCO próprio, distinto dos commits de trabalho. Nenhum commit criado para feat(protocol): ativar contrato NT009 somente com versão, XSD e ambiente oficiais comprovados #121: DCO/assinatura desta investigação, portanto, não se aplica.composere comgit ls-remote https://github.com/LibreCodeCoop/nfse-php.git HEADfalhando em DNS (Could not resolve host: github.com). Por isso não alegar execução decomposer test,composer domains:check,composer domains:contract-matrix,composer cs:check,composer psalmem novo checkout/branch. Não criar PR de código nem solicitar validação sob essa limitação. Não houve emissão fiscal, uso de certificado real, merge ou alteração de workflow.Condições objetivas para destravar
gIBSCBSAjuste.emit(DpsData)e seus bytes inalterados; provar assinatura sintética, fake SEFIN, erro claro para preview não transmissível e recuperação de resposta ambígua. Rodar verificações Composer e CI em branch revisável, revisão DCO/GPG e migração downstream sem alterar o consumidor aqui.Estado proposto: #121 permanece aberta, bloqueada por comprovação oficial do XSD/ativação, não por falta de implementação de um preview.
Ampliação da pesquisa de fonte primária — verificação direta em 12/10/2026
Cronograma oficial reproduzido: a notícia de 09/10 inclui imagem
cronograma-nt-009.jpgcom três marcos detalhados:previewNt009Dpsrepresenta integralmente o subconjunto ativado em 01/10.Fonte: https://www.gov.br/nfse/pt-br/noticias/publicado-o-ato-tecnico-conjunto-rfb-cgibs-no-7-aprovando-a-versao-1-01-da-nota-tecnica-009-nfs-e-e-a-nota-tecnica-010-da-nfs-e-via/cronograma-nt-009.jpg/@@images/7c071620-4685-4850-b797-85fa83a00764.jpeg
Divergências de versionamento confirmadas visualmente entre documentos primários:
1.041.021.04.011.02.011.04.011.03.00O ato tem efeitos jurídicos na data de publicação (art. 2º), não estabelece por si só a implantação de XSD/SEFIN. Não foi localizada retificação expressa que equipare as três numerações. Evitar tanto afirmar que a versão
1.03.00é inválida quanto presumir aprovação formal de cada revisão; requer confirmação oficial se houver impacto na regra aplicada.Fontes: https://www.gov.br/receitafederal/pt-br/acesso-a-informacao/acoes-e-programas/programas-e-atividades/reforma-tributaria-do-consumo/legislacao/atos-tecnicos-conjuntos/ato-tecnico-conjunto-rfb-cgibs-no-7-de-28-de-setembro-de-2026 ; https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/rtc/nota-tecnica-009-se-cgnfs-e-v-1-01.pdf ; https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/rtc
Condições fiscais documentadas que não podem virar validação global infundada: a NT009 §2.16 vincula
gIBSCBSecIndOpao atributo oficialind_gIBSCBSdo CST/cClassTrib, com atenção aos CST 400/410/820; o Anexo VIII é expressamente consultivo. A NT009 §2.2 afirma que certas regras para notas de ajuste no workbook estão tachadas por ainda estarem em evolução. O caminho degIBSCBSAjusteno PDF diverge da matriz do Anexo VI (linhas 428–430), portanto o preview segue sem homologação de hierarquia. Separar regras estruturais de obrigações fiscais por contribuinte/competência.Referência: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/rtc/nota-tecnica-009-se-cgnfs-e-v-1-01.pdf (páginas 4, 21–23).
Limite da documentação do preview: no checkout
60c4fad793c6562820e36085eeb8dab2c0f68b1f,Nt009DpsPreviewDataé deliberadamente incompleto em relação a todos os campos previstos pela NT009 (ex.:serv/comExte novoserv/atvEvento/cMunnão têm DTO/builder dedicated no preview), embora tenha outras estruturas NT009 para comparação. Uma suíte verde do preview, por si só, não demonstra aderência integral à NT009/Anexo VI. Verificar diferenças reais e escopo dos pacotes ao obter XSD efetivo, em vez de reaproveitar o preview como emissor.Verificação dos endpoints de documentação de SEFIN: a listagem oficial de APIs publica links Swagger específicos para produção restrita e produção, mas a tentativa de consulta pública GET das respectivas páginas
.../docs/indexretornou erro de gateway 502 na ferramenta web; não se usou certificado ou POST. O erro de consulta não é prova de indisponibilidade do serviço fiscal.Fonte: https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/apis-prod-restrita-e-producao
Comprovação complementar de homologação e canal oficial de esclarecimento — 12/10
indDest/dest, regra 17.05, validações de endereço,atvEvento/cMun, Nota do Tomador, retenção ISS e APIs. Esta é evidência oficial de atividade de homologação técnica, não de resultado de aceite público para a biblioteca nem publicação de novo pacote XSD por ambiente. No comunicado não aparecem hash, contrato XSD efetivo, erros/aceitações da SEFIN ou autorização de emitir XML completo.atendimento.nfs-e@rfb.gov.brestá desativado e orienta contribuintes a procurar a prefeitura; a prefeitura, caso necessário, consulta a RFB. Portanto, não recomendar enviar esclarecimento para o e-mail desativado, ainda que a página RTC antiga o mencione ao lado demunicipios.nfs-e@rfb.gov.brpara sugestões sobre o Anexo VIII. Para a ambiguidade de XSD/versão, encaminhar questionamento formal pelo canal municipal/institucional adequado, registrando pergunta, ambiente, pacote e data; não confundir sugestões do Anexo VIII com autorização de emissão.Conclusão mantida: evidência suficiente para localizar o ato, anexo, cronograma e os dois pacotes XSD anteriores; insuficiente para pacote XSD NT009 efetivo, regra de coexistência por pacote/ambiente, aceitação da SEFIN e resolução oficial das contradições. Permanecer com emissor antigo e preview não transmissível; nenhum novo contrato implementado.
vitormattos commentedon Oct 12, 2026
Complemento da auditoria normativa — 12/10/2026
Informe Técnico 2025.002 e obrigatoriedade condicional de IBS/CBS
A seção 2.16 da NT009 v1.01 referencia o Informe Técnico 2025.002 v1.60 para o indicador
ind_gIBSCBS, que determina a presença condicional decIndOpegIBSCBS, especialmente nas hipóteses dos CST 400, 410 e 820.O Ato Técnico Conjunto RFB/CGIBS nº 8/2026 aprova o Informe Técnico 2025.002 v1.70 expressamente no conjunto documental de NF-e/NFC-e. Isso não comprova substituição automática do referencial da NFS-e.
Antes de criar regras de emissão, confirmar a tabela efetivamente aplicável à NFS-e, sua vigência e a versão dos atributos de CST/cClassTrib. Não derivar
ind_gIBSCBSde códigos, descrições ou correlações consultivas sem suporte oficial.Divergências documentais ainda não resolvidas
gIBSCBSAjuste: o PDF da NT009 apresenta o grupo diretamente emIBSCBS/valores/trib; o Anexo VI v1.04.01 o apresenta emIBSCBS/valores/trib/gIBSCBS. O preview existente segue o Anexo VI. A hierarquia definitiva precisa ser confrontada com o XSD efetivo.Condição para retomar a implementação
Os índices oficiais continuam listando o XSD de produção de 09/02/2026 e o de produção restrita de 27/07/2026. Nenhum novo XSD NT009 integral foi identificado nesses índices até esta verificação.
Retomar a implementação somente após identificar, por ambiente e pacote, o XSD oficial efetivo, sua data de implantação, origem, integridade e regras aceitas. Confrontar os novos arquivos com a matriz da #95; depois executar testes sintéticos de serialização, validação XSD offline, assinatura, fake SEFIN e recuperação.
Preservar
NfseClient::emit(DpsData), o preview não transmissível, a emissão histórica e o pin atual do Akaunting até existir contrato verificável. Não reutilizar o XSD da NFS-e Via como substituto do contrato da NFS-e Nacional.Fontes primárias
Estado: bloqueio externo documentado. Não há evidência suficiente para ativar o novo contrato. Nenhuma alteração de código ou emissão fiscal foi realizada.