Skip to main content
Esta página é o detalhe completo dos dois motivos de 422 específicos da Reforma Tributária (IBS/CBS) dentro da emissão assistida (resolverTributacao: true). O catálogo enxuto de todos os erros da API (formato RFC 7807, tabela de códigos HTTP, pré-voo do emissor) está em Erros e respostas.
Os dois motivos abaixo aparecem dentro de details.itensNaoResolvidos (NF-e/NFC-e) na resposta 422 de Emissão assistida. Procurando data de obrigatoriedade ou o cronograma da Reforma? Isso está em Reforma Tributária: datas que importam.

Espelho fiscal divergente

Um dos motivos possíveis dentro de details.itensNaoResolvidos. Acontece quando a redução de IBS/CBS que temos espelhada para o NCM não bate com a tabela oficial de classificação tributária para a classe (cClassTrib) daquele mesmo NCM:
Os números entre parênteses são, nesta ordem, IBS-UF / IBS-Municipal / CBS. Por que recusamos antes de transmitir: a SEFAZ valida o percentual de redução de cada tributo contra o cClassTrib do item (NT 2025.002) e rejeita a combinação incoerente: cStat 1034 no IBS-UF, 1046 no IBS-Municipal, 1063 na CBS. Ou seja, o documento não chega a existir de qualquer forma. A diferença é o que você recebe: em vez de um código da SEFAZ sem contexto (produzido por um dado que está do nosso lado, não no seu payload), você recebe este 422 local dizendo qual NCM, quais são os dois números em conflito e o que fazer. Nada é transmitido. Como seguir agora, sem esperar a correção do dado:
  1. Informe o grupo ibsCbs do item no payload (o mesmo shape que a emissão passthrough usa). Item com ibsCbs explícito é override do parceiro: o motor não recalcula nem consulta o espelho para ele.
  2. Ou emita esse item sem resolverTributacao, com a tributação que o seu ERP já tem.
Um mesmo NCM pode pertencer a mais de um anexo de redução com tratamentos diferentes; qual deles vale depende do produto real, não do código NCM. Por isso o cClassTrib explícito resolve o caso: ele diz qual tratamento se aplica àquela mercadoria.

NCM multiclasse

Outro motivo dentro de details.itensNaoResolvidos, e o mais comum em alimento: o NCM aparece em mais de um anexo da LC 214/2025, com percentuais diferentes. Quem decide qual vale é o produto real, não o código: então o motor não escolhe sozinho:
candidatas traz todas as classes vigentes daquele NCM, com o anexo que as sustenta e os percentuais de cada tributo: é o suficiente para escolher sem uma segunda requisição. Quando o marcador automatica vem falso, aquela classe vale se você a informar explicitamente, porque o tratamento dela depende de um fato da operação (adquirente, destinação, habilitação) que o NCM sozinho não revela. Dois códigos irmãos aparecem no mesmo lugar:

Informando só a classe (ibsCbs.cClassTrib)

Para desempatar, você não precisa calcular os seis percentuais. Basta informar a classe e ligar a emissão assistida: o motor busca os percentuais oficiais dela:
A resposta declara a classe estampada em tributacao.ibsCbs.classe, com o código, o anexo que o sustenta e a origem da escolha (informada, quando ela veio de você; resolvida, quando o motor elegeu), o que permite auditar depois qual anexo sustentou o número que foi assinado. Três regras deste formato:
  • ele exige "resolverTributacao": true. Sem a flag ninguém resolve os percentuais, e o grupo iria incompleto para o documento: a API recusa antes com 422 IBSCBS_CLASSE_SEM_RESOLVEDOR;
  • cClassTrib é o único campo aceito aqui. Qualquer outro (inclusive vBC) devolve 400: a base de cálculo do IBS/CBS neste caminho é sempre o vProd do item, e aceitar um campo que não teria efeito seria pior que recusá-lo;
  • o grupo ibsCbs completo (com ibsUf, ibsMun e cbs) continua sendo passthrough puro, como sempre foi: o motor não toca nele. Grupo pela metade não vira “dica” em silêncio: falha nos dois formatos e devolve 400 com a mensagem do campo que faltou.
A classe que você informa vence a eleição automática, mas não vence a tabela oficial: classe inadmissível no modelo do documento é 422 CCLASSTRIB_INADMISSIVEL_NO_MODELO (a SEFAZ rejeitaria com cStat 1025). Uma classe condicionada a fato da operação (adquirente, destinação, habilitação) é aceita em NF-e (você conhece a operação) e recusada em NFC-e, onde a tabela oficial a marca como não admitida.

Guardar a classe por produto

A escolha vale para o produto, não para a nota. Depois de informar ibsCbs.cClassTrib numa emissão (ou confirmar no painel / em POST /v1/fiscal/classification/classe), o motor guarda a classe no cadastro daquele item naquele emissor. A próxima emissão do mesmo código sem a classe no payload reusa a lembrança, desde que ela continue entre as candidatas vigentes e seja admissível no modelo do documento. Se o conjunto de candidatas do NCM mudar (nova classe divergente, classe removida, alíquota alterada), a lembrança fica pendente e o 422 NCM_MULTICLASSE volta a pedir confirmação, com a lista atualizada. Um emissor nunca herda a escolha de outro. Para listar as candidatas sem emitir:
A resposta traz candidatas[] com nome, descricao, anexo e percentuais. É o mesmo shape do 422. garantia é sempre false.

Veja também

  • Erros e respostas: o catálogo completo, RFC 7807, códigos HTTP e pré-voo do emissor.
  • Cérebro Fiscal: o que é a emissão assistida e como ativar na sua conta.
  • Changelog fiscal: o que é uma mudança de regra, o 422 na emissão, e os ciclos dos últimos 90 dias.