# Tesorería General de la República

> Los convenios de pago de una empresa con la Tesorería: resoluciones, estado de pago, cuotas pagadas y por pagar, y deudas acogidas, con la Clave Tributaria del SII.



Con la Clave Tributaria del SII de la empresa, `tgr` sincroniza las pantallas de convenios de la Tesorería General de la República hacia el plano persistido de Connect, y cuatro tools de consulta las leen de ahí sin volver a entrar al portal. El `conn_…` de la conexión dice qué empresa lees y viaja en toda llamada (en REST, el header `X-Connect-Connection`).

## Qué necesitas para conectar [#qué-necesitas-para-conectar]

En el [enlace de conexión](/docs/empezar/conectar) la persona entrega la **Clave Tributaria de la empresa**, la misma con que entra a sii.cl:

| Campo             | Qué es                                          |
| ----------------- | ----------------------------------------------- |
| RUT de la empresa | El contribuyente cuyos convenios se van a leer. |
| Clave tributaria  | La clave del SII de ese RUT.                    |

El portal de la Tesorería también acepta Clave Tesorería y ClaveÚnica; esta conexión usa solo la Clave Tributaria. El acceso solo lee: nunca paga, pacta ni modifica un convenio, y desde el dashboard se revoca en el acto.

## El alcance [#el-alcance]

Hay un alcance, `convenios`, que en un mismo login lee tres pantallas del portal y, desde cada fila, el detalle del convenio. Cada una tiene su tool:

| Pantalla del portal           | Qué trae                                                                                                                        | Tool que la lee                   |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- |
| Estado de pago de convenio    | Los convenios activos, con tipo, número de cuotas y fecha de término                                                            | `tgr.convenios.consultar`         |
| Cuotas convenios vigentes     | Los convenios activos y las propuestas aceptadas, con su número de cuotas                                                       | `tgr.convenios_cuotas.consultar`  |
| Comprobante de resolución     | Las resoluciones que otorgaron cada beneficio, con fecha de resolución y de activación                                          | `tgr.resoluciones.consultar`      |
| El detalle que abre cada fila | Cada cuota con su vencimiento, monto y si está pagada; la próxima por pagar; el total; y las deudas acogidas con su condonación | `tgr.convenios_detalle.consultar` |

El **número de resolución** identifica al convenio en las tres pantallas y en su detalle: es la llave para cruzarlas. Las cuatro tools aceptan el filtro `numeroResolucion`.

## Sincronizar [#sincronizar]

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/tgr.conexion.sincronizar/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{}}'
```

Respuesta:

```json
{
  "data": { "periodo": "2026-10", "estado": "encolado", "jobId": "sjb_3h5j7k9m1n2p4q6r8s0t1", "yaEnCurso": false },
  "meta": { "request_id": "req_...", "tool_id": "tgr.conexion.sincronizar", "plane": "read" }
}
```

La llamada vuelve al instante con `estado: "encolado"` y un `jobId`; el resultado de la corrida llega por [webhook](/docs/operar/webhooks) o en el estado de la conexión. Connect además sincroniza solo una vez al día.

Las pantallas son el **estado actual** de la empresa ante la Tesorería, no un historial por mes: `periodo` es opcional y solo organiza la ejecución. Un período que no es el corriente no vuelve a consultar el portal.

## Consultar [#consultar]

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/tgr.convenios.consultar/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{}}'
```

Respuesta de una empresa sin convenios activos:

```json
{
  "data": { "convenios": [], "pantallaLeidaEn": "2026-10-02T14:02:11.000Z", "cursor": null },
  "meta": { "request_id": "req_...", "tool_id": "tgr.convenios.consultar", "plane": "action" }
}
```

Cada fila trae los campos derivados (fechas en `AAAA-MM-DD`, cuotas como número) y, en `celdas`, el texto original de la Tesorería por columna. Si un campo derivado viene en `null`, el texto está ahí.

### El detalle: cuotas, pagos y deudas [#el-detalle-cuotas-pagos-y-deudas]

`tgr.convenios_detalle.consultar` responde cuánto se debe y cuándo vence lo siguiente. Filtra por `numeroResolucion` para ver un convenio:

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/tgr.convenios_detalle.consultar/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"numeroResolucion":"4455667"}}'
```

Respuesta (datos ficticios, con las cuotas recortadas):

```json
{
  "data": {
    "convenios": [{
      "numeroResolucion": "4455667",
      "tipoConvenio": "Ley 20.780 Fiscal",
      "tipoPago": "CONVENIO CON CONDONACION",
      "numeroCuotas": 3,
      "cuotasPagadas": 1,
      "montoCuotaContado": 250000,
      "totalAPagar": 600000,
      "proximaCuota": { "numero": 2, "fechaVencimiento": "2026-04-30", "monto": 175000 },
      "cuotas": [
        { "numero": 1, "fechaVencimiento": "2026-03-31", "monto": 250000, "tipo": "Cuota contado", "pagada": true },
        { "numero": 2, "fechaVencimiento": "2026-04-30", "monto": 175000, "tipo": "Cuota normal", "pagada": false },
        { "numero": 3, "fechaVencimiento": "2026-05-31", "monto": null, "tipo": "Cuota de ajuste", "pagada": false }
      ],
      "deudas": [{ "tipo": "FISCAL", "formulario": "22", "folio": "998877665", "condonacionIntereses": 40, "condonacionMultas": 40, "totalAPagar": 600000 }]
    }],
    "pantallaLeidaEn": "2026-10-04T14:02:11.000Z",
    "cursor": null
  },
  "meta": { "request_id": "req_...", "tool_id": "tgr.convenios_detalle.consultar", "plane": "action" }
}
```

Los montos son pesos enteros. `proximaCuota` es la primera que la Tesorería no registra pagada; Connect no la marca como vencida, porque eso depende de la fecha en que leas.

## Verdades operativas [#verdades-operativas]

### Una lista vacía tiene dos lecturas, y `pantallaLeidaEn` las separa [#una-lista-vacía-tiene-dos-lecturas-y-pantallaleidaen-las-separa]

Las cuatro tools devuelven `pantallaLeidaEn`: cuándo se leyó esa pantalla (o el detalle) por última vez.

* **Con fecha y sin filas**: la Tesorería mostró la pantalla vacía. La empresa no tiene convenios ahí.
* **En `null`**: la pantalla todavía no se ha leído. Sincroniza antes de concluir nada.

### Lo que sale de la pantalla deja de aparecer [#lo-que-sale-de-la-pantalla-deja-de-aparecer]

Cada sincronización reemplaza lo que se ve de cada pantalla. Un convenio que terminó y ya no aparece en el portal deja de salir en la consulta en la sincronización siguiente; `observadoEn` dice cuándo se vio cada fila por última vez.

### La cuota de ajuste no tiene monto hasta que la Tesorería la liquida [#la-cuota-de-ajuste-no-tiene-monto-hasta-que-la-tesorería-la-liquida]

La última cuota de un convenio se calcula después de pagar la penúltima. Mientras tanto `tgr.convenios_detalle.consultar` la devuelve con `monto: null`, aunque el portal pinte un 0 en una de sus pantallas: ese cero no es lo que se debe. Un detalle que el portal no enlazó desde una fila deja su parte en `null` (por ejemplo, `pagada` sin la pantalla de cuotas).

### Una fila que Connect no reconoce detiene la sincronización [#una-fila-que-connect-no-reconoce-detiene-la-sincronización]

Si el portal cambia las columnas de una pantalla o publica una fila con otra forma, la sincronización falla con `upstream_unexpected_response` en vez de guardar una lectura parcial. Nunca vas a recibir una lista vacía que en realidad era un error de lectura.

## Errores que vas a ver [#errores-que-vas-a-ver]

| Código                               | Qué significa                                                                                                           | Qué hacer                                                                                                                                   |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `428 connection_credential_required` | El SII rechazó la Clave Tributaria: incorrecta, bloqueada, caducada o pendiente de actualizar. El `marcador` dice cuál. | Emite un enlace de reconexión y pide la clave de nuevo. No reintentes con la anterior: cada intento fallido cuenta para el bloqueo del SII. |
| `428 connector_onboarding_required`  | El SII pide que una persona haga algo antes de seguir, como comprobar su identidad.                                     | Que la persona entre una vez a sii.cl con esa clave y luego vuelve a sincronizar.                                                           |
| `409 connection_identity_mismatch`   | La Tesorería abrió los convenios de otro RUT.                                                                           | Revisa que la clave sea la de la empresa conectada.                                                                                         |
| `502 upstream_error`                 | La Tesorería o el SII fallaron de forma transitoria.                                                                    | Reintenta más tarde. La sincronización programada lo reintenta sola.                                                                        |
| `502 upstream_unexpected_response`   | El portal cambió una pantalla o el camino del login.                                                                    | Avísanos: hay que actualizar el conector.                                                                                                   |

El envelope de cada código está en el [catálogo de errores](/docs/operar/errores).

## Próximos pasos [#próximos-pasos]

* Las seis tools, con contrato completo: [referencia de `tgr`](/docs/referencia/tgr).
* La separación entre escribir la caché y leerla: [Sincronizar y consultar](/docs/conceptos/sincronizar-consultar).
