# Scotiabank Empresas

> Saldos y movimientos de Scotiabank Empresas, sincronizados y disponibles para consulta en Connect.



Con la clave de internet de la empresa, `scotiabank_empresas` sincroniza saldos y movimientos del Portal Empresas de Scotiabank hacia el plano persistido de Connect, y dos tools de consulta los leen de esa caché sin esperar al banco. El `conn_…` de la conexión dice qué empresa lees y viaja en toda llamada (en REST, el header `X-Connect-Connection`).

Connect usa un navegador para iniciar sesión en el Portal Empresas y, con esa sesión, lee las cuentas por HTTP. La conexión no requiere que mantengas abierto un navegador ni un emulador.

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

En el [enlace de conexión](/docs/empezar/conectar) la persona entrega la **clave de internet** del Portal Empresas, en tres campos:

| Campo             | Qué es                                               |
| ----------------- | ---------------------------------------------------- |
| RUT de la empresa | La empresa que esta conexión va a leer.              |
| RUT de acceso     | El RUT de la persona que inicia sesión en el portal. |
| Clave de internet | Su clave del Portal Empresas de Scotiabank.          |

Scotiabank separa el RUT de la empresa del RUT de quien accede: la empresa se elige al autenticar. El acceso solo lee, y desde el dashboard se revoca en el acto. La clave no pasa por tu código: la entrega quien la tiene, en un enlace que sirve una sola vez.

## Los alcances [#los-alcances]

| Alcance       | Qué trae                                                                          | Tool que lo lee                             |
| ------------- | --------------------------------------------------------------------------------- | ------------------------------------------- |
| `saldos`      | El saldo contable y el disponible de cada cuenta corriente, como una foto por día | `scotiabank_empresas.saldos.consultar`      |
| `movimientos` | Los movimientos de la cuenta del período, con su glosa y el saldo arrastrado      | `scotiabank_empresas.movimientos.consultar` |

Qué alcances quedan habilitados se decide por conexión, desde el dashboard.

## Un movimiento [#un-movimiento]

`movimientos.consultar` entrega, por fila, la cuenta, la fecha, la glosa del banco, el eje del monto y el saldo arrastrado:

```json
{
  "id": "984225849|2026-10-19|5993780011|TPTOFF",
  "numeroCuenta": "984225849",
  "currency": "CLP",
  "periodo": "2026-10",
  "fecha": "2026-10-19T00:00:00.000Z",
  "monto": 1469510,
  "type": "cargo",
  "display": "-1.469.510",
  "saldoContable": 45335146,
  "descripcion": "TEF 77938106-4 Proveedor Ejemplo"
}
```

`monto` es la magnitud **sin signo**; `type` dice si la plata sale (`cargo`) o entra (`abono`); y `display` trae ese monto ya formateado a la chilena, con su signo. `saldoContable` es el saldo arrastrado tras el movimiento: conserva su propio signo. `descripcion` es la glosa tal como aparece en la cartola —en una transferencia incluye el RUT y el nombre de la contraparte—; Connect la conserva íntegra y no la interpreta.

### La identidad del movimiento [#la-identidad-del-movimiento]

La clave natural de un movimiento es la **cuenta, la fecha, la referencia del banco y el tipo** de la operación; no depende del período que pediste ni de la posición en la lista. Volver a sincronizar actualiza la misma fila en vez de duplicarla. Si en una misma respuesta dos movimientos compartieran esa clave, el período no se persiste: Connect prefiere no guardar antes que guardar dos hechos distintos bajo una sola identidad.

## Sincronizar [#sincronizar]

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/scotiabank_empresas.conexion.sincronizar/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"periodo":"2026-10","alcances":["saldos","movimientos"]}}'
```

Esta ruta y el body del ejemplo corresponden a la tool `scotiabank_empresas.conexion.sincronizar`. El header `X-Connect-Connection` es obligatorio: usa el id de una conexión **Scotiabank**, que puedes obtener con `GET /v1/connections`. No uses el id de una conexión SII u otro banco.

La llamada encola el trabajo. El resultado incluye `estado: "encolado"` y un `jobId`; consulta ese job para conocer los alcances completados y `recordsSynced`. Un trabajo encolado todavía no acredita una sincronización.

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

Cada sincronización obtiene una sesión nueva y comparte el login entre los alcances solicitados. Como en los demás bancos, `saldos` es una foto del momento: en un período que no es el corriente termina en cero con su explicación en `detalle`. El resultado por alcance se lee en `outcomes` de `GET /v1/syncs/{jobId}`, en la [API de control](/docs/api-control).

## Verdades operativas [#verdades-operativas]

### Una sesión por sincronización [#una-sesión-por-sincronización]

Connect inicia sesión con un navegador, verifica la empresa autorizada y recorre las cuentas y las páginas de movimientos por HTTP. Al terminar elimina el material de sesión local. No conserva tokens para la siguiente sincronización.

### Verificar y sincronizar [#verificar-y-sincronizar]

`conexion.verificar` comprueba el login y la autorización de la empresa sin persistir datos de negocio. `conexion.sincronizar` obtiene los saldos y movimientos y los guarda en Connect. Las consultas leen esos datos persistidos, sin abrir otra sesión bancaria.

### El movimiento se pide por mes, en tramos [#el-movimiento-se-pide-por-mes-en-tramos]

El Portal Empresas entrega los movimientos por rango de fechas, y Connect recorre el mes en tramos para respetar el máximo del portal. Cada movimiento queda archivado bajo el mes de su propia fecha, no bajo el período con el que se pidió la corrida.

### Los montos son números, con la convención del libro del banco [#los-montos-son-números-con-la-convención-del-libro-del-banco]

`type` es el eje del libro del banco: `cargo` es plata que sale de la cuenta y `abono` plata que entra. `monto` es la magnitud sin signo y `display` el texto ya formateado con el signo que corresponde. Un saldo es un balance: no lleva `type` y conserva su propio signo.

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

| Código                               | Qué significa                                                                           | Qué hacer                                                                                         |
| ------------------------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `409 connection_session_pending`     | La conexión todavía no tiene una sesión de portal viva y la llamada no puede abrir una. | Espera a la sincronización automática, que prepara la sesión, y reintenta la consulta.            |
| `428 connection_credential_required` | La conexión no tiene una credencial viva: nunca se vinculó, venció o fue revocada.      | Emite un enlace de reconexión y pide la clave de nuevo. No reintentes con la credencial anterior. |
| `409 connection_busy`                | La conexión está en uso o el servicio alcanzó temporalmente su capacidad.               | Espera unos segundos y reintenta. No reconectes ni vuelvas a ingresar credenciales.               |
| `502 upstream_error`                 | El banco (o el camino hasta él) falló de forma transitoria.                             | Reintenta más tarde. Si persiste, el problema está del lado del banco.                            |

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

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

* Las cuatro tools, con contrato completo: [referencia de `scotiabank_empresas`](/docs/referencia/scotiabank_empresas).
* La separación entre escribir la caché y leerla: [Sincronizar y consultar](/docs/conceptos/sincronizar-consultar).
* Saber de cada sync sin preguntar: [Webhooks](/docs/operar/webhooks).
