# Fluxo - Envio Contingência Off-Line NFC-e

## O que é a emissão em contingência off-line?

A emissão em contingência off-line é um processo criado para que, sempre que hajam problemas de comunicação entre a solução integradora e a solução InvoiSys, o contribuinte tenha um respaldo para que sua operação prossiga normalmente.

{% hint style="warning" %}
**Modelo de Integração Completo**\
Este fluxo é específico para quem estiver integrando com a nossa solução utilizando o [Modelo Completo](../..#modelo-completo)!
{% endhint %}

## API's Essenciais 💡

* **Envio Completo em contingência do documento**: [/api/nfce/envioxmlcontingencia](../../../../../endpoints/emissao-notas/nfc-e-1/api-envio-contingencia-completo-da-nfc-e)
* **Gerar DANFE**: [/api/nfce/getdanfe/{id}](../../../../../endpoints/emissao-notas/nf-e/api-danfe-por-id)
* **Cancelar documento por ID Estabelecimento**: [/api/nfce/cancelarnfce](../../../../../endpoints/emissao-notas/nfc-e-1/api-cancelar-inutilizar-nfc-e)
* **Cancelar documento por CNPJ**: [/api/nfce/cancelarnfcecnpj](../../../../../endpoints/emissao-notas/nfc-e-1/api-cancelar-inutilizar-nfc-e-por-cnpj)

## API's Opcionais 🥈

* **Envio Completo do documento**: [/api/nfce/envioxmlnormal](../../../../../endpoints/emissao-notas/nfc-e-1/api-envio-normal-completo-da-nfc-e)
* **Consulta do documento por Chave de Acesso**: [/api/nfce/getbychavedeacesso/{chave}](../../../../../endpoints/emissao-notas/nfc-e-1/api-consulta-nfc-e-por-chave-de-acesso)
* **Consulta do documento por Número/Série**: [/api/nfce/getby\_numero\_serie\_cnpj/{numero}/{serie}/{cnpj}/{ambiente}](../../../../../endpoints/emissao-notas/nfc-e-1/api-consulta-nfc-e-por-numero-e-serie)
* **Consulta do documento por ID**: [/api/nfce/{id}](../../../../../endpoints/emissao-notas/nfc-e-1/api-consulta-nfc-e-por-id)

## Etapas e suas API's

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=1Ne-AvwivmaxVkCf34z_b5v7ETQbbaSx_) 📝.

### 1) Emissão da NFC-e

Antes de iniciamos a emissão da nota, é necessário estar com um token de acesso válido, pois este será utilizado no cabeçalho da chamada da [API de Envio](../../../../../endpoints/emissao-notas/nf-e/api-envio). Tendo ele em mãos, podemos partir para a emissão da nota.

A sua missão é gerar os dados da operação, como Produtos e Pagamentos, e criar um XML (Modelo Completo) que será mandado em nossas APIs.

### 2) Retorno da Chamada (Falha de Comunicação)

Diferentemente do que ocorre com outros fluxos, você não terá uma resposta de nossa solução, seja por queda da conexão ou intermitência de nosso serviço. Esta comunicação resultará em um _Timeout_.

{% hint style="info" %}
Em caso intermitência do serviço da invoiSys, a rota de emissão retornará o response code **404 (not found) ou 500 (internal server error) dentro do time out de 5 minutos da API.** Se obter esses retornos em mais de 5 chamadas subsequentes, recomendamos a entrada em contingência offline, como descrito no próximo tópico, e nova tentativa de emissão online após 30 minutos, reenviando todas as NFC-es represadas durante o período.
{% endhint %}

### 3) Emissão em Contingência Off-Line

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwJHHho8U043QuRLRE5%2F-LwJHomHCPHchNofd4is%2F01.png?alt=media\&token=acc1e6d4-baed-4557-9cc3-542f62a5b724)

Os documentos emitidos Normal que forem pegos com este _Timeout_ não poderão ser reutilizados para a emissão em contingência. Também temos o [embasamento legal](https://www.confaz.fazenda.gov.br/legislacao/ajustes/2005/AJ_007_05) sobre a não reutilização de um número emitido como normal para uma emissão em contingência.

> &#x20;**Cláusula décima primeira**\
> **...**\
> § 2º **É vedada**: A reutilização, em contingência, de número de NFC-e transmitida com tipo de emissão “Normal”;

{% hint style="info" %}
**Resumindo**\
Se eu emitir a nota 1/1 e receber um timeout, então deverei emiti-lá novamente na numeração 2/1. Depois, preciso fazer o cancelamento da nota 1/1.
{% endhint %}

Por estarmos trabalhando com um envio completo, você já deverá ter toda a validação básica necessária. Desta forma, podemos trabalhar com a operação off-line até que a conexão entre a solução integradora e InvoiSys seja reestabelecida.

Esta etapa da operação pode ser separada em três etapas:

[a) Emissão em Contingência Off-Line](#emissao-em-contingencia-off-line);\
[b) Impressão do DANFE](#impressao-do-danfe);\
[c) Armazenamento da NFC-e](#armazenamento-da-nfc-e).

#### Emissão em Contingência Off-Line

Sem a conexão, os documentos precisam ser emitidos em contingência. Isto significa que, dentro de seu XML, deverá ser preenchido as tags:

* `dhCont` que terá a data e hora de entrada em contingência;
* `xJust` que terá a justificativa da entrada em contingência.

#### Impressão do DANFE

Como você já possui todos os dados básicos da operação e de validação, será realizado a impressão do DANFE com a sua solução. Todos os dados no DANFE disponíveis para o cliente poderão ser acessadas posteriormente, quando a NFC-e for transmitida à SEFAZ.

#### Armazenamento da NFC-e

Até que a conexão seja restabelecida, todos os documentos emitidos neste intervalo deverão ser guardados por você, integrador.

### 4) Consulta da Disponibilidade

Esta etapa pode causar uma dúvida pontual no integrador:

"_Mas como eu posso checar a disponibilidade do serviço?"_

As possibilidades são grandes aqui!

Podemos, desde tentar periodicamente utilizar alguma API básica e observar se ela irá retornar um _Timeout_, ou você poderá criar algum procedimento interno que irá checar a disponibilidade. Neste etapa deixamos em aberto qual o método que você melhor achar.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwJHr3frzLEHbE0K4gQ%2F-LwJIDE3wmZgM-G26weg%2F02.png?alt=media\&token=43ce78a8-03b8-4438-958c-e56bf13f0e66)

_"Mas e depois de consultar a disponibilidade, o que eu faço?"_

Não se preocupe, pois esta consulta irá sempre resultar em um dos dois cenários:

[a) Sem Conexão](#sem-conexao);\
[b) Conexão Restabelecida](#conexao-restabelecida).

#### Sem Conexão

Ainda não é possível transmitir os documentos presos para a InvoiSys. Você ainda deverá emitir em contingência Off-Line!

#### Conexão Restabelecida

O link de conexão foi novamente criado, e você poderá nos enviar os documentos armazenados em sua solução.

### 5) Transmissão das Notas para a InvoiSys

Assim como no envio normal, as notas emitidas em contingência também terão uma mensagem de retorno da SEFAZ. Esta mensagem será recebida por nós, e em seguida retornaremos na mesma chamada da API juntamente com os dados do documento e suas respectivas ações. É com base nesse retorno que entendemos o que deve ser feito após a emissão da NF-e.

Nele existem algumas informações que podem ser interessantes você guardar, como a `chaveDeAcesso` e o `id` do documento criado em nossa base, pois são utilizados em outras APIs.

```javascript
{
  "dadosDoDocumento": {
    ...
    "documentoComErro": false,
    "codigoStatusSEFAZ": null,
    "descricaoStatusSEFAZ": null,
    ...
    "documentoJaEmitidoAnteriormente": false,
    "status": {
      "key": 4,
      "value": "Aguardando envio para SEFAZ"
    }
  },
  "acoes": {
    "corrigirDocumento": false,
    "cancelar": false,
    "enviarContingencia": false,
    "tentarNovamenteMaisTarde": false,
    "entrarEmContatoComSuporteImediatamente": false,
    "emitirProximoDocumentoNormal": true
  },
  "excecao": null
}
```

Resumidamente, com base no retorno podemos chegar a 3 cenários:

[a) Autorização da NFC-e](#autorizacao);\
[b) Rejeição da NFC-e](#rejeicao);\
[c) Exceção na comunicação com a SEFAZ](#excecao-na-comunicacao-com-a-sefaz);

#### a) Autorização

Para verificarmos se nota foi autorizada, devemos seguir os [mesmos passos descritos no fluxo do envio normal](../envio-normal-nfc-e-fluxo-completo#a-autorizacao-da-nfc-e).

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwJLGVGpchlVIdIfzRr%2F-LwJurqW7-o4nk8ztWUD%2F03.png?alt=media\&token=c1f2838e-f7ce-4f9c-bd20-2e4a3faabc4f)

{% hint style="info" %}
**Cancelamento por Substituição**\
A NFC-e emitida em contingência serve para acobertar a NFC-e que não teve retorno. Nós explicamos no [fluxo de Cancelamento/Inutilização da NFC-e](envio-cancelamento-inutilizacao-nfc-e-fluxo-completo)
{% endhint %}

#### b) Rejeição

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwJLGVGpchlVIdIfzRr%2F-LwJviLzAE6A9AAkSjFd%2F04.png?alt=media\&token=615a80bf-4c96-47c5-9011-b31ea6fcedef)

Assim como na autorização, também seguiremos o [mesmos passos do Fluxo de Envio Normal para identificar se a nota foi rejeitada e qual rejeição a nota recebeu](../envio-normal-nfc-e-fluxo-completo#b-rejeicao-da-nfc-e).

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

Este cenário é tratado por nossa solução. Quando ocorre o _Timeout_ no envio deste documento, nós fazemos o reagendamento automático.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwJvpLsydOEHVaQBfEb%2F-LwJwCmquaz396kJu5Mt%2F05.png?alt=media\&token=b682e616-99ab-4e3c-ad9f-84f6eaef076a)

Neste caso, você poderá utilizar a nossa [API de Consultar NFC-e](../../../../../endpoints/emissao-notas/nfc-e-1/api-consulta-nfc-e-por-id), [API de Consultar NFC-e por Númeoro e Série](../../../../../endpoints/emissao-notas/nfc-e-1/api-consulta-nfc-e-por-numero-e-serie) ou [API de Consultar NFC-e por Chave de Acesso](../../../../../endpoints/emissao-notas/nfc-e-1/api-consulta-nfc-e-por-chave-de-acesso) para checar periodicamente se o documento teve o status atualizado.



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