# Listar OTs

Para obtener un listado de las Ordenes de Trabajo para un rango de fechas particular, se debe enviar un GET con los siguientes parámetros.

<mark style="color:blue;">`GET`</mark> `https://api.persat.com.ar/v1/work-orders/`

#### Query Parameters

| Name                                   | Type             | Description                                                                                                                                                                                                                           |
| -------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| from<mark style="color:red;">\*</mark> | String           | Fecha desde en formato yyyy-MM-ddT00:00:00.000Z. En caso de enviar horas minutos, segundos o milisegundos, seran ignorados. La busqueda es realizada por dias completos                                                               |
| to<mark style="color:red;">\*</mark>   | String           | Fecha hasta en formato yyyy-MM-ddT00:00:00.000Z. En caso de enviar horas minutos, segundos o milisegundos, seran ignorados. La busqueda es realizada por dias completos, incluyendo este mismo dia. Ver ejemplo en esta misma seccion |
| states                                 | Array de Strings | Array de Strings, donde cada item es un estado valido de OT. Los estados validos para esta consulta son PROYECTADA, ASIGNADA, INFORME, VENCIDA, CERRADA\_OK, CERRADA\_CON\_DESVIO, CERRADA\_NO\_CUMPLIDA                              |
| uid\_client                            | String           | Identificador del cliente                                                                                                                                                                                                             |

#### Headers

| Name                                            | Type   | Description     |
| ----------------------------------------------- | ------ | --------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer API\_KEY |

{% tabs %}
{% tab title="200: OK La consulta se ejecutó con éxito" %}

{% endtab %}

{% tab title="400: Bad Request Error en alguno de los campos enviados. userMessage contiene informacipon adicional." %}

```json
{
    "success": false,
    "error": {
        "status": 400,
        "type": "BAD_REQUEST",
        "userMessage": "'from' es obligatorio y debe ser un string representando una fecha en formato yyyy-MM-ddTHH:mm:ss.SSSZ"
    }
}
```

{% endtab %}

{% tab title="400: Bad Request Rango de fechas excedido" %}

```javascript
{
    "success": false,
    "error": {
        "status": 400,
        "type": "BAD_REQUEST",
        "userMessage": "'from' y 'to' no pueden especificar un rango > a 15 dias"
    }
}
```

{% endtab %}

{% tab title="404: Not Found Si en la consulta se filtra por cliente, y el mismo no existe" %}

```javascript
{
    "success": false,
    "error": {
        "status": 404,
        "type": "NOT_FOUND",
        "userMessage": "No existe un cliente con este número."
    }
}
```

{% endtab %}
{% endtabs %}

### Ejemplo de Request 1

Sin filtrar ni por state ni por uid\_client

Busco todas las OTs de un día particular, sin importar el estado de las mismas (por eso no enviamos el parametro **state**)

\*\*<https://api.persat.com.ar/v1/work-orders**?from=2022-05-03T00:00:00.000Z\\&to=2022-05-03T00:00:00.000Z>

La consulta se realiza por día, es decir que si bien tanto **from** como **to** son fechas en formato IsoDate, no importa si se envian las horas minutos segundos del dia. Ya que no se tomarán en cuenta para la consulta.

Tampoco importa la zona horaria, o sea que si estoy en Argentina, México o Perú, y quiero obtener las OTs que deben hacerse el día 3 de Mayo de 2022, entonces tanto **from** como **to** deben ser "2022-05-03T00:00:00.000Z" como se muestra en la consulta.

{% hint style="warning" %}
Debido a que Persat cuenta con OTs repetitivas que se van generando en tiempo real durante las consultas, no es posible hacer una paginación como la que se hace en [Listar Formularios](/modulos/formularios-digitales/listar-formularios.md)

La restricción en la consulta viene dada por el rango de fechas from y to. El cual no puede exceder los 15 días.

Ejemplo para obtener todas las OTs realizadas en un mes de 31 dias, como puede ser Mayo de 2022).&#x20;

Para poder resolver todo el mes completo, debemos hacer 2 consultas separadas.

1. Primero buscamos las OTs entre el día 1 y el 15 inclusive **from=**&#x32;022-05-01T00:00:00.000Z, **to=**&#x32;022-05-15T00:00:00.000Z
2. La segunda consulta debe buscar las OTs entre el día 16 y el 31 inclusive **from=**&#x32;022-05-16T00:00:00.000Z, **to=**&#x32;022-05-31T00:00:00.000Z
   {% endhint %}

### Análisis de la respuesta

Una posible respuesta podría ser la que se muestra a continuación.

```json
{
    "success": true,
    "data": [
        {
        "_id": "134",            
        "note_id": 603,
        "state": "PROYECTADA",
        "created": "2022-05-20T10:14:44.000Z", 
        "created_by_user_name": "usuario@empresa.com.ar",
        "created_by_user_id": 28,
        "labels_ids": [
            1,
            2
        ],
        "client": {
            "id": 10216,
            "name": "Fabrica de Motores",
            "uid_client": "CL3213L"
        },
        "wo_data": {
            "schema_id": 452,
            "wo_instance": null,
            "wo_rule_id": null,
            "service_time": 45,
            "instructions": {
                "formvalues": {
                    "FWMg5UsWo": "Revisar las tejas",
                    "FWcimEHVv": "Cobrar",
                    "FWXyxyhlj": 250.3     
                }
            }
        },
        "assignation_info": {
            "date": "2022-05-03T00:00:00.000Z",
            "starts_min": 480,
            "responsibles_required": 1,
            "responsibles": []
        }
    }, {...}
    ]
}
```

Los campos que se ven en la respuesta son los que se corresponden con cualquier OT. Ver  sección [Obtener OT](/modulos/ordenes-de-trabajo/obtener-ot.md)

### Ejemplo de Request 2

Filtrando por state

Busco todas las OTs de un día particular, pero ahora solo quiero obtener las que esten completas por el técnico. Con lo cual, los estados a buscar son:

* INFORME
* CERRADA\_OK
* CERRADA\_CON\_DESVIO
* CERRADA\_NO\_CUMPLIDA

La consulta entonces quedaría de esta forma

\*\*<https://api.persat.com.ar/v1/work-orders**?from=2022-05-03T00:00:00.000Z\\&to=2022-05-03T00:00:00.000Z\\&states=\\["INFORME","CERRADA\\_OK","CERRADA\\_CON\\_DESVIO","CERRADA\\_NO\\_CUMPLIDA>"]

{% hint style="danger" %}
Se debe encodear la url de forma que pueda ser reconocida. Los corchetes y las comillas son caracteres que requieren pasar por un url encoder

* \[   %5B
* ]   %5D
* "   %22
  {% endhint %}

```shell
curl --location --request GET "https://api.persat.com.ar/v1/work-orders?from=2022-05-25T00:00:00.000Z&to=2022-05-25T00:00:00.000Z&states=%5B%22INFORME%22,\
%22CERRADA_OK%22,%22CERRADA_CON_DESVIO%22,%22CERRADA_NO_CUMPLIDA%22%5D" \
  --header "Authorization: Bearer YOUR_API_KEY"
```

{% hint style="danger" %}
Durante estos listados, es posible que recibamos OTs con <mark style="color:red;">\_id = -1.</mark>&#x20;

Esto solo va a ocurrir cuando sucedan dos cosas:

1. Estemos usando las OTs repetitivas de Persat. Esas OTs que se generaron a partir de una regla, como "Repetir cada dos semanas los dias miercoles",
2. Hagamos una consulta en donde pedimos las OTs de fechas futuras

Estas OTs que todavia no ocurrieron, no tienen \_id definido. La forma de identificarlas es por medio de los fields **wo\_data.wo\_rule\_id** y **wo\_data.wo\_instance,** que son explicados en [Obtener OT](/modulos/ordenes-de-trabajo/obtener-ot.md)
{% endhint %}

### Ejemplo de Request 3

Filtrando por cliente. Hay que enviar en el path el uid\_client correspondiente.

La consulta entonces quedaría de esta forma

\*\*<https://api.persat.com.ar/v1/work-orders**?from=2022-05-03T00:00:00.000Z\\&to=2022-05-03T00:00:00.000Z\\&uid\\_client=CL3213L>

### Ejemplo de Request 4

Filtrando tanto por estado como por cliente

La consulta entonces quedaría de esta forma

\*\*<https://api.persat.com.ar/v1/work-orders**?from=2022-05-03T00:00:00.000Z\\&to=2022-05-03T00:00:00.000Z\\&states=\\["CERRADA\\_NO\\_CUMPLIDA"]\\&uid\\_client=CL3213L>

{% hint style="danger" %}
Se debe encodear la url de forma que pueda ser reconocida. Los corchetes y las comillas son caracteres que requieren pasar por un url encoder. Como se explica más arriba en esta misma sección
{% endhint %}


---

# 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://docs.api.persat.com.ar/modulos/ordenes-de-trabajo/listar-ots.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.
