Consultar deuda previsional en Previred
Lee la deuda previsional ya sincronizada de esta conexión, y responde la pregunta del mes: ¿está al día? Trae las dos mitades.
| Tool ID | previred.deuda.consultar |
| Nombre MCP | previred__deuda__consultar |
| Conector | previred |
| Plano | action |
| Lee el alcance | deuda (debe estar habilitado en la conexión) |
| Scope (permiso) | previred:read |
| Auth | none |
| Versión | 1 |
| Sensible | sí |
| Deprecado | no |
| Comportamiento | readOnly=true, destructive=false, idempotent=true, openWorld=false |
Requiere conexión. Indica cuál en cada llamada: header
X-Connect-Connectionen REST, campoconnectionIden elexecutede MCP y en las opciones del SDK. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale deconexiones.estado.consultar.
Qué hace
'dnp' son declaraciones sin pago, con su institución y sus cargos legales. 'por_pagar' son las nóminas cuyo plazo CORRE y aún no se pagan: ahí 'institucion' es "Todas" y solo viene 'montoTotal', porque el portal da un total por nómina sin desglosarlo. Recuerda el calendario: el plazo vence el día 13 del mes siguiente al de las remuneraciones. Ojo con 'montoTotal': Previred lo recalcula según la fecha en que efectivamente se pague, así que el valor guardado es el del momento de la sincronización (por eso cada fila trae 'observadoEn') y NO una cifra a la que uno pueda comprometerse. Lectura pura: NO contacta a Previred ni dispara una sincronización. Si el período nunca se sincronizó devuelve una lista vacía, que NO significa que no haya datos en Previred. Para traer datos nuevos, usa 'previred.conexion.sincronizar' primero. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas, reenvía ese valor tal cual; nunca lo construyas a mano.
Entrada
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
periodo | string ^\d{4}-\d{2}$ | no | Filtra por un mes, en formato AAAA-MM. Sin él, la consulta trae todas las filas guardadas de esta conexión. |
tipo | "dnp" · "por_pagar" | no | Filtra una de las dos mitades de la deuda: 'dnp' son las declaraciones sin pago y 'por_pagar' las nóminas cuyo plazo todavía corre. Sin él, trae las dos. |
cursor | string | no | Continúa desde donde quedó la página anterior: reenvía tal cual el 'cursor' que vino en la respuesta. Es opaco, así que nunca lo construyas a mano. Sin él, la consulta empieza por el principio. |
limit | entero 1-500 | no · default 100 | Cuántas filas traer como máximo, entre 1 y 500. Si se omite, 100. |
JSON Schema de entrada
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"periodo": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}$",
"description": "Filtra por un mes, en formato AAAA-MM. Sin él, la consulta trae todas las filas guardadas de esta conexión."
},
"tipo": {
"type": "string",
"enum": [
"dnp",
"por_pagar"
],
"description": "Filtra una de las dos mitades de la deuda: 'dnp' son las declaraciones sin pago y 'por_pagar' las nóminas cuyo plazo todavía corre. Sin él, trae las dos."
},
"cursor": {
"description": "Continúa desde donde quedó la página anterior: reenvía tal cual el 'cursor' que vino en la respuesta. Es opaco, así que nunca lo construyas a mano. Sin él, la consulta empieza por el principio.",
"type": "string"
},
"limit": {
"default": 100,
"description": "Cuántas filas traer como máximo, entre 1 y 500. Si se omite, 100.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
}
}Ejemplo
curl -X POST https://connect.emisso.ai/api/v1/tools/previred.deuda.consultar/execute \
-H "Authorization: Bearer connect_sk_…" \
-H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
-H "Content-Type: application/json" \
-d '{"input":{}}'const data = await connect.tools.previred.deuda.consultar({}, { connectionId: "conn_9tKfR2mQx4Vb" });{
"tool": "previred.deuda.consultar",
"params": {},
"connectionId": "conn_9tKfR2mQx4Vb"
}Salida esperada (200):
{
"data": {
"deudas": [
{
"periodo": "2026-05",
"institucion": "AFP Modelo",
"tipo": "dnp",
"montoNominal": 189084,
"cargosLegales": 4521,
"montoTotal": 193605,
"observadoEn": "2026-08-10T14:02:11.000Z"
}
],
"cursor": null
},
"meta": {
"request_id": "req_…",
"tool_id": "previred.deuda.consultar",
"plane": "action",
"latency_ms": 24,
"audit_status": "recorded"
}
}Una lista vacía tras un sync exitoso sí es informativa: significa que Previred no reporta nada pendiente. Una fila 'por_pagar' con institución "Todas" es una nómina completa por pagar, no un dato incompleto.
Salida
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
deudas | lista de objeto | sí | Las filas de deuda guardadas, de las dos mitades ('dnp' y 'por_pagar'). Una lista vacía después de un sync exitoso sí es informativa: significa que Previred no reporta nada pendiente. |
deudas[].periodo | string | sí | El mes de remuneraciones al que corresponde la deuda, en formato AAAA-MM. |
deudas[].institucion | string | sí | La institución a la que se le debe, con el nombre que le da Previred. En una fila 'por_pagar' dice 'Todas': esa pantalla da un total por nómina sin desglosarlo por institución. |
deudas[].tipo | "dnp" · "por_pagar" | sí | 'dnp' es una declaración sin pago: la empresa declaró lo que debía y no lo pagó, y la fila trae su institución y sus cargos legales. 'por_pagar' es una nómina cuyo plazo todavía corre y aún no se paga; ahí solo llega 'montoTotal'. El plazo vence el día 13 del mes siguiente al de las remuneraciones, así que una fila 'por_pagar' más vieja que eso ya es deuda aunque Previred no la haya movido. |
deudas[].montoNominal | número | null | sí |
deudas[].cargosLegales | número | null | sí |
deudas[].montoTotal | número | null | sí |
deudas[].observadoEn | string | sí | Instante (ISO 8601) en que se observó esta deuda. Importa porque 'montoTotal' se mueve con el tiempo: un total viejo ya no es el que hay que pagar. |
cursor | string | null | sí |
JSON Schema de salida
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"deudas": {
"type": "array",
"items": {
"type": "object",
"properties": {
"periodo": {
"type": "string",
"description": "El mes de remuneraciones al que corresponde la deuda, en formato AAAA-MM."
},
"institucion": {
"type": "string",
"description": "La institución a la que se le debe, con el nombre que le da Previred. En una fila 'por_pagar' dice 'Todas': esa pantalla da un total por nómina sin desglosarlo por institución."
},
"tipo": {
"type": "string",
"enum": [
"dnp",
"por_pagar"
],
"description": "'dnp' es una declaración sin pago: la empresa declaró lo que debía y no lo pagó, y la fila trae su institución y sus cargos legales. 'por_pagar' es una nómina cuyo plazo todavía corre y aún no se paga; ahí solo llega 'montoTotal'. El plazo vence el día 13 del mes siguiente al de las remuneraciones, así que una fila 'por_pagar' más vieja que eso ya es deuda aunque Previred no la haya movido."
},
"montoNominal": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Lo adeudado sin reajustes ni multas, en pesos. Viene en null en las filas 'por_pagar', porque esa pantalla no desglosa el total."
},
"cargosLegales": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Reajustes, intereses y multas acumulados, en pesos. Previred los recalcula según la fecha en que se pague, así que es el valor del momento en que se sincronizó. Viene en null en las filas 'por_pagar'."
},
"montoTotal": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Lo adeudado con sus cargos legales incluidos, en pesos. Es el valor del momento en que se sincronizó (lo dice 'observadoEn') y no una cifra a la que se pueda comprometer nadie: Previred lo recalcula según la fecha de pago."
},
"observadoEn": {
"type": "string",
"description": "Instante (ISO 8601) en que se observó esta deuda. Importa porque 'montoTotal' se mueve con el tiempo: un total viejo ya no es el que hay que pagar."
}
},
"required": [
"periodo",
"institucion",
"tipo",
"montoNominal",
"cargosLegales",
"montoTotal",
"observadoEn"
],
"additionalProperties": false
},
"description": "Las filas de deuda guardadas, de las dos mitades ('dnp' y 'por_pagar'). Una lista vacía después de un sync exitoso sí es informativa: significa que Previred no reporta nada pendiente."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Cuando no es null quedan más filas: reenvíalo tal cual en 'cursor' para pedir la página siguiente. En null significa que esta fue la última."
}
},
"required": [
"deudas",
"cursor"
],
"additionalProperties": false
}Errores de esta tool
| Código | HTTP | Reintentable | Qué hacer |
|---|---|---|---|
connection_disabled | 403 | no | Reactívala en /connections o usa otra conexión del mismo sistema. |
alcance_not_enabled | 403 | no | Habilita el alcance en /connections o quítalo del input de la sincronización. |
Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.
Próximos pasos
previred.conexion.sincronizar: la tool que escribe los datos que esta lectura devuelve.- Sincronizar y consultar: por qué leer datos reales son dos pasos.