# Fluxo - Cancelamento/Inutilização da NF-e

O cancelamento permite ao contribuinte anular uma nota fiscal que já foi autorizada, mas para a qual não houve circulação de mercadoria. Já a inutilização permite declarar que uma determinada numeração de nota não foi utilizada, garantindo que a SEFAZ não suspeite de fraude. Para ambos os casos temos o [embasamento na legislação](https://www.confaz.fazenda.gov.br/legislacao/ajustes/2005/AJ_007_05):

#### Cancelamento

> **Cláusula décima segunda** Em prazo não superior a vinte e quatro horas, contado do momento em que foi concedida a Autorização de Uso da NF-e, de que trata o inciso III da cláusula sétima, o emitente poderá solicitar o cancelamento da respectiva NF-e, desde que não tenha havido a circulação da mercadoria ou a prestação de serviço e observadas as normas constantes na cláusula décima terceira.

#### Inutilização

> **Cláusula décima quarta** O contribuinte deverá solicitar, mediante Pedido de Inutilização de Número da NF-e, até o 10 (décimo) dia do mês subsequente, a inutilização de números de NF-e não utilizados, na eventualidade de quebra de sequência da numeração da NF-e.

Aí surge a pergunta:

"*Como sei qual devo utilizar? Tenho que mandar para APIs diferentes?*"

Isso a InvoiSys simplifica para você!

Nossa API pode ser utilizada tanto para o cancelamento quanto para a inutilização do documento e mais, você não precisa mapear do seu lado quando deve ser um e quando deve ser outro.

Logo abaixo vamos descrever para você todo o fluxo para a emissão do cancelamento/inutilização.

## APIs Essenciais 💡

* **Cancelamento NF-e por número e série**: [/api/nfe/cancelarnfecnpj](/invoisys/endpoints/emissao-notas/nf-e/api-cancelar-nf-e-por-cnpj-estabelecimento.md)

## APIs Opcionais 🥈

* **Consulta do Documento por Chave de Acesso**: [/api/nfe/getbychavesSTD/{chave}](/invoisys/endpoints/emissao-notas/nf-e/api-consulta-sefaz.md)
* **Obter o XML da NF-e:** [/api/nfe/obterxml](/invoisys/endpoints/emissao-notas/nf-e/api-danfe-por-id-1.md)

## Etapas e APIs

Para detalharmos melhor a operação, a separamos em tópicos, [porém você consegue ver o fluxo completo aqui](https://drive.google.com/open?id=1S4xa41og3mEuJyeCjmZkheqzOc2-nQ9m) 📝.

### 1) Emitindo o cancelamento/inutilização

Da mesma maneira que no [Envio Normal da NF-e](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/envio-normal-modelo-completo.md#1-emissao-da-nf-e), também precisamos nos atentar para termos um token de acesso válido.

Tendo ele em mãos devemos então escolher qual API utilizaremos. Atualmente temos duas, a [API - Cancelar NF-e por Id Estabelecimento](/invoisys/endpoints/emissao-notas/nf-e/api-cancelar-nf-e.md) e [API - Cancelar NF-e por CNPJ Estabelecimento](/invoisys/endpoints/emissao-notas/nf-e/api-cancelar-nf-e-por-cnpj-estabelecimento.md).

Depois de decidirmos qual API utilizaremos, devemos preparar o JSON com as informações e então realizar a chamada da API.

Ao receber a chamada, a InvoiSys verificará na SEFAZ se será necessário fazer a inutilização ou o cancelamento do documento. E será com base nessa resposta que o retorno chamada será elaborado.

![](/files/-LvfWzfTzwYWALmLSTsW)

{% hint style="warning" %}

#### Prazo máximo para cancelamento!

É importante relembrar que o prazo máximo para cancelamento é de **24 horas** contadas a partir da autorização da nota, podendo este tempo ser reduzido à critério da UF.
{% endhint %}

### 2) Retorno da chamada

Conforme falamos no tópico anterior, o retorno da chamada da API variará de acordo com o status do documento na SEFAZ. É com base nesse retorno que entendemos o que deve ser feito após a emissão do mesmo.

![](/files/-LwDtyfdNmpwHMNApf0a)

Assim como no [Envio Normal](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/envio-normal-modelo-completo.md#2-retorno-da-chamada), nele existem algumas informações que podem ser interessantes você guardar, como a `chaveDeAcesso` e, opcionalmente, o `id` do documento criado em nossa base, pois são utilizados em outras APIs.

Com base no retorno podemos chegar a 3 cenários:

[a) Cancelamento ou inutilização da NF-e (Sucesso);<br>](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/cancelamento-modelo-completo.md#a-cancelamento-ou-inutilizacao-da-nf-e-sucesso) [b) Rejeição no cancelamento;<br>](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/cancelamento-modelo-completo.md#b-rejeicao-no-cancelamento)[c) Exceção na comunicação com a SEFAZ](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/cancelamento-modelo-completo.md#c-excecao-na-comunicacao-com-a-sefaz)

![](/files/-LwDu6JmjG_66VxD61ry)

### a) Cancelamento ou inutilização da NF-e (Sucesso)

São os dois cenários de sucesso na chamada da API. Para isso devemos observar:&#x20;

* Tags do bloco `acoes`: Retorno `false`.

A seguir vamos entender como analisar se foi um cancelamento ou uma inutilização.

#### Cancelamento

Para o identificarmos, podemos checar os seguintes blocos:&#x20;

* `dadosDoDocumento:`&#x20;

* `codigoStatusSEFAZ` : Retorno `101` ;

* `descricaoStatusSEFAZ`: Retorno `Cancelamento de NF-e homologado`.

* `status: key` : Retorno `1` (ao [consultar](/invoisys/endpoints/emissao-notas/nf-e/api-consulta-sefaz.md) via chave);

* `status: value`: Retorno `cancelado` (ao [consultar](/invoisys/endpoints/emissao-notas/nf-e/api-consulta-sefaz.md) via chave).

Veja no exemplo abaixo:

{% tabs %}
{% tab title="Response code: Created 201" %}

```javascript
{
  "dadosDoDocumento": {
    "id": 1312,
    "chaveDeAcesso": "35191107544236000138550020000010141123412340",
    "dataHoraEmissao": "2019-11-06T16:22:19.457",
    "dataDeAutorizacao": "2019-11-07T14:33:06Z",
    "documentoComErro": false,
    "codigoStatusSEFAZ": "101",
    "descricaoStatusSEFAZ": "Cancelamento de NF-e homologado",
    "protocoloSEFAZ": "135190008021147",
    "urlConsultaViaQRCode": null,
    "urlConsultaViaChaveDeAcesso": null
  },
  "acoes": {
    "corrigirDocumento": false,
    "cancelar": false,
    "enviarContingencia": false,
    "tentarNovamenteMaisTarde": false,
    "entrarEmContatoComSuporteImediatamente": false
  },
  "excecao": null
}

```

{% endtab %}
{% endtabs %}

#### Inutilização

Já no caso de inutilização, veremos as seguintes informações:

* `dadosDoDocumento:`&#x20;

* `codigoStatusSEFAZ`: Retorno `102`

* `descricaoStatusSEFAZ`: Retorno `Inutilização de número homologado`.

* `status: key`: Retorno `2` (ao [consultar](/invoisys/endpoints/emissao-notas/nf-e/api-consulta-sefaz.md) via chave);

* `status: value`: Retorno `inutilizado` (ao [consultar](/invoisys/endpoints/emissao-notas/nf-e/api-consulta-sefaz.md) via chave).

Veja no exemplo abaixo:

{% tabs %}
{% tab title="Response code: Created 201" %}

```javascript
{
  "dadosDoDocumento": {
    "id": 1314,
    "chaveDeAcesso": "35191107544236000138550020000010151000000009",
    "dataHoraEmissao": "2019-11-07T14:36:24.7096147Z",
    "dataDeAutorizacao": null,
    "documentoComErro": false,
    "codigoStatusSEFAZ": "102",
    "descricaoStatusSEFAZ": "Inutilização de número homologado",
    "protocoloSEFAZ": "135190008021182",
    "urlConsultaViaQRCode": null,
    "urlConsultaViaChaveDeAcesso": null
  },
  "acoes": {
    "corrigirDocumento": false,
    "cancelar": false,
    "enviarContingencia": false,
    "tentarNovamenteMaisTarde": false,
    "entrarEmContatoComSuporteImediatamente": false
  },
  "excecao": null
}
```

{% endtab %}
{% endtabs %}

### b) Rejeição no cancelamento

Caso o cancelamento seja enviado após o período de 24 horas, a SEFAZ poderá rejeitá-lo, sendo assim, o status da na nota se manterá como autorizado.

![](/files/-LvfY4X3-YnqJjD283Td)

Quando isso ocorrer, em nosso retorno você verá o seguinte em nosso retorno:

* `acoes: corrigirDocumento`: Retorno `true`;
* `dadosDoDocumento: erro`: Retorno `true`;
* `excecao`: Retorno com *string* descrevendo a rejeição.

{% tabs %}
{% tab title="Response code: OK 200" %}

```javascript
{
  "dadosDoDocumento": {
    "id": 1297,
    "chaveDeAcesso": "26191129892534000151550030000000161123412349",
    "dataHoraEmissao": "2019-11-06T14:18:17.467",
    "dataDeAutorizacao": null,
    "documentoComErro": true,
    "codigoStatusSEFAZ": "100",
    "descricaoStatusSEFAZ": "Autorizado o uso da NF-e",
    "protocoloSEFAZ": "126190000302367",
    "urlConsultaViaQRCode": null,
    "urlConsultaViaChaveDeAcesso": null
  },
  "acoes": {
    "corrigirDocumento": true,
    "cancelar": false,
    "enviarContingencia": false,
    "tentarNovamenteMaisTarde": false,
    "entrarEmContatoComSuporteImediatamente": false
  },
  "excecao": "501 - Rejeição: Prazo de cancelamento superior ao previsto na Legislação"
}
```

{% endtab %}
{% endtabs %}

Você verificará que no exemplo acima o `codigoStatusSEFAZ` permanece como `100`, pois entendemos que, mesmo com a rejeição no cancelamento, o status final da nota é de autorizado.

{% hint style="danger" %}

#### Se atente ao prazo!

É extremamente importante não enviar mais o cancelamento caso este tenha passado no prazo. Se o envio continuar sendo realizado, a SEFAZ poderá bloquear as emissões com a justificativa de estar consumindo indevidamente o serviço.
{% endhint %}

{% hint style="info" %}
**Minha nota passou do prazo! E agora?**

Existem algumas maneiras de lidar com esse cenário, como, por exemplo, fazer uma solicitação formal para a SEFAZ da sua UF pedindo o cancelamento extemporâneo se esta disponibilizar.

Nós recomendamos que, quando isso acontecer, verifique com o departamento fiscal ou contabilidade sobre o que poderá ser feito.
{% endhint %}

### c) Exceção na comunicação com a SEFAZ

Assim como falamos no [Envio Normal](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/envio-normal-modelo-completo.md#c-excecao-na-comunicacao-com-a-sefaz), no cancelamento também podem haver exceções na comunicação com a SEFAZ.Quando isso ocorrer, você deverá observar a tag abaixo:

* `acoes: tentarNovamenteMaisTarde`: Retorno `true`.

```javascript
{
  "dadosDoDocumento": null,
  "acoes": {
    "corrigirDocumento": false,
    "cancelar": false,
    "enviarContingencia": false,
    "tentarNovamenteMaisTarde": true,
    "entrarEmContatoComSuporteImediatamente": false
  },
  "excecao": "The operation has timed out"
}
```

{% hint style="warning" %}

#### Não tente ficar enviando o cancelamento a todo momento.&#x20;

Lembre-se, quando há uma exceção na comunicação com a SEFAZ, não sabemos se ela aceitou ou não a requisição, sendo assim, o envio constante pode estar sendo aceito pela SEFAZ e eventualmente poderá ser bloqueado por consumo indevido.
{% endhint %}

{% hint style="success" %}

#### O que posso fazer?

Tenha uma rotina que, dentro do período válido para o cancelamento (24 horas), seu software tente fazer [envios ](/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/cancelamento-modelo-completo.md#1-emitindo-o-cancelamento-inutilizacao)em períodos espaçados de tempo. Dessa forma, nós evitamos tentar consumir os serviços da SEFAZ enquanto está intermitente
{% endhint %}

Terminamos esta etapa 😁. Para seguir, basta selecionar a *card* abaixo


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://integracao.gitbook.io/invoisys/getting-started/documentos-fiscais/emissao/nf-e/teste-fluxos-operacionais/cancelamento-modelo-completo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
