# 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](https://integracao.gitbook.io/invoisys/endpoints/emissao-notas/nfs-e-1/api-envio-completo-do-rps)
* **Consultar RPS na Prefeitura**: [/api/nfse/consultarenviorps](https://integracao.gitbook.io/invoisys/endpoints/emissao-notas/nfs-e-1/api-consultar-rps-na-prefeitura)​

## Endpoints Opcionais 🥈

* **Consultar NFS-e por Id Documento:** [**/**&#x61;pi/nfse/{id}](https://integracao.gitbook.io/invoisys/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](https://integracao.gitbook.io/invoisys/endpoints/autorizacao/autenticacao) de acesso válido, pois este será utilizado no cabeçalho da chamada do [Envio Assíncrono da NFS-e](https://integracao.gitbook.io/invoisys/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](https://integracao.gitbook.io/invoisys/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](https://integracao.gitbook.io/invoisys/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.


---

# 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/nfs-e/fluxo-operacional/fluxo-envio-assincrono-da-nfs-e.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.
