NFSe Nacional · NT009

Reforma Tributária:
NT009 v1.01 · RTC009

Guia completo dos novos campos e regras da Nota Técnica 009 v1.01 na NFSe Nacional: o que muda no leiaute, o que o PlugNotas faz por você e o que você precisa informar.

📅 Produção (cronograma Sefin): 03/11/2026
📄 NT009 v1.01 — SE/CGNFS-e
🔧 versaoEsquema = RTC009

O que é a NT009?

A Nota Técnica 009 (versão 1.01) adequa o leiaute da NFS-e Nacional à Reforma Tributária do Consumo (IBS e CBS): notas de ajuste de débito e crédito, unificação dos ajustes de base de cálculo, locação de imóveis por unidade imobiliária, comércio exterior, bens móveis, pagamentos vinculados, informações de evento, Simples Nacional e o reposicionamento de campos no XML. O resumo dos 16 itens da nota está no artigo da Central de Atendimento.

No PlugNotas a NT009 é opt-in por nota: você ativa o novo modelo informando versaoEsquema: "RTC009" no JSON da NFSe.

①
versaoEsquema: "RTC009"
Ativa o modelo NT009 na nota. Sem ele, nada muda — o XML sai como antes.
②
A API cuida do leiaute
Reposiciona CST/cClassTrib e finalidade no XML (e a ordem do cServ). Você não precisa mudar o JSON por causa disso.
③
Você informa os campos novos
Comércio exterior, ajustes de BC, locação, bens móveis, pagamentos, evento e Simples Nacional, quando se aplicam à operação.
✅
Sem versaoEsquema: "RTC009" nada muda. Os campos e comportamentos da NT009 só valem com RTC009. Quem não usa o novo modelo continua com o XML exatamente como hoje, e os campos exclusivos da NT009 que forem enviados por engano são descartados, sem erro.
💡
RTC009 inclui as regras da RTC007. Retenção (retencao) e apuração própria (apuracaoPropria) de PIS/COFINS/CSLL funcionam do mesmo jeito, com cálculo automático de tpRetPisCofins e vRetCSLL. Por isso, nos exemplos abaixo, o XML traz o grupo piscofins (CST 00, tpRetPisCofins 0) mesmo sem retenção. Veja o guia da NT007.

O que a API faz sozinha

Item Sem RTC009 Com RTC009
finNFSe, tpNFSeDebito, tpNFSeCreditofinNFSe dentro de IBSCBS; tpNFSe* ignoradosRaiz de infDPS
indDest e destDentro de IBSCBSDentro de IBSCBS (Release 1). Raiz de infDPS, logo após toma, só quando a Release 2 for liberada (item 2.11)
xDescServ e cAtvSN em serv/cServxDescServ antes de cNBSOrdem do XSD oficial: cTribNac, cTribMun, cNBS, cAtvSN, cIntContrib, xDescServ
CST e cClassTribDentro de gIBSCBSEm valores/trib, antes de gIBSCBS
cIndOp (codigoOperacao)ObrigatórioOpcional (a Sefin valida)
Imóvelimovel/inscImobFisc, cCIB ou end diretocMun, gLocacao e gUnidImob
Campos novos (comércio exterior, ajustes, bens móveis, pagamentos…)DescartadosEnviados. Os ainda não aceitos pelo ambiente nacional retornam erro (veja Disponibilidade na Sefin)
Retenção/apuração própria de PIS/COFINS/CSLLModelo anterior (ou RTC007, se informado)Modelo RTC007 incluído
Consulta da nota autorizada—versaoCalculadoraIBSCBS, quando a Sefin informa

Cronograma divulgado pela Sefin

QuandoAmbienteItens
15/10/2026Produção restritaRelease 1: novos fatos geradores (99.02 a 99.04, incluindo locação), CST/cClassTrib (item 2.16) e ajuste de BC (2.3)
30/10/2026Produção restritaRelease 2: versão da calculadora, validação de endereços, indDest/dest, comércio exterior, ajuste de BC no comércio exterior e evento (2.9 a 2.14)
03/11/2026ProduçãoReleases 1 e 2

Itens sem data no cronograma: notas de ajuste (2.2), Simples Nacional (2.4), indFinal (2.5), pagamentos vinculados (2.8) e condomínios (2.15).

⚠️
O cronograma é o divulgado pela Sefin Nacional e pode mudar. Em homologação (produção restrita) a Sefin já só autoriza notas com RTC009; em produção, o leiaute anterior continua aceito até a Sefin mudar. O XSD oficial da produção restrita (20/10/2026) traz só a Release 1 da NT009 (o PlugNotas segue o AnexoVI v1.04.01 e libera cada item, por ambiente, quando a Sefin publicar o XSD correspondente). Teste suas notas em homologação com RTC009 antes da produção e acompanhe o artigo da Central.

Disponibilidade na Sefin (Release 1 × Release 2)

O XSD oficial da produção restrita (20/10/2026) traz só a Release 1 da NT009. Tudo o que a NT009 define continua documentado aqui, mas o PlugNotas e o Componente bloqueiam os campos que a Sefin ainda não aceita: se algum deles for informado com RTC009, a API devolve erro 400 e o Componente rejeita o TX2, com a mensagem "... ainda não é aceito pelo ambiente nacional". No PlugNotas cada item é liberado separadamente e por ambiente, conforme a Sefin (primeiro em homologação, a produção restrita, e depois em produção); até a liberação o padrão é bloqueado. No Componente o bloqueio também segue essa liberação por ambiente, atualizada pelo AtualizarArquivos.

Situação na SefinItens da NT009Campos (API)
Aceito (Release 1)2.3, 2.6, 2.7, 2.16 e finNFSe na raiz de infDPSajusteBC, valorAjusteBCISSQN/percentualAjusteBCISSQN, imovel.* (locação), bensMoveis, valores.tributacao (CST/cClassTrib), codigoOperacao opcional, finalidadeNFSe = 0
Release 2 — ainda não aceito2.12, 2.13 e 2.14infExterior.numeroFatura, valorFatura, numeroDUIMP, numeroDUE, numeroContratoCambio, modoPrestacao = 5; ibscbs.valorAjusteBCIBSCBSComExt; evento.codigoCidade
Sem data de implantação — ainda não aceito2.2 (restante), 2.4 e 2.8finalidadeNFSe = 1/2, tpNFSeDebito, tpNFSeCredito, valores.ajusteIBSCBS; regimeApuracaoIBSCBSSN, codigoAtividadeSN (e opSimpNac = 4 no Componente); pagamentosVinculados
Release 2 — posição provisória2.11destinatario (indDest/dest): dentro de IBSCBS até a liberação; depois, raiz de infDPS

Liberação por item e por ambiente. Cada item (2.2, 2.4, 2.8, 2.11, 2.12, 2.13 e 2.14) é liberado separadamente, e a liberação vale para um ambiente de cada vez, conforme a Sefin passa a aceitar o item (homologação primeiro, produção depois). Liberar um item não libera os outros: por exemplo, o item 2.12 pode ser liberado enquanto o 2.4 continua bloqueado. A posição de indDest/dest segue o item 2.11: bloqueado, vão dentro de IBSCBS; liberado, vão na raiz de infDPS. As regras do item 2.12 (nDI/nRE, E0352/E0354/E0356 e valorServicos obrigatório) também seguem o estado desse item no ambiente da empresa. A liberação vale na validação da nota pela API e no envio à Sefin; uma mudança na liberação passa a valer em até 1 minuto.

⚠️
Comércio exterior (item 2.12) enquanto bloqueado: numeroDeclaracaoImp (nDI) e numeroRegistroExp (nRE) são aceitos e enviados com RTC009 (o XSD oficial ainda os tem); numeroDUIMP e numeroDUE são rejeitados; as regras E0352, E0354 e E0356 valem sobre nDI/nRE (com tipoMovimentacaoBens = 2, nDI é obrigatório; com 1, nDI e nRE não são permitidos; com 3, nRE é obrigatório); valorServicos (vServMoeda) é obrigatório. Quando o item 2.12 for liberado a situação se inverte: nDI/nRE passam a ser rejeitados, valem nDUIMP/nDUE e as três regras passam a valer sobre nDUIMP/nDUE.
⚠️
indDest e finNFSe são obrigatórios com RTC009: o XSD oficial exige os dois (indDest dentro de IBSCBS, na Release 1, e finNFSe na raiz de infDPS). Informe ibscbs.destinatario.indicador (0 quando o destinatário é o próprio tomador) e ibscbs.finalidadeNFSe; sem eles o ambiente nacional rejeita a nota. A API e o Componente não preenchem esses campos sozinhos. Hoje só finalidadeNFSe = 0 é aceito.
💡
Fora do PlugNotas por enquanto: operações de condomínios (código 99.05.01 e grupo condominios, item 15 da NT) ainda não estão disponíveis na API, e a emissão por tomador/intermediário tem estória própria (não faz parte da NT009).

Como preencher cada campo

Todos os campos abaixo só valem com versaoEsquema: "RTC009". Os caminhos são relativos a servico[] (índice 0) da NFSe, salvo quando indicado. O rótulo → ... mostra o campo gerado no XML. Os campos com a faixa ⚠️ Ainda não aceito pelo ambiente nacional estão documentados, mas retornam erro se forem informados (veja Disponibilidade na Sefin).

Ativação raiz da NFSe

versaoEsquema raiz.
→ (sem tag: ativa o leiaute)
Liga o modelo NT009. Valor "RTC009". Sem ele, os campos e comportamentos desta página não se aplicam. Inclui as regras da RTC007.

Notas de ajuste itens 2.2 e 2.16

finalidadeNFSe ibscbs.
→ finNFSe
Finalidade da nota: 0 normal, 1 crédito, 2 débito. Com RTC009 o campo vai para a raiz de infDPS (a API cuida da posição).
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.2, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado. Hoje só 0 (normal) é aceito: 1 e 2 retornam erro.
Obrigatório com RTC009: o XSD oficial exige o finNFSe em infDPS; sem ele o ambiente nacional rejeita a nota. A API não preenche sozinha.
tpNFSeDebito ibscbs.
→ tpNFSeDebito
Tipo da nota de ajuste de débito, obrigatório com finalidadeNFSe = 2: 01 transferência de créditos para cooperativas, 02 anulação de crédito por saídas imunes/isentas, 03 débitos de notas não processadas, 04 multa e juros, 05 transferência de crédito na sucessão, 06 pagamento antecipado.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.2, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.
tpNFSeCredito ibscbs.
→ tpNFSeCredito
Tipo da nota de ajuste de crédito, obrigatório com finalidadeNFSe = 1: 01 multa e juros, 05 transferência de crédito na sucessão.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.2, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.
valorIBS / valorCBS ibscbs.valores.ajusteIBSCBS.
→ gIBSCBSAjuste/vIBS
→ gIBSCBSAjuste/vCBS
Valores de IBS e CBS a ajustar. Informe com débito 01, 02, 03 ou 05, ou com crédito 05 (regra do AnexoVI, validada pela Sefin).

⚠️ A posição exata do grupo gIBSCBSAjuste dentro de valores/trib ainda será confirmada com a Sefin, porque o texto da NT e o AnexoVI divergem; se necessário, a API será ajustada.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.2, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.

Comércio exterior itens 2.12 e 2.13

modoPrestacao infExterior.
→ comExt/mdPrestacao
Modo de prestação. Novo valor 5: consumo concomitante no território nacional e no exterior. O 5 só é aceito com RTC009: sem ele a validação recusa a nota. A Sefin não aceita o valor 0 (Desconhecido).
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.12, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado. Vale para o valor 5; os valores 0 a 4 seguem aceitos.
numeroFatura infExterior.
→ comExt/nFatura
Número da fatura: somente dígitos, de 1 a 20.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.12, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.
valorFatura infExterior.
→ comExt/vFatura
Valor da fatura.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.12, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.
numeroDUIMP infExterior.
→ comExt/nDUIMP
Número da Declaração Única de Importação: exatamente 15 caracteres. Com tipoMovimentacaoBens = 2 é obrigatório (erro E0352); com tipoMovimentacaoBens = 1 não pode ser informado (erro E0354).
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.12, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado. As regras E0352/E0354 passam a valer sobre este campo depois da liberação; enquanto isso, valem sobre numeroDeclaracaoImp/numeroRegistroExp.
numeroDUE infExterior.
→ comExt/nDUE
Número da Declaração Única de Exportação: exatamente 14 caracteres. Com tipoMovimentacaoBens = 3 é obrigatório (erro E0356); com tipoMovimentacaoBens = 1 não pode ser informado (erro E0354).
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.12, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado. As regras E0354/E0356 passam a valer sobre este campo depois da liberação; enquanto isso, valem sobre numeroDeclaracaoImp/numeroRegistroExp.
numeroContratoCambio infExterior.
→ comExt/nContCambio
Número do contrato de câmbio ou do documento que comprove o pagamento: somente dígitos, de 1 a 20.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.12, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.
numeroDeclaracaoImp / numeroRegistroExp infExterior.
→ comExt/nDI
→ comExt/nRE
Com RTC009 são aceitos e enviados enquanto o item 2.12 não é aceito pelo ambiente nacional (o XSD oficial da Release 1 ainda tem nDI/nRE e não tem nDUIMP/nDUE). Quando o item 2.12 for liberado eles passam a ser rejeitados: informe numeroDUIMP no lugar de numeroDeclaracaoImp e numeroDUE no lugar de numeroRegistroExp. DI/RE e DUIMP/DU-E são documentos diferentes, por isso não há conversão automática. Sem RTC009 nada muda.
valorAjusteBCIBSCBSComExt ibscbs.
→ valores/vAjusteBC/vAjusteBCIBSCBSComExt
Ajuste da base de cálculo do IBS/CBS no comércio exterior, sem alterar o valor do serviço. Aceita valor negativo. Usos previstos: diferença cambial em relação à PTAX, importação de serviços financeiros e operações entre partes relacionadas.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.13, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.

Ajuste da base de cálculo item 2.3

ajusteBC[] ibscbs.
→ valores/vAjusteBC/documentos/docAjusteBC
Ajustes da base de cálculo por documento. Substitui os grupos vDedRed e gReeRepRes do leiaute anterior (deducao e valores.operacao.documentosReferenciados na API). Use este grupo no lugar deles: com RTC009 a API rejeita deducao e documentosReferenciados (veja "Deduções e reembolsos" abaixo). Obrigatórios por item: tipoAjuste, valorTotalDocumento e valorAjusteAplicado.
tipoAjuste ibscbs.ajusteBC[].
→ tpAjusteBC
Valores aceitos: 2 materiais, 5 repasse consorciado, 6 repasse plano de saúde, 7 serviços, 8 subempreitada de mão de obra, 9 profissional parceiro, 99 outras deduções exclusivas do ISSQN, 101 a 105 (intermediação imobiliária, agência de turismo, publicidade e propaganda, glosa de serviços de saúde) e 199 outros reembolsos/ressarcimentos. Com 99 ou 199 informe descricaoAjuste (xTpAjusteBC).

Tipos 1, 3 e 4 são rejeitados. Eles existiam no antigo vDedRed e foram descontinuados pela NT 2.3 da NT009 v1.01 (1 alimentação e bebidas/frigobar não pode ser incluída na NFS-e; 3 produção externa e 4 reembolso de despesas foram absorvidos por 103, 104 e 199).
valorTotalDocumento / valorAjusteAplicado ibscbs.ajusteBC[].
→ vTotDoc
→ vAjusteAplic
Valor total do documento e valor efetivamente usado no ajuste (menor ou igual ao total). O nome do campo no XML é vAjusteAplic (a v1.00 do leiaute tinha vAjuteAplic; a NT009 v1.01 corrigiu e a API já envia o nome novo).
nacional | fiscal | naoFiscal ibscbs.ajusteBC[].
→ dFeNacional
→ docFiscalOutro
→ docOutro
Documento de referência do ajuste: nacional (chave de DF-e do repositório nacional), fiscal (documento fiscal fora do repositório) ou naoFiscal. Informe apenas um por item. O fornecedor (fornec) é opcional.
percentualAjusteBCISSQN / valorAjusteBCISSQN ibscbs.
→ vAjusteBC/pAjusteBCISSQN
→ vAjusteBC/vAjusteBCISSQN
Percentual ou valor padrão de ajuste da base de cálculo do ISSQN. Sem RTC009 os campos são ignorados (a nota segue sem eles, sem erro). São a substituição de valor.deducoes e valor.percentualDeducoes, que com RTC009 são rejeitados.

Imóvel e locação item 2.6

codigoMunicipio ibscbs.imovel.
→ imovel/cMun
Código IBGE do município do imóvel. Todas as unidades da operação devem estar no mesmo município.
locacao ibscbs.imovel.
→ imovel/gLocacao/pCopropriedade
→ vTotOper
→ vDescIncondTot
→ vDescCondTot
→ dVencOrig
Obrigatório para locação, cessão onerosa e arrendamento (subitem 99.03, servico.codigo = "990301") e proibido nos demais. Campos: percentualCopropriedade (0 a 100), valorTotalOperacao, valorDescontoIncondicionadoTotal, valorDescontoCondicionadoTotal e dataVencimentoOriginal (apenas informativa).

O valor do serviço e os descontos da nota precisam ser proporcionais à copropriedade: vServ = pCopropriedade × vTotOper. A API não faz esse cálculo.
unidadesImoveis[] ibscbs.imovel.
→ imovel/gUnidImob
Unidades imobiliárias da operação. Obrigatório quando codigoOperacao for 020101, 020201 ou 020301. Em cada unidade, informe codigoCIB (8 caracteres) ou endereco, não os dois: são alternativos e, com RTC009, informar os dois na mesma unidade retorna erro de validação. inscricaoFiscal é opcional.
ajustesBCLocImoveis[] ibscbs.imovel.unidadesImoveis[].
→ gAjusteBCLocImoveis/tpAjusteBCLocImoveis
→ xTpAjusteBCLocImoveis
→ vAjusteBCLocImoveis
Parcelas que não entram na base do IBS/CBS (IPTU, condomínio, redutor social…): tipoAjuste 01 tributos, 02 emolumento, 03 condomínio, 04 redutor social, 99 outras (com descricaoAjuste; a descrição só pode ser informada com o tipo 99, erro E0954). Informe o valor total da parcela, não o proporcional do coproprietário. Até 10 por unidade.
inscricaoFiscal / codigoCIB / endereco ibscbs.imovel.
→ (formato anterior à NT009)
Compatibilidade. No nível raiz de imovel são usados só sem RTC009. Com RTC009 a API rejeita a nota se qualquer um deles vier preenchido (erro de validação): use codigoMunicipio, locacao e unidadesImoveis.

Bens móveis item 2.7

bensMoveis[] ibscbs.
→ bensMoveis/cNCMBemMovel
→ xNCMBemMovel
→ qtdNCMBemMovel
Bens móveis objeto de locação (era gLocBensMoveis). Só para locação de bens móveis (subitem 99.04.01). Por item: ncm (8 dígitos), descricao e quantidade (até 999), todos obrigatórios. Até 1.000 itens.

Pagamentos vinculados item 2.8

pagamentosVinculados[] ibscbs.
→ gPgtoVinc/pgto/nPag
→ idTransacao
→ tpMeioPgto
→ CNPJReceb
→ CNPJBasePSP
Vincula a nota às transações de pagamento. Por item, todos obrigatórios: numeroPagamento (1 a 999), identificadorTransacao (2 a 35 caracteres), tipoMeioPagamento (texto, por exemplo "17": 15 boleto, 17 Pix QRCode dinâmico, 18 TED, 20 Pix chave ou QRCode estático, 23 Pix automático, 24 TEF/booktransfer), cnpjRecebedor e cnpjBasePSP (8 dígitos). Até 99 itens.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.8, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.

Simples Nacional item 2.4

regimeApuracaoIBSCBSSN cadastro da empresa
→ prest/regTrib/regApIBSCBSSN
Regime de apuração do IBS/CBS para optantes do Simples Nacional. É informado no cadastro da empresa (não na nota): 1 IBS e CBS apurados pelo SN, 2 CBS pelo SN e IBS pelo regime regular (quem ultrapassou os sublimites), 3 IBS e CBS pelo regime regular.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.4, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.
codigoAtividadeSN servico[].
→ serv/cServ/cAtvSN
Código da atividade do Simples Nacional (7, 8, 9, 10, 11, 12, 13, 14 ou 90). Obrigatoriedade bicondicional: 10 só para o subitem 16.01; 11 só para o 99.04.01; 12 ou 13 para 7.02 e 7.05. Não informe para prestador não optante nem MEI.
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.4, sem data de implantação definida pela Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.

Evento item 2.14

codigoCidade servico[].evento.
→ atvEvento/cMun
Município do evento (IBGE, 7 dígitos). Informe somente nos subitens 12.13 e 17.10 e quando o município do evento for diferente do local da prestação. No subitem 17.10 o grupo evento é obrigatório (e no item 12 também).
⚠️ Ainda não aceito pelo ambiente nacional (NT009 item 2.14, Release 2 da Sefin). Até a liberação, a API/o componente retorna erro se o campo for informado.

CST, cClassTrib e cIndOp item 2.16

cst / cct ibscbs.valores.tributacao.
→ valores/trib/CST
→ valores/trib/cClassTrib
Na NT009 os dois campos passam a ficar direto em valores/trib, antes de gIBSCBS. A API faz isso sozinha. Para CST sem o grupo gIBSCBS (por exemplo 400, 410 e 820) informe somente cst e cct.
codigoOperacao ibscbs.
→ IBSCBS/cIndOp
Opcional com RTC009 (a Sefin valida a consistência com o CST na autorização; a API não calcula o indicador). Para CST sem gIBSCBS, não informe: o XML sai sem cIndOp. Sem RTC009 continua obrigatório.

Destinatário item 2.11

destinatario ibscbs.
→ IBSCBS/indDest
→ IBSCBS/dest
indicador (0 o destinatário é o próprio tomador, 1 é outra pessoa/estabelecimento) e os dados do destinatário. Com RTC009 o XML leva indDest e dest dentro de IBSCBS (posição da Release 1) enquanto a Release 2 da Sefin (item 2.11) não é aceita pelo ambiente nacional; quando o item 2.11 for liberado para o seu ambiente (conforme a Sefin), a API passa a gravá-los na raiz de infDPS, logo após o tomador, sem mudança no JSON. O indDest é obrigatório no leiaute oficial e a API só o envia se indicador for informado: informe sempre destinatario.indicador (0 quando o destinatário é o próprio tomador); com RTC009 ele é obrigatório e, sem ele, o ambiente nacional rejeita a nota. Atenção: a Sefin passa a rejeitar a DPS quando o município informado diverge do cadastro do CPF/CNPJ (item 2.10).

Retorno da consulta item 2.9

versaoCalculadoraIBSCBS consulta da nota (somente leitura)
→ NFSe/infNFSe/verCalcIBSCBS
Versão da Calculadora IBS/CBS usada pela Sefin, devolvida na consulta da nota autorizada: em retorno.versaoCalculadoraIBSCBS na consulta completa (GET /nfse/{id}) e em versaoCalculadoraIBSCBS na consulta resumida (GET /nfse/consultar/{id}). Não é um campo de entrada; só aparece quando a Sefin o informa.

Quando informar o quê

Consulte a situação da sua nota para saber o que informar (sempre com versaoEsquema: "RTC009").

💡
As regras de consistência (por exemplo, CST × grupos do IBS/CBS) são validadas pela Sefin na autorização. Em caso de dúvida sobre a classificação tributária da operação, consulte seu contador.
Situação Informe Não informe / atenção
Locação, cessão onerosa ou arrendamento de imóvelservico.codigo = 990301 (99.03) imovel.locacao (obrigatório), imovel.codigoMunicipio, codigoOperacao = 02XXXX, unidadesImoveis (obrigatório com 020101/020201/020301) Valor do serviço = percentualCopropriedade × valorTotalOperacao (e os descontos também). Não use os campos legados do imovel.
CST sem grupo gIBSCBSex.: 400, 410, 820 Somente valores.tributacao.cst e cct Não informe codigoOperacao nem dados de gIBSCBS (crédito presumido, tributação regular, diferimento)
CST com grupo gIBSCBS cst, cct e, se houver, os dados do grupo codigoOperacao é opcional com RTC009; a Sefin valida a consistência
Comércio exterior com câmbio diferente da PTAX ibscbs.valorAjusteBCIBSCBSComExt (positivo ou negativo) — ⚠️ ainda não aceito pelo ambiente nacional (item 2.13, Release 2): hoje a API retorna erro O valor do serviço não muda; só a base de cálculo do IBS/CBS
Comércio exterior ligado a movimentação de bens tipoMovimentacaoBens = 2 → numeroDeclaracaoImp (nDI); = 3 → numeroRegistroExp (nRE). numeroDUIMP/numeroDUE só depois da liberação do item 2.12 ⚠️ Enquanto o item 2.12 não é aceito, numeroDUIMP e numeroDUE (e numeroFatura, valorFatura, numeroContratoCambio, modoPrestacao = 5) retornam erro, e as regras E0352/E0354/E0356 valem sobre nDI/nRE (com tipoMovimentacaoBens 2, nDI é obrigatório; com 1, nDI e nRE não são permitidos; com 3, nRE é obrigatório). Depois da liberação, nDI/nRE passam a ser rejeitados e as regras passam a valer sobre nDUIMP/nDUE.
Evento — subitem 17.10servico.codigo = 171001 evento (obrigatório). evento.codigoCidade (município diferente do da prestação) ⚠️ ainda não aceito pelo ambiente nacional (item 2.14, Release 2): hoje retorna erro codigoCidade só para 12.13 e 17.10
Locação de bens móveisservico.codigo = 990401 (99.04.01) bensMoveis; para Simples Nacional codigoAtividadeSN = 11 (⚠️ ainda não aceito pelo ambiente nacional, item 2.4: hoje retorna erro) bensMoveis só no 99.04.01
Prestador optante do Simples Nacional regimeApuracaoIBSCBSSN (cadastro da empresa) e codigoAtividadeSN: 16.01 → 10; 7.02/7.05 → 12 ou 13 — ⚠️ ainda não aceitos pelo ambiente nacional (item 2.4, sem data): hoje a API retorna erro Não optante e MEI: não informe codigoAtividadeSN
Nota de ajuste de débito ou crédito finalidadeNFSe 2 + tpNFSeDebito, ou 1 + tpNFSeCredito; valores.ajusteIBSCBS nos tipos previstos — ⚠️ ainda não aceito pelo ambiente nacional (item 2.2, sem data): hoje só finalidadeNFSe = 0 é aceito Ajuste de IBS/CBS: débito 01, 02, 03, 05; crédito 05
Reembolso, repasse, dedução ou glosa ibscbs.ajusteBC[] com tipoAjuste Não envie deducao nem documentosReferenciados junto (grupos unificados em vAjusteBC)

Exemplos de preenchimento

Em cada cenário, o JSON mostra só o trecho relevante (os demais campos da NFSe seguem como sempre) e o XML foi gerado de verdade pelo serviço de geração de XML do PlugNotas a partir desse JSON; exibimos apenas os grupos relacionados à NT009.

A
Locação de imóvel com copropriedade (99.03)
versaoEsquema = "RTC009"
API · JSON
{
  "versaoEsquema": "RTC009",
  "servico": [
    {
      "codigo": "990301",
      "codigoNbs": "110021000",
      "discriminacao": "Locação de imóvel",
      "valor": {
        "servico": 1000,  // = 50% × 2.000,00
        "descontoIncondicionado": 50,  // = 50% × 100,00
        "descontoCondicionado": 25  // = 50% × 50,00
      },
      "ibscbs": {
        "finalidadeNFSe": 0,  // obrigatório com RTC009 (finNFSe)
        "operacaoPessoal": 0,
        "codigoOperacao": "020101",  // 02XXXX para o 99.03
        "destinatario": { "indicador": 0 },  // obrigatório com RTC009 (indDest)
        "imovel": {
          "codigoMunicipio": 4115200,
          "locacao": {
            "percentualCopropriedade": 50,  // copropriedade
            "valorTotalOperacao": 2000,
            "valorDescontoIncondicionadoTotal": 100,
            "valorDescontoCondicionadoTotal": 50,
            "dataVencimentoOriginal": "2026-11-10"
          },
          "unidadesImoveis": [
            {
              "inscricaoFiscal": "123456789012",
              "codigoCIB": "12345678",  // CIB ou endereco
              "ajustesBCLocImoveis": [
                {
                  "tipoAjuste": "01",
                  "valorAjuste": 25.5
                }
              ]
            }
          ]
        }
      }
    }
  ]
}
XML gerado
<cServ>
  <cTribNac>990301</cTribNac>
  <cNBS>110021000</cNBS>
  <xDescServ>Locação de imóvel</xDescServ>
</cServ>
<vServPrest>
  <vServ>1000.00</vServ>
</vServPrest>
<vDescCondIncond>
  <vDescIncond>50.00</vDescIncond>
  <vDescCond>25.00</vDescCond>
</vDescCondIncond>
<IBSCBS>
  <indFinal>0</indFinal>
  <cIndOp>020101</cIndOp>
  <indDest>0</indDest>
  <imovel>
    <cMun>4115200</cMun>
    <gLocacao>
      <pCopropriedade>50.00</pCopropriedade>
      <vTotOper>2000.00</vTotOper>
      <vDescIncondTot>100.00</vDescIncondTot>
      <vDescCondTot>50.00</vDescCondTot>
      <dVencOrig>2026-11-10</dVencOrig>
    </gLocacao>
    <gUnidImob>
      <inscImobFisc>123456789012</inscImobFisc>
      <cCIB>12345678</cCIB>
      <gAjusteBCLocImoveis>
        <tpAjusteBCLocImoveis>01</tpAjusteBCLocImoveis>
        <vAjusteBCLocImoveis>25.50</vAjusteBCLocImoveis>
      </gAjusteBCLocImoveis>
    </gUnidImob>
  </imovel>
  <valores>
    <trib>
      <CST>000</CST>
      <cClassTrib>000001</cClassTrib>
    </trib>
  </valores>
</IBSCBS>
💡 Copropriedade de 50%: valor do serviço e descontos são metade dos totais da operação. A unidade é identificada pelo CIB (ou pelo endereço, nunca pelos dois). Para o 99.03 o cIndOp é 02XXXX.
B
Comércio exterior sem campos da Release 2 (nDI aceito)
numeroDeclaracaoImp
API · JSON
{
  "versaoEsquema": "RTC009",
  "tomador": {
    "razaoSocial": "Acme GmbH",
    "codigoEstrangeiro": "DE123456789",
    "endereco": {
      "codigoPais": "DE",  // país diferente de BR/1058 (ou codigoCidade 9999999) indica endereço no exterior: o XML leva só endExt
      "cep": "10115",  // código postal do exterior: 1 a 11 caracteres
      "estado": "Berlin",  // obrigatório: estado/província/região do exterior
      "descricaoCidade": "Berlin",
      "logradouro": "Friedrichstrasse",  // obrigatório no exterior
      "numero": "10",  // obrigatório no exterior
      "bairro": "Mitte"  // obrigatório no exterior
    }
  },
  "servico": [
    {
      "valor": {
        "servico": 5000
      },
      "ibscbs": {
        "finalidadeNFSe": 0,  // obrigatório com RTC009
        "destinatario": { "indicador": 0 }  // obrigatório com RTC009
      },
      "infExterior": {
        "modoPrestacao": 1,
        "vinculoPrestacao": 0,
        "tipoMoeda": "220",
        "valorServicos": 1000,  // obrigatório enquanto o item 2.12 não é aceito
        "tipoFomentoPrestador": "01",
        "tipoFomentoTomador": "01",
        "tipoMovimentacaoBens": 2,
        "numeroDeclaracaoImp": "123456789012",  // nDI: aceito até a liberação do item 2.12
        "tipoMDIC": 0
      }
    }
  ]
}
XML gerado
<comExt>
  <mdPrestacao>1</mdPrestacao>
  <vincPrest>0</vincPrest>
  <tpMoeda>220</tpMoeda>
  <vServMoeda>1000.00</vServMoeda>
  <mecAFComexP>01</mecAFComexP>
  <mecAFComexT>01</mecAFComexT>
  <movTempBens>2</movTempBens>
  <nDI>123456789012</nDI>
  <mdic>0</mdic>
</comExt>
⚠️ Este exemplo não usa campos ainda não aceitos pelo ambiente nacional. Se algum deles for informado, a API devolve erro 400.
  • Item 2.12 (Release 2 da Sefin), fora até a liberação: modoPrestacao = 5, numeroFatura, valorFatura, numeroDUIMP, numeroDUE e numeroContratoCambio. Enquanto isso, numeroDeclaracaoImp (nDI) é aceito e enviado.
  • Item 2.13: valorAjusteBCIBSCBSComExt.
  • Tomador estrangeiro (o mesmo vale para o intermediário no exterior): cep (código postal do exterior, de 1 a 11 caracteres), estado (estado, província ou região, em texto), logradouro, numero e bairro são obrigatórios na API.
  • Com RTC009, informe também indicador do destinatário e finalidadeNFSe.
C
CST 400 sem codigoOperacao e sem gIBSCBS
cst = "400"
API · JSON
{
  "versaoEsquema": "RTC009",
  "servico": [
    {
      "ibscbs": {
        "finalidadeNFSe": 0,
        "operacaoPessoal": 0,  // codigoOperacao: não informar (CST 400)
        "destinatario": { "indicador": 0 },  // obrigatório com RTC009 (indDest)
        "valores": {
          "tributacao": {
            "cst": "400",  // CST sem gIBSCBS
            "cct": "400001"
          }
        }
      }
    }
  ]
}
XML gerado
<IBSCBS>
  <indFinal>0</indFinal>
  <indDest>0</indDest>
  <valores>
    <trib>
      <CST>400</CST>
      <cClassTrib>400001</cClassTrib>
    </trib>
  </valores>
</IBSCBS>
💡 O XML sai só com CST e cClassTrib em valores/trib: sem cIndOp e sem gIBSCBS. A Sefin valida a consistência do CST na autorização.
D
Evento do subitem 17.10, com destinatário
servico.codigo = "171001"
API · JSON
{
  "versaoEsquema": "RTC009",
  "servico": [
    {
      "codigo": "171001",  // subitem 17.10: evento obrigatório
      "evento": {
        "id": "EVT-2026-001",
        "descricao": "Feira de Negócios do Paraná",
        "dataInicio": "2026-11-20",
        "dataFim": "2026-11-22"
      },
      "ibscbs": {
        "finalidadeNFSe": 0,
        "operacaoPessoal": 0,
        "codigoOperacao": "100301",
        "destinatario": {
          "indicador": 1,
          "cpfCnpj": "99888777000166",
          "razaoSocial": "Organizadora de Eventos LTDA",
          "endereco": {
            "codigoCidade": "4106902",
            "cep": "80010000",
            "logradouro": "Rua XV de Novembro",
            "numero": "500",
            "bairro": "Centro"
          }
        },
        "valores": {
          "tributacao": {
            "cst": "000",
            "cct": "000001"
          }
        }
      }
    }
  ]
}
XML gerado
<finNFSe>0</finNFSe>
<atvEvento>
  <xNome>Feira de Negócios do Paraná</xNome>
  <dtIni>2026-11-20</dtIni>
  <dtFim>2026-11-22</dtFim>
  <idAtvEvt>EVT-2026-001</idAtvEvt>
</atvEvento>
<IBSCBS>
  <indFinal>0</indFinal>
  <cIndOp>100301</cIndOp>
  <indDest>1</indDest>
  <dest>
    <CNPJ>99888777000166</CNPJ>
    <xNome>Organizadora de Eventos LTDA</xNome>
    <end>
      <endNac>
        <cMun>4106902</cMun>
        <CEP>80010000</CEP>
      </endNac>
      <xLgr>Rua XV de Novembro</xLgr>
      <nro>500</nro>
      <xBairro>Centro</xBairro>
    </end>
  </dest>
  <valores>
    <trib>
      <CST>000</CST>
      <cClassTrib>000001</cClassTrib>
    </trib>
  </valores>
</IBSCBS>
💡 indDest/dest dentro de IBSCBS (posição da Release 1; vão para a raiz de infDPS só quando a Release 2 for liberada) e CST/cClassTrib em valores/trib. ⚠️ O município do evento (evento.codigoCidade → atvEvento/cMun) não é usado aqui porque ainda não é aceito pelo ambiente nacional (item 2.14, Release 2 da Sefin).
E
Nota legada (sem RTC009), para comparação com o cenário D
sem versaoEsquema
API · JSON
{
  "servico": [
    {
      "codigo": "171001",  // versaoEsquema não informado
      "evento": {
        "id": "EVT-2026-001",
        "descricao": "Feira de Negócios do Paraná",
        "dataInicio": "2026-11-20",
        "dataFim": "2026-11-22"
      },
      "ibscbs": {
        "finalidadeNFSe": 0,
        "operacaoPessoal": 0,
        "codigoOperacao": "100301",
        "destinatario": {
          "indicador": 1,
          "cpfCnpj": "99888777000166",
          "razaoSocial": "Organizadora de Eventos LTDA",
          "endereco": {
            "codigoCidade": "4106902",
            "cep": "80010000",
            "logradouro": "Rua XV de Novembro",
            "numero": "500",
            "bairro": "Centro"
          }
        },
        "valores": {
          "tributacao": {
            "cst": "000",
            "cct": "000001"
          }
        }
      }
    }
  ]
}
XML gerado
<atvEvento>
  <xNome>Feira de Negócios do Paraná</xNome>
  <dtIni>2026-11-20</dtIni>
  <dtFim>2026-11-22</dtFim>
  <idAtvEvt>EVT-2026-001</idAtvEvt>
</atvEvento>
<IBSCBS>
  <finNFSe>0</finNFSe>
  <indFinal>0</indFinal>
  <cIndOp>100301</cIndOp>
  <indDest>1</indDest>
  <dest>
    <CNPJ>99888777000166</CNPJ>
    <xNome>Organizadora de Eventos LTDA</xNome>
    <end>
      <endNac>
        <cMun>4106902</cMun>
        <CEP>80010000</CEP>
      </endNac>
      <xLgr>Rua XV de Novembro</xLgr>
      <nro>500</nro>
      <xBairro>Centro</xBairro>
    </end>
  </dest>
  <valores>
    <trib>
      <gIBSCBS>
        <CST>000</CST>
        <cClassTrib>000001</cClassTrib>
      </gIBSCBS>
    </trib>
  </valores>
</IBSCBS>
⚠️ Mesmos dados do cenário D, sem versaoEsquema: finNFSe, indDest/dest e CST/cClassTrib ficam nas posições antigas (dentro de IBSCBS/gIBSCBS). Hoje a única diferença de posição para o cenário D é finNFSe (raiz de infDPS com RTC009) e CST/cClassTrib. A nota também não traz o grupo piscofins, que vem do modelo RTC007 incluído na RTC009.
⚠️
Os exemplos usam valores ilustrativos de CST/cClassTrib e de códigos de operação. A consistência desses códigos para a sua operação é validada pela Sefin na autorização.

Como migrar para a RTC009

A migração é opcional e por nota: você pode usar RTC009 em algumas notas e manter as demais como estão. Veja o que muda no JSON.

Imóvel: do formato antigo para unidades

{
  "servico": [
    {
      "ibscbs": {
        "codigoOperacao": "020101",
        "imovel": {
          "codigoCIB": "12345678",
          "inscricaoFiscal": "123456789012"
        }
      }
    }
  ]
}
{
  "versaoEsquema": "RTC009",
  "servico": [
    {
      "ibscbs": {
        "codigoOperacao": "020101",
        "imovel": {
          "codigoMunicipio": 4115200,
          "locacao": {
            "percentualCopropriedade": 100,
            "valorTotalOperacao": 2000
          },
          "unidadesImoveis": [
            {
              "codigoCIB": "12345678",
              "inscricaoFiscal": "123456789012"
            }
          ]
        }
      }
    }
  ]
}

Deduções e reembolsos: do vDedRed/gReeRepRes para o ajuste de BC

{
  "servico": [
    {
      "ibscbs": {
        "valores": {
          "operacao": {
            "documentosReferenciados": [
              {
                "nacional": {
                  "tipoChave": 1,
                  "chave": "..."
                },
                "dataEmissao": "2026-10-01",
                "competencia": "2026-10-01",
                "tipoOperacao": "...",
                "valorOperacao": 50
              }
            ]
          }
        }
      }
    }
  ]
}
{
  "versaoEsquema": "RTC009",
  "servico": [
    {
      "ibscbs": {
        "ajusteBC": [
          {
            "tipoAjuste": "101",
            "valorTotalDocumento": 500,
            "valorAjusteAplicado": 50,
            "dataEmissao": "2026-10-01",
            "nacional": {
              "tipoChave": 1,
              "chave": "..."
            }
          }
        ]
      }
    }
  ]
}
⛔
Com RTC009 a API rejeita a nota (erro de validação) se vier deducao, documentosReferenciados, valor.deducoes ou valor.percentualDeducoes (maior que zero): a NT009 unificou vDedRed e gReeRepRes em vAjusteBC (item 2.3). A API não converte automaticamente, porque os domínios mudaram e alguns tipos foram descontinuados. Escolha o tipoAjuste pela tabela da seção de campos; ele não é uma conversão automática do tipoOperacao antigo. Sem RTC009 nada muda: os campos antigos continuam indo no XML. numeroDeclaracaoImp/numeroRegistroExp (nDI/nRE) são aceitos com RTC009 enquanto o item 2.12 não é aceito pelo ambiente nacional (veja Disponibilidade na Sefin).

Novas validações com RTC009 (erros que a API devolve)

Todas valem só com versaoEsquema: "RTC009". Sem RTC009 (ou com RTC007) o comportamento é o de sempre. As rejeições "ainda não é aceito pelo ambiente nacional" valem enquanto o item correspondente não for liberado para o ambiente da empresa (padrão: bloqueado) e saem num único erro 400, com todos os campos encontrados. Nenhuma mensagem traz data.

SituaçãoCampo no erroMensagem
deducao com RTC009deducaoCom versaoEsquema RTC009 (NT009 item 2.3) os grupos vDedRed e gReeRepRes foram unificados em vAjusteBC. O campo 'deducao' não é aceito: informe os documentos de ajuste em 'servico[0].ibscbs.ajusteBC' (os tipos de ajuste mudaram, consulte o domínio de tipoAjuste).
documentosReferenciados com RTC009servico[0].ibscbs.valores.operacao.documentosReferenciadosCom versaoEsquema RTC009 (NT009 item 2.3) os grupos vDedRed e gReeRepRes foram unificados em vAjusteBC. O campo 'documentosReferenciados' não é aceito: informe os documentos de ajuste em 'servico[0].ibscbs.ajusteBC' (os tipos de ajuste mudaram, consulte o domínio de tipoAjuste).
codigoCIB e endereco na mesma unidadeservico[0].ibscbs.imovel.unidadesImoveis[0].codigoCIBInforme 'codigoCIB' ou 'endereco' na unidade imobiliária, não os dois: são alternativos (cCIB ou end).
numeroDeclaracaoImp com RTC009, só depois da liberação do item 2.12servico[0].infExterior.numeroDeclaracaoImpCom versaoEsquema RTC009 (NT009 item 2.12) o campo 'numeroDeclaracaoImp' não é aceito: informe 'numeroDUIMP'
numeroRegistroExp com RTC009, só depois da liberação do item 2.12servico[0].infExterior.numeroRegistroExpCom versaoEsquema RTC009 (NT009 item 2.12) o campo 'numeroRegistroExp' não é aceito: informe 'numeroDUE'
Imóvel legado na raiz (inscricaoFiscal, codigoCIB ou endereco)servico[0].ibscbs.imovel.inscricaoFiscalCom versaoEsquema RTC009 (NT009 item 2.6) o imóvel foi reestruturado e o campo 'inscricaoFiscal' na raiz de 'imovel' não é aceito: informe 'codigoMunicipio', 'locacao' e 'unidadesImoveis' (cada unidade com 'inscricaoFiscal' e 'codigoCIB' ou 'endereco').
tipoAjuste 1, 3 ou 4 (descontinuados na NT 2.3)servico[0].ibscbs.ajusteBC[0].tipoAjusteValor inválido para o campo, valores aceitos: 2,5,6,7,8,9,99,101,102,103,104,105,199. Os tipos 1 (Alimentação e bebidas/frigobar), 3 (Produção Externa) e 4 (Reembolso de despesas) foram descontinuados na unificação em vAjusteBC (NT009 v1.01, item 2.3): use 2, 5 a 9, 99 ou 101 a 105, 199.
nDI obrigatória (tipoMovimentacaoBens = 2), com o item 2.12 bloqueado (padrão)servico[0].infExterior.numeroDeclaracaoImpE0352: O preenchimento do campo numeroDeclaracaoImp (nDI - Número da Declaração de Importação) é obrigatório quando tipoMovimentacaoBens (movTempBens) for igual a 2.
nDI/nRE proibidas (tipoMovimentacaoBens = 1), com o item 2.12 bloqueado (padrão)servico[0].infExterior.numeroDeclaracaoImp e numeroRegistroExpE0354: O preenchimento dos campos numeroDeclaracaoImp (nDI - Número da Declaração de Importação) ou numeroRegistroExp (nRE - Número do Registro de Exportação) não é permitido quando tipoMovimentacaoBens (movTempBens) for igual a 1.
nRE obrigatória (tipoMovimentacaoBens = 3), com o item 2.12 bloqueado (padrão)servico[0].infExterior.numeroRegistroExpE0356: O preenchimento do campo numeroRegistroExp (nRE - Número do Registro de Exportação) é obrigatório quando tipoMovimentacaoBens (movTempBens) for igual a 3.
DUIMP obrigatória (tipoMovimentacaoBens = 2), só com o item 2.12 liberadoservico[0].infExterior.numeroDUIMPE0352: O preenchimento do campo numeroDUIMP (nDUIMP) é obrigatório quando tipoMovimentacaoBens (movTempBens) for igual a 2.
DUIMP/DU-E proibidas (tipoMovimentacaoBens = 1), só com o item 2.12 liberadoservico[0].infExterior.numeroDUEE0354: O preenchimento dos campos numeroDUIMP (nDUIMP) ou numeroDUE (nDUE) não é permitido quando tipoMovimentacaoBens (movTempBens) for igual a 1.
DU-E obrigatória (tipoMovimentacaoBens = 3), só com o item 2.12 liberadoservico[0].infExterior.numeroDUEE0356: O preenchimento do campo numeroDUE (nDUE) é obrigatório quando tipoMovimentacaoBens (movTempBens) for igual a 3.
finalidadeNFSe diferente de 0 (item 2.2)servico[0].ibscbs.finalidadeNFSeCom versaoEsquema RTC009 o valor 1 do campo 'finalidadeNFSe' (NT009 item 2.2) ainda não é aceito pelo ambiente nacional
tpNFSeDebito / tpNFSeCredito (item 2.2)servico[0].ibscbs.tpNFSeDebitoCom versaoEsquema RTC009 o campo 'tpNFSeDebito' (NT009 item 2.2) ainda não é aceito pelo ambiente nacional
valores.ajusteIBSCBS (item 2.2)servico[0].ibscbs.valores.ajusteIBSCBS.valorIBSCom versaoEsquema RTC009 o campo 'valorIBS' (NT009 item 2.2) ainda não é aceito pelo ambiente nacional
regimeApuracaoIBSCBSSN (item 2.4)regimeApuracaoIBSCBSSNCom versaoEsquema RTC009 o campo 'regimeApuracaoIBSCBSSN' (NT009 item 2.4) ainda não é aceito pelo ambiente nacional
codigoAtividadeSN (item 2.4)servico[0].codigoAtividadeSNCom versaoEsquema RTC009 o campo 'codigoAtividadeSN' (NT009 item 2.4) ainda não é aceito pelo ambiente nacional
pagamentosVinculados (item 2.8)servico[0].ibscbs.pagamentosVinculadosCom versaoEsquema RTC009 o campo 'pagamentosVinculados' (NT009 item 2.8) ainda não é aceito pelo ambiente nacional
numeroDUIMP, numeroDUE, numeroFatura, valorFatura, numeroContratoCambio (item 2.12)servico[0].infExterior.numeroDUIMPCom versaoEsquema RTC009 o campo 'numeroDUIMP' (NT009 item 2.12) ainda não é aceito pelo ambiente nacional
modoPrestacao = 5 (item 2.12)servico[0].infExterior.modoPrestacaoCom versaoEsquema RTC009 o valor 5 do campo 'modoPrestacao' (NT009 item 2.12) ainda não é aceito pelo ambiente nacional
valorAjusteBCIBSCBSComExt (item 2.13)servico[0].ibscbs.valorAjusteBCIBSCBSComExtCom versaoEsquema RTC009 o campo 'valorAjusteBCIBSCBSComExt' (NT009 item 2.13) ainda não é aceito pelo ambiente nacional
evento.codigoCidade (item 2.14)servico[0].evento.codigoCidadeCom versaoEsquema RTC009 o campo 'codigoCidade' (NT009 item 2.14) ainda não é aceito pelo ambiente nacional
ajusteBC: nenhum documento informado (dFeNacional, docFiscalOutro ou docOutro)servico[0].ibscbs.ajusteBC[0]Erro de validação: informe exatamente um entre o documento nacional (nacional), o documento fiscal (fiscal) e o documento não fiscal (naoFiscal) em cada item de ajusteBC.
valorAjusteBCISSQN e percentualAjusteBCISSQN juntosservico[0].ibscbs.valorAjusteBCISSQNErro de validação: percentualAjusteBCISSQN e valorAjusteBCISSQN são exclusivos; informe só um.
Unidade imobiliária sem codigoCIB nem enderecoservico[0].ibscbs.imovel.unidadesImoveis[0].codigoCIBErro de validação: informe codigoCIB ou endereco na unidade imobiliária.
Comércio exterior sem valorServicos (vServMoeda), enquanto o item 2.12 não é aceitoservico[0].infExterior.valorServicosErro de validação: preenchimento obrigatório.
descricaoAjuste da unidade imobiliária com tipoAjuste diferente de 99 (E0954)servico[0].ibscbs.imovel.unidadesImoveis[0].ajustesBCLocImoveis[0].descricaoAjusteE0954: A descrição do tipo de ajuste (dedução/redução) da Base de Cálculo do IBS/CBS (descricaoAjuste) não deve ser informada quando o tipo de ajuste (tipoAjuste - tpAjusteBCLocImoveis) for diferente de 99.
Tomador ou intermediário com endereço no exterior sem logradouro, numero ou bairro (com e sem RTC009)tomador.endereco.logradouro (ou numero, bairro; intermediario.endereco.*)logradouro é obrigatório para tomador com endereço no exterior. (idem para numero e bairro; "intermediário" no intermediário). codigoPais diferente de BR/1058, ou codigoCidade = 9999999, indica endereço no exterior; o XML leva só os campos do exterior (endExt), sem código de município nem CEP nacionais.
CEP do exterior com mais de 11 caracteres, ou CEP nacional diferente de 8 (com e sem RTC009)tomador.endereco.cep (ou intermediario.endereco.cep, servico[0].ibscbs.destinatario.endereco.cep, servico[0].ibscbs.ajusteBC[0].fornecedor.endereco.cep)Erro de validação do tamanho: o código postal do exterior aceita de 1 a 11 caracteres; o CEP nacional tem 8 dígitos.
💡
Endereço no exterior e razão social do intermediário. O CEP/código postal do exterior (1 a 11 caracteres; nacional continua com 8 dígitos) vale para o tomador, o intermediário, o destinatário e o fornecedor do ajuste de base de cálculo. A razão social do intermediário (intermediario.razaoSocial) é enviada no XML (interm/xNome) quando você a informa, com e sem RTC009; ela é opcional na API, mas o leiaute de produção atual exige xNome no intermediário (o XSD oficial da produção restrita aceita sem): informe-a. O campo estado do destinatário e do fornecedor do ajuste é a sigla de 2 letras no endereço nacional e, no exterior, texto livre de 1 a 60 caracteres (por exemplo Berlin). No fornecedor do ajuste com endereço no exterior, logradouro, numero e bairro são obrigatórios.

No Componente NFSe (TX2): rejeições com Versao=RTC009

O Componente também rejeita (erro na conversão do TX2, sem gerar XML) os campos e blocos que a NT009 substituiu e os que o ambiente nacional ainda não aceita, como a API faz. Só valem com a linha Versao=RTC009 no cabeçalho do TX2; sem ela nada muda. No Componente, a liberação de cada item segue a da Sefin por ambiente e chega pelo AtualizarArquivos (arquivo nfseLocaisNacional.ini). Para usar a RTC009 é preciso rodar o AtualizarArquivos: ele traz os scripts, esquemas e o nfseLocaisNacional.ini da NT009, e é por ele que chega a liberação de cada item. Quem não atualizar fica sem a NT009 e, quando a Sefin mudar a posição do indDest/dest (item 2.11), terá as notas RTC009 rejeitadas. NumeroDeclaracaoImp e NumeroRegistroExp (nDI/nRE) são aceitos com Versao=RTC009 enquanto o item 2.12 não é aceito.

Situação no TX2Mensagem do componente
ValorDeducoes diferente de zeroCom Versao=RTC009 (NT009 item 2.3) o campo ValorDeducoes não é aceito: informe ValorAjusteBCISSQN.
ValorPercDeducoes diferente de zeroCom Versao=RTC009 (NT009 item 2.3) o campo ValorPercDeducoes não é aceito: informe PercentualAjusteBCISSQN.
Bloco INCLUIRDEDUCAO/SALVARDEDUCAOCom Versao=RTC009 (NT009 item 2.3) o bloco INCLUIRDEDUCAO/SALVARDEDUCAO não é aceito: informe o ajuste da base de cálculo no bloco INCLUIRDOCAJUSTEBC/SALVARDOCAJUSTEBC, em PercentualAjusteBCISSQN ou em ValorAjusteBCISSQN.
Bloco INCLUIRDOCUMENTOREFERENCIADO/SALVARDOCUMENTOREFERENCIADOCom Versao=RTC009 (NT009 item 2.3) o bloco INCLUIRDOCUMENTOREFERENCIADO/SALVARDOCUMENTOREFERENCIADO não é aceito: informe os documentos no bloco INCLUIRDOCAJUSTEBC/SALVARDOCAJUSTEBC (tipos de ajuste 101 a 105 e 199).
NumeroDUIMP, NumeroDUE, NumeroFatura, ValorFatura, NumeroContratoCambio (2.12)Com Versao=RTC009 o campo NumeroDUIMP (NT009 item 2.12) ainda não é aceito pelo ambiente nacional
FinalidadeNFSe diferente de 0 (2.2)Com Versao=RTC009 o valor 1 do campo FinalidadeNFSe (NT009 item 2.2) ainda não é aceito pelo ambiente nacional
TipoNFSeDebito / TipoNFSeCredito (2.2)Com Versao=RTC009 o campo TipoNFSeDebito (NT009 item 2.2) ainda não é aceito pelo ambiente nacional
ValorIBSAjuste / ValorCBSAjuste (2.2)Com Versao=RTC009 o campo ValorIBSAjuste (NT009 item 2.2) ainda não é aceito pelo ambiente nacional
RegimeApuracaoIBSCBSSN (2.4)Com Versao=RTC009 o campo RegimeApuracaoIBSCBSSN (NT009 item 2.4) ainda não é aceito pelo ambiente nacional
OptanteSimplesNacional = 4 (2.4)Com Versao=RTC009 o valor 4 do campo OptanteSimplesNacional (NT009 item 2.4) ainda não é aceito pelo ambiente nacional
CodigoAtividadeSN (2.4)Com Versao=RTC009 o campo CodigoAtividadeSN (NT009 item 2.4) ainda não é aceito pelo ambiente nacional
Bloco INCLUIRPAGAMENTO/SALVARPAGAMENTO (2.8)Com Versao=RTC009 o bloco INCLUIRPAGAMENTO/SALVARPAGAMENTO (NT009 item 2.8) ainda não é aceito pelo ambiente nacional
CodigoModoPrestacao = 5 (2.12)Com Versao=RTC009 o valor 5 do campo CodigoModoPrestacao (NT009 item 2.12) ainda não é aceito pelo ambiente nacional
ValorAjusteBCIBSCBSComExt (2.13)Com Versao=RTC009 o campo ValorAjusteBCIBSCBSComExt (NT009 item 2.13) ainda não é aceito pelo ambiente nacional
CodigoCidadeEvento (2.14)Com Versao=RTC009 o campo CodigoCidadeEvento (NT009 item 2.14) ainda não é aceito pelo ambiente nacional
Imóvel legado (InscricaoFiscalImovel, CodigoCIB, CepImovel, CodigoPostalImovel, DescricaoCidadeImovel, UfImovel, EnderecoImovel, NumeroImovel, ComplementoImovel, BairroImovel)Com Versao=RTC009 (NT009 item 2.6) o campo <campo> não é aceito: o imóvel foi reestruturado. Informe CodigoMunicipioImovel e o bloco INCLUIRUNIDADEIMOBILIARIA/SALVARUNIDADEIMOBILIARIA (cada unidade com InscricaoFiscalImovelUnidade e CodigoCIBUnidade ou endereço).
Bloco INCLUIRDOCAJUSTEBC sem documento (ChaveDFeAjuste, documento fiscal ou documento outro)Informe exatamente um entre o documento nacional, o documento fiscal e o documento não fiscal (mensagem de validação do componente, com o nome dos campos TX2).
PercentualAjusteBCISSQN e ValorAjusteBCISSQN juntosSão exclusivos: informe só um (mensagem de validação do componente).
Unidade imobiliária sem CodigoCIBUnidade nem endereço, ou com os doisInforme CodigoCIBUnidade ou o endereço da unidade, não os dois (mensagem de validação do componente).
ValorServicosEstrangeiro (vServMoeda) vazio no comércio exteriorPreenchimento obrigatório enquanto o item 2.12 não é aceito (mensagem de validação do componente).
DescricaoAjusteBCLocImoveisUnid com TipoAjusteBCLocImoveisUnidade diferente de 99 (E0954)Com Versao=RTC009 (NT009 item 2.6) E0954: a descrição do tipo de ajuste (dedução/redução) da Base de Cálculo do IBS/CBS (DescricaoAjusteBCLocImoveisUnid, xTpAjusteBCLocImoveis) não deve ser informada quando o tipo de ajuste (TipoAjusteBCLocImoveisUnidade, tpAjusteBCLocImoveis) for diferente de 99.

De RTC007 para RTC009

Basta trocar o valor de versaoEsquema de "RTC007" para "RTC009": retencao e apuracaoPropria continuam funcionando do mesmo jeito.

✅
Roteiro de migração:
1. Informe versaoEsquema: "RTC009" na nota
2. Troque os campos legados do imovel por codigoMunicipio, locacao e unidadesImoveis (com RTC009 os legados são rejeitados)
3. Troque deducao/documentosReferenciados (e valor.deducoes/valor.percentualDeducoes) por ajusteBC / valorAjusteBCISSQN / percentualAjusteBCISSQN: com RTC009 os campos antigos são rejeitados
3b. Mantenha numeroDeclaracaoImp/numeroRegistroExp (nDI/nRE): com RTC009 eles são aceitos enquanto o item 2.12 não é aceito pelo ambiente nacional. Só troque por numeroDUIMP/numeroDUE depois da liberação
4. Preencha os campos novos que se aplicam e que o ambiente nacional já aceita (ajuste de BC, locação e bens móveis); comércio exterior (item 2.12), evento (2.14), pagamentos (2.8), Simples Nacional (2.4) e notas de ajuste (2.2) ainda retornam erro
5. Remova o codigoOperacao quando o CST não tem gIBSCBS (ele é opcional)
6. Teste em homologação antes de usar em produção

Perguntas frequentes

Preciso mudar alguma coisa se eu não usar a RTC009?
Quase nada do lado do PlugNotas: sem versaoEsquema: "RTC009" o XML do leiaute anterior é mantido e os campos exclusivos da NT009 são descartados, sem erro, exceto: modoPrestacao = 5 é recusado com erro de validação; endereço no exterior exige logradouro, numero e bairro, e o cep do exterior aceita de 1 a 11 caracteres (erro 400 fora disso); a razaoSocial do intermediário passa a ir no XML (xNome). Lembre também que, em homologação, a Sefin já só autoriza notas com RTC009 — veja a pergunta sobre 03/11.
O que acontece em 03/11/2026?
É a data de produção divulgada pela Sefin Nacional para os releases 1 e 2 da NT009 (o cronograma pode mudar). Em homologação (produção restrita), a Sefin já só autoriza notas com RTC009: o XSD oficial de 20/10/2026 exige o finNFSe na raiz de infDPS. Em produção, o leiaute anterior continua aceito até a Sefin mudar; acompanhe o cronograma oficial. Recomendamos testar em homologação com RTC009 e acompanhar o artigo da Central.
A RTC009 mantém as regras da NT007 (PIS/COFINS/CSLL)?
Sim. RTC009 inclui tudo o que a RTC007 faz: grupos retencao e apuracaoPropria, cálculo automático de tpRetPisCofins e vRetCSLL. Não é preciso informar as duas versões.
O XSD oficial da NT009 já saiu?
Em parte. O XSD oficial da produção restrita (20/10/2026) traz só a Release 1 da NT009. O PlugNotas segue o AnexoVI v1.04.01 (leiaute e regras de negócio) e bloqueia os campos da Release 2 e os sem data até a Sefin aceitá-los (veja Disponibilidade na Sefin); os nomes dos campos do JSON não devem mudar.
Por que alguns campos não aparecem no DANFSe ainda?
A impressão do DANFSe ainda não foi atualizada para exibir os campos novos da NT009. Eles constam no XML da NFS-e; use o XML para conferência.
Devo informar o codigoOperacao (cIndOp)?
Com RTC009 ele é opcional. Se o CST da operação não tem o grupo gIBSCBS (por exemplo 400, 410 e 820), não informe. Nos demais casos informe quando souber o código. A consistência é validada pela Sefin na autorização. Para locação (99.03) o código deve ser 02XXXX.
Por que recebi erro "ainda não é aceito pelo ambiente nacional"?
Você informou, com RTC009, um campo da NT009 que a Sefin ainda não aceita na produção restrita (itens 2.2, 2.4, 2.8, 2.12, 2.13 ou 2.14). Remova o campo e reenvie. Ele fica documentado aqui e passa a funcionar quando a Sefin liberar e o PlugNotas desligar o bloqueio. O Componente rejeita os mesmos campos com Versao=RTC009.
Qual a diferença entre nDI/nRE e nDUIMP/nDUE?
São documentos diferentes. numeroDUIMP (nDUIMP, Declaração Única de Importação) e numeroDUE (nDUE, Declaração Única de Exportação) substituem numeroDeclaracaoImp (nDI) e numeroRegistroExp (nRE) na NT009 (item 2.12), a partir da liberação da Release 2. Com RTC009, enquanto o item 2.12 não é aceito pelo ambiente nacional, nDI e nRE são aceitos e enviados e nDUIMP/nDUE são rejeitados (o XSD oficial da Release 1 ainda tem nDI/nRE). Quando o item 2.12 for liberado, a situação se inverte. Sem RTC009 continuam como antes. A API não converte o valor de um no outro.
Por que o valor do serviço precisa ser proporcional na locação?
Para o subitem 99.03, a Sefin exige vServ = pCopropriedade × vTotOper (e a mesma proporção nos descontos). A API não calcula isso por você: informe o valor já proporcional em servico.valor e os totais da operação em imovel.locacao.
E as notas de condomínio (99.05)?
As operações de condomínios (código 99.05.01 e grupo condominios) fazem parte da NT009, mas ainda não estão disponíveis na API do PlugNotas.