> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Generar y descargar un informe (API)

> Sube una plantilla a Reporter, solicita un informe a partir de ella, sigue su estado y descarga el archivo.

Convierte una plantilla y los datos de tus fuentes de datos en un archivo de informe, y descarga el archivo cuando esté listo.

## Participantes

***

* **Tu institución.** Tu sistema que llama a la API de Reporter.
* **Reporter.** Verifica la plantilla y la solicitud, genera el informe y entrega el archivo.

## Antes de empezar

***

* Tienes un bearer token que Access Manager emite para Reporter.
* Conectaste cada fuente de datos que lee tu plantilla. Consulta [Conectar una fuente de datos](https://docs.lerian.studio/es/diagrams/lerian-products/reporter-connect-a-data-source.md).

## Diagrama

***

![Generar y descargar un informe](https://mintcdn.com/lerian-49cb71fc/MbifquGny5fsdtVy/images/es/d2/id-reporter-generate-a-report.svg?fit=max\&auto=format\&n=MbifquGny5fsdtVy\&q=85\&s=a1e1be9c18b36cb750602b1445834a08)

## Pasos por la API

***

| # | Origen | Destino | Mensaje | API de Lerian | Qué ocurre |
| - | - | - | - | - | - |
| 1 | Tu institución | Reporter | API de Lerian | [`POST /v1/templates`](https://docs.lerian.studio/es/reference/products/reporter/upload-template) | Sube la plantilla como formulario multipart con el archivo `template`, `outputFormat`, `description` y `category`. |
| 2 | Reporter | Reporter | Paso interno | | Reporter verifica cada fuente de datos, tabla y campo que lee la plantilla contra el esquema de la fuente de datos. |
| 3 | Reporter | Tu institución | Respuesta | | Reporter devuelve la plantilla con su `id`. |
| 4 | Tu institución | Reporter | API de Lerian | [`POST /v1/reports`](https://docs.lerian.studio/es/reference/products/reporter/create-report) | Envía `templateId` y `filters`. Agrega `parameters` cuando la plantilla los declara, y una clave `X-Idempotency`. |
| 5 | Reporter | Reporter | Paso interno | | Reporter verifica los filtros y los parámetros, registra el informe y empieza la generación. |
| 6 | Reporter | Tu institución | Respuesta | | Reporter devuelve el informe con su `id` y el estado `Processing`. |
| 7 | Reporter | Reporter | Paso interno | | Reporter extrae los datos de cada fuente de datos. El informe termina como `Finished`, `Partial` o `Error`. Para `Finished` y `Partial`, Reporter renderiza la plantilla y guarda el archivo. |
| 8 | Tu institución | Reporter | API de Lerian | [`GET /v1/reports/{id}`](https://docs.lerian.studio/es/reference/products/reporter/check-report-status) | Lee el informe. |
| 9 | Reporter | Tu institución | Respuesta | | Reporter devuelve el informe con su `status`. |
| 10 | Tu institución | Reporter | API de Lerian | [`GET /v1/reports/{id}/download`](https://docs.lerian.studio/es/reference/products/reporter/download-report) | Descarga el archivo de un informe `Finished`. |
| 11 | Reporter | Tu institución | Respuesta | | Reporter devuelve el archivo con el tipo de contenido de su formato y el header `X-Report-Status`. |

## Reglas

***

* El `outputFormat` es `html`, `pdf`, `csv`, `xml` o `txt`. Escribe una plantilla `pdf` en HTML. La `description` y la `category` son obligatorias.
* Reporter rechaza una plantilla que lee una fuente de datos, tabla o campo que no existe. Cuando Reporter no alcanza una fuente de datos, crea la plantilla y devuelve un aviso.
* Un filtro solo puede nombrar una tabla que lee la plantilla.
* Reporter rechaza una solicitud sin un parámetro obligatorio que no tiene valor predeterminado.
* Cuando registraste más de una institución en Reporter, envía `institution` con un ID de institución o con `all`.
* Durante 30 segundos, una repetición con la misma clave `X-Idempotency` devuelve el primer informe, con el header `X-Idempotency-Replayed: true`.
* Reporter rechaza la descarga mientras el informe está `Processing`, y cuando está `Partial` o `Error`.

## Cómo saber que terminó

***

El informe muestra `Finished`, y la descarga devuelve el archivo con `X-Report-Status: Finished`.

## Qué puede salir mal

***

| Situación | Qué ves | Qué hacer |
| - | - | - |
| La plantilla lee una fuente de datos que no existe | `400` con `RPT-0031` | Conecta la fuente de datos o corrige su nombre en la plantilla. |
| Un filtro nombra una tabla que la plantilla no lee | `400` con `RPT-0076` | Filtra una de las tablas que lista el mensaje. |
| La misma solicitud todavía está en curso | `409` con `RPT-0039` | Lista los informes de la plantilla antes de enviar la solicitud de nuevo. |
| La solicitud excede el tiempo de espera | Ninguna respuesta | El informe puede existir. [Lista los informes](https://docs.lerian.studio/es/reference/products/reporter/retrieve-reports.md) de la plantilla con `template_id` antes de enviar la solicitud de nuevo. |
| Descargas antes de que el informe esté `Finished` | `422` con `RPT-0029` | Lee el estado y descarga cuando muestre `Finished`. |
| El informe termina como `Partial` o `Error` | `metadata` describe qué falló | Lee la causa y luego solicita un nuevo informe. |

## Relacionados

***

* [Conectar una fuente de datos](https://docs.lerian.studio/es/diagrams/lerian-products/reporter-connect-a-data-source.md)
* [Recibir el resultado del informe como evento](https://docs.lerian.studio/es/diagrams/lerian-products/reporter-receive-the-report-result.md)
* [Cómo funciona la generación de informes](https://docs.lerian.studio/es/products/reporter/how-report-generation-works.md)
* [Motor de plantillas de Reporter](https://docs.lerian.studio/es/products/reporter/reporter-template-engine.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.