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

# Presets de reportes

> Guardá configuraciones editables de plantillas Gu1 por organización para descarga en un clic y automatizaciones send_report.

## Overview

Un **preset de reporte** guarda una configuración de [plantilla de reportes](/es/api-reference/entities/report-templates) Gu1 para tu organización (`name` + `templateCode` + `params`). Tras crearlo podés **editar** `name`, `description` y `params`; el `templateCode` queda fijo. También podés listar, obtener, ejecutar o eliminar.

| Método   | Path                       | Uso                                                  |
| -------- | -------------------------- | ---------------------------------------------------- |
| `GET`    | `/report-presets`          | Listar presets de la org                             |
| `GET`    | `/report-presets/{id}`     | Detalle                                              |
| `POST`   | `/report-presets`          | Crear (nombre + plantilla + params)                  |
| `PATCH`  | `/report-presets/{id}`     | Actualizar nombre, descripción y/o params            |
| `DELETE` | `/report-presets/{id}`     | Eliminación definitiva                               |
| `POST`   | `/report-presets/{id}/run` | Ejecutar con params guardados (`download` o `email`) |

Límite: **50** presets por organización. Nombre único por org (sin distinguir mayúsculas).

**Ejecutar** siempre encola un job async a object storage (**202** + `jobId`). Descargá después desde Reportería **Descargables** / [Jobs de exportación de reportes](/es/api-reference/entities/report-export-jobs). Los `params` pueden incluir `emailLocale`, `format` (`csv` / `pdf` / `xlsx` según plantilla) y otros campos (`lookbackDays`, `ruleIds`, `filters`).

## Autenticación y tenant

<ParamField header="Authorization" type="string" required>
  `Bearer YOUR_API_KEY` — ver [Autenticación](/es/api-reference/authentication).
</ParamField>

<ParamField header="X-Organization-ID" type="string" required>
  UUID de organización producción o sandbox — ver [Entornos](/es/api-reference/environments).
</ParamField>

## Permisos

| Endpoint                               | Permiso granular |
| -------------------------------------- | ---------------- |
| `GET` list / get                       | `reports:read`   |
| `POST` create / run, `PATCH`, `DELETE` | `reports:export` |

## Crear

```
POST http://api.gu1.ai/report-presets
```

<ParamField body="name" type="string" required>
  Nombre visible (1–120 caracteres). Debe ser único en la organización (sin distinguir mayúsculas).
</ParamField>

<ParamField body="description" type="string">
  Nota opcional para tu equipo (máx. 500 caracteres).
</ParamField>

<ParamField body="templateCode" type="string" required>
  Código del catálogo Gu1 (por ejemplo `alerts_by_rules`).
</ParamField>

<ParamField body="params" type="object">
  Params de la plantilla (`lookbackDays`, `ruleIds`, `emailLocale`, `format`, `filters`, etc.). Validados contra la plantilla.
</ParamField>

Al crear, Gu1 guarda un **`paramsSummary`** legible (nombres de reglas, ventana) para la UI. Al **ejecutar**, se usan los UUID vivos de `params`; reglas inexistentes las omite el runner.

### Ejemplo

```json theme={null}
{
  "name": "Total cuentas CBU/CVU",
  "description": "Revisión operativa mensual",
  "templateCode": "alerts_by_rules",
  "params": {
    "lookbackDays": 30,
    "ruleIds": ["aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"]
  }
}
```

### Respuesta 201

```json theme={null}
{
  "success": true,
  "preset": {
    "id": "…",
    "organizationId": "…",
    "name": "Total cuentas CBU/CVU",
    "templateCode": "alerts_by_rules",
    "params": { "lookbackDays": 30, "ruleIds": ["…"] },
    "paramsSummary": {
      "lookbackDays": 30,
      "ruleLabels": ["Total de cuentas"],
      "lines": ["Últimos 30 días", "Reglas: Total de cuentas"]
    },
    "createdAt": "2026-08-06T12:00:00.000Z"
  }
}
```

### Errores

| Código                      | Status | Significado                  |
| --------------------------- | ------ | ---------------------------- |
| `REPORT_TEMPLATE_NOT_FOUND` | 400    | `templateCode` desconocido   |
| `REPORT_PRESET_NAME_EXISTS` | 409    | Nombre duplicado en la org   |
| `REPORT_PRESET_LIMIT`       | 400    | Tope de 50 alcanzado         |
| `REPORT_PRESET_NOT_FOUND`   | 404    | Id desconocido para esta org |

## Actualizar

```
PATCH http://api.gu1.ai/report-presets/{id}
```

Al menos uno de `name`, `description` o `params` es obligatorio. No se puede cambiar `templateCode`. Los `params` se revalidan contra la plantilla existente.

<ParamField body="name" type="string">
  Nuevo nombre (1–120). Debe seguir siendo único en la org.
</ParamField>

<ParamField body="description" type="string">
  Nueva descripción (máx. 500) o `null` para limpiar.
</ParamField>

<ParamField body="params" type="object">
  Params completos a persistir (reemplazo, no merge parcial de claves omitidas).
</ParamField>

## Ejecutar

```
POST http://api.gu1.ai/report-presets/{id}/run
```

Carga el preset y llama al mismo runner que `POST /report-templates/{code}/run` con los `params` guardados.

<ParamField body="delivery" type="string">
  `download` (default) o `email`.
</ParamField>

<ParamField body="recipientEmails" type="string[]">
  Obligatorio cuando `delivery` es `email`.
</ParamField>

<ParamField body="format" type="string">
  Opcional: `csv`, `xlsx` o `pdf` (debe estar soportado por la plantilla). Si se omite, usa `params.format` o el default de la plantilla.
</ParamField>

Respuesta exitosa: **202** (mismo shape que run de plantillas, más `presetId`). Siempre encola un job en segundo plano. Consultá o descargá vía [Jobs de exportación de reportes](/es/api-reference/entities/report-export-jobs).

## Automatizaciones

En Reportería, **Programar** abre el builder con `reportPresetId` (canónico). Usá la acción **`send_report` / Generar reporte** con `reportPresetId` y opcionalmente `sendEmail` + `recipientEmails`; el legacy `reportTemplateCode` + `params` sigue funcionando.
