# 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](../../../../../endpoints/emissao-notas/nf-e/api-cancelar-nf-e-por-cnpj-estabelecimento)

## APIs Opcionais 🥈

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

## 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](../envio-normal-modelo-completo#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](../../../../../endpoints/emissao-notas/nf-e/api-cancelar-nf-e) e [API - Cancelar NF-e por CNPJ Estabelecimento](../../../../../endpoints/emissao-notas/nf-e/api-cancelar-nf-e-por-cnpj-estabelecimento).

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.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LvfVlmW1waPp39v1bjL%2F-LvfWzfTzwYWALmLSTsW%2F01.png?alt=media\&token=b90c2306-31f5-4a07-88aa-be0fa7c686bf)

{% 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.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwDpnYqWQfwI4uznYvo%2F-LwDtyfdNmpwHMNApf0a%2F02.png?alt=media\&token=01a911d4-0943-427b-adf2-b7a7da6f8d04)

Assim como no [Envio Normal](../envio-normal-modelo-completo#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);\
](#a-cancelamento-ou-inutilizacao-da-nf-e-sucesso) [b) Rejeição no cancelamento;\
](#b-rejeicao-no-cancelamento)[c) Exceção na comunicação com a SEFAZ](#c-excecao-na-comunicacao-com-a-sefaz)

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwDu48LTu1Am8hIgF8H%2F-LwDu6JmjG_66VxD61ry%2F06.png?alt=media\&token=e67b6dca-875a-4b7f-a054-8e80924d3d81)

### 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](../../../../../endpoints/emissao-notas/nf-e/api-consulta-sefaz) via chave);
* `status: value`: Retorno `cancelado` (ao [consultar](../../../../../endpoints/emissao-notas/nf-e/api-consulta-sefaz) 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 `1` (ao [consultar](../../../../../endpoints/emissao-notas/nf-e/api-consulta-sefaz) via chave);
* `status: value`: Retorno `inutilizado` (ao [consultar](../../../../../endpoints/emissao-notas/nf-e/api-consulta-sefaz) 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.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LvfVlmW1waPp39v1bjL%2F-LvfY4X3-YnqJjD283Td%2F04.png?alt=media\&token=0a5fe261-d511-4329-aa99-4cfa591e1fab)

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](../envio-normal-modelo-completo#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 ](#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
