# Previred

> Planillas de cotizaciones pagadas, el desglose por trabajador, la deuda previsional y el archivo para el F30-1, sincronizados a la caché de Connect. Con el comprobante en PDF.



Con la clave de Previred, `previred` sincroniza hacia el plano persistido de Connect las cotizaciones previsionales de una empresa: las planillas que se pagaron, lo que cotizó cada trabajador, la deuda pendiente, el archivo con que se saca el Certificado F30-1 y el certificado oficial de cada trabajador. Cinco tools de consulta las leen de esa caché sin esperar al portal. El `conn_…` de la conexión dice qué empresa lees y viaja en toda llamada (en REST, el header `X-Connect-Connection`).

Previred es el único sistema del catálogo que además guarda **documentos**: el comprobante en PDF de cada planilla, que es la prueba de pago que piden la Dirección del Trabajo, las mutuales y cualquier auditoría, y el archivo para el F30-1.

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

En el [enlace de conexión](/docs/empezar/conectar) la persona entrega la **Clave Previred**, en tres campos:

| Campo             | Qué es                                         |
| ----------------- | ---------------------------------------------- |
| RUT de acceso     | El RUT de la persona que entra a previred.com. |
| Clave Previred    | Su clave del portal.                           |
| RUT de la empresa | La empresa que esta conexión va a leer.        |

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.

<Callout title="Antes de pedir la clave, revisa quién administra la empresa">
  En Previred una empresa está asignada a **un** RUT de usuario, y con mucha frecuencia es el del contador, no el del dueño. Si conectas con una clave que no la administra, la sincronización responde `connection_credential_required` explicando exactamente eso.

  La salida correcta **no** es quitarle la empresa al contador. El portal ofrece hacerlo, pero pide acertar el monto del último pago y le avisa a él por correo. Lo que corresponde es pedirle que cree un **usuario secundario** para la integración. Está en el portal, en Remuneraciones, bajo «Usuarios». Así cada uno conserva su acceso.
</Callout>

## Los alcances [#los-alcances]

| Alcance        | Qué trae                                                                                                       | Tool que lo lee                   |
| -------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------- |
| `planillas`    | Una planilla por institución previsional, con su folio, el monto pagado y el enlace al comprobante en PDF      | `previred.planillas.consultar`    |
| `cotizaciones` | Lo que cotizó cada trabajador: renta imponible, monto y días trabajados                                        | `previred.cotizaciones.consultar` |
| `deuda`        | Las dos mitades de «¿estoy al día?»: declaraciones sin pago (DNP) y nóminas cuyo plazo corre y aún no se pagan | `previred.deuda.consultar`        |
| `f301`         | El archivo de 106 campos con que la Dirección del Trabajo emite el Certificado F30-1                           | `previred.f301.consultar`         |
| `certificados` | El certificado oficial de cotizaciones de cada trabajador, en PDF                                              | `previred.certificados.consultar` |
| `empresas`     | Las empresas que esta credencial administra en Previred                                                        | `previred.empresas.consultar`     |

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

## Sincronizar [#sincronizar]

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/previred.conexion.sincronizar/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"periodo":"2026-06","alcances":["planillas","cotizaciones","deuda","f301","certificados","empresas"]}}'
```

Respuesta (recortada):

```json
{
  "data": {
    "periodo": "2026-06",
    "results": [
      { "alcance": "planillas", "status": "ok", "recordsSynced": 4 },
      { "alcance": "cotizaciones", "status": "ok", "recordsSynced": 4 },
      { "alcance": "deuda", "status": "ok", "recordsSynced": 0, "detalle": "Previred no reporta deuda pendiente para esta empresa." },
      { "alcance": "f301", "status": "ok", "recordsSynced": 1 },
      { "alcance": "certificados", "status": "ok", "recordsSynced": 12 },
      { "alcance": "empresas", "status": "ok", "recordsSynced": 3 }
    ]
  },
  "meta": { "request_id": "req_...", "tool_id": "previred.conexion.sincronizar", "plane": "read" }
}
```

Un login basta para los seis alcances. El sync no exige esperarlo en línea: el trabajo se encola por la [API de control](/docs/api-control).

## Verdades operativas [#verdades-operativas]

### Un pago se abre en varias planillas [#un-pago-se-abre-en-varias-planillas]

Pagar las cotizaciones de un mes genera **una planilla por institución previsional**: la AFP, la Isapre o Fonasa, el seguro de cesantía, la mutual, la caja de compensación. Cada una tiene su propio folio y su propio monto. Ver cuatro filas para un período con un solo trabajador es lo normal, no una duplicación.

El folio es un identificador de 16 dígitos que emite Previred, y es la identidad de la planilla en Connect. Se guarda entero y opaco: no intentes descomponerlo, porque los folios reales no siguen un patrón parejo.

### El período vacío casi nunca significa «no cotizó» [#el-período-vacío-casi-nunca-significa-no-cotizó]

Las cotizaciones de un mes se declaran y pagan **entre el día 10 y el 13 del mes siguiente**, y la planilla aparece timbrada hasta 24 horas después del pago. Un período reciente sin planillas casi siempre significa «todavía no se paga», no «esta empresa no cotiza». Cuando el sync devuelve cero, el campo `detalle` lo dice con todas sus letras para que no se transmita como un hecho.

### Entre el 10 y el 13 no sincronizamos solos [#entre-el-10-y-el-13-no-sincronizamos-solos]

Esos cuatro días vencen las cotizaciones de todo el país y Previred concentra la carga de Chile entero. La sincronización programada se salta esa ventana a propósito. No se pierde nada: en esos días el período corriente todavía no tiene planillas pagadas, así que traería lo mismo que el día 9. Un sync manual sigue funcionando si lo necesitas.

### «¿Estoy al día?» son dos cosas distintas [#estoy-al-día-son-dos-cosas-distintas]

El alcance `deuda` trae dos tipos de fila y conviene no confundirlos.

`dnp` es una **declaración sin pago**: la empresa declaró lo que debía y no lo pagó. Viene con su
institución y sus cargos legales.

`por_pagar` es una **nómina cuyo plazo todavía corre**. Aparece apenas se genera la planilla y
desaparece cuando se paga. Ahí `institucion` dice `"Todas"` y solo llega `montoTotal`, porque el
portal muestra un total por nómina sin desglosarlo por institución. No es un dato incompleto: es lo
que la pantalla da.

El plazo vence el **día 13 del mes siguiente** al de las remuneraciones, y no se corre por feriado.
Una fila `por_pagar` del período anterior después de esa fecha ya es una deuda, aunque Previred aún no
la haya movido a DNP.

### El comprobante en PDF [#el-comprobante-en-pdf]

Cada planilla trae su comprobante, y `planillas.consultar` lo devuelve en `comprobanteUrl` como un **enlace firmado de vida corta**. Está pensado para seguirlo o descargarlo en el momento, no para guardarlo: caduca a los pocos minutos y no sirve como enlace compartible. El documento trae RUT, nombres y rentas de los trabajadores, y esa vida corta es deliberada.

Si `comprobanteUrl` viene en `null`, el PDF todavía no se ha descargado; la planilla es válida igual y el siguiente sync lo reintenta.

### El desglose por trabajador sale del comprobante [#el-desglose-por-trabajador-sale-del-comprobante]

Previred no publica en pantalla lo que cotizó cada persona: ese detalle vive dentro del PDF. Connect lo extrae al sincronizar, así que `cotizaciones.consultar` responde igual de rápido que las demás consultas.

Dos consecuencias que conviene conocer. Los **días trabajados** solo llegan cuando la institución los informa. Lo hace el Seguro Social y no las demás, así que en el resto quedan en `null`, que es la verdad y no un hueco. Y el `montoCotizacion` de cada fila cuadra con el total que su planilla declara: si alguna vez no cuadrara, la sincronización falla en vez de guardar un número dudoso.

### El archivo para el F30-1 [#el-archivo-para-el-f30-1]

El F30-1 es el Certificado de Cumplimiento de Obligaciones Laborales y Previsionales. Si tu empresa trabaja como contratista, tu mandante te lo va a pedir todos los meses antes de pagarte: la Ley 20.123 lo hace responsable solidario de tus cotizaciones, así que sin ese papel te retiene el pago.

La Dirección del Trabajo lo emite en línea a partir de un archivo que subes, y ese archivo lo genera Previred. El alcance `f301` lo trae en cada sync, y `f301.consultar` lo entrega en `archivoUrl` como enlace firmado de vida corta.

Connect entrega **el archivo con que se pide el certificado**, no el certificado. Ese último paso es de la Dirección del Trabajo y sigue siendo tuyo.

Tres cosas que conviene saber. El archivo cubre **una nómina**, así que un período con dos nóminas trae dos archivos. Se identifica por el **nombre** que la nómina tiene en Previred, y si dos del mismo período se llaman igual la sincronización falla y te lo dice: preferimos eso a mezclar dos archivos en uno. Y el contenido son 106 campos por trabajador, con RUT, nombres y rentas, que es la razón de que el enlace caduque a los pocos minutos.

### El certificado de cotizaciones [#el-certificado-de-cotizaciones]

Es el documento que Previred firma y que una persona pide cuando tiene que probar lo que se le cotizó: para un crédito, un trámite previsional o un juicio laboral. El alcance `certificados` guarda **uno vigente por trabajador**, y `certificados.consultar` lo entrega en `certificadoUrl`.

El certificado cubre la ventana más ancha que Previred permite, 36 meses, terminando en el período que sincronizaste; `periodoDesde` y `periodoHasta` lo dicen. No se elige el rango, y es a propósito: la fila es «el certificado vigente de esta persona», así que cada sincronización lo reemplaza por uno un mes más nuevo en vez de acumular uno por mes.

<Callout title="Es el alcance más caro, y por eso viene apagado">
  Previred emite el certificado de a un trabajador por vez, así que sincronizarlo cuesta **una ida y vuelta al portal por persona**. En una empresa de cincuenta, eso es cincuenta peticiones sobre un portal que ya es lento. Actívalo solo si vas a usar los documentos; si lo que necesitas son los montos, `cotizaciones.consultar` los tiene sin descargar nada.

  Hay una segunda razón para no dejarlo prendido por costumbre. Previred a veces pone el servicio en modo diferido, que **envía un correo al empleador** con el documento adjunto. Connect no usa ese modo: cuando el portal lo declara, la sincronización de este alcance falla y te lo dice. Un conector de solo lectura no manda correos a nombre de nadie.
</Callout>

### Qué otras empresas ve esta clave [#qué-otras-empresas-ve-esta-clave]

En Previred una misma clave suele administrar varias empresas, sobre todo si es la del contador. El alcance `empresas` guarda ese listado y `empresas.consultar` lo devuelve, lo que responde de una vez la pregunta de onboarding: «¿qué más puedo conectar con esta clave?».

Traerlo es gratis. El listado llega en la misma respuesta con la que Connect entra al portal, así que pedirlo no agrega ni una petición y se puede dejar prendido sin pensarlo.

Una advertencia que importa: &#x2A;*ver una empresa en esa lista no es tenerla conectada.** Cada conexión de Connect es una empresa, y para leer los datos de otra hay que crearle su propia conexión con su propio `conn_…`. La lista dice qué claves alcanzan hasta dónde, no de dónde salen los datos que lees.

### Filtrar por trabajador [#filtrar-por-trabajador]

`cotizaciones.consultar` y `certificados.consultar` aceptan `rutTrabajador`. El RUT nunca queda legible en la base de Connect: se guarda cifrado y el filtro corre sobre un índice ciego. Mándalo sin puntos y con guion (`12345678-5`).

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

| Código                               | Qué significa                                                                                                                         | Qué hacer                                                                                                                     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `428 connection_credential_required` | La clave no sirve, está bloqueada o vencida, o la empresa no está asignada a ese usuario de Previred. El mensaje distingue los casos. | Si es la clave, emite un enlace de reconexión. Si es la asignación, pide un usuario secundario a quien administre la empresa. |
| `409 connection_busy`                | Otra operación tiene tomado el candado de esta conexión.                                                                              | Espera unos segundos y reintenta: el candado se suelta solo.                                                                  |
| `502 upstream_error`                 | El portal falló de forma transitoria, o devolvió algo que no era el documento esperado.                                               | Reintenta más tarde. El portal es lento cuando genera comprobantes.                                                           |

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

## Lo que este conector no hace [#lo-que-este-conector-no-hace]

**No paga.** Previred no cierra el pago dentro de su propio sitio: la orden se genera ahí y el dinero se mueve en el portal del banco, con las credenciales y el segundo factor del banco. Ningún software del mercado automatiza ese tramo, y Connect tampoco lo intenta.

**No carga nóminas.** Declarar una nómina es escribir en Previred, y este conector solo lee.

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

* Las ocho tools, con contrato completo: [referencia de `previred`](/docs/referencia/previred).
* 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).
