Pular para o conteúdo principal

Detalhamento do Processamento, Resiliência, Idempotência e Contingência: NF-e, NFC-e, Taxes e Taxes Payment Forms

ProdutoEmissão de Nota Fiscal de Produto NFE.io (dfetech-product-invoice-api)
Documento3 de 4: Detalhamento do processamento e das regras de resiliência, idempotência e contingência
Versão1.0 (24/09/2026)
PúblicoClientes, times de arquitetura, TI, auditoria e área fiscal
Documentos relacionados1 de 4: Arquitetura · 2 de 4: Fluxos de processamento · 4 de 4: Mensageria e filas · English version

Sumário​

  1. Resumo executivo
  2. Conceitos
  3. Regras do governo que regem a emissão
  4. NF-e
  5. NFC-e
  6. Taxes: cálculo de impostos
  7. Taxes Payment Forms: guias de recolhimento
  8. Relação entre NF-e, NFC-e e Taxes
  9. Regras de resiliência
  10. Regras de idempotência
  11. Contingência
  12. Responsabilidades do cliente
  13. Referências governamentais

1. Resumo executivo​

  • Emissão assíncrona com resposta imediata. A NF-e e a NFC-e aceitam o pedido, devolvem o identificador da nota (id) e seguem a emissão em segundo plano. O resultado chega por webhook e fica disponível na consulta. A NFC-e também tem um modo síncrono, que devolve o resultado na mesma requisição dentro de um prazo de 10 segundos no processamento da autorização.
  • Etapas independentes e retomáveis. Criação e cálculo de impostos, numeração, assinatura, envio, consulta e notificação são etapas separadas. Cada nota é persistida como uma sequência de eventos (Event Sourcing), e qualquer etapa retoma a partir do último evento gravado.
  • Resiliência. Falhas transitórias (SEFAZ fora do ar, tempo esgotado, serviço interno indisponível) geram novas tentativas com espera crescente. Falhas definitivas (rejeição da SEFAZ, erro de validação, certificado vencido) encerram a nota com o motivo, sem tentativas inúteis. Na NFC-e síncrona sem contingência offline habilitada, a indisponibilidade da SEFAZ encerra a nota com erro, para não prender o ponto de venda.
  • Idempotência. Uma nota nunca é enviada duas vezes às cegas: diante de tempo esgotado ou de duplicidade, a plataforma consulta a nota pela chave de acesso. Uma trava por nota e um controle de admissão garantem uma única execução por nota e por operação, e o consumidor descarta mensagens repetidas.
  • Contingência. A NF-e usa o EPEC (tpEmis 4), ativado pelo próprio cliente (estratégia Manual) ou pela NFE.io por UF (estratégia StateTaxAuthorityStatusUnavailable). A NFC-e usa a contingência offline (tpEmis 9), acionada automaticamente por tempo esgotado ou indisponibilidade e, de forma preventiva, por um disjuntor por UF.
  • Relação com o Taxes. A NF-e e a NFC-e chamam o Taxes durante a criação da nota, antes da numeração, quando o cliente pede o cálculo automático nos itens. Se o cálculo não puder ser feito, a nota aguarda ou é recusada: nunca é emitida com tributo presumido.

2. Conceitos​

TermoSignificado
Chave de acessoIdentificador de 44 posições da NF-e/NFC-e. Inclui a UF, o ano e o mês de emissão, o CNPJ do emitente, o modelo, a série, o número e o tipo de emissão (tpEmis).
cStatCódigo de situação devolvido pela SEFAZ. Exemplos: 100 (autorizado), 150 (autorizado fora de prazo), 204 e 539 (duplicidade), 217 (nota não consta na base), 301, 302 e 303 (uso denegado).
tpEmisTipo de emissão: 1 (normal), 4 (EPEC), 6 (SVC-AN), 7 (SVC-RS) e 9 (contingência offline da NFC-e), entre outros.
dhCont e xJustData e hora de entrada em contingência e justificativa, obrigatórias nas notas emitidas em contingência.
EPECEvento Prévio de Emissão em Contingência. Registra a nota no Ambiente Nacional quando a SEFAZ de origem está indisponível.
Contingência offlineModalidade da NFC-e em que a nota é emitida e entregue ao consumidor sem autorização prévia e transmitida depois.
Inscrição estadual (IE)No cadastro da NFE.io, cada IE da empresa define o tipo de documento (NF-e ou NFC-e), a série, o ambiente (produção ou homologação), o CSC da NFC-e e a estratégia de contingência.
CSCCódigo de Segurança do Contribuinte, usado no QR Code da NFC-e.
Event SourcingForma de persistência em que o estado da nota é a soma dos seus eventos, gravados em ordem e nunca sobrescritos.
IdempotênciaGarantia de que repetir uma operação não produz efeito duplicado.
At-least-onceGarantia de entrega "pelo menos uma vez": uma mensagem ou webhook pode chegar repetido, nunca perdido.

3. Regras do governo que regem a emissão​

TemaRegraFonte
Leiaute e validaçãoLeiaute 4.00 da NF-e e da NFC-e e regras de validação do MOC 7.0, atualizadas por Notas TécnicasMOC 7.0, Anexo I
Reforma Tributária do ConsumoGrupos de IBS, CBS e IS no leiaute, com a versão vigente da NT 2025.002NT 2025.002
Contingência da NF-eModalidades FS-IA, EPEC, FS-DA, SVC-AN e SVC-RS. No EPEC, a NF-e deve ser transmitida à SEFAZ de origem em até 168 horas da emissãoMOC 7.0, Anexo III; Ajuste SINIEF 07/05
Restrição de UF para o EPECA partir de 05/10/2026, a regra de validação 2P10-20 veda o EPEC para emitentes do PR e da PBNT 2014.001 v1.41
Contingência da NFC-eA NFC-e em contingência offline deve ser transmitida até o final do primeiro dia útil subsequente à emissão. Se rejeitada, deve ser regenerada com o mesmo número e série, sem alterar valores, partes e datas. A numeração de NFC-e emitida em contingência não pode ser inutilizadaAjuste SINIEF 19/16; MOC 7.0, Anexo IV
Cancelamento da NF-eEm até 24 horas da autorização, desde que não tenha havido circulação da mercadoria. Cancelamento fora do prazo fica a critério de cada UFAjuste SINIEF 07/05
Cancelamento da NFC-eEm até 24 horas, prazo que cada UF pode reduzirAjuste SINIEF 19/16
Carta de Correção (CC-e)Evento 110110, só depois da autorização. Não corrige valores que determinam o imposto, dados de remetente ou destinatário, nem datas de emissão ou saída. A CC-e mais recente substitui as anteriores e deve conter todas as correções. Até 20 CC-e por nota. Não se aplica à NFC-eAjuste SINIEF 07/05
InutilizaçãoPara números que não serão usados, até o dia 10 do mês seguinteAjuste SINIEF 07/05 e 19/16
Consulta de status do serviçoQuem consulta a disponibilidade da SEFAZ em laço deve respeitar intervalo mínimo de 3 minutosMOC 7.0, Visão Geral

4. NF-e​

4.1 Pré-requisitos​

  1. Empresa cadastrada e ativa na NFE.io, com certificado digital A1 (ICP-Brasil) válido.
  2. Inscrição estadual ativa do tipo NF-e, com série e ambiente (produção ou homologação) definidos.
  3. Chave de API com o perfil de Nota Fiscal.
  4. Opcionalmente, webhook cadastrado para o tipo de evento product_invoice.

4.2 Recepção e validação (síncrono, na API)​

O POST /v2/companies/{companyId}/productinvoices (ou .../statetaxes/{statetaxId}/productinvoices, para escolher a inscrição estadual) executa, dentro da requisição:

  1. Autenticação da chave de API e autorização pelo perfil do produto.
  2. Conversão do payload. Um payload mal formado retorna 400 com a lista de erros.
  3. Leitura da empresa e aplicação das regras de validação do payload e do cadastro (por exemplo, obrigatoriedades do leiaute, da Reforma Tributária e das notas de devolução, crédito e débito). Uma violação retorna 400.
  4. Geração do identificador da nota (id) e armazenamento do pedido original.
  5. Publicação da etapa de criação na fila de emissão.

A resposta é 200 com o recurso da nota e o id. A partir daí, o processamento é assíncrono. Se a publicação na fila falhar, a API responde 503 e nenhuma nota é criada, de modo que o pedido pode ser reenviado com segurança.

Sem statetaxId na rota, a plataforma usa a primeira inscrição estadual da lista de inscrições da empresa. Se ela não for do tipo NF-e ou não estiver ativa, o pedido é recusado com 400. Quando a empresa tiver mais de uma inscrição estadual, informe o statetaxId.

4.3 Criação da nota e cálculo de impostos (worker)​

  1. O worker obtém a trava da nota (seção 9.4).
  2. Se a nota já existe no event store, o pedido é tratado como repetição e o fluxo retoma da etapa em que a nota está.
  3. Confere se a empresa e a inscrição estadual estão ativas e se a IE é do tipo NF-e.
  4. Aplica as verificações de negócio (estratégia de contingência da IE, regras de nota de crédito e débito, Zona Franca de Manaus, obrigatoriedade de IBS/CBS, totais de nota complementar).
  5. Calcula os impostos no Taxes, quando o cliente pediu (seção 8).
  6. Verifica se há contingência EPEC ativa para a IE ou para a UF (seção 11.2). Se houver, a nota nasce marcada para EPEC.
  7. Cria o agregado e grava os eventos iniciais. A nota passa a existir com status Created.

Qualquer falha definitiva nesta etapa recusa a nota: ela é gravada com status Error e o cliente recebe product_invoice.issued_error com o motivo.

4.4 Numeração​

  • Se o pedido informou a série e o número, eles são usados como vieram.
  • Se não informou, a série vem da inscrição estadual e o número vem da sequência de numeração mantida pelo cadastro da NFE.io para aquela IE e série.
  • Uma falha definitiva de numeração (por exemplo, série não cadastrada) recusa a nota.
Numeração informada pelo cliente

Quando o cliente informa o número, a plataforma não consulta a sequência. Um número já usado por outra nota da mesma série é rejeitado pela SEFAZ por duplicidade (cStat 539). Se o seu sistema controla a numeração, garanta a unicidade por série do lado do seu sistema.

4.5 Assinatura e autorização​

  1. Geração da chave de acesso e do código numérico.
  2. Obtenção do certificado A1 da empresa no serviço de custódia. A validade do certificado é conferida antes da assinatura: certificado vencido ou ainda não válido encerra a emissão com erro, sem chamada à SEFAZ.
  3. Geração do XML no leiaute 4.00, assinatura digital e validação contra os schemas XSD oficiais. Uma falha de schema encerra a emissão com erro.
  4. Armazenamento do XML assinado.
  5. Envio ao Web Service de autorização (NFeAutorizacao4) da SEFAZ autorizadora da UF do emitente, com processamento síncrono (indSinc=1), por HTTPS com TLS mútuo. O tempo máximo de cada chamada é de 120 segundos.

A SEFAZ autorizadora é a da própria UF ou a SEFAZ Virtual que atende a UF (SVRS ou SVAN), conforme a relação oficial de Web Services do Portal Nacional da NF-e. Emitentes sem inscrição estadual (contribuintes exclusivamente de IBS/CBS) são direcionados à SVRS.

4.6 Tratamento das respostas da SEFAZ​

RespostaClassificaçãoO que a plataforma fazO que o cliente vê
cStat 100 ou 150 (autorizada)SucessoMonta o nfeProc e notificaIssued, issued_successfully
Lote recebido sem resultado síncronoInconclusivaConsulta pela chave de acessoAguarda
Tempo esgotado ou resposta inconclusivaInconclusivaConsulta pela chave de acesso. Nunca reenviaAguarda
204 ou 539 com a chave desta mesma notaDuplicidade da própria notaConsulta pela chave e recupera o protocoloIssued, se autorizada
204 ou 539 com outra chaveRejeiçãoEncerraError, issued_error
Sem comunicação, SEFAZ indisponívelTransitóriaNova tentativa do envio (seção 9.1)Aguarda
Rejeição de regra de validaçãoDefinitivaGuarda o XML de rejeição e encerraError, issued_error com cStat e motivo
Uso denegado (301, 302, 303)DefinitivaEncerraIssueDenied (quando identificado na consulta) ou Error (quando devolvido no envio síncrono), sempre com issued_error e o cStat da denegação
Certificado recusado no TLSDefinitivaEncerra sem novas tentativasError, issued_error
Tentativas esgotadasDefinitivaEncerraError, issued_failed

Consulta pela chave de acesso. A plataforma consulta a nota no Web Service NFeConsultaProtocolo4 com espera crescente (seção 9.1). Se a nota está autorizada, o protocolo é recuperado e o fluxo segue normalmente. Se a SEFAZ responde 217 (nota não consta na base), a consulta é repetida até 8 vezes; persistindo o 217, a nota é encerrada com issued_error e o cStat 217, e pode ter a numeração inutilizada.

4.7 Conclusão, arquivos e notificação​

  1. O protocolo de autorização é juntado ao XML, formando o XML de distribuição (nfeProc), que é armazenado.
  2. A nota passa a Issued e o cliente recebe product_invoice.issued_successfully, com o recurso completo da nota.
  3. O índice de consulta é atualizado em seguida, para as listagens.
  4. O DANFE é gerado na primeira solicitação a GET .../productinvoices/{id}/pdf e fica armazenado para as solicitações seguintes.
  5. O XML autorizado, o XML de rejeição e o XML do evento EPEC ficam disponíveis nas rotas .../xml, .../xml/rejection e .../xml-epec.

4.8 Cancelamento​

  • DELETE .../productinvoices/{id}?reason= responde 204 e processa em segundo plano.
  • Só é aceito para nota Issued. A justificativa (reason) deve ter de 15 a 255 caracteres, contados depois da substituição dos caracteres que não existem no padrão Latin-1 aceito pela SEFAZ (os acentos do português são mantidos); se omitida, a plataforma usa o texto padrão "Erro de preenchimento".
  • O worker assina o evento 110111 e o envia ao Web Service de eventos da SEFAZ autorizadora.
  • cStat 135, 136 ou 155: a nota passa a Cancelled e o cliente recebe cancelled_successfully. Rejeição: cancelled_error com o motivo. Indisponibilidade: novas tentativas, e, se esgotadas, cancelled_failed.
  • O prazo legal é validado pela SEFAZ (seção 3).

4.9 Carta de Correção Eletrônica (CC-e)​

  • PUT .../productinvoices/{id}/correctionletter com o texto da correção no campo reason (15 a 1.000 caracteres) responde 204.
  • Só é aceita para nota Issued. O worker assina o evento 110110 com o número sequencial seguinte e o envia à SEFAZ autorizadora.
  • Resultado: cce_successfully, cce_error ou cce_failed. O XML e o PDF da CC-e ficam em .../correctionletter/xml e .../correctionletter/pdf.
  • Cada CC-e substitui a anterior e deve trazer todas as correções (seção 3).

4.10 Inutilização de numeração​

ModalidadeRotaProcessamentoRegras
Por nota recusadaPOST .../productinvoices/{id}/disablementAssíncrono (204)A nota precisa estar em Error e ter número. Resultado por webhook (disabled_successfully, disabled_error, disabled_failed)
Por faixaPOST .../productinvoices/disablementSíncronoInforma ambiente, UF, série, número inicial e final e justificativa. Respostas: 204 (cStat 102 ou faixa já inutilizada, 206/563), 400 (rejeição de dados), 404, 409 (mesma faixa em processamento), 422 (outra rejeição), 503 (SEFAZ indisponível)

A inutilização de faixa é idempotente: repetir o pedido de uma faixa já inutilizada retorna sucesso.

4.11 Finalidades e documentos especiais​

  • Devolução, complementar, ajuste: emitidas pelo mesmo POST, com a finalidade informada no payload e validações específicas.
  • Nota de crédito e nota de débito: emitidas pelo mesmo POST. As notas de crédito e as de débito dos tipos 01, 02, 03, 05 e 08 dispensam o cálculo de impostos. É possível vincular e listar as notas de crédito emitidas contra uma NF-e.
  • Eventos fiscais da Reforma Tributária (NT 2025.002): a rota .../authority-events registra os eventos do emitente previstos na NT. Ela é liberada por habilitação da funcionalidade.

5. NFC-e​

5.1 Pré-requisitos​

  1. Empresa ativa, com certificado A1 válido.
  2. Inscrição estadual ativa do tipo NFC-e, com série, ambiente e CSC (identificador e código) cadastrados.
  3. Estratégia de troca de autorizador da IE igual a Manual. Qualquer outra estratégia é recusada com o código de erro 40002: na emissão síncrona, com 400 na própria requisição; na emissão assíncrona, a nota é recusada no processamento e o cliente recebe issued_error.

5.2 Emissão assíncrona​

POST /v2/companies/{companyId}/consumerinvoices segue os mesmos passos da NF-e (seções 4.2 a 4.7), com estas particularidades:

  • A data e hora de emissão (dhEmi) é a do processamento.
  • O XML inclui o QR Code (versão 2), gerado com o CSC da inscrição estadual.
  • Tempo esgotado ou indisponibilidade da SEFAZ acionam a contingência offline quando a IE está habilitada (seção 11.3).
  • Diante de 217 na consulta pela chave feita após tempo esgotado no envio, a NFC-e alterna consulta e reenvio por até 10 ciclos, antes de encerrar com erro.
  • Tipo de evento dos webhooks: consumer_invoice. A ação issued_contingency avisa que a nota foi emitida em contingência offline.

5.3 Emissão síncrona​

POST /v2/companies/{companyId}/consumerinvoices/sync devolve o resultado na mesma requisição.

  1. A API valida o payload, calcula os impostos (quando pedido) e cria a nota.

  2. A API aciona o worker por chamada interna direta. O worker obtém a trava da nota, numera, assina, gera o QR Code e envia a autorização à SEFAZ.

  3. O prazo da chamada de autorização é calculado assim:

    prazo SEFAZ = menor valor entre 8 s e (10 s − tempo já decorrido no worker − 2 s de reserva), com mínimo de 1 s.

    Os 2 segundos de reserva existem para, se preciso, emitir a nota em contingência offline dentro do tempo total.

  4. Respostas:

SituaçãoHTTPstatus da nota
Autorizada dentro do prazo200Issued
Prazo esgotado ou SEFAZ indisponível, IE habilitada para contingência offline200IssuedContingency (a nota será transmitida depois)
Rejeitada pela SEFAZ200Error, com o cStat e o motivo
Payload ou cadastro inválido400Não criada
Cálculo de impostos rejeitado422 (código 42201)Error: a nota fica registrada como recusada
Nota ainda em processamento ao fim da chamada (prazo esgotado ou duplicidade com IE não habilitada para offline, trava ocupada ou falha interna)503Segue Processing no worker, que conclui o fluxo (por exemplo, consultando a nota pela chave)
SEFAZ indisponível, IE não habilitada para offline200Error: a nota é recusada; o pedido pode ser reenviado e a numeração da nota recusada deve ser inutilizada
Serviço de cálculo de impostos indisponível503Não criada; o pedido pode ser reenviado
HTTP 503 na emissão síncrona

Um 503 não significa que a nota deixou de existir: ela continua sendo tratada e o resultado chega por webhook. Antes de reenviar, consulte a listagem de notas da empresa. Um novo POST cria uma nova nota, com novo id e novo número.

O prazo de 10 segundos vale para o processamento no worker. O cálculo de impostos e a criação da nota, feitos na API antes dessa etapa, não entram nessa conta.

5.4 QR Code e DANFE NFC-e​

  • O QR Code usa a versão 2, com o CSC e o seu identificador cadastrados na IE. Na contingência offline, o QR Code traz os dados exigidos para essa modalidade (dia de emissão, valor total e digest value).
  • O DANFE NFC-e é gerado na primeira solicitação a GET .../consumerinvoices/{id}/pdf. Na contingência offline, o DANFE traz a indicação de emissão em contingência.

5.5 Cancelamento e inutilização​

  • Cancelamento (DELETE .../consumerinvoices/{id}?reason=): exige a nota Issued, evento 110111, mesmas regras da NF-e. Uma nota em IssuedContingency ainda não transmitida só pode ser cancelada depois de autorizada.
  • Inutilização por nota recusada ou por faixa, como na NF-e. A numeração de NFC-e emitida em contingência não pode ser inutilizada (Ajuste SINIEF 19/16).
  • A NFC-e não tem Carta de Correção.

5.6 Diferenças entre NF-e e NFC-e​

AspectoNF-eNFC-e
Modo síncronoNãoSim (/sync)
ContingênciaEPEC (tpEmis 4)Offline (tpEmis 9)
Estratégias de contingência aceitas na IEManual e StateTaxAuthorityStatusUnavailableSomente Manual
QR Code e CSCNão se aplicaObrigatórios
Data de emissãoPode ser informada no pedidoSempre a do processamento
CC-eSimNão
Ciclo diante de 217Até 8 consultasAté 10 ciclos de consulta e reenvio (após tempo esgotado no envio)
Tipo de evento do webhookproduct_invoiceconsumer_invoice

6. Taxes: cálculo de impostos​

6.1 Recursos​

RotaFunção
POST /tax-rules/{tenantId}/engine/calculateCalcula os tributos por item
/{tenantId}/products (POST) e /{tenantId}/products/{productId} (GET, PUT, PATCH)Cadastro tributário de produtos
GET /tax-codes/operation-code, .../acquisition-purpose, .../issuer-tax-profile, .../recipient-tax-profileTabelas de códigos usadas no pedido de cálculo

tenantId é a conta do cliente: se não corresponder à conta da chave de API, a resposta é 403.

6.2 Como o cálculo é feito​

O pedido informa o emitente e o destinatário (regime tributário, perfil tributário e UF), o tipo de operação e, por item, o código da operação, a finalidade de aquisição, os perfis tributários, o SKU, o NCM, o CEST, a origem da mercadoria e os valores (quantidade, valor unitário, frete, seguro, desconto e outras despesas).

  1. Para cada item, o Taxes procura o produto no cadastro tributário (pelo SKU e pela origem). Produto cadastrado que não está ativo, ou produto não cadastrado e sem NCM, retorna 400.
  2. O Taxes verifica se há um cálculo recente reutilizável para o mesmo cenário (seção 6.3).
  3. Para os itens sem reuso, consulta o motor de regras tributárias, que devolve CFOP, CST/CSOSN, bases, reduções, alíquotas e valores.
  4. Aplica a tributação personalizada do produto (customTax), quando houver (seção 6.4).
  5. Devolve, por item: CFOP, CEST, código de benefício fiscal (cBenef), ICMS (inclusive ST, FCP, FCP-ST, diferimento, desoneração e monofásico), ICMS da UF de destino (DIFAL), IPI, PIS e COFINS, além de informações adicionais do produto.

6.3 Reuso de cálculos e reserva em caso de indisponibilidade​

  • Para cenários elegíveis, o resultado de um cálculo é armazenado por produto cadastrado (ou, sem produto, por NCM) e por cenário (tipo e código da operação, regimes, perfis, origem e UFs), e reaproveitado por até 500 horas. No reuso, as bases e os valores são sempre recalculados com os valores da requisição atual; o que se reaproveita é a regra (CST, alíquotas, reduções).
  • O reuso vale para emitentes do Simples Nacional, para contas habilitadas e para o cálculo feito no cadastro de produtos. Ele é restrito a cenários de tributação simples (por exemplo, CST 00, 40, 41 e 60 e CSOSN 102, 400 e 500, sem IPI e com PIS e COFINS sem alíquota) e a perfis de emitente e destinatário específicos. Os demais cenários sempre consultam o motor.
  • Se o motor de regras falhar, o Taxes usa, nesta ordem: (a) o resultado armazenado, mesmo vencido, quando o reuso se aplica ao cenário e há resultado para todos os itens; (b) quando o motor está indisponível ou não encontrou a regra, a regra de ICMS CST 40 cadastrada no produto (com CFOP e CST de PIS e COFINS), quando ela cobrir todos os itens. Sem nenhuma das duas, o cálculo falha com o erro original: nada é presumido.

6.4 Tributação personalizada e benefício fiscal​

  • O cadastro do produto pode trazer regras próprias (customTax) por cenário (operação, regimes e perfis, operação interna ou interestadual). Quando o cenário coincide, essas regras substituem as do motor: CFOP, CST/CSOSN, alíquotas, modalidade de base, redução de base, FCP, PIS e COFINS, código de benefício fiscal e informações adicionais.
  • Quando a tributação personalizada define CST 40 ou 41, o motor indica um código de benefício fiscal (cBenef) para o cenário e o produto não informa o seu próprio código (benefitCode), o Taxes responde 422 antes da emissão, evitando a rejeição posterior da SEFAZ (cStat 930/931).

6.5 IBS e CBS​

O IBS e a CBS são calculados por um serviço próprio da NFE.io, em chamada separada feita pela NF-e e pela NFC-e para os itens que pedem o cálculo oficial (ibscbs.calculationMode = OfficialService, com o código de classificação tributária). As alíquotas nominais seguem o cronograma de transição da Reforma Tributária do Consumo.

6.6 Cadastro de produtos​

  • O cadastro é validado de forma assíncrona. Produto sem tributação personalizada é ativado (Active). Produto com tributação personalizada passa por CustomTaxPending enquanto as regras são registradas e conferidas no motor e, ao final, fica Active ou Error.
  • Mudanças de situação geram o webhook product_tax, com as ações created_successfully (ativo), custom_rules_requested (tributação personalizada em análise) e creation_failed (erro).

6.7 Respostas de erro​

HTTPSituação
400Dados inválidos, produto não ativo, produto sem NCM, perfil tributário não suportado, dados recusados pelo motor de regras
403Conta da rota diferente da conta da chave de API
422Regra tributária não encontrada para o cenário, erro do motor de regras ou cBenef obrigatório ausente
500Falha inesperada ou de comunicação com o motor de regras; na rota pública, também a indisponibilidade temporária do motor
503Motor de regras temporariamente indisponível, na chamada interna feita pela emissão (tratada como falha transitória, seção 8.4)

7. Taxes Payment Forms: guias de recolhimento​

  • Finalidade: gerar a guia de recolhimento do DIFAL interestadual (vICMSUFDest) a partir de uma NF-e autorizada.
  • Entrada: o id de uma NF-e emitida pela NFE.io (POST /v1/tax-payment-forms/{accountId}/{companyId}/gnre, com data de pagamento e vencimento) ou o XML nfeProc (.../gnre/xml). O accountId precisa ser o da chave de API.
  • Destino: DUA na SEFAZ-ES para operações com destino ao Espírito Santo; lote GNRE no Portal GNRE para as demais UFs. O destino SP não é suportado.
  • Validação: a operação precisa ser interestadual e ter DIFAL maior que zero; caso contrário, o pedido é recusado com 400. A guia termina como desnecessária (ErrorNotNeeded) quando o valor total a recolher é zero ou quando o portal informa valor abaixo do mínimo.
  • Etapas: Created → Prepared → Transmitted → Generated, com o PDF da guia ao final. Qualquer falha no processamento gera nova tentativa a cada 10 segundos, até 100 vezes.
  • Data de pagamento padrão: o próximo dia útil, pelo calendário de feriados de São Paulo. Data de pagamento no passado é recusada com 400.
  • Notificação: webhook tax_payment_form, com as ações created_successfully, creation_failed e creation_not_needed.
  • O Payment Forms não é chamado pela emissão da NF-e ou da NFC-e: o cliente o aciona depois que a NF-e está autorizada.

8. Relação entre NF-e, NFC-e e Taxes​

8.1 Como o cliente pede o cálculo​

TributosComo pedir no payload da NF-e ou da NFC-e
ICMS, ICMS-ST, FCP, DIFAL, IPI, PIS e COFINSInformar, no item, o bloco taxDetermination (código da operação, perfis tributários do emitente e do destinatário, origem e finalidade de aquisição). Com esse bloco, o CFOP se torna opcional
IBS e CBSInformar, no item, tax.ibscbs.calculationMode = OfficialService com o código de classificação tributária

Sem esses campos, os valores informados no payload são usados como vieram e o Taxes não é chamado.

8.2 Quando e onde o cálculo acontece​

Produto e modoOnde o Taxes é chamadoMomento
NF-eWorkerEtapa de criação, antes da numeração e da assinatura
NFC-e assíncronaWorkerEtapa de criação
NFC-e síncronaAPI, dentro da requisição do clienteAntes da criação da nota

O resultado é aplicado a cada item: CFOP (conferido com o informado pelo cliente, quando houver), CST/CSOSN, bases, alíquotas e valores, cBenef e CEST (quando o cliente não informou). As informações adicionais do produto são acrescentadas às do item.

8.3 Dispensa do cálculo​

  • As notas de crédito e as de débito dos tipos 01, 02, 03, 05 e 08 não passam pelo motor.
  • Emitente contribuinte exclusivamente de IBS/CBS (sem inscrição estadual) não passa pelo cálculo de ICMS, IPI, PIS e COFINS, apenas pelo de IBS e CBS.

8.4 Falhas do cálculo durante a emissão​

Resposta do TaxesNF-e e NFC-e assíncronaNFC-e síncrona
SucessoSegue a emissãoSegue a emissão
Rejeição (4xx), por exemplo, regra não encontradaNota recusada (Error, issued_error) com "Error while calculating taxes" e o motivo422 com o código 42201; a nota fica registrada como recusada
Indisponível (5xx, falha de rede ou de credencial do serviço)Novas tentativas com espera crescente por até 50 tentativas (cerca de 2 horas e meia). Esgotadas, a nota é recusada503; nenhuma nota é criada e o pedido pode ser reenviado
IBS/CBS com falha de credencialAté 5 novas tentativas503
IBS/CBS com outra falhaNota recusada422

Além disso, cada chamada ao Taxes tem até 2 novas tentativas internas, com 5 segundos de intervalo, em falhas de rede, tempo esgotado de requisição (408) e erros de servidor, exceto 503.


9. Regras de resiliência​

9.1 Novas tentativas por etapa​

Cada etapa que termina em falha transitória é reagendada. A primeira execução de cada etapa é imediata; cada repetição espera o degrau seguinte desta escada, e a contagem recomeça quando a nota muda de etapa:

EtapaEspera entre as tentativas
Envio à SEFAZ5 s, 10 s, 15 s, 1 min, 5 min e, a partir daí, 10 min
Consulta pela chave de acesso30 s, 1 min, 2 min, 4 min, 8 min, 16 min, 32 min e, a partir daí, 64 min
Consulta pelo recibo (lote assíncrono)5 s, 10 s, 1 min, 5 min, 10 min, 1 h e, a partir daí, 13 min
Retransmissão de NFC-e em contingência offlineA cada 10 min
Demais etapas (criação, numeração, notificação, cancelamento, CC-e, inutilização e transmissão das notas EPEC à SEFAZ de origem)5 s até a 10ª tentativa, 1 min até a 20ª, 5 min até a 50ª e, a partir daí, 10 min

Exceções: no fluxo de contingência (transmissão das notas em EPEC), o envio e a consulta pelo recibo seguem a escada das demais etapas; na consulta pela chave que acabou de reenviar a nota no ciclo do cStat 217 (NFC-e), vale a escada do envio.

9.2 Limites​

LimiteValorEfeito ao ser atingido
Tentativas de negócio por etapa (envio, consulta, cancelamento, CC-e, inutilização)100A nota termina com a ação _failed (por exemplo, issued_failed). No envio, isso corresponde a cerca de 16 horas de indisponibilidade contínua
Consultas com 217 (NF-e)8issued_error com cStat 217
Ciclos de consulta e reenvio com 217 (NFC-e)10issued_error com cStat 217
Tentativas do cálculo de impostos indisponível50 (cerca de 2 horas e meia)Nota recusada
Teto técnico de tentativas por etapa150A nota é encerrada com erro e o motivo fica registrado nos eventos
Reentregas imediatas de uma mensagem com falha10A mensagem vai para a fila de erro, sem alterar a nota, e pode ser reprocessada pela equipe de operação

9.3 Classificação das falhas​

TipoExemplosTratamento
TransitóriaSEFAZ indisponível, sem comunicação, serviço interno indisponível, cálculo de impostos indisponívelRepete a mesma etapa com espera crescente
InconclusivaTempo esgotado, lote recebido sem resultado, duplicidade da própria notaConsulta pela chave de acesso
DefinitivaRejeição da SEFAZ, erro de schema, certificado vencido ou recusado, cadastro inativo, rejeição do cálculo de impostosEncerra a nota com o motivo

9.4 Trava por nota​

  • Toda etapa é executada sob uma trava distribuída por nota, com validade de 5 minutos.
  • Se a trava está ocupada, a etapa é reagendada com espera de 2, 5, 15, 30, 60 e, daí em diante, 120 segundos (com variação aleatória de 20%, para não concentrar as retomadas), sem consumir o contador de tentativas da etapa. Após 30 reagendamentos (cerca de 52 minutos), a nota é encerrada com erro e o motivo fica registrado.
  • Na API, operações que também exigem a trava (por exemplo, a geração do DANFE) respondem 409 com o cabeçalho Retry-After: 2 quando a nota está em processamento.

9.5 Tempos máximos​

ChamadaTempo máximo
Web Services da SEFAZAté 120 s por chamada
Autorização na NFC-e síncronaAté 8 s, dentro do limite total de 10 s
Cálculo de impostos (chamada da emissão)260 s, com até 2 novas tentativas de 5 s
Motor de regras tributárias (chamada do Taxes)200 s, com até 2 novas tentativas de 5 s e novas tentativas curtas (até 5, em até 5 s) para respostas transitórias

9.6 Webhooks​

  • A etapa de notificação é repetida enquanto a plataforma de notificações estiver indisponível.
  • A entrega ao endpoint do cliente é at-least-once, com reentrega automática em falha de rede ou resposta diferente de 2xx (até 16 tentativas ao longo de cerca de 45 horas) e assinatura HMAC. Veja o catálogo de eventos de webhook.
  • Se o cliente não tem webhook cadastrado, a plataforma registra o fato no histórico da nota; o resultado continua disponível na consulta.

9.7 Infraestrutura​

  • Réplicas das APIs com autoescalonamento horizontal.
  • Verificações de vivacidade e de prontidão, que conferem event store, armazenamento, broker, cache e os serviços de cadastro e de certificados.
  • Filas de erro por produto para as mensagens que esgotam as reentregas.
  • Monitor externo de heartbeat e rastreamento distribuído de ponta a ponta.

10. Regras de idempotência​

10.1 Garantias da plataforma​

GarantiaComo é obtida
Uma única execução por nota e por operaçãoControle de admissão: a entrada de uma operação sobre uma nota (cancelamento, CC-e, inutilização, evento, vínculo de nota de crédito) grava um registro condicional por nota e operação; um registro sem atividade por 24 horas é considerado abandonado. Um pedido repetido enquanto a execução está viva é descartado sem nova chamada à SEFAZ e sem novo webhook. Logo após a conclusão, uma janela de 5 minutos impede a readmissão imediata do mesmo trabalho. Na emissão, o controle protege as republicações internas; cada POST do cliente cria uma nota nova (seção 10.2)
Mensagem processada uma vezO consumidor registra cada mensagem processada e descarta a reentrega dentro de uma janela de 5 minutos
Uma etapa por vezTrava distribuída por nota (seção 9.4)
Nada é perdido ou sobrescritoEvent Sourcing com controle de concorrência otimista: dois processos não conseguem gravar a mesma versão da nota
Retomada seguraUma etapa repetida parte do estado gravado: a criação de uma nota que já existe retoma o fluxo; a assinatura não é refeita se o XML já foi assinado
Nenhum reenvio às cegasTempo esgotado e duplicidade levam à consulta pela chave de acesso. A SEFAZ garante a unicidade da chave de acesso; o cStat 204 ou 539 com a chave da própria nota leva à consulta pela chave, que recupera o protocolo quando a nota está autorizada
Inutilização de faixa repetidaRetorna sucesso quando a faixa já está inutilizada
Webhook repetidoO cabeçalho X-Hook-Id identifica a notificação para o tratamento idempotente no cliente

10.2 O que é responsabilidade do cliente​

  • Cada POST de emissão cria uma nova nota, com novo id e, se o número não for informado, novo número. A API não tem chave de idempotência para o pedido de emissão.
  • Guarde o id devolvido e use-o como referência para consulta, cancelamento e conciliação.
  • Se a requisição de emissão terminar sem resposta (tempo esgotado ou queda de conexão), não reenvie de imediato: consulte a listagem de notas da empresa para verificar se a nota foi criada.
  • Se o seu sistema informa o número da nota, garanta a unicidade por série: um número repetido é rejeitado pela SEFAZ com cStat 539.
  • Trate os webhooks de forma idempotente e responda 2xx rapidamente.

11. Contingência​

11.1 Visão geral​

ProdutoModalidade usadatpEmisComo é acionada
NF-eEPEC4Pelo cliente (estratégia Manual) ou pela NFE.io, por UF (estratégia StateTaxAuthorityStatusUnavailable)
NFC-eContingência offline9Automaticamente, por tempo esgotado ou indisponibilidade da SEFAZ, e preventivamente por disjuntor por UF, para inscrições estaduais habilitadas

As modalidades SVC-AN e SVC-RS (tpEmis 6 e 7) e as de formulário de segurança (FS-IA e FS-DA) não são utilizadas pela plataforma.

11.2 NF-e: EPEC​

Parametrização​

A estratégia de contingência é definida por inscrição estadual, no campo processingDetails.switchAuthorizerStrategy do cadastro da IE (API de Empresas, criação ou alteração da inscrição estadual):

EstratégiaQuem decide o início e o fim da contingênciaComo
ManualO clientePOST /v2/companies/{company_id}/statetaxes/{state_tax_id}/switch-authorizer com {"authorizer": "EPEC", "reason": "<justificativa>"} para entrar e {"authorizer": "Normal", "reason": "<justificativa>"} para sair. A resposta traz o autorizador anterior, o novo, a justificativa e a data e hora da troca
StateTaxAuthorityStatusUnavailableA NFE.ioAo identificar instabilidade da SEFAZ de uma UF, a equipe de operação da NFE.io ativa a contingência daquela UF. Todas as empresas da UF com essa estratégia passam a emitir em EPEC e voltam ao normal quando a NFE.io encerra a contingência da UF
  • Na estratégia Manual, a justificativa informada (reason, de 15 a 256 caracteres para a entrada em EPEC) vira o xJust da nota e a data e hora da troca vira o dhCont.
  • Na estratégia StateTaxAuthorityStatusUnavailable, o xJust e o dhCont vêm da ativação feita pela NFE.io para a UF.
  • O status da SEFAZ não é sondado automaticamente pela plataforma: a ativação por UF é uma decisão da equipe de operação, com base no monitoramento da SEFAZ.

Regras de aplicação​

  • A contingência é aplicada na criação da nota. Notas criadas depois da ativação são emitidas em EPEC.
  • Notas que já estavam em processamento no momento da ativação não migram para o EPEC: elas seguem tentando a SEFAZ de origem, com as regras de nova tentativa da seção 9, até a SEFAZ voltar.
  • A partir de 05/10/2026, a regra de validação 2P10-20 da NT 2014.001 v1.41 veda o EPEC para emitentes do PR e da PB. A plataforma já tem essa verificação implementada, para ativação na data de vigência: a partir dela, a emissão em EPEC desses emitentes é recusada com a indicação da regra.

Fluxo​

  1. A NF-e é gerada com tpEmis 4, dhCont e xJust.
  2. O evento EPEC (110140) é assinado e enviado ao Web Service de Recepção de Eventos do Ambiente Nacional.
  3. Com o evento registrado, a nota fica com status IssuedContingency, o XML do evento fica disponível em .../xml-epec e o DANFE é impresso com a marcação de contingência. O cliente recebe product_invoice.issued_successfully com status igual a IssuedContingency.
  4. A mercadoria pode circular com o DANFE em EPEC.

Retorno à normalidade​

  • A contingência termina quando o cliente troca o autorizador para Normal (estratégia Manual) ou quando a NFE.io encerra a contingência da UF (estratégia StateTaxAuthorityStatusUnavailable). As novas notas voltam a ser emitidas com tpEmis 1.
  • A NF-e emitida em EPEC precisa ser transmitida à SEFAZ de origem em até 168 horas da emissão (Ajuste SINIEF 07/05), mantendo a mesma chave de acesso. A transmissão posterior usa o envio em lote com consulta de recibo; a nota passa a Issued ao ser autorizada.
  • A regularização das notas em EPEC no encerramento da contingência é conduzida pela equipe de operação da NFE.io. O cliente acompanha as notas pendentes pelo status IssuedContingency.

11.3 NFC-e: contingência offline​

Parametrização​

ParâmetroValor em produçãoQuem define
Habilitação da contingência offlinePor inscrição estadualNFE.io, a pedido do cliente
Estratégia de troca de autorizador da IESomente ManualCliente, no cadastro da IE
Falhas consecutivas (tempo esgotado ou indisponibilidade) para abrir o disjuntor da UF5NFE.io
Intervalo de retransmissão10 minutosNFE.io
Tempo total da emissão síncrona no worker10 sNFE.io
Prazo máximo da chamada de autorização (síncrona)8 sNFE.io
Reserva de tempo para a contingência (síncrona)2 sNFE.io

A contingência offline é habilitada por inscrição estadual. Uma IE não habilitada não emite em contingência: diante de tempo esgotado, a nota segue o fluxo normal de consulta pela chave de acesso; diante de indisponibilidade da SEFAZ, a emissão assíncrona tenta novamente e a emissão síncrona recusa a nota (Error), que deve ser reenviada pelo cliente.

Modo reativo​

  1. A autorização normal (tpEmis 1) termina em tempo esgotado ou em indisponibilidade da SEFAZ.
  2. A plataforma registra a falha no disjuntor da UF.
  3. Para uma IE habilitada, a nota é regenerada com tpEmis 9: nova chave de acesso, dhCont igual à data e hora do momento e xJust igual a "Intermitência na comunicação com a SEFAZ.". O XML é assinado novamente, com o QR Code da contingência. A chave da tentativa normal é guardada como "chave abandonada".
  4. A nota passa a IssuedContingency. No modo assíncrono, o cliente recebe consumer_invoice.issued_contingency; no modo síncrono, a resposta é 200 com esse status. O DANFE NFC-e pode ser entregue ao consumidor.
  5. Se a regeneração falhar, a nota em contingência não é gravada e a tentativa normal segue as regras da IE não habilitada (parágrafo que antecede o Modo reativo).

Modo proativo (disjuntor por UF)​

  • Abertura: 5 falhas consecutivas por tempo esgotado ou indisponibilidade na mesma UF, em qualquer inscrição estadual, abrem o disjuntor daquela UF.
  • Com o disjuntor aberto: as notas de IEs habilitadas vão direto para tpEmis 9, sem tentar a autorização normal, com dhCont igual à data e hora de abertura do disjuntor. Isso poupa o consumidor da espera por uma SEFAZ que já está falhando.
  • Fechamento: qualquer autorização normal bem-sucedida na UF ou qualquer retransmissão de contingência autorizada fecha o disjuntor. Como proteção, o estado do disjuntor expira 24 horas depois da última falha registrada.
  • Se o controle do disjuntor estiver inacessível, a plataforma o considera fechado e segue a autorização normal.

Transmissão posterior​

  1. A primeira transmissão é imediata e as seguintes ocorrem a cada 10 minutos, enviando o XML offline já assinado.
  2. Autorizada: a nota passa a Issued, o cliente recebe issued_successfully e o disjuntor da UF é fechado.
  3. Duplicidade com a chave abandonada: se a SEFAZ informar que a tentativa normal original (tpEmis 1) foi autorizada, prevalece a nota original: a plataforma reconcilia a nota para a chave tpEmis 1, consulta o protocolo e conclui como Issued.
  4. Tempo esgotado ou indisponibilidade: nova transmissão no ciclo seguinte.
  5. Rejeição definitiva: a nota termina com Error e issued_error. Pelo Ajuste SINIEF 19/16, cabe ao contribuinte regenerar a nota com o mesmo número e série, sem alterar valores, partes e datas, e obter a autorização.
  6. Tentativas esgotadas: ao atingir o limite de 100 tentativas de envio (seção 9.2), a nota termina com issued_failed e exige tratamento.

O prazo legal de transmissão é o final do primeiro dia útil subsequente à emissão (Ajuste SINIEF 19/16). O ciclo de 10 minutos existe para regularizar a nota, assim que a SEFAZ voltar, muito antes desse prazo.

Regras complementares​

  • O cancelamento só é aceito depois que a nota em contingência é autorizada.
  • A numeração de NFC-e emitida em contingência não pode ser inutilizada.
  • O EPEC não é utilizado na NFC-e: a estratégia da IE de NFC-e deve ser Manual, e a contingência disponível é a offline.

11.4 Quadro-resumo da parametrização​

ParâmetroProdutoOnde se configuraValores
processingDetails.switchAuthorizerStrategyNF-e e NFC-eCadastro da inscrição estadual (API de Empresas)Manual, StateTaxAuthorityStatusUnavailable (somente NF-e)
switch-authorizer (authorizer, reason)NF-ePOST /v2/companies/{company_id}/statetaxes/{state_tax_id}/switch-authorizerEPEC ou Normal, com justificativa
Contingência por UFNF-eOperação NFE.ioAtiva ou inativa, com justificativa e início
Contingência offline por IENFC-eOperação NFE.io, a pedido do clienteHabilitada ou não
Limiar do disjuntor por UFNFC-eConfiguração da plataforma5 falhas consecutivas (tempo esgotado ou indisponibilidade)
Intervalo de retransmissãoNFC-eConfiguração da plataforma10 minutos
Prazos da emissão síncronaNFC-eConfiguração da plataforma10 s total, 8 s para a SEFAZ, 2 s de reserva

12. Responsabilidades do cliente​

  1. Manter o certificado A1 válido e o cadastro da empresa e das inscrições estaduais em dia (série, ambiente, CSC da NFC-e, estratégia de contingência).
  2. Guardar o id de cada nota e não reenviar pedidos sem antes consultar (seção 10.2).
  3. Garantir a unicidade da numeração por série quando o seu sistema informar o número.
  4. Cadastrar e tratar os webhooks de forma idempotente, respondendo 2xx rapidamente.
  5. Na estratégia Manual da NF-e, decidir o início e o fim da contingência EPEC e acompanhar, pelo status IssuedContingency, a regularização das notas no prazo legal.
  6. Na NFC-e em contingência offline, entregar ao consumidor o DANFE NFC-e com a indicação de contingência e regularizar as notas que terminarem com rejeição.
  7. Respeitar os prazos legais de cancelamento, CC-e e inutilização.

13. Referências governamentais​

NFE.io

A NFE.io é uma empresa de tecnologia que fornece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas. Com suas ferramentas, as empresas podem economizar tempo e reduzir erros, aumentando a eficiência e precisão do processo de emissão de notas fiscais.

Um dos principais cases de sucesso da NFE.io é a implementação da solução na empresa de transporte Rodonaves. Com a automatização da emissão e gestão de notas fiscais eletrônicas, a Rodonaves conseguiu reduzir em até 80% o tempo gasto nesse processo, o que se traduziu em uma significativa melhoria na eficiência operacional. Além disso, a empresa também conseguiu eliminar erros e atrasos na emissão de notas fiscais, o que melhorou a relação com seus clientes e aumentou a confiança dos órgãos fiscais.

Outro exemplo é a implementação da NFE.io na empresa de comércio eletrônico, a Loja Integrada. Com a automatização da emissão de notas fiscais, a Loja Integrada conseguiu aumentar a velocidade de emissão de notas em até 10 vezes, o que permitiu que a empresa atendesse a uma maior quantidade de clientes e, consequentemente, aumentar as suas vendas.

Além desses exemplos, a NFE.io também tem outros cases de sucesso com empresas de setores como indústria, construção, varejo e serviços, mostrando a versatilidade e eficácia da sua solução.

Em resumo, a NFE.io é uma empresa de tecnologia que oferece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas, ajudando as empresas a economizar tempo e reduzir erros, melhorando a eficiência e precisão do processo. Com cases de sucesso em diferentes setores, a NFE.io tem se destacado como uma empresa líder em automação fiscal.