# Fluxo - Envio Assíncrono da NFS-e

A emissão de uma NFS-e abrange as operações comerciais de uma prestação de serviços.&#x20;

O fluxo demonstrado a seguir trata a emissão da nota dentro da integração com a InvoiSys.

## Endpoints Essenciais 💡

* **Envio Completo do documento**: [/api/nfse/enviocompleto\_async](../../../../../endpoints/emissao-notas/nfs-e-1/api-envio-completo-do-rps)
* **Consultar RPS na Prefeitura**: [/api/nfse/consultarenviorps](../../../../../endpoints/emissao-notas/nfs-e-1/api-consultar-rps-na-prefeitura)​

## Endpoints Opcionais 🥈

* **Consultar NFS-e por Id Documento:** [**/**&#x61;pi/nfse/{id}](../../../../../endpoints/emissao-notas/nfs-e-1/api-consultar-nfs-e-por-id-rps)

## Etapas e seus endpoints

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

### 1) Operação da Prestação de Serviço

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

A sua missão é gerar os dados da operação, como Serviço, Número/Série do RPS, etc., e criar um JSON que será repassado para nós.

Assim que recebermos a chamada, faremos algumas validações, e se estiver correto, assinaremos o mesmo e o transmitiremos à Prefeitura.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LvGK8bN9Wb4tAZ71Tel%2F-LvGLvrSLkpK92erVz1O%2F01.png?alt=media\&token=81df1f8e-e18f-4d78-8cc6-72b440f31004)

### 2) Retorno da Chamada

Todo documento enviado para a SEFAZ gera um mensagem de retorno. Esta mensagem será recebida por nós e te repassaremos. Como se trata de uma operação assíncrona, o que você irá ver são as informações principais da NFS-e.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwKS038m3XUH6rhIwjU%2F-LwKTqgQEf997V-QWWDh%2F02.png?alt=media\&token=33294c5c-a58a-4cee-ab3c-f47e763ea5b7)

As informações que você deverá se atentar em guardar é o `id`. Abaixo temos um exemplo de retorno de uma operação assíncrona:

{% tabs %}
{% tab title="Response code: Created 201" %}
```javascript
{
  "id": "4600",
  "excecao": null
}
```
{% endtab %}
{% endtabs %}

Posteriormente você poderá realizar a consulta destes documentos por nosso endpoint de [Consulta por ID documento](../../../../../endpoints/emissao-notas/nfs-e-1/api-consultar-nfs-e-por-id-rps) para obter novamente o retorno completo destas NFS-es.

### 3) Consulta do RPS na Prefeitura

Com os dados em mãos, devemos realizar a consulta do status desta nota. Para isto, usamos a [API de Consulta do Envio RPS](../../../../../endpoints/emissao-notas/nfs-e-1/api-consultar-rps-na-prefeitura) para verificar na Prefeitura qual a situaçao do do documento.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwKS038m3XUH6rhIwjU%2F-LwKU--UpM24E7ZlVW_j%2F03.png?alt=media\&token=6c64bfb6-ed1e-4c64-824e-af0cd4603768)

Entre os cenários previstos na consulta de uma NFS, estão:

[a) Autorização](#a-autorizacao-da-nfs-e);\
[b) Rejeição](#b-rejeicao-da-nfs-e);\
[c) Aguardando Processamento](#c-aguardando-processamento).

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwKS038m3XUH6rhIwjU%2F-LwKUBL9nA5ASEQuouzm%2F04.png?alt=media\&token=485d00ea-fba8-4569-bb8d-8192c91ac8a0)

### a) Autorização da NFS-e

Para identificarmos que foi um sucesso, devemos checar as informações abaixo de nosso retorno:

* `status`: Retorno `Autorizado`;
* `sucesso`: Retorno `true`.

A seguir temos um exemplo de um retorno após a autorização de um documento:

{% tabs %}
{% tab title="Response code: OK 200" %}
```javascript
{
  "numeroNFSe": 68,
  "sucesso": true,
  "autenticidade": null,
  "linkImpressao": "https://itapira.sigiss.com.br/nfe_ver.php?id=1840098&id_cadastro=156909&hash=YMI9VDS9&nfe=68",
  "xml": null,
  "excecao": null,
  "status": "Autorizado"
}
```
{% endtab %}
{% endtabs %}

#### Impressão da NFS-e

Se a nota estiver autorizada, então podemos realizar a impressão do DANFE. Nós deixamos disponivel na tag `linkImpressao` um link de acesso criado pela Prefeitura que possuirá este recibo.

{% hint style="info" %}
#### Minha nota foi autorizada, mas estava com uma informação errada! 😓

Neste caso, a opção é realizar o cancelamento do documento, e realizar a emissão de uma nota NFS-e.
{% endhint %}

### b) Rejeição da NFS-e

Alguns imprevistos ocorrem. Para identificarmos se o documento apresentou uma rejeição, devemos checar se a

* `sucesso`: Retorno `false`.
* `status`: Retorno `Erro`.

![](https://3525778293-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lmo0dH8REcSzSboskDA%2F-LwKS038m3XUH6rhIwjU%2F-LwKUMoTn1YHp81XAK36%2F05.png?alt=media\&token=8b021f5f-4a5a-469c-9ce3-c483faae7402)

Realmente houve um erro? Então podemos checar a seguintes informações retornada para você:

* `excecoes`: Retorno da rejeição, informado pela Prefeitura;
* `solucao`: Caso a Prefeitura disponibilize, informando como corrigir a rejeição.

No exemplo a seguir vemos uma nota que foi rejeitada por estar com um código de serviço inválido:

{% tabs %}
{% tab title="Response code: OK 200" %}
```javascript
{
  "id": 1220,
  "numeroNFSe": 0,
  "numeroRPS": 6,
  "serieRPS": "6",
  "status": "Erro",
  "sucesso": false,
  "linkImpressao": null,
  "codigoVerificacao": null,
  "excecoes": [
    "E15 Código do Serviço não encontrado, favor informar apenas números."
  ],
  "solucao": null
}
```
{% endtab %}
{% endtabs %}

Corrigido? Então vamos voltar para [primeira etapa do envio](#1-operacao-da-prestacao-de-servico). Se desta vez tudo estiver certo, a Prefeitura irá autorizar esta NFS-e.

### c) Aguardando Processamento

Uma Prefeitura pode demorar um tempo até que um RPS seja processado. Quando isto ocorre, nós te mostraremos as seguintes informações:

* `sucesso`: Retorno `false`;
* `status`: Retorno `Aguardando consulta lote`.

{% tabs %}
{% tab title="Response code: OK 200" %}
```javascript
{
  "id": 1220,
  "numeroNFSe": 0,
  "numeroRPS": 6,
  "serieRPS": "6",
  "status": "Aguardando consulta lote",
  "sucesso": false,
  "linkImpressao": null,
  "codigoVerificacao": null,
  "excecoes": null,
  "solucao": null
}
```
{% endtab %}
{% endtabs %}

Neste cenário, você deverá esperar um momento antes de realizar uma nova [tentativa de consulta do RPS](#3-consulta-do-rps-na-prefeitura).&#x20;

{% hint style="info" %}
É necessário implementar essa rotina de consulta do documento, atentando-se aos seguintes detalhes:&#x20;

* [x] Não requisitar outra antes de obter uma reposta à consulta anterior.
* [x] Manter a nota na rotina de consulta, até receber o status final dela (Erro/Autorizado).
* [x] Agendar as consultas com um espaço de tempo entre as mesmas.
* [x] Interromper a rotina de consulta assim que finalizada a operação (status final do documento).
{% endhint %}



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