# Listar todas as solicitações do sistema

## Como listar solicitações utilizando as API's do Zeev?

O Zeev oferece dois endpoints diferentes para obter os dados de monitoramento de uma instância.&#x20;

1. Se você precisa de filtros simples, o método **GET** oferece uma maneira mais prática de realizar a consulta
2. De preferência ao **POST** para consultas com filtros complexos;

Para consultar dados de monitoramento uma instância de solicitação utilizando as API's do Zeev, siga os passos abaixo:

1. **Autenticação**: Primeiro obtenha um [token de autenticação](https://kb.zeev.it/apis/como-gerar-tokens-para-autenticar-nas-apis) com permissão de realizar essa operação;
2. **Enviar a Requisição para**:
   1. [#api-2-instances-report](#api-2-instances-report "mention") (GET) se tiver uma menor complexidade de filtros;
   2. [#api-2-instances-report-1](#api-2-instances-report-1 "mention") (POST) se desejar aplicar filtros mais complexos;
3. **Paginar:** Observe que a consulta à essa API retorna um número limitado de registros; para obter todos os dados, [será necessário implementar um algoritmo de paginação](/zeev/apis/como-utilizar-as-apis-do-zeev/como-navegar-entre-paginas-de-retornos-de-apis.md);
4. ***Rate limit:*** Se for paginar os resultados, [respeite os limites máximos de solicitações](/zeev/apis/como-utilizar-as-apis-do-zeev/como-controlar-o-volume-maximo-de-requisicoes-a-apis.md);
5. **oData**: opcionalmente, utilize [regras oData](/zeev/apis/como-utilizar-as-apis-do-zeev/como-realizar-filtros-e-manipulacoes-adicionais-nas-apis-com-odata.md) para manipular o resultado da API. Essa API aceita `$select`

### Filtros obrigatórios

As regras de obrigatoriedade de atributos do corpo de requisição do Zeev variam de acordo com alguns cenários. Confira a relação abaixo:

* `instanceId` é obrigatório
* OU `startDateIntervalBegin` e `startDateIntervalEnd` são obrigatórios
* OU `endDateIntervalBegin` e `endDateIntervalEnd` são obrigatórios
* OU `lastTaskEndDateIntervalBegin` e `lastTaskEndDateIntervalEnd` são obrigatórios

{% hint style="info" %}
Observe que o filtro pelo número específico da solicitação é obrigatório, **OU** um filtro por intervalo de datas é obrigatório para listar diversas solicitações.&#x20;
{% endhint %}

### Como incluir a lista de tarefas pendentes e de tarefas concluídas junto as informações da solicitação?

Por padrão, essa consulta não traz a lista de tarefas pendentes e já concluídas. Para trazer essa informação, você deve instruir a chamada da API explicitamente que deseja essa informação. Para isso, são disponibilizados dois parâmetros:

* `showPendingInstanceTasks=true`\
  Indica que você deseja que a lista com informações das tarefas atualmente pendentes na solicitação sejam mostradas.
* `showFinishedInstanceTasks=true`\
  Indica que você deseja que a lista com informações das tarefas já concluídas na solicitação sejam mostradas.

Se estiver usando o método POST, esses dois parâmetros fazem parte do corpo JSON de requisição:

```json
{
    showPendingInstanceTasks: true,
    showFinishedInstanceTasks: true
}
```

### Como incluir a lista das pessoas atualmente responsáveis por uma tarefa da solicitação?

Para trazer essa informação, é preciso, primeiro, que o parâmetro `showPendingInstanceTasks=true` seja ativado. Ele irá trazer a lista das tarefas pendentes.

Então, você deve acrescentar o parâmetro `showPendingAssignees=true` . Esse parâmetro indica que você quer trazer junto o nome e identificação das pessoas responsáveis por cada tarefa pendente.

Se estiver usando o método POST, esses parâmetros fazem parte do corpo JSON de requisição:

```json
{
    showPendingInstanceTasks: true,
    showFinishedInstanceTasks: true,
    showPendingAssignees: true
}
```

### Como incluir valores de campos de formulário?

Por padrão, essa API não traz os valores de campos de formulário da solicitação. Para trazer essa informação, você precisa informar explicitamente o identificador dos campos de formulário que você deseja obter, usando o parâmetro formFieldNames. Por exemplo:

`formFieldNames=nomeCompleto&formFieldNames=idade&formFieldNames=endereco`

Se estiver usando o método POST, esse parâmetro é enviado na forma de um Array:

```
{
    formFieldNames: ["nomeCompleto", "idade", "endereco"]
}
```

### Como saber o resultado de uma instância de solicitação?

Para saber o status de uma solicitação, verifique os campos `active` e `flowResult` no resultado da requisição e siga estes passos:

1. **Verifique se a solicitação está ativa**:
   * Se a propriedade `active` for `true`, a solicitação está "Em andamento".
2. **Quando a solicitação não está mais ativa** (`active` é `false`):
   * Use o valor da propriedade `flowResult` para o status da solicitação.

```json

[
    //Solicitação em andamento
    {
        "id": 10023,
        "masterInstanceId": null,
        "starterInstanceId": null,
        "requestName": "[API] - Exemplos de uso v. 1",
        "reportLink": "https://seu_dominio.do.zeev/2.0/audit?c=YcJ6Q4dIKU%2FJqd1DDab2JISTPWhElmIzmD1ATDmYetS3G1InNFs%2F%2F4WtD5%2FYVBEQeG3Bk2%2FG6aEUWWVNXoNV%2B9nvMgqylZARoIktsIEx9tk%3D",
        "confirmationCode": "2LOFYZ",
        "uid": "5e4eef27-c962-429b-8839-6db162e38a95",
        "simulation": false,
        "active": true, // em andamento
        "flowResult": "",
        "flowResultId": 3,
        "startDateTime": "2024-08-06T15:43:34",
        "endDateTime": null,
        "cancelUserId": null,
        "lastFinishedTaskDateTime": "2024-08-06T15:43:34",
        "leadTimeInDays": null,
        "flow": {
            "id": 2590,
            "uid": "7a14be33-361b-4bde-a5e0-e2174d947cc1",
            "name": "[API] - Exemplos de uso",
            "version": 1
        },
        "service": null,
        "formFields": [],
        "requester": {
            "id": 2075,
            "name": "Alan Cooper",
            "email": "alan.cooper@zeev.it",
            "username": "alan.cooper@zeev.it",
            "team": null,
            "position": null
        },
        "instanceTasks": null
    },
    // Solicitação concluída
     {
        "id": 10023,
        "masterInstanceId": null,
        "starterInstanceId": null,
        "requestName": "[API] - Exemplos de uso v. 1",
        "reportLink": "https://seu_dominio.do.zeev/2.0/audit?c=YcJ6Q4dIKU%2FJqd1DDab2JISTPWhElmIzmD1ATDmYetS3G1InNFs%2F%2F4WtD5%2FYVBEQeG3Bk2%2FG6aEUWWVNXoNV%2B9nvMgqylZARoIktsIEx9tk%3D",
        "confirmationCode": "2LOFYZ",
        "uid": "5e4eef27-c962-429b-8839-6db162e38a95",
        "simulation": false,
        "active": false, //Não está mais em andamento
        "flowResult": "Concluído", // Status da solicitação
        "flowResultId": 3,
        "startDateTime": "2024-08-06T15:43:34",
        "endDateTime": "2024-08-06T15:45:34",
        "cancelUserId": null,
        "lastFinishedTaskDateTime": "2024-08-06T15:45:34",
        "leadTimeInDays": 0.00,
        "flow": {
            "id": 2590,
            "uid": "7a14be33-361b-4bde-a5e0-e2174d947cc1",
            "name": "[API] - Exemplos de uso",
            "version": 1
        },
        "service": null,
        "formFields": [],
        "requester": {
            "id": 2075,
            "name": "Alan Cooper",
            "email": "alan.cooper@zeev.it",
            "username": "alan.cooper@zeev.it",
            "team": null,
            "position": null
        },
        "instanceTasks": null
    }
]
```

<br>

{% openapi src="/files/DYIxvabeLXa2mL6uE2si" path="/api/2/instances/report" method="get" %}
[ZeevApi's\_new.json](https://3371003943-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MD66pBdRalAQgnhNstG%2Fuploads%2Ff5huLIsAqm88oSjkTavv%2FZeevApi's_new.json?alt=media\&token=aae47f9f-90ca-48d0-b250-fc38fe74e6c0)
{% endopenapi %}

{% hint style="warning" %}
A URL aberta gerada em **allowOpenUrlsForFilesInForm** tem prazo de validade de 5min.
{% endhint %}

#### Exemplo de requisição Get para o endpoint [#api-2-instances-report](#api-2-instances-report "mention")

{% tabs %}
{% tab title="Node.js" %}

```javascript
let instanceId = 1234;
const myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer TOKEN_DO_USUARIO");

const requestOptions = {
  method: "GET",
  headers: myHeaders
};

try {
  const response = await fetch($`https://seu_endereco.do.zeev/api/2/instances/report?instanceId=${instanceId}`, requestOptions);
  const result = await response.json();
  console.log(result)
} catch (error) {
  console.error(error);
};
```

{% endtab %}
{% endtabs %}

{% openapi src="/files/DYIxvabeLXa2mL6uE2si" path="/api/2/instances/report" method="post" %}
[ZeevApi's\_new.json](https://3371003943-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MD66pBdRalAQgnhNstG%2Fuploads%2Ff5huLIsAqm88oSjkTavv%2FZeevApi's_new.json?alt=media\&token=aae47f9f-90ca-48d0-b250-fc38fe74e6c0)
{% endopenapi %}

#### Exemplos de requisição para o endpoint [#api-2-instances-report-1](#api-2-instances-report-1 "mention")

{% tabs %}
{% tab title="Node.js" %}

```javascript
const myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer TOKEN_DO_USUARIO");

const raw = JSON.stringify({
  "startDateIntervalBegin": "2020-01-31T00:00:00",
  "startDateIntervalEnd": "2020-12-31T23:59:59",
  "endDateIntervalBegin": "2020-01-31T00:00:00",
  "endDateIntervalEnd": "2020-01-31T00:00:00",
  "lastTaskEndDateIntervalBegin": "2020-01-31T00:00:00",
  "lastTaskEndDateIntervalEnd": "2020-01-31T00:00:00",
  "simulation": false,
  "active": true,
  "instanceId": 1000,
  "flowId": 100,
  "serviceId": 200,
  "mobileEnabledOnly": false,
  "allowOpenUrlsForFilesInForm": false,
  "requesterUsername": "steve.jobs",
  "formFieldNames": [
    "razaoSocial",
    "cidade",
    "uf"
  ],
  "formFieldsFilter": [
    {
      "name": "tipoPagamento",
      "operator": "=", //deve estar preenchido exatamente com o valor
      "value": "Cartão de crédito"
    },
    {
      "name": "valor",
      "operator": ">", //deve ser maior que o valor
      "value": "500"
    },
    {
      "name": "parcelas",
      "operator": "<", //deve ser menor que o valor
      "value": "12"
    },
    {
      "name": "nomeCliente",
      "operator": "like", //deve conter o valor
      "value": "pedro"
    },
    {
      "name": "idadeCliente",
      "operator": "<>", //deve ser diferente do valor
      "value": "18"
    },
    {
      "name":"cidade",
      "operator":"not like", //Não deve conter o valor
      "value":"São"
    }
  ],
  "showPendingInstanceTasks": false,
  "showFinishedInstanceTasks": false,
  "showPendingAssignees": false,
  "recordsPerPage": 10,
  "pageNumber": 1,
  "useCache": true,
  "taskId": 0,
  "requesterTeamId": 0,
  "currentRequesterTeamId": 0,
  "responsibleAppTeamId": 0,
  "taskStatus": "Current = (Em andamento nesta tarefa) | Passed = (Solicitação já passou alguma vez pela tarefa) | Unavailable = (Solicitação não passou nenhuma vez pela tarefa)"
});

const requestOptions = {
  method: "POST",
  headers: myHeaders,
  body: raw
};

try {
  const response = await fetch("https://seu_endereco.do.zeev/api/2/instances/report", requestOptions);
  const result = await response.json();
  console.log(result)
} catch (error) {
  console.error(error);
};
```

{% endtab %}
{% endtabs %}

***

{% hint style="info" %}
Ao utilizar o endpoint para retornar uma **instancia congelada** os parâmetros "*assignees*" e "*executor*" está retornarão "em branco" (*Null*).&#x20;

**Por que isso acontece?**

* **Proteção de indicadores (SLA)**: Quando uma tarefa é colocada em "Stand-By" (Congelada), o sistema entende que ela está suspensa. Para não prejudicar o tempo de produtividade do funcionário (o SLA), o sistema "remove" momentaneamente a tarefa da fila ativa dele.
* **Estado operacional vs. histórico**: A API reflete o que está acontecendo agora. Como a tarefa está suspensa, tecnicamente não há ninguém trabalhando nela no momento, por isso o retorno é null.
* **Histórico:** o nome da tela de "Passo a Passo" no ambiente é apenas um registro histórico de quem era o responsável no momento da pausa. A API, no entanto, olha para o estado atual da execução, que está "pausado".

**O que acontece depois?**\
Assim que a solicitação for descongelada, a tarefa voltará ao estado "Pendente" automaticamente. Nesse momento, o sistema preencherá novamente os campos de executor e responsáveis, e eles voltarão a aparecer normalmente na API.
{% endhint %}

***

## Links relacionados

* [O que é preciso para fazer integrações do Zeev para outros sistemas?](/zeev/integracoes/o-que-e-preciso-para-fazer-integracoes.md)
* [Como autenticar nas APIs do Zeev](/zeev/apis/como-utilizar-as-apis-do-zeev/como-gerar-tokens-para-autenticar-nas-apis.md)
* [Como controlar o volume máximo de requisições à APIs](/zeev/apis/como-utilizar-as-apis-do-zeev/como-controlar-o-volume-maximo-de-requisicoes-a-apis.md)
* [Como acessar o Swagger / OpenAPI](/zeev/apis/como-utilizar-as-apis-do-zeev/como-acessar-o-swagger-openapi.md)
* [Como filtrar e monitorar solicitações](/zeev/gestao-de-solicitacoes-em-andamento/monitoramento/como-filtrar-e-monitorar-solicitacoes.md)


---

# 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://kb.stoque.com.br/zeev/apis/all/instances/report.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.
