{"openapi":"3.1.0","info":{"title":"Emisso Connect API","version":"0.1.0","description":"Un solo endpoint entre tus agentes y los sistemas chilenos: el SII, los bancos y Previred para leer, y Notta para emitir documentos tributarios.\n\nToda llamada es un POST a '/v1/tools/{tool_id}/execute' con la entrada envuelta en 'input', y toda respuesta trae el mismo sobre: 'data' con la salida de la tool y 'meta' con el 'request_id' que la identifica en la bitácora. Los errores traen 'code', 'message', 'request_id' y un 'suggested_fix' escrito para ejecutarse: decide siempre por el 'code', nunca por el texto.\n\nDos reglas que conviene saber antes de la primera llamada. La primera: leer datos reales son DOS pasos. La tool 'conexion.sincronizar' de cada sistema hace el login y escribe lo que trajo; las tools 'consultar' leen eso ya guardado y nunca preguntan en vivo, así que una consulta vacía puede significar que ese período todavía no se sincroniza. La segunda: en todo sistema conectable la cabecera 'X-Connect-Connection' es obligatoria y no hay elección implícita, ni con una sola conexión activa, porque la conexión es la empresa a cuyo nombre se opera.\n\nEl mismo catálogo se sirve por MCP en '/mcp', donde se anuncian dos meta-tools, 'search_docs' y 'execute'.","contact":{"name":"Emisso","url":"https://connect.emisso.ai/docs","email":"contacto@tryemisso.com"}},"servers":[{"url":"https://connect.emisso.ai/api"}],"externalDocs":{"url":"https://connect.emisso.ai/docs","description":"Guías, conceptos y la referencia completa de cada tool."},"tags":[{"name":"banco_estado","description":"BancoEstado Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"banco_security","description":"Banco Security Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"bch_empresas","description":"Banco de Chile Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"bci_360","description":"BCI 360 (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"bci_pyme","description":"Banco BCI Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"bice_empresas","description":"Banco BICE Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"conexiones","description":"Conexiones de Emisso Connect (utilidad). No requiere conexión: queda habilitado para toda organización."},{"name":"core","description":"Core (utilidad). No requiere conexión: queda habilitado para toda organización."},{"name":"echo","description":"Echo (utilidad). No requiere conexión: queda habilitado para toda organización."},{"name":"indicadores","description":"Indicadores económicos (utilidad). No requiere conexión: queda habilitado para toda organización."},{"name":"itau_empresas","description":"Banco Itaú Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"mercadopublico","description":"Mercado Público (utilidad). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"notta","description":"Notta (facturación). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"pjud","description":"Poder Judicial (utilidad). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"previred","description":"Previred (autoridad tributaria). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"santander_empresas","description":"Banco Santander Empresas (banco). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"sii","description":"Servicio de Impuestos Internos (autoridad tributaria). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."},{"name":"tgr","description":"Tesorería General de la República (autoridad tributaria). Requiere una conexión: manda su conn_ en 'X-Connect-Connection'."}],"security":[{"apiKey":[]},{"oauth2":[]}],"paths":{"/v1/tools/banco_estado.conexion.sincronizar/execute":{"post":{"operationId":"banco_estado__conexion__sincronizar","summary":"Sincronizar conexión BancoEstado","description":"Inicia sesión en BancoEstado Empresas y persiste los alcances pedidos (saldos, movimientos) para un período, en UNA sola sesión (un login, un logout). Es el ÚNICO camino que trae datos del banco: las tools de consulta leen lo ya guardado. Deja los movimientos guardados iguales a la cartola del banco en los días que leyó completos: lo que el banco ya no muestra deja de aparecer en 'banco_estado.movimientos.consultar', y lo que vuelve a mostrar reaparece. `saldos` es una foto del momento, no del período, así que sólo se sincroniza pidiendo el período corriente. Puede tardar cerca de un minuto, y mientras corre el titular no va a poder entrar al portal: BancoEstado admite una sola sesión activa por usuario.","tags":["banco_estado"],"security":[{"apiKey":[]},{"oauth2":["banco_estado:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_estado__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_estado__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_estado.conexion.verificar/execute":{"post":{"operationId":"banco_estado__conexion__verificar","summary":"Verificar conexión BancoEstado Empresas","description":"Prueba las credenciales de la conexión contra BancoEstado Empresas haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["banco_estado"],"security":[{"apiKey":[]},{"oauth2":["banco_estado:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_estado__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_estado__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_estado.movimientos.consultar/execute":{"post":{"operationId":"banco_estado__movimientos__consultar","summary":"Consultar movimientos de BancoEstado","description":"Lee los movimientos de BancoEstado YA sincronizados de esta conexión, del más reciente al más antiguo. Lectura pura: NO contacta al banco ni dispara una sincronización, así que si falta un período usa 'banco_estado.conexion.sincronizar' primero. Refleja la cartola del banco: en los días que la última sincronización leyó completos, un movimiento que el banco ya no muestra deja de aparecer aquí (por ejemplo, un provisorio que el banco reemplazó en el cierre nocturno por su versión definitiva, a veces con otra glosa u otro documento) y reaparece si el banco lo vuelve a mostrar. Entre la medianoche y cerca de las 04:00 (hora de Chile) un movimiento del día puede no aparecer, igual que en el portal del banco. Cada movimiento trae 'estado': 'provisorio' si el banco todavía no lo contabiliza (puede cambiar o desaparecer en el cierre) o 'definitivo' si ya lo hizo, y se puede filtrar por él. Si guardas los movimientos en tu sistema, no te limites a agregar filas nuevas: vuelve a leer al menos el mes en curso y el anterior (con 'periodo') y reemplaza esos meses en tu copia. Los montos vienen como NÚMERO: 'monto' es la magnitud SIN signo, 'type' dice si sale ('credit') o entra ('debit') plata según el libro del banco (al revés de como se lee una cartola), y 'display' es ese monto ya formateado a la chilena con su signo. 'saldo' es el saldo arrastrado: es un balance, no lleva 'type' y conserva su propio signo. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas, reenvía ese valor tal cual.","tags":["banco_estado"],"security":[{"apiKey":[]},{"oauth2":["banco_estado:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_estado__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_estado__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_estado.saldos.consultar/execute":{"post":{"operationId":"banco_estado__saldos__consultar","summary":"Consultar saldos de BancoEstado","description":"Lee los saldos de BancoEstado YA sincronizados de esta conexión, del más reciente al más antiguo. Lectura pura: NO contacta al banco ni dispara una sincronización, así que si nunca se sincronizó devuelve una lista vacía. Para traer datos nuevos usa 'banco_estado.conexion.sincronizar' primero. Los saldos son una foto POR DÍA y vienen como NÚMERO conservando su signo: un sobregiro es negativo, y un saldo no lleva 'type' porque no es una operación. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas, reenvía ese valor tal cual y nunca lo construyas a mano.","tags":["banco_estado"],"security":[{"apiKey":[]},{"oauth2":["banco_estado:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_estado__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_estado__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.conexion.sincronizar/execute":{"post":{"operationId":"banco_security__conexion__sincronizar","summary":"Sincronizar conexión Banco Security","description":"Sincroniza los alcances solicitados (transferencias, nóminas, saldos, movimientos) para un período en una sola sesión (un login, un logout). `saldos` es una foto del momento, no del período: solo se sincroniza cuando se pide el período corriente. `movimientos` cubre cualquier período: el conector elige solo la cartola que corresponde (la del mes en curso o la histórica) y las dos escriben la misma tabla, así que un mismo movimiento traído por las dos NO se duplica.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.conexion.verificar/execute":{"post":{"operationId":"banco_security__conexion__verificar","summary":"Verificar conexión Banco Security","description":"Prueba las credenciales de la conexión contra Banco Security haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.movimientos.consultar/execute":{"post":{"operationId":"banco_security__movimientos__consultar","summary":"Consultar movimientos de Banco Security","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, los movimientos de cuenta corriente guardados de esta conexión, del más reciente al más antiguo, filtrables por período (AAAA-MM). Exige el alcance 'movimientos' habilitado. Sin 'periodo' devuelve todos los períodos sincronizados. Si el período nunca se sincronizó, devuelve una lista vacía (lo que NO significa que no haya movimientos): usa 'banco_security.conexion.sincronizar' primero. El banco sirve el mes en curso y los meses ya cerrados por dos cartolas distintas, pero eso es interno: las dos escriben esta misma caché con la misma identidad por movimiento, así que un mes de solape NO aparece duplicado y los resultados se pueden sumar sin miedo. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola) y 'display' es ese monto ya formateado a la chilena con su signo. Un saldo NO lleva 'type': es un balance y conserva su propio signo. 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.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.nomina_pagos.consultar/execute":{"post":{"operationId":"banco_security__nomina_pagos__consultar","summary":"Consultar los pagos de una nómina de Banco Security","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, las LÍNEAS DE PAGO de UNA nómina: el 'idNomina' es obligatorio y sale de 'banco_security.nominas.consultar'. Exige el alcance 'nominas' habilitado (el mismo que las cabeceras). Las líneas salen en orden ascendente de 'linea'. Si esa nómina nunca se sincronizó, devuelve una lista vacía. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola) y 'display' es ese monto ya formateado a la chilena con su signo. Un saldo NO lleva 'type': es un balance y conserva su propio signo. 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.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__nomina_pagos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__nomina_pagos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.nominas.consultar/execute":{"post":{"operationId":"banco_security__nominas__consultar","summary":"Consultar nóminas de pago de Banco Security","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, SOLO las CABECERAS de las nóminas de pago masivas guardadas de esta conexión, de la más reciente a la más antigua, filtrables por período (AAAA-MM). Exige el alcance 'nominas' habilitado. Cada cabecera trae 'numRegistros' para que dimensiones antes de pedir el detalle: las líneas de pago se piden aparte con 'banco_security.nomina_pagos.consultar' pasándole el 'idNomina' de la cabecera (hay nóminas de más de mil líneas, por eso no vienen aquí). Si el período nunca se sincronizó, devuelve una lista vacía: usa 'banco_security.conexion.sincronizar' primero. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola) y 'display' es ese monto ya formateado a la chilena con su signo. Un saldo NO lleva 'type': es un balance y conserva su propio signo. 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.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__nominas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__nominas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.saldos.consultar/execute":{"post":{"operationId":"banco_security__saldos__consultar","summary":"Consultar saldos de Banco Security","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, los saldos guardados de esta conexión (contable, disponible y provisorio), con el snapshot más reciente primero. Exige el alcance 'saldos' habilitado. Si nunca se sincronizó, devuelve una lista vacía (eso NO significa que la empresa no tenga cuentas); usa 'banco_security.conexion.sincronizar' primero. Los saldos son un snapshot POR DÍA, así que sin filtro de fecha la primera página ya son los más recientes que hay guardados. Los tres saldos vienen como NÚMERO ya normalizado (antes eran la celda cruda del banco, '$ 12.345.678'), y conservan su signo: un sobregiro es negativo. Un saldo no lleva 'type': no es una operación. 'ultimaLecturaEn' dice cuándo se leyó esa fila del banco: si es vieja, la conexión puede estar pausada. 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.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/banco_security.transferencias.consultar/execute":{"post":{"operationId":"banco_security__transferencias__consultar","summary":"Consultar transferencias de Banco Security","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, las transferencias TEF guardadas de esta conexión, de la más reciente a la más antigua, filtrables por período (AAAA-MM) y por dirección. Exige el alcance 'transferencias' habilitado. Omitir 'direccion' trae enviadas y recibidas juntas; el campo 'direction' de cada fila las distingue ('issued' = enviada, 'received' = recibida). Si el período nunca se sincronizó, devuelve una lista vacía: usa 'banco_security.conexion.sincronizar' primero. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola) y 'display' es ese monto ya formateado a la chilena con su signo. Un saldo NO lleva 'type': es un balance y conserva su propio signo. 'numeroTransaccion' sí es texto (tiene 14 dígitos y no entra en un entero de 32 bits). 'ultimaLecturaEn' dice cuándo se leyó esa fila del banco. 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.","tags":["banco_security"],"security":[{"apiKey":[]},{"oauth2":["banco_security:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/banco_security__transferencias__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/banco_security__transferencias__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bch_empresas.cartolas.consultar/execute":{"post":{"operationId":"bch_empresas__cartolas__consultar","summary":"Consultar cartolas emitidas de Banco de Chile","description":"Lee las cartolas (extractos mensuales) ya sincronizadas de esta conexión, la más reciente primero, filtrables por período de búsqueda (AAAA-MM) y por cuenta. Lectura pura: NO contacta al banco ni dispara una sincronización. Para traer datos nuevos, usa 'bch_empresas.conexion.sincronizar' primero. Una cartola es un OBJETO propio, no una vista de 'movimientos': sus saldos de apertura y cierre pueden no cuadrar exactamente con la suma de movimientos del mismo mes porque el extracto encadena por fecha contable y el feed vivo por fecha del movimiento. 'numeroCartola' es TEXTO siempre (convertirlo a número pierde ceros a la izquierda). 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.","tags":["bch_empresas"],"security":[{"apiKey":[]},{"oauth2":["bch_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bch_empresas__cartolas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bch_empresas__cartolas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bch_empresas.conexion.sincronizar/execute":{"post":{"operationId":"bch_empresas__conexion__sincronizar","summary":"Sincronizar conexión Banco de Chile","description":"Sincroniza los alcances solicitados (saldos, movimientos, movimientos de tarjetas y cartolas) para un período en una sola sesión de portal (un login, un logout). `saldos` es una foto del momento, no del período: solo se sincroniza cuando se pide el período corriente. `cartolas` son los extractos MENSUALES ya emitidos por el banco, un objeto propio que NO alimenta `movimientos`. `movimientos` sincroniza cuentas en pesos chilenos (CLP) y dólares estadounidenses (USD).","tags":["bch_empresas"],"security":[{"apiKey":[]},{"oauth2":["bch_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bch_empresas__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bch_empresas__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bch_empresas.conexion.verificar/execute":{"post":{"operationId":"bch_empresas__conexion__verificar","summary":"Verificar conexión Banco de Chile","description":"Prueba las credenciales de la conexión contra Banco de Chile haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["bch_empresas"],"security":[{"apiKey":[]},{"oauth2":["bch_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bch_empresas__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bch_empresas__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bch_empresas.movimientos_tarjetas.consultar/execute":{"post":{"operationId":"bch_empresas__movimientos_tarjetas__consultar","summary":"Consultar movimientos de tarjetas de Banco de Chile","description":"Lee exclusivamente la caché de movimientos de tarjetas de crédito de esta conexión; NO abre una sesión ni contacta al banco. Incluye pendientes del período actual y estados de cuenta facturados en CLP y USD. El monto conserva el signo que entregó el banco: no se infiere cargo o abono. Por defecto devuelve solo filas vigentes; usa soloVigentes=false para incluir pendientes que ya no aparecen en la última captura. Nunca devuelve PAN, titular, RUT, número de cuenta, IDs crudos ni raw.","tags":["bch_empresas"],"security":[{"apiKey":[]},{"oauth2":["bch_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bch_empresas__movimientos_tarjetas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bch_empresas__movimientos_tarjetas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bch_empresas.movimientos.consultar/execute":{"post":{"operationId":"bch_empresas__movimientos__consultar","summary":"Consultar movimientos de Banco de Chile","description":"Lee los movimientos ya sincronizados de esta conexión, del más reciente al más antiguo, filtrables por período (AAAA-MM) y por cuenta. Lectura pura: NO contacta al banco ni dispara una sincronización. Si el período nunca se sincronizó, devuelve una lista vacía, que NO significa que no haya movimientos. Incluye cuentas en pesos chilenos (CLP) y dólares estadounidenses (USD); la moneda viaja en cada fila. Para traer datos nuevos, usa 'bch_empresas.conexion.sincronizar' primero. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola), y 'display' es ese monto ya formateado a la chilena con su signo. 'saldoContable' es un balance: no lleva 'type' y conserva su propio signo. 'id' es la huella estable con la que se guardó el movimiento: el mismo movimiento visto en dos sincronizaciones solapadas trae el mismo 'id'. 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.","tags":["bch_empresas"],"security":[{"apiKey":[]},{"oauth2":["bch_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bch_empresas__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bch_empresas__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bch_empresas.saldos.consultar/execute":{"post":{"operationId":"bch_empresas__saldos__consultar","summary":"Consultar saldos de Banco de Chile","description":"Lee los saldos ya sincronizados de esta conexión, con el snapshot más reciente primero. Lectura pura: NO contacta al banco ni dispara una sincronización. Si nunca se sincronizó, devuelve una lista vacía. Para traer datos nuevos, usa 'bch_empresas.conexion.sincronizar' primero. Los saldos son un snapshot POR DÍA, así que sin filtro de fecha la primera página ya son los saldos más recientes que hay guardados. Los tres saldos vienen como NÚMERO y conservan su signo. Un saldo no lleva 'type' (no es una operación). 'saldoContable' puede venir null en filas sincronizadas antes del 2026-08-11, que es cuando se empezó a leer; desde entonces trae el saldo contable real, que difiere del disponible por retenciones y cheques en canje. 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.","tags":["bch_empresas"],"security":[{"apiKey":[]},{"oauth2":["bch_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bch_empresas__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bch_empresas__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_360.conexion.sincronizar/execute":{"post":{"operationId":"bci_360__conexion__sincronizar","summary":"Sincronizar conexión BCI 360","description":"Sincroniza saldos actuales y movimientos mensuales de la empresa autorizada en BCI 360. Recorre todas las páginas y actualiza por ID bancario y cuenta, sin duplicar movimientos. No ejecuta pagos.","tags":["bci_360"],"security":[{"apiKey":[]},{"oauth2":["bci_360:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_360__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_360__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_360.conexion.verificar/execute":{"post":{"operationId":"bci_360__conexion__verificar","summary":"Verificar conexión BCI 360","description":"Prueba las credenciales de la conexión contra BCI 360 haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["bci_360"],"security":[{"apiKey":[]},{"oauth2":["bci_360:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_360__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_360__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_360.movimientos.consultar/execute":{"post":{"operationId":"bci_360__movimientos__consultar","summary":"Consultar movimientos BCI 360","description":"Consulta los movimientos almacenados de BCI 360. No abre una sesión bancaria. Una lista vacía no confirma ausencia de movimientos: revisa completo y la última sincronización.","tags":["bci_360"],"security":[{"apiKey":[]},{"oauth2":["bci_360:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_360__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_360__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_360.saldos.consultar/execute":{"post":{"operationId":"bci_360__saldos__consultar","summary":"Consultar saldos BCI 360","description":"Consulta saldos de BCI 360 ya sincronizados, por cuenta y moneda. No abre una sesión bancaria.","tags":["bci_360"],"security":[{"apiKey":[]},{"oauth2":["bci_360:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_360__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_360__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_pyme.conexion.sincronizar/execute":{"post":{"operationId":"bci_pyme__conexion__sincronizar","summary":"Sincronizar conexión BCI","description":"Sincroniza los alcances solicitados (saldos, movimientos) para un período en una sola sesión (un login, un logout). `saldos` es una foto del momento, no del período: solo se sincroniza cuando se pide el período corriente.","tags":["bci_pyme"],"security":[{"apiKey":[]},{"oauth2":["bci_pyme:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_pyme__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_pyme__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_pyme.conexion.verificar/execute":{"post":{"operationId":"bci_pyme__conexion__verificar","summary":"Verificar conexión BCI","description":"Prueba las credenciales de la conexión contra BCI haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["bci_pyme"],"security":[{"apiKey":[]},{"oauth2":["bci_pyme:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_pyme__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_pyme__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_pyme.movimientos.consultar/execute":{"post":{"operationId":"bci_pyme__movimientos__consultar","summary":"Consultar movimientos de BCI","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, los movimientos guardados de esta conexión, del más reciente al más antiguo, filtrables por período (AAAA-MM) y por cuenta. Exige el alcance 'movimientos' habilitado. Si el período nunca se sincronizó, devuelve una lista vacía, que NO significa que no haya movimientos; usa 'bci_pyme.conexion.sincronizar' primero. 'completo' dice si el último sync de ESE período trajo todo: BCI corta en 1000 movimientos por cuenta y mes, y 'completo: false' significa que faltan filas. Sin filtro de 'periodo' vale null, o sea «no se sabe». Ojo con las correcciones del banco: un movimiento corregido entra como fila NUEVA en vez de reemplazar a la anterior, así que ante dos filas del mismo movimiento vale la de 'ultimaLecturaEn' mayor. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola) y 'display' es ese monto ya formateado a la chilena con su signo. 'saldoContable' es un balance: no lleva 'type' y conserva su propio signo. 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.","tags":["bci_pyme"],"security":[{"apiKey":[]},{"oauth2":["bci_pyme:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_pyme__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_pyme__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bci_pyme.saldos.consultar/execute":{"post":{"operationId":"bci_pyme__saldos__consultar","summary":"Consultar saldos de BCI","description":"Devuelve, desde la caché ya sincronizada y sin contactar al banco, los saldos guardados de esta conexión (contable, disponible, 9AM y retención), con el snapshot más reciente primero. Exige el alcance 'saldos' habilitado. Si nunca se sincronizó, devuelve una lista vacía: eso NO significa que la empresa no tenga cuentas. Para traer datos nuevos usa 'bci_pyme.conexion.sincronizar' primero. Los saldos son un snapshot POR DÍA, así que sin filtro de fecha la primera página ya son los más recientes que hay guardados. Los cuatro saldos vienen como NÚMERO ya normalizado y conservan su signo: un sobregiro es negativo. Un saldo no lleva 'type' (no es una operación). 'ultimaLecturaEn' dice cuándo se leyó esa fila del banco: si es vieja, la conexión puede estar pausada. 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.","tags":["bci_pyme"],"security":[{"apiKey":[]},{"oauth2":["bci_pyme:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bci_pyme__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bci_pyme__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bice_empresas.conexion.sincronizar/execute":{"post":{"operationId":"bice_empresas__conexion__sincronizar","summary":"Sincronizar conexión BICE","description":"Sincroniza los alcances solicitados (saldos, movimientos) para un período en una sola sesión de portal. `saldos` es una foto del momento, no del período: solo se sincroniza cuando se pide el período corriente.","tags":["bice_empresas"],"security":[{"apiKey":[]},{"oauth2":["bice_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bice_empresas__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bice_empresas__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bice_empresas.conexion.verificar/execute":{"post":{"operationId":"bice_empresas__conexion__verificar","summary":"Verificar conexión BICE","description":"Prueba las credenciales de la conexión contra BICE haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["bice_empresas"],"security":[{"apiKey":[]},{"oauth2":["bice_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bice_empresas__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bice_empresas__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bice_empresas.movimientos.consultar/execute":{"post":{"operationId":"bice_empresas__movimientos__consultar","summary":"Consultar movimientos de BICE Empresas","description":"Lee los movimientos ya sincronizados de esta conexión, del más reciente al más antiguo, filtrables por período (AAAA-MM), por cuenta y por 'type' (el eje credit/debit del libro del banco: 'debit' para los abonos, 'credit' para los cargos). Lectura pura: NO contacta al banco ni dispara una sincronización. Si el período nunca se sincronizó, devuelve una lista vacía, que NO significa que no haya movimientos. Para traer datos nuevos, usa 'bice_empresas.conexion.sincronizar' primero. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola), y 'display' es ese monto ya formateado a la chilena con su signo. 'saldoContable' es un balance: no lleva 'type' y conserva su propio signo. Cada fila trae además 'counterparty' con el nombre, el RUT, el banco y la cuenta del otro lado cuando el banco los informa: en BICE viajan dentro de la glosa y aquí ya vienen separados, con el RUT en la misma forma que usa el SII. 'counterpartySource' en null significa que el banco NO informó contraparte en esa fila, no que Connect no la haya podido leer. 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.","tags":["bice_empresas"],"security":[{"apiKey":[]},{"oauth2":["bice_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bice_empresas__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bice_empresas__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/bice_empresas.saldos.consultar/execute":{"post":{"operationId":"bice_empresas__saldos__consultar","summary":"Consultar saldos de BICE Empresas","description":"Lee los saldos ya sincronizados de esta conexión, con el snapshot más reciente primero. Lectura pura: NO contacta al banco ni dispara una sincronización. Si nunca se sincronizó, devuelve una lista vacía. Para traer datos nuevos, usa 'bice_empresas.conexion.sincronizar' primero. Los saldos son un snapshot POR DÍA, así que sin filtro de fecha la primera página ya son los saldos más recientes que hay guardados. Los dos saldos vienen como NÚMERO y conservan su signo: un sobregiro es negativo. Un saldo no lleva 'type' (no es una operación). 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.","tags":["bice_empresas"],"security":[{"apiKey":[]},{"oauth2":["bice_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/bice_empresas__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/bice_empresas__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.conexion.crear/execute":{"post":{"operationId":"conexiones__conexion__crear","summary":"Conectar un sistema que no pide clave","description":"Crea la conexión de un sistema público que no pide credenciales (hoy Mercado Público) para una empresa, y devuelve su connectionId. La conexión se cobra como cualquier otra del plan de la organización: créala sólo si la persona quiere usar ese sistema. Si esa empresa ya tiene una conexión activa con el sistema, devuelve la misma y no crea otra. Para los sistemas que piden clave usa conexiones.enlace.crear.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:write"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__conexion__crear__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__conexion__crear__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.conexion.deshabilitar/execute":{"post":{"operationId":"conexiones__conexion__deshabilitar","summary":"Deshabilitar una conexión","description":"Pausa una conexión de esta organización: deja de sincronizar, sus herramientas responden 'connection_disabled' y deja de sumarse a los próximos cobros. No borra nada: la credencial, los datos ya sincronizados y el historial se conservan, y conexiones.conexion.habilitar la reanuda. Úsala sólo si la persona pidió pausar esa conexión. Si ya estaba deshabilitada, no cambia nada y responde 'cambiada' en false.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:disable"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__conexion__deshabilitar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__conexion__deshabilitar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.conexion.eliminar/execute":{"post":{"operationId":"conexiones__conexion__eliminar","summary":"Eliminar una conexión","description":"Elimina una conexión de esta organización y todo lo que cuelga de ella: la credencial guardada, los datos sincronizados, su historial de sincronizaciones y sus webhooks. NO SE PUEDE DESHACER: para volver a usar el sistema hay que conectarlo de nuevo y sincronizar desde cero. Úsala sólo si la persona pidió eliminar esa conexión en particular; para renovar una credencial usa conexiones.enlace.crear en modo 'reconectar'. Pide 'conexionId' y 'confirmarNombre', ambos tal como los devuelve conexiones.estado.consultar. La conexión deja de sumarse a los próximos cobros.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:delete"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Clave de idempotencia para esta acción destructiva. Reenviar la MISMA clave con la misma entrada devuelve la respuesta ya emitida en vez de repetir el efecto; con una entrada distinta responde 'idempotency_conflict', y mientras el primer intento sigue en curso, 'idempotency_in_progress'. Un intento fallido nunca consume la clave. Sin cabecera, el pipeline genera una por ejecución, o sea que no hay deduplicación entre reintentos tuyos: mándala siempre que puedas reintentar.","schema":{"type":"string","maxLength":255},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__conexion__eliminar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__conexion__eliminar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.conexion.habilitar/execute":{"post":{"operationId":"conexiones__conexion__habilitar","summary":"Habilitar una conexión","description":"Reanuda una conexión deshabilitada de esta organización: vuelve a sincronizar según su cadencia y sus herramientas vuelven a responder. La conexión vuelve a sumarse al cobro del plan: si 'costoAdicional' no es null, díselo a la persona. No sirve para una conexión sin credencial: esa se completa con conexiones.enlace.crear. Si ya estaba habilitada, no cambia nada y responde 'cambiada' en false.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:enable"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__conexion__habilitar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__conexion__habilitar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.enlace.crear/execute":{"post":{"operationId":"conexiones__enlace__crear","summary":"Crear un enlace para conectar un sistema","description":"Crea un enlace de un solo uso donde la persona entrega sus credenciales del sistema para conectarlo. Devuelve el enlace SIEMPRE con su dominio completo visible y explicando quién lo pidió y para qué; nunca lo presentes como un aviso del banco ni del SII. La credencial se cifra en el vault de esta misma organización y no la ve nadie más, tampoco tú. El enlace vence y sirve una sola vez. Si 'costoAdicional' no es null, la conexión nueva se suma al próximo cobro de la organización: díselo a la persona antes de entregar el enlace. Después de que la persona lo complete, usa 'conexiones.estado.consultar' para saber si ya hay datos.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:write"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__enlace__crear__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__enlace__crear__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.estado.consultar/execute":{"post":{"operationId":"conexiones__estado__consultar","summary":"Consultar el estado de las conexiones","description":"Dice en qué va cada conexión: si la credencial quedó vinculada, qué sincronizaciones corrieron y si YA HAY DATOS para consultar ('datosListos'). Úsala después de que la persona complete un enlace, y antes de intentar leer: un listado vacío no significa que no haya nada, puede ser que todavía no sincronizó. La primera sincronización de un sistema con navegador puede tardar cerca de un minuto. El campo 'herramientas' trae los ids que ya puedes invocar; si tu cliente MCP todavía no los muestra en su lista, invócalos con la herramienta 'execute' pasando el id en 'tool'.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__estado__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__estado__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/conexiones.sistemas.listar/execute":{"post":{"operationId":"conexiones__sistemas__listar","summary":"Listar los sistemas que se pueden conectar","description":"Devuelve el catálogo de sistemas chilenos que esta organización puede conectar (bancos, SII) con el estado de cada uno: si ya está conectado, sus conexiones, los módulos de datos que ofrece y las herramientas que quedan disponibles al conectarlo. Úsala SIEMPRE antes de crear un enlace, para obtener el código exacto del sistema, no lo adivines. Si un sistema aparece con 'conectado' en false, el camino es 'conexiones.enlace.crear'.","tags":["conexiones"],"security":[{"apiKey":[]},{"oauth2":["conexiones:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/conexiones__sistemas__listar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/conexiones__sistemas__listar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/core.timestamp.now/execute":{"post":{"operationId":"core__timestamp__now","summary":"Hora del servidor","description":"Devuelve la marca de tiempo actual del servidor (ISO-8601 UTC, epoch Unix) y la zona horaria solicitada. Prueba el camino E2E; no requiere credenciales.","tags":["core"],"security":[{"apiKey":[]},{"oauth2":["core:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/core__timestamp__now__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/core__timestamp__now__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/echo.message.reflect/execute":{"post":{"operationId":"echo__message__reflect","summary":"Reflejar mensaje","description":"Devuelve el texto recibido junto con su longitud. Conector de ejemplo que prueba que el patrón del registry generaliza; no requiere credenciales.","tags":["echo"],"security":[{"apiKey":[]},{"oauth2":["echo:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/echo__message__reflect__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/echo__message__reflect__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/indicadores.serie.consultar/execute":{"post":{"operationId":"indicadores__serie__consultar","summary":"Serie histórica del indicador","description":"Devuelve la serie de valores de un indicador entre dos fechas (AAAA-MM-DD), en orden ascendente, acotada por 'limite' (tope duro 1000), leída del almacén de referencia global.","tags":["indicadores"],"security":[{"apiKey":[]},{"oauth2":["indicadores:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/indicadores__serie__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/indicadores__serie__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/indicadores.valor.actual/execute":{"post":{"operationId":"indicadores__valor__actual","summary":"Valor actual del indicador","description":"Devuelve el ÚLTIMO valor disponible de un indicador económico chileno (UF, DÓLAR, EURO, IPC, UTM), leído del almacén de referencia global; no consulta fuentes externas en tiempo real. 'último disponible' NO es lo mismo que 'el de hoy', y hay que mirar 'fecha' antes de usar el número: la UF y la UTM se publican por ADELANTADO, así que su fecha puede ser futura; y si la ingesta se atrasa, la fecha queda en el pasado. 'antiguedadDias' resuelve las dos de una vez: 0 = es el de hoy, positivo = días transcurridos desde esa fecha, negativo = está fechado en el futuro. Un positivo NO significa por sí solo que la fuente esté caída: en el IPC y la UTM, que son MENSUALES, es lo normal. Lee la descripción de 'antiguedadDias' antes de concluir nada.","tags":["indicadores"],"security":[{"apiKey":[]},{"oauth2":["indicadores:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/indicadores__valor__actual__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/indicadores__valor__actual__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/indicadores.valor.consultar/execute":{"post":{"operationId":"indicadores__valor__consultar","summary":"Valor del indicador a una fecha","description":"Devuelve el valor de un indicador vigente a una fecha dada (AAAA-MM-DD) CON ARRASTRE: si esa fecha no tiene dato propio (un fin de semana, un feriado, o una fuente que no se ha actualizado) devuelve el último valor anterior. La 'fecha' de la respuesta puede ser DISTINTA de la solicitada, y 'esArrastre' lo marca: false = ese día tiene dato propio; true = el valor corresponde a la 'fecha' devuelta, que es anterior. Pedir una fecha futura devuelve el último valor conocido con 'esArrastre: true', no un error. Todo se lee del almacén de referencia global.","tags":["indicadores"],"security":[{"apiKey":[]},{"oauth2":["indicadores:read"]}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/indicadores__valor__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/indicadores__valor__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/itau_empresas.conexion.sincronizar/execute":{"post":{"operationId":"itau_empresas__conexion__sincronizar","summary":"Sincronizar conexión Banco Itaú","description":"Sincroniza los alcances solicitados (saldos, movimientos) de Banco Itaú Empresas en una sola sesión de portal. 'saldos' es una foto del momento, no del período: sólo se sincroniza cuando se pide el período corriente. Los movimientos salen de la pantalla de saldos y últimos movimientos, cuya ventana es de unas seis semanas: el período pedido etiqueta la corrida, pero cada movimiento queda archivado bajo el mes de SU fecha.","tags":["itau_empresas"],"security":[{"apiKey":[]},{"oauth2":["itau_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/itau_empresas__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/itau_empresas__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/itau_empresas.conexion.verificar/execute":{"post":{"operationId":"itau_empresas__conexion__verificar","summary":"Verificar conexión Banco Itaú","description":"Prueba las credenciales de la conexión contra Banco Itaú haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["itau_empresas"],"security":[{"apiKey":[]},{"oauth2":["itau_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/itau_empresas__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/itau_empresas__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/itau_empresas.movimientos.consultar/execute":{"post":{"operationId":"itau_empresas__movimientos__consultar","summary":"Consultar movimientos de Banco Itaú","description":"Lee los movimientos de Banco Itaú Empresas YA sincronizados de esta conexión, del más reciente al más antiguo. Lectura pura: NO contacta al banco ni dispara una sincronización, así que si falta un período usa 'itau_empresas.conexion.sincronizar' primero. Los montos vienen como NÚMERO: 'monto' es la magnitud SIN signo, 'type' dice si sale ('credit') o entra ('debit') plata según el libro del banco (al revés de como se lee una cartola), y 'display' es ese monto ya formateado a la chilena con su signo. 'saldo' es el saldo arrastrado: es un balance, no lleva 'type' y conserva su propio signo. La ventana que publica el portal es de unas seis semanas, así que el período más antiguo guardado depende de hace cuánto se conectó la empresa. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas, reenvía ese valor tal cual.","tags":["itau_empresas"],"security":[{"apiKey":[]},{"oauth2":["itau_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/itau_empresas__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/itau_empresas__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/itau_empresas.saldos.consultar/execute":{"post":{"operationId":"itau_empresas__saldos__consultar","summary":"Consultar saldos de Banco Itaú","description":"Lee los saldos de Banco Itaú Empresas YA sincronizados de esta conexión, del más reciente al más antiguo. Lectura pura: NO contacta al banco ni dispara una sincronización, así que si nunca se sincronizó devuelve una lista vacía. Para traer datos nuevos usa 'itau_empresas.conexion.sincronizar' primero. Los saldos son una foto POR DÍA y vienen como NÚMERO conservando su signo: un sobregiro es negativo, y un saldo no lleva 'type' porque no es una operación. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas, reenvía ese valor tal cual y nunca lo construyas a mano.","tags":["itau_empresas"],"security":[{"apiKey":[]},{"oauth2":["itau_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/itau_empresas__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/itau_empresas__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/itau_empresas.transferencias.consultar/execute":{"post":{"operationId":"itau_empresas__transferencias__consultar","summary":"Consultar transferencias de Banco Itaú","description":"Lee las transferencias electrónicas (TEF) de Banco Itaú YA sincronizadas de esta conexión, enviadas y recibidas, de la más reciente a la más antigua. Es la ÚNICA fuente de contraparte del conector: trae RUT, nombre y banco de quien está al otro lado, que la cartola no publica. Cubre más que la cartola, cuyo portal sólo muestra unas seis semanas: aquí hay un mes por cada período sincronizado, e incluye las transferencias que fallaron y por eso nunca produjeron un movimiento. Lectura pura: NO contacta al banco. Para traer un mes nuevo usa 'itau_empresas.conexion.sincronizar' con ese período.","tags":["itau_empresas"],"security":[{"apiKey":[]},{"oauth2":["itau_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/itau_empresas__transferencias__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/itau_empresas__transferencias__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/mercadopublico.adjuntos.consultar/execute":{"post":{"operationId":"mercadopublico__adjuntos__consultar","summary":"Consultar adjuntos PDF descargados de una licitación","description":"Consulta el estado y los adjuntos PDF ya conservados por Connect, con los metadatos originales del portal y sin clasificar el contenido. No abre el portal ni inicia una descarga. no_solicitada, pendiente y fallido no significan que una licitación carezca de adjuntos. Mientras una actualización está en curso, o si falla, entrega los documentos de la descarga anterior con resultadoAnterior en true; sólo una descarga exitosa los reemplaza.","tags":["mercadopublico"],"security":[{"apiKey":[]},{"oauth2":["mercadopublico:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/mercadopublico__adjuntos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/mercadopublico__adjuntos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/mercadopublico.adjuntos.solicitar/execute":{"post":{"operationId":"mercadopublico__adjuntos__solicitar","summary":"Solicitar descarga de adjuntos PDF de una licitación","description":"Encola la descarga de los adjuntos PDF desde el portal de Mercado Público, sin utilizar su API y sin seleccionar por nombre o descripción. Conserva los archivos originales y sus metadatos, sin clasificar su contenido. Devuelve el estado del trabajo; consulta luego mercadopublico.adjuntos.consultar. Reutiliza solicitudes en curso y resultados de las últimas 24 horas.","tags":["mercadopublico"],"security":[{"apiKey":[]},{"oauth2":["mercadopublico:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/mercadopublico__adjuntos__solicitar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/mercadopublico__adjuntos__solicitar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.conexion.verificar/execute":{"post":{"operationId":"notta__conexion__verificar","summary":"Verificar conexión Notta","description":"Prueba las credenciales de la conexión contra Notta haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.aprobacion/execute":{"post":{"operationId":"notta__dte__aprobacion","summary":"Estado de una aprobación pendiente","description":"Devuelve en qué quedó una aprobación pendiente. El id NO es el del documento: lo devuelve la emisión cuando el documento queda esperando que una persona lo apruebe en Notta. Dice si sigue pendiente, si se aprobó, se rechazó o venció, el documento que salió de ella cuando lo hay, y qué le toca hacer a quien llama.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__aprobacion__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__aprobacion__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.emitir/execute":{"post":{"operationId":"notta__dte__emitir","summary":"Emitir DTE (factura o nota)","description":"Emite un DTE ante el SII vía Notta: factura afecta (33), exenta (34), nota de débito (56) o nota de crédito (61, que exige references[] al documento original, y este solo puede ser una factura 33 o 34; su folio_ref va en TEXTO, tal como lo devuelve sii.rcv.consultar). Cada item declara si es exento y su monto_item (cantidad × precio_unitario, ya con el descuento de la línea aplicado); los TOTALES del documento (neto, exento, IVA, total) los calcula Notta. Las NOTAS (56/61) exigen además rut_emisor (el RUT de la empresa de esta conexión, que Notta no deriva en esa ruta) y la nota de débito (56) exige nd_reason; a cambio, no llevan forma_pago ni descuento_global. La emisión es ASÍNCRONA: esta llamada devuelve el documento con folio asignado y estado 'queued'; haz el seguimiento con notta.dte.obtener hasta EPR (aceptado) o un rechazo. Si un intento anterior falló por transporte o timeout, revisa los documentos RECIENTES con notta.dte.listar antes de reintentar, para no duplicar. Con correo_receptor, Notta envía el PDF+XML al receptor cuando el SII acepta. SEGUNDO DESENLACE: sobre el umbral de escritura de la empresa, Notta no emite y abre una aprobación humana que vive 24 horas. En ese caso la respuesta NO es un documento sino {status:'pending', pending_id, approve_url, expires_at, reason}: no trae folio ni id, y nada llegó al SII. Se reconoce SIEMPRE por ese cuerpo; por REST y por el SDK viaja además meta.idempotency='pending', que por MCP no llega. No reintentes para forzarla: con la misma Idempotency-Key te devuelve el mismo pendiente sin volver a emitir. Pasa approve_url a una persona de la empresa y sigue el desenlace con notta.dte.aprobacion, llamándola con id = ese pending_id: devuelve status (pending/approved/rejected/expired), result_ref con el documento que salió de la aprobación y next_action. NO uses notta.dte.listar para esto: lista documentos ya EMITIDOS, y mientras la aprobación viva no hay ninguno que listar; si la rechazan o vence, no lo habrá nunca.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":false,"description":"Clave de idempotencia para esta acción destructiva. Reenviar la MISMA clave con la misma entrada devuelve la respuesta ya emitida en vez de repetir el efecto; con una entrada distinta responde 'idempotency_conflict', y mientras el primer intento sigue en curso, 'idempotency_in_progress'. Un intento fallido nunca consume la clave. Sin cabecera, el pipeline genera una por ejecución, o sea que no hay deduplicación entre reintentos tuyos: mándala siempre que puedas reintentar.","schema":{"type":"string","maxLength":255},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__emitir__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__emitir__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.enlace_pdf/execute":{"post":{"operationId":"notta__dte__enlace_pdf","summary":"Enlace al PDF de un documento","description":"Devuelve un enlace temporal a la representación impresa (PDF) de un documento emitido. El enlace sirve el archivo sin sesión ni credencial y vence a los 15 minutos, así que se entrega apenas se recibe y no se guarda. Un documento recién emitido todavía no está firmado, y hasta entonces el PDF no existe.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__enlace_pdf__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__enlace_pdf__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.enlace_xml/execute":{"post":{"operationId":"notta__dte__enlace_xml","summary":"Enlace al XML firmado de un documento","description":"Devuelve un enlace temporal al XML firmado que se le envió al SII. El enlace sirve el archivo sin sesión ni credencial y vence a los 15 minutos, así que se entrega apenas se recibe y no se guarda. Un documento recién emitido todavía no está firmado, y hasta entonces el XML no existe.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__enlace_xml__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__enlace_xml__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.eventos/execute":{"post":{"operationId":"notta__dte__eventos","summary":"Historial de estados de un documento","description":"Devuelve la línea de tiempo de un documento emitido: cada transición de estado con su momento, si la reportó el SII o fue local, y la glosa cuando hubo rechazo o reparo. Sirve para explicar por qué un documento quedó donde quedó; para el estado actual basta notta.dte.obtener.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__eventos__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__eventos__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.listar/execute":{"post":{"operationId":"notta__dte__listar","summary":"Listar los documentos emitidos","description":"Lista los documentos que esta empresa emitió a través de Notta, con filtros por tipo de documento, folio, RUT del receptor, rango de fechas de emisión, estado en el SII y estado del receptor, y paginación por cursor. Cada fila trae folio, montos, el estado en el SII y los enlaces del documento. Para el detalle completo de uno, con sus items y su historial, usa notta.dte.obtener. También sirve como red antes de reintentar una emisión que falló por transporte o timeout: si el documento ya aparece, no lo vuelvas a emitir.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__listar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__listar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.obtener/execute":{"post":{"operationId":"notta__dte__obtener","summary":"Obtener un documento emitido","description":"Devuelve el detalle completo de un documento emitido, por su id en Notta: receptor, montos, items, referencias, correo de entrega, el estado en el SII con su glosa y el historial de transiciones. Es el seguimiento del flujo asíncrono que abre notta.dte.emitir. Para cortar una espera usa estado.terminal y nunca la igualdad con un estado concreto: un rechazo también es final.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__obtener__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__obtener__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.previsualizar/execute":{"post":{"operationId":"notta__dte__previsualizar","summary":"Previsualizar un documento antes de emitirlo","description":"Ensaya una emisión sin emitir: NO firma, NO pide folio, NO llega al SII, NO le manda correo a nadie y NO consume cuota. Toma EXACTAMENTE el mismo input que notta.dte.emitir y lo valida con el mismo esquema, así que un resultado OK significa que la emisión no va a fallar por el payload. Devuelve tres cosas que sólo se saben así: 'totales', calculados por el mismo código que firma el documento (cítalos, no los recalcules); 'aprobacion_humana.requerida', que dice si emitir AHORA dejaría el documento esperando a una persona por el umbral de la empresa en vez de emitirlo; y 'url', el borrador en Notta con el PDF como se va a imprimir, para que la persona apruebe el documento y no tu resumen (pide sesión de Notta: NO se lo mandes al receptor). Úsala antes de emitir cuando el monto importe o cuando el usuario vaya a revisar. Lo que NO comprueba viene listado en 'no_verificado', y lo más caro de esa lista es si el SII le autorizó ese tipo de documento a esta empresa en producción: eso sólo se sabe intentando emitir. Cada llamada deja un borrador NUEVO en Notta y hay un tope por minuto, así que no la repitas sin cambiar nada.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__previsualizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__previsualizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.reenviar/execute":{"post":{"operationId":"notta__dte__reenviar","summary":"Reenviar un documento por correo","description":"Manda un correo REAL al receptor, con el PDF y el XML de un documento ya emitido, a la dirección que tiene registrada en Notta. No se puede des-enviar y no es gratis repetirla: cada llamada es otra copia en la casilla de un tercero, y Notta frena los reenvíos por minuto. No emite ni modifica el documento, y NO admite indicar otra dirección: si el receptor no tiene ninguna registrada, la llamada falla y hay que registrarla en app.notta.cl. Si sólo necesitas el archivo, usa los enlaces de notta.dte.enlace_pdf y notta.dte.enlace_xml, que no le escriben a nadie.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__reenviar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__reenviar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.dte.totales/execute":{"post":{"operationId":"notta__dte__totales","summary":"Totales facturados de un período","description":"Devuelve los totales de un mes, agregados por tipo de documento Y estado en el SII: cantidad, neto, exento, IVA y total. Un mismo tipo aparece en VARIAS filas cuando sus documentos están en estados distintos, así que el total de un tipo es la suma de sus filas y jamás una sola de ellas. Sin período usa el mes en curso del calendario chileno.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__dte__totales__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__dte__totales__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/notta.folios.listar/execute":{"post":{"operationId":"notta__folios__listar","summary":"Listar los rangos de folios autorizados (CAF)","description":"Lista los rangos de folios que el SII autorizó (los CAF) y que esta empresa tiene cargados en Notta, por tipo de documento y ambiente: desde qué folio hasta cuál, cuál es el próximo por usar, cuántos quedan, si están por agotarse y hasta cuándo son válidos. Un mismo tipo de documento aparece en VARIAS filas cuando tiene varios rangos cargados, así que cuántos folios le quedan a un tipo es la suma del remaining de sus filas y jamás una sola de ellas. Es la respuesta a por qué una emisión falla por falta de folios.","tags":["notta"],"security":[{"apiKey":[]},{"oauth2":["notta:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/notta__folios__listar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/notta__folios__listar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.actuaciones.consultar/execute":{"post":{"operationId":"pjud__actuaciones__consultar","summary":"Consultar actuaciones judiciales","description":"Reconstruye la cronología observada: por cuadernos en Civil o directamente en la causa laboral. Las fechas de trámite, fuente y observación mantienen su significado; no calcula plazos legales. Lee exclusivamente datos ya sincronizados de la conexión. Para actualizarlos usa pjud.conexion.sincronizar. Revisa estadoDatos, observadoHasta y cobertura antes de interpretar una lista vacía.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__actuaciones__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__actuaciones__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.causas.consultar/execute":{"post":{"operationId":"pjud__causas__consultar","summary":"Consultar cartera judicial","description":"Busca en la cartera elegida por identificador o carátula. El nombre no identifica inequívocamente a una persona. La inactividad observada no implica abandono ni incumplimiento. Lee exclusivamente datos ya sincronizados de la conexión. Para actualizarlos usa pjud.conexion.sincronizar. Revisa estadoDatos, observadoHasta y cobertura antes de interpretar una lista vacía.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__causas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__causas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.causas.detallar/execute":{"post":{"operationId":"pjud__causas__detallar","summary":"Ver el expediente de una causa","description":"Entrega cabecera, partes accesibles y tablas de la competencia. Civil organiza la historia por cuaderno; Laboral la presenta en la causa. Conserva estados y cobertura por sección. No presume que una parte sea cliente del estudio. Lee exclusivamente datos ya sincronizados de la conexión. Para actualizarlos usa pjud.conexion.sincronizar. Revisa estadoDatos, observadoHasta y cobertura antes de interpretar una lista vacía.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__causas__detallar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__causas__detallar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.conexion.sincronizar/execute":{"post":{"operationId":"pjud__conexion__sincronizar","summary":"Sincronizar cartera de Poder Judicial","description":"Lee la cartera elegida con ClaveÚnica y guarda causas, actuaciones y documentos disponibles. El piloto incorpora causas civiles y laborales accesibles al titular; conserva el ámbito de historia y declara anexos y secciones pendientes. No presenta escritos ni calcula plazos legales. El período organiza la ejecución de Connect: no filtra la historia judicial.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.conexion.verificar/execute":{"post":{"operationId":"pjud__conexion__verificar","summary":"Verificar acceso a Poder Judicial","description":"Comprueba la identidad del titular en una sesión OJV vigente. No lee causas ni documentos. Si falta sesión, la sincronización prepara el acceso con ClaveÚnica.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.documentos.consultar/execute":{"post":{"operationId":"pjud__documentos__consultar","summary":"Buscar documentos del expediente","description":"Distingue documento principal, certificado, anexo y ebook. Referenciado significa que existe una referencia en el portal; solo descargado acredita que Connect recuperó el archivo. Para leer páginas usa documentos.detallar. Lee exclusivamente datos ya sincronizados de la conexión. Para actualizarlos usa pjud.conexion.sincronizar. Revisa estadoDatos, observadoHasta y cobertura antes de interpretar una lista vacía.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__documentos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__documentos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.documentos.detallar/execute":{"post":{"operationId":"pjud__documentos__detallar","summary":"Leer un documento por páginas","description":"Lee la versión sincronizada y permite citar sus páginas. Si requiere OCR o la extracción falló, no inventa contenido. Indica truncación y páginas restantes. El enlace temporal al original solo se solicita explícitamente; una consulta nunca inicia una descarga desde OJV. Lee exclusivamente datos ya sincronizados de la conexión. Para actualizarlos usa pjud.conexion.sincronizar. Revisa estadoDatos, observadoHasta y cobertura antes de interpretar una lista vacía.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__documentos__detallar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__documentos__detallar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/pjud.novedades.consultar/execute":{"post":{"operationId":"pjud__novedades__consultar","summary":"Consultar cambios de la cartera","description":"Entrega diferencias observadas por Connect, con fecha de fuente y detección separadas. Sin causaIds revisa la cartera vigente; con IDs explícitos permite recuperar el historial de causas retiradas. La carga inicial está excluida por defecto y nunca representa hechos nuevos del día. Consultar no marca novedades como leídas ni envía informes. Sin cambios y revisión incompleta son resultados distintos. Lee exclusivamente datos ya sincronizados de la conexión. Para actualizarlos usa pjud.conexion.sincronizar. Revisa estadoDatos, observadoHasta y cobertura antes de interpretar una lista vacía.","tags":["pjud"],"security":[{"apiKey":[]},{"oauth2":["pjud:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/pjud__novedades__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/pjud__novedades__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.certificados.consultar/execute":{"post":{"operationId":"previred__certificados__consultar","summary":"Consultar certificados de cotizaciones de Previred","description":"Lee los certificados oficiales de cotizaciones ya emitidos para esta conexión, uno por trabajador. Es el documento que Previred firma y que una persona pide para probar lo que se le cotizó: 'certificadoUrl' es un enlace firmado para descargarlo. Hay un certificado VIGENTE por trabajador, que cada sincronización reemplaza, y cubre la ventana máxima que Previred admite terminando en el período sincronizado; 'periodoDesde' y 'periodoHasta' dicen cuál es. Si lo que buscas son los montos y no el documento, 'previred.cotizaciones.consultar' los tiene sin descargar nada. 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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__certificados__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__certificados__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.conexion.sincronizar/execute":{"post":{"operationId":"previred__conexion__sincronizar","summary":"Sincronizar conexión Previred","description":"Sincroniza en una sola sesión los módulos habilitados de Previred: planillas, cotizaciones, deuda, archivo F30-1, certificados, empresas y nóminas actuales. Los módulos históricos usan el período pedido; 'nominas' consulta una pantalla de estado actual que no acepta historia y conserva el período que declaró el propio portal. Es el ÚNICO camino que trae datos de Previred: las tools '.consultar' leen lo que esto haya guardado. 'deuda' es el estado del momento y no del período, así que solo se sincroniza cuando se pide el período corriente. 'f301' trae el archivo de 106 campos con que la Dirección del Trabajo emite el Certificado F30-1 de ese período. 'certificados' emite el certificado oficial de cotizaciones de CADA trabajador y por eso es el alcance más caro: cuesta una petición al portal por persona. 'empresas' lista las empresas que la credencial administra y no cuesta ninguna petición: ese listado ya llega al iniciar sesión. Del 10 al 13 de cada mes no se pueden cargar meses fuera del alta (Previred está en su cierre de pago): solo se aceptan el mes actual y los dos anteriores; los meses más antiguos se pueden cargar desde el 14.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.conexion.verificar/execute":{"post":{"operationId":"previred__conexion__verificar","summary":"Verificar conexión Previred","description":"Prueba las credenciales de la conexión contra Previred haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.cotizaciones.consultar/execute":{"post":{"operationId":"previred__cotizaciones__consultar","summary":"Consultar cotizaciones por trabajador de Previred","description":"Lee las cotizaciones ya sincronizadas de esta conexión, por trabajador, período e institución. Es la materia prima del «certificado de cotizaciones» que emite Previred: el certificado en sí es un PDF que se genera para el rango que se pida, así que aquí viven los HECHOS (quién cotizó cuánto, a qué institución, en qué mes) y no el documento. Un mismo trabajador y mes trae varias filas, una por institución. 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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__cotizaciones__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__cotizaciones__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.deuda.consultar/execute":{"post":{"operationId":"previred__deuda__consultar","summary":"Consultar deuda previsional en Previred","description":"Lee la deuda previsional ya sincronizada de esta conexión, y responde la pregunta del mes: ¿está al día? Trae las dos mitades. '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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__deuda__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__deuda__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.empresas.consultar/execute":{"post":{"operationId":"previred__empresas__consultar","summary":"Consultar empresas de la credencial de Previred","description":"Lista las empresas que la credencial de esta conexión administra en Previred. Sirve para saber qué OTRAS empresas se podrían conectar con la misma clave, que es la pregunta típica de un contador con varias empresas a cargo. Ojo: cada conexión de Connect es UNA empresa, así que ver una empresa aquí no significa poder leer sus datos; para eso hay que crear su propia conexión. 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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__empresas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__empresas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.f301.consultar/execute":{"post":{"operationId":"previred__f301__consultar","summary":"Consultar archivos para el F30-1 de Previred","description":"Lee los archivos ya sincronizados con que la Dirección del Trabajo emite el Certificado F30-1 de Cumplimiento de Obligaciones Laborales y Previsionales, el que una empresa contratista tiene que entregarle a su mandante para que le paguen. Cada fila es el archivo de 106 campos de un período y una nómina, y 'archivoUrl' es un enlace firmado para descargarlo y subirlo al sitio de la Dirección del Trabajo. Connect NO emite el certificado: entrega el archivo con que se pide. 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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__f301__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__f301__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.nominas.consultar/execute":{"post":{"operationId":"previred__nominas__consultar","summary":"Consultar nóminas actuales de Previred","description":"Lee desde la caché el snapshot más reciente del maletín de nóminas de esta empresa: nombre, período observado, códigos crudos de estado y forma de carga, total, cuadratura y las señales operativas que dicen si una nómina requiere actualización o cálculo, está bloqueada o puede seleccionarse. Esta pantalla de Previred NO ofrece selector histórico: 'periodo' es lo que el portal declaró al observar el snapshot, no un mes solicitado, y la tool no promete historia. Lectura pura: NO contacta a Previred ni dispara una sincronización. Una lista vacía sin un sync exitoso reciente no demuestra que el portal esté vacío; para refrescarla usa 'previred.conexion.sincronizar'. 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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__nominas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__nominas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/previred.planillas.consultar/execute":{"post":{"operationId":"previred__planillas__consultar","summary":"Consultar planillas pagadas de Previred","description":"Lee las planillas de cotizaciones ya sincronizadas de esta conexión, de la más reciente a la más antigua, filtrables por período (AAAA-MM) y por institución. Un pago de un período se abre en VARIAS planillas, una por cada institución previsional (AFP, Fonasa o Isapre, AFC, mutual, CCAF): por eso un mismo período trae varias filas y eso es lo normal, no una duplicación. Cada fila trae su 'folio', que es el identificador con que Previred la direcciona, y 'comprobanteUrl' cuando el PDF ya está descargado. 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.","tags":["previred"],"security":[{"apiKey":[]},{"oauth2":["previred:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/previred__planillas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/previred__planillas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/santander_empresas.conexion.sincronizar/execute":{"post":{"operationId":"santander_empresas__conexion__sincronizar","summary":"Sincronizar conexión Santander","description":"Sincroniza los alcances solicitados (saldos, movimientos) para un período en una sola sesión de portal. 'saldos' es una foto del momento, no del período: solo se sincroniza cuando se pide el período corriente.","tags":["santander_empresas"],"security":[{"apiKey":[]},{"oauth2":["santander_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/santander_empresas__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/santander_empresas__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/santander_empresas.conexion.verificar/execute":{"post":{"operationId":"santander_empresas__conexion__verificar","summary":"Verificar conexión Santander","description":"Prueba las credenciales de la conexión contra Santander haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["santander_empresas"],"security":[{"apiKey":[]},{"oauth2":["santander_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/santander_empresas__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/santander_empresas__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/santander_empresas.movimientos.consultar/execute":{"post":{"operationId":"santander_empresas__movimientos__consultar","summary":"Consultar movimientos Santander","description":"Lee los movimientos ya sincronizados de esta conexión, del más reciente al más antiguo, filtrables por período (AAAA-MM), por cuenta y por 'type' (el eje cargo/abono del libro del banco). Lectura pura: NO contacta al banco ni dispara una sincronización. Si el período nunca se sincronizó, devuelve una lista vacía, que NO significa que no haya movimientos. Para traer datos nuevos, usa 'santander_empresas.conexion.sincronizar' primero. 'counterparty' se deriva de los textos persistidos y 'counterpartySource' indica su procedencia. Los datos ambiguos o de formatos no soportados quedan en null; la cobertura depende de lo informado por el banco.","tags":["santander_empresas"],"security":[{"apiKey":[]},{"oauth2":["santander_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/santander_empresas__movimientos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/santander_empresas__movimientos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/santander_empresas.saldos.consultar/execute":{"post":{"operationId":"santander_empresas__saldos__consultar","summary":"Consultar saldos Santander","description":"Lee los saldos ya sincronizados de esta conexión, con el snapshot más reciente primero. Lectura pura: NO contacta al banco ni dispara una sincronización. Si nunca se sincronizó, devuelve una lista vacía. Para traer datos nuevos, usa 'santander_empresas.conexion.sincronizar' primero.","tags":["santander_empresas"],"security":[{"apiKey":[]},{"oauth2":["santander_empresas:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/santander_empresas__saldos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/santander_empresas__saldos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.anulacion.emitir/execute":{"post":{"operationId":"sii__anulacion__emitir","summary":"Emitir la anulación de una factura o boleta en el SII","description":"Firma y envía la nota de crédito de anulación preparada. EN EL SII FIRMAR ES EMITIR: el portal envía el documento en el mismo acto, así que no hay ensayo previo ni vuelta atrás, y el documento queda anulado. Exige previewRef vigente e Idempotency-Key explícita. La confirmación de la preparación ocurre dentro de esta llamada cuando la hace el mismo actor que la creó, sea una clave de API o una persona. La clave del certificado se resuelve en el servidor desde la conexión y nunca viaja en la llamada ni en el resultado. Un resultado desconocido se reconcilia contra la lista de documentos del portal; nunca autoriza reenviar. Un segundo emitir sobre el mismo previewRef NO duplica: la preparación va de pendiente a confirmada a consumida, así que el reintento falla en vez de emitir otra nota. Lo que decide la Idempotency-Key es si ese reintento recibe la respuesta guardada o un error sobre el mismo desenlace real.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":true,"description":"UUID v4 canónica generada por el caller para esta acción destructiva. Es obligatoria: el SDK y el gateway no la autogeneran. Reenvía exactamente la misma UUID para consultar o reconciliar el mismo intento; una UUID distinta identifica otra operación.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__anulacion__emitir__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__anulacion__emitir__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.anulacion.previsualizar/execute":{"post":{"operationId":"sii__anulacion__previsualizar","summary":"Preparar la anulación de una factura o boleta en el SII","description":"Prepara en el Facturador Gratuito del SII la nota de crédito que anula un documento, sin firmarla ni emitirla. Identifica el documento por tipo, folio y fecha de emisión. Una factura afecta (33) tiene que estar en la lista de emitidos de ese portal: el SII construye la nota a partir de ella. Una boleta afecta (39) o exenta (41) tiene que haberla emitido Connect en esta conexión: la nota va por su total, con referencia a la boleta y al receptor de la boleta, o a la propia empresa si la boleta no tenía receptor. La de una boleta exenta no lleva IVA. Un documento emitido con otro proveedor se rechaza diciéndolo. Requiere habilitación de la organización, permiso de la conexión y credencial de representante, y que la conexión tenga guardada la clave del certificado: se resuelve en el servidor y nunca viaja en la llamada ni en el resultado.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__anulacion__previsualizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__anulacion__previsualizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.boleta_sucursales.listar/execute":{"post":{"operationId":"sii__boleta_sucursales__listar","summary":"Listar sucursales de E-Boleta (beta)","description":"Lista las sucursales de la empresa de la conexión tal como las muestra hoy E-Boleta del SII: código, dirección y comuna. El código va en `sucursal` de sii.boleta.previsualizar cuando la empresa tiene más de una. No emite ni guarda nada. Requiere las boletas encendidas en la conexión (acceso de representante) y el permiso sii:boletas:write.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:boletas:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__boleta_sucursales__listar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__boleta_sucursales__listar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.boleta.descargar/execute":{"post":{"operationId":"sii__boleta__descargar","summary":"Descargar el PDF de una boleta (beta)","description":"Descarga desde E-Boleta del SII el PDF oficial de una boleta 39 o 41 de la empresa de la conexión, por tipo, folio y fecha de emisión, y lo devuelve en base64 con su SHA-256 y con su enlace oficial de E-Boleta (pdfUrl). No emite ni guarda nada. Requiere las boletas encendidas en la conexión (acceso de representante) y el permiso sii:boletas:write.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:boletas:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__boleta__descargar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__boleta__descargar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.boleta.emitir/execute":{"post":{"operationId":"sii__boleta__emitir","summary":"Emitir boleta en e-Boleta (beta)","description":"Emite en E-Boleta del SII la boleta de un previewRef vigente. Quien la preparó la confirma al emitir; exige Idempotency-Key UUID v4 explícita. Si E-Boleta devuelve el folio, responde emitida en la misma llamada. Si la respuesta se pierde, responde resultado_desconocido y la reconciliación lo resuelve: repite la MISMA clave para consultarlo; una clave nueva emitiría otra boleta.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:boletas:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":true,"description":"UUID v4 canónica generada por el caller para esta acción destructiva. Es obligatoria: el SDK y el gateway no la autogeneran. Reenvía exactamente la misma UUID para consultar o reconciliar el mismo intento; una UUID distinta identifica otra operación.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__boleta__emitir__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__boleta__emitir__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.boleta.previsualizar/execute":{"post":{"operationId":"sii__boleta__previsualizar","summary":"Preparar boleta en e-Boleta (beta)","description":"Prepara una boleta 39 o 41 en E-Boleta del SII sin emitir y devuelve previewRef, vigente 15 minutos. Requiere la emisión de boletas habilitada para la organización y la conexión (acceso de representante y permiso sii:boletas:write). Si la empresa tiene varias sucursales en E-Boleta, indica en `sucursal` desde cuál se emite esta boleta (los códigos salen de sii.boleta_sucursales.listar); con una sola se usa esa. La respuesta dice qué sucursal se usó.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:boletas:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__boleta__previsualizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__boleta__previsualizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.boletas_honorarios.consultar/execute":{"post":{"operationId":"sii__boletas_honorarios__consultar","summary":"Consultar boletas de honorarios del SII","description":"Lee las boletas de honorarios electrónicas (BHE) ya sincronizadas para esta conexión, filtradas por período y/o perspectiva (emitidas = las que emitió esta empresa; recibidas = las que le emitieron, donde esta empresa es el agente retenedor). Lectura pura: NO dispara una sincronización nueva ni contacta al SII. Si el mes no está cargado, devuelve una lista vacía y 'sincronizacion: null': no es cero movimiento. Para traer datos nuevos, usa 'sii.conexion.sincronizar' primero. El filtro tributario canónico es 'estado' distinto de 'S' sobre el código crudo: 'V' (anulación pendiente), 'R' y 'U' (observadas) siguen VIGENTES; solo 'S' está anulada: nunca filtres por 'estadoNormalizado' igual a 'vigente'. El 'estado' es el observado en la última sincronización del período, no el estado final: una BHE puede anularse, o revertir de anulación pendiente a vigente, hasta el 1 de marzo del año siguiente, y por petición administrativa sin plazo después. Resincroniza el período para refrescarlo; 'ultimaLecturaEn' dice cuándo se observó cada fila. La suma de 'retencion_receptor' es el insumo para cuadrar el F29 código 151, no el código 151: ese además incluye las retenciones por BTE y se imputa al mes del pago. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null, hay más filas. reenvía ese valor tal cual en 'cursor' para pedir la página siguiente; nunca lo construyas a mano.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__boletas_honorarios__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__boletas_honorarios__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.boletas.consultar/execute":{"post":{"operationId":"sii__boletas__consultar","summary":"Consultar boletas electrónicas del SII","description":"Lee el resumen diario de boletas electrónicas ya sincronizado para esta conexión, filtrado por período. Lectura pura: NO dispara una sincronización nueva ni contacta al SII. Si el mes no está cargado, devuelve una lista vacía y 'sincronizacion: null': no es cero movimiento. Para traer datos nuevos, usa 'sii.conexion.sincronizar' primero. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null, hay más filas. reenvía ese valor tal cual en 'cursor' para pedir la página siguiente; nunca lo construyas a mano.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__boletas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__boletas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.carpeta_tributaria.consultar/execute":{"post":{"operationId":"sii__carpeta_tributaria__consultar","summary":"Consultar carpeta tributaria obtenida","description":"Consulta el resultado persistido de una solicitud puntual. No inicia sesión ni genera documentos en el SII. Descarga el original con collection_documents/:id/download.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:carpeta_tributaria:generar"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__carpeta_tributaria__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__carpeta_tributaria__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.carpeta_tributaria.generar/execute":{"post":{"operationId":"sii__carpeta_tributaria__generar","summary":"Generar carpeta tributaria autorizada","description":"Genera una carpeta regular para una solicitud puntual previamente consentida. Solo el worker interno puede ejecutarla; ante incertidumbre no repite la emisión.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:carpeta_tributaria:generar"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":true,"description":"UUID v4 canónica generada por el caller para esta acción destructiva. Es obligatoria: el SDK y el gateway no la autogeneran. Reenvía exactamente la misma UUID para consultar o reconciliar el mismo intento; una UUID distinta identifica otra operación.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__carpeta_tributaria__generar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__carpeta_tributaria__generar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.carpeta_tributaria.verificar/execute":{"post":{"operationId":"sii__carpeta_tributaria__verificar","summary":"Verificar acceso a carpeta tributaria","description":"Verifica el acceso al portal de carpeta tributaria y la identidad de una solicitud puntual autorizada.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:carpeta_tributaria:generar"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__carpeta_tributaria__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__carpeta_tributaria__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.conexion.sincronizar/execute":{"post":{"operationId":"sii__conexion__sincronizar","summary":"Sincronizar conexión SII","description":"Sincroniza los alcances solicitados (rcv, boletas, guias, boletas_honorarios, documentos, f29) para un período en una sola sesión. En la prueba solo se cargan los 3 meses más recientes; los anteriores requieren un plan activo. Guías: solo los últimos 6 meses.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.conexion.verificar/execute":{"post":{"operationId":"sii__conexion__verificar","summary":"Verificar conexión SII","description":"Prueba las credenciales de la conexión contra el SII haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.documentos.consultar/execute":{"post":{"operationId":"sii__documentos__consultar","summary":"Consultar documentos respaldados del SII","description":"Lista los documentos tributarios (DTE) cuyo XML firmado ya se respaldó para esta conexión, filtrables por período, perspectiva y tipo de documento. Devuelve SOLO las columnas de cabecera: ni el XML ni el detalle de ítems viaja aquí. Para el detalle de UN documento (sus ítems con cantidad, unidad y precio, los giros y direcciones de emisor y receptor, y la forma de pago) usa 'sii.documentos.detallar' con el 'tipoDte', el 'folio' y el 'rutEmisor' de la fila correspondiente. Lectura pura: NO dispara una sincronización nueva ni contacta al SII. Si el mes no está cargado, devuelve una lista vacía y 'sincronizacion: null': no es cero movimiento. Para traer datos nuevos usa 'sii.conexion.sincronizar' primero. Este respaldo es lo que el RCV no tiene y no puede tener: el RCV dice qué documentos EXISTEN, este respaldo trae el documento. Sólo lo sirven las conexiones cuya credencial es la clave tributaria de una persona que representa a la empresa. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null, hay más filas. Reenvía ese valor tal cual en 'cursor' para pedir la página siguiente; nunca lo construyas a mano.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__documentos__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__documentos__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.documentos.detallar/execute":{"post":{"operationId":"sii__documentos__detallar","summary":"Detallar un documento respaldado del SII","description":"Devuelve UN documento tributario respaldado, con su detalle completo: los ítems (nombre, cantidad, unidad, precio unitario y monto), los giros, direcciones y comunas de emisor y receptor, y la forma de pago. El documento se identifica con las tres partes que lo hacen único ('tipoDte', 'folio' y 'rutEmisor'), y las tres salen de una fila de 'sii.documentos.consultar'. Lectura pura: NO contacta al SII, lee el XML que ya se respaldó y lo parsea en el momento. Si ese documento no está sincronizado, devuelve 'documento: null'. No es un error: es que no lo tenemos, así que sincroniza su período con 'sii.conexion.sincronizar' y vuelve a preguntar. El XML firmado sólo viaja si se pide 'incluirXml: true'; sin eso la respuesta trae el detalle ya estructurado, que es lo que casi siempre se necesita. Un ítem con 'cantidad', 'unidad' o 'precioUnitario' en null es un ítem que no los declaró (un flete, un descuento): no debe leerse como cero.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__documentos__detallar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__documentos__detallar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.dte_xml.consultar/execute":{"post":{"operationId":"sii__dte_xml__consultar","summary":"Obtener el XML firmado de un documento emitido","description":"Entrega el XML firmado, con su timbre electrónico (TED), de una factura, nota o nota de crédito de anulación que Connect emitió en esta conexión, por el operacionId que devolvió la emisión. Lo lee de lo guardado al emitir: no contacta al SII y responde aunque el documento todavía no aparezca en sii.cl. Sólo para documentos emitidos.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__dte_xml__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__dte_xml__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.dte.emitir/execute":{"post":{"operationId":"sii__dte__emitir","summary":"Emitir DTE en el SII","description":"Inicia una emisión en la beta habilitada del Facturador Gratuito: requiere previewRef vigente, Idempotency-Key explícita y autorización de la variante en la conexión. La confirmación de la preparación ocurre dentro de esta llamada cuando la hace el mismo actor que creó esa previsualización, sea una clave de API o una persona. La conexión debe tener guardada la clave del certificado, que se resuelve en el servidor y nunca viaja en la llamada ni en el resultado. Un resultado desconocido se consulta automáticamente; nunca autoriza repetir firma o envío.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":true,"description":"UUID v4 canónica generada por el caller para esta acción destructiva. Es obligatoria: el SDK y el gateway no la autogeneran. Reenvía exactamente la misma UUID para consultar o reconciliar el mismo intento; una UUID distinta identifica otra operación.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__dte__emitir__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__dte__emitir__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.dte.previsualizar/execute":{"post":{"operationId":"sii__dte__previsualizar","summary":"Previsualizar DTE en el SII","description":"Valida y previsualiza un documento en el Facturador Gratuito del SII sin guardarlo ni emitirlo. El schema documenta factura afecta 33 y factura exenta 34 (de una a diez líneas y con hasta tres referencias opcionales, como orden de compra o HES), guía 52 que constituye venta y notas 56/61 de corrección de montos referidas a una factura 34 exenta. Cada variante requiere validación vigente del portal, habilitación para la organización, permiso de la conexión y perfil del emisor. Publicar su schema no habilita su ejecución. El 46 se rechaza antes de red.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__dte__previsualizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__dte__previsualizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.f29.consultar/execute":{"post":{"operationId":"sii__f29__consultar","summary":"Consultar declaraciones F29 del SII","description":"Lee las declaraciones mensuales (Formulario 29) ya sincronizadas para esta conexión, con sus códigos. Lectura pura: NO contacta al SII. Por defecto trae sólo las vigentes; con 'incluirNoVigentes' trae también las rectificadas y anuladas. Filtra por un 'periodo' o por un rango 'desde'/'hasta'. Los códigos vienen por número sin ceros a la izquierda y un código ausente venía en blanco en el formulario (vacío no es cero). El F29 se revisa solo después de cada vencimiento; para forzar una revisión usa 'sii.conexion.sincronizar' con alcances ['f29']. Pagina con 'cursor'.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__f29__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__f29__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.guias.consultar/execute":{"post":{"operationId":"sii__guias__consultar","summary":"Consultar guías de despacho del SII","description":"Lee las guías de despacho electrónicas (DTE 52) ya sincronizadas para esta conexión, filtradas por período y/o perspectiva (emitidas = las que emitió esta empresa; recibidas = las que le emitieron). Lectura pura: NO dispara una sincronización nueva ni contacta al SII. Si el mes no está cargado, devuelve una lista vacía y 'sincronizacion: null': no es cero movimiento. Para traer datos nuevos, usa 'sii.conexion.sincronizar' primero. Ojo: el SII solo conserva el detalle de guías de los últimos 6 meses, así que un período más viejo no se puede sincronizar aunque exista. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null, hay más filas. reenvía ese valor tal cual en 'cursor' para pedir la página siguiente; nunca lo construyas a mano.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__guias__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__guias__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.honorario.anular/execute":{"post":{"operationId":"sii__honorario__anular","summary":"Solicitar anulación de honorarios (beta)","description":"Solicita una única anulación del documento y motivo aprobados con referencia vigente y protocolo certificado. Exige Idempotency-Key UUID v4. Un resultado desconocido se consulta y concilia con la misma operación; ninguna clave nueva autoriza repetir el POST. El estado fiscal y la atribución del resultado se informan por separado.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:honorarios:annul"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":true,"description":"UUID v4 canónica generada por el caller para esta acción destructiva. Es obligatoria: el SDK y el gateway no la autogeneran. Reenvía exactamente la misma UUID para consultar o reconciliar el mismo intento; una UUID distinta identifica otra operación.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__honorario__anular__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__honorario__anular__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.honorario.emitir/execute":{"post":{"operationId":"sii__honorario__emitir","summary":"Emitir boleta de honorarios (beta)","description":"Emite exclusivamente el borrador vigente de una solicitud con consentimiento o permiso recurrente verificado. Exige Idempotency-Key UUID v4. Una solicitud sólo cruza una vez la barrera de envío. Ante resultado_desconocido se consulta el resultado persistido y se concilia; cambiar de clave no permite volver a emitir la misma solicitud.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:honorarios:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"},{"name":"Idempotency-Key","in":"header","required":true,"description":"UUID v4 canónica generada por el caller para esta acción destructiva. Es obligatoria: el SDK y el gateway no la autogeneran. Reenvía exactamente la misma UUID para consultar o reconciliar el mismo intento; una UUID distinta identifica otra operación.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"example":"9d1f4c2a-7b30-4e58-9c11-2f6a8de5b743"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__honorario__emitir__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__honorario__emitir__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.honorario.previsualizar/execute":{"post":{"operationId":"sii__honorario__previsualizar","summary":"Preparar boleta de honorarios (beta)","description":"Prepara en el SII el borrador de una solicitud autorizada de honorarios. Requiere acceso dedicado del titular y permiso sii:honorarios:write. Devuelve una referencia vinculada a la solicitud y al contenido verificado; no emite.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:honorarios:write"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__honorario__previsualizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__honorario__previsualizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.honorario.previsualizar_anulacion/execute":{"post":{"operationId":"sii__honorario__previsualizar_anulacion","summary":"Previsualizar anulación de honorarios (beta)","description":"Consulta la previsualización del SII para una solicitud de anulación persistida, documento y motivo exactos. Requiere acceso dedicado del titular y scope sii:honorarios:annul. No anula ni reutiliza el consentimiento de emisión.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:honorarios:annul"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__honorario__previsualizar_anulacion__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__honorario__previsualizar_anulacion__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.rcv_totales.consultar/execute":{"post":{"operationId":"sii__rcv_totales__consultar","summary":"Consultar totales del mes del RCV","description":"Lee los totales del mes que el SII informa en el Registro de Compra-Venta sin detalle por documento: las boletas electrónicas (39), los comprobantes de pago con tarjeta (48) y otros tipos que sólo llegan como total. Un registro por mes y tipo, con la cantidad de documentos y sus montos. Para las ventas del mes, suma los documentos de 'sii.rcv.consultar' más los totales con 'sumable: true'; los pagos con tarjeta (48) vienen con 'sumable: false' porque pueden repetir ventas que ya tienen boleta o factura. Ojo con las boletas: el alcance 'boletas' ('sii.boletas.consultar') trae las mismas boletas día por día; usa una de las dos fuentes, no ambas. Lectura pura: NO dispara una sincronización ni contacta al SII; para datos nuevos usa 'sii.conexion.sincronizar' primero. Pagina con 'cursor'.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__rcv_totales__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__rcv_totales__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/sii.rcv.consultar/execute":{"post":{"operationId":"sii__rcv__consultar","summary":"Consultar RCV del SII","description":"Lee el Registro de Compra-Venta ya sincronizado para esta conexión, documento por documento, filtrable por período, perspectiva, tipo de documento (tipoDte) y estado del registro. Las boletas (39), los comprobantes de pago con tarjeta (48) y otros tipos que el SII informa sólo como TOTAL del mes no vienen aquí: léelos con 'sii.rcv_totales.consultar'. Las ventas del mes son estos documentos (las notas de crédito restan) más los totales con 'sumable: true'; los pagos con tarjeta (48) se suman según el caso (ver 'sii.rcv_totales.consultar'). Lectura pura: NO dispara una sincronización nueva ni contacta al SII. Si el mes no está cargado, devuelve una lista vacía y 'sincronizacion: null': no es cero movimiento. Solo informes cero ventas si el mes está cargado completo y los totales del mes ('sii.rcv_totales.consultar') también son cero. Para traer datos nuevos, usa 'sii.conexion.sincronizar' primero. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null, hay más filas. reenvía ese valor tal cual en 'cursor' para pedir la página siguiente; nunca lo construyas a mano.","tags":["sii"],"security":[{"apiKey":[]},{"oauth2":["sii:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/sii__rcv__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/sii__rcv__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/tgr.conexion.sincronizar/execute":{"post":{"operationId":"tgr__conexion__sincronizar","summary":"Sincronizar conexión Tesorería","description":"Sincroniza en una sola sesión del portal de la Tesorería General de la República las tres pantallas de convenios: «Comprobante de resolución», «Estado de pago de convenio» y «Cuotas convenios vigentes», y el detalle de cada convenio (cuotas, pagos y deudas acogidas). Son el estado actual de la empresa, no un período: el período sólo organiza la ejecución, y uno que no es el corriente no vuelve a consultar el portal. Es el ÚNICO camino que trae datos de la Tesorería: las tools '.consultar' leen lo que esto haya guardado.","tags":["tgr"],"security":[{"apiKey":[]},{"oauth2":["tgr:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/tgr__conexion__sincronizar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/tgr__conexion__sincronizar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/tgr.conexion.verificar/execute":{"post":{"operationId":"tgr__conexion__verificar","summary":"Verificar conexión Tesorería","description":"Prueba las credenciales de la conexión contra la Tesorería haciendo un login real (y su logout, a cargo del pipeline). No sincroniza ni devuelve datos: solo confirma si las credenciales sirven.","tags":["tgr"],"security":[{"apiKey":[]},{"oauth2":["tgr:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/tgr__conexion__verificar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/tgr__conexion__verificar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/tgr.convenios_cuotas.consultar/execute":{"post":{"operationId":"tgr__convenios_cuotas__consultar","summary":"Consultar convenios con cuotas de la Tesorería","description":"Lee los convenios activos y las propuestas aceptadas con la Tesorería General de la República YA sincronizados de esta conexión: la pantalla «Cuotas convenios vigentes» del portal. Devuelve un convenio por fila, con su número de cuotas; cada cuota (vencimiento, monto y si está pagada) está en 'tgr.convenios_detalle.consultar'. Lectura pura: NO contacta a la Tesorería ni dispara una sincronización. Si la empresa no tiene convenios la lista viene vacía con 'pantallaLeidaEn' fechado; si nunca se sincronizó, viene vacía con 'pantallaLeidaEn' en null. Para traer datos nuevos usa 'tgr.conexion.sincronizar'. Pagina con 'cursor'.","tags":["tgr"],"security":[{"apiKey":[]},{"oauth2":["tgr:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/tgr__convenios_cuotas__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/tgr__convenios_cuotas__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/tgr.convenios_detalle.consultar/execute":{"post":{"operationId":"tgr__convenios_detalle__consultar","summary":"Consultar el detalle de los convenios de la Tesorería","description":"Lee el detalle YA sincronizado de cada convenio de pago con la Tesorería General de la República: las cuotas con su vencimiento, monto y si están pagadas, la próxima cuota por pagar, cuántas van pagadas, el total y las deudas acogidas con su condonación. Sirve para responder cuánto se debe y cuándo vence lo siguiente. Lectura pura: NO contacta a la Tesorería ni dispara una sincronización. Si la empresa no tiene convenios la lista viene vacía con 'pantallaLeidaEn' fechado; si nunca se sincronizó, viene vacía con 'pantallaLeidaEn' en null. Para traer datos nuevos usa 'tgr.conexion.sincronizar'. Pagina con 'cursor'.","tags":["tgr"],"security":[{"apiKey":[]},{"oauth2":["tgr:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/tgr__convenios_detalle__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/tgr__convenios_detalle__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/tgr.convenios.consultar/execute":{"post":{"operationId":"tgr__convenios__consultar","summary":"Consultar estado de pago de convenios de la Tesorería","description":"Lee los convenios activos con la Tesorería General de la República YA sincronizados de esta conexión: la pantalla «Estado de pago de convenio» del portal, con tipo, número de cuotas y fecha de término. Lectura pura: NO contacta a la Tesorería ni dispara una sincronización. Si la empresa no tiene convenios la lista viene vacía con 'pantallaLeidaEn' fechado; si nunca se sincronizó, viene vacía con 'pantallaLeidaEn' en null. Para traer datos nuevos usa 'tgr.conexion.sincronizar'. Pagina con 'cursor'.","tags":["tgr"],"security":[{"apiKey":[]},{"oauth2":["tgr:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/tgr__convenios__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/tgr__convenios__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/tools/tgr.resoluciones.consultar/execute":{"post":{"operationId":"tgr__resoluciones__consultar","summary":"Consultar resoluciones de convenio de la Tesorería","description":"Lee las resoluciones de convenio con la Tesorería General de la República YA sincronizadas de esta conexión: la pantalla «Comprobante de resolución» del portal, con número, fechas y tipo de beneficio. Lectura pura: NO contacta a la Tesorería ni dispara una sincronización. Si la empresa no tiene convenios la lista viene vacía con 'pantallaLeidaEn' fechado; si nunca se sincronizó, viene vacía con 'pantallaLeidaEn' en null. Para traer datos nuevos usa 'tgr.conexion.sincronizar'. Pagina con 'cursor'.","tags":["tgr"],"security":[{"apiKey":[]},{"oauth2":["tgr:read"]}],"parameters":[{"name":"X-Connect-Connection","in":"header","required":true,"description":"Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.","schema":{"type":"string","pattern":"^conn_"},"example":"conn_9tKfR2mQx4Vb"}],"requestBody":{"required":true,"description":"La entrada de la tool, envuelta en 'input'. Manda '{\"input\": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$ref":"#/components/schemas/tgr__resoluciones__consultar__Input"}},"required":["input"]}}}},"responses":{"200":{"description":"La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/tgr__resoluciones__consultar__Output"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["data"]}}}},"400":{"$ref":"#/components/responses/Error_validation_error"},"401":{"$ref":"#/components/responses/Error_unauthorized"},"403":{"description":"scope_not_granted | connection_scope_not_enabled | alcance_not_enabled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"$ref":"#/components/responses/Error_tool_not_found"},"409":{"description":"connection_ambiguous | connection_busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"428":{"$ref":"#/components/responses/Error_connection_credential_required"},"500":{"$ref":"#/components/responses/Error_internal_error"}}}},"/v1/connect_sessions":{"post":{"operationId":"createCollectionSession","summary":"Crear un enlace para carpeta tributaria puntual","description":"Requiere sii:carpeta_tributaria:generar y habilitación del piloto. Esta variante de connect_sessions es exclusiva de solicitudes puntuales.","security":[{"apiKey":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","minLength":1,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["mode","connector_code","collection"],"properties":{"mode":{"const":"create"},"connector_code":{"const":"sii"},"allowed_origins":{"type":"array","maxItems":5,"items":{"type":"string"}},"redirect_uri":{"type":"string"},"collection":{"type":"object","additionalProperties":false,"required":["kind","mode","expected_rut","folder_type","purpose"],"properties":{"kind":{"const":"sii_tax_folder"},"mode":{"const":"once"},"expected_rut":{"type":"string"},"folder_type":{"const":"credit"},"purpose":{"type":"string","minLength":1,"maxLength":200},"external_reference":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":128}}}}}}}},"responses":{"201":{"description":"Resultado de la solicitud","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["id","url","collection_request_id","expires_at"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"collection_request_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}}}}}},"400":{"description":"Solicitud inválida"},"401":{"description":"API key inválida"},"403":{"description":"Scope o piloto no habilitado"},"404":{"description":"Solicitud o documento no disponible"},"409":{"description":"Conflicto de idempotencia o solicitud en ejecución"}}}},"/v1/collection_requests/{id}":{"get":{"operationId":"getCollectionRequest","summary":"Consultar solicitud puntual","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado de la solicitud","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["id","status","session_id"],"properties":{"id":{"type":"string"},"status":{"enum":["awaiting_authorization","queued","processing","ready","failed","inconclusive","expired","canceled"]},"session_id":{"type":"string"},"connection_id":{"type":["string","null"]},"document_id":{"type":["string","null"]},"error_code":{"type":["string","null"]},"external_reference":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"},"document":{"type":["object","null"],"properties":{"id":{"type":"string"},"sha256":{"type":"string"},"byte_length":{"type":"integer"},"issued_at":{"type":"string"},"retained_until":{"type":"string"},"available":{"type":"boolean"}}}}}}}}}},"400":{"description":"Solicitud inválida"},"401":{"description":"API key inválida"},"403":{"description":"Scope o piloto no habilitado"},"404":{"description":"Solicitud o documento no disponible"},"409":{"description":"Conflicto de idempotencia o solicitud en ejecución"}}}},"/v1/collection_requests/{id}/cancel":{"post":{"operationId":"cancelCollectionRequest","summary":"Cancelar solicitud antes de ejecutarla","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado de la solicitud","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["id","status","session_id"],"properties":{"id":{"type":"string"},"status":{"enum":["awaiting_authorization","queued","processing","ready","failed","inconclusive","expired","canceled"]},"session_id":{"type":"string"},"connection_id":{"type":["string","null"]},"document_id":{"type":["string","null"]},"error_code":{"type":["string","null"]}}}}}}}},"400":{"description":"Solicitud inválida"},"401":{"description":"API key inválida"},"403":{"description":"Scope o piloto no habilitado"},"404":{"description":"Solicitud o documento no disponible"},"409":{"description":"Conflicto de idempotencia o solicitud en ejecución"}}}},"/v1/collection_documents/{id}/download":{"get":{"operationId":"downloadCollectionDocument","summary":"Obtener URL firmada del PDF original","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado de la solicitud","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["url","expires_in"],"properties":{"url":{"type":"string","format":"uri"},"expires_in":{"type":"integer","const":300}}}}}}}},"400":{"description":"Solicitud inválida"},"401":{"description":"API key inválida"},"403":{"description":"Scope o piloto no habilitado"},"404":{"description":"Solicitud o documento no disponible"},"409":{"description":"Conflicto de idempotencia o solicitud en ejecución"}}}},"/v1/honorarios_requests":{"post":{"operationId":"createHonorariosRequest","summary":"Crear una solicitud de honorarios","description":"Beta con sii:honorarios:write. Crea el flujo de consentimiento; no recibe claves ni aprobación del profesional. Guardada sin connection_id inicia el enrolamiento autenticado del acceso recurrente. El mismo actor y UUID recuperan la misma solicitud. La referencia del emisor no se recicla.","security":[{"apiKey":[]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["mode","payload"],"properties":{"mode":{"type":"string","enum":["puntual","guardada","autonoma"]},"payload":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rut_emisor":{"type":"string"},"rut_receptor":{"type":"string"},"nombre_receptor":{"type":"string","minLength":1,"maxLength":256},"domicilio_receptor":{"type":"string","minLength":1,"maxLength":512},"region_receptor":{"type":"string","minLength":1,"maxLength":128,"description":"Región explícita del receptor; se contrasta con las opciones vigentes del portal."},"comuna_receptor":{"type":"string","minLength":1,"maxLength":128,"description":"Comuna explícita del receptor; no se infiere del RUT ni de la región."},"fecha":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Día calendario tributario AAAA-MM-DD, sin zona."},"glosa":{"type":"string","minLength":1,"maxLength":4096},"monto_bruto_clp":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Bruto entero positivo en pesos chilenos; no acepta un monto líquido."},"retiene":{"type":"string","enum":["receptor","emisor"]},"referencia":{"type":"string","minLength":1,"maxLength":256,"description":"Referencia de negocio opaca, única por organización y emisor."}},"required":["rut_emisor","rut_receptor","nombre_receptor","domicilio_receptor","region_receptor","comuna_receptor","fecha","glosa","monto_bruto_clp","retiene","referencia"],"additionalProperties":false},"expires_in_seconds":{"type":"integer","minimum":60,"maximum":86400,"default":86400},"connection_id":{"type":"string","pattern":"^conn_[A-Za-z0-9_-]+$","maxLength":128},"authorization_id":{"type":"string","pattern":"^bha_[A-Za-z0-9_-]+$","maxLength":128},"allowed_origins":{"type":"array","maxItems":5,"items":{"type":"string","format":"uri"},"default":[]},"redirect_uri":{"type":["string","null"],"format":"uri"}},"allOf":[{"if":{"properties":{"mode":{"const":"puntual"}}},"then":{"not":{"anyOf":[{"required":["connection_id"]},{"required":["authorization_id"]}]}}},{"if":{"properties":{"mode":{"const":"guardada"}}},"then":{"not":{"required":["authorization_id"]}}},{"if":{"properties":{"mode":{"const":"autonoma"}}},"then":{"required":["connection_id","authorization_id"]}}]}}}},"responses":{"200":{"description":"Repetición idempotente de la solicitud existente","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["created","request","hosted_url"],"properties":{"created":{"type":"boolean"},"request":{"type":"object","additionalProperties":false,"required":["id","mode","status","phase","session_id","connection_id","authorization_id","document_version","emission_status","document_status","delivery_status","access_status","folio","document_id","error_code","expires_at","created_at","updated_at"],"properties":{"id":{"type":"string"},"mode":{"type":"string","enum":["puntual","guardada","autonoma"]},"status":{"type":"string","enum":["awaiting_authorization","authorized","queued","processing","issued","rejected","inconclusive","reconciling","manual_review","returned","expired","canceled"]},"phase":{"type":"string","enum":["prepared","reserved","external_started","provider_confirmed","reconciled","archived"]},"session_id":{"type":["string","null"]},"connection_id":{"type":["string","null"]},"authorization_id":{"type":["string","null"]},"document_version":{"type":"integer","minimum":1},"emission_status":{"type":"string","enum":["pending","issued","inconclusive","failed"]},"document_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"folio":{"type":["string","null"]},"document_id":{"type":["string","null"]},"error_code":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"hosted_url":{"type":["string","null"],"format":"uri","description":"Enlace privado del profesional; consérvalo fuera de logs y telemetría."}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"201":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["created","request","hosted_url"],"properties":{"created":{"type":"boolean"},"request":{"type":"object","additionalProperties":false,"required":["id","mode","status","phase","session_id","connection_id","authorization_id","document_version","emission_status","document_status","delivery_status","access_status","folio","document_id","error_code","expires_at","created_at","updated_at"],"properties":{"id":{"type":"string"},"mode":{"type":"string","enum":["puntual","guardada","autonoma"]},"status":{"type":"string","enum":["awaiting_authorization","authorized","queued","processing","issued","rejected","inconclusive","reconciling","manual_review","returned","expired","canceled"]},"phase":{"type":"string","enum":["prepared","reserved","external_started","provider_confirmed","reconciled","archived"]},"session_id":{"type":["string","null"]},"connection_id":{"type":["string","null"]},"authorization_id":{"type":["string","null"]},"document_version":{"type":"integer","minimum":1},"emission_status":{"type":"string","enum":["pending","issued","inconclusive","failed"]},"document_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"folio":{"type":["string","null"]},"document_id":{"type":["string","null"]},"error_code":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"hosted_url":{"type":["string","null"],"format":"uri","description":"Enlace privado del profesional; consérvalo fuera de logs y telemetría."}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"415":{"description":"Content-Type debe ser application/json"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_requests/{id}":{"get":{"operationId":"getHonorariosRequest","summary":"Consultar una solicitud de honorarios","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^bhr_[A-Za-z0-9_-]+$","maxLength":128}}],"description":"Requiere el mismo actor y organización. Consulta emisión, archivo, entrega y cierre de acceso por separado. Funciona tras el vencimiento de la credencial sin volver a abrir el SII.","responses":{"200":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","mode","status","phase","session_id","connection_id","authorization_id","document_version","emission_status","document_status","delivery_status","access_status","folio","document_id","error_code","expires_at","created_at","updated_at"],"properties":{"id":{"type":"string"},"mode":{"type":"string","enum":["puntual","guardada","autonoma"]},"status":{"type":"string","enum":["awaiting_authorization","authorized","queued","processing","issued","rejected","inconclusive","reconciling","manual_review","returned","expired","canceled"]},"phase":{"type":"string","enum":["prepared","reserved","external_started","provider_confirmed","reconciled","archived"]},"session_id":{"type":["string","null"]},"connection_id":{"type":["string","null"]},"authorization_id":{"type":["string","null"]},"document_version":{"type":"integer","minimum":1},"emission_status":{"type":"string","enum":["pending","issued","inconclusive","failed"]},"document_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"folio":{"type":["string","null"]},"document_id":{"type":["string","null"]},"error_code":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_requests/{id}/cancel":{"post":{"operationId":"cancelHonorariosRequest","summary":"Cancelar una solicitud antes del envío","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^bhr_[A-Za-z0-9_-]+$","maxLength":128}}],"description":"Después del inicio del envío devuelve el estado durable sin cancelar ni anular la boleta. No habilita otro envío.","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","mode","status","phase","session_id","connection_id","authorization_id","document_version","emission_status","document_status","delivery_status","access_status","folio","document_id","error_code","expires_at","created_at","updated_at"],"properties":{"id":{"type":"string"},"mode":{"type":"string","enum":["puntual","guardada","autonoma"]},"status":{"type":"string","enum":["awaiting_authorization","authorized","queued","processing","issued","rejected","inconclusive","reconciling","manual_review","returned","expired","canceled"]},"phase":{"type":"string","enum":["prepared","reserved","external_started","provider_confirmed","reconciled","archived"]},"session_id":{"type":["string","null"]},"connection_id":{"type":["string","null"]},"authorization_id":{"type":["string","null"]},"document_version":{"type":"integer","minimum":1},"emission_status":{"type":"string","enum":["pending","issued","inconclusive","failed"]},"document_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"folio":{"type":["string","null"]},"document_id":{"type":["string","null"]},"error_code":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_requests/{id}/document":{"get":{"operationId":"downloadHonorariosDocument","summary":"Obtener el PDF original de honorarios","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^bhr_[A-Za-z0-9_-]+$","maxLength":128}}],"description":"Devuelve una URL firmada por 300 segundos. Requiere el actor y organización que crearon la solicitud y un respaldo disponible; funciona después de cerrar el acceso al SII.","responses":{"200":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["document_id","url","expires_in","sha256","byte_length","mime_type"],"properties":{"document_id":{"type":"string"},"url":{"type":"string","format":"uri"},"expires_in":{"type":"integer","const":300},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"byte_length":{"type":"integer","minimum":5},"mime_type":{"const":"application/pdf"}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_mandate_proposals":{"post":{"operationId":"createHonorariosMandateProposal","summary":"Proponer un mandato de honorarios al profesional","security":[{"apiKey":[]}],"description":"Beta con sii:honorarios:write y conexión recurrente dedicada. Guarda límites exactos y un enlace privado para que el profesional autenticado los revise. Crear esta propuesta no concede una autorización ni permite emitir. El mismo actor y UUID recuperan la propuesta original.","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["connection_id","emitter_rut","limits","valid_from","valid_until"],"properties":{"connection_id":{"type":"string","pattern":"^conn_[A-Za-z0-9_-]+$","maxLength":128},"emitter_rut":{"type":"string","description":"RUT del emisor vinculado a la conexión recurrente."},"valid_from":{"type":"string","format":"date-time"},"valid_until":{"type":"string","format":"date-time"},"expires_in_seconds":{"type":"integer","minimum":60,"maximum":3600,"default":3600},"limits":{"type":"object","additionalProperties":false,"required":["format_version","allowed_recipients","allowed_glosas","allowed_retainers","date_from","date_to","max_per_document_clp","max_total_clp","max_documents"],"properties":{"format_version":{"type":"integer","const":1},"allowed_recipients":{"type":"array","items":{"type":"string"}},"allowed_glosas":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096},"description":"Glosas exactas aprobadas por el profesional."},"allowed_retainers":{"type":"array","items":{"type":"string","enum":["receptor","emisor"]}},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"max_per_document_clp":{"type":"integer","minimum":1,"maximum":9007199254740991},"max_total_clp":{"type":"integer","minimum":1,"maximum":9007199254740991},"max_documents":{"type":"integer","minimum":1,"maximum":9007199254740991}}}}}}}},"responses":{"200":{"description":"Repetición idempotente de la propuesta existente","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["created","proposal","hosted_url"],"properties":{"created":{"type":"boolean"},"proposal":{"type":"object","additionalProperties":false,"required":["id","status","authorization_id","expires_at"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","approved","revoked","canceled","expired"]},"authorization_id":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"}}},"hosted_url":{"type":["string","null"],"format":"uri","description":"Enlace privado para revisión del profesional; consérvalo fuera de logs y telemetría. Una repetición vencida no devuelve el enlace."}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"201":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["created","proposal","hosted_url"],"properties":{"created":{"type":"boolean"},"proposal":{"type":"object","additionalProperties":false,"required":["id","status","authorization_id","expires_at"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","approved","revoked","canceled","expired"]},"authorization_id":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"}}},"hosted_url":{"type":["string","null"],"format":"uri","description":"Enlace privado para revisión del profesional; consérvalo fuera de logs y telemetría. Una repetición vencida no devuelve el enlace."}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"415":{"description":"Content-Type debe ser application/json"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_mandate_proposals/{id}":{"get":{"operationId":"getHonorariosMandateProposal","summary":"Consultar una propuesta de mandato","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"description":"Requiere el actor y organización que crearon la propuesta. Devuelve authorization_id cuando el profesional aprobó el mandato; no devuelve el enlace privado ni las evidencias de identidad.","responses":{"200":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","status","authorization_id","expires_at"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","approved","revoked","canceled","expired"]},"authorization_id":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_mandate_proposals/{id}/cancel":{"post":{"operationId":"cancelHonorariosMandateProposal","summary":"Cancelar una propuesta de mandato pendiente","security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"description":"Impide aceptar una propuesta pendiente. La revocación de un mandato aprobado pertenece al flujo autenticado del profesional.","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Estado durable de la solicitud de honorarios","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","status","authorization_id","expires_at"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","approved","revoked","canceled","expired"]},"authorization_id":{"type":["string","null"]},"expires_at":{"type":"string","format":"date-time"}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID de idempotencia inválidos"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política de beta no habilitados"},"404":{"description":"Solicitud no disponible para esta organización y actor"},"409":{"description":"Conflicto de idempotencia o referencia del emisor ya utilizada"},"413":{"description":"Cuerpo superior a 256 KiB"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; conserva la identidad de la solicitud"}}}},"/v1/honorarios_annulment_requests":{"post":{"operationId":"createHonorariosAnnulmentRequest","summary":"Solicitar la anulación de una boleta de honorarios","description":"Beta con sii:honorarios:annul. Usa una emisión fuente verificada del mismo actor y organización y un motivo factual. Genera un enlace para autorización por documento. El acceso de emisión no autoriza anulación. El protocolo final permanece cerrado hasta su certificación.","security":[{"apiKey":[]},{"oauth2":["sii:honorarios:annul"]}],"parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source_request_id":{"type":"string","maxLength":128,"pattern":"^bhr_[A-Za-z0-9_-]+$"},"mode":{"type":"string","enum":["puntual","guardada"]},"reason":{"type":"string","enum":["1","2","3"]},"connection_id":{"type":"string","maxLength":128,"pattern":"^conn_[A-Za-z0-9_-]+$"},"expires_in_seconds":{"default":3600,"type":"integer","minimum":300,"maximum":86400},"allowed_origins":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":2048}},"redirect_uri":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]}},"required":["source_request_id","mode","reason"],"additionalProperties":false,"allOf":[{"if":{"properties":{"mode":{"const":"puntual"}},"required":["mode"]},"then":{"not":{"required":["connection_id"]}}}]}}}},"responses":{"200":{"description":"Estado durable de anulación; estado fiscal y atribución independientes.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["created","request","hosted_url"],"properties":{"created":{"type":"boolean"},"request":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$"},"source_request_id":{"type":"string","maxLength":128,"pattern":"^bhr_[A-Za-z0-9_-]+$"},"mode":{"type":"string","enum":["puntual","guardada"]},"status":{"type":"string","enum":["awaiting_authorization","queued","processing","pending_recipient","annulled","rejected","inconclusive","requires_administrative","canceled","expired"]},"submission_status":{"type":"string","enum":["not_started","external_started","accepted","rejected","unknown"]},"fiscal_state":{"type":"string","enum":["vigente","vigente_anulacion_pendiente","anulada","observada_receptor","observada_unidad","desconocido"]},"attribution":{"type":"string","enum":["own_response","observed_external","unknown"]},"reason":{"type":"string","enum":["1","2","3"]},"document_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"transition_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"connection_id":{"anyOf":[{"type":"string","maxLength":128,"pattern":"^conn_[A-Za-z0-9_-]+$"},{"type":"null"}]},"folio":{"type":"string","maxLength":64,"pattern":"^[1-9][0-9]*$"},"observed_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},{"type":"null"}]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"evidence_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"error_code":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"puede_reintentar":{"type":"boolean","const":false}},"required":["id","source_request_id","mode","status","submission_status","fiscal_state","attribution","reason","document_version","transition_version","connection_id","folio","observed_at","access_status","evidence_status","delivery_status","error_code","expires_at","created_at","updated_at","puede_reintentar"],"additionalProperties":false},"hosted_url":{"type":"string","format":"uri","description":"Enlace privado del profesional; exclúyelo de telemetría y logs."}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"201":{"description":"Estado durable de anulación; estado fiscal y atribución independientes.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["created","request","hosted_url"],"properties":{"created":{"type":"boolean"},"request":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$"},"source_request_id":{"type":"string","maxLength":128,"pattern":"^bhr_[A-Za-z0-9_-]+$"},"mode":{"type":"string","enum":["puntual","guardada"]},"status":{"type":"string","enum":["awaiting_authorization","queued","processing","pending_recipient","annulled","rejected","inconclusive","requires_administrative","canceled","expired"]},"submission_status":{"type":"string","enum":["not_started","external_started","accepted","rejected","unknown"]},"fiscal_state":{"type":"string","enum":["vigente","vigente_anulacion_pendiente","anulada","observada_receptor","observada_unidad","desconocido"]},"attribution":{"type":"string","enum":["own_response","observed_external","unknown"]},"reason":{"type":"string","enum":["1","2","3"]},"document_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"transition_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"connection_id":{"anyOf":[{"type":"string","maxLength":128,"pattern":"^conn_[A-Za-z0-9_-]+$"},{"type":"null"}]},"folio":{"type":"string","maxLength":64,"pattern":"^[1-9][0-9]*$"},"observed_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},{"type":"null"}]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"evidence_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"error_code":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"puede_reintentar":{"type":"boolean","const":false}},"required":["id","source_request_id","mode","status","submission_status","fiscal_state","attribution","reason","document_version","transition_version","connection_id","folio","observed_at","access_status","evidence_status","delivery_status","error_code","expires_at","created_at","updated_at","puede_reintentar"],"additionalProperties":false},"hosted_url":{"type":"string","format":"uri","description":"Enlace privado del profesional; exclúyelo de telemetría y logs."}}},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID inválido"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política no habilitados"},"404":{"description":"Solicitud o emisión fuente no disponible para este actor y organización"},"409":{"description":"Conflicto de idempotencia, fuente bloqueada o envío ya iniciado"},"413":{"description":"Cuerpo superior al límite"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; consulta la solicitud existente"}}}},"/v1/honorarios_annulment_requests/{id}":{"get":{"operationId":"getHonorariosAnnulmentRequest","summary":"Consultar el estado de anulación","description":"Consulta persistida después del cierre de acceso, sin login al SII. Pendiente de receptor conserva vigencia fiscal; una observación posterior no atribuye por sí sola el cambio a Connect.","security":[{"apiKey":[]},{"oauth2":["sii:honorarios:annul"]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^bhc_[A-Za-z0-9_-]+$","maxLength":128}}],"responses":{"200":{"description":"Estado durable de anulación; estado fiscal y atribución independientes.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$"},"source_request_id":{"type":"string","maxLength":128,"pattern":"^bhr_[A-Za-z0-9_-]+$"},"mode":{"type":"string","enum":["puntual","guardada"]},"status":{"type":"string","enum":["awaiting_authorization","queued","processing","pending_recipient","annulled","rejected","inconclusive","requires_administrative","canceled","expired"]},"submission_status":{"type":"string","enum":["not_started","external_started","accepted","rejected","unknown"]},"fiscal_state":{"type":"string","enum":["vigente","vigente_anulacion_pendiente","anulada","observada_receptor","observada_unidad","desconocido"]},"attribution":{"type":"string","enum":["own_response","observed_external","unknown"]},"reason":{"type":"string","enum":["1","2","3"]},"document_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"transition_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"connection_id":{"anyOf":[{"type":"string","maxLength":128,"pattern":"^conn_[A-Za-z0-9_-]+$"},{"type":"null"}]},"folio":{"type":"string","maxLength":64,"pattern":"^[1-9][0-9]*$"},"observed_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},{"type":"null"}]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"evidence_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"error_code":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"puede_reintentar":{"type":"boolean","const":false}},"required":["id","source_request_id","mode","status","submission_status","fiscal_state","attribution","reason","document_version","transition_version","connection_id","folio","observed_at","access_status","evidence_status","delivery_status","error_code","expires_at","created_at","updated_at","puede_reintentar"],"additionalProperties":false},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID inválido"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política no habilitados"},"404":{"description":"Solicitud o emisión fuente no disponible para este actor y organización"},"409":{"description":"Conflicto de idempotencia, fuente bloqueada o envío ya iniciado"},"413":{"description":"Cuerpo superior al límite"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; consulta la solicitud existente"}}}},"/v1/honorarios_annulment_requests/{id}/cancel":{"post":{"operationId":"cancelHonorariosAnnulmentRequest","summary":"Cancelar una solicitud antes de su envío","description":"Cancela sólo la solicitud local antes de la barrera. Después del inicio externo responde 409; no libera otra anulación ni altera la boleta original.","security":[{"apiKey":[]},{"oauth2":["sii:honorarios:annul"]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","pattern":"^bhc_[A-Za-z0-9_-]+$","maxLength":128}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false}}}},"responses":{"200":{"description":"Estado durable de anulación; estado fiscal y atribución independientes.","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$"},"source_request_id":{"type":"string","maxLength":128,"pattern":"^bhr_[A-Za-z0-9_-]+$"},"mode":{"type":"string","enum":["puntual","guardada"]},"status":{"type":"string","enum":["awaiting_authorization","queued","processing","pending_recipient","annulled","rejected","inconclusive","requires_administrative","canceled","expired"]},"submission_status":{"type":"string","enum":["not_started","external_started","accepted","rejected","unknown"]},"fiscal_state":{"type":"string","enum":["vigente","vigente_anulacion_pendiente","anulada","observada_receptor","observada_unidad","desconocido"]},"attribution":{"type":"string","enum":["own_response","observed_external","unknown"]},"reason":{"type":"string","enum":["1","2","3"]},"document_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"transition_version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"connection_id":{"anyOf":[{"type":"string","maxLength":128,"pattern":"^conn_[A-Za-z0-9_-]+$"},{"type":"null"}]},"folio":{"type":"string","maxLength":64,"pattern":"^[1-9][0-9]*$"},"observed_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},{"type":"null"}]},"access_status":{"type":"string","enum":["pending","open","closed","failed"]},"evidence_status":{"type":"string","enum":["pending","available","failed"]},"delivery_status":{"type":"string","enum":["pending","delivered","failed"]},"error_code":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona explícita."},"puede_reintentar":{"type":"boolean","const":false}},"required":["id","source_request_id","mode","status","submission_status","fiscal_state","attribution","reason","document_version","transition_version","connection_id","folio","observed_at","access_status","evidence_status","delivery_status","error_code","expires_at","created_at","updated_at","puede_reintentar"],"additionalProperties":false},"meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}},"400":{"description":"Entrada o UUID inválido"},"401":{"description":"Autenticación requerida"},"403":{"description":"Scope o política no habilitados"},"404":{"description":"Solicitud o emisión fuente no disponible para este actor y organización"},"409":{"description":"Conflicto de idempotencia, fuente bloqueada o envío ya iniciado"},"413":{"description":"Cuerpo superior al límite"},"429":{"description":"Límite de creación de enlaces; respeta Retry-After"},"500":{"description":"Error interno; consulta la solicitud existente"}}}}},"components":{"schemas":{"banco_estado__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"banco_estado__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","partial","failed"],"description":"'ok' = se cubrió el alcance completo; 'partial' = se guardaron las filas legibles, pero una pata o parte de la cartola quedó sin cubrir (puede haber 0 filas). La causa va en 'marcador' y la advertencia en 'detalle'. 'failed' = no se pudo completar el alcance; revisa 'error' y 'recordsSynced'."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Código de error del alcance cuando 'status' es 'failed'. Un 'partial' conserva los datos legibles y explica la cobertura incompleta mediante 'detalle' y 'marcador'.","type":"string"},"detalle":{"description":"Explicación en lenguaje llano cuando el alcance quedó parcial o un cero necesita contexto; transmítela junto con 'recordsSynced'.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"banco_estado__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"banco_estado__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"banco_estado__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"numeroCuenta":{"description":"Filtra por un número de cuenta. Omítelo para ver los movimientos de todas las cuentas de la conexión.","type":"string"},"periodo":{"description":"Filtra por el mes de la fecha del movimiento, en formato AAAA-MM (por ejemplo '2026-08'). Omítelo para traer todos los meses guardados.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"estado":{"description":"Filtra por estado: 'definitivo' trae solo los movimientos que el banco ya contabilizó y 'provisorio' solo los del día que todavía puede reemplazar. Omítelo para traer los dos.","type":"string","enum":["provisorio","definitivo"]},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"banco_estado__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece el movimiento."},"periodo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El mes (AAAA-MM) de la fecha del movimiento, no el período con que se pidió la sincronización: el banco no se limita al mes pedido. Es el campo por el que filtra 'periodo' en la entrada. No entra en la identidad del movimiento, así que sincronizar pidiendo otro período no lo duplica."},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha del movimiento, en formato AAAA-MM-DD, sin hora. null si el banco no trajo la celda."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa del movimiento tal como aparece en la cartola (por ejemplo 'PAGO PROVEEDOR')."},"documento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de documento asociado al movimiento, cuando el banco lo trae."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible lo trae 'display'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldo":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo que queda en la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo."},"oficina":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La oficina que el banco asocia al movimiento, en su propio texto (por ejemplo 'STGO.PRINCIPAL')."},"origen":{"type":"string","enum":["linea","historica"],"description":"Por cuál de las dos cartolas del banco se trajo la fila: 'linea' es la cartola abierta, que el banco todavía no cierra, e 'historica' una cartola que el banco ya cerró. Las cartolas no van por mes: el banco cierra una cuando junta cierta cantidad de movimientos. Es metadato de procedencia y no entra en la identidad del movimiento, así que el mismo movimiento traído por las dos no se duplica."},"estado":{"type":"string","enum":["provisorio","definitivo"],"description":"Qué versión del movimiento muestra el banco. 'provisorio' = la del día, que el banco todavía no contabiliza: en el cierre nocturno la reemplaza por la definitiva, a veces con otra glosa u otro documento, o la saca. 'definitivo' = la contabilizada. En los dos casos el movimiento ocurrió. En chequera lo marca el banco; en cuenta corriente, que no trae marca, un movimiento sigue 'provisorio' mientras su fecha sea hoy o posterior (hora de Chile). La cartola histórica siempre es 'definitivo'. Se actualiza en cada sincronización."},"syncedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas."}},"required":["numeroCuenta","periodo","fecha","descripcion","documento","monto","type","display","saldo","oficina","origen","estado","syncedAt"],"additionalProperties":false},"description":"Los movimientos guardados que calzan con los filtros, del más reciente al más antiguo. Una lista vacía significa que ese período no se ha sincronizado, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["movimientos","cursor"],"additionalProperties":false},"banco_estado__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"Filtra por el día de la foto de saldo, en formato AAAA-MM-DD. Si lo omites, la primera página ya trae las fotos más recientes que haya guardadas."},"numeroCuenta":{"description":"Filtra por un número de cuenta. Omítelo para ver todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"banco_estado__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que corresponde esta foto de saldo."},"moneda":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La moneda de la cuenta, en el texto del propio banco (por ejemplo 'PESOS'). null cuando el listado de cuentas no la trae."},"observedDay":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El día de esta foto de saldo, en formato AAAA-MM-DD. Hay una foto por cuenta y por día: volver a sincronizar el mismo día actualiza esta fila en vez de agregar otra. Se llama 'observedDay' y no 'fecha' para que sea el mismo nombre que en los otros bancos de Connect."},"hora":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La hora en que el banco reportó esta foto, en su propio formato (por ejemplo '14:30'). BancoEstado la entrega y los otros bancos de Connect no, así que conserva el nombre del banco."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta. Es un balance, no una operación: conserva su propio signo (un sobregiro es negativo) y no lleva 'type'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta. Es un balance: conserva su propio signo y no lleva 'type'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"retencionUnDia":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo retenido a un día. Un 0 afirma que no hay retención; un null dice que el banco no informó la celda, que es un dato distinto."},"retencionDosDias":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo retenido a dos días. Un 0 afirma que no hay retención; un null dice que el banco no informó la celda."},"retencionOtras":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El resto de las retenciones, sumando las dos celdas que el banco publica por separado. null si no vino ninguna de las dos; un 0 sí afirma que no hay retención."},"retencionTotal":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El total de retenciones según el banco. null significa que no informó la celda."},"syncedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas."}},"required":["numeroCuenta","moneda","observedDay","hora","saldoContable","saldoDisponible","retencionUnDia","retencionDosDias","retencionOtras","retencionTotal","syncedAt"],"additionalProperties":false},"description":"Las fotos de saldo guardadas que calzan con los filtros, de la más reciente a la más antigua. Una lista vacía significa que la conexión nunca sincronizó saldos, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["saldos","cursor"],"additionalProperties":false},"banco_security__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["transferencias","nominas","saldos","movimientos"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"banco_security__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"banco_security__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"banco_security__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"banco_security__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"banco_security__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta corriente a la que pertenece el movimiento."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es cómo se pidió el dato, no una propiedad del objeto: no entra en su identidad, así que volver a traerlo bajo otro período no crea una fila nueva."},"fechaMovimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha del movimiento en la cartola (ISO 8601). null si el banco no la trajo."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible lo trae 'display'. Reemplaza al par cargo/abono del portal, que obligaba a mirar cuál de las dos celdas venía llena. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldo":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo que queda en la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa del movimiento tal como aparece en la cartola (por ejemplo 'TEF A PROVEEDOR LTDA')."},"documento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de documento asociado al movimiento, cuando el banco lo trae."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas. Entre dos filas del mismo hecho, gana la de 'ultimaLecturaEn' mayor."},"currency":{"type":"string","description":"Moneda de la cuenta, en código ISO. Se deriva de la cuenta, así que viene igual por las dos cartolas del banco y nunca es null."}},"required":["numeroCuenta","periodo","fechaMovimiento","monto","type","display","saldo","descripcion","documento","ultimaLecturaEn","currency"],"additionalProperties":false},"description":"Los movimientos guardados que calzan con los filtros, del más reciente al más antiguo. Una lista vacía significa que ese período no se ha sincronizado, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["movimientos","cursor"],"additionalProperties":false},"banco_security__nomina_pagos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idNomina":{"type":"string","minLength":1,"description":"La nómina cuyas líneas de pago quieres leer. Sale del campo 'idNomina' de una cabecera de 'banco_security.nominas.consultar'; no es el 'numeroNomina' que el banco muestra en su listado."},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}},"required":["idNomina"]},"banco_security__nomina_pagos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"pagos":{"type":"array","items":{"type":"object","properties":{"idNomina":{"type":"string","description":"El identificador de la nómina a la que pertenece esta línea: el mismo que pediste en la entrada."},"linea":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Posición de esta línea dentro de la nómina, empezando en 1. Es un ordinal de la nómina completa, no de la página del portal de donde se leyó."},"tipoCuenta":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de cuenta del beneficiario según el banco (por ejemplo 'Cuenta Corriente' o 'Cuenta Vista')."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado del pago en el texto del propio banco (por ejemplo 'Pagado'). Cuando el banco lo rechazó, el motivo va en 'motivoRechazo'."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es cómo se pidió el dato, no una propiedad del objeto: no entra en su identidad, así que volver a traerlo bajo otro período no crea una fila nueva."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT del beneficiario del pago, tal como lo escribe el banco."},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre del beneficiario del pago."},"numeroCuenta":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La cuenta de destino del beneficiario. Esta tool no ofrece filtro por cuenta: la columna va cifrada y un filtro sobre ella devolvería cero filas."},"banco":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Banco del beneficiario, en el texto del portal."},"mail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Correo al que el banco avisó el pago al beneficiario, cuando lo hay."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El monto de esta línea, como magnitud SIN signo. El sentido lo da 'type', que en un pago de nómina es siempre 'credit' porque la plata sale de la empresa."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"glosa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa con que el pago se identifica ante el beneficiario (por ejemplo 'Sueldo julio 2026')."},"motivoRechazo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Por qué el banco rechazó este pago, en su propio texto. null cuando no hubo rechazo."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas. Entre dos filas del mismo hecho, gana la de 'ultimaLecturaEn' mayor."}},"required":["idNomina","linea","tipoCuenta","estado","periodo","rut","nombre","numeroCuenta","banco","mail","monto","type","display","glosa","motivoRechazo","ultimaLecturaEn"],"additionalProperties":false},"description":"Las líneas de pago de la nómina pedida, en orden ascendente de 'linea'. Una lista vacía significa que esa nómina no se ha sincronizado."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["pagos","cursor"],"additionalProperties":false},"banco_security__nominas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"banco_security__nominas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"nominas":{"type":"array","items":{"type":"object","properties":{"idNomina":{"type":"string","description":"El identificador de la nómina en el banco. Es el valor que pide 'banco_security.nomina_pagos.consultar' para traer sus líneas de pago."},"numeroNomina":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número con que el banco rotula la nómina en su listado. No sirve para pedir el detalle: para eso va 'idNomina'."},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha de la nómina según el banco (ISO 8601). null si no la informa."},"tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de nómina en el texto del propio banco (por ejemplo 'Remuneraciones'), sin traducir."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado de la nómina en el texto del propio banco (por ejemplo 'Procesada'), sin traducir."},"numRegistros":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas líneas de pago tiene la nómina. Está aquí para que dimensiones antes de pedir el detalle con 'banco_security.nomina_pagos.consultar': hay nóminas de más de mil líneas."},"cuentaCargo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La cuenta corriente de la empresa contra la que se cargó la nómina."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es cómo se pidió el dato, no una propiedad del objeto: no entra en su identidad, así que volver a traerlo bajo otro período no crea una fila nueva."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El total de la nómina, como magnitud SIN signo. El sentido lo da 'type', que en una nómina es siempre 'credit' porque es un desembolso que la empresa origina."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas. Entre dos filas del mismo hecho, gana la de 'ultimaLecturaEn' mayor."}},"required":["idNomina","numeroNomina","fecha","tipo","estado","numRegistros","cuentaCargo","periodo","monto","type","display","ultimaLecturaEn"],"additionalProperties":false},"description":"Las cabeceras de nómina guardadas que calzan con los filtros, de la más reciente a la más antigua. Las líneas de pago no vienen aquí: se piden con 'banco_security.nomina_pagos.consultar'."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["nominas","cursor"],"additionalProperties":false},"banco_security__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"Filtra por el día de la foto de saldo, en formato AAAA-MM-DD. Si lo omites, la primera página ya trae las fotos más recientes que haya guardadas."},"numeroCuenta":{"description":"Filtra por un número de cuenta. Omítelo para ver todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"banco_security__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que corresponde esta foto de saldo."},"currency":{"type":"string","description":"Moneda de la cuenta, en código ISO ('CLP' o 'USD'). La misma empresa puede tener cuentas en pesos y en dólares, y cada una trae su propia fila."},"observedDay":{"type":"string","description":"El día de esta foto de saldo, en formato AAAA-MM-DD. Hay una foto por cuenta y por día: volver a sincronizar el mismo día actualiza esta fila en vez de agregar otra."},"observedAt":{"type":"string","description":"El instante (ISO 8601) en que se tomó la foto dentro de ese día."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta. Es un balance, no una operación: conserva su propio signo (un sobregiro es negativo) y no lleva 'type'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta. Es un balance: conserva su propio signo y no lleva 'type'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"saldoProvisorio":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo provisorio de la cuenta, tal como lo publica el portal. Es un balance: conserva su propio signo y no lleva 'type'. Un null significa que el banco no trajo la celda."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas. Entre dos filas del mismo hecho, gana la de 'ultimaLecturaEn' mayor."}},"required":["numeroCuenta","currency","observedDay","observedAt","saldoContable","saldoDisponible","saldoProvisorio","ultimaLecturaEn"],"additionalProperties":false},"description":"Las fotos de saldo guardadas que calzan con los filtros, de la más reciente a la más antigua. Una lista vacía significa que la conexión nunca sincronizó saldos, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["saldos","cursor"],"additionalProperties":false},"banco_security__transferencias__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"direccion":{"description":"Filtra por dirección: 'enviadas' son las que la empresa cursó y 'recibidas' las que le llegaron. Omítelo para traer las dos juntas; el campo 'direction' de cada fila las distingue.","type":"string","enum":["enviadas","recibidas"]},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"banco_security__transferencias__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"transferencias":{"type":"array","items":{"type":"object","properties":{"sourceTransferId":{"type":"string","description":"Identificador estable de la transferencia dentro de Connect, compuesto por la dirección y el número de transacción (por ejemplo 'issued:39262015878491'). Sirve para reconocer la misma transferencia entre dos lecturas; el banco no lo muestra."},"direction":{"type":"string","enum":["issued","received"],"description":"'issued' es una transferencia que la empresa envió y 'received' una que recibió. Es el campo que las distingue cuando consultas sin filtrar por 'direccion'."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es cómo se pidió el dato, no una propiedad del objeto: no entra en su identidad, así que volver a traerlo bajo otro período no crea una fila nueva."},"numeroTransaccion":{"type":"string","description":"El número de transacción que emite el banco. Viene como texto a propósito: tiene unos 14 dígitos y no cabe en un entero de 32 bits. Trátalo como identificador y no lo conviertas a número."},"transferredAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se cursó la transferencia (ISO 8601). null si el banco no trajo la fecha."},"currency":{"type":"string","description":"Moneda de la transferencia, en código ISO ('CLP' o 'USD')."},"statusCode":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"El código de estado que el banco asigna a la transferencia, tal cual, sin traducir. Solo viene en las enviadas ('issued'); en las recibidas es null."},"transferType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de transferencia en el texto del propio banco (por ejemplo 'Transferencia a terceros'). null cuando no lo informa."},"nominaNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Número de la nómina de pago masiva de la que salió esta transferencia. Viene como texto a propósito, igual que numeroTransaccion: es un identificador, no una cantidad, y es el mismo dato que numeroNomina en banco_security.nominas.consultar. null significa que no vino de una nómina."},"ownRut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT del lado propio de la operación: el de origen si la empresa envió la transferencia, el de destino si la recibió."},"ownAccount":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Número de la cuenta propia en esta transferencia: la de origen si la empresa la envió, la de destino si la recibió."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Magnitud de la transferencia SIN signo. El sentido lo da 'type' y el signo visible lo trae 'display'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El asunto con que se cursó la transferencia, tal como lo escribió quien la hizo (por ejemplo 'Pago factura 10452')."},"counterpartyRut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT de la contraparte: el destinatario si la transferencia salió, el emisor si entró."},"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre de la contraparte, tal como lo informa el banco."},"counterpartyBank":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Banco de la contraparte, en el texto del portal (por ejemplo 'Banco de Chile')."},"counterpartyAccount":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Número de cuenta de la contraparte."},"counterpartyEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Correo al que el banco avisó la transferencia a la contraparte, cuando lo hay."},"creatorRut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT de quien creó la transferencia en el portal. Solo viene en las enviadas ('issued'); en las recibidas es null."},"approverRut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT de quien la aprobó en el portal. Solo viene en las enviadas ('issued'); en las recibidas es null."},"payerRut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT que el banco registra como pagador de la transferencia. Solo viene en las enviadas ('issued'); en las recibidas es null."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la caché puede haber dejado de moverse (por ejemplo, con la conexión pausada tras varios fallos de credencial) mientras esta tool sigue respondiendo con filas antiguas. Entre dos filas del mismo hecho, gana la de 'ultimaLecturaEn' mayor."}},"required":["sourceTransferId","direction","periodo","numeroTransaccion","transferredAt","currency","statusCode","transferType","nominaNumber","ownRut","ownAccount","monto","type","display","subject","counterpartyRut","counterpartyName","counterpartyBank","counterpartyAccount","counterpartyEmail","creatorRut","approverRut","payerRut","ultimaLecturaEn"],"additionalProperties":false},"description":"Las transferencias guardadas que calzan con los filtros, de la más reciente a la más antigua. Una lista vacía significa que ese período no se ha sincronizado, no que no haya transferencias."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["transferencias","cursor"],"additionalProperties":false},"bch_empresas__cartolas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fechaEmisionDay":{"description":"Filtra por el día en que el banco emitió el extracto, en formato AAAA-MM-DD.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"periodo":{"description":"Filtra por el mes (AAAA-MM) con el que se BUSCÓ la cartola, que no es su fecha de emisión: para esa usa 'fechaEmisionDay'. Sin él, la respuesta cruza todos los períodos guardados.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bch_empresas__cartolas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cartolas":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"La cuenta a la que pertenece esta fila, con el código de producto adelante y sin el relleno de ceros del banco (por ejemplo 'CTD12345678'). Es el mismo valor en saldos, movimientos y cartolas, y el que espera el filtro 'numeroCuenta'."},"tipoProducto":{"type":"string","description":"El tipo de producto de la cuenta según el índice de cartolas del banco (por ejemplo 'CTD'). Cuando el índice no lo trae, cae al código de producto de la cuenta."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras (por ejemplo 'CLP'). Sale de la cuenta y nunca se asume: este alcance solo persiste cuentas en pesos chilenos y saltea las demás, avisándolo en el 'detalle' de la sincronización."},"fechaEmisionDay":{"type":"string","description":"El día (AAAA-MM-DD) en que el banco emitió este extracto. Junto con la cuenta es lo que identifica a la cartola, y es lo que filtra el 'fechaEmisionDay' de la entrada."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se buscó esta cartola, que no es la fecha del extracto: esa es 'fechaEmisionDay'."},"numeroCartola":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número correlativo del extracto (tag 28C del MT940), SIEMPRE como texto: convertirlo a número le come los ceros a la izquierda. 'null' cuando el extracto descargado no trae el tag."},"saldoInicial":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo de apertura del extracto (tag 60 del MT940), con su propio signo: en MT940 la marca 'D' es un sobregiro y sale negativa. No cuadra necesariamente con la suma de 'movimientos' del mismo mes, porque el extracto encadena por fecha contable y el feed vivo por fecha del movimiento. 'null' cuando el extracto no lo declara."},"saldoFinal":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo de cierre del extracto (tag 62 del MT940), con el mismo criterio de signo y la misma advertencia de cuadratura que 'saldoInicial'."},"ultimaLecturaEn":{"type":"string","description":"Instante (ISO 8601) en que esta cartola se leyó del banco por última vez."}},"required":["numeroCuenta","tipoProducto","currency","fechaEmisionDay","periodo","numeroCartola","saldoInicial","saldoFinal","ultimaLecturaEn"],"additionalProperties":false},"description":"Las cartolas guardadas, la más reciente primero. Una lista vacía significa que ese período todavía no se sincronizó, no que el banco no tenga extractos de esa cuenta."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["cartolas","cursor"],"additionalProperties":false},"bch_empresas__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos","movimientos_tarjetas","cartolas"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"bch_empresas__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"bch_empresas__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"bch_empresas__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"bch_empresas__movimientos_tarjetas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Filtra por el mes AAAA-MM con que se sincronizó la fila.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"currency":{"description":"Filtra por la moneda primaria.","type":"string","enum":["CLP","USD"]},"estado":{"description":"Filtra por etapa de facturación.","type":"string","enum":["pendiente","facturado"]},"cardReference":{"description":"Filtra por la referencia opaca devuelta en otra fila.","type":"string","pattern":"^[a-f0-9]{64}$"},"soloVigentes":{"default":true,"description":"Por defecto excluye pendientes que desaparecieron de la captura más reciente. false también los incluye.","type":"boolean"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}},"additionalProperties":false},"bch_empresas__movimientos_tarjetas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientosTarjetas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Identidad opaca y estable del movimiento. Nunca contiene el ID crudo del banco ni el número de tarjeta."},"cardReference":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{64}$"},{"type":"null"}],"description":"Referencia opaca de la tarjeta de procedencia. Es null si el mismo objeto apareció en más de una tarjeta."},"terminacionTarjeta":{"anyOf":[{"type":"string","pattern":"^\\d{4}$"},{"type":"null"}],"description":"Solo los últimos cuatro dígitos. Nunca es un PAN completo; null cuando el banco no permite atribuir la fila."},"tipoTarjeta":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre o tipo que entrega el banco, o null cuando no está disponible."},"currency":{"type":"string","enum":["CLP","USD"],"description":"Moneda del monto primario: pesos chilenos o dólares estadounidenses."},"estado":{"type":"string","enum":["pendiente","facturado"],"description":"Etapa del movimiento dentro del ciclo de facturación."},"vigente":{"type":"boolean","description":"En pendientes indica si apareció en la captura completa más reciente. Los facturados permanecen vigentes."},"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Mes solicitado al sincronizar esta fila, en formato AAAA-MM."},"fechaTransaccion":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de la transacción en America/Santiago, o null si el banco no lo trajo."},"fechaFacturacion":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día del estado de cuenta para filas facturadas; null en pendientes."},"horaAutorizacion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Hora que informa el banco para un pendiente, o null si no viene."},"seccion":{"type":"string","enum":["no_facturados","operaciones","cargos_impuestos_abonos","compras_en_cuotas","productos_servicios_voluntarios","pagos","compras","comisiones"],"description":"Sección cerrada del portal de la que salió el movimiento."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Descripción o glosa que entrega el banco, o null si no viene."},"comercio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre del comercio que entrega el banco, o null si no viene."},"monto":{"type":"number","description":"Monto primario con el signo exacto que entregó Banco de Chile."},"display":{"type":"string","description":"El monto primario formateado para mostrar; conserva el signo de 'monto'."},"montoMonedaOrigen":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Monto en moneda de origen cuando el banco lo informa, sin inventar su código; null cuando no viene."},"displayMonedaOrigen":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Presentación de montoMonedaOrigen, o null cuando no viene."},"cuotas":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Descripción de cuotas del banco, o null si no aplica."},"pais":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"País o código de país informado por el banco, o null."},"rubro":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Rubro del comercio informado por el banco, o null."},"ciudad":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ciudad informada por el banco, o null."},"grupo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Grupo de presentación del estado de cuenta, o null."},"repeticiones":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Cantidad de objetos indistinguibles agrupados sin fabricar una identidad basada en su posición."},"ultimaLecturaEn":{"type":"string","description":"Instante ISO 8601 en que esta fila se observó por última vez."}},"required":["id","cardReference","terminacionTarjeta","tipoTarjeta","currency","estado","vigente","periodo","fechaTransaccion","fechaFacturacion","horaAutorizacion","seccion","descripcion","comercio","monto","display","montoMonedaOrigen","displayMonedaOrigen","cuotas","pais","rubro","ciudad","grupo","repeticiones","ultimaLecturaEn"],"additionalProperties":false},"description":"Movimientos de tarjetas guardados. Una lista vacía significa que el alcance aún no se sincronizó o no encontró filas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor de la página siguiente. Reenvíalo tal cual; null significa que no quedan más filas."}},"required":["movimientosTarjetas","cursor"],"additionalProperties":false},"bch_empresas__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Filtra por el mes (AAAA-MM) con el que se sincronizó la fila. Sin él, la respuesta cruza todos los períodos guardados de esta conexión.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bch_empresas__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"La identidad estable del movimiento: el 'id' que entrega el propio Banco de Chile, con el relleno de ceros de la cuenta canonizado. El mismo movimiento visto en dos sincronizaciones solapadas trae el mismo 'id', así que sirve para deduplicar sin comparar campos de presentación."},"numeroCuenta":{"type":"string","description":"La cuenta a la que pertenece esta fila, con el código de producto adelante y sin el relleno de ceros del banco (por ejemplo 'CTD12345678'). Es el mismo valor en saldos, movimientos y cartolas, y el que espera el filtro 'numeroCuenta'."},"codigoProducto":{"type":"string","description":"Las tres letras del tipo de producto de la cuenta (por ejemplo 'CTD'), tal como las entrega el banco. Es el prefijo de 'numeroCuenta'."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras. Sale de la cuenta y nunca se asume: los movimientos soportan pesos chilenos ('CLP') y dólares estadounidenses ('USD')."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es la ventana con que se pidió, no una propiedad del movimiento: la fecha del movimiento vive en 'fechaMovimiento'. Es el valor con el que filtra el 'periodo' de la entrada."},"fechaMovimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha y hora del movimiento (ISO 8601), tal como la entrega el banco. 'null' cuando el banco no la trajo."},"fechaContable":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha contable en formato AAAA-MM-DD, sin hora, y distinta de 'fechaMovimiento'. El banco la manda como dd/mm/aaaa y aquí ya viene convertida a ISO. 'null' cuando llegó en una forma que no se reconoció: nunca se adivina una fecha ni se deja pasar la celda cruda."},"codigoTransaccion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El código de transacción del núcleo del banco, tal cual. Es una etiqueta interna sin catálogo publicado: sirve para agrupar movimientos del mismo tipo, no para deducir qué fue la operación. 'null' cuando el banco no lo trae."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"La magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible, 'display'. 'null' significa que el banco no trajo la celda, nunca 0."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo de la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo, así que un sobregiro es negativo."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa del movimiento, tal como la escribe el banco. 'null' cuando llega vacía."},"canal":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El canal por el que se cursó el movimiento, con la etiqueta del propio banco (por ejemplo 'INTERNET'). 'null' cuando el banco no lo informa."},"detalleGlosa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Las etiquetas extra del movimiento (RUT y nombre de la contraparte, entre otras) aplanadas en un solo texto, separadas por ' | '. Es el texto CRUDO del banco: 'counterparty', 'idTransaccion' y 'comentario' ya vienen extraídos de aquí. Trae datos personales de terceros: trátalo como tal. 'null' cuando el banco no adjunta ninguna."},"counterparty":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre o razón social de la contraparte. 'null' cuando el detalle no lo trae."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT de la contraparte, con guión y sin puntos ni relleno de ceros (por ejemplo '77147218-4'): el banco lo escribe corrido dentro del detalle y aquí ya viene canonizado. Si llegó en una forma que no se reconoce, viaja tal cual y nunca convertido a la fuerza. 'null' cuando el detalle no lo trae."},"bank":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco de LA CONTRAPARTE, no el tuyo: es la institución del otro lado de la transferencia (por ejemplo 'Banco Estado'), escrita con la etiqueta que Banco de Chile adjunta al movimiento. 'null' cuando el detalle no lo trae."},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de cuenta de la contraparte, tal como lo escribe el banco (puede venir con relleno de ceros). 'null' cuando el detalle no lo trae."}},"required":["name","rut","bank","account"],"additionalProperties":false,"description":"La contraparte del movimiento, extraída del detalle que adjunta el banco. QUÉ LADO ES depende de 'type': en un abono ('debit', plata que entra) es el origen; en un cargo ('credit', plata que sale) es el destinatario. Los cuatro campos vienen en 'null' cuando el movimiento no trae detalle, que es lo normal fuera de las transferencias. Cuando el banco no informó 'type' se vacían 'name', 'rut' y 'account' (sin el tipo no hay forma de saber cuál de los dos lados es el otro), pero 'bank' sí viaja: el banco que nombra el detalle es el del otro lado en cualquier dirección. El texto completo sigue en 'detalleGlosa'. Son datos personales de terceros: trátalos como tales."},"counterpartySource":{"anyOf":[{"type":"string","enum":["detalle","descripcion"]},{"type":"null"}],"description":"De dónde salió 'counterparty', para no tener que adivinarlo. 'detalle': de las etiquetas que el banco adjunta al movimiento, que es el caso normal de una transferencia. 'descripcion': lo extrajimos del texto de la glosa, hoy sólo del patrón 'Pago: Proveedores <RUT>' de las nóminas de pago a proveedores, así que viene el RUT y nada más. 'null': EL BANCO NO INFORMÓ CONTRAPARTE para este movimiento, que es lo normal en cheques, depósitos en efectivo, comisiones, recaudaciones y cargos automáticos; no es un dato que falte por un problema de Connect. Ojo: 'bank' puede venir con valor aunque esto sea 'null', porque la institución del otro lado no identifica a nadie por sí sola y este campo habla de quién es la contraparte, no de dónde tiene su cuenta."},"idTransaccion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El identificador que el banco le pone a la transferencia, tal cual. Aparece sólo en traspasos y con más de un formato, así que sirve para conversar con el banco sobre una operación, NO como identidad: la identidad estable del movimiento es 'id'. 'null' cuando el detalle no lo trae."},"comentario":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El comentario que quien transfiere escribe al hacer la operación. 'null' cuando viene vacío, que es lo habitual."},"ultimaLecturaEn":{"type":"string","description":"Instante (ISO 8601) en que esta fila se leyó del banco por última vez. Una reobservación del mismo id bancario actualiza la fila existente, así que este campo permite distinguir datos recién sincronizados de una caché antigua."}},"required":["id","numeroCuenta","codigoProducto","currency","periodo","fechaMovimiento","fechaContable","codigoTransaccion","monto","type","display","saldoContable","descripcion","canal","detalleGlosa","counterparty","counterpartySource","idTransaccion","comentario","ultimaLecturaEn"],"additionalProperties":false},"description":"Los movimientos guardados, del más reciente al más antiguo. Una lista vacía significa que ese período todavía no se sincronizó, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["movimientos","cursor"],"additionalProperties":false},"bch_empresas__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"description":"Filtra por el día del snapshot, en formato AAAA-MM-DD. Sin él, la primera página ya trae los saldos más recientes que hay guardados de cada cuenta.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bch_empresas__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"La cuenta a la que pertenece esta fila, con el código de producto adelante y sin el relleno de ceros del banco (por ejemplo 'CTD12345678'). Es el mismo valor en saldos, movimientos y cartolas, y el que espera el filtro 'numeroCuenta'."},"codigoProducto":{"type":"string","description":"Las tres letras con que Banco de Chile identifica el tipo de producto de la cuenta (por ejemplo 'CTD'). Es el prefijo de 'numeroCuenta' y viene del propio banco."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras (por ejemplo 'CLP'). Sale de la cuenta y nunca se asume: este alcance solo persiste cuentas en pesos chilenos y saltea las demás, avisándolo en el 'detalle' de la sincronización."},"observedDay":{"type":"string","description":"El día (AAAA-MM-DD) de esta foto de saldos. Los saldos se guardan como un snapshot por día, así que sin filtro de fecha la primera página ya trae el más reciente de cada cuenta."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta ese día, como número y con su propio signo (un sobregiro es negativo). 'null' significa que el banco no trajo la celda, nunca 0: un 0 es un saldo real."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta ese día. Difiere del disponible por retenciones y cheques en canje. Viene 'null' en las filas sincronizadas antes del 2026-08-11, que es cuando se empezó a leer; ese 'null' significa «no se leyó», nunca cero."},"lineaCredito":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El monto disponible de la línea de crédito de la cuenta, tal como lo informa el banco. 'null' significa que el banco no trajo la celda, nunca 0."},"ultimaLecturaEn":{"type":"string","description":"Instante (ISO 8601) en que esta fila se leyó del banco por última vez. La caché puede quedarse quieta sin que la consulta falle (una conexión se auto-pausa tras dos fallos de credencial), así que este campo es lo que distingue un saldo recién leído de uno viejo."}},"required":["numeroCuenta","codigoProducto","currency","observedDay","saldoDisponible","saldoContable","lineaCredito","ultimaLecturaEn"],"additionalProperties":false},"description":"Los snapshots de saldo guardados, el más reciente primero. Una lista vacía significa que esta conexión todavía no se sincronizó, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["saldos","cursor"],"additionalProperties":false},"bci_360__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Mes AAAA-MM que se sincronizará."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos"]},"description":"Módulos que se sincronizarán en la misma sesión."}},"required":["periodo","alcances"]},"bci_360__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Mes solicitado."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Módulo sincronizado."},"status":{"type":"string","enum":["ok","failed"],"description":"Resultado del módulo; failed nunca implica cero movimientos."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Registros recibidos para persistir."},"error":{"description":"Código de error del módulo.","type":"string"},"detalle":{"description":"Explicación del resultado.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"bci_360__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"bci_360__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"bci_360__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Filtra por el mes (AAAA-MM) archivado en la columna 'periodo' de cada fila, que significa dos cosas según la cuenta, porque BCI las sirve distinto: en una cuenta en pesos es el mes con que se pidió el sync, no una propiedad del movimiento; en una cuenta en moneda extranjera es el mes del propio movimiento, porque esa cartola no ofrece ventana de fechas. Filtrar por el mes en que se hizo el sync no encuentra las filas en dólares, archivadas bajo el mes de su propia fecha. Sin este filtro, la respuesta cruza todos los períodos guardados y 'completo' llega en null.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bci_360__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece esta fila, tal como lo entrega el portal de BCI. Es el mismo valor en saldos y movimientos, y el que espera el filtro 'numeroCuenta'."},"currency":{"type":"string","description":"La moneda de la cuenta a la que pertenece este movimiento, en código de tres letras ('CLP', 'USD'). Sale de la cuenta, no del movimiento. NUNCA sumes montos de monedas distintas: una misma conexión puede tener cuentas en pesos y en dólares, y sus filas conviven en esta lista."},"serie":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID opaco del movimiento entregado por BCI 360. Se conserva como texto y se delimita por cuenta para evitar duplicados."},"periodo":{"type":"string","description":"Mes AAAA-MM de la fecha de transacción del movimiento."},"fechaMovimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha del movimiento (ISO 8601), tal como la entrega el banco. 'null' cuando no la trajo."},"fechaContable":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha contable del movimiento (ISO 8601), que puede diferir de 'fechaMovimiento'. 'null' cuando el banco no la trajo."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa del movimiento, tal como la escribe el banco. 'null' cuando llega vacía."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"La magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible, 'display'. 'null' significa que el banco no trajo la celda, nunca 0."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo de la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo, así que un sobregiro es negativo."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La categoría con que el propio BCI clasifica el movimiento (por ejemplo 'Transferencias'). Es una etiqueta del banco, no un vocabulario de Connect: puede cambiar sin aviso. 'null' cuando el banco no la trae."},"mnemonico":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El código corto de transacción del propio BCI (por ejemplo 'TRF'). Es una etiqueta del banco sin catálogo publicado: sirve para agrupar movimientos del mismo tipo, no para deducir qué fue la operación. 'null' cuando el banco no lo trae."},"counterparty":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre o razón social de la contraparte. 'null' cuando el detalle no lo trae."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT de la contraparte, tal cual. 'null' cuando el detalle no lo trae."},"bank":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco de la contraparte. 'null' cuando el detalle no lo trae."},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de cuenta de la contraparte. 'null' cuando el detalle no lo trae."}},"required":["name","rut","bank","account"],"additionalProperties":false,"description":"La contraparte del movimiento, extraída del detalle que adjunta el banco. Los cuatro campos vienen en 'null' cuando el movimiento no trae detalle, que es lo normal fuera de las transferencias. Son datos personales de terceros: trátalos como tales."},"ultimaLecturaEn":{"type":"string","description":"Instante de la última lectura. Una corrección actualiza el mismo ID bancario y cuenta, sin crear otra fila."}},"required":["numeroCuenta","currency","serie","periodo","fechaMovimiento","fechaContable","descripcion","monto","type","display","saldoContable","category","mnemonico","counterparty","ultimaLecturaEn"],"additionalProperties":false},"description":"Movimientos almacenados por cuenta e ID bancario."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"True si la última sincronización del período completó todas las cuentas y páginas. False indica un fallo; null indica que no se conoce la completitud."}},"required":["movimientos","cursor","completo"],"additionalProperties":false},"bci_360__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"description":"Filtra por el día del snapshot, en formato AAAA-MM-DD. Sin él, la primera página ya trae los saldos más recientes que hay guardados de cada cuenta.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bci_360__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece esta fila, tal como lo entrega el portal de BCI. Es el mismo valor en saldos y movimientos, y el que espera el filtro 'numeroCuenta'."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras (por ejemplo 'CLP'). Sale de la cuenta."},"observedDay":{"type":"string","description":"El día (AAAA-MM-DD) de esta foto de saldos. Los saldos se guardan como un snapshot por día, así que sin filtro de fecha la primera página ya trae el más reciente de cada cuenta."},"observedAt":{"type":"string","description":"El instante exacto (ISO 8601) en que se tomó la foto, dentro del día de 'observedDay'. Todas las cuentas de una misma sincronización comparten este valor."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta, como número y con su propio signo (un sobregiro es negativo). 'null' significa que el banco no trajo la celda, nunca 0: un 0 es un saldo real."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta, con el mismo criterio de signo y de 'null' que 'saldoContable'."},"saldoContable9am":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de las 9 de la mañana, que BCI publica como un campo aparte de los otros tres. Mismo criterio de signo y de 'null' que 'saldoContable'."},"retencion":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El monto retenido que BCI informa junto a los saldos. 'null' significa que el banco no trajo la celda, nunca 0."},"ultimaLecturaEn":{"type":"string","description":"Instante (ISO 8601) en que esta fila se leyó del banco por última vez. La caché puede quedarse quieta sin que la consulta falle (una conexión se auto-pausa tras dos fallos de credencial), así que este campo es lo que distingue un saldo recién leído de uno viejo."}},"required":["numeroCuenta","currency","observedDay","observedAt","saldoContable","saldoDisponible","saldoContable9am","retencion","ultimaLecturaEn"],"additionalProperties":false},"description":"Los snapshots de saldo guardados, el más reciente primero. Una lista vacía significa que esta conexión todavía no se sincronizó, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["saldos","cursor"],"additionalProperties":false},"bci_pyme__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"bci_pyme__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"bci_pyme__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"bci_pyme__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"bci_pyme__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Filtra por el mes (AAAA-MM) archivado en la columna 'periodo' de cada fila, que significa dos cosas según la cuenta, porque BCI las sirve distinto: en una cuenta en pesos es el mes con que se pidió el sync, no una propiedad del movimiento; en una cuenta en moneda extranjera es el mes del propio movimiento, porque esa cartola no ofrece ventana de fechas. Filtrar por el mes en que se hizo el sync no encuentra las filas en dólares, archivadas bajo el mes de su propia fecha. Sin este filtro, la respuesta cruza todos los períodos guardados y 'completo' llega en null.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bci_pyme__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece esta fila, tal como lo entrega el portal de BCI. Es el mismo valor en saldos y movimientos, y el que espera el filtro 'numeroCuenta'."},"currency":{"type":"string","description":"La moneda de la cuenta a la que pertenece este movimiento, en código de tres letras ('CLP', 'USD'). Sale de la cuenta, no del movimiento. NUNCA sumes montos de monedas distintas: una misma conexión puede tener cuentas en pesos y en dólares, y sus filas conviven en esta lista."},"serie":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número con que el banco identifica esta transacción. Sólo lo publica la cartola de las cuentas en moneda extranjera; en las cuentas en pesos viene 'null' porque BCI no lo entrega. Sirve para conciliar contra la cartola del banco, no para ordenar."},"periodo":{"type":"string","description":"El mes (AAAA-MM) bajo el que está archivada esta fila, y el valor con el que filtra el 'periodo' de la entrada. Significa dos cosas según la cuenta, porque BCI las sirve distinto: en una cuenta en PESOS es la ventana con que se pidió el sync, no una propiedad del movimiento; en una cuenta en MONEDA EXTRANJERA es el mes del propio movimiento, porque esa cartola no ofrece ventana de fechas: entrega sus últimos movimientos y punto. La fecha real vive siempre en 'fechaMovimiento'. Cadena vacía ('') en una cuenta en moneda extranjera significa que esa fecha no se pudo interpretar: la fila igual se guardó (su huella la distingue) y queda fuera de cualquier filtro por 'periodo', visible sólo sin ese filtro."},"fechaMovimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha del movimiento (ISO 8601), tal como la entrega el banco. 'null' cuando no la trajo."},"fechaContable":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha contable del movimiento (ISO 8601), que puede diferir de 'fechaMovimiento'. 'null' cuando el banco no la trajo."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa del movimiento, tal como la escribe el banco. 'null' cuando llega vacía."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"La magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible, 'display'. 'null' significa que el banco no trajo la celda, nunca 0."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo de la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo, así que un sobregiro es negativo."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La categoría con que el propio BCI clasifica el movimiento (por ejemplo 'Transferencias'). Es una etiqueta del banco, no un vocabulario de Connect: puede cambiar sin aviso. 'null' cuando el banco no la trae."},"mnemonico":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El código corto de transacción del propio BCI (por ejemplo 'TRF'). Es una etiqueta del banco sin catálogo publicado: sirve para agrupar movimientos del mismo tipo, no para deducir qué fue la operación. 'null' cuando el banco no lo trae."},"counterparty":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre o razón social de la contraparte. 'null' cuando el detalle no lo trae."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT de la contraparte, tal cual. 'null' cuando el detalle no lo trae."},"bank":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco de la contraparte. 'null' cuando el detalle no lo trae."},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de cuenta de la contraparte. 'null' cuando el detalle no lo trae."}},"required":["name","rut","bank","account"],"additionalProperties":false,"description":"La contraparte del movimiento, extraída del detalle que adjunta el banco. Los cuatro campos vienen en 'null' cuando el movimiento no trae detalle, que es lo normal fuera de las transferencias. Son datos personales de terceros: trátalos como tales."},"ultimaLecturaEn":{"type":"string","description":"Instante (ISO 8601) en que esta fila se leyó del banco por última vez. Una corrección del banco entra como fila NUEVA en vez de reemplazar a la anterior, así que ante dos filas del mismo movimiento vale la de 'ultimaLecturaEn' mayor."}},"required":["numeroCuenta","currency","serie","periodo","fechaMovimiento","fechaContable","descripcion","monto","type","display","saldoContable","category","mnemonico","counterparty","ultimaLecturaEn"],"additionalProperties":false},"description":"Los movimientos guardados, del más reciente al más antiguo. Una lista vacía significa que ese período todavía no se sincronizó, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Si el último sync de ESE período trajo todo. BCI corta en 1000 movimientos por cuenta y mes, así que 'false' significa que faltan filas del mes. 'null' significa «no se sabe», y es lo que devuelve una consulta sin filtro de 'periodo': nunca lo leas como un 'true'."}},"required":["movimientos","cursor","completo"],"additionalProperties":false},"bci_pyme__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"description":"Filtra por el día del snapshot, en formato AAAA-MM-DD. Sin él, la primera página ya trae los saldos más recientes que hay guardados de cada cuenta.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bci_pyme__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece esta fila, tal como lo entrega el portal de BCI. Es el mismo valor en saldos y movimientos, y el que espera el filtro 'numeroCuenta'."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras (por ejemplo 'CLP'). Sale de la cuenta."},"observedDay":{"type":"string","description":"El día (AAAA-MM-DD) de esta foto de saldos. Los saldos se guardan como un snapshot por día, así que sin filtro de fecha la primera página ya trae el más reciente de cada cuenta."},"observedAt":{"type":"string","description":"El instante exacto (ISO 8601) en que se tomó la foto, dentro del día de 'observedDay'. Todas las cuentas de una misma sincronización comparten este valor."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta, como número y con su propio signo (un sobregiro es negativo). 'null' significa que el banco no trajo la celda, nunca 0: un 0 es un saldo real."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta, con el mismo criterio de signo y de 'null' que 'saldoContable'."},"saldoContable9am":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de las 9 de la mañana, que BCI publica como un campo aparte de los otros tres. Mismo criterio de signo y de 'null' que 'saldoContable'."},"retencion":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El monto retenido que BCI informa junto a los saldos. 'null' significa que el banco no trajo la celda, nunca 0."},"ultimaLecturaEn":{"type":"string","description":"Instante (ISO 8601) en que esta fila se leyó del banco por última vez. La caché puede quedarse quieta sin que la consulta falle (una conexión se auto-pausa tras dos fallos de credencial), así que este campo es lo que distingue un saldo recién leído de uno viejo."}},"required":["numeroCuenta","currency","observedDay","observedAt","saldoContable","saldoDisponible","saldoContable9am","retencion","ultimaLecturaEn"],"additionalProperties":false},"description":"Los snapshots de saldo guardados, el más reciente primero. Una lista vacía significa que esta conexión todavía no se sincronizó, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["saldos","cursor"],"additionalProperties":false},"bice_empresas__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"bice_empresas__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"cuentasConsultadas":{"description":"Cuántas cuentas se alcanzaron a consultar. Es lo que vuelve interpretable un 'recordsSynced: 0': cero con una cuenta consultada significa que el banco no tiene movimientos ahí, y cero con cero cuentas significa que ni siquiera se llegó a preguntar. Los dos casos traen el mismo 0, así que revisa este campo antes de reportar «no hay datos».","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fueraDeVentana":{"description":"'true' cuando el banco no ofrece cartola para ese período en esa cuenta: el mes no está disponible, que es distinto de un mes sin movimientos. No lo reportes como «no hubo movimientos»; prueba un mes más reciente.","type":"boolean"},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"bice_empresas__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"bice_empresas__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"bice_empresas__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Filtra por el mes (AAAA-MM) con el que se sincronizó la fila. Como la cartola de BICE corre de fin de mes a fin de mes, un período puede traer movimientos fechados en los últimos días del mes anterior. Sin él, la respuesta cruza todos los períodos guardados.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"type":{"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos.","type":"string","enum":["credit","debit"]},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bice_empresas__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"La identidad estable del movimiento: la huella con la que se guardó. El mismo movimiento llega por dos rutas del banco con formatos distintos y por las dos trae este mismo 'id', así que sirve para deduplicar el día que comparten dos cartolas sin comparar campos de presentación."},"numeroCuenta":{"type":"string","description":"El identificador ESTABLE de la cuenta a la que pertenece esta fila. No es la máscara que muestra el portal en pantalla, que cambia en cada sesión: es el mismo valor en saldos y movimientos, y el que espera el filtro 'numeroCuenta'."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras (por ejemplo 'CLP'). BICE la manda a veces como código numérico y aquí ya viene traducida a las tres letras."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es la ventana con que se pidió, no una propiedad del movimiento: la cartola de BICE corre de fin de mes a fin de mes, así que el período '2026-07' incluye movimientos fechados el 30 de junio. La fecha vive en 'fecha'."},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha del movimiento (ISO 8601), tal como la entrega el banco. Puede caer en el mes anterior al de 'periodo', porque la cartola de BICE corre de fin de mes a fin de mes. 'null' cuando el banco no la trajo en una forma reconocible."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"La magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible, 'display'. 'null' cuando ni el débito ni el crédito traen un valor distinto de cero: el banco manda las dos celdas siempre y escribe 0 en la que no aplica, así que ese 0 no es un movimiento de cero."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo de la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo, así que un sobregiro es negativo."},"descripcion":{"type":"string","description":"La glosa del movimiento, tal como la escribe el banco. Cadena vacía cuando el banco no la trae."},"documento":{"type":"string","description":"El número de documento del movimiento, tal como lo entrega el banco. Ojo al compararlo: una ruta del banco lo manda con nueve dígitos y la otra truncado a los últimos ocho, así que dos textos distintos pueden ser el mismo documento. Para saber si dos filas son el mismo movimiento usa 'id'. Cadena vacía cuando el banco no lo trae."},"counterparty":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre o razón social de la contraparte, tal como lo escribe el banco (MAYÚSCULAS y sin tildes en muchas filas: es el texto del portal, no un dato normalizado). 'null' cuando la glosa no lo trae."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT de la contraparte, sin puntos y con guión (por ejemplo '76123456-0'): el banco lo escribe con puntos dentro de la glosa y aquí ya viene canonizado, en la MISMA forma con que el SII identifica a sus contrapartes, para que las dos fuentes crucen. No se valida el dígito verificador; si llegó en una forma que no se reconoce, viaja tal cual y nunca convertido a la fuerza. 'null' cuando la glosa no lo trae."},"bank":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco de LA CONTRAPARTE, no el tuyo. Ojo con el formato, que depende de la dirección: en un cargo el banco lo escribe abreviado y TRUNCADO a diez caracteres ('B.Santande', 'B.Scotiaba', 'B.Chile'), y en un abono lo escribe corrido ('Security', 'BCI'). Viaja tal como lo manda el banco, sin completar lo truncado: adivinar el resto sería inventar. 'null' cuando la glosa no lo trae."},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de cuenta de la contraparte, tal como lo escribe el banco dentro de la glosa, que es el único lugar donde la manda: su respuesta no trae ningún campo de contraparte aparte. Solo la traen los cargos: un abono nombra a quién y desde qué institución, nunca la cuenta de origen. 'null' en todo abono y cuando la glosa no lo trae."}},"required":["name","rut","bank","account"],"additionalProperties":false,"description":"La contraparte del movimiento, extraída de la glosa que escribe el banco. QUÉ LADO ES depende de 'type': en un abono ('debit', plata que entra) es el origen; en un cargo ('credit', plata que sale) es el destinatario. Los cuatro campos vienen en 'null' cuando el banco no informó contraparte, que es lo normal en pagos de tarjeta, comisiones y cargos de impuestos. Revisa 'counterpartySource' antes de concluir que falta un dato. Son datos personales de terceros: trátalos como tales."},"counterpartySource":{"anyOf":[{"type":"string","const":"descripcion"},{"type":"null"}],"description":"De dónde salió 'counterparty', para no tener que adivinarlo. 'descripcion': lo extrajimos de la glosa, que en BICE es el único lugar donde viaja la contraparte, porque el banco no adjunta un detalle estructurado como sí hacen otros. 'null': EL BANCO NO INFORMÓ CONTRAPARTE en esta fila, que es lo normal en pagos de la tarjeta propia, comisiones, cargos automáticos y pagos de impuestos; no es un dato que falte por un problema de Connect. El texto completo sigue en 'descripcion'."}},"required":["id","numeroCuenta","currency","periodo","fecha","monto","type","display","saldoContable","descripcion","documento","counterparty","counterpartySource"],"additionalProperties":false},"description":"Los movimientos guardados, del más reciente al más antiguo. Una lista vacía significa que ese período todavía no se sincronizó, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["movimientos","cursor"],"additionalProperties":false},"bice_empresas__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"description":"Filtra por el día del snapshot, en formato AAAA-MM-DD. Sin él, la primera página ya trae los saldos más recientes que hay guardados de cada cuenta.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"bice_empresas__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El identificador ESTABLE de la cuenta a la que pertenece esta fila. No es la máscara que muestra el portal en pantalla, que cambia en cada sesión: es el mismo valor en saldos y movimientos, y el que espera el filtro 'numeroCuenta'."},"numProducto":{"type":"string","description":"El mismo identificador estable de la cuenta que 'numeroCuenta'. Los dos campos traen el mismo valor a propósito: es el nombre con el que el propio BICE lo pide en sus llamadas."},"currency":{"type":"string","description":"La moneda de la cuenta, en código de tres letras (por ejemplo 'CLP'). BICE la manda a veces como código numérico y aquí ya viene traducida a las tres letras."},"observedDay":{"type":"string","description":"El día (AAAA-MM-DD) de esta foto de saldos. Los saldos se guardan como un snapshot por día, así que sin filtro de fecha la primera página ya trae el más reciente de cada cuenta."},"observedAt":{"type":"string","description":"El instante exacto (ISO 8601) en que se tomó la foto, dentro del día de 'observedDay'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta, como número y con su propio signo (un sobregiro es negativo). 'null' significa que el banco no trajo la celda, nunca 0: un 0 es un saldo real."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta, con el mismo criterio de signo y de 'null' que 'saldoContable'."}},"required":["numeroCuenta","numProducto","currency","observedDay","observedAt","saldoContable","saldoDisponible"],"additionalProperties":false},"description":"Los snapshots de saldo guardados, el más reciente primero. Una lista vacía significa que esta conexión todavía no se sincronizó, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["saldos","cursor"],"additionalProperties":false},"conexiones__conexion__crear__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sistema":{"type":"string","description":"Código del sistema, tal como lo devuelve conexiones.sistemas.listar. Sólo sirve para sistemas sin clave."},"empresaRut":{"type":"string","description":"RUT de la empresa para la que se usa el sistema, con dígito verificador. Ejemplo: 76.123.456-0."}},"required":["sistema","empresaRut"]},"conexiones__conexion__crear__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"El id de la conexión (conn_…). Pásalo como connectionId al usar las tools de ese sistema."},"sistema":{"type":"string","description":"El código del sistema conectado."},"sistemaNombre":{"type":"string","description":"El nombre del sistema, para presentarlo."},"nombre":{"type":"string","description":"El nombre con que quedó la conexión en el panel."},"empresaRut":{"type":"string","description":"El RUT de la empresa de esta conexión, canonizado sin puntos y con guion (76123456-0)."},"creada":{"type":"boolean","description":"true si esta llamada creó la conexión; false si esa empresa ya tenía una activa con este sistema y se devolvió la misma, sin crear otra ni sumar un cobro."}},"required":["id","sistema","sistemaNombre","nombre","empresaRut","creada"],"additionalProperties":false},"conexiones__conexion__deshabilitar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"conexionId":{"type":"string","description":"conn_… de la conexión a deshabilitar, tal como lo devuelve conexiones.estado.consultar."}},"required":["conexionId"]},"conexiones__conexion__deshabilitar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"El id de la conexión (conn_…)."},"sistema":{"type":"string","description":"El código del sistema de la conexión."},"nombre":{"type":"string","description":"El nombre de la conexión."},"estado":{"type":"string","enum":["active","disabled","pending"],"description":"En qué estado está la conexión. 'active' = utilizable. 'disabled' = pausada, sus tools responden 'connection_disabled'. 'pending' = creada pero todavía sin credencial vinculada."},"cambiada":{"type":"boolean","description":"true si esta llamada cambió el estado; false si la conexión ya estaba así y no se tocó nada."}},"required":["id","sistema","nombre","estado","cambiada"],"additionalProperties":false},"conexiones__conexion__eliminar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"conexionId":{"type":"string","description":"conn_… de la conexión a eliminar."},"confirmarNombre":{"type":"string","description":"El nombre exacto de la conexión, tal como aparece en 'nombre' de conexiones.estado.consultar. Es la confirmación: si no coincide carácter por carácter, no se borra nada."}},"required":["conexionId","confirmarNombre"]},"conexiones__conexion__eliminar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"El id de la conexión que se eliminó (conn_…). Ya no sirve como connectionId."},"sistema":{"type":"string","description":"El código del sistema de la conexión eliminada."},"nombre":{"type":"string","description":"El nombre que tenía la conexión."},"registros":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros guardados de ese sistema se borraron con ella (documentos, movimientos, saldos y respuestas guardadas)."},"sincronizaciones":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas sincronizaciones de su historial se borraron."},"webhooks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas suscripciones de webhook atadas a esta conexión se borraron."}},"required":["id","sistema","nombre","registros","sincronizaciones","webhooks"],"additionalProperties":false},"conexiones__conexion__habilitar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"conexionId":{"type":"string","description":"conn_… de la conexión a habilitar, tal como lo devuelve conexiones.estado.consultar."}},"required":["conexionId"]},"conexiones__conexion__habilitar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"El id de la conexión (conn_…)."},"sistema":{"type":"string","description":"El código del sistema de la conexión."},"nombre":{"type":"string","description":"El nombre de la conexión."},"estado":{"type":"string","enum":["active","disabled","pending"],"description":"En qué estado está la conexión. 'active' = utilizable. 'disabled' = pausada, sus tools responden 'connection_disabled'. 'pending' = creada pero todavía sin credencial vinculada."},"cambiada":{"type":"boolean","description":"true si esta llamada cambió el estado; false si la conexión ya estaba así y no se tocó nada."},"costoAdicional":{"anyOf":[{"type":"object","properties":{"montoUsd":{"type":"number","description":"Lo que suma al mes, en dólares y sin IVA."},"montoUsdConEmision":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo que suma al mes si la conexión del SII se crea con emisión (cuenta como 2,5 conexiones). null si el sistema no emite. Siempre null en conexiones.conexion.habilitar, donde la variante ya está fijada."},"planNombre":{"type":"string","description":"El plan de la organización, como lo ve la persona."},"incluidas":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas conexiones incluye ese plan."},"mensaje":{"type":"string","description":"La frase lista para decírsela a la persona."}},"required":["montoUsd","montoUsdConEmision","planNombre","incluidas","mensaje"],"additionalProperties":false},{"type":"null"}],"description":"Lo que suma esta conexión a la próxima renovación, porque la organización ya usa las conexiones que incluye su plan. null cuando no suma nada o cuando la conexión ya estaba habilitada. Si no es null, díselo a la persona."}},"required":["id","sistema","nombre","estado","cambiada","costoAdicional"],"additionalProperties":false},"conexiones__enlace__crear__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sistema":{"description":"Código del sistema, tal como lo devuelve conexiones.sistemas.listar. OMÍTELO si no sabes con cuál trabaja quien va a recibir el enlace: entonces el enlace abre el catálogo y la persona elige ahí. Es obligatorio cuando modo es 'reconectar', porque esa conexión ya tiene su sistema.","type":"string"},"modo":{"default":"crear","description":"'crear' para una conexión nueva; 'reconectar' para renovar la credencial de una que ya existe.","type":"string","enum":["crear","reconectar"]},"conexionId":{"description":"conn_…, obligatorio cuando modo es 'reconectar'.","type":"string"}}},"conexiones__enlace__crear__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","description":"El enlace de un solo uso. Compártelo tal cual, con el dominio visible."},"dominio":{"type":"string","description":"El dominio del enlace, ya extraído para mostrarlo junto a la URL."},"sistema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código del sistema que se va a conectar, o null si el enlace deja que la persona lo elija."},"sistemaNombre":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre del sistema, para presentar el enlace con claridad. null cuando el enlace no fija uno."},"modo":{"type":"string","enum":["crear","reconectar"],"description":"Si el enlace crea una conexión nueva o renueva la credencial de una existente."},"expiraEn":{"type":"string","description":"Cuándo vence el enlace (ISO 8601). Vencido, hay que crear otro."},"intentosMaximos":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos intentos de login admite antes de agotarse."},"advertencia":{"type":"string","description":"Texto de presentación segura del enlace, listo para mostrar a la persona."},"costoAdicional":{"anyOf":[{"type":"object","properties":{"montoUsd":{"type":"number","description":"Lo que suma al mes, en dólares y sin IVA."},"montoUsdConEmision":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo que suma al mes si la conexión del SII se crea con emisión (cuenta como 2,5 conexiones). null si el sistema no emite. Siempre null en conexiones.conexion.habilitar, donde la variante ya está fijada."},"planNombre":{"type":"string","description":"El plan de la organización, como lo ve la persona."},"incluidas":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas conexiones incluye ese plan."},"mensaje":{"type":"string","description":"La frase lista para decírsela a la persona antes de entregar el enlace."}},"required":["montoUsd","montoUsdConEmision","planNombre","incluidas","mensaje"],"additionalProperties":false},{"type":"null"}],"description":"Lo que suma a la próxima renovación la conexión que nazca de este enlace, porque la organización ya usa las conexiones que incluye su plan. null cuando no suma nada. Si no es null, díselo a la persona ANTES de entregar el enlace, con 'mensaje'. Con un enlace sin sistema aplica si el que elija se cobra. Si trae 'montoUsdConEmision', dile los dos montos: leer y emitir."}},"required":["url","dominio","sistema","sistemaNombre","modo","expiraEn","intentosMaximos","advertencia","costoAdicional"],"additionalProperties":false},"conexiones__estado__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sistema":{"description":"Filtra por código de sistema.","type":"string"},"conexionId":{"description":"conn_…, filtra una conexión puntual.","type":"string"}}},"conexiones__estado__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"conexiones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"El id de la conexión (conn_…). Es lo que va en la cabecera 'X-Connect-Connection' de cada llamada a este sistema."},"sistema":{"type":"string","description":"El código del sistema al que pertenece esta conexión."},"nombre":{"type":"string","description":"El nombre con que se creó la conexión, normalmente la empresa a la que pertenece la credencial."},"estado":{"type":"string","enum":["active","disabled","pending"],"description":"En qué estado está la conexión. 'active' = utilizable. 'disabled' = pausada, sus tools responden 'connection_disabled'. 'pending' = creada pero todavía sin credencial vinculada."},"credencial":{"type":"string","enum":["linked","invalid","revoked","ausente"],"description":"En qué estado está la credencial de esta conexión. 'linked' = vinculada y utilizable. 'invalid' = el sistema externo la rechazó, hay que reconectar. 'revoked' = se revocó a propósito. 'ausente' = nunca se entregó. Todo lo que no sea 'linked' se arregla con 'conexiones.enlace.crear' en modo 'reconectar'. OJO: 'linked' NO es un certificado de salud. Dice que alguien entregó la credencial y que se aceptó en su momento, no que hoy siga sirviendo."},"verificadaEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se probó por última vez la credencial contra el sistema externo (ISO 8601). 'null' si nunca se probó. Una fecha vieja no invalida la credencial por sí sola."},"alcances":{"type":"array","items":{"type":"string"},"description":"Los módulos de datos habilitados en esta conexión. Pedir uno que no esté en esta lista responde 'alcance_not_enabled'."},"cadencia":{"anyOf":[{"type":"string","enum":["off","daily","12h","4h","6h"]},{"type":"null"}],"description":"CADA CUÁNTO sincroniza sola esta conexión. Es la frecuencia, no si está corriendo. 'null' = todavía no se le sembró una. NO decidas con este campo solo: un 'off' puede ser «nadie la sincroniza por ti» o «la detuvimos nosotros», y cuál de los dos es lo dice 'cadenciaEstado'."},"cadenciaEstado":{"type":"string","enum":["activa","pausada_credencial","pausada_otro"],"description":"Si la sincronización automática está corriendo, y cuando no, por qué. 'activa' = nada la detiene; si además 'cadencia' es 'off' o 'null', nadie la sincroniza por ti, así que llama a la tool 'conexion.sincronizar' del sistema cuando quieras datos frescos. 'pausada_credencial' = la credencial dejó de servir y la detuvimos: NO llames a 'conexion.sincronizar', es un login real que va a fallar y en algunos bancos quema la única sesión que permiten; el remedio es 'conexiones.enlace.crear' en modo 'reconectar'. 'pausada_otro' = detenida por otro motivo, sincronizar tampoco corresponde y no hay nada que puedas hacer desde aquí. Este campo manda sobre 'credencial': una conexión auto-pausada sigue leyendo 'linked'."},"trabajos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"El id de esta sincronización programada (sjb_…)."},"estado":{"type":"string","enum":["queued","running","succeeded","failed","partial"],"description":"En qué va la sincronización. 'queued' y 'running' significan que todavía está trabajando: espera antes de concluir que no hay datos. 'succeeded' terminó bien, 'partial' escribió una parte y 'failed' no escribió nada, con la causa en 'error'."},"periodo":{"type":"string","description":"El mes que sincronizó esta corrida, en formato AAAA-MM."},"alcances":{"type":"array","items":{"type":"string"},"description":"Qué módulos de datos abarcó esta corrida."},"registros":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántos registros escribió. 'null' significa que todavía no se sabe (la corrida no terminó), y es distinto de un 0, que sí es un resultado: ese período no tenía nada."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La causa de la falla cuando 'estado' es 'failed'. 'null' en cualquier otro caso."}},"required":["id","estado","periodo","alcances","registros","error"],"additionalProperties":false},"description":"Las últimas sincronizaciones programadas de esta conexión, de la más reciente a la más antigua."},"datosListos":{"type":"boolean","description":"La respuesta a «¿ya puedo leer?» para los meses que Connect mantiene al día: alguna sincronización terminó bien y ninguno de esos meses está en curso. Una carga de meses anteriores no la apaga; el estado de cada mes está en 'historico'. En Previred también exige que no queden períodos o alcances fallidos sin recuperar de esos meses. Revísalo antes de concluir que no hay datos, porque un listado vacío con 'datosListos' en false significa «espera», no «no tienes nada». Un período legítimamente sin registros cuenta como sincronización exitosa: este campo no mira si hay filas."},"historico":{"anyOf":[{"type":"object","properties":{"piso":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Desde qué mes (AAAA-MM) se puede cargar en el panel: el inicio de actividades de la empresa o, en el SII, agosto 2017 si la empresa es anterior o no se conoce su inicio. 'null' si no hay piso."},"cargados":{"type":"array","items":{"type":"object","properties":{"desde":{"type":"string","description":"Primer mes del tramo (AAAA-MM), el más viejo."},"hasta":{"type":"string","description":"Último mes del tramo (AAAA-MM), el más nuevo."}},"required":["desde","hasta"],"additionalProperties":false},"description":"Meses cargados, en tramos seguidos (AAAA-MM), del más nuevo al más viejo."},"incompletos":{"type":"array","items":{"type":"string"},"description":"Meses (AAAA-MM) que se cargaron a medias o no se pudieron traer."},"cargarMas":{"type":"string","enum":["disponible","requiere_plan","no_aplica","no_disponible"],"description":"'requiere_plan' = la prueba solo incluye los 3 meses más recientes; cargar anteriores requiere un plan activo. 'no_aplica' = la empresa no tiene meses anteriores que cargar. 'no_disponible' = Ahora no se puede cargar: la conexión está en pausa, la suscripción tiene un problema o no se pudo leer el plan. Revisa el estado de la conexión y Facturación."}},"required":["piso","cargados","incompletos","cargarMas"],"additionalProperties":false},{"type":"null"}],"description":"Qué meses están cargados. 'null' en sistemas sin histórico. Un mes que no aparece en 'cargados' no está cargado: no informes su vacío como cero."},"herramientas":{"type":"array","items":{"type":"string"},"description":"Los ids de tool que ya puedes invocar sobre esta conexión. Si tu cliente MCP todavía no los muestra, llámalos pasando el id en 'tool': con 'execute' los de lectura y con 'execute_write' los que escriben (la ficha de 'search_docs' dice la puerta de cada uno)."}},"required":["id","sistema","nombre","estado","credencial","verificadaEn","alcances","cadencia","cadenciaEstado","trabajos","datosListos","historico","herramientas"],"additionalProperties":false},"description":"Las conexiones de esta organización que pasan el filtro, con su estado y sus últimas sincronizaciones."}},"required":["conexiones"],"additionalProperties":false},"conexiones__sistemas__listar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sistema":{"description":"Filtra por código de sistema. Omítelo para verlos todos.","type":"string"}}},"conexiones__sistemas__listar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sistemas":{"type":"array","items":{"type":"object","properties":{"codigo":{"type":"string","description":"El código del sistema. Es el valor exacto que espera 'conexiones.enlace.crear'; no lo adivines a partir del nombre."},"nombre":{"type":"string","description":"El nombre largo del sistema, para escribirlo completo la primera vez."},"nombreCorto":{"type":"string","description":"El nombre corto, para listas y selectores."},"insignia":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La categoría que muestra el selector (por ejemplo 'TRIBUTARIO' o 'BANCO EMPRESAS'). Solo presentación."},"dominio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El dominio del sistema externo, solo para mostrarlo. Nunca es la dirección a la que se llama."},"requiereNavegador":{"type":"boolean","description":"'true' significa que el login de este sistema abre un navegador remoto y tarda decenas de segundos. Avísalo antes de empezar, para que la espera no parezca que algo se colgó."},"alcances":{"type":"array","items":{"type":"object","properties":{"codigo":{"type":"string","description":"El código del módulo de datos, tal como se pasa en 'alcances' al sincronizar."},"etiqueta":{"type":"string","description":"El nombre del módulo en lenguaje de producto, para mostrárselo a una persona."}},"required":["codigo","etiqueta"],"additionalProperties":false},"description":"Los módulos de datos que este sistema ofrece. Al conectarlo eliges cuáles quedan habilitados."},"conectado":{"type":"boolean","description":"'true' si esta organización ya tiene al menos una conexión de este sistema. Si es 'false', el camino es 'conexiones.enlace.crear'."},"conexiones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"El id de la conexión (conn_…). Es lo que va en la cabecera 'X-Connect-Connection' de cada llamada a este sistema."},"nombre":{"type":"string","description":"El nombre con que se creó la conexión, normalmente la empresa a la que pertenece la credencial."},"estado":{"type":"string","enum":["active","disabled","pending"],"description":"En qué estado está la conexión. 'active' = utilizable. 'disabled' = pausada, sus tools responden 'connection_disabled'. 'pending' = creada pero todavía sin credencial vinculada."},"credencial":{"type":"string","enum":["linked","invalid","revoked","ausente"],"description":"En qué estado está la credencial de esta conexión. 'linked' = vinculada y utilizable. 'invalid' = el sistema externo la rechazó, hay que reconectar. 'revoked' = se revocó a propósito. 'ausente' = nunca se entregó. Todo lo que no sea 'linked' se arregla con 'conexiones.enlace.crear' en modo 'reconectar'. OJO: 'linked' NO es un certificado de salud. Dice que alguien entregó la credencial y que se aceptó en su momento, no que hoy siga sirviendo."}},"required":["id","nombre","estado","credencial"],"additionalProperties":false},"description":"Las conexiones que esta organización ya tiene de este sistema. Vacío cuando 'conectado' es false."},"herramientas":{"type":"array","items":{"type":"string"},"description":"Los ids de tool que quedan disponibles al conectar este sistema. Los puedes aprender ANTES de conectar e invocarlos con 'execute' pasando el id en 'tool', sin esperar a que tu cliente MCP refresque su lista."}},"required":["codigo","nombre","nombreCorto","insignia","dominio","requiereNavegador","alcances","conectado","conexiones","herramientas"],"additionalProperties":false},"description":"El catálogo de sistemas conectables, con el estado de cada uno para esta organización."}},"required":["sistemas"],"additionalProperties":false},"core__timestamp__now__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"timezone":{"default":"UTC","description":"IANA tz, p.ej. America/Santiago","type":"string"}}},"core__timestamp__now__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"iso":{"type":"string","description":"La hora del servidor en ISO 8601, SIEMPRE en UTC. No se convierte a la zona que pediste."},"unix":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"La misma hora como epoch Unix, en segundos."},"timezone":{"type":"string","description":"Eco de la zona horaria que pediste. Confirma qué se recibió; no cambia el valor de 'iso'."}},"required":["iso","unix","timezone"],"additionalProperties":false},"echo__message__reflect__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","description":"Texto a reflejar"}},"required":["text"]},"echo__message__reflect__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","description":"El mismo texto que mandaste, sin cambios."},"length":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos caracteres tiene ese texto."}},"required":["text","length"],"additionalProperties":false},"indicadores__serie__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigo":{"type":"string","enum":["UF","DOLAR","EURO","IPC","UTM"],"description":"Código del indicador económico"},"desde":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"Primer día del rango, inclusive, en formato AAAA-MM-DD."},"hasta":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"Último día del rango, inclusive, en formato AAAA-MM-DD."},"limite":{"default":1000,"description":"Máximo de puntos a devolver (tope duro 1000)","type":"integer","minimum":1,"maximum":1000}},"required":["codigo","desde","hasta"]},"indicadores__serie__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigo":{"type":"string","description":"Eco del código del indicador al que corresponde este valor."},"unidad":{"type":"string","description":"En qué unidad está expresada la serie. UF, DOLAR, EURO y UTM vienen en pesos chilenos ('CLP'); el IPC viene en 'pct', porque es la variación mensual en por ciento y no un monto. La unidad es del INDICADOR, no del rango: si 'valores' llega vacío este campo viene igual. Solo es la cadena vacía cuando el indicador no tiene ni un dato en todo el almacén."},"valores":{"type":"array","items":{"type":"object","properties":{"fecha":{"type":"string","description":"El día de este punto, en formato AAAA-MM-DD."},"valor":{"type":"number","description":"El valor de ese día, en la unidad que dice 'unidad'."}},"required":["fecha","valor"],"additionalProperties":false},"description":"Los puntos de la serie dentro del rango, en orden ascendente por fecha. Solo trae los días que tienen dato propio: esta tool no arrastra, a diferencia de 'indicadores.valor.consultar', así que un rango con fines de semana devuelve menos puntos que días pedidos. Puede venir recortada por 'limite'."}},"required":["codigo","unidad","valores"],"additionalProperties":false},"indicadores__valor__actual__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigo":{"type":"string","enum":["UF","DOLAR","EURO","IPC","UTM"],"description":"Código del indicador económico"}},"required":["codigo"]},"indicadores__valor__actual__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigo":{"type":"string","description":"Eco del código del indicador al que corresponde este valor."},"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"La fecha del valor devuelto. Puede ser futura (UF/UTM se publican por adelantado) o pasada (ingesta atrasada)."},"valor":{"type":"number","description":"El valor del indicador en esa fecha, en la unidad que dice 'unidad'."},"unidad":{"type":"string","description":"En qué unidad está expresado el valor. UF, DOLAR, EURO y UTM vienen en pesos chilenos ('CLP'); el IPC viene en 'pct', porque es la variación mensual en por ciento y no un monto. Lee este campo antes de tratar el número como plata."},"antiguedadDias":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Días entre 'fecha' y hoy en America/Santiago. 0 = el valor es de hoy; NEGATIVO = está fechado en el futuro, normal en UF y UTM que se publican por adelantado. El POSITIVO se lee según la FRECUENCIA del indicador, y confundirlas hace reportar caída una fuente sana: en los DIARIOS (UF, DOLAR, EURO) un positivo que se estira más allá de un fin de semana o un feriado sí significa que la ingesta dejó de correr; en los MENSUALES (IPC, UTM), que se fechan el día 1 del mes que miden, el número crece un día por día y eso es lo ESPERADO: la UTM llega a ~31 antes de que salga la del mes siguiente, y el IPC suma encima su rezago de publicación (el dato de un mes se publica a comienzos del siguiente), así que su normal llega a los dos meses. Medido el 2026-09-01, el IPC devolvió 62 con el dato de julio y la fuente al día. Compáralo contra tu propia tolerancia POR FRECUENCIA antes de calcular plata con este número."}},"required":["codigo","fecha","valor","unidad","antiguedadDias"],"additionalProperties":false},"indicadores__valor__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigo":{"type":"string","enum":["UF","DOLAR","EURO","IPC","UTM"],"description":"Código del indicador económico"},"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"La fecha a la que quieres el valor vigente, en formato AAAA-MM-DD. Si ese día no tiene dato propio se arrastra el último anterior, así que pedir un fin de semana o una fecha futura responde 200 con 'esArrastre' en true, nunca un error."}},"required":["codigo","fecha"]},"indicadores__valor__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigo":{"type":"string","description":"Eco del código del indicador al que corresponde este valor."},"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"La fecha del valor DEVUELTO. Si 'esArrastre' es true, es anterior a 'fechaSolicitada'."},"valor":{"type":"number","description":"El valor del indicador vigente a esa fecha, en la unidad que dice 'unidad'."},"unidad":{"type":"string","description":"En qué unidad está expresado el valor. UF, DOLAR, EURO y UTM vienen en pesos chilenos ('CLP'); el IPC viene en 'pct', porque es la variación mensual en por ciento y no un monto. Lee este campo antes de tratar el número como plata."},"fechaSolicitada":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"Eco de la fecha que pediste, para poder compararla sin guardarla tú."},"esArrastre":{"type":"boolean","description":"true = la fecha pedida NO tiene dato propio y este valor viene de una fecha anterior ('fecha'). false = es el valor de esa fecha exacta. Míralo antes de usar el número: un arrastre de un día sobre un fin de semana es normal, uno de tres semanas significa que la fuente está caída."}},"required":["codigo","fecha","valor","unidad","fechaSolicitada","esArrastre"],"additionalProperties":false},"itau_empresas__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos","transferencias"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"itau_empresas__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"cuentasConsultadas":{"description":"Cuántas cuentas se alcanzaron a consultar. Es lo que vuelve interpretable un 'recordsSynced: 0': cero con una cuenta consultada significa que el portal no publicó nada en su ventana, y cero con cero cuentas significa que ni siquiera se llegó a preguntar. Los dos casos traen el mismo 0, así que revisa este campo antes de reportar «no hay datos».","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"itau_empresas__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"itau_empresas__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"itau_empresas__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"numeroCuenta":{"description":"Filtra por un número de cuenta. Omítelo para ver los movimientos de todas las cuentas de la conexión.","type":"string"},"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"type":{"description":"Filtra por el eje del monto: 'credit' es plata que SALE y 'debit' plata que ENTRA, según el libro del banco. Omítelo para ver los dos.","type":"string","enum":["credit","debit"]},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"itau_empresas__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"El identificador con el que Connect guardó esta fila. Itaú no publica un número de movimiento, así que Connect lo deriva del contenido de la fila (fecha, monto, glosa, documento y el saldo arrastrado). Úsalo para deduplicar en tu propio sistema; no es un folio del banco."},"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece el movimiento."},"periodo":{"type":"string","description":"El mes (AAAA-MM) bajo el que está archivada la fila, derivado de la FECHA del movimiento y no del mes con que se pidió el sync. No entra en su identidad: pedirlo bajo otro período no separa el mismo movimiento en dos."},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha del movimiento, en formato AAAA-MM-DD. No trae hora: la cartola no la informa. null si el portal no trajo la celda."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La glosa del movimiento tal como aparece en la cartola (por ejemplo 'TRANSFERENCIA DE FONDOS')."},"documento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El número de documento asociado al movimiento, cuando el portal lo trae. Itaú lo deja vacío (o en ceros) en cerca de una de cada cuatro filas: pagos masivos y cargos automáticos, por ejemplo. Ahí llega null, nunca '000000000'."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible lo trae 'display'. Un null significa que el portal no trajo la celda, que no es lo mismo que cero."},"type":{"anyOf":[{"type":"string","enum":["credit","debit"]},{"type":"null"}],"description":"Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldo":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo que queda en la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo."},"oficina":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La sucursal que el portal asocia al movimiento, en su propio texto (por ejemplo 'OPERACIONES CENTRALES')."},"contraparte":{"anyOf":[{"type":"object","properties":{"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT de la contraparte, en formato '<cuerpo>-<DV>' sin puntos y con el DV en mayúscula. Es el mismo formato en que Connect lo guarda, así que sirve tal cual para cruzar contra documentos del SII."},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre o razón social de la contraparte, tal como lo publica el banco."},"banco":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco de la contraparte, en el texto del propio Itaú (por ejemplo 'BANCO DE CHILE / EDWARDS')."}},"required":["rut","nombre","banco"],"additionalProperties":false},{"type":"null"}],"description":"Quién está al otro lado, cuando el movimiento es una transferencia y su documento calza con una TEF ya sincronizada. null significa que Connect no pudo resolverla: o el movimiento no es una transferencia, o el alcance 'transferencias' no está habilitado, o esa TEF cae fuera de los meses sincronizados. NUNCA significa que la transferencia no tuvo contraparte."},"superficie":{"anyOf":[{"type":"string","enum":["ultimos_movimientos","movimientos_productos","saldos_y_movimientos","cartola_historica"]},{"type":"null"}],"description":"Por cuál pantalla del portal se leyó la fila. Es metadato de procedencia y no entra en la identidad del movimiento, así que el mismo movimiento visto por dos pantallas no se duplica. null en filas guardadas antes de que Connect registrara este dato."},"syncedAt":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la sincronización puede haber dejado de correr (por ejemplo, con la conexión pausada tras varios fallos) mientras esta tool sigue respondiendo con filas antiguas."}},"required":["id","numeroCuenta","periodo","fecha","descripcion","documento","monto","type","display","saldo","oficina","contraparte","superficie","syncedAt"],"additionalProperties":false},"description":"Los movimientos guardados que calzan con los filtros, del más reciente al más antiguo. Una lista vacía significa que ese período no se ha sincronizado, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["movimientos","cursor"],"additionalProperties":false},"itau_empresas__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD","description":"Filtra por el día de la foto de saldo, en formato AAAA-MM-DD. Si lo omites, la primera página ya trae las fotos más recientes que haya guardadas."},"numeroCuenta":{"description":"Filtra por un número de cuenta. Omítelo para ver todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"itau_empresas__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que corresponde esta foto de saldo."},"currency":{"type":"string","description":"La moneda de la cuenta en código ISO ('CLP', 'USD'). El portal la publica como palabra ('Pesos') y Connect la normaliza antes de guardarla. Una etiqueta que el portal estrene y Connect no conozca llega como 'moneda_<etiqueta>' en vez de asumirse pesos."},"observedDay":{"type":"string","description":"El día de esta foto de saldo, en formato AAAA-MM-DD. Lo pone Connect al sincronizar, porque la ficha de Itaú no publica fecha. Hay una foto por cuenta y por día: volver a sincronizar el mismo día actualiza esta fila en vez de agregar otra."},"observedAt":{"type":"string","description":"El instante exacto (ISO 8601) en que se tomó esta foto: el timestamp completo, no sólo el día. Para filtrar o comparar por día usa 'observedDay'."},"saldoTotal":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo total de la cuenta. Es un balance, no una operación: conserva su propio signo (un sobregiro es negativo) y no lleva 'type'. Un null significa que el portal no trajo la celda, que no es lo mismo que cero."},"retenciones":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo retenido según el portal. Un 0 afirma que no hay retención; un null dice que la celda no vino, que es un dato distinto."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta. Es un balance: conserva su propio signo y no lleva 'type'."},"saldoDisponibleLineaCredito":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible contando la línea de crédito. Un null significa que el portal no trajo la celda, no que la cuenta no tenga línea."},"syncedAt":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la sincronización puede haber dejado de correr (por ejemplo, con la conexión pausada tras varios fallos) mientras esta tool sigue respondiendo con filas antiguas."}},"required":["numeroCuenta","currency","observedDay","observedAt","saldoTotal","retenciones","saldoDisponible","saldoDisponibleLineaCredito","syncedAt"],"additionalProperties":false},"description":"Las fotos de saldo guardadas que calzan con los filtros, de la más reciente a la más antigua. Una lista vacía significa que la conexión nunca sincronizó saldos, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["saldos","cursor"],"additionalProperties":false},"itau_empresas__transferencias__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"direccion":{"description":"Filtra por sentido. Omítelo para ver las dos.","type":"string","enum":["enviada","recibida"]},"estado":{"description":"Filtra por resultado. Usa 'ok' para excluir las que el banco no cursó.","type":"string","enum":["ok","error","desconocido"]},"contraparteRut":{"description":"Filtra por el RUT de la contraparte. Acepta cualquier formato ('76.123.456-0' o '76123456-0'): Connect lo canoniza antes de buscar. Es el filtro para conciliar contra un proveedor o un cliente concreto.","type":"string"},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"itau_empresas__transferencias__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"transferencias":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"El número de transferencia que acuña Itaú. Un movimiento no tiene número y Connect lo identifica por su contenido; esto, en cambio, es un identificador del propio banco: es estable entre sincronizaciones y es el mismo valor que aparece en 'documento' del movimiento asociado."},"direccion":{"type":"string","enum":["enviada","recibida"],"description":"Si la plata SALIÓ ('enviada') o ENTRÓ ('recibida'). Reemplaza al eje credit/debit: en una transferencia el sentido es la pantalla, no una columna."},"estado":{"type":"string","enum":["ok","error","desconocido"],"description":"El resultado según el banco. 'error' es una transferencia que NO se cursó y por lo tanto no tiene movimiento asociado. 'desconocido' es un estado que el banco estrenó y Connect todavía no interpreta: no lo trates como exitoso."},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha y hora de la transferencia (ISO 8601). A diferencia de la cartola, esta pantalla SÍ informa la hora."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó. A diferencia de saldos y movimientos, esta pantalla SÍ respeta el mes pedido, así que el período es real y no sólo una etiqueta. Aun así no entra en la identidad: volver a traerla bajo otro mes no crea una fila nueva."},"contraparte":{"type":"object","properties":{"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT de la contraparte, en formato '<cuerpo>-<DV>' sin puntos y con el DV en mayúscula. Es el mismo formato en que Connect lo guarda, así que sirve tal cual para cruzar contra documentos del SII."},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre o razón social de la contraparte, tal como lo publica el banco."},"banco":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco de la contraparte, en el texto del propio Itaú (por ejemplo 'BANCO DE CHILE / EDWARDS')."}},"required":["rut","nombre","banco"],"additionalProperties":false,"description":"Quién está al otro lado. El banco lo publica en el 100 % de estas filas."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Magnitud de la transferencia SIN signo. El sentido lo da 'direccion' y el signo visible lo trae 'display'."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"cuentaPropia":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La cuenta TUYA involucrada, cuando el banco la publica. Hoy sólo la trae el listado de recibidas; en las enviadas Itaú informa el banco de destino pero no la cuenta."},"syncedAt":{"type":"string","description":"Cuándo se leyó esta fila del banco (ISO 8601). Si está vieja, la sincronización puede haber dejado de correr (por ejemplo, con la conexión pausada tras varios fallos) mientras esta tool sigue respondiendo con filas antiguas."}},"required":["id","direccion","estado","fecha","periodo","contraparte","monto","display","cuentaPropia","syncedAt"],"additionalProperties":false},"description":"Las transferencias guardadas que calzan con los filtros, de la más reciente a la más antigua. Una lista vacía significa que ese mes no se ha sincronizado, no que no haya transferencias."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["transferencias","cursor"],"additionalProperties":false},"mercadopublico__adjuntos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigoLicitacion":{"type":"string","maxLength":50,"pattern":"^\\d+-\\d+-[A-Z0-9]+$","description":"ID público de la licitación, por ejemplo 803-6-LE26. No acepta URLs."}},"required":["codigoLicitacion"]},"mercadopublico__adjuntos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigoLicitacion":{"type":"string","description":"ID público de la licitación consultada."},"estado":{"type":"string","enum":["no_solicitada","pendiente","procesando","disponible","parcial","fallido"],"description":"Estado de la descarga solicitada a Connect."},"solicitadoEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO 8601 de la última solicitud, o null si no existe."},"finalizadoEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO 8601 en que terminó la descarga, si corresponde."},"errorCodigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código acotado de fallo, sin datos de sesión ni URLs del portal."},"consultarEnSegundos":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Mientras la descarga está pendiente o en proceso, cuántos segundos esperar antes de volver a llamar a mercadopublico.adjuntos.consultar. null cuando ya terminó o no hay solicitud."},"observadoEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO 8601 de la última inspección del portal conservada."},"totalAnexos":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Cantidad de anexos observados en el listado recorrido."},"completo":{"type":"boolean","description":"Se recorrió todo el listado y se descargaron los adjuntos PDF dentro de los límites. Los formatos no admitidos o las descargas pendientes se informan en motivosIncompletitud."},"motivosIncompletitud":{"type":"array","items":{"type":"string"},"description":"Razones por las que el inventario o las descargas requieren revisión."},"documentos":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SHA-256 del PDF conservado; identifica su versión sin depender de la fila del portal. null si el anexo no se descargó."},"nombre":{"type":"string","description":"Nombre declarado por el comprador para el anexo."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Descripción del anexo en el portal, si existe."},"tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de anexo informado por el portal, si existe."},"tamanoTexto":{"type":"string","description":"Tamaño tal como lo muestra la grilla del portal (por ejemplo '263 KB')."},"fechaTexto":{"type":"string","description":"Fecha del anexo tal como la muestra la grilla del portal, como texto sin normalizar y con formato no garantizado; no la parsees como fecha. Es parte de la identidad natural del anexo."},"estado":{"type":"string","enum":["descargado","omitido_no_pdf","omitido_tamano","no_descargado"],"description":"Estado del anexo en la grilla observada. 'descargado': hay PDF conservado (lleva archivoUrl). 'omitido_no_pdf': el anexo no es PDF. 'omitido_tamano': supera el tope de tamaño. 'no_descargado': se observó pero no se conserva (error o límite de la corrida)."},"bytes":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Tamaño en bytes del PDF conservado; null si no se descargó."},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Huella SHA-256 del PDF conservado; null si no se descargó."},"archivoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Enlace temporal al PDF conservado por Connect; null si no está descargado o no pudo firmarse. Nunca es una URL de sesión del portal."},"urlVenceEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO 8601 en que caduca archivoUrl, si se firmó."}},"required":["id","nombre","descripcion","tipo","tamanoTexto","fechaTexto","estado","bytes","sha256","archivoUrl","urlVenceEn"],"additionalProperties":false},"description":"Todos los anexos observados en la grilla, sin clasificar su contenido: los descargados llevan enlace firmado; el resto indica su estado."},"resultadoAnterior":{"type":"boolean","description":"true si los documentos son de una descarga anterior: hay una actualización en curso (pendiente o procesando) o la última actualización falló (fallido). observadoEn dice de cuándo son."}},"required":["codigoLicitacion","estado","solicitadoEn","finalizadoEn","errorCodigo","consultarEnSegundos","observadoEn","totalAnexos","completo","motivosIncompletitud","documentos","resultadoAnterior"],"additionalProperties":false},"mercadopublico__adjuntos__solicitar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigoLicitacion":{"type":"string","maxLength":50,"pattern":"^\\d+-\\d+-[A-Z0-9]+$","description":"ID público de la licitación, por ejemplo 803-6-LE26. No acepta URLs."}},"required":["codigoLicitacion"]},"mercadopublico__adjuntos__solicitar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"codigoLicitacion":{"type":"string","description":"ID público de la licitación consultada."},"estado":{"type":"string","enum":["no_solicitada","pendiente","procesando","disponible","parcial","fallido"],"description":"Estado de la descarga solicitada a Connect."},"solicitadoEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO 8601 de la última solicitud, o null si no existe."},"finalizadoEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO 8601 en que terminó la descarga, si corresponde."},"errorCodigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código acotado de fallo, sin datos de sesión ni URLs del portal."},"consultarEnSegundos":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Mientras la descarga está pendiente o en proceso, cuántos segundos esperar antes de volver a llamar a mercadopublico.adjuntos.consultar. null cuando ya terminó o no hay solicitud."}},"required":["codigoLicitacion","estado","solicitadoEn","finalizadoEn","errorCodigo","consultarEnSegundos"],"additionalProperties":false},"notta__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"notta__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"notta__dte__aprobacion__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID de la solicitud de aprobación: el `pending_id` que devolvió el 202 de `POST /dtes`. NO es el `id` del documento, que aparece en `result_ref` cuando la aprobación termina."}},"required":["id"]},"notta__dte__aprobacion__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID de esta solicitud de aprobación (el `pending_id` del 202). NO es el `id` del documento: ese llega en `result_ref` cuando la aprobación termina."},"status":{"type":"string","enum":["pending","approved","rejected","expired"],"description":"`pending` = esperando a una persona, no hay nada emitido todavía. `approved` = alguien aprobó y el documento siguió su curso (míralo en `result_ref`). `rejected` = alguien lo rechazó y no se emitió nada; el motivo va en `rejection_reason`. `expired` = venció `expires_at` sin que nadie decidiera, y tampoco se emitió nada. Los tres últimos son finales: reintentar esta solicitud no la revive."},"kind":{"type":"string","enum":["emit_dte","recepcion_evento"],"description":"Qué está esperando aprobación: `emit_dte` (emitir un documento) o `recepcion_evento` (aceptar o reclamar un documento recibido)."},"result_ref":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"El DTE que salió de la aprobación. Presente TAMBIÉN si el SII lo rechazó (D36)."},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El motivo que escribió la persona al rechazar (D41). null si no dijo por qué."},"expires_at":{"type":"string","description":"Instante ISO-8601 en que la solicitud vence si nadie decide. Pasado ese punto queda en `expired` y hay que volver a pedir la operación desde cero."},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante en que una persona aprobó o rechazó. null mientras siga `pending`."},"created_at":{"type":"string","description":"Instante en que se creó la solicitud."},"next_action":{"type":"string","enum":["wait_for_human_approval","get_dte","fix_and_retry","emit_dte_again"],"description":"Qué le toca al llamante en este estado, en el vocabulario que el resto de la API ya usa."},"links":{"type":"object","properties":{"dte":{"type":"string","description":"Ruta del documento que salió de la aprobación."}},"required":["dte"],"additionalProperties":false,"description":"Presente solo cuando hay `result_ref`."}},"required":["id","status","kind","result_ref","rejection_reason","expires_at","resolved_at","created_at","next_action"],"additionalProperties":false},"notta__dte__emitir__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tipo_dte":{"anyOf":[{"type":"number","const":33},{"type":"number","const":34},{"type":"number","const":56},{"type":"number","const":61}],"description":"Qué documento emitir: 33 factura afecta (con IVA), 34 factura exenta, 56 nota de débito, 61 nota de crédito. Una factura (33 o 34) exige forma_pago y el giro, la dirección y la comuna del receptor. Una nota (56 o 61) exige references[] al documento original y rut_emisor, y no lleva forma_pago ni descuento_global."},"receptor":{"type":"object","properties":{"rut":{"type":"string","pattern":"^\\d{1,8}-[\\dkK]$","description":"RUT de quien recibe el documento, sin puntos y con guion antes del dígito verificador. Si el dígito verificador no calza, la emisión se rechaza en validación y no se gasta folio."},"razon_social":{"type":"string","minLength":1,"maxLength":100,"description":"Nombre legal de la empresa o persona que recibe el documento, tal como saldrá impreso."},"giro":{"description":"Giro o actividad económica, MÁXIMO 40 caracteres: el SII no acepta más, así que un giro largo copiado de otra factura hay que abreviarlo antes de mandarlo (\"Asesoría y consultoría informática\", no la redacción completa del registro). OBLIGATORIO para facturas (tipo_dte 33 y 34) por norma del SII de junio 2026; opcional en notas (56/61). Pídeselo al usuario antes de emitir una factura: sin él la llamada se rechaza en validación.","type":"string","maxLength":40},"direccion":{"description":"Dirección del receptor. OBLIGATORIA para facturas (33/34) por norma del SII de junio 2026; opcional en notas (56/61).","type":"string","maxLength":70},"comuna":{"description":"Comuna del receptor. OBLIGATORIA para facturas (33/34) por norma del SII de junio 2026; opcional en notas (56/61).","type":"string","maxLength":20}},"required":["rut","razon_social"],"description":"A quién se le emite el documento. Para una factura (33 o 34) el SII exige además giro, direccion y comuna; una nota (56 o 61) no los pide."},"fecha_emision":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha de emisión del documento, en formato AAAA-MM-DD. Es obligatoria: Notta no la deriva del día en curso."},"items":{"minItems":1,"maxItems":60,"type":"array","items":{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":80,"description":"Qué se está cobrando en esta línea, tal como saldrá impreso en el documento."},"cantidad":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas unidades lleva la línea. Este conector la pide entera y tiene que ser MAYOR QUE CERO, incluso en una nota de crédito por devolución: lo que va en negativo ahí es 'monto_item', nunca la cantidad."},"precio_unitario":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Precio de UNA unidad, sin IVA: el impuesto se calcula después, sobre el total del documento. Este conector lo pide entero y no admite negativos (cero sí)."},"exento":{"type":"boolean","description":"true marca la línea como exenta de IVA; false, como afecta. Una factura exenta (tipo_dte 34) no admite líneas afectas: o todas van con exento en true, o corresponde emitir una 33."},"monto_item":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total de la línea, sin IVA: cantidad por precio_unitario, ya con el descuento_pct de la línea aplicado. Lo declara quien emite y el SII valida esa relación línea por línea; si no cuadra, la respuesta es un error de validación 'amount_arithmetic'."},"descuento_pct":{"description":"Descuento de ESTA línea, en porcentaje entre 0 y 100. Si lo usas, monto_item tiene que venir ya descontado. Omitirlo equivale a un descuento de cero.","type":"number","minimum":0,"maximum":100}},"required":["nombre","cantidad","precio_unitario","exento","monto_item"]},"description":"Las líneas del documento, entre 1 y 60 (el máximo que admite el SII). Los totales del documento (neto, exento, IVA y total) los calcula Notta a partir de estas líneas: no se mandan."},"forma_pago":{"description":"1=Contado, 2=Crédito, 3=Sin costo. OBLIGATORIO para facturas (tipo_dte 33 y 34); una nota (56/61) no lo lleva. Pregúntaselo al usuario antes de emitir: sin él la llamada se rechaza en validación.","anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"references":{"description":"Los documentos que esta nota corrige o anula. Una nota (56 o 61) exige al menos uno; una factura (33 o 34) no admite ninguno en esta versión, porque sus referencias son de otra clase (orden de compra, contrato, HES) y este conector todavía no las expone.","maxItems":40,"type":"array","items":{"type":"object","properties":{"line_num":{"type":"integer","minimum":1,"maximum":40,"description":"Número de línea de esta referencia dentro del documento, empezando en 1. No se deriva solo: lo declara quien emite, para controlar el orden."},"tipo_doc_ref":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tipo del documento referenciado, con el código del catálogo del SII (33 factura afecta, 34 factura exenta). Una nota de crédito (61) solo puede referenciar una 33 o una 34."},"folio_ref":{"description":"Folio del documento referenciado, o sea el identificador del documento que esta nota corrige o anula. Va EN TEXTO (ej. \"4712\"): pásalo tal como viene en la fila de sii.rcv.consultar.","type":"string"},"fecha_ref":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha de emisión del documento referenciado, en formato AAAA-MM-DD."},"cod_ref":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}],"description":"Qué le hace esta nota al documento referenciado: 1 lo anula, 2 corrige su texto (y entonces la nota no puede mover montos) y 3 corrige sus montos. En una nota de débito (56) tiene que calzar con nd_reason."},"razon_ref":{"type":"string","minLength":1,"description":"Por qué se emite esta nota sobre el documento referenciado, en texto libre. Viaja al documento tal cual."}},"required":["line_num","tipo_doc_ref","folio_ref","fecha_ref","cod_ref","razon_ref"]}},"correo_receptor":{"description":"Correo del receptor. Si lo indicas, Notta le envía el PDF y el XML cuando el SII acepta el documento; si no, el documento se emite igual y se puede entregar después con notta.dte.reenviar.","type":"string","maxLength":200,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"descuento_global":{"description":"Descuentos o recargos que aplican al TOTAL del documento, no a una línea. Solo en facturas (33 y 34): una nota (56 o 61) que los lleve se rechaza en validación, porque la ruta de notas de Notta los descartaría en silencio.","type":"array","items":{"type":"object","properties":{"tipo":{"type":"string","enum":["descuento","recargo"],"description":"'descuento' resta del total del documento y 'recargo' se lo suma. El signo lo pone este campo, así que 'valor' va siempre positivo."},"es_porcentaje":{"type":"boolean","description":"true lee 'valor' como un porcentaje; false lo lee como un monto fijo."},"valor":{"type":"number","exclusiveMinimum":0,"description":"Cuánto descontar o recargar, siempre positivo. Se interpreta como porcentaje o como monto fijo según 'es_porcentaje'."},"glosa":{"description":"Texto que explica el descuento o recargo. Viaja al documento tal cual.","type":"string"},"aplica_exento":{"description":"true aplica el ajuste sobre la base EXENTA. Omitirlo o ponerlo en false lo aplica sobre la base AFECTA, o sea mueve el neto antes de que se calcule el IVA.","type":"boolean"}},"required":["tipo","es_porcentaje","valor"]}},"rut_emisor":{"description":"Para notas de débito/crédito (56/61), el RUT emisor de la empresa: el de esta conexión. Las facturas (33/34) lo derivan solas.","type":"string","pattern":"^\\d{1,8}-[\\dkK]$"},"nd_reason":{"description":"Solo para nota de débito (56); el motivo cruza con el cod_ref de la referencia. correccion_monto: sube el monto de una factura ya emitida (cod_ref 3). reposicion_nc_anulada: repone una factura cuya nota de crédito se anuló (cod_ref 2, o 1 para anular la NC). interese_moratorio_contractual: intereses por mora PACTADOS en el contrato (cod_ref 3).","type":"string","enum":["correccion_monto","reposicion_nc_anulada","interese_moratorio_contractual"]}},"required":["tipo_dte","receptor","fecha_emision","items"]},"notta__dte__emitir__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"El identificador del documento en Notta. Es lo que reciben notta.dte.obtener, notta.dte.eventos, notta.dte.enlace_pdf, notta.dte.enlace_xml y notta.dte.reenviar."},"tipo_dte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El código de tipo de documento del catálogo del SII. Los que esta conexión emite son 33 (factura afecta), 34 (factura exenta), 56 (nota de débito) y 61 (nota de crédito)."},"folio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El folio del documento: el correlativo que sale de los folios autorizados (CAF) y con el que el SII lo identifica; es TEXTO, porque es un identificador y no una cantidad. Se consume una sola vez y no se reutiliza, así que emitir dos veces por error gasta dos. Viene en null cuando Notta todavía no lo informó."},"estado":{"type":"string","description":"El estado del documento. 'queued' es recién encolado con el folio ya asignado; 'EPR' es aceptado por el SII; 'RPR' y 'aceptado_con_reparos' son aceptado con reparos; 'RFR', 'RCT' y 'RSC' son rechazos terminales que ya no cambian. Decide por este campo, nunca por 'estado_legible'."},"rut_receptor":{"description":"El RUT de quien recibe el documento, sin puntos y con guion. Ausente cuando Notta no lo informó.","type":"string"},"montos":{"type":"object","properties":{"neto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Suma de las líneas afectas, antes de IVA."},"exento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Suma de las líneas marcadas con exento en true, que no pagan IVA."},"iva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El IVA que corresponde al neto."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Lo que el receptor debe pagar: neto más exento más IVA."}},"required":["neto","exento","iva","total"],"additionalProperties":false,"description":"Los totales del documento, calculados por Notta a partir de las líneas. Quien emite no los manda."},"sii_env":{"type":"string","description":"El ambiente del SII en el que vive el documento: 'cert' es certificación (pruebas) y 'prod' es producción. Lo decide la credencial de la conexión, nunca la llamada."},"fecha_emision":{"type":"string","description":"La fecha de emisión declarada en el documento, en formato AAAA-MM-DD."},"sii_glosa":{"description":"El texto con que el SII explicó un rechazo. Solo lo trae notta.dte.obtener, y solo cuando el SII dijo algo: la respuesta de la emisión nunca lo lleva.","type":"string"},"estado_legible":{"type":"string","description":"El 'estado' traducido a una frase en español para mostrarle a una persona. Es texto de presentación, no contrato: para decidir usa 'estado'."}},"required":["id","tipo_dte","folio","estado","montos","sii_env","fecha_emision","estado_legible"],"additionalProperties":false},"notta__dte__enlace_pdf__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."}},"required":["id"]},"notta__dte__enlace_pdf__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","description":"Enlace-capacidad de un solo documento (`https://app.notta.cl/d/<token>`). Sirve el PDF SIN sesión ni Bearer: el token es la credencial. Vence a los 15 minutos (D12)."},"expires_at":{"type":"string","description":"Vencimiento del enlace, ISO 8601."}},"required":["url","expires_at"],"additionalProperties":false},"notta__dte__enlace_xml__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."}},"required":["id"]},"notta__dte__enlace_xml__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","description":"Enlace-capacidad de un solo documento (`https://app.notta.cl/d/<token>`). Sirve el XML firmado SIN sesión ni Bearer: el token es la credencial. Vence a los 15 minutos (D12)."},"expires_at":{"type":"string","description":"Vencimiento del enlace, ISO 8601."}},"required":["url","expires_at"],"additionalProperties":false},"notta__dte__eventos__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."}},"required":["id"]},"notta__dte__eventos__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string","enum":["queued","sending","awaiting_sii","SOK","CRT","FOK","PDR","PRD","-11","EPR","RPR","aceptado_con_reparos","RFR","RCT","RSC","RCH","stuck","signed","accepted","sin_permiso_sii"],"description":"Estado en esta transición.\n\nVocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."},"at":{"type":"string","description":"ISO-8601 del momento observado"},"source":{"type":"string","enum":["local","sii"],"description":"Origen: transición local o estado reportado por el SII"},"glosa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Motivo que reporta el SII (rechazo/reparo); null si no aplica"}},"required":["status","at","source","glosa"],"additionalProperties":false,"description":"Un evento del documento: que le paso y cuando."},"description":"Transiciones del documento en orden cronológico, la más antigua primero."},"links":{"type":"object","properties":{"self":{"type":"string","description":"Este mismo feed: `GET /api/v1/dtes/{id}/events`."},"dte":{"type":"string","description":"El documento al que pertenecen estos eventos."}},"required":["self","dte"],"additionalProperties":false,"description":"Rutas relativas bajo `/api/v1` para volver al documento."}},"required":["data","links"],"additionalProperties":false},"notta__dte__listar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Default 20, máx 100"},"cursor":{"type":"string","description":"`next_cursor` de la página anterior. Opaco: no lo construyas ni lo modifiques."},"sort":{"type":"string","enum":["folio","monto_total","fecha_emision","sii_status","created_at"],"description":"Campo por el que se ordena. Default `created_at`. El cursor se emite atado a este orden: cambiarlo a mitad de recorrido devuelve 422 en vez de saltarse filas en silencio."},"dir":{"type":"string","enum":["asc","desc"],"description":"Sentido del orden. Default `desc`, o sea lo más reciente primero."},"sii_status":{"type":"string","description":"Estados SII a incluir, separados por coma (p. ej. `queued,sending,SOK`). Un valor fuera del vocabulario devuelve 422.\n\nClasificación GENERADA del mismo catálogo que usa el runtime, no una lista escrita a mano que pueda contradecirlo:\n\n`terminal: true` (el SII ya dio su veredicto; volver a consultar no puede devolver otra cosa) → EPR, RPR, aceptado_con_reparos, accepted, RFR, RCT, RSC, RCH\n\n`terminal: false` (el estado todavía puede cambiar) → queued, sending, signed, awaiting_sii, SOK, CRT, FOK, PDR, PRD, -11, stuck, sin_permiso_sii\n\n`stuck` y `sin_permiso_sii` NO son terminales aunque ya no haya un poll detrás: el SII nunca llegó a juzgar el documento, así que `POST /dtes/{id}/refresh-status` vuelve a consultar y responde 202, no `already_terminal` (en `sin_permiso_sii`, después de enrolar el RUT del certificado en Mi SII → Usuarios autorizados). `accepted` son los documentos importados del Respaldo del SII: el Servicio ya los aceptó en su momento y no tienen envío que consultar. `signed` es el DTE ya firmado y todavía sin subir.\n\n`awaiting_sii` y `aceptado_con_reparos` están DEPRECADOS: ningún proceso de Notta los escribe hoy. Este filtro los sigue aceptando para no romper a quien ya los consultaba; en código nuevo usa `RPR`.\n\nLa glosa y la acción sugerida de cada estado viajan en el bloque `estado` de cada documento."},"tipo_dte":{"anyOf":[{"type":"integer","minimum":0,"maximum":9999},{"type":"null"}],"description":"Código SII del tipo de documento (33 factura, 34 exenta, 52 guía de despacho, 56 nota de débito, 61 nota de crédito). Un valor no numérico o fuera de rango devuelve 422 `dte.list.tipo_invalido`. Alcanza también los documentos importados del Respaldo del SII."},"folio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Folio exacto. NO identifica un documento por sí solo: el mismo folio existe una vez por `tipo_dte` (y por ambiente), así que la respuesta es una lista, súmale `tipo_dte` para la coordenada exacta. Un valor no numérico o fuera de rango devuelve 422 `dte.list.folio_invalido`."},"rut_receptor":{"type":"string","description":"RUT del receptor. Acepta puntos, espacios y la `k` en minúscula (se normaliza a `BODY-DV`). El dígito verificador NO se valida: la columna es lo que declaró el emisor, y un DV que no cierra igual corresponde a documentos reales. Una forma que no es un RUT devuelve 422 `dte.list.rut_receptor_invalido`."},"fecha_emision_desde":{"type":"string","description":"`fecha_emision >=` (YYYY-MM-DD, inclusive)"},"fecha_emision_hasta":{"type":"string","description":"`fecha_emision <=` (YYYY-MM-DD, inclusive)"},"polled_since":{"type":"string","description":"Instante ISO-8601. Filtra por `sii_last_polled >=`, o sea TOCADO desde. Esa columna se estampa en cada escritura de estado, incluidas las de la emisión (`queued`, `sending`, `signed`), no solo en los polls al SII. Nunca pierde un cambio; sí devuelve documentos cuyo estado no cambió."},"receptor_estado":{"type":"string","enum":["reclamado","aceptado","en_plazo","aceptado_tacito","sin_info"],"description":"Filtra por lo que hizo el receptor con el documento (no es `sii_status`). Acepta los mismos cinco valores que publica el campo `receptor_estado` de cada fila. `reclamado` y `aceptado` son HECHOS que el SII registró y no se mueven; `en_plazo`, `aceptado_tacito` y `sin_info` se calculan contra el instante del request, así que un documento puede cambiar de bucket entre la página 1 y la 2 de una misma consulta paginada. Si necesitas una foto estable, filtra en tu lado con `fecha_recepcion_sii` y `plazo_reclamo_cierra`, que vienen en cada fila. Un valor fuera de esos cinco devuelve 422 `dte.list.receptor_estado_invalido`."}}},"notta__dte__listar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."},"folio":{"type":"string","description":"Folio que el SII asignó desde el CAF. La numeración corre por (RUT emisor, tipo de documento, ambiente), así que el folio SOLO no identifica un documento: el mismo número existe en otro tipo y en el otro ambiente. Para ubicarlo por folio, filtra también por `tipo_dte`."},"tipo_dte":{"type":"number","enum":[33,34,39,41,46,52,56,61,110,112],"description":"Código SII del tipo de documento: 33 factura afecta, 34 factura exenta, 46 factura de compra, 52 guía de despacho, 56 nota de débito, 61 nota de crédito, 110/112 exportación."},"rut_emisor":{"type":"string","description":"RUT de la empresa que emitió, en formato `CUERPO-DV` sin puntos (`76123456-0`)."},"rut_receptor":{"type":"string","description":"RUT del receptor del documento, en formato `CUERPO-DV` sin puntos (`76123456-0`)."},"razon_social_receptor":{"type":"string","description":"Razón social del receptor, tal como quedó en el documento emitido."},"monto_neto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto afecto EN PESOS CHILENOS, siempre. 0 en un documento exento, y también en una exportación (110/112), donde el total va en `monto_exento`."},"monto_exento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento del documento EN PESOS CHILENOS, siempre. 0 cuando no hay. En una exportación (110/112) NO es lo que declara la factura: el total exportado se registra aquí ya convertido, y el monto en su moneda viaja en `monto_moneda` con la moneda en `moneda_documento`. Vivía sólo en el DETALLE, así que cuadrar una exenta (34), o el exento de una 33 mixta, desde el listado costaba un `GET /dtes/{id}` por fila, que es el motivo por el que `monto_neto` e `iva` ya viajaban aquí."},"iva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA del documento EN PESOS CHILENOS. 0 cuando no hay monto afecto (documento exento o exportación)."},"monto_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total del documento EN PESOS CHILENOS, siempre: es lo que consumen el Libro de Ventas, las cuotas y el F29. En una exportación (110/112) es el EQUIVALENTE en pesos: lo que declara la factura viene en `monto_moneda`, y la moneda en `moneda_documento`."},"moneda_documento":{"type":"string","description":"Sólo en exportación (110/112): la moneda del documento, con la glosa del catálogo del SII (\"DOLAR USA\", \"EURO\"). Ausente en un documento en pesos, donde `monto_total` ya lo dice todo."},"monto_moneda":{"type":"number","description":"Sólo en exportación: el total EN la moneda del documento, con hasta 4 decimales. Es la cifra que dice la factura; `monto_total` es su equivalente en pesos al tipo de cambio del día."},"sii_status":{"type":"string","enum":["queued","sending","awaiting_sii","SOK","CRT","FOK","PDR","PRD","-11","EPR","RPR","aceptado_con_reparos","RFR","RCT","RSC","RCH","stuck","signed","accepted","sin_permiso_sii"],"description":"Vocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."},"estado":{"type":"object","properties":{"code":{"type":"string","description":"El mismo valor que `sii_status`, repetido aquí para que el bloque se explique solo. NO es un enum cerrado a propósito: el SII no publica una lista cerrada de códigos. Su instructivo termina la tabla con «Otros (no enumerados)», y Notta guarda verbatim lo que responde, así que puede traer uno que el catálogo no conozca (en producción ya aparecieron `106` y `107`). Un código desconocido llega clasificado como NO terminal, `en_proceso` y `contactar_soporte`, nunca como éxito."},"label":{"type":"string","description":"Glosa corta en español, para mostrar. AGREGA información al código, no lo reemplaza."},"descripcion":{"type":"string","description":"Qué pasó y qué significa, en prosa. Está para que no haya que inferir la causa: un `-11` es el código con que FALLA la consulta de estado mientras el SII todavía no registra el envío recién subido, no un estado del documento, y es el camino normal."},"terminal":{"type":"boolean","description":"`true` ⇒ el SII ya dio su veredicto y volver a preguntar no puede devolver otra cosa. Es la CONDICIÓN DE CORTE de cualquier bucle de espera: cortar por `sii_status === \"EPR\"` deja el bucle vivo para siempre ante un rechazo. `stuck` y `sin_permiso_sii` son `false` a propósito (no hay veredicto), pero tampoco avanzan solos: mira `accion`."},"poll_activo":{"type":"boolean","description":"`true` ⇒ Notta tiene un poll durable consultando al SII por este documento ahora mismo; no hay nada que hacer más que volver a leer. `false` junto con `terminal: false` significa que nadie está mirando este documento: ahí `accion` dice qué lo destraba."},"categoria":{"type":"string","enum":["en_proceso","aceptado","rechazado","requiere_accion","archivistico"],"description":"Cómo terminó, o por qué no terminó: `en_proceso`: el SII todavía no dio veredicto; `aceptado`: veredicto favorable: el documento vale; `rechazado`: veredicto desfavorable: el SII no aceptó el documento; `requiere_accion`: no hay veredicto y no lo va a haber sin que alguien haga algo; `archivistico`: el SII ya lo aceptó en su momento; no hay envío que consultar."},"accion":{"type":"string","enum":["esperar","reintentar_consulta","reemitir","contactar_soporte","accion_en_sii","ninguna"],"description":"Qué hacer, en un enum ESTABLE pensado para que un agente ramifique sin leer la prosa, el equivalente de `next_action` en el contrato de errores: `esperar`: el poll converge solo; vuelve a leer más tarde; `reintentar_consulta`: `POST /dtes/{id}/refresh-status` destraba el caso; `reemitir`: el folio quedó quemado; emite uno nuevo corregido (nunca una Nota de Crédito: un documento rechazado no fue aceptado y no hay nada que anular); `contactar_soporte`: el dueño del problema es Notta; el emisor no puede corregirlo solo; `accion_en_sii`: el emisor tiene que hacer algo en el portal del SII; `ninguna`: terminal favorable: no hay nada que hacer."}},"required":["code","label","descripcion","terminal","poll_activo","categoria","accion"],"additionalProperties":false,"description":"La clasificación de `sii_status`, publicada. `sii_status` NO cambia y NO se reemplaza: el código crudo sigue siendo el contrato y este bloque lo AGREGA. Sirve para decidir sin adivinar: `terminal` corta los bucles de espera, `accion` dice qué hacer, y un código que el catálogo no conoce igual cae en una casilla accionable."},"sii_glosa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Glosa con que el SII explica `sii_status`, en sus palabras. null mientras no haya respuesta del Servicio. Es texto para leer, no un código: lo estable es `sii_status`."},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TrackID que devolvió el SII al recibir el envío. Sirve para rastrear ESE envío en el portal del Servicio; no identifica el documento en esta API (para eso está `id`). null hasta que el DTE se sube."},"sii_env":{"type":"string","enum":["cert","prod"],"description":"Ambiente al que pertenece ESTE documento: `cert` (maullin, documento de prueba sin valor tributario) o `prod` (palena). Es del documento y no de la empresa: una organización ya autorizada en producción sigue teniendo documentos de certificación, y cada ambiente lleva su propia secuencia de folios."},"sii_last_polled":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Última ESCRITURA de estado, no solo consultas al SII: se estampa tanto en cada poll (haya cambio o no) como en las transiciones de la emisión (`queued`, `sending`, `signed`). Un DTE recién emitido ya la trae. Nunca pierde un cambio; sí devuelve documentos cuyo estado no cambió. Es el ancla de `?polled_since=`."},"forma_pago":{"anyOf":[{"type":"number","enum":[1,2,3]},{"type":"null"}],"description":"Forma de pago que se declaró al emitir (`<FmaPago>`): 1 contado, 2 crédito, 3 sin costo. Es el campo que necesitas para volver a emitir un documento a partir de otro, porque `POST /dtes` lo exige en 33/34/46. `null` significa que ESTE documento no la declara, y hay dos motivos: el tipo no la lleva (guía 52, notas 56/61, exportación) o el documento se importó del Respaldo del SII, donde lo emitió otro sistema. `null` NO es contado: no lo colapses a un número ni asumas un default."},"fecha_emision":{"type":"string","description":"`FchEmis` del documento: fecha calendario chilena `YYYY-MM-DD`. Es la fecha TRIBUTARIA, la que decide el período del IVA, no el instante en que se creó el registro (ese es `created_at`, y puede caer en otro día)."},"documento_disponible":{"type":"boolean","description":"`true` = hay XML firmado y `/dtes/{id}/pdf|xml|pdf-url` responden. Distingue “existe y se puede bajar” de “existe pero aún no está firmado”, sin gastar un request en un 409."},"created_at":{"type":"string","description":"Instante ISO-8601 en que Notta registró el documento."},"receptor_estado":{"type":"string","enum":["reclamado","aceptado","en_plazo","aceptado_tacito","sin_info"],"description":"Qué hizo TU CLIENTE con el documento. NO es `sii_status`: el SII puede haberlo aceptado (`EPR`) y el receptor reclamarlo igual: son dos máquinas de estado distintas. Se decide en este orden, el mismo que aplica el servidor: (1) `reclamado`: el receptor lo reclamó ante el SII; es un HECHO registrado y es IRREVERSIBLE: no existe forma de deshacerlo por esta API ni por el portal, y la salida comercial es emitir una nota de crédito. (2) `aceptado`: el receptor otorgó recibo, o el SII informó que el plazo se cumplió sin reclamo; también es un hecho registrado. (3) `en_plazo`: todavía corre la ventana, y cierra en el instante que indica `plazo_reclamo_cierra`. (4) `aceptado_tacito`: esa ventana ya cerró sin reclamo (Ley 19.983). (5) `sin_info`: el SII aún no informó `fecha_recepcion_sii`, así que el plazo no empezó a correr y no se sabe nada del receptor; NO significa que no haya respondido. Los tres últimos se DERIVAN contra el instante del request y cambian solos con el reloj: no los caches."},"receptor_reclamado_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`YYYY-MM-DD` del reclamo, tal como lo informa el registro del SII. `null` = no hay reclamo registrado, o el reclamo llegó sólo como código y sin su fecha (mira `receptor_estado`, que es el campo que decide). Un `null` aquí nunca significa por sí solo que el cliente no haya reclamado."},"receptor_acuse_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`YYYY-MM-DD` del acuse de recibo del receptor. `null` = no lo otorgó, o llegó sin fecha. Igual que su hermano, no es el campo con el que se decide: ése es `receptor_estado`."},"fecha_recepcion_sii":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO-8601 (con hora) en que el SII recibió el documento y lo dejó a disposición del receptor. Es el ANCLA del plazo de reclamo: `fecha_emision` NO lo ancla, y contar desde ahí ya fechó un vencimiento cuatro días antes de tiempo. `null` = el SII todavía no lo informó (por eso el plazo no corre y `receptor_estado` vale `sin_info`); se puebla solo cuando el registro del SII lo entrega."},"plazo_reclamo_cierra":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO-8601 EXACTO en que el receptor pierde el derecho a reclamar: `fecha_recepcion_sii` + 192 horas (Ley 19.983, Art. 3). Es una HORA, no un día de calendario: el SII cuenta fecha-hora a fecha-hora y a partir de ese instante rechaza el reclamo, así que tratar el día entero como disponible le regala al receptor horas que ya no tiene. `null` cuando no hay ancla (`fecha_recepcion_sii` en `null`): sin fecha de recepción no hay plazo que calcular, y una fecha derivada de `fecha_emision` sería sencillamente errónea. Este plazo corre contra el RECEPTOR; al emisor no le abre ninguna ventana ni le exige ninguna acción."},"references":{"type":"array","items":{"type":"object","properties":{"line_num":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"`<NroLinRef>` del XML: identidad de la línea dentro del documento. Admite saltos."},"tipo_doc_ref":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Código SII del documento referenciado (correctiva) o el string original (comercial)."},"folio_ref":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Folio del documento referenciado. Número en una referencia correctiva (la NC o ND sobre un DTE) y puede venir como texto en una comercial, donde el identificador es el del documento de origen (una orden de compra, un contrato)."},"fecha_ref":{"type":"string","description":"`<FchRef>`: fecha del documento REFERENCIADO, no la de éste. Desambigua cuando el mismo (tipo, folio) existe en más de un período: el folio se reinicia por emisor y por ambiente."},"cod_ref":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"1 anula · 2 corrige texto · 3 corrige montos · null = referencia comercial"},"razon_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`<RazonRef>`: texto libre con el motivo de la referencia. null si no se declaró."}},"required":["line_num","tipo_doc_ref","folio_ref","fecha_ref","cod_ref","razon_ref"],"additionalProperties":false,"description":"Una referencia a otro documento: que documento corrige, anula o cita este."},"description":"`<Referencia>` del documento: correctivas (NC/ND) y comerciales (orden de compra…). Un documento sin referencias trae `[]`, nunca `null`."},"links":{"type":"object","properties":{"self":{"type":"string","description":"Ruta de este documento: `GET /api/v1/dtes/{id}`."}},"required":["self"],"additionalProperties":false,"description":"Rutas relativas bajo `/api/v1` para seguir este documento."}},"required":["id","folio","tipo_dte","rut_emisor","rut_receptor","razon_social_receptor","monto_neto","monto_exento","iva","monto_total","sii_status","estado","sii_glosa","track_id","sii_env","sii_last_polled","forma_pago","fecha_emision","documento_disponible","created_at","receptor_estado","receptor_reclamado_at","receptor_acuse_at","fecha_recepcion_sii","plazo_reclamo_cierra","references","links"],"additionalProperties":false,"description":"Un documento del listado, en su version resumida. El detalle completo se pide con notta.dte.obtener."},"description":"Documentos de esta página, en el orden que piden `sort` y `dir`."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor de la página siguiente: pásalo tal cual en `?cursor=`, sin cambiar `sort` ni `dir`. `null` = ya estás en la última página."}},"required":["data","next_cursor"],"additionalProperties":false},"notta__dte__obtener__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."}},"required":["id"]},"notta__dte__obtener__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."},"folio":{"type":"string","description":"Folio que el SII asignó desde el CAF. La numeración corre por (RUT emisor, tipo de documento, ambiente), así que el folio SOLO no identifica un documento: el mismo número existe en otro tipo y en el otro ambiente. Para ubicarlo por folio, filtra también por `tipo_dte`."},"tipo_dte":{"type":"number","enum":[33,34,39,41,46,52,56,61,110,112],"description":"Código SII del tipo de documento: 33 factura afecta, 34 factura exenta, 46 factura de compra, 52 guía de despacho, 56 nota de débito, 61 nota de crédito, 110/112 exportación."},"rut_emisor":{"type":"string","description":"RUT de la empresa que emitió, en formato `CUERPO-DV` sin puntos (`76123456-0`)."},"rut_receptor":{"type":"string","description":"RUT del receptor del documento, en formato `CUERPO-DV` sin puntos (`76123456-0`)."},"razon_social_receptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Razón social del receptor, tal como quedó en el documento emitido. null si el documento no la trae."},"giro_receptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Giro del receptor (`<GiroRecep>`). Obligatorio en 33/34 y opcional en 52/56/61: null cuando el documento no lo declaró."},"direccion_receptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dirección del receptor en el documento (`<DirRecep>`). null si no se declaró."},"comuna_receptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comuna del receptor (`<CmnaRecep>`). null si no se declaró."},"monto_neto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto afecto EN PESOS CHILENOS, siempre. 0 en un documento exento, y también en una exportación (110/112), donde el total va en `monto_exento`."},"monto_exento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento del documento EN PESOS CHILENOS, siempre. 0 cuando no hay. En una exportación (110/112) NO es lo que declara la factura: el total exportado se registra aquí ya convertido, y el monto en su moneda viaja en `monto_moneda` con la moneda en `moneda_documento`. Vivía sólo en el DETALLE, así que cuadrar una exenta (34), o el exento de una 33 mixta, desde el listado costaba un `GET /dtes/{id}` por fila, que es el motivo por el que `monto_neto` e `iva` ya viajaban aquí."},"iva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA del documento EN PESOS CHILENOS. 0 cuando no hay monto afecto (documento exento o exportación)."},"monto_total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total EN PESOS CHILENOS, siempre. En una exportación es el equivalente al tipo de cambio del día: la cifra que declara la factura está en `monto_moneda`."},"moneda_documento":{"type":"string","description":"Sólo exportación: glosa del catálogo del SII (\"DOLAR USA\")."},"monto_moneda":{"type":"number","description":"Sólo exportación: el total EN esa moneda, hasta 4 decimales."},"tipo_cambio":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Sólo exportación: con qué tipo de cambio se obtuvo `monto_total`. Lo resuelve el SERVIDOR el día de la emisión, nunca el `tpo_cambio` que venga en el body."},"tipo_cambio_fuente":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sólo exportación: de dónde salió ese tipo de cambio, para poder auditarlo."},"sii_env":{"type":"string","enum":["cert","prod"],"description":"Ambiente al que pertenece ESTE documento: `cert` (maullin, documento de prueba sin valor tributario) o `prod` (palena). Es del documento y no de la empresa: una organización ya autorizada en producción sigue teniendo documentos de certificación, y cada ambiente lleva su propia secuencia de folios."},"sii_status":{"type":"string","enum":["queued","sending","awaiting_sii","SOK","CRT","FOK","PDR","PRD","-11","EPR","RPR","aceptado_con_reparos","RFR","RCT","RSC","RCH","stuck","signed","accepted","sin_permiso_sii"],"description":"Vocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."},"estado":{"type":"object","properties":{"code":{"type":"string","description":"El mismo valor que `sii_status`, repetido aquí para que el bloque se explique solo. NO es un enum cerrado a propósito: el SII no publica una lista cerrada de códigos. Su instructivo termina la tabla con «Otros (no enumerados)», y Notta guarda verbatim lo que responde, así que puede traer uno que el catálogo no conozca (en producción ya aparecieron `106` y `107`). Un código desconocido llega clasificado como NO terminal, `en_proceso` y `contactar_soporte`, nunca como éxito."},"label":{"type":"string","description":"Glosa corta en español, para mostrar. AGREGA información al código, no lo reemplaza."},"descripcion":{"type":"string","description":"Qué pasó y qué significa, en prosa. Está para que no haya que inferir la causa: un `-11` es el código con que FALLA la consulta de estado mientras el SII todavía no registra el envío recién subido, no un estado del documento, y es el camino normal."},"terminal":{"type":"boolean","description":"`true` ⇒ el SII ya dio su veredicto y volver a preguntar no puede devolver otra cosa. Es la CONDICIÓN DE CORTE de cualquier bucle de espera: cortar por `sii_status === \"EPR\"` deja el bucle vivo para siempre ante un rechazo. `stuck` y `sin_permiso_sii` son `false` a propósito (no hay veredicto), pero tampoco avanzan solos: mira `accion`."},"poll_activo":{"type":"boolean","description":"`true` ⇒ Notta tiene un poll durable consultando al SII por este documento ahora mismo; no hay nada que hacer más que volver a leer. `false` junto con `terminal: false` significa que nadie está mirando este documento: ahí `accion` dice qué lo destraba."},"categoria":{"type":"string","enum":["en_proceso","aceptado","rechazado","requiere_accion","archivistico"],"description":"Cómo terminó, o por qué no terminó: `en_proceso`: el SII todavía no dio veredicto; `aceptado`: veredicto favorable: el documento vale; `rechazado`: veredicto desfavorable: el SII no aceptó el documento; `requiere_accion`: no hay veredicto y no lo va a haber sin que alguien haga algo; `archivistico`: el SII ya lo aceptó en su momento; no hay envío que consultar."},"accion":{"type":"string","enum":["esperar","reintentar_consulta","reemitir","contactar_soporte","accion_en_sii","ninguna"],"description":"Qué hacer, en un enum ESTABLE pensado para que un agente ramifique sin leer la prosa, el equivalente de `next_action` en el contrato de errores: `esperar`: el poll converge solo; vuelve a leer más tarde; `reintentar_consulta`: `POST /dtes/{id}/refresh-status` destraba el caso; `reemitir`: el folio quedó quemado; emite uno nuevo corregido (nunca una Nota de Crédito: un documento rechazado no fue aceptado y no hay nada que anular); `contactar_soporte`: el dueño del problema es Notta; el emisor no puede corregirlo solo; `accion_en_sii`: el emisor tiene que hacer algo en el portal del SII; `ninguna`: terminal favorable: no hay nada que hacer."}},"required":["code","label","descripcion","terminal","poll_activo","categoria","accion"],"additionalProperties":false,"description":"La clasificación de `sii_status`, publicada. `sii_status` NO cambia y NO se reemplaza: el código crudo sigue siendo el contrato y este bloque lo AGREGA. Sirve para decidir sin adivinar: `terminal` corta los bucles de espera, `accion` dice qué hacer, y un código que el catálogo no conoce igual cae en una casilla accionable."},"sii_glosa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Glosa con que el SII explica `sii_status`, en sus palabras. null mientras no haya respuesta del Servicio. Es texto para leer, no un código: lo estable es `sii_status`."},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TrackID que devolvió el SII al recibir el envío. Sirve para rastrear ESE envío en el portal del Servicio; no identifica el documento en esta API (para eso está `id`). null hasta que el DTE se sube."},"sii_last_polled":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Última ESCRITURA de estado (no sólo consultas al SII: también las transiciones de la emisión). null si nunca se escribió."},"forma_pago":{"anyOf":[{"type":"number","enum":[1,2,3]},{"type":"null"}],"description":"Forma de pago que se declaró al emitir (`<FmaPago>`): 1 contado, 2 crédito, 3 sin costo. Es el campo que necesitas para volver a emitir un documento a partir de otro, porque `POST /dtes` lo exige en 33/34/46. `null` significa que ESTE documento no la declara, y hay dos motivos: el tipo no la lleva (guía 52, notas 56/61, exportación) o el documento se importó del Respaldo del SII, donde lo emitió otro sistema. `null` NO es contado: no lo colapses a un número ni asumas un default."},"fecha_emision":{"type":"string","description":"`FchEmis` del documento: fecha calendario chilena `YYYY-MM-DD`. Es la fecha TRIBUTARIA, la que decide el período del IVA, no el instante en que se creó el registro (ese es `created_at`, y puede caer en otro día)."},"created_at":{"type":"string","description":"Instante ISO-8601 en que Notta registró el documento."},"receptor_estado":{"type":"string","enum":["reclamado","aceptado","en_plazo","aceptado_tacito","sin_info"],"description":"Qué hizo TU CLIENTE con el documento. NO es `sii_status`: el SII puede haberlo aceptado (`EPR`) y el receptor reclamarlo igual: son dos máquinas de estado distintas. Se decide en este orden, el mismo que aplica el servidor: (1) `reclamado`: el receptor lo reclamó ante el SII; es un HECHO registrado y es IRREVERSIBLE: no existe forma de deshacerlo por esta API ni por el portal, y la salida comercial es emitir una nota de crédito. (2) `aceptado`: el receptor otorgó recibo, o el SII informó que el plazo se cumplió sin reclamo; también es un hecho registrado. (3) `en_plazo`: todavía corre la ventana, y cierra en el instante que indica `plazo_reclamo_cierra`. (4) `aceptado_tacito`: esa ventana ya cerró sin reclamo (Ley 19.983). (5) `sin_info`: el SII aún no informó `fecha_recepcion_sii`, así que el plazo no empezó a correr y no se sabe nada del receptor; NO significa que no haya respondido. Los tres últimos se DERIVAN contra el instante del request y cambian solos con el reloj: no los caches."},"receptor_reclamado_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`YYYY-MM-DD` del reclamo, tal como lo informa el registro del SII. `null` = no hay reclamo registrado, o el reclamo llegó sólo como código y sin su fecha (mira `receptor_estado`, que es el campo que decide). Un `null` aquí nunca significa por sí solo que el cliente no haya reclamado."},"receptor_acuse_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`YYYY-MM-DD` del acuse de recibo del receptor. `null` = no lo otorgó, o llegó sin fecha. Igual que su hermano, no es el campo con el que se decide: ése es `receptor_estado`."},"fecha_recepcion_sii":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO-8601 (con hora) en que el SII recibió el documento y lo dejó a disposición del receptor. Es el ANCLA del plazo de reclamo: `fecha_emision` NO lo ancla, y contar desde ahí ya fechó un vencimiento cuatro días antes de tiempo. `null` = el SII todavía no lo informó (por eso el plazo no corre y `receptor_estado` vale `sin_info`); se puebla solo cuando el registro del SII lo entrega."},"plazo_reclamo_cierra":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO-8601 EXACTO en que el receptor pierde el derecho a reclamar: `fecha_recepcion_sii` + 192 horas (Ley 19.983, Art. 3). Es una HORA, no un día de calendario: el SII cuenta fecha-hora a fecha-hora y a partir de ese instante rechaza el reclamo, así que tratar el día entero como disponible le regala al receptor horas que ya no tiene. `null` cuando no hay ancla (`fecha_recepcion_sii` en `null`): sin fecha de recepción no hay plazo que calcular, y una fecha derivada de `fecha_emision` sería sencillamente errónea. Este plazo corre contra el RECEPTOR; al emisor no le abre ninguna ventana ni le exige ninguna acción."},"items":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Orden de la línea dentro del documento (`<NroLinDet>`), partiendo en 1."},"nombre":{"type":"string","description":"Nombre del ítem (`<NmbItem>`), hasta 80 caracteres."},"descripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Descripción larga del ítem (`<DscItem>`). null si el documento no la trae."},"cantidad":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Cantidad (SII QtyItem). null si el documento NO la declara: el XSD la permite ausente (una NC con CodRef=2, o un documento importado del respaldo del SII). null NO significa cero."},"unidad":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Unidad de medida (SII UnmdItem); null si no se declaró"},"descuento_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Descuento por línea (SII DescuentoPct, %); null si no aplica"},"codigos":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"tipo":{"type":"string","description":"Tipo del código (`<TpoCodigo>`), por ejemplo `INT1` o `EAN`."},"valor":{"type":"string","description":"Valor del código (`<VlrCodigo>`)."}},"required":["tipo","valor"],"additionalProperties":false,"description":"Un codigo de producto de esta linea, con su tipo y su valor."}},{"type":"null"}],"description":"Códigos de ítem (SII CdgItem: {tipo→TpoCodigo, valor→VlrCodigo}, hasta 5); null si no aplica"},"precio_unitario":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Precio unitario (SII PrcItem). null si el documento no lo declara; no es cero."},"monto_item":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total de la línea EN PESOS CHILENOS, con su descuento ya aplicado. En una exportación es el equivalente en pesos, no la cifra que imprime la factura."},"exento":{"type":"boolean","description":"`true` si la línea va sin IVA. Un documento afecto (33) puede llevar líneas exentas y afectas a la vez."}},"required":["position","nombre","descripcion","cantidad","unidad","descuento_pct","codigos","precio_unitario","monto_item","exento"],"additionalProperties":false,"description":"Una linea de detalle del documento."},"description":"Líneas del documento, en el orden en que se emitieron."},"status_history":{"type":"array","items":{"type":"object","properties":{"status":{"type":"string","enum":["queued","sending","awaiting_sii","SOK","CRT","FOK","PDR","PRD","-11","EPR","RPR","aceptado_con_reparos","RFR","RCT","RSC","RCH","stuck","signed","accepted","sin_permiso_sii"],"description":"Vocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."},"at":{"type":"string","description":"ISO-8601 del momento observado"},"source":{"type":"string","enum":["local","sii"],"description":"Origen: transición local del pipeline o estado reportado por el SII"}},"required":["status","at","source"],"additionalProperties":false,"description":"Un cambio de estado del documento, con el estado al que paso y cuando."},"description":"Historia cronológica de transiciones de estado del documento. Es el mismo rastro que sirve `GET /dtes/{id}/events`, sin la glosa: úsalo para ver por dónde pasó (p. ej. `-11 → EPR`) sin un request más."},"references":{"type":"array","items":{"type":"object","properties":{"line_num":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"`<NroLinRef>` del XML: identidad de la línea dentro del documento. Admite saltos."},"tipo_doc_ref":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Código SII del documento referenciado (correctiva) o el string original (comercial)."},"folio_ref":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Folio del documento referenciado. Número en una referencia correctiva (la NC o ND sobre un DTE) y puede venir como texto en una comercial, donde el identificador es el del documento de origen (una orden de compra, un contrato)."},"fecha_ref":{"type":"string","description":"`<FchRef>`: fecha del documento REFERENCIADO, no la de éste. Desambigua cuando el mismo (tipo, folio) existe en más de un período: el folio se reinicia por emisor y por ambiente."},"cod_ref":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"1 anula · 2 corrige texto · 3 corrige montos · null = referencia comercial"},"razon_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`<RazonRef>`: texto libre con el motivo de la referencia. null si no se declaró."}},"required":["line_num","tipo_doc_ref","folio_ref","fecha_ref","cod_ref","razon_ref"],"additionalProperties":false,"description":"Una referencia a otro documento: que documento corrige, anula o cita este."},"description":"`<Referencia>` del documento: correctivas (NC/ND) y comerciales (orden de compra…). Un documento sin referencias trae `[]`, nunca `null`."},"correo_receptor":{"anyOf":[{"type":"array","items":{"type":"string","description":"Una direccion de correo declarada para el receptor del documento."}},{"type":"null"}],"description":"Direcciones del receptor capturadas en la emisión. null/vacío = no se envía."},"envio_estado":{"type":"string","enum":["pendiente","enviado","sin_correo","fallido","omitido","no_aplica_cert","no_aplica_import"],"description":"Estado del CORREO al receptor. NO es el estado ante el SII (ese es `sii_status`). `no_aplica_import` = el documento entró por el Respaldo del SII: lo emitió y lo entregó el sistema anterior, así que no hay envío nuestro que hacer y `POST /dtes/{id}/resend-delivery` lo rechaza. `no_aplica_cert` = en certificación, la única dirección era la casilla de intercambio del padrón, que no recibe documentos de prueba. Ninguno de los dos es un fallo."},"envio_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Identificador que devolvió el proveedor de correo al aceptar el envío. Es evidencia de que el correo salió, no de que llegó. null si nunca hubo envío."},"enviado_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante ISO-8601 en que salió el correo al receptor. null si todavía no salió."},"envio_destinatarios":{"anyOf":[{"type":"array","items":{"type":"string","description":"Una direccion de correo a la que se envio el documento."}},{"type":"null"}],"description":"Registro del `to:` efectivo del envío. Sólo lectura: no son direcciones reutilizables."},"envio_casilla_intercambio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuál de los destinatarios la aportó la casilla de intercambio del padrón del SII."},"anulado_estado":{"anyOf":[{"type":"number","enum":[1,2]},{"type":"null"}],"description":"1 = anulada antes de enviar al SII · 2 = después · null = guía viva (o no es un 52)."},"anulado_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instante en que la guía quedó marcada como anulada. null si no lo está."},"anulado_motivo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Motivo que se registró al anular la guía. null si no está anulada."},"links":{"type":"object","properties":{"self":{"type":"string","description":"Ruta de este documento: `GET /api/v1/dtes/{id}`."},"pdf":{"type":"string","description":"Descarga directa del PDF (`GET /api/v1/dtes/{id}/pdf`): responde el archivo. Si prefieres una URL firmada de vida corta para pasársela a otro sistema, usa `GET /dtes/{id}/pdf-url`."},"xml":{"type":"string","description":"Descarga directa del XML firmado. La alternativa con URL firmada es `GET /dtes/{id}/xml-url`."},"events":{"type":"string","description":"Historial de estados: `GET /api/v1/dtes/{id}/events`."}},"required":["self","pdf","xml","events"],"additionalProperties":false,"description":"Rutas relativas bajo `/api/v1` para operar sobre este documento."}},"required":["id","folio","tipo_dte","rut_emisor","rut_receptor","razon_social_receptor","giro_receptor","direccion_receptor","comuna_receptor","monto_neto","monto_exento","iva","monto_total","sii_env","sii_status","estado","sii_glosa","track_id","sii_last_polled","forma_pago","fecha_emision","created_at","receptor_estado","receptor_reclamado_at","receptor_acuse_at","fecha_recepcion_sii","plazo_reclamo_cierra","items","status_history","references","correo_receptor","envio_estado","envio_message_id","enviado_at","envio_destinatarios","envio_casilla_intercambio","anulado_estado","anulado_at","anulado_motivo","links"],"additionalProperties":false},"notta__dte__previsualizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tipo_dte":{"anyOf":[{"type":"number","const":33},{"type":"number","const":34},{"type":"number","const":56},{"type":"number","const":61}],"description":"Qué documento emitir: 33 factura afecta (con IVA), 34 factura exenta, 56 nota de débito, 61 nota de crédito. Una factura (33 o 34) exige forma_pago y el giro, la dirección y la comuna del receptor. Una nota (56 o 61) exige references[] al documento original y rut_emisor, y no lleva forma_pago ni descuento_global."},"receptor":{"type":"object","properties":{"rut":{"type":"string","pattern":"^\\d{1,8}-[\\dkK]$","description":"RUT de quien recibe el documento, sin puntos y con guion antes del dígito verificador. Si el dígito verificador no calza, la emisión se rechaza en validación y no se gasta folio."},"razon_social":{"type":"string","minLength":1,"maxLength":100,"description":"Nombre legal de la empresa o persona que recibe el documento, tal como saldrá impreso."},"giro":{"description":"Giro o actividad económica, MÁXIMO 40 caracteres: el SII no acepta más, así que un giro largo copiado de otra factura hay que abreviarlo antes de mandarlo (\"Asesoría y consultoría informática\", no la redacción completa del registro). OBLIGATORIO para facturas (tipo_dte 33 y 34) por norma del SII de junio 2026; opcional en notas (56/61). Pídeselo al usuario antes de emitir una factura: sin él la llamada se rechaza en validación.","type":"string","maxLength":40},"direccion":{"description":"Dirección del receptor. OBLIGATORIA para facturas (33/34) por norma del SII de junio 2026; opcional en notas (56/61).","type":"string","maxLength":70},"comuna":{"description":"Comuna del receptor. OBLIGATORIA para facturas (33/34) por norma del SII de junio 2026; opcional en notas (56/61).","type":"string","maxLength":20}},"required":["rut","razon_social"],"description":"A quién se le emite el documento. Para una factura (33 o 34) el SII exige además giro, direccion y comuna; una nota (56 o 61) no los pide."},"fecha_emision":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha de emisión del documento, en formato AAAA-MM-DD. Es obligatoria: Notta no la deriva del día en curso."},"items":{"minItems":1,"maxItems":60,"type":"array","items":{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":80,"description":"Qué se está cobrando en esta línea, tal como saldrá impreso en el documento."},"cantidad":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas unidades lleva la línea. Este conector la pide entera y tiene que ser MAYOR QUE CERO, incluso en una nota de crédito por devolución: lo que va en negativo ahí es 'monto_item', nunca la cantidad."},"precio_unitario":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Precio de UNA unidad, sin IVA: el impuesto se calcula después, sobre el total del documento. Este conector lo pide entero y no admite negativos (cero sí)."},"exento":{"type":"boolean","description":"true marca la línea como exenta de IVA; false, como afecta. Una factura exenta (tipo_dte 34) no admite líneas afectas: o todas van con exento en true, o corresponde emitir una 33."},"monto_item":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total de la línea, sin IVA: cantidad por precio_unitario, ya con el descuento_pct de la línea aplicado. Lo declara quien emite y el SII valida esa relación línea por línea; si no cuadra, la respuesta es un error de validación 'amount_arithmetic'."},"descuento_pct":{"description":"Descuento de ESTA línea, en porcentaje entre 0 y 100. Si lo usas, monto_item tiene que venir ya descontado. Omitirlo equivale a un descuento de cero.","type":"number","minimum":0,"maximum":100}},"required":["nombre","cantidad","precio_unitario","exento","monto_item"]},"description":"Las líneas del documento, entre 1 y 60 (el máximo que admite el SII). Los totales del documento (neto, exento, IVA y total) los calcula Notta a partir de estas líneas: no se mandan."},"forma_pago":{"description":"1=Contado, 2=Crédito, 3=Sin costo. OBLIGATORIO para facturas (tipo_dte 33 y 34); una nota (56/61) no lo lleva. Pregúntaselo al usuario antes de emitir: sin él la llamada se rechaza en validación.","anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"references":{"description":"Los documentos que esta nota corrige o anula. Una nota (56 o 61) exige al menos uno; una factura (33 o 34) no admite ninguno en esta versión, porque sus referencias son de otra clase (orden de compra, contrato, HES) y este conector todavía no las expone.","maxItems":40,"type":"array","items":{"type":"object","properties":{"line_num":{"type":"integer","minimum":1,"maximum":40,"description":"Número de línea de esta referencia dentro del documento, empezando en 1. No se deriva solo: lo declara quien emite, para controlar el orden."},"tipo_doc_ref":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tipo del documento referenciado, con el código del catálogo del SII (33 factura afecta, 34 factura exenta). Una nota de crédito (61) solo puede referenciar una 33 o una 34."},"folio_ref":{"description":"Folio del documento referenciado, o sea el identificador del documento que esta nota corrige o anula. Va EN TEXTO (ej. \"4712\"): pásalo tal como viene en la fila de sii.rcv.consultar.","type":"string"},"fecha_ref":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha de emisión del documento referenciado, en formato AAAA-MM-DD."},"cod_ref":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}],"description":"Qué le hace esta nota al documento referenciado: 1 lo anula, 2 corrige su texto (y entonces la nota no puede mover montos) y 3 corrige sus montos. En una nota de débito (56) tiene que calzar con nd_reason."},"razon_ref":{"type":"string","minLength":1,"description":"Por qué se emite esta nota sobre el documento referenciado, en texto libre. Viaja al documento tal cual."}},"required":["line_num","tipo_doc_ref","folio_ref","fecha_ref","cod_ref","razon_ref"]}},"correo_receptor":{"description":"Correo del receptor. Si lo indicas, Notta le envía el PDF y el XML cuando el SII acepta el documento; si no, el documento se emite igual y se puede entregar después con notta.dte.reenviar.","type":"string","maxLength":200,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"descuento_global":{"description":"Descuentos o recargos que aplican al TOTAL del documento, no a una línea. Solo en facturas (33 y 34): una nota (56 o 61) que los lleve se rechaza en validación, porque la ruta de notas de Notta los descartaría en silencio.","type":"array","items":{"type":"object","properties":{"tipo":{"type":"string","enum":["descuento","recargo"],"description":"'descuento' resta del total del documento y 'recargo' se lo suma. El signo lo pone este campo, así que 'valor' va siempre positivo."},"es_porcentaje":{"type":"boolean","description":"true lee 'valor' como un porcentaje; false lo lee como un monto fijo."},"valor":{"type":"number","exclusiveMinimum":0,"description":"Cuánto descontar o recargar, siempre positivo. Se interpreta como porcentaje o como monto fijo según 'es_porcentaje'."},"glosa":{"description":"Texto que explica el descuento o recargo. Viaja al documento tal cual.","type":"string"},"aplica_exento":{"description":"true aplica el ajuste sobre la base EXENTA. Omitirlo o ponerlo en false lo aplica sobre la base AFECTA, o sea mueve el neto antes de que se calcule el IVA.","type":"boolean"}},"required":["tipo","es_porcentaje","valor"]}},"rut_emisor":{"description":"Para notas de débito/crédito (56/61), el RUT emisor de la empresa: el de esta conexión. Las facturas (33/34) lo derivan solas.","type":"string","pattern":"^\\d{1,8}-[\\dkK]$"},"nd_reason":{"description":"Solo para nota de débito (56); el motivo cruza con el cod_ref de la referencia. correccion_monto: sube el monto de una factura ya emitida (cod_ref 3). reposicion_nc_anulada: repone una factura cuya nota de crédito se anuló (cod_ref 2, o 1 para anular la NC). interese_moratorio_contractual: intereses por mora PACTADOS en el contrato (cod_ref 3).","type":"string","enum":["correccion_monto","reposicion_nc_anulada","interese_moratorio_contractual"]}},"required":["tipo_dte","receptor","fecha_emision","items"]},"notta__dte__previsualizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"borrador_id":{"type":"string","description":"UUID del borrador que quedó guardado en Notta. NO es un documento: no tiene folio, no llegó al SII y no tiene valor tributario."},"url":{"type":"string","description":"Enlace al borrador en Notta, con el PDF tal como se imprimiría y el botón para emitirlo. Pide sesión de Notta, así que es para quien opera la cuenta y NUNCA para el receptor del documento."},"tipo_dte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código SII del tipo que se emitiría, el mismo que mandaste."},"fecha_emision":{"type":"string","description":"Fecha calendario chilena YYYY-MM-DD con que saldría el documento. Si no la declaraste, es HOY en Chile resuelto por el servidor de Notta."},"sii_env":{"type":"string","description":"Ambiente en el que se emitiría, y lo decide la credencial de la conexión: 'cert' (prueba, sin valor tributario) o 'prod' (real)."},"emisor":{"type":"object","properties":{"rut":{"type":"string","description":"RUT de la empresa de esta conexión, en formato CUERPO-DV sin puntos."},"razon_social":{"type":"string","description":"Razón social registrada de la empresa emisora."}},"required":["rut","razon_social"],"additionalProperties":false,"description":"Quién emitiría. Sale de la conexión, no del input: el emisor no se elige por llamada."},"receptor":{"type":"object","properties":{"rut":{"type":"string","description":"RUT del receptor que mandaste, normalizado a CUERPO-DV."},"razon_social":{"type":"string","description":"Razón social del receptor que mandaste."}},"required":["rut","razon_social"],"additionalProperties":false,"description":"A quién se le emitiría, tal como quedó tras normalizar el input."},"items":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Posición de la línea en el documento, partiendo en 1."},"nombre":{"type":"string","description":"Nombre del ítem tal como se imprimiría."},"cantidad":{"type":"number","description":"Cantidad de la línea."},"precio_unitario":{"type":"number","description":"Precio unitario de la línea."},"monto_item":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total de la línea EN PESOS CHILENOS, con su descuento ya aplicado."},"exento":{"type":"boolean","description":"true si la línea iría sin IVA."}},"required":["position","nombre","cantidad","precio_unitario","monto_item","exento"],"additionalProperties":false},"description":"Las líneas como quedarían en el documento: el eco de lo que mandaste, normalizado y con su posición asignada."},"totales":{"type":"object","properties":{"neto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto afecto EN PESOS CHILENOS. 0 si todo va exento."},"exento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento EN PESOS CHILENOS. 0 si todo va afecto."},"iva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA EN PESOS CHILENOS, derivado del neto."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total del documento EN PESOS CHILENOS."}},"required":["neto","exento","iva","total"],"additionalProperties":false,"description":"Los montos que se emitirían, calculados por el MISMO código que firma el documento. Cítalos tal cual al usuario: no los recalcules."},"totales_de_lineas":{"type":"object","properties":{"neto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto afecto EN PESOS CHILENOS. 0 si todo va exento."},"exento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento EN PESOS CHILENOS. 0 si todo va afecto."},"iva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA EN PESOS CHILENOS, derivado del neto."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total del documento EN PESOS CHILENOS."}},"required":["neto","exento","iva","total"],"additionalProperties":false,"description":"Los mismos cuatro montos derivados SÓLO de los ítems, ignorando los que traiga el input. Difieren de totales cuando declaraste alguno y no cuadra con las líneas."},"advertencias":{"type":"array","items":{"type":"string"},"description":"Diferencias entre lo que declaraste y lo que se deriva de los ítems. Notta NO recalcula iva ni monto_total cuando vienen en el input, así que un valor equivocado se emitiría tal cual: revisa esto antes de emitir."},"aprobacion_humana":{"type":"object","properties":{"requerida":{"type":"boolean","description":"true = emitir esto AHORA respondería con una aprobación pendiente en vez de un documento, sin folio y sin llegar al SII. Dícelo ANTES de emitir: es la única forma de saberlo sin intentar."},"codigo":{"type":"string","description":"Código estable de la decisión. La lista puede crecer, así que ramifica por 'requerida', nunca por este valor."},"motivo":{"type":"string","description":"La misma decisión en prosa, para mostrársela a una persona. No ramifiques por este texto."},"monto_comparable_clp":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"El monto EN PESOS con que se comparó contra el umbral de la empresa. null cuando no se pudo calcular."}},"required":["requerida","codigo","motivo","monto_comparable_clp"],"additionalProperties":false,"description":"Qué haría el gate de aprobación con este documento si lo emitieras ahora, con el MISMO cálculo que corre la emisión."},"no_verificado":{"type":"array","items":{"type":"string"},"description":"Lo que este ensayo NO comprobó porque depende del estado del servidor (folios del CAF, certificado vigente, y si el SII le autorizó ESE tipo de documento a esta empresa en producción). Un 200 afirma que el PAYLOAD es emitible, NO que la emisión vaya a salir bien."}},"required":["borrador_id","url","tipo_dte","fecha_emision","sii_env","emisor","receptor","items","totales","totales_de_lineas","advertencias","aprobacion_humana","no_verificado"],"additionalProperties":false},"notta__dte__reenviar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."}},"required":["id"]},"notta__dte__reenviar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."},"status":{"type":"string","enum":["delivery_enqueued"],"description":"`delivery_enqueued`: el reenvío quedó encolado. No confirma que el correo se haya entregado; el resultado queda en `envio_estado` y `enviado_at` del documento."}},"required":["id","status"],"additionalProperties":false},"notta__dte__totales__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$","description":"YYYY-MM. Default: el mes actual (calendario chileno)"}}},"notta__dte__totales__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"YYYY-MM del período agregado"},"data":{"type":"array","items":{"type":"object","properties":{"tipo_dte":{"type":"number","enum":[33,34,39,41,46,52,56,61,110,112],"description":"Código SII del tipo de documento: 33 factura afecta, 34 factura exenta, 46 factura de compra, 52 guía de despacho, 56 nota de débito, 61 nota de crédito, 110/112 exportación."},"sii_status":{"type":"string","enum":["queued","sending","awaiting_sii","SOK","CRT","FOK","PDR","PRD","-11","EPR","RPR","aceptado_con_reparos","RFR","RCT","RSC","RCH","stuck","signed","accepted","sin_permiso_sii"],"description":"Vocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."},"cantidad":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos documentos cayeron en este bucket."},"monto_neto":{"type":"number","description":"Suma del neto afecto del bucket, EN PESOS CHILENOS."},"monto_exento":{"type":"number","description":"Suma del monto exento del bucket, EN PESOS CHILENOS."},"iva":{"type":"number","description":"Suma del IVA del bucket, EN PESOS CHILENOS."},"monto_total":{"type":"number","description":"Suma de los totales del bucket, EN PESOS CHILENOS. Una exportación entra por su equivalente en pesos, nunca por la cifra en su moneda."}},"required":["tipo_dte","sii_status","cantidad","monto_neto","monto_exento","iva","monto_total"],"additionalProperties":false,"description":"El total de un tipo de documento en UN estado del SII, dentro del periodo consultado. El estado viaja en sii_status."},"description":"Una fila por combinación de `tipo_dte` y `sii_status` del período. Nunca trae identificadores de contraparte: son conteos y montos."}},"required":["periodo","data"],"additionalProperties":false},"notta__folios__listar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"notta__folios__listar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"UUID de este CAF en Notta."},"rut_emisor":{"type":"string","description":"RUT de la empresa que emitió, en formato `CUERPO-DV` sin puntos (`76123456-0`)."},"tipo_dte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código SII del tipo de documento para el que sirven estos folios. Un CAF vale para UN tipo: los folios de una factura (33) no se pueden usar en una nota de crédito (61)."},"sii_env":{"type":"string","enum":["cert","prod"],"description":"Ambiente al que pertenece este CAF, y al que está RECORTADA toda la lista. Certificación y producción son secuencias de folios independientes, así que una organización puede tener un CAF del mismo tipo en cada una y esta respuesta sólo trae los de uno. Lo decide la CREDENCIAL con la que llamas: una API key de certificación ve los folios de certificación aunque la empresa ya esté autorizada en producción. En el navegador lo decide el ambiente activo de la sesión. Para ver los del otro ambiente, usa una API key de ese ambiente."},"folio_desde":{"type":"string","description":"Primer folio del rango que autorizó el SII, inclusive."},"folio_hasta":{"type":"string","description":"Último folio del rango que autorizó el SII, inclusive."},"next_folio":{"type":"string","description":"Próximo folio que se va a asignar de este rango. Los anteriores ya se consumieron y el SII no permite reutilizarlos."},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Folios sin asignar EN ESTE rango (`folio_hasta - next_folio + 1`). No es el total de la empresa: si hay varios rangos vivos del mismo tipo, súmalos."},"low_folios":{"type":"boolean","description":"`true` cuando a ESTE rango le quedan 10 folios o menos. Con varios rangos del mismo tipo, uno en `true` no significa que la empresa se esté quedando sin folios."},"not_after":{"type":"string","description":"Fecha hasta la que sirve este rango. Vencido, sus folios ya no se asignan aunque queden sin usar, y hay que pedirle al SII un CAF nuevo."},"exhausted":{"type":"boolean","description":"`true` cuando el rango quedó marcado como agotado y ya no se usa."},"created_at":{"type":"string","description":"Instante en que este CAF quedó registrado en Notta, no la fecha en que el SII lo otorgó."}},"required":["id","rut_emisor","tipo_dte","sii_env","folio_desde","folio_hasta","next_folio","remaining","low_folios","not_after","exhausted","created_at"],"additionalProperties":false,"description":"UN rango de folios autorizado por el SII (un CAF) para un tipo de documento, no todos los de ese tipo: el mismo tipo puede tener varios rangos, cada uno en su propia fila."},"description":"CAF de la organización EN EL AMBIENTE de tu credencial, una fila por rango de folios. Una empresa puede tener varios rangos vivos del mismo tipo."}},"required":["data"],"additionalProperties":false},"pjud__actuaciones__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},"desde":{"description":"Día inicial del rango en AAAA-MM-DD, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"hasta":{"description":"Día final del rango en AAAA-MM-DD, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"tramite":{"type":"string","minLength":1,"maxLength":200,"description":"Texto de búsqueda entre los datos persistidos de la conexión."},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},"limit":{"default":50,"description":"Máximo de filas por página; conserva el cursor para continuar en el mismo corte.","type":"integer","minimum":1,"maximum":100}},"required":["causaId"],"additionalProperties":false},"pjud__actuaciones__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"actuaciones":{"type":"array","items":{"type":"object","properties":{"actuacionId":{"type":"string","pattern":"^pja_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de actuación dentro de su causa y ámbito de historia."},"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno de la actuación; null solo cuando la superficie presenta la historia directamente en la causa."},"folio":{"type":"string","description":"Folio dentro del ámbito de historia. No es un identificador único entre causas."},"etapa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Etapa procesal publicada; null si no aparece."},"tramite":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de trámite publicado por el portal."},"descripcion":{"type":"string","description":"Descripción de la pieza o cambio observado."},"estadoFuente":{"description":"Estado propio de la actuación publicado por OJV, sin interpretación jurídica.","anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}]},"documentosReferenciadosFuente":{"description":"Controles documentales observados en la fila, por clase; no acredita descarga de sus bytes.","type":"object","properties":{"principales":{"type":"integer","minimum":0,"maximum":100,"description":"Controles de documentos principales observados en la actuación."},"certificadosEnvio":{"type":"integer","minimum":0,"maximum":100,"description":"Controles de certificados de envío observados en la actuación."},"sinClasificar":{"type":"integer","minimum":0,"maximum":100,"description":"Controles documentales cuya clase no pudo identificarse."}},"required":["principales","certificadosEnvio","sinClasificar"],"additionalProperties":false},"tieneReferenciaAnexo":{"description":"Hay un control de anexos en la actuación; no acredita lectura ni descarga de su contenido.","type":"boolean"},"lecturaAnexosFuente":{"description":"Lectura del listado de anexos de esta actuación; ausente cuando no hay control o en observaciones anteriores.","type":"object","properties":{"estado":{"type":"string","enum":["con_datos","sin_registros","fallida","no_revisada"],"description":"Resultado de revisar el listado, independiente de descargar sus PDF."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":5000},{"type":"null"}],"description":"Referencias del listado revisado; null si no se pudo revisar."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Revisión del listado en esta observación; null si no se envió la solicitud."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z0-9_]{1,100}$"},{"type":"null"}],"description":"Código saneado del fallo de lectura; nunca contenido privado."}},"required":["estado","registrosObservados","revisadaEn","codigoIncidencia"],"additionalProperties":false},"tieneGeoreferencia":{"description":"Hay un control de georreferencia; no acredita lectura de la información asociada.","type":"boolean"},"fechaTramite":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día del trámite indicado por OJV en AAAA-MM-DD; null si no está disponible."},"fechaEntreParentesis":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Segunda fecha entre paréntesis; no se interpreta como notificación ni inicio de plazo en AAAA-MM-DD; null si no está disponible."},"fechaFuente":{"type":"string","description":"Texto original en DD/MM/AAAA, con otra fecha opcional entre paréntesis. Usa fechaTramite y fechaEntreParentesis para comparar. No lo pases por new Date ni interpretes la segunda fecha como notificación o inicio de plazo.","x-emisso-formato":"DD/MM/AAAA (DD/MM/AAAA) opcional"},"foja":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Foja indicada por OJV; se conserva como texto."},"documentoIds":{"type":"array","items":{"type":"string","pattern":"^pjd_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.documentos.consultar; nunca un enlace ni un token de OJV."},"description":"Piezas documentales vinculadas a esta actuación."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia y fecha de observación. No contiene credenciales ni enlaces privados."}},"required":["actuacionId","causaId","cuadernoId","folio","etapa","tramite","descripcion","fechaTramite","fechaEntreParentesis","fechaFuente","foja","documentoIds","fuente"],"additionalProperties":false},"description":"Actuaciones de esta página, con sus fechas originales y fuente."},"cursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},{"type":"null"}],"description":"null cuando no quedan filas en este corte; no acredita que OJV esté completamente revisada."},"estadoDatos":{"type":"string","enum":["sin_sincronizar","disponibles","incompletos"],"description":"Una lista vacía con sin_sincronizar o incompletos no acredita ausencia de actividad judicial."},"observadoHasta":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Corte de observación de los datos persistidos. No es la fecha de la consulta ni la de una resolución."},"cobertura":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"seccion":{"type":"string","enum":["cabecera","historia","litigantes","notificaciones","escritos_por_resolver","exhortos","remisiones","documentos","diligencias","liquidacion","materias"],"description":"Sección concreta cuya cobertura se informa."},"estado":{"type":"string","enum":["con_datos","sin_registros","parcial","fallida","no_accesible","no_implementada"],"description":"Solo con_datos y sin_registros acreditan revisión completa de esta sección. Los otros valores indican información pendiente o inaccesible."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Instante ISO 8601 de revisión; null si esa sección no se revisó."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Filas observadas en la sección; null significa que no se pudo contar, no cero."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z_]+$"},{"type":"null"}],"description":"Código saneado; nunca mensajes, cookies o HTML del proveedor."}},"required":["causaId","cuadernoId","seccion","estado","revisadaEn","registrosObservados","codigoIncidencia"],"additionalProperties":false},"description":"Secciones efectivamente revisadas y sus límites, para las causas de esta consulta."}},"required":["actuaciones","cursor","estadoDatos","observadoHasta","cobertura"],"additionalProperties":false},"pjud__causas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},"limit":{"default":50,"description":"Máximo de filas por página; conserva el cursor para continuar en el mismo corte.","type":"integer","minimum":1,"maximum":100},"busqueda":{"type":"string","minLength":1,"maxLength":200,"description":"Texto de búsqueda entre los datos persistidos de la conexión."},"competencia":{"type":"string","enum":["suprema","apelaciones","civil","laboral","penal","cobranza","familia","disciplinario"],"description":"Competencia judicial de la causa. Su presencia en el contrato no implica que todas las competencias estén implementadas."},"tribunal":{"type":"string","minLength":1,"maxLength":200,"description":"Texto de búsqueda entre los datos persistidos de la conexión."},"estado":{"type":"string","minLength":1,"maxLength":200,"description":"Texto de búsqueda entre los datos persistidos de la conexión."},"ultimaActuacionDesde":{"description":"Día inicial de última actuación en AAAA-MM-DD, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"ultimaActuacionHasta":{"description":"Día final de última actuación en AAAA-MM-DD, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"incluirRetiradas":{"default":false,"description":"Incluye causas retiradas del seguimiento, conservadas como historia en Connect.","type":"boolean"}},"additionalProperties":false},"pjud__causas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"causas":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"competencia":{"type":"string","enum":["suprema","apelaciones","civil","laboral","penal","cobranza","familia","disciplinario"],"description":"Competencia judicial de la causa. Su presencia en el contrato no implica que todas las competencias estén implementadas."},"tribunal":{"type":"object","properties":{"codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código oficial del tribunal dentro de su competencia; null si la fuente no lo entrega."},"nombre":{"type":"string","minLength":1,"description":"Nombre publicado del tribunal."}},"required":["codigo","nombre"],"additionalProperties":false,"description":"Tribunal que conoce la causa."},"identificador":{"type":"string","minLength":1,"description":"Referencia judicial visible, por ejemplo C-1234-2026."},"rol":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Rol informado por la fuente; null si utiliza otro identificador."},"rit":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RIT informado por la fuente; null cuando no corresponde."},"ruc":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUC informado por la fuente; no se deduce de otros identificadores."},"anio":{"anyOf":[{"type":"integer","minimum":1800,"maximum":9999},{"type":"null"}],"description":"Año de la referencia judicial; null si no está disponible."},"caratulado":{"type":"string","description":"Carátula tal como la informa OJV. No identifica por sí sola al cliente del estudio."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado publicado por OJV, sin reinterpretación jurídica."},"etapa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Etapa procesal publicada; null si no aparece."},"procedimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Procedimiento informado en la cabecera de OJV."},"ubicacion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ubicación informada por el portal; null si no está disponible."},"estadoAdministrativo":{"description":"Estado administrativo publicado por OJV, independiente del estado procesal. Ausente en observaciones anteriores o de otra competencia.","anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}]},"formaInicio":{"description":"Forma de inicio publicada por OJV. Ausente cuando la superficie observada no incorpora este campo.","anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}]},"fechaIngreso":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de ingreso de la causa en AAAA-MM-DD; null si no está disponible."},"ultimaActuacion":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de la última actuación observada en AAAA-MM-DD; null si no está disponible."},"seguimiento":{"type":"string","enum":["activo","retirado"],"description":"Estado del seguimiento en Connect, independiente del estado procesal."},"origenIncorporacion":{"type":"string","enum":["seleccion_mis_causas","referencia_exacta"],"description":"Cómo se eligió esta causa para la cartera autorizada."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia y fecha de observación. No contiene credenciales ni enlaces privados."}},"required":["causaId","competencia","tribunal","identificador","rol","rit","ruc","anio","caratulado","estado","etapa","procedimiento","ubicacion","fechaIngreso","ultimaActuacion","seguimiento","origenIncorporacion","fuente"],"additionalProperties":false},"description":"Causas de esta página de la cartera autorizada."},"cursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},{"type":"null"}],"description":"null cuando no quedan filas en este corte; no acredita que OJV esté completamente revisada."},"estadoDatos":{"type":"string","enum":["sin_sincronizar","disponibles","incompletos"],"description":"Una lista vacía con sin_sincronizar o incompletos no acredita ausencia de actividad judicial."},"observadoHasta":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Corte de observación de los datos persistidos. No es la fecha de la consulta ni la de una resolución."},"cobertura":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"seccion":{"type":"string","enum":["cabecera","historia","litigantes","notificaciones","escritos_por_resolver","exhortos","remisiones","documentos","diligencias","liquidacion","materias"],"description":"Sección concreta cuya cobertura se informa."},"estado":{"type":"string","enum":["con_datos","sin_registros","parcial","fallida","no_accesible","no_implementada"],"description":"Solo con_datos y sin_registros acreditan revisión completa de esta sección. Los otros valores indican información pendiente o inaccesible."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Instante ISO 8601 de revisión; null si esa sección no se revisó."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Filas observadas en la sección; null significa que no se pudo contar, no cero."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z_]+$"},{"type":"null"}],"description":"Código saneado; nunca mensajes, cookies o HTML del proveedor."}},"required":["causaId","cuadernoId","seccion","estado","revisadaEn","registrosObservados","codigoIncidencia"],"additionalProperties":false},"description":"Secciones efectivamente revisadas y sus límites, para las causas de esta consulta."}},"required":["causas","cursor","estadoDatos","observadoHasta","cobertura"],"additionalProperties":false},"pjud__causas__detallar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},"limit":{"default":50,"description":"Máximo de filas de tablas por página. Una tabla vacía ocupa una posición; conserva el cursor para continuar.","type":"integer","minimum":1,"maximum":100},"cuadernoId":{"description":"Limita las tablas al contexto de este cuaderno.","type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$"},"seccionCivil":{"description":"Limita las tablas a esta sección civil.","type":"string","enum":["notificaciones","escritos_por_resolver","exhortos","remisiones"]},"seccionLaboral":{"description":"Limita las tablas a esta sección laboral, en ámbito de causa. No se combina con cuadernoId ni seccionCivil.","type":"string","enum":["litigantes","notificaciones","diligencias","liquidacion","materias","escritos_por_resolver","remisiones"]}},"required":["causaId"],"additionalProperties":false},"pjud__causas__detallar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"causa":{"anyOf":[{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"competencia":{"type":"string","enum":["suprema","apelaciones","civil","laboral","penal","cobranza","familia","disciplinario"],"description":"Competencia judicial de la causa. Su presencia en el contrato no implica que todas las competencias estén implementadas."},"tribunal":{"type":"object","properties":{"codigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código oficial del tribunal dentro de su competencia; null si la fuente no lo entrega."},"nombre":{"type":"string","minLength":1,"description":"Nombre publicado del tribunal."}},"required":["codigo","nombre"],"additionalProperties":false,"description":"Tribunal que conoce la causa."},"identificador":{"type":"string","minLength":1,"description":"Referencia judicial visible, por ejemplo C-1234-2026."},"rol":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Rol informado por la fuente; null si utiliza otro identificador."},"rit":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RIT informado por la fuente; null cuando no corresponde."},"ruc":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUC informado por la fuente; no se deduce de otros identificadores."},"anio":{"anyOf":[{"type":"integer","minimum":1800,"maximum":9999},{"type":"null"}],"description":"Año de la referencia judicial; null si no está disponible."},"caratulado":{"type":"string","description":"Carátula tal como la informa OJV. No identifica por sí sola al cliente del estudio."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado publicado por OJV, sin reinterpretación jurídica."},"etapa":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Etapa procesal publicada; null si no aparece."},"procedimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Procedimiento informado en la cabecera de OJV."},"ubicacion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ubicación informada por el portal; null si no está disponible."},"estadoAdministrativo":{"description":"Estado administrativo publicado por OJV, independiente del estado procesal. Ausente en observaciones anteriores o de otra competencia.","anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}]},"formaInicio":{"description":"Forma de inicio publicada por OJV. Ausente cuando la superficie observada no incorpora este campo.","anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}]},"fechaIngreso":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de ingreso de la causa en AAAA-MM-DD; null si no está disponible."},"ultimaActuacion":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de la última actuación observada en AAAA-MM-DD; null si no está disponible."},"seguimiento":{"type":"string","enum":["activo","retirado"],"description":"Estado del seguimiento en Connect, independiente del estado procesal."},"origenIncorporacion":{"type":"string","enum":["seleccion_mis_causas","referencia_exacta"],"description":"Cómo se eligió esta causa para la cartera autorizada."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia y fecha de observación. No contiene credenciales ni enlaces privados."}},"required":["causaId","competencia","tribunal","identificador","rol","rit","ruc","anio","caratulado","estado","etapa","procedimiento","ubicacion","fechaIngreso","ultimaActuacion","seguimiento","origenIncorporacion","fuente"],"additionalProperties":false},{"type":"null"}],"description":"Expediente solicitado, o null si no hay información disponible en esta conexión."},"cuadernos":{"type":"array","items":{"type":"object","properties":{"cuadernoId":{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},"numeroFuente":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Número de cuaderno publicado por OJV, conservado como texto."},"nombre":{"type":"string","description":"Nombre publicado por OJV."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Estado publicado por OJV, sin reinterpretación jurídica."}},"required":["cuadernoId","numeroFuente","nombre","estado"],"additionalProperties":false},"description":"Cuadernos observados. Consulta la cobertura para saber cuáles fueron revisados."},"partes":{"type":"array","items":{"type":"object","properties":{"nombre":{"type":"string","description":"Nombre publicado por OJV."},"rolFuente":{"type":"string","description":"Calidad procesal publicada. No presupone que la persona sea cliente del estudio."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT visible en la sección autorizada; null si la fuente no lo expone."}},"required":["nombre","rolFuente","rut"],"additionalProperties":false},"description":"Partes visibles en la sección autorizada del expediente."},"seccionesCiviles":{"default":[],"description":"Página de tablas civiles guardadas y permitidas. Una tabla ausente no acredita que carezca de registros.","type":"array","items":{"type":"object","properties":{"cuadernoId":{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Cuaderno que estaba seleccionado al observar esta tabla; no atribuye exclusividad de sus filas a ese cuaderno."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia e instante de observación de la tabla, sin enlaces privados."},"contenido":{"oneOf":[{"type":"object","properties":{"seccion":{"type":"string","const":"notificaciones","description":"Tabla civil de notificaciones."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"rol":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Rol publicado en la fila; no se deduce de la causa abierta."},"estado":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Estado de notificación informado por OJV."},"tipo":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de notificación publicado, sin interpretación jurídica."},"fechaTramite":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de trámite en AAAA-MM-DD, sin cálculo de plazos."},"tipoParticipante":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de participante publicado."},"nombre":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Nombre visible en la sección autorizada."},"tramite":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Trámite publicado en la fila."},"observacionFallida":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Observación de una diligencia fallida, cuando está publicada."}},"required":["rol","estado","tipo","fechaTramite","tipoParticipante","nombre","tramite","observacionFallida"],"additionalProperties":false},"description":"Notificaciones publicadas en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"escritos_por_resolver","description":"Tabla civil de escritos pendientes de resolución."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"fechaIngreso":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de ingreso del escrito en AAAA-MM-DD."},"tipo":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de escrito pendiente publicado."},"solicitante":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Solicitante publicado por OJV."},"tieneDocumento":{"type":"boolean","description":"Hay un control documental en la fila; no acredita descarga ni lectura del archivo."},"tieneAnexos":{"type":"boolean","description":"Hay un control de anexos; no acredita su contenido."}},"required":["fechaIngreso","tipo","solicitante","tieneDocumento","tieneAnexos"],"additionalProperties":false},"description":"Escritos pendientes publicados en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"exhortos","description":"Tabla civil de exhortos."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"rolOrigen":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Rol de origen publicado."},"tipo":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de exhorto publicado."},"rolDestino":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Rol de destino publicado, si está visible."},"fechaOrden":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha en que se ordenó el exhorto, en AAAA-MM-DD."},"fechaIngreso":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de ingreso del exhorto en AAAA-MM-DD."},"tribunalDestino":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tribunal de destino publicado."},"estado":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Estado del exhorto publicado."}},"required":["rolOrigen","tipo","rolDestino","fechaOrden","fechaIngreso","tribunalDestino","estado"],"additionalProperties":false},"description":"Exhortos publicados en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"remisiones","description":"Tabla civil de remisiones a Corte."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"rolCorte":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Rol de Corte visible; null cuando solo hay un control sin rol publicado."},"descripcion":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Descripción del trámite de remisión publicada."},"fechaTramite":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de trámite de la remisión en AAAA-MM-DD."},"tieneReferenciaCorte":{"type":"boolean","description":"Hay un control para consultar la referencia de Corte; no acredita que se haya leído su expediente."}},"required":["rolCorte","descripcion","fechaTramite","tieneReferenciaCorte"],"additionalProperties":false},"description":"Remisiones publicadas en la tabla observada; no contienen el expediente de Corte."}},"required":["seccion","filas"],"additionalProperties":false}],"description":"Filas de la tabla observada, con fechas normalizadas y sin enlaces privados ni IDs inventados."},"filasDesde":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Posición de la primera fila devuelta en esta tabla, comenzando en cero. No es un ID judicial."},"totalFilas":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Filas en la última tabla guardada. Revisa el cursor de la respuesta para continuar la lectura."}},"required":["cuadernoId","fuente","contenido","filasDesde","totalFilas"],"additionalProperties":false}},"seccionesLaborales":{"default":[],"description":"Página de tablas laborales guardadas y permitidas. Sus referencias no acreditan descarga de anexos ni lectura de expedientes de Corte.","type":"array","items":{"type":"object","properties":{"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia e instante de observación de la tabla, sin enlaces privados."},"contenido":{"oneOf":[{"type":"object","properties":{"seccion":{"type":"string","const":"litigantes","description":"Tabla laboral de litigantes."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"estadoFuente":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Estado del litigante publicado por OJV."},"tieneIndicadorEstado":{"type":"boolean","description":"La celda contiene un indicador visual de estado; no interpreta su significado."},"abogadoDefensorFuente":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Abogado o defensor publicado en la fila."},"rolFuente":{"type":"string","minLength":1,"maxLength":4000,"description":"Calidad procesal publicada por OJV."},"rut":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"RUT visible del litigante; null si la fuente no lo publica."},"tipoPersona":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de persona publicado por OJV."},"nombre":{"type":"string","minLength":1,"maxLength":4000,"description":"Nombre o razón social publicada por OJV."}},"required":["estadoFuente","tieneIndicadorEstado","abogadoDefensorFuente","rolFuente","rut","tipoPersona","nombre"],"additionalProperties":false},"description":"Litigantes publicados en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"notificaciones","description":"Tabla laboral de notificaciones."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"estado":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Estado de notificación informado por OJV."},"fechaTramite":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de trámite en AAAA-MM-DD, sin cálculo de plazos."},"tipoParte":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de parte publicado en la fila."},"nombre":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Nombre visible en la notificación."},"tramite":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Trámite de notificación publicado."},"observacionFallida":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Observación de notificación fallida, cuando está publicada."}},"required":["estado","fechaTramite","tipoParte","nombre","tramite","observacionFallida"],"additionalProperties":false},"description":"Notificaciones publicadas en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"diligencias","description":"Tabla laboral de diligencias."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"tieneDocumentoIda":{"type":"boolean","description":"Hay un control para el documento de ida; no acredita descarga ni lectura."},"tieneDocumentoVuelta":{"type":"boolean","description":"Hay un control para el documento de vuelta; no acredita descarga ni lectura."},"estado":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Estado de la diligencia publicado por OJV."},"rit":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"RIT publicado en la diligencia."},"ruc":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"RUC publicado en la diligencia."},"tipo":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de diligencia publicado."},"referencia":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Referencia publicada para la diligencia."},"fechaTramite":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de trámite de la diligencia en AAAA-MM-DD."}},"required":["tieneDocumentoIda","tieneDocumentoVuelta","estado","rit","ruc","tipo","referencia","fechaTramite"],"additionalProperties":false},"description":"Diligencias publicadas en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"liquidacion","description":"Tabla laboral de liquidación."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"liquidacionFuente":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Texto de liquidación publicado por OJV."},"tieneReferenciaLiquidacion":{"type":"boolean","description":"Hay un control para consultar la liquidación; no acredita descarga ni lectura."},"rut":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"RUT publicado en la liquidación."},"nombre":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Nombre publicado en la liquidación."},"montoLiquidoFuente":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Monto líquido conservado como texto de la fuente, sin reinterpretación monetaria."}},"required":["liquidacionFuente","tieneReferenciaLiquidacion","rut","nombre","montoLiquidoFuente"],"additionalProperties":false},"description":"Liquidaciones publicadas en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"materias","description":"Tabla laboral de materias."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"codigo":{"type":"string","minLength":1,"maxLength":4000,"description":"Código de materia publicado por OJV."},"glosa":{"type":"string","minLength":1,"maxLength":4000,"description":"Glosa de materia publicada por OJV."},"estado":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Estado de la materia publicado por OJV."},"fechaTermino":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de término de la materia en AAAA-MM-DD."}},"required":["codigo","glosa","estado","fechaTermino"],"additionalProperties":false},"description":"Materias publicadas en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"escritos_por_resolver","description":"Tabla laboral de escritos pendientes de resolución."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"tieneDocumento":{"type":"boolean","description":"Hay un control documental en la fila; no acredita descarga ni lectura."},"tieneAnexos":{"type":"boolean","description":"Hay un control de anexos; no acredita su contenido."},"fechaIngreso":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de ingreso del escrito en AAAA-MM-DD."},"referencia":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Referencia del escrito publicada por OJV."},"solicitante":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Solicitante publicado por OJV."},"tipoIngreso":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Tipo de ingreso publicado por OJV."}},"required":["tieneDocumento","tieneAnexos","fechaIngreso","referencia","solicitante","tipoIngreso"],"additionalProperties":false},"description":"Escritos pendientes publicados en la tabla observada."}},"required":["seccion","filas"],"additionalProperties":false},{"type":"object","properties":{"seccion":{"type":"string","const":"remisiones","description":"Tabla laboral de remisiones a Corte."},"filas":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"rolCorte":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Rol de Corte visible; null cuando solo hay un control sin rol publicado."},"descripcion":{"anyOf":[{"type":"string","minLength":1,"maxLength":4000},{"type":"null"}],"description":"Descripción del trámite de remisión publicada."},"fechaTramite":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha de trámite de la remisión en AAAA-MM-DD."},"tieneReferenciaCorte":{"type":"boolean","description":"Hay un control para consultar la referencia de Corte; no acredita lectura de su expediente."}},"required":["rolCorte","descripcion","fechaTramite","tieneReferenciaCorte"],"additionalProperties":false},"description":"Remisiones publicadas en la tabla observada; no contienen el expediente de Corte."}},"required":["seccion","filas"],"additionalProperties":false}],"description":"Filas observadas en la causa laboral, sin enlaces privados ni IDs inventados."},"filasDesde":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Posición de la primera fila devuelta en esta tabla, comenzando en cero. No es un ID judicial."},"totalFilas":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Filas en la última tabla guardada. Revisa el cursor de la respuesta para continuar la lectura."}},"required":["fuente","contenido","filasDesde","totalFilas"],"additionalProperties":false}},"ambitoHistoria":{"default":null,"description":"Dónde presenta OJV la historia observada. null cuando no hay expediente disponible; causa no acredita un inventario completo de cuadernos.","anyOf":[{"type":"string","enum":["causa","cuadernos"]},{"type":"null"}]},"cursor":{"default":null,"description":"Continuación de las tablas en el mismo corte; null si esta lectura terminó. No acredita cobertura completa de OJV.","anyOf":[{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},{"type":"null"}]},"estadoDatos":{"type":"string","enum":["sin_sincronizar","disponibles","incompletos"],"description":"Una lista vacía con sin_sincronizar o incompletos no acredita ausencia de actividad judicial."},"observadoHasta":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Corte de observación de los datos persistidos. No es la fecha de la consulta ni la de una resolución."},"cobertura":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"seccion":{"type":"string","enum":["cabecera","historia","litigantes","notificaciones","escritos_por_resolver","exhortos","remisiones","documentos","diligencias","liquidacion","materias"],"description":"Sección concreta cuya cobertura se informa."},"estado":{"type":"string","enum":["con_datos","sin_registros","parcial","fallida","no_accesible","no_implementada"],"description":"Solo con_datos y sin_registros acreditan revisión completa de esta sección. Los otros valores indican información pendiente o inaccesible."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Instante ISO 8601 de revisión; null si esa sección no se revisó."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Filas observadas en la sección; null significa que no se pudo contar, no cero."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z_]+$"},{"type":"null"}],"description":"Código saneado; nunca mensajes, cookies o HTML del proveedor."}},"required":["causaId","cuadernoId","seccion","estado","revisadaEn","registrosObservados","codigoIncidencia"],"additionalProperties":false},"description":"Secciones efectivamente revisadas y sus límites, para las causas de esta consulta."}},"required":["causa","cuadernos","partes","seccionesCiviles","seccionesLaborales","ambitoHistoria","cursor","estadoDatos","observadoHasta","cobertura"],"additionalProperties":false},"pjud__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Período de ejecución en AAAA-MM; si se omite, usa el mes actual en Santiago al ejecutar. No filtra la historia de las causas.","type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"alcances":{"default":["expedientes"],"description":"Módulo judicial que se sincroniza en esta llamada.","minItems":1,"maxItems":1,"type":"array","items":{"type":"string","const":"expedientes"}}},"additionalProperties":false},"pjud__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Período de ejecución en AAAA-MM."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","const":"expedientes","description":"Módulo de expedientes judiciales."},"status":{"type":"string","enum":["ok","partial"],"description":"Partial indica que se guardaron avances con cobertura pendiente; no equivale a una revisión completa."},"recordsSynced":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Registros entregados a persistencia por esta ejecución; no es el total histórico de la conexión."},"causasRevisadas":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Causas con una observación recuperada, aun cuando alguna sección quedó pendiente."},"causasPendientes":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Causas elegidas cuya lectura no pudo completarse en esta ejecución."},"documentosDescargados":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Originales recuperados e incluidos en el guardado de esta ejecución."},"detalle":{"type":"string","description":"Explicación de la cobertura o de una cartera sin selección."}},"required":["alcance","status","recordsSynced","causasRevisadas","causasPendientes","documentosDescargados","detalle"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"pjud__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"pjud__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Instante ISO 8601 en que se comprobó la identidad del titular."}},"required":["verificadoEn"],"additionalProperties":false},"pjud__documentos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},"actuacionId":{"type":"string","pattern":"^pja_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de actuación dentro de su causa y ámbito de historia."},"busqueda":{"type":"string","minLength":1,"maxLength":200,"description":"Texto de búsqueda entre los datos persistidos de la conexión."},"clase":{"type":"string","enum":["principal","certificado_envio","anexo","ebook","sin_clasificar"],"description":"Clase documental identificada desde la referencia de OJV."},"desde":{"description":"Día inicial del rango en AAAA-MM-DD, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"hasta":{"description":"Día final del rango en AAAA-MM-DD, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},"limit":{"default":50,"description":"Máximo de filas por página; conserva el cursor para continuar en el mismo corte.","type":"integer","minimum":1,"maximum":100}},"required":["causaId"],"additionalProperties":false},"pjud__documentos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentos":{"type":"array","items":{"type":"object","properties":{"documentoId":{"type":"string","pattern":"^pjd_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.documentos.consultar; nunca un enlace ni un token de OJV."},"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"actuacionId":{"anyOf":[{"type":"string","pattern":"^pja_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de actuación dentro de su causa y ámbito de historia."},{"type":"null"}],"description":"Actuación asociada; null para información de toda la causa."},"descripcion":{"type":"string","description":"Descripción de la pieza o cambio observado."},"tipoFuente":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de pieza o trámite informado por la fuente."},"folioFuente":{"description":"Folio del documento en su listado de origen, distinto del folio de la actuación.","type":"string","minLength":1,"maxLength":100},"anexoObservado":{"description":"Solo para anexos civiles sin folio publicado. Los bytes diferentes se conservan separados y la cobertura del listado permanece parcial.","type":"object","properties":{"identidad":{"type":"string","const":"contenido_en_ambito","description":"Identifica este archivo por sus bytes y su causa o actuación. No identifica un documento judicial ni relaciona archivos diferentes como versiones."},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Huella inmutable del archivo observado, incluso si después se restringe su acceso."},"referencias":{"minItems":1,"maxItems":5000,"type":"array","items":{"type":"object","properties":{"fecha":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha publicada junto a la referencia del anexo; null cuando no se informa."},"descripcion":{"type":"string","minLength":1,"maxLength":4000,"description":"Referencia literal publicada por OJV para el archivo observado; no es un folio ni establece identidad judicial."}},"required":["fecha","descripcion"],"additionalProperties":false},"description":"Referencias del listado que apuntaban a estos mismos bytes en el mismo ámbito. Se conservan repeticiones; no implican identidad judicial."}},"required":["identidad","sha256","referencias"],"additionalProperties":false},"clase":{"type":"string","enum":["principal","certificado_envio","anexo","ebook","sin_clasificar"],"description":"Clase documental identificada desde la referencia de OJV."},"fechaFuente":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de fuente asociado a la pieza o al cambio en AAAA-MM-DD; null si no está disponible."},"descarga":{"type":"string","enum":["referenciado","descargado","fallido","no_accesible"],"description":"Descargado confirma bytes originales guardados; referenciado solo confirma un enlace observado."},"extraccion":{"type":"string","enum":["pendiente","extraido","parcial","requiere_ocr","fallido","no_disponible"],"description":"Disponibilidad del texto. Parcial o requiere_ocr no significa que falten los bytes originales."},"paginas":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Páginas detectadas en el archivo; null si no se pudo determinar."},"sha256":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{64}$"},{"type":"null"}],"description":"Hash de los bytes de la versión descargada. null si todavía no se recuperó el archivo."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia y fecha de observación. No contiene credenciales ni enlaces privados."}},"required":["documentoId","causaId","cuadernoId","actuacionId","descripcion","tipoFuente","clase","fechaFuente","descarga","extraccion","paginas","sha256","fuente"],"additionalProperties":false},"description":"Referencias documentales y estado efectivo de descarga y extracción."},"cursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},{"type":"null"}],"description":"null cuando no quedan filas en este corte; no acredita que OJV esté completamente revisada."},"estadoDatos":{"type":"string","enum":["sin_sincronizar","disponibles","incompletos"],"description":"Una lista vacía con sin_sincronizar o incompletos no acredita ausencia de actividad judicial."},"observadoHasta":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Corte de observación de los datos persistidos. No es la fecha de la consulta ni la de una resolución."},"cobertura":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"seccion":{"type":"string","enum":["cabecera","historia","litigantes","notificaciones","escritos_por_resolver","exhortos","remisiones","documentos","diligencias","liquidacion","materias"],"description":"Sección concreta cuya cobertura se informa."},"estado":{"type":"string","enum":["con_datos","sin_registros","parcial","fallida","no_accesible","no_implementada"],"description":"Solo con_datos y sin_registros acreditan revisión completa de esta sección. Los otros valores indican información pendiente o inaccesible."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Instante ISO 8601 de revisión; null si esa sección no se revisó."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Filas observadas en la sección; null significa que no se pudo contar, no cero."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z_]+$"},{"type":"null"}],"description":"Código saneado; nunca mensajes, cookies o HTML del proveedor."}},"required":["causaId","cuadernoId","seccion","estado","revisadaEn","registrosObservados","codigoIncidencia"],"additionalProperties":false},"description":"Secciones efectivamente revisadas y sus límites, para las causas de esta consulta."}},"required":["documentos","cursor","estadoDatos","observadoHasta","cobertura"],"additionalProperties":false},"pjud__documentos__detallar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentoId":{"type":"string","pattern":"^pjd_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.documentos.consultar; nunca un enlace ni un token de OJV."},"paginaDesde":{"default":1,"description":"Primera página del documento que quieres leer; comienza en 1.","type":"integer","minimum":1,"maximum":9007199254740991},"paginaHasta":{"description":"Última página solicitada, inclusive. La lectura sigue sujeta al máximo de caracteres.","type":"integer","minimum":1,"maximum":9007199254740991},"offsetPagina":{"default":0,"description":"Para continuar una página truncada: siguienteOffset de la respuesta anterior, usando siguientePagina como paginaDesde. Un offset mayor a cero requiere versionSha256 y versionExtraccion de esa respuesta.","type":"integer","minimum":0,"maximum":10000000},"versionSha256":{"description":"Hash de la versión que se desea seguir leyendo. Evita combinar páginas de versiones diferentes.","type":"string","pattern":"^[a-f0-9]{64}$"},"versionExtraccion":{"description":"Versión del texto devuelta por la lectura anterior. Reenvíala junto al hash al continuar; un OCR posterior puede cambiar el texto del mismo PDF.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxCaracteres":{"default":12000,"description":"Máximo de caracteres devueltos; revisa textoTruncado y el punto de continuación.","type":"integer","minimum":1000,"maximum":60000},"incluirEnlaceOriginal":{"default":false,"description":"Solicita un enlace temporal al PDF ya guardado, sujeto al permiso de esta conexión.","type":"boolean"}},"required":["documentoId"],"additionalProperties":false},"pjud__documentos__detallar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documento":{"anyOf":[{"type":"object","properties":{"documentoId":{"type":"string","pattern":"^pjd_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.documentos.consultar; nunca un enlace ni un token de OJV."},"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"actuacionId":{"anyOf":[{"type":"string","pattern":"^pja_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de actuación dentro de su causa y ámbito de historia."},{"type":"null"}],"description":"Actuación asociada; null para información de toda la causa."},"descripcion":{"type":"string","description":"Descripción de la pieza o cambio observado."},"tipoFuente":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tipo de pieza o trámite informado por la fuente."},"folioFuente":{"description":"Folio del documento en su listado de origen, distinto del folio de la actuación.","type":"string","minLength":1,"maxLength":100},"anexoObservado":{"description":"Solo para anexos civiles sin folio publicado. Los bytes diferentes se conservan separados y la cobertura del listado permanece parcial.","type":"object","properties":{"identidad":{"type":"string","const":"contenido_en_ambito","description":"Identifica este archivo por sus bytes y su causa o actuación. No identifica un documento judicial ni relaciona archivos diferentes como versiones."},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Huella inmutable del archivo observado, incluso si después se restringe su acceso."},"referencias":{"minItems":1,"maxItems":5000,"type":"array","items":{"type":"object","properties":{"fecha":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Fecha publicada junto a la referencia del anexo; null cuando no se informa."},"descripcion":{"type":"string","minLength":1,"maxLength":4000,"description":"Referencia literal publicada por OJV para el archivo observado; no es un folio ni establece identidad judicial."}},"required":["fecha","descripcion"],"additionalProperties":false},"description":"Referencias del listado que apuntaban a estos mismos bytes en el mismo ámbito. Se conservan repeticiones; no implican identidad judicial."}},"required":["identidad","sha256","referencias"],"additionalProperties":false},"clase":{"type":"string","enum":["principal","certificado_envio","anexo","ebook","sin_clasificar"],"description":"Clase documental identificada desde la referencia de OJV."},"fechaFuente":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de fuente asociado a la pieza o al cambio en AAAA-MM-DD; null si no está disponible."},"descarga":{"type":"string","enum":["referenciado","descargado","fallido","no_accesible"],"description":"Descargado confirma bytes originales guardados; referenciado solo confirma un enlace observado."},"extraccion":{"type":"string","enum":["pendiente","extraido","parcial","requiere_ocr","fallido","no_disponible"],"description":"Disponibilidad del texto. Parcial o requiere_ocr no significa que falten los bytes originales."},"paginas":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Páginas detectadas en el archivo; null si no se pudo determinar."},"sha256":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{64}$"},{"type":"null"}],"description":"Hash de los bytes de la versión descargada. null si todavía no se recuperó el archivo."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia y fecha de observación. No contiene credenciales ni enlaces privados."}},"required":["documentoId","causaId","cuadernoId","actuacionId","descripcion","tipoFuente","clase","fechaFuente","descarga","extraccion","paginas","sha256","fuente"],"additionalProperties":false},{"type":"null"}],"description":"Metadatos de la versión del documento que se está leyendo; null si no está disponible."},"paginas":{"type":"array","items":{"type":"object","properties":{"numero":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Número de página dentro del PDF original; comienza en 1."},"texto":{"type":"string","description":"Texto extraído de la página; puede estar vacío cuando no hay texto recuperable."},"metodo":{"type":"string","enum":["texto_pdf","ocr","sin_texto"],"description":"Cómo se obtuvo el texto. Sin_texto no acredita que la página carezca de contenido visual."}},"required":["numero","texto","metodo"],"additionalProperties":false},"description":"Páginas o fragmentos de página recuperados de la versión indicada."},"textoTruncado":{"type":"boolean","description":"Indica si queda texto fuera de esta respuesta por el límite solicitado."},"siguientePagina":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Página desde la cual continuar; null si se agotó la lectura solicitada."},"siguienteOffset":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Posición dentro de la página cuando el corte ocurrió a mitad de texto."},"versionExtraccion":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Versión inmutable del texto leído; puede cambiar con una extracción posterior del mismo PDF."},"incidenciaExtraccion":{"anyOf":[{"type":"string","enum":["pjud_pdf_invalido","pjud_pdf_protegido","pjud_pdf_limite","pjud_pdf_timeout","pjud_pdf_procesamiento_fallido"]},{"type":"null"}],"description":"Fallo saneado del intento de extracción elegido. No implica que falten los bytes originales ni permite inferir cuántas páginas tiene el PDF."},"enlaceOriginal":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","pattern":"^https:\\/\\/","description":"Enlace temporal autorizado al original guardado, nunca al token privado de OJV."},"expiraEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["url","expiraEn"],"additionalProperties":false},{"type":"null"}],"description":"Acceso temporal al original, o null si no se solicitó o no está disponible."},"estadoDatos":{"type":"string","enum":["sin_sincronizar","disponibles","incompletos"],"description":"Una lista vacía con sin_sincronizar o incompletos no acredita ausencia de actividad judicial."},"observadoHasta":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Corte de observación de los datos persistidos. No es la fecha de la consulta ni la de una resolución."},"cobertura":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"seccion":{"type":"string","enum":["cabecera","historia","litigantes","notificaciones","escritos_por_resolver","exhortos","remisiones","documentos","diligencias","liquidacion","materias"],"description":"Sección concreta cuya cobertura se informa."},"estado":{"type":"string","enum":["con_datos","sin_registros","parcial","fallida","no_accesible","no_implementada"],"description":"Solo con_datos y sin_registros acreditan revisión completa de esta sección. Los otros valores indican información pendiente o inaccesible."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Instante ISO 8601 de revisión; null si esa sección no se revisó."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Filas observadas en la sección; null significa que no se pudo contar, no cero."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z_]+$"},{"type":"null"}],"description":"Código saneado; nunca mensajes, cookies o HTML del proveedor."}},"required":["causaId","cuadernoId","seccion","estado","revisadaEn","registrosObservados","codigoIncidencia"],"additionalProperties":false},"description":"Secciones efectivamente revisadas y sus límites, para las causas de esta consulta."}},"required":["documento","paginas","textoTruncado","siguientePagina","siguienteOffset","versionExtraccion","incidenciaExtraccion","enlaceOriginal","estadoDatos","observadoHasta","cobertura"],"additionalProperties":false},"pjud__novedades__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cursor":{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},"limit":{"default":50,"description":"Máximo de filas por página; conserva el cursor para continuar en el mismo corte.","type":"integer","minimum":1,"maximum":100},"desde":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},"causaIds":{"description":"Limita a estas causas, incluidas las retiradas. Si falta, usa la cartera vigente.","minItems":1,"maxItems":50,"type":"array","items":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."}},"tipos":{"description":"Tipos de cambio que quieres incluir en esta consulta.","minItems":1,"type":"array","items":{"type":"string","enum":["carga_inicial","actuacion_incorporada","actuacion_actualizada","documento_incorporado","documento_disponible","documento_actualizado","causa_actualizada","seccion_actualizada"],"description":"Tipo de diferencia observada. Carga inicial corresponde a historia incorporada, no a actividad nueva del día."}},"incluirCargaInicial":{"default":false,"description":"Incluye incorporaciones históricas iniciales; no son hechos nuevos del día.","type":"boolean"}},"additionalProperties":false},"pjud__novedades__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"novedades":{"type":"array","items":{"type":"object","properties":{"novedadId":{"type":"string","pattern":"^pjn_[a-zA-Z0-9_-]{16,80}$","description":"Identificador inmutable del cambio detectado por Connect."},"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"actuacionId":{"anyOf":[{"type":"string","pattern":"^pja_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de actuación dentro de su causa y ámbito de historia."},{"type":"null"}],"description":"Actuación asociada; null para información de toda la causa."},"documentoId":{"anyOf":[{"type":"string","pattern":"^pjd_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.documentos.consultar; nunca un enlace ni un token de OJV."},{"type":"null"}],"description":"Documento afectado por el cambio, si corresponde."},"tipo":{"type":"string","enum":["carga_inicial","actuacion_incorporada","actuacion_actualizada","documento_incorporado","documento_disponible","documento_actualizado","causa_actualizada","seccion_actualizada"],"description":"Tipo de diferencia observada. Carga inicial corresponde a historia incorporada, no a actividad nueva del día."},"seccionCivil":{"default":null,"description":"Sección civil y contexto de cuaderno cuya tabla cambió; consulta causas.detallar con esos filtros. null para los otros tipos de novedad.","anyOf":[{"type":"object","properties":{"nombre":{"type":"string","enum":["notificaciones","escritos_por_resolver","exhortos","remisiones"],"description":"Tabla civil cuyo contenido cambió."},"cuadernoId":{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."}},"required":["nombre","cuadernoId"],"additionalProperties":false},{"type":"null"}]},"seccionLaboral":{"description":"Tabla laboral cuya revisión cambió; consulta causas.detallar con ese filtro. Ausente o null para otras novedades.","anyOf":[{"type":"object","properties":{"nombre":{"type":"string","enum":["litigantes","notificaciones","diligencias","liquidacion","materias","escritos_por_resolver","remisiones"],"description":"Tabla laboral de la causa cuyo contenido cambió."}},"required":["nombre"],"additionalProperties":false},{"type":"null"}]},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},"fechaFuente":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","x-emisso-formato":"AAAA-MM-DD"},{"type":"null"}],"description":"Día de fuente asociado a la pieza o al cambio en AAAA-MM-DD; null si no está disponible."},"descripcion":{"type":"string","description":"Descripción de la pieza o cambio observado."},"cambios":{"type":"array","items":{"type":"object","properties":{"campo":{"type":"string","enum":["caratulado","estado","etapa","procedimiento","ubicacion","documento_sha256","descripcion","tramite","fecha_tramite","fecha_entre_parentesis","fecha_fuente","foja","estado_administrativo","forma_inicio","estado_actuacion"],"description":"Campo cuyo valor cambió entre observaciones."},"antes":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Valor previo; null si no existía o no estaba disponible."},"despues":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Valor observado en esta revisión; null si no está disponible."}},"required":["campo","antes","despues"],"additionalProperties":false},"description":"Diferencias puntuales entre valores observados."},"fuente":{"type":"object","properties":{"sistema":{"type":"string","const":"OJV","description":"Sistema judicial del que procede la observación."},"ruta":{"type":"string","enum":["mis_causas","consulta_unificada","ingreso_ojv"],"description":"Superficie OJV utilizada para recuperar la información."},"portalUrl":{"type":"string","enum":["https://oficinajudicialvirtual.pjud.cl/indexN.php","https://ojv.pjud.cl/kpitec-ojv-web/views/login.html"],"description":"Acceso al portal; puede requerir sesión. No contiene enlaces privados ni tokens de OJV."},"observadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."}},"required":["sistema","ruta","portalUrl","observadoEn"],"additionalProperties":false,"description":"Procedencia y fecha de observación. No contiene credenciales ni enlaces privados."}},"required":["novedadId","causaId","actuacionId","documentoId","tipo","seccionCivil","observadoEn","fechaFuente","descripcion","cambios","fuente"],"additionalProperties":false},"description":"Cambios observados por Connect dentro de la cartera y del corte de consulta."},"cursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":4096,"description":"Cursor opaco de la respuesta anterior. Reenvíalo sin construirlo ni modificarlo."},{"type":"null"}],"description":"null cuando no quedan filas en este corte; no acredita que OJV esté completamente revisada."},"estadoDatos":{"type":"string","enum":["sin_sincronizar","disponibles","incompletos"],"description":"Una lista vacía con sin_sincronizar o incompletos no acredita ausencia de actividad judicial."},"observadoHasta":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Corte de observación de los datos persistidos. No es la fecha de la consulta ni la de una resolución."},"cobertura":{"type":"array","items":{"type":"object","properties":{"causaId":{"type":"string","pattern":"^pjc_[a-zA-Z0-9_-]{16,80}$","description":"ID obtenido de pjud.causas.consultar. No es el rol escrito en el portal."},"cuadernoId":{"anyOf":[{"type":"string","pattern":"^pjq_[a-zA-Z0-9_-]{16,80}$","description":"Identificador estable de cuaderno, obtenido de causas.detallar."},{"type":"null"}],"description":"Cuaderno al que corresponde la información; null para una sección de toda la causa."},"seccion":{"type":"string","enum":["cabecera","historia","litigantes","notificaciones","escritos_por_resolver","exhortos","remisiones","documentos","diligencias","liquidacion","materias"],"description":"Sección concreta cuya cobertura se informa."},"estado":{"type":"string","enum":["con_datos","sin_registros","parcial","fallida","no_accesible","no_implementada"],"description":"Solo con_datos y sin_registros acreditan revisión completa de esta sección. Los otros valores indican información pendiente o inaccesible."},"revisadaEn":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria."},{"type":"null"}],"description":"Instante ISO 8601 de revisión; null si esa sección no se revisó."},"registrosObservados":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Filas observadas en la sección; null significa que no se pudo contar, no cero."},"codigoIncidencia":{"anyOf":[{"type":"string","pattern":"^pjud_[a-z_]+$"},{"type":"null"}],"description":"Código saneado; nunca mensajes, cookies o HTML del proveedor."}},"required":["causaId","cuadernoId","seccion","estado","revisadaEn","registrosObservados","codigoIncidencia"],"additionalProperties":false},"description":"Secciones efectivamente revisadas y sus límites, para las causas de esta consulta."}},"required":["novedades","cursor","estadoDatos","observadoHasta","cobertura"],"additionalProperties":false},"previred__certificados__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rutTrabajador":{"type":"string","pattern":"^\\d{1,8}-[\\dkK]$","description":"Filtra por UN trabajador. El RUT va sin puntos y con guion antes del dígito verificador: se guarda cifrado y el filtro corre sobre un índice ciego, así que solo calza escrito exactamente en esa forma."},"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}}},"previred__certificados__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"certificados":{"type":"array","items":{"type":"object","properties":{"rutTrabajador":{"type":"string","description":"El RUT del trabajador al que pertenece el certificado, sin puntos y con guion."},"nombreTrabajador":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre del trabajador según Previred, o null si el portal no lo trajo."},"periodoDesde":{"type":"string","description":"Primer mes que cubre el certificado, en formato AAAA-MM. No lo elige quien llama: el conector usa la ventana más ancha que Previred admite, terminando en el período que se sincronizó."},"periodoHasta":{"type":"string","description":"Último mes que cubre el certificado, en formato AAAA-MM: el período que se sincronizó."},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tamaño del PDF en bytes."},"certificadoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Enlace firmado de vida corta para descargar el PDF del certificado, o null si todavía no se ha emitido. Caduca a los pocos minutos y no sirve para compartir."},"syncedAt":{"type":"string","description":"Cuándo se guardó esta fila en Connect (ISO 8601). Dice qué tan fresca está la caché: si la última sincronización es vieja, lo que falta puede existir en Previred y todavía no haberse traído."}},"required":["rutTrabajador","nombreTrabajador","periodoDesde","periodoHasta","bytes","certificadoUrl","syncedAt"],"additionalProperties":false},"description":"Los certificados guardados: hay uno vigente por trabajador, y cada sincronización lo reemplaza por uno más nuevo en vez de acumular uno por mes."},"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":["certificados","cursor"],"additionalProperties":false},"previred__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["planillas","cotizaciones","deuda","f301","certificados","empresas","nominas"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"previred__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"previred__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"previred__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"previred__cotizaciones__consultar__Input":{"$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."},"rutTrabajador":{"type":"string","pattern":"^\\d{1,8}-[\\dkK]$","description":"Filtra por UN trabajador. El RUT va sin puntos y con guion antes del dígito verificador: se guarda cifrado y el filtro corre sobre un índice ciego, así que solo calza escrito exactamente en esa forma."},"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}}},"previred__cotizaciones__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cotizaciones":{"type":"array","items":{"type":"object","properties":{"rutTrabajador":{"type":"string","description":"El RUT del trabajador, sin puntos y con guion."},"nombreTrabajador":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre del trabajador tal como lo informa el comprobante, o null si no venía."},"periodo":{"type":"string","description":"El mes de remuneraciones al que corresponde la cotización, en formato AAAA-MM. No es el mes en que se pagó: eso lo dice la fecha de pago de su planilla, que cae al mes siguiente."},"institucion":{"type":"string","description":"La institución previsional, con el nombre que le da Previred (la AFP, Fonasa o la isapre, el seguro de cesantía, la mutual, la caja de compensación)."},"tipoInstitucion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La familia de la institución, que es el eje por el que Previred agrupa y filtra (por ejemplo 'AFP' o 'MUTUAL'). null cuando el portal no la informó."},"rentaImponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"La renta imponible sobre la que se calculó ESTA cotización, en pesos. Un mismo trabajador y mes tienen una renta imponible distinta por institución, cada una con su propio tope: no las sumes ni las trates como el sueldo. null cuando el comprobante no traía el dato."},"montoCotizacion":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo cotizado a esa institución en el período, en pesos. null cuando el comprobante no traía el dato."},"diasTrabajados":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Días trabajados informados en el período. Solo algunas instituciones los declaran (lo hace el Seguro Social y las demás no), así que en la mayoría de las filas viene null: eso es lo que dice el comprobante, no un hueco."},"folio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El folio de la planilla que incluye esta cotización: el puente hacia previred.planillas.consultar. null cuando no se pudo determinar."}},"required":["rutTrabajador","nombreTrabajador","periodo","institucion","tipoInstitucion","rentaImponible","montoCotizacion","diasTrabajados","folio"],"additionalProperties":false},"description":"Las cotizaciones guardadas. Un mismo trabajador y mes traen varias filas, una por institución."},"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":["cotizaciones","cursor"],"additionalProperties":false},"previred__deuda__consultar__Input":{"$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}}},"previred__deuda__consultar__Output":{"$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},"previred__empresas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"rut":{"type":"string","pattern":"^\\d{1,8}-[\\dkK]$","description":"Filtra por el RUT de la EMPRESA, no el de un trabajador. Va sin puntos y con guion antes del dígito verificador."},"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}}},"previred__empresas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"empresas":{"type":"array","items":{"type":"object","properties":{"rut":{"type":"string","description":"El RUT de la empresa, sin puntos y con guion."},"razonSocial":{"type":"string","description":"El nombre legal de la empresa, según Previred."},"codDivision":{"type":"string","description":"La división dentro de la empresa, que Previred trata como parte de la selección. '00' es la empresa sin divisiones, que es el caso general."},"syncedAt":{"type":"string","description":"Cuándo se guardó esta fila en Connect (ISO 8601). Dice qué tan fresca está la caché: si la última sincronización es vieja, lo que falta puede existir en Previred y todavía no haberse traído."}},"required":["rut","razonSocial","codDivision","syncedAt"],"additionalProperties":false},"description":"Las empresas que la credencial de esta conexión administra en Previred. Ver una empresa aquí no es poder leer sus datos: cada conexión de Connect es UNA empresa, y para las demás hay que crear su propia conexión."},"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":["empresas","cursor"],"additionalProperties":false},"previred__f301__consultar__Input":{"$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."},"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}}},"previred__f301__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"archivos":{"type":"array","items":{"type":"object","properties":{"periodo":{"type":"string","description":"El período que cubre el archivo, en formato AAAA-MM."},"nomina":{"type":"string","description":"El nombre que la nómina tiene en Previred. Es lo que distingue dos archivos del mismo período."},"centroCosto":{"type":"string","description":"'total' significa Total Empresa, que es lo único que este conector emite hoy. Está en la respuesta porque Previred también permite emitir el archivo por centro de costo, y ese sería otro archivo."},"trabajadores":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos trabajadores informa el archivo, una línea por cada uno."},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tamaño del archivo en bytes."},"archivoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Enlace firmado de vida corta para descargar el archivo y subirlo al sitio de la Dirección del Trabajo, o null si todavía no se ha descargado. Caduca a los pocos minutos y no sirve para compartir: el archivo trae el RUT, el nombre y la renta de cada trabajador."},"syncedAt":{"type":"string","description":"Cuándo se guardó esta fila en Connect (ISO 8601). Dice qué tan fresca está la caché: si la última sincronización es vieja, lo que falta puede existir en Previred y todavía no haberse traído."}},"required":["periodo","nomina","centroCosto","trabajadores","bytes","archivoUrl","syncedAt"],"additionalProperties":false},"description":"Los archivos guardados. Cada uno cubre UNA nómina de un período, así que un período con dos nóminas trae dos filas."},"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":["archivos","cursor"],"additionalProperties":false},"previred__nominas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"estado":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[^\\s&]+$","description":"Filtra por el código de estado crudo que devolvió Previred. Sin él, trae todos los estados actuales."},"seleccionable":{"type":"boolean","description":"Filtra por si la nómina está actualmente habilitada para selección en Previred."},"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}}},"previred__nominas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"nominas":{"type":"array","items":{"type":"object","properties":{"idNomina":{"type":"string","description":"Identificador opaco y estable que Previred asigna a la nómina. Es su clave natural dentro de esta conexión."},"periodo":{"type":"string","description":"Período que la propia pantalla de Previred declaró para este snapshot, en formato AAAA-MM. No es un período pedido por quien consulta."},"nombre":{"type":"string","description":"Nombre de la nómina tal como lo configuró la empresa en Previred."},"estado":{"type":"string","description":"Código de estado crudo de Previred. Se conserva para trazabilidad; usa los booleanos operativos en vez de inferir significado de este código."},"requiereActualizacion":{"type":"boolean","description":"true cuando Previred exige actualizar la nómina antes de continuar."},"formaCarga":{"type":"string","description":"Código de forma de carga crudo de Previred. Se conserva sin inventar una taxonomía no documentada."},"requiereCalculo":{"type":"boolean","description":"true cuando Previred todavía exige calcular el total a pagar."},"bloqueada":{"type":"boolean","description":"true cuando el portal marca el estado 16, que su propio JavaScript trata como nómina bloqueada."},"seleccionable":{"type":"boolean","description":"true cuando la fila tiene su checkbox habilitado y no requiere actualización, cálculo ni está bloqueada."},"montoTotal":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Total de la nómina en pesos. null cuando el portal todavía muestra 'Calcular Total a Pagar' o no entregó un monto; nunca se convierte en 0."},"cuadraturaDisponible":{"type":"boolean","description":"true cuando Previred habilita la cuadratura de esta nómina en la pantalla actual."},"observadoEn":{"type":"string","description":"Instante ISO 8601 en que se observó este estado en Previred."},"syncedAt":{"type":"string","description":"Cuándo se guardó esta fila en Connect (ISO 8601). Dice qué tan fresca está la caché: si la última sincronización es vieja, lo que falta puede existir en Previred y todavía no haberse traído."}},"required":["idNomina","periodo","nombre","estado","requiereActualizacion","formaCarga","requiereCalculo","bloqueada","seleccionable","montoTotal","cuadraturaDisponible","observadoEn","syncedAt"],"additionalProperties":false},"description":"El snapshot vigente del maletín de nóminas de Previred. No es un historial: las filas que dejaron de estar vigentes no se exponen."},"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":["nominas","cursor"],"additionalProperties":false},"previred__planillas__consultar__Input":{"$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."},"institucion":{"type":"string","description":"Filtra por institución previsional, con el nombre exacto que trae el campo 'institucion' de las filas. Sin él, trae todas."},"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}}},"previred__planillas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"planillas":{"type":"array","items":{"type":"object","properties":{"folio":{"type":"string","description":"El identificador que Previred le da a la planilla, y con el que el portal la direcciona. Son 16 dígitos y es opaco: no lo descompongas, porque los folios reales no siguen un patrón parejo."},"periodo":{"type":"string","description":"El mes de remuneraciones que paga esta planilla, en formato AAAA-MM."},"institucion":{"type":"string","description":"La institución previsional, con el nombre que le da Previred (la AFP, Fonasa o la isapre, el seguro de cesantía, la mutual, la caja de compensación)."},"tipoInstitucion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La familia de la institución, que es el eje por el que Previred agrupa y filtra (por ejemplo 'AFP' o 'MUTUAL'). null cuando el portal no la informó."},"idNomina":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Identificador de la nómina dentro del período. Una empresa puede tener varias en el mismo mes, así que agrupar solo por período las mezcla."},"montoPagado":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Lo pagado a esa institución, en pesos. null cuando el portal no trajo la celda, nunca 0: un 0 es un monto real y confundirlos mentiría sobre la plata."},"fechaPago":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se pagó la planilla, según el comprobante. null cuando el portal no lo informó."},"afiliadosInformados":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántos trabajadores informa esta planilla. null cuando el portal no trajo el dato."},"comprobanteUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Enlace firmado de vida corta al comprobante de pago en PDF, o null si todavía no se ha descargado (la planilla vale igual y el próximo sync lo reintenta). Caduca a los pocos minutos y no sirve para compartir: el documento trae el RUT, el nombre y la renta de los trabajadores."}},"required":["folio","periodo","institucion","tipoInstitucion","idNomina","montoPagado","fechaPago","afiliadosInformados","comprobanteUrl"],"additionalProperties":false},"description":"Las planillas guardadas, de la más reciente a la más antigua. Un pago de un período se abre en varias planillas, una por institución previsional: varias filas del mismo período es lo normal, no una duplicación."},"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":["planillas","cursor"],"additionalProperties":false},"santander_empresas__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["saldos","movimientos"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión (un login, un logout), así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."}},"required":["periodo","alcances"]},"santander_empresas__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"cuentasConsultadas":{"description":"Cuántas cuentas se alcanzaron a consultar. Es lo que vuelve interpretable un 'recordsSynced: 0': cero con una cuenta consultada significa que el banco no tiene movimientos ahí, y cero con cero cuentas significa que ni siquiera se llegó a preguntar. Los dos casos traen el mismo 0, así que revisa este campo antes de reportar «no hay datos».","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"santander_empresas__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"santander_empresas__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"santander_empresas__movimientos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Filtra por el mes (AAAA-MM) con el que se sincronizó la fila. Sin él, la respuesta cruza todos los períodos guardados.","type":"string"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"type":{"description":"Filtra por el eje del monto, en la forma persistida ('cargo'/'abono').","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"santander_empresas__movimientos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"movimientos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"El identificador ESTABLE de este movimiento: la clave natural con la que Connect lo guardó (no un número de operación del banco). Es el mismo valor entre sincronizaciones repetidas: úsalo para deduplicar en tu propio sistema."},"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que pertenece el movimiento."},"currency":{"type":"string","description":"La moneda de la cuenta ('CLP', 'USD', ...). A diferencia de otros bancos de Connect, Santander siempre la declara: nunca viene vacía ni ausente."},"periodo":{"type":"string","description":"El mes (AAAA-MM) con el que se sincronizó esta fila. Es cómo se pidió el dato, no una propiedad del movimiento: no entra en su identidad, así que volver a traerlo bajo otro período no crea una fila nueva ni infla los totales."},"fecha":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha y hora del movimiento (ISO 8601). null si el banco no trajo la celda."},"monto":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible lo trae 'display'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"type":{"anyOf":[{"type":"string","enum":["cargo","abono"]},{"type":"null"}],"description":"Eje cargo/abono, en la MISMA palabra con la que Santander lo persiste, a diferencia de otros bancos de Connect, este campo no está invertido: 'cargo' es plata que SALE de la cuenta y 'abono' es plata que ENTRA. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display'. 'null' significa que Santander no informó el tipo: no asumas ninguno de los dos."},"display":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El monto ya formateado a la chilena y CON signo, derivado de 'type' ('cargo', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo que queda en la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo."},"descripcion":{"type":"string","description":"La glosa del movimiento tal como aparece en la cartola (por ejemplo 'PAGO PROVEEDOR')."},"observacion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El texto complementario que Santander entrega en 'Observacion', separado de la glosa ('descripcion'). Puede contener detalles de la operación; no se identifica automáticamente como el comentario escrito por quien transfiere. 'null' cuando el banco no entrega texto o el movimiento histórico todavía no se ha enriquecido con este campo."},"counterparty":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nombre de la contraparte. Actualmente null: todavía no hay un formato respaldado para extraerlo."},"rut":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RUT de la contraparte derivado del texto persistido, solo cuando un formato soportado permite atribuirlo sin ambigüedad y su dígito verificador es válido. Sin puntos, con guion y DV en mayúscula. null si no se puede derivar; no está disponible en todos los movimientos."},"bank":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Banco de la contraparte. Actualmente null: todavía no hay un formato respaldado para extraerlo."},"account":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuenta de la contraparte, como texto. Actualmente null: todavía no hay un formato respaldado para extraerla. No es 'numeroCuenta', que identifica la cuenta conectada."}},"required":["name","rut","bank","account"],"additionalProperties":false,"description":"Contraparte derivada al consultar los textos ya sincronizados, sin otro login ni migración de datos. Los campos ambiguos o de formatos no soportados quedan en null; 'descripcion' se conserva íntegra."},"counterpartySource":{"anyOf":[{"type":"string","enum":["descripcion","observacion"]},{"type":"null"}],"description":"Texto del banco del que se derivó la contraparte: 'descripcion' corresponde a la glosa y 'observacion' al texto complementario del movimiento. null significa que no se pudo derivar con los formatos soportados, no que el banco nunca informe contraparte. La respuesta cruda no se expone."}},"required":["id","numeroCuenta","currency","periodo","fecha","monto","type","display","saldoContable","descripcion","observacion","counterparty","counterpartySource"],"additionalProperties":false},"description":"Los movimientos guardados, del más reciente al más antiguo. Una lista vacía significa que ese período todavía no se sincronizó, no que no haya movimientos."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["movimientos","cursor"],"additionalProperties":false},"santander_empresas__saldos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"observedDay":{"description":"Filtra por el día del snapshot, en formato AAAA-MM-DD. Sin él, la primera página ya trae los saldos más recientes que hay guardados de cada cuenta.","type":"string"},"numeroCuenta":{"description":"Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.","type":"string"},"cursor":{"description":"Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.","type":"integer","minimum":1,"maximum":500}}},"santander_empresas__saldos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"saldos":{"type":"array","items":{"type":"object","properties":{"numeroCuenta":{"type":"string","description":"El número de la cuenta a la que corresponde esta foto de saldo."},"currency":{"type":"string","description":"La moneda de la cuenta ('CLP', 'USD', ...). A diferencia de otros bancos de Connect, Santander siempre la declara: nunca viene vacía ni ausente."},"observedDay":{"type":"string","description":"El día de esta foto de saldo, en formato AAAA-MM-DD. Hay una foto por cuenta y por día: volver a sincronizar el mismo día actualiza esta fila en vez de agregar otra."},"observedAt":{"type":"string","description":"El instante exacto (ISO 8601) en que se generó esta foto de saldo: el timestamp completo con el que se guardó la fila, no sólo el día. Para filtrar o comparar por día usa 'observedDay'."},"saldoContable":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo contable de la cuenta. Es un balance, no una operación: conserva su propio signo (un sobregiro es negativo) y no lleva 'type'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."},"saldoDisponible":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El saldo disponible de la cuenta. Es un balance: conserva su propio signo y no lleva 'type'. Un null significa que el banco no trajo la celda, que no es lo mismo que cero."}},"required":["numeroCuenta","currency","observedDay","observedAt","saldoContable","saldoDisponible"],"additionalProperties":false},"description":"Los snapshots de saldo guardados, el más reciente primero. Una lista vacía significa que esta conexión todavía no se sincronizó, no que la empresa no tenga cuentas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."}},"required":["saldos","cursor"],"additionalProperties":false},"sii__anulacion__emitir__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"previewRef":{"type":"string","minLength":1,"description":"Referencia devuelta por sii.anulacion.previsualizar; debe estar vigente y pertenecer a la misma conexión. Si la preparó el mismo actor, esta llamada la confirma."}},"required":["previewRef"],"additionalProperties":false},"sii__anulacion__emitir__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resultado":{"oneOf":[{"type":"object","properties":{"tipoDte":{"type":"string","const":"61","description":"Nota de crédito electrónica."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: firmar en el SII envía en el mismo acto, así que nada autoriza repetirlo."},"estado":{"type":"string","const":"emitida","description":"El portal lista la nota y su firma es la misma que Connect envió: el documento quedó anulado."},"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"Identificador estable de la operación regulada."},"folio":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Folio de la nota de crédito, en texto y sólo con identidad concluyente."},"fechaEmision":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión de la nota de crédito, confirmada en el portal."},"confirmadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante en que Connect obtuvo la confirmación concluyente de la anulación."},"xmlFirmado":{"type":"string","minLength":1,"maxLength":1048576,"description":"XML del DTE firmado que Connect envió y el SII aceptó, con su timbre electrónico (TED). Basta para generar la representación impresa y el PDF417. Es el documento tributario: guárdalo como tal."}},"required":["tipoDte","puedeReintentar","estado","operacionId","folio","fechaEmision","confirmadoEn"],"additionalProperties":false},{"type":"object","properties":{"tipoDte":{"type":"string","const":"61","description":"Nota de crédito electrónica."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: firmar en el SII envía en el mismo acto, así que nada autoriza repetirlo."},"estado":{"type":"string","const":"rechazada","description":"La nota no llegó a enviarse: el documento sigue vigente y se puede preparar la anulación de nuevo."},"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"Identificador estable de la operación regulada."},"motivo":{"type":"string","enum":["rechazo_concluyente_sin_emision"],"description":"Motivo seguro del rechazo confirmado."}},"required":["tipoDte","puedeReintentar","estado","operacionId","motivo"],"additionalProperties":false},{"type":"object","properties":{"tipoDte":{"type":"string","const":"61","description":"Nota de crédito electrónica."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: firmar en el SII envía en el mismo acto, así que nada autoriza repetirlo."},"estado":{"type":"string","const":"resultado_desconocido","description":"Evidencia insuficiente para afirmar emisión o rechazo."},"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"Identificador estable de la operación regulada."},"siguientePaso":{"type":"string","const":"reconciliacion_automatica_o_soporte","description":"Consultar la evidencia por reconciliación o soporte; nunca reenviar."}},"required":["tipoDte","puedeReintentar","estado","operacionId","siguientePaso"],"additionalProperties":false}],"description":"Desenlace tributario allowlisted de la operación."}},"required":["resultado"],"additionalProperties":false},"sii__anulacion__previsualizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documento":{"type":"object","properties":{"tipoDte":{"type":"string","enum":["33","39","41"],"description":"33: factura electrónica afecta emitida con el Facturador Gratuito. 39 o 41: boleta electrónica afecta o exenta emitida por Connect en esta conexión."},"folio":{"type":"string","pattern":"^[1-9][0-9]{0,17}$","description":"Folio del documento a anular, en TEXTO: es un identificador, no una cantidad."},"fechaEmision":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión del documento, AAAA-MM-DD: la de la lista del portal para una factura, el día de envío en Chile para una boleta."}},"required":["tipoDte","folio","fechaEmision"],"additionalProperties":false,"description":"El documento a anular, identificado como lo conoce quien lo emitió."}},"required":["documento"],"additionalProperties":false},"sii__anulacion__previsualizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"anulacion":{"type":"object","properties":{"tipoDte":{"type":"string","const":"61","description":"Nota de crédito electrónica."},"operacion":{"type":"string","const":"anula","description":"Anula el documento referido; no corrige montos ni texto."},"referencia":{"type":"object","properties":{"tipoDte":{"type":"string","enum":["33","39","41"],"description":"Tipo del documento anulado: 33 factura, 39 boleta afecta o 41 boleta exenta."},"folio":{"type":"string","pattern":"^[1-9][0-9]{0,17}$","description":"Folio del documento a anular, en TEXTO: es un identificador, no una cantidad."},"fechaEmision":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión del documento anulado, AAAA-MM-DD."}},"required":["tipoDte","folio","fechaEmision"],"additionalProperties":false,"description":"El documento que esta nota anula, según lo escribió el propio SII."},"totales":{"type":"object","properties":{"neto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto en pesos, según la vista previa del SII."},"iva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA en pesos, calculado por el SII."},"exento":{"description":"Monto exento en pesos. Sólo en la anulación de una boleta exenta, donde neto e IVA son cero.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"total":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Total en pesos; siempre igual a neto + IVA + exento."}},"required":["neto","iva","total"],"additionalProperties":false,"description":"Totales de la vista previa del SII. En una factura los copia el SII de la original. En una boleta, Connect propone el neto que con el IVA redondeado del portal suma exactamente el total de la boleta."}},"required":["tipoDte","operacion","referencia","totales"],"additionalProperties":false,"description":"La nota de crédito que devolvió el SII para el documento, todavía sin firmar."},"previewRef":{"type":"string","minLength":1,"description":"Referencia opaca y de vida corta que liga esta preparación a una eventual emisión."},"expiraEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante en que la preparación deja de servir para emitir."},"advertencias":{"maxItems":1,"type":"array","items":{"type":"string","enum":["confirmacion_humana_pendiente"]},"description":"Advertencias codificadas; nunca HTML ni datos del portal. Hoy la lista sale vacía: la preparación se confirma dentro de sii.anulacion.emitir tanto con clave de API como con una persona, así que `confirmacion_humana_pendiente` ya no se emite y se conserva sólo por compatibilidad."}},"required":["anulacion","previewRef","expiraEn","advertencias"],"additionalProperties":false},"sii__boleta_sucursales__listar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"sii__boleta_sucursales__listar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sucursales":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"codigo":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código SII de la sucursal (CdgSIISucur)."},"direccion":{"type":"string","maxLength":1000,"description":"Dirección de la sucursal tal como la muestra E-Boleta."},"comuna":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Comuna de la sucursal; null si E-Boleta no la informa."}},"required":["codigo","direccion","comuna"],"additionalProperties":false},"description":"Las sucursales de la empresa de la conexión tal como las muestra E-Boleta hoy."}},"required":["sucursales"],"additionalProperties":false},"sii__boleta__descargar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"folio":{"type":"string","maxLength":18,"pattern":"^[1-9][0-9]*$","description":"Folio de la boleta, en texto: es un identificador, no una cantidad."},"fecha":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Día calendario de emisión, AAAA-MM-DD en hora de Chile, sin zona. Connect busca la boleta ese día, el anterior y el siguiente."}},"required":["tipoDte","folio","fecha"],"additionalProperties":false},"sii__boleta__descargar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"folio":{"type":"string","maxLength":18,"pattern":"^[1-9][0-9]*$","description":"Folio de la boleta, en texto: es un identificador, no una cantidad."},"nombreArchivo":{"type":"string","minLength":1,"maxLength":64,"description":"Nombre sugerido para guardar el archivo, como «boleta39_folio55.pdf»."},"contentType":{"type":"string","const":"application/pdf","description":"Tipo de contenido del archivo."},"byteLength":{"type":"integer","exclusiveMinimum":0,"maximum":3145728,"description":"Tamaño del PDF en bytes."},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 del PDF en hexadecimal, para verificar los bytes decodificados."},"contenidoBase64":{"type":"string","minLength":1,"maxLength":4194304,"description":"El PDF oficial de E-Boleta en base64 estándar (RFC 4648), con padding."},"pdfUrl":{"type":"string","maxLength":4096,"format":"uri","description":"Enlace oficial de E-Boleta al mismo PDF, el que abre «Ver PDF» en eboleta.sii.cl. Basta para mostrarlo o imprimirlo sin decodificar el base64."}},"required":["tipoDte","folio","nombreArchivo","contentType","byteLength","sha256","contenidoBase64","pdfUrl"],"additionalProperties":false,"description":"La representación impresa oficial de la boleta, bajada de E-Boleta al pedirla. Connect no la guarda."},"sii__boleta__emitir__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"previewRef":{"type":"string","minLength":24,"maxLength":8192,"pattern":"^[A-Za-z0-9_.-]+$","description":"Referencia opaca de preparación ligada a su propietario; vigencia máxima de 15 minutos para iniciar emisión."}},"required":["previewRef"],"additionalProperties":false},"sii__boleta__emitir__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resultado":{"oneOf":[{"type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: no autoriza repetir el compromiso externo."},"estado":{"type":"string","const":"emitida","description":"Emisión concluyente: E-Boleta devolvió tipo y folio, o la reconciliación los confirmó."},"folio":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Folio externo conservado como texto; solo con identidad concluyente."},"pdfUrl":{"description":"Enlace oficial de E-Boleta al PDF de esta boleta, el mismo que abre «Ver PDF» en eboleta.sii.cl. Viene cuando E-Boleta lo entrega junto con el folio; si falta, sii.boleta.descargar lo trae.","type":"string","maxLength":4096,"format":"uri"}},"required":["tipoDte","puedeReintentar","estado","folio"],"additionalProperties":false},{"type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: no autoriza repetir el compromiso externo."},"estado":{"type":"string","const":"rechazada","description":"Rechazo concluyente sin consumo de folio."},"motivo":{"type":"string","enum":["rechazo_concluyente_sin_emision"],"description":"Motivo seguro del rechazo confirmado."}},"required":["tipoDte","puedeReintentar","estado","motivo"],"additionalProperties":false},{"type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: no autoriza repetir el compromiso externo."},"estado":{"type":"string","const":"resultado_desconocido","description":"Evidencia insuficiente para afirmar emisión o rechazo."},"siguientePaso":{"type":"string","const":"reconciliacion_automatica_o_soporte","description":"Consultar evidencia mediante reconciliación o soporte."}},"required":["tipoDte","puedeReintentar","estado","siguientePaso"],"additionalProperties":false}],"description":"Desenlace tributario allowlisted de la operación."}},"required":["resultado"],"additionalProperties":false},"sii__boleta__previsualizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"candidato":{"type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"montoTotal":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII."},"detalle":{"description":"Descripción de la única línea, hasta 80 caracteres.","type":"string","minLength":1,"maxLength":80},"medioPagoCodigo":{"description":"Código contrastado con el catálogo fresco al preparar.","type":"string","minLength":1,"maxLength":64},"receptor":{"description":"Receptor opcional; no se inventan valores cuando está ausente.","type":"object","properties":{"rut":{"description":"RUT del receptor validado con módulo 11 y canonizado.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Nombre o razón social del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":200,"description":"Dirección del receptor."},"correo":{"description":"Correo opcional del receptor.","type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"telefono":{"description":"Teléfono opcional del receptor.","type":"string","minLength":1,"maxLength":32}},"required":["rut","razonSocial","direccion"],"additionalProperties":false}},"required":["tipoDte","montoTotal"],"additionalProperties":false,"description":"Baseline de una línea con cantidad 1; no acepta fecha, folio, referencias ni descuentos."},"sucursal":{"description":"Código SII de la sucursal que emite esta boleta. Si la empresa tiene una sola sucursal en E-Boleta se usa esa y no hace falta. Si tiene varias es obligatorio en cada boleta: no queda guardado ni hay una por defecto. Los códigos salen de `sii.boleta_sucursales.listar`.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["candidato"],"additionalProperties":false},"sii__boleta__previsualizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"candidato":{"type":"object","properties":{"tipoDte":{"type":"string","enum":["39","41"],"description":"Tipo de boleta: 39 afecta o 41 exenta."},"montoTotal":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII."},"detalle":{"description":"Descripción de la única línea, hasta 80 caracteres.","type":"string","minLength":1,"maxLength":80},"medioPagoCodigo":{"description":"Código contrastado con el catálogo fresco al preparar.","type":"string","minLength":1,"maxLength":64},"receptor":{"description":"Receptor opcional; no se inventan valores cuando está ausente.","type":"object","properties":{"rut":{"description":"RUT del receptor validado con módulo 11 y canonizado.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Nombre o razón social del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":200,"description":"Dirección del receptor."},"correo":{"description":"Correo opcional del receptor.","type":"string","maxLength":254,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"telefono":{"description":"Teléfono opcional del receptor.","type":"string","minLength":1,"maxLength":32}},"required":["rut","razonSocial","direccion"],"additionalProperties":false}},"required":["tipoDte","montoTotal"],"additionalProperties":false,"description":"Baseline de una línea con cantidad 1; no acepta fecha, folio, referencias ni descuentos."},"totales":{"type":"object","properties":{"total":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII."}},"required":["total"],"additionalProperties":false,"description":"Total de la única línea. No acredita un desglose neto/IVA del SII."},"advertencias":{"maxItems":3,"type":"array","items":{"type":"string","enum":["receptor_no_informado","medio_pago_no_informado","confirmacion_humana_pendiente"]},"description":"Advertencias codificadas de la preparación. `confirmacion_humana_pendiente` ya no se emite: quien preparó la boleta la confirma al emitir; se conserva sólo por compatibilidad."},"sucursal":{"type":"object","properties":{"codigo":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código SII de la sucursal (CdgSIISucur)."},"direccion":{"type":"string","maxLength":1000,"description":"Dirección de la sucursal tal como la muestra E-Boleta."},"comuna":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Comuna de la sucursal; null si E-Boleta no la informa."}},"required":["codigo","direccion","comuna"],"additionalProperties":false,"description":"La sucursal desde la que se emitirá esta boleta."},"previewRef":{"type":"string","minLength":24,"maxLength":8192,"pattern":"^[A-Za-z0-9_.-]+$","description":"Referencia opaca de preparación ligada a su propietario; vigencia máxima de 15 minutos para iniciar emisión."}},"required":["candidato","totales","advertencias","sucursal","previewRef"],"additionalProperties":false},"sii__boletas_honorarios__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"perspectiva":{"description":"emitidas = las que emitió esta empresa; recibidas = las que le emitieron, donde esta empresa es el agente retenedor. Sin este filtro vienen las dos.","type":"string","enum":["emitidas","recibidas"]},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":100,"description":"Filas por página.","type":"integer","minimum":1,"maximum":500}}},"sii__boletas_honorarios__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentos":{"type":"array","items":{"type":"object","properties":{"folio":{"type":"string","description":"El número de la boleta, tal cual lo manda el SII y como texto: puede traer ceros a la izquierda o no ser numérico, y no se normaliza."},"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"emitidas = las boletas que emitió esta empresa; recibidas = las que le emitieron, donde esta empresa es el agente retenedor."},"periodo":{"type":"string","description":"El período tributario de la boleta, en formato AAAA-MM."},"fechaBoleta":{"type":"string","deprecated":true,"x-emisso-formato":"DD/MM/AAAA","x-emisso-canonico":"fechaBoletaDate","x-emisso-admite-vacio":false,"description":"No la pases por new Date(). Es la fecha tal cual la manda el SII, en formato chileno DD/MM/AAAA. JavaScript la lee como MM/DD: '07/09/2026' te da el 9 de julio y '28/08/2026' te da Invalid Date. Usa 'fechaBoletaDate': AAAA-MM-DD, null cuando no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6."},"fechaBoletaDate":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La misma fecha de la boleta en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"razonSocialContraparte":{"type":"string","description":"El nombre o razón social del otro lado: en 'recibidas' es el profesional que emitió, en 'emitidas' es el receptor."},"codigoBarras":{"type":"string","description":"El código de barras con que el SII identifica la boleta. Es único por boleta dentro del informe."},"honorariosBrutos":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El honorario bruto en pesos chilenos: lo facturado antes de descontar la retención."},"retencionEmisor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"La retención declarada por el propio emisor, en pesos chilenos. En 'recibidas' llega siempre en 0 porque ese informe no expone el campo: ahí la retención que importa es 'retencionReceptor'."},"retencionReceptor":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"La retención que hizo el receptor como agente retenedor, en pesos chilenos. Su suma es el insumo para cuadrar el código 151 del F29, no el código 151 en sí."},"honorariosLiquidos":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Lo que recibe el profesional: el bruto menos la retención, en pesos chilenos."},"estado":{"type":"string","description":"El código de estado tal cual lo manda el SII: 'N' vigente, 'S' anulada, 'V' anulación pendiente, 'R' y 'U' observadas. El filtro tributario correcto es 'estado' distinto de 'S', porque 'V', 'R' y 'U' siguen vigentes."},"estadoNormalizado":{"type":"string","enum":["vigente","anulada","vigente_anulacion_pendiente","observada_receptor","observada_unidad","desconocido"],"description":"El mismo estado traducido a un enum estable. No lo uses para filtrar lo vigente: 'vigente_anulacion_pendiente', 'observada_receptor' y 'observada_unidad' también lo están. Un código que no reconocemos sale 'desconocido' y nunca se omite de un cómputo."},"esSocProfesional":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Si el emisor es una sociedad de profesionales, tal cual lo manda el SII. Es texto crudo, no un booleano, y puede venir 'null'."},"fechaEventoEstado":{"anyOf":[{"type":"string"},{"type":"null"}],"deprecated":true,"x-emisso-formato":"DD/MM/AAAA","x-emisso-canonico":"fechaEventoEstadoDate","x-emisso-admite-vacio":false,"description":"No la pases por new Date(). Es la fecha tal cual la manda el SII, en formato chileno DD/MM/AAAA. JavaScript la lee como MM/DD: '07/09/2026' te da el 9 de julio y '28/08/2026' te da Invalid Date. Es cuándo el SII registró el evento que dejó la boleta en su estado actual: cubre anulación, solicitud de anulación y observación, no sólo la anulación. 'null' cuando el SII no informó la fecha. Usa 'fechaEventoEstadoDate': AAAA-MM-DD, null cuando no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6."},"fechaEventoEstadoDate":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La misma fecha del evento de estado en formato AAAA-MM-DD, o null si no vino o no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"rutContraparte":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El RUT del otro lado: en 'recibidas' es el profesional que emitió y en 'emitidas' es el receptor. 'null' cuando la boleta se emitió sin receptor, que el SII permite."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se observó esta fila por última vez, en ISO 8601 UTC. Una boleta de honorarios es mutable hasta el 1 de marzo del año siguiente: si esta marca es vieja, resincroniza el período antes de decidir sobre su estado."}},"required":["folio","perspectiva","periodo","fechaBoleta","fechaBoletaDate","razonSocialContraparte","codigoBarras","honorariosBrutos","retencionEmisor","retencionReceptor","honorariosLiquidos","estado","estadoNormalizado","esSocProfesional","fechaEventoEstado","fechaEventoEstadoDate","rutContraparte","ultimaLecturaEn"],"additionalProperties":false},"description":"Las boletas de honorarios que calzan con el filtro, una por fila. Sale de la caché ya sincronizada, nunca de una consulta en vivo al SII."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"sincronizacion":{"anyOf":[{"type":"object","properties":{"sincronizadoEn":{"type":"string","description":"Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'true' = el período se cargó entero. 'false' = quedaron casillas sin traer. 'null' = se está cargando o no hay registro de ese intento."},"incompletos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."},"fueraDeVentana":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."},"perspectivasFallidas":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false},"description":"Qué direcciones fallaron en esa sincronización, con su código de error. La pueblan las guías de despacho y las boletas de honorarios; para los demás llega vacía."}},"required":["sincronizadoEn","completo","incompletos","fueraDeVentana","perspectivasFallidas"],"additionalProperties":false},{"type":"null"}],"description":"Completitud del último sync del período consultado. Con 'periodo', 'null' y una lista vacía significa que ese mes no está cargado: dilo, no lo informes como cero (revisa 'historico' en 'conexiones.estado.consultar'). Sin 'periodo' siempre es 'null': usa ese bloque para saber qué meses hay."}},"required":["documentos","cursor","sincronizacion"],"additionalProperties":false},"sii__boletas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":100,"description":"Filas por página.","type":"integer","minimum":1,"maximum":500}}},"sii__boletas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentos":{"type":"array","items":{"type":"object","properties":{"period":{"type":"string","description":"El período tributario del agregado, en formato AAAA-MM."},"documentType":{"type":"string","description":"Tipo de boleta, como texto: '39' es la boleta afecta y '41' la exenta."},"day":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El día del mes que resume esta fila. Cada fila es el agregado de un día y un tipo de boleta, nunca una boleta individual."},"date":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El mismo día en formato AAAA-MM-DD, o 'null' si el SII mandó un día fuera de rango."},"totalDocumentos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas boletas de ese tipo se emitieron ese día. 'null' significa que el SII no informó el conteo, distinto de un 0 informado."},"netAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto del día en pesos chilenos, entero."},"exemptAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento del día en pesos chilenos, entero."},"vatAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA del día en pesos chilenos, entero."},"totalAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto total del día en pesos chilenos, entero."},"currency":{"type":"string","description":"Siempre 'CLP': este resumen del SII sólo viene en pesos chilenos."},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Canal de venta: 'presencial' o 'internet'. 'null' cuando el SII no desglosa por canal, que es lo habitual en boletas 39 y 41."}},"required":["period","documentType","day","date","totalDocumentos","netAmount","exemptAmount","vatAmount","totalAmount","currency","channel"],"additionalProperties":false},"description":"El resumen diario de boletas electrónicas que calza con el filtro. Cada fila es el agregado de un día y un tipo de boleta (39 afecta, 41 exenta), nunca una boleta individual. Los montos son enteros en pesos chilenos, y un monto que el SII no informó llega como 0, no como 'null'."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"sincronizacion":{"anyOf":[{"type":"object","properties":{"sincronizadoEn":{"type":"string","description":"Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'true' = el período se cargó entero. 'false' = quedaron casillas sin traer. 'null' = se está cargando o no hay registro de ese intento."},"incompletos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."},"fueraDeVentana":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."},"perspectivasFallidas":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false},"description":"Qué direcciones fallaron en esa sincronización, con su código de error. La pueblan las guías de despacho y las boletas de honorarios; para los demás llega vacía."}},"required":["sincronizadoEn","completo","incompletos","fueraDeVentana","perspectivasFallidas"],"additionalProperties":false},{"type":"null"}],"description":"Completitud del último sync del período consultado. Con 'periodo', 'null' y una lista vacía significa que ese mes no está cargado: dilo, no lo informes como cero (revisa 'historico' en 'conexiones.estado.consultar'). Sin 'periodo' siempre es 'null': usa ese bloque para saber qué meses hay."}},"required":["documentos","cursor","sincronizacion"],"additionalProperties":false},"sii__carpeta_tributaria__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"collectionRequestId":{"type":"string","pattern":"^ctr_.*","description":"Identificador de la solicitud puntual."}},"required":["collectionRequestId"],"additionalProperties":false},"sii__carpeta_tributaria__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"request":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Identificador de solicitud."},"status":{"type":"string","description":"Estado persistido de la solicitud."},"document":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Identificador del PDF original."},"sha256":{"type":"string","description":"SHA-256 del archivo original."},"byteLength":{"type":"number","description":"Tamaño del PDF en bytes."},"issuedAt":{"type":"string","description":"Fecha ISO 8601 de generación en el SII."},"retainedUntil":{"type":"string","description":"Fecha límite de retención del PDF."},"available":{"type":"boolean","description":"True solo si está listo y no venció su retención."}},"required":["id","sha256","byteLength","issuedAt","retainedUntil","available"],"additionalProperties":false},{"type":"null"}],"description":"Metadatos del documento, o null si aún no se ha almacenado."}},"required":["id","status","document"],"additionalProperties":false},{"type":"null"}],"description":"Solicitud de esta conexión; null si no existe."}},"required":["request"],"additionalProperties":false},"sii__carpeta_tributaria__generar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"collectionRequestId":{"type":"string","pattern":"^ctr_.*","description":"Identificador de la solicitud puntual."}},"required":["collectionRequestId"],"additionalProperties":false},"sii__carpeta_tributaria__generar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"collectionRequestId":{"type":"string","description":"Identificador de la solicitud."},"status":{"type":"string","enum":["generated","inconclusive"],"description":"Resultado confirmado o incierto de la emisión."}},"required":["collectionRequestId","status"],"additionalProperties":false},"sii__carpeta_tributaria__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"sii__carpeta_tributaria__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante ISO 8601 de verificación del acceso."}},"required":["verificadoEn"],"additionalProperties":false},"sii__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes que se va a sincronizar, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Traer varios meses son varias llamadas, una por mes."},"alcances":{"minItems":1,"type":"array","items":{"type":"string","enum":["rcv","boletas","guias","boletas_honorarios","documentos","carpeta_tributaria","f29"]},"description":"Qué módulos de datos traer en esta corrida, al menos uno. Todos se sincronizan sobre UNA sola sesión, así que pedir varios en una llamada cuesta menos que llamar una vez por cada uno. Un alcance debe estar habilitado en la conexión; si no lo está, la llamada responde 'alcance_not_enabled'."},"collectionRequestId":{"description":"Solicitud puntual autorizada; solo para el worker de carpeta tributaria.","type":"string","pattern":"^ctr_.*"}},"required":["periodo","alcances"]},"sii__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Eco del período que se pidió, para poder correlacionar la respuesta sin guardarlo tú."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","description":"Cuál de los alcances pedidos describe esta fila. Hay una fila por alcance solicitado, en el orden canónico del conector, no en el orden en que los pediste."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","partial","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'partial' = trajo datos pero alguna casilla quedó incompleta, y 'incompletos' dice cuántas: lo sincronizado sirve, y reintentar el mismo período más tarde puede completarlo. 'failed' = no terminó bien, y la causa va en 'error'; mira igual 'recordsSynced', porque un 'failed' no garantiza que no se haya escrito nada. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"incompletos":{"description":"Cuántas casillas de este alcance quedaron sin traer. Es lo que vuelve 'partial' al status: lo sincronizado sirve, y reintentar el mismo período más tarde puede completarlo. Una casilla legítimamente vacía no cuenta.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"completo":{"description":"'true' sólo si ninguna casilla de este alcance falló. No alcanza por sí solo para dar el período por cerrado: revísalo junto con 'reconMismatches' y 'filasDescartadas', porque un documento puede faltar por esas dos vías sin que 'completo' se entere.","type":"boolean"},"reconMismatches":{"description":"Veces que las filas del detalle no coincidieron con el total que el resumen del SII declaraba. Es observabilidad y no detiene el sync, pero un valor distinto de 0 dice que el período puede estar incompleto.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dedupCollisions":{"description":"Cuántas filas llegaron repetidas dentro de esta misma corrida (misma clave natural) y se colapsaron en una. No se cuentan dos veces en 'recordsSynced'.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"filasDescartadas":{"description":"Filas que llegaron con una forma inesperada (sin tipo ni folio resoluble) y no se pudieron guardar. Un valor distinto de 0 significa que el alcance corrió entero pero se perdieron filas, aunque 'completo' diga 'true'.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"fueraDeVentana":{"description":"Sólo en 'guias': cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. No es una falla y el status igual sale 'ok', pero es lo único que distingue 'no había guías' de 'no pudimos verlas'. Reintentar no lo arregla.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"diferidos":{"description":"Sólo en 'rcv': cuántos grupos (estado y tipo de documento) superaron el límite del detalle en línea del SII, unos 1.000 documentos, y se bajaron completos como archivo. No es una falla: esos documentos están guardados.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totales":{"description":"Sólo en 'rcv': cuántos totales del mes se guardaron (boletas, comprobantes de pago con tarjeta y otros tipos que el SII informa sólo como total, no documento por documento). Se leen con 'sii.rcv_totales.consultar'.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"agregadosEnDetalle":{"description":"Sólo en 'rcv': filas del detalle con forma de total del mes (sin fecha ni razón social) en un tipo que el SII declaró como documentos. No debería pasar; si es distinto de 0, avísale a soporte.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incompletosPorMotivo":{"description":"Sólo en 'rcv', y siempre en ese alcance aunque quede vacía: el porqué de las casillas que cuenta 'incompletos'. La suma de 'casillas' es 'incompletos'.","type":"array","items":{"type":"object","properties":{"motivo":{"type":"string","description":"Por qué no se trajeron. Estable: 'presupuesto' y 'tope' (se acabó el tiempo; el próximo sync lo reintenta), 'recaptcha', 'detalle_vacio', 'resumen_<código>', 'filas_no_calzan', 'csv_<motivo>', 'transporte', 'tipo_solo_resumen_<tipo>' (un tipo que el SII solo informa totalizado, por ejemplo 48), entre otros. La lista es abierta."},"casillas":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántas casillas quedaron sin traer por ese motivo."}},"required":["motivo","casillas"],"additionalProperties":false}},"perspectivasFallidas":{"description":"En 'guias' y 'boletas_honorarios': qué direcciones fallaron, con su código de error. Esos dos alcances la emiten siempre, aunque quede vacía; ningún otro la emite.","type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false}},"total":{"description":"Sólo en 'documentos': cuántos DTE anunció el índice del SII para el período. Es el conteo CRUDO del portal, con sus repetidos, así que restarle 'documentos' NO da el hueco. Para eso está 'faltantes'.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ventanas":{"description":"Sólo en 'documentos': cuántas ventanas de descarga (hasta 20 folios cada una) hicieron falta para bajar el período.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ventanasRechazadas":{"description":"Sólo en 'documentos': cuántas ventanas de descarga rechazó el portal. Lo que sí bajó se guarda igual y el período sale 'partial'; el detalle del rechazo viaja en 'marcador'.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"documentos":{"description":"Sólo en 'documentos': cuántos DTE se descargaron de verdad. El hueco es 'faltantes'; la resta contra 'total' NO lo da, porque 'total' viene con los repetidos del portal.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"faltantes":{"description":"Sólo en 'documentos': cuántos DTE prometió el índice y la descarga no trajo. Es lo que distingue un hueco del SII de un hueco nuestro; lo que sí bajó se guarda igual.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sinIndice":{"description":"Sólo en 'documentos': cuántos DTE se descargaron sin que su clave apareciera en el índice del listado. Significa que el índice quedó corto, distinto de que la fila no trajera estado (eso llega como 'estado' en null).","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hashMismatches":{"description":"Sólo en 'documentos': cuántos documentos repetidos traían un XML distinto. Un DTE firmado es inmutable, así que un valor distinto de 0 es una anomalía para reportar, nunca un documento que cambió.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"declaraciones":{"description":"Sólo en 'f29': cuántas declaraciones vigentes muestra el SII en su grilla, que cubre el año en curso y los seis anteriores. El período pedido no la acota: el F29 se revisa entero.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nuevas":{"description":"Sólo en 'f29': cuántas declaraciones se leyeron completas en esta corrida por primera vez.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pendientes":{"description":"Sólo en 'f29': cuántas declaraciones quedaron sin leer (por tiempo o porque su formulario no se pudo leer). Se retoman solas en la revisión siguiente; un valor distinto de 0 vuelve 'partial' el status.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"sii__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"sii__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"sii__documentos__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Período tributario AAAA-MM. Sin él, la respuesta cruza períodos y 'sincronizacion' llega null.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"perspectiva":{"description":"emitidos = la empresa es el emisor; recibidos = es el receptor.","type":"string","enum":["emitidos","recibidos"]},"tipoDte":{"description":"Filtra por tipo de documento: 33, 34, 46, 52, 56 o 61. El portal no respalda boletas (39/41).","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":100,"description":"Filas por página.","type":"integer","minimum":1,"maximum":500}}},"sii__documentos__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentos":{"type":"array","items":{"type":"object","properties":{"tipoDte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código del tipo de DTE: 33 factura, 34 exenta, 46 factura de compra, 52 guía, 56 nota de débito, 61 nota de crédito."},"folio":{"type":"string","description":"El folio del documento, en TEXTO decimal canónico (sin ceros a la izquierda). Junto con 'tipoDte' y 'rutEmisor' lo identifica de forma única, y es el valor que 'sii.documentos.detallar' espera TAL CUAL. Es texto y no un número a propósito: un folio es un identificador con el que no se hace aritmética, y hay folios reales que no caben en un entero de 32 bits."},"rutEmisor":{"type":"string","description":"Quien EMITIÓ el documento. Junto con tipoDte y folio identifica al documento de forma única."},"rutReceptor":{"type":"string","description":"Quien RECIBIÓ el documento: en una fila 'emitidos' es la contraparte, en 'recibidos' es la empresa de esta conexión."},"razonSocialContraparte":{"type":"string","description":"La razón social del lado que NO es la empresa de esta conexión."},"perspectiva":{"type":"string","enum":["emitidos","recibidos"],"description":"emitidos = esta empresa es el emisor; recibidos = es el receptor. Es DERIVADA del documento, no del filtro."},"periodo":{"type":"string","description":"El período tributario con que se sincronizó el documento, en formato AAAA-MM."},"fechaEmision":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha de emisión que declara el XML del documento, en formato AAAA-MM-DD. 'null' si la fila guardada no la trae."},"montoNeto":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"'null' cuando el DTE no declaró <MntNeto>: un documento sólo exento no lo trae. Nunca se fabrica un 0."},"iva":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"'null' cuando el DTE no declaró <IVA>, por el mismo motivo que montoNeto."},"montoTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Puede ser 0 legítimamente: una guía de traslado interno o una nota que corrige sólo texto lo exige por XSD."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El estado crudo del listado del portal, tal cual. Es el observado en la última sincronización, no el final. 'null' cuando el sync no pudo emparejar este documento con su fila del índice."},"dteHash":{"type":"string","description":"sha256 del XML guardado. Un DTE firmado es inmutable: si cambia entre sincronizaciones, algo se movió."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se observó esta fila por última vez, en ISO 8601 UTC. El 'estado' es el de esa lectura y no el final: resincroniza el período para refrescarlo."}},"required":["tipoDte","folio","rutEmisor","rutReceptor","razonSocialContraparte","perspectiva","periodo","fechaEmision","montoNeto","iva","montoTotal","estado","dteHash","ultimaLecturaEn"],"additionalProperties":false},"description":"Los documentos respaldados que calzan con el filtro, sólo con sus columnas de cabecera. Ni el XML ni el detalle de ítems viaja aquí: para eso usa 'sii.documentos.detallar'."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"sincronizacion":{"anyOf":[{"type":"object","properties":{"sincronizadoEn":{"type":"string","description":"Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'true' = el período se cargó entero. 'false' = quedaron casillas sin traer. 'null' = se está cargando o no hay registro de ese intento."},"incompletos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."},"fueraDeVentana":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."},"perspectivasFallidas":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false},"description":"Qué direcciones fallaron en esa sincronización, con su código de error. La pueblan las guías de despacho y las boletas de honorarios; para los demás llega vacía."}},"required":["sincronizadoEn","completo","incompletos","fueraDeVentana","perspectivasFallidas"],"additionalProperties":false},{"type":"null"}],"description":"Completitud del último sync del período consultado. Con 'periodo', 'null' y una lista vacía significa que ese mes no está cargado: dilo, no lo informes como cero (revisa 'historico' en 'conexiones.estado.consultar'). Sin 'periodo' siempre es 'null': usa ese bloque para saber qué meses hay."}},"required":["documentos","cursor","sincronizacion"],"additionalProperties":false},"sii__documentos__detallar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tipoDte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El tipo del documento, de la fila de 'sii.documentos.consultar'."},"folio":{"type":"string","minLength":1,"description":"El folio del documento, TAL CUAL viene en la fila de 'sii.documentos.consultar' (es texto: un identificador, no un número). Junto con tipoDte y rutEmisor lo identifica de forma única."},"rutEmisor":{"type":"string","minLength":1,"description":"El RUT de QUIEN EMITIÓ el documento, no el de la contraparte (salvo que el documento haya sido emitido por esta empresa). Con o sin puntos, da igual."},"incluirXml":{"default":false,"description":"Si es true, la respuesta incluye además el XML firmado completo. Son unos 7 KB por documento.","type":"boolean"}},"required":["tipoDte","folio","rutEmisor"]},"sii__documentos__detallar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documento":{"anyOf":[{"type":"object","properties":{"tipoDte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código del tipo de DTE: 33 factura, 34 exenta, 46 factura de compra, 52 guía, 56 nota de débito, 61 nota de crédito."},"folio":{"type":"string","description":"El folio del documento, en TEXTO decimal canónico (sin ceros a la izquierda). Junto con 'tipoDte' y 'rutEmisor' lo identifica de forma única, y es el valor que 'sii.documentos.detallar' espera TAL CUAL. Es texto y no un número a propósito: un folio es un identificador con el que no se hace aritmética, y hay folios reales que no caben en un entero de 32 bits."},"rutEmisor":{"type":"string","description":"Quien EMITIÓ el documento. Junto con tipoDte y folio identifica al documento de forma única."},"rutReceptor":{"type":"string","description":"Quien RECIBIÓ el documento: en una fila 'emitidos' es la contraparte, en 'recibidos' es la empresa de esta conexión."},"razonSocialContraparte":{"type":"string","description":"La razón social del lado que NO es la empresa de esta conexión."},"perspectiva":{"type":"string","enum":["emitidos","recibidos"],"description":"emitidos = esta empresa es el emisor; recibidos = es el receptor. Es DERIVADA del documento, no del filtro."},"periodo":{"type":"string","description":"El período tributario con que se sincronizó el documento, en formato AAAA-MM."},"fechaEmision":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha de emisión que declara el XML del documento, en formato AAAA-MM-DD. 'null' si la fila guardada no la trae."},"montoNeto":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"'null' cuando el DTE no declaró <MntNeto>: un documento sólo exento no lo trae. Nunca se fabrica un 0."},"iva":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"'null' cuando el DTE no declaró <IVA>, por el mismo motivo que montoNeto."},"montoTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Puede ser 0 legítimamente: una guía de traslado interno o una nota que corrige sólo texto lo exige por XSD."},"estado":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El estado crudo del listado del portal, tal cual. Es el observado en la última sincronización, no el final. 'null' cuando el sync no pudo emparejar este documento con su fila del índice."},"dteHash":{"type":"string","description":"sha256 del XML guardado. Un DTE firmado es inmutable: si cambia entre sincronizaciones, algo se movió."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se observó esta fila por última vez, en ISO 8601 UTC. El 'estado' es el de esa lectura y no el final: resincroniza el período para refrescarlo."},"detalle":{"type":"object","properties":{"formaPago":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Código de forma de pago del DTE: 1 contado, 2 crédito, 3 sin costo. 'null' significa que el documento no lo declaró: nunca asumir contado."},"fechaVencimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La fecha de vencimiento del pago que declaró el emisor ('FchVenc' del XML), en formato AAAA-MM-DD. Es un campo OPCIONAL del DTE: 'null' significa que ese emisor no la declaró, no que se haya perdido. Tampoco se deriva de la fecha de emisión ni de la forma de pago: sin dato, no hay vencimiento que informar."},"razonSocialEmisor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La razón social de quien emitió el documento, según el XML. 'null' si el documento no la declaró."},"giroEmisor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El giro (la actividad económica) de quien emitió el documento. 'null' si no lo declaró."},"dirEmisor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La dirección del emisor según el XML. 'null' si no la declaró."},"cmnaEmisor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La comuna del emisor según el XML. 'null' si no la declaró."},"razonSocialReceptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La razón social de quien recibió el documento, según el XML. 'null' si el documento no la declaró."},"giroReceptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El giro (la actividad económica) de quien recibió el documento. 'null' si no lo declaró."},"dirReceptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La dirección del receptor según el XML. 'null' si no la declaró."},"cmnaReceptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La comuna del receptor según el XML. 'null' si no la declaró."},"items":{"type":"array","items":{"type":"object","properties":{"numeroLinea":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"El número de línea del ítem dentro del detalle. 'null' si el documento no lo declaró."},"nombre":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre del ítem tal como lo escribió el emisor. 'null' si el documento no lo declaró."},"cantidad":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"La cantidad del ítem. El 'null' es literal: un flete o un descuento suelen no declararla, y no debe leerse como cero."},"unidad":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La unidad de medida del ítem, tal cual la escribió el emisor. 'null' si no la declaró."},"precioUnitario":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El precio unitario del ítem. El 'null' es literal, igual que en 'cantidad': no debe leerse como cero."},"montoItem":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El monto de la línea. 'null' significa que el documento no lo declaró de forma legible, nunca un cero."}},"required":["numeroLinea","nombre","cantidad","unidad","precioUnitario","montoItem"],"additionalProperties":false},"description":"Las líneas del detalle del documento, en el orden en que vienen en el XML. Un documento sin líneas legibles llega con la lista vacía."}},"required":["formaPago","fechaVencimiento","razonSocialEmisor","giroEmisor","dirEmisor","cmnaEmisor","razonSocialReceptor","giroReceptor","dirReceptor","cmnaReceptor","items"],"additionalProperties":false,"description":"Lo que el XML firmado trae y la cabecera no: los ítems, los giros, direcciones y comunas de emisor y receptor, la forma de pago y el vencimiento. Se parsea al leer, no se guarda aparte. No es TODO el DTE: si buscas un campo que este objeto no lista, pide 'incluirXml: true' y sácalo del XML firmado, que va completo."}},"required":["tipoDte","folio","rutEmisor","rutReceptor","razonSocialContraparte","perspectiva","periodo","fechaEmision","montoNeto","iva","montoTotal","estado","dteHash","ultimaLecturaEn","detalle"],"additionalProperties":false},{"type":"null"}],"description":"El documento pedido, con su detalle completo. 'null' significa que ese documento no está sincronizado: no es un error, sincroniza su período con 'sii.conexion.sincronizar' y vuelve a preguntar."},"xml":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El XML firmado del DTE, tal cual se respaldó. Sólo viaja si se pidió 'incluirXml: true'."}},"required":["documento","xml"],"additionalProperties":false},"sii__dte_xml__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"El operacionId que devolvió sii.dte.emitir o sii.anulacion.emitir."}},"required":["operacionId"],"additionalProperties":false},"sii__dte_xml__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"El operacionId que devolvió sii.dte.emitir o sii.anulacion.emitir."},"tipoDte":{"type":"string","enum":["33","34","52","56","61"],"description":"Tipo del documento emitido."},"folio":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Folio del documento, en texto."},"fechaEmision":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión del documento."},"xmlFirmado":{"type":"string","minLength":1,"maxLength":1048576,"description":"XML del DTE firmado que Connect envió y el SII aceptó, con su timbre electrónico (TED). Basta para generar la representación impresa y el PDF417. Es el documento tributario: guárdalo como tal."}},"required":["operacionId","tipoDte","folio","fechaEmision","xmlFirmado"],"additionalProperties":false},"sii__dte__emitir__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"previewRef":{"type":"string","minLength":1,"description":"Referencia opaca devuelta por sii.dte.previsualizar; debe estar vigente y pertenecer a la misma conexión."}},"required":["previewRef"],"additionalProperties":false},"sii__dte__emitir__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resultado":{"oneOf":[{"type":"object","properties":{"estado":{"type":"string","const":"emitido","description":"El SII confirmó de manera concluyente la emisión."},"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"Identificador estable de la operación regulada."},"tipoDte":{"type":"string","enum":["33","34","52","56","61"],"description":"Tipo DTE contemplado por los contratos publicados: 33, 34, 52, 56 o 61. Su presencia no implica habilitación productiva."},"variante":{"type":"string","enum":["33:del_giro:del_giro:credito","34:del_giro:del_giro:credito","52:constituye_venta","56:corregir_montos:34_exenta","61:corregir_montos:34_exenta"],"description":"Identidad exacta de la variante tributaria previsualizada."},"folio":{"type":"string","minLength":1,"description":"Folio confirmado por el SII para el documento emitido."},"fechaEmision":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión confirmada por el SII."},"confirmadoEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante en que Connect obtuvo una confirmación concluyente de la emisión."},"xmlFirmado":{"type":"string","minLength":1,"maxLength":1048576,"description":"XML del DTE firmado que Connect envió y el SII aceptó, con su timbre electrónico (TED). Basta para generar la representación impresa y el PDF417. Es el documento tributario: guárdalo como tal."}},"required":["estado","operacionId","tipoDte","variante","folio","fechaEmision","confirmadoEn"],"additionalProperties":false,"description":"Resultado concluyente de una emisión confirmada."},{"type":"object","properties":{"estado":{"type":"string","const":"rechazado","description":"El SII rechazó la operación de manera concluyente."},"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"Identificador estable de la operación regulada."},"tipoDte":{"type":"string","enum":["33","34","52","56","61"],"description":"Tipo DTE contemplado por los contratos publicados: 33, 34, 52, 56 o 61. Su presencia no implica habilitación productiva."},"variante":{"type":"string","enum":["33:del_giro:del_giro:credito","34:del_giro:del_giro:credito","52:constituye_venta","56:corregir_montos:34_exenta","61:corregir_montos:34_exenta"],"description":"Identidad exacta de la variante tributaria previsualizada."},"codigo":{"type":"string","minLength":1,"description":"Código normalizado del rechazo concluyente."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: una operación regulada rechazada no se reintenta automáticamente."}},"required":["estado","operacionId","tipoDte","variante","codigo","puedeReintentar"],"additionalProperties":false,"description":"Resultado concluyente de una emisión rechazada."},{"type":"object","properties":{"estado":{"type":"string","const":"resultado_desconocido","description":"No existe evidencia suficiente para afirmar emisión ni rechazo."},"operacionId":{"type":"string","pattern":"^req_[0-9a-z]{21}$","description":"Identificador estable de la operación regulada."},"tipoDte":{"type":"string","enum":["33","34","52","56","61"],"description":"Tipo DTE contemplado por los contratos publicados: 33, 34, 52, 56 o 61. Su presencia no implica habilitación productiva."},"variante":{"type":"string","enum":["33:del_giro:del_giro:credito","34:del_giro:del_giro:credito","52:constituye_venta","56:corregir_montos:34_exenta","61:corregir_montos:34_exenta"],"description":"Identidad exacta de la variante tributaria previsualizada."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: no se repite una operación cuyo resultado externo es desconocido."},"siguientePaso":{"type":"string","const":"reconciliacion_automatica_o_soporte","description":"La única salida segura es reconciliar evidencia o escalar a soporte."}},"required":["estado","operacionId","tipoDte","variante","puedeReintentar","siguientePaso"],"additionalProperties":false,"description":"Resultado inconcluso que exige reconciliación antes de cualquier acción."}],"description":"Resultado terminal allowlisted de la operación de emisión."}},"required":["resultado"],"additionalProperties":false},"sii__dte__previsualizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"candidato":{"anyOf":[{"type":"object","properties":{"tipoDte":{"type":"string","const":"33","description":"Factura electrónica afecta a IVA."},"receptor":{"type":"object","properties":{"rut":{"description":"RUT chileno del receptor, sin puntos, con guion y DV módulo 11 válido.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Razón social legal del receptor."},"giro":{"type":"string","minLength":1,"maxLength":40,"description":"Giro comercial del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":70,"description":"Dirección tributaria del receptor."},"comuna":{"type":"string","minLength":1,"maxLength":20,"description":"Comuna de la dirección tributaria del receptor."},"ciudad":{"type":"string","minLength":1,"maxLength":15,"description":"Ciudad de la dirección tributaria del receptor."}},"required":["rut","razonSocial","giro","direccion","comuna","ciudad"],"additionalProperties":false,"description":"Datos obligatorios del receptor; esta variante no admite un campo de contacto."},"tipoVenta":{"type":"string","const":"del_giro","description":"Venta fija del giro; no se habilitan otros selectores."},"tipoCompra":{"type":"string","const":"del_giro","description":"Compra fija del giro; no se habilitan otros selectores."},"condicionPago":{"type":"object","properties":{"formaPago":{"type":"string","const":"credito","description":"Forma de pago fija a crédito."}},"required":["formaPago"],"additionalProperties":false,"description":"Condición de pago fija de esta variante."},"detalles":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":25,"description":"Nombre del ítem, hasta 25 caracteres."},"cantidad":{"type":"number","description":"Cantidad con mínimo 1, hasta dos decimales y wire máximo de 12 caracteres."},"precioUnitario":{"type":"number","exclusiveMinimum":0,"maximum":999999999999,"description":"Precio unitario positivo en pesos chilenos, antes de impuestos, con hasta dos decimales y hasta 12 caracteres (por ejemplo 8402.49). El subtotal de la línea, round(cantidad × precioUnitario), debe ser un entero de 1 a 10 dígitos."}},"required":["nombre","cantidad","precioUnitario"],"additionalProperties":false,"description":"Línea de la factura: sin código, unidad, descripción ni descuento."},"description":"Entre una y diez líneas, en el orden en que van en la factura; ninguna admite código, unidad, descripción ni descuento."},"referencias":{"description":"Entre una y tres referencias opcionales a los documentos que originan la factura: orden de compra, HES, guía de despacho, contrato u otro documento del selector del portal.","minItems":1,"maxItems":3,"type":"array","items":{"type":"object","properties":{"tipoDocumento":{"type":"string","enum":["30","32","33","34","35","38","39","40","41","43","45","46","48","50","52","55","56","60","61","103","801","802","803","804","805","806","813","820","821","822","823","HES"],"description":"Código del documento referenciado, tal como lo ofrece el Facturador Gratuito: un documento tributario (30, 32, 33, 34, 35, 38, 39, 40, 41, 43, 45, 46, 48, 50, 52, 55, 56, 60, 61 o 103), 801 orden de compra, 802 nota de pedido, 803 contrato, 804 resolución, 805 proceso ChileCompra, 806 ficha ChileCompra, 813 pasaporte, 820 código de registro de Economía, 821 georreferencia, 822 rol de avalúo del predio, 823 plan de manejo Conaf o HES hoja de entrada de servicio."},"indicadorGlobal":{"description":"Indicador de referencia global opcional; si vale 1, la referencia cubre un conjunto de documentos y el folio debe ser exactamente 0.","type":"number","const":1},"folio":{"type":"string","minLength":1,"maxLength":18,"description":"Folio o número del documento referenciado, hasta 18 caracteres. Para documentos tributarios (30, 32, 33, 34, 38, 39, 40, 45, 46, 50, 52, 55, 56, 60, 61 y 103) debe ser un entero mayor que 0 sin ceros a la izquierda; usa 0 únicamente junto con indicadorGlobal igual a 1."},"fecha":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha del documento referenciado, en formato AAAA-MM-DD, entre 2002-08-01 y 2050-12-31."},"razon":{"description":"Razón opcional de la referencia, hasta 90 caracteres.","type":"string","minLength":1,"maxLength":90}},"required":["tipoDocumento","folio","fecha"],"additionalProperties":false,"description":"Referencia de la factura a otro documento; se permiten entre una y tres."}}},"required":["tipoDte","receptor","tipoVenta","tipoCompra","condicionPago","detalles"],"additionalProperties":false,"description":"Formulario cerrado de factura afecta 33 baseline: hasta diez líneas y referencias opcionales."},{"type":"object","properties":{"tipoDte":{"type":"string","const":"34","description":"Factura electrónica exenta o no afecta a IVA."},"receptor":{"type":"object","properties":{"rut":{"description":"RUT chileno del receptor, sin puntos, con guion y DV módulo 11 válido.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Razón social legal del receptor."},"giro":{"type":"string","minLength":1,"maxLength":40,"description":"Giro comercial del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":70,"description":"Dirección tributaria del receptor."},"comuna":{"type":"string","minLength":1,"maxLength":20,"description":"Comuna de la dirección tributaria del receptor."},"ciudad":{"type":"string","minLength":1,"maxLength":15,"description":"Ciudad de la dirección tributaria del receptor."}},"required":["rut","razonSocial","giro","direccion","comuna","ciudad"],"additionalProperties":false,"description":"Datos obligatorios del receptor; esta variante no admite un campo de contacto."},"tipoVenta":{"type":"string","const":"del_giro","description":"Venta fija del giro; no se habilitan otros selectores."},"tipoCompra":{"type":"string","const":"del_giro","description":"Compra fija del giro; no se habilitan otros selectores."},"condicionPago":{"type":"object","properties":{"formaPago":{"type":"string","const":"credito","description":"Forma de pago fija a crédito."}},"required":["formaPago"],"additionalProperties":false,"description":"Condición de pago fija de esta variante."},"detalles":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":25,"description":"Nombre del ítem, hasta 25 caracteres."},"cantidad":{"type":"number","description":"Cantidad con mínimo 1, hasta dos decimales y wire máximo de 12 caracteres."},"precioUnitario":{"type":"number","exclusiveMinimum":0,"maximum":999999999999,"description":"Precio unitario positivo en pesos chilenos, antes de impuestos, con hasta dos decimales y hasta 12 caracteres (por ejemplo 8402.49). El subtotal de la línea, round(cantidad × precioUnitario), debe ser un entero de 1 a 10 dígitos."}},"required":["nombre","cantidad","precioUnitario"],"additionalProperties":false,"description":"Línea de la factura: sin código, unidad, descripción ni descuento."},"description":"Entre una y diez líneas exentas, en el orden en que van en la factura; ninguna admite IVA, código, unidad, descripción ni descuento."},"referencias":{"description":"Entre una y tres referencias opcionales a los documentos que originan la factura: orden de compra, HES, guía de despacho, contrato u otro documento del selector del portal.","minItems":1,"maxItems":3,"type":"array","items":{"type":"object","properties":{"tipoDocumento":{"type":"string","enum":["30","32","33","34","35","38","39","40","41","43","45","46","48","50","52","55","56","60","61","103","801","802","803","804","805","806","813","820","821","822","823","HES"],"description":"Código del documento referenciado, tal como lo ofrece el Facturador Gratuito: un documento tributario (30, 32, 33, 34, 35, 38, 39, 40, 41, 43, 45, 46, 48, 50, 52, 55, 56, 60, 61 o 103), 801 orden de compra, 802 nota de pedido, 803 contrato, 804 resolución, 805 proceso ChileCompra, 806 ficha ChileCompra, 813 pasaporte, 820 código de registro de Economía, 821 georreferencia, 822 rol de avalúo del predio, 823 plan de manejo Conaf o HES hoja de entrada de servicio."},"indicadorGlobal":{"description":"Indicador de referencia global opcional; si vale 1, la referencia cubre un conjunto de documentos y el folio debe ser exactamente 0.","type":"number","const":1},"folio":{"type":"string","minLength":1,"maxLength":18,"description":"Folio o número del documento referenciado, hasta 18 caracteres. Para documentos tributarios (30, 32, 33, 34, 38, 39, 40, 45, 46, 50, 52, 55, 56, 60, 61 y 103) debe ser un entero mayor que 0 sin ceros a la izquierda; usa 0 únicamente junto con indicadorGlobal igual a 1."},"fecha":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha del documento referenciado, en formato AAAA-MM-DD, entre 2002-08-01 y 2050-12-31."},"razon":{"description":"Razón opcional de la referencia, hasta 90 caracteres.","type":"string","minLength":1,"maxLength":90}},"required":["tipoDocumento","folio","fecha"],"additionalProperties":false,"description":"Referencia de la factura a otro documento; se permiten entre una y tres."}}},"required":["tipoDte","receptor","tipoVenta","tipoCompra","condicionPago","detalles"],"additionalProperties":false,"description":"Formulario cerrado de factura exenta 34 baseline: hasta diez líneas y referencias opcionales."},{"type":"object","properties":{"tipoDte":{"type":"string","const":"52","description":"Guía de despacho electrónica."},"receptor":{"type":"object","properties":{"rut":{"description":"RUT chileno del receptor, sin puntos, con guion y DV módulo 11 válido.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Razón social legal del receptor."},"giro":{"type":"string","minLength":1,"maxLength":40,"description":"Giro comercial del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":70,"description":"Dirección tributaria del receptor."},"comuna":{"type":"string","minLength":1,"maxLength":20,"description":"Comuna de la dirección tributaria del receptor."},"ciudad":{"type":"string","minLength":1,"maxLength":15,"description":"Ciudad de la dirección tributaria del receptor."}},"required":["rut","razonSocial","giro","direccion","comuna","ciudad"],"additionalProperties":false,"description":"Datos obligatorios del receptor; esta variante no admite un campo de contacto."},"motivoTraslado":{"type":"string","const":"constituye_venta","description":"Motivo de traslado fijo."},"detalles":{"type":"array","prefixItems":[{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":25,"description":"Nombre del único ítem de la línea."},"cantidad":{"type":"number","description":"Cantidad con mínimo 1, hasta dos decimales y wire máximo de 12 caracteres."},"precioUnitario":{"type":"integer","exclusiveMinimum":0,"maximum":999999999999,"description":"Precio unitario positivo en pesos chilenos, antes de impuestos. El subtotal de línea, redondeado a entero, debe caber en 10 dígitos."}},"required":["nombre","cantidad","precioUnitario"],"additionalProperties":false,"description":"Única línea de la variante baseline: sin código, unidad, descripción ni descuentos."}],"description":"Una única línea baseline.","items":false,"minItems":1,"maxItems":1}},"required":["tipoDte","receptor","motivoTraslado","detalles"],"additionalProperties":false},{"type":"object","properties":{"tipoDte":{"type":"string","const":"56","description":"Nota de débito electrónica."},"receptor":{"type":"object","properties":{"rut":{"description":"RUT chileno del receptor, sin puntos, con guion y DV módulo 11 válido.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Razón social legal del receptor."},"giro":{"type":"string","minLength":1,"maxLength":40,"description":"Giro comercial del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":70,"description":"Dirección tributaria del receptor."},"comuna":{"type":"string","minLength":1,"maxLength":20,"description":"Comuna de la dirección tributaria del receptor."},"ciudad":{"type":"string","minLength":1,"maxLength":15,"description":"Ciudad de la dirección tributaria del receptor."}},"required":["rut","razonSocial","giro","direccion","comuna","ciudad"],"additionalProperties":false,"description":"Datos obligatorios del receptor; esta variante no admite un campo de contacto."},"operacion":{"type":"string","const":"corregir_montos","description":"Operación fija de corrección de montos."},"referencia":{"type":"object","properties":{"tipoDteReferido":{"type":"number","const":34,"description":"Factura exenta 34 referida por la nota."},"folio":{"type":"string","pattern":"^[1-9][0-9]{0,17}$","description":"Folio decimal sin cero inicial."},"fecha":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión de la factura 34 referida."},"razon":{"type":"string","minLength":1,"maxLength":55,"description":"Razón obligatoria de la corrección de montos."}},"required":["tipoDteReferido","folio","fecha","razon"],"additionalProperties":false,"description":"Referencia tributaria principal."},"detalles":{"type":"array","prefixItems":[{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":25,"description":"Nombre del único ítem de la línea."},"cantidad":{"type":"number","description":"Cantidad con mínimo 1, hasta dos decimales y wire máximo de 12 caracteres."},"precioUnitario":{"type":"integer","exclusiveMinimum":0,"maximum":999999999999,"description":"Precio unitario positivo en pesos chilenos, antes de impuestos. El subtotal de línea, redondeado a entero, debe caber en 10 dígitos."}},"required":["nombre","cantidad","precioUnitario"],"additionalProperties":false,"description":"Única línea de la variante baseline: sin código, unidad, descripción ni descuentos."}],"description":"Una única línea baseline.","items":false,"minItems":1,"maxItems":1}},"required":["tipoDte","receptor","operacion","referencia","detalles"],"additionalProperties":false},{"type":"object","properties":{"tipoDte":{"type":"string","const":"61","description":"Nota de crédito electrónica."},"receptor":{"type":"object","properties":{"rut":{"description":"RUT chileno del receptor, sin puntos, con guion y DV módulo 11 válido.","type":"string"},"razonSocial":{"type":"string","minLength":1,"maxLength":100,"description":"Razón social legal del receptor."},"giro":{"type":"string","minLength":1,"maxLength":40,"description":"Giro comercial del receptor."},"direccion":{"type":"string","minLength":1,"maxLength":70,"description":"Dirección tributaria del receptor."},"comuna":{"type":"string","minLength":1,"maxLength":20,"description":"Comuna de la dirección tributaria del receptor."},"ciudad":{"type":"string","minLength":1,"maxLength":15,"description":"Ciudad de la dirección tributaria del receptor."}},"required":["rut","razonSocial","giro","direccion","comuna","ciudad"],"additionalProperties":false,"description":"Datos obligatorios del receptor; esta variante no admite un campo de contacto."},"operacion":{"type":"string","const":"corregir_montos","description":"Operación fija de corrección de montos."},"referencia":{"type":"object","properties":{"tipoDteReferido":{"type":"number","const":34,"description":"Factura exenta 34 referida por la nota."},"folio":{"type":"string","pattern":"^[1-9][0-9]{0,17}$","description":"Folio decimal sin cero inicial."},"fecha":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha de emisión de la factura 34 referida."},"razon":{"type":"string","minLength":1,"maxLength":55,"description":"Razón obligatoria de la corrección de montos."}},"required":["tipoDteReferido","folio","fecha","razon"],"additionalProperties":false,"description":"Referencia tributaria principal."},"detalles":{"type":"array","prefixItems":[{"type":"object","properties":{"nombre":{"type":"string","minLength":1,"maxLength":25,"description":"Nombre del único ítem de la línea."},"cantidad":{"type":"number","description":"Cantidad con mínimo 1, hasta dos decimales y wire máximo de 12 caracteres."},"precioUnitario":{"type":"integer","exclusiveMinimum":0,"maximum":999999999999,"description":"Precio unitario positivo en pesos chilenos, antes de impuestos. El subtotal de línea, redondeado a entero, debe caber en 10 dígitos."}},"required":["nombre","cantidad","precioUnitario"],"additionalProperties":false,"description":"Única línea de la variante baseline: sin código, unidad, descripción ni descuentos."}],"description":"Una única línea baseline.","items":false,"minItems":1,"maxItems":1}},"required":["tipoDte","receptor","operacion","referencia","detalles"],"additionalProperties":false}],"description":"Formulario completo de una variante publicada en el schema. La matriz productiva marca las cinco variantes baseline como elegibles para preview (33, 34, 52, 56 y 61); aun ellas requieren que estén abiertas todas las compuertas de rollout, organización, scope, credencial y perfil. El 46 se rechaza antes de red. Usa exactamente una rama y no combines campos entre documentos."}},"required":["candidato"],"additionalProperties":false},"sii__dte__previsualizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"estado":{"type":"string","const":"previsualizado","description":"Confirma que el flujo terminó en la vista previa y no guardó ni emitió el documento."},"tipoDte":{"type":"string","enum":["33","34","52","56","61"],"description":"Tipo DTE contemplado por los contratos publicados: 33, 34, 52, 56 o 61. Su presencia no implica habilitación productiva."},"variante":{"type":"string","enum":["33:del_giro:del_giro:credito","34:del_giro:del_giro:credito","52:constituye_venta","56:corregir_montos:34_exenta","61:corregir_montos:34_exenta"],"description":"Identidad exacta de la variante tributaria previsualizada."},"fechaEmision":{"type":"string","x-emisso-formato":"AAAA-MM-DD","description":"Fecha efectiva de emisión mostrada por la vista previa del SII."},"receptorRut":{"type":"string","pattern":"^\\d{1,8}-[0-9K]$","description":"RUT canonizado, sin puntos y con guion."},"totales":{"oneOf":[{"type":"object","properties":{"tributacion":{"type":"string","const":"afecta","description":"Totales afectos a IVA."},"neto":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Monto neto calculado por el SII, en CLP."},"iva":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"IVA calculado por el SII, en CLP."},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total calculado por el SII, en CLP."}},"required":["tributacion","neto","iva","total"],"additionalProperties":false,"description":"Totales de una factura o guía afecta a IVA."},{"type":"object","properties":{"tributacion":{"type":"string","const":"exenta","description":"Totales exentos de IVA."},"exento":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Monto exento calculado por el SII, en CLP."},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total calculado por el SII, en CLP."}},"required":["tributacion","exento","total"],"additionalProperties":false,"description":"Totales de una factura o nota exenta de IVA."}],"description":"Totales normalizados desde la vista previa del SII."},"advertencias":{"type":"array","items":{"type":"object","properties":{"codigo":{"type":"string","minLength":1,"description":"Código estable de una advertencia no bloqueante."},"campo":{"description":"Campo al que aplica la advertencia, cuando corresponde.","type":"string","minLength":1}},"required":["codigo"],"additionalProperties":false,"description":"Advertencia normalizada y allowlisted."},"description":"Advertencias no bloqueantes de la previsualización; nunca contiene HTML ni datos ocultos."},"previewRef":{"type":"string","minLength":1,"description":"Referencia opaca, sellada y de vida corta que liga esta vista previa a una eventual emisión."},"expiraEn":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Instante ISO 8601 con zona horaria explícita."},"contractVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Versión del contrato de formulario usada para construir y validar la vista previa."}},"required":["estado","tipoDte","variante","fechaEmision","receptorRut","totales","advertencias","previewRef","expiraEn","contractVersion"],"additionalProperties":false},"sii__f29__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Un período concreto, AAAA-MM.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"desde":{"description":"Primer período del rango, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"hasta":{"description":"Último período del rango, inclusive.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"incluirNoVigentes":{"default":false,"description":"'true' para traer también las declaraciones rectificadas y anuladas.","type":"boolean"},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":24,"description":"Filas por página.","type":"integer","minimum":1,"maximum":120}}},"sii__f29__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"declaraciones":{"type":"array","items":{"type":"object","properties":{"folio":{"type":"string","description":"El folio de la declaración. Es su identidad: una rectificatoria tiene otro folio."},"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El período tributario declarado, AAAA-MM. No es el mes en que se presentó."},"estado":{"type":"string","description":"El estado que muestra el SII, en minúsculas: 'vigente' es la que rige; una rectificada o 'anulada' queda como historia."},"tipoDeclaracion":{"anyOf":[{"type":"string","enum":["primitiva","rectificatoria"]},{"type":"null"}],"description":"Si es la primera declaración del período o una que corrige a otra."},"fechaPresentacion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se presentó, AAAA-MM-DD."},"corrigeAFolios":{"type":"array","items":{"type":"string"},"description":"Los folios que esta declaración corrige. Vacío en una primitiva."},"medioPago":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El medio de pago tal como lo escribe el SII (por ejemplo 'PEL', pago electrónico)."},"banco":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El banco por el que se pagó, cuando lo hubo."},"totalAPagar":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Código 91, total a pagar dentro del plazo legal, en pesos. 'null' si la declaración no trae ese código o sus códigos aún no se leyeron."},"codigos":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"glosa":{"type":"string","description":"El nombre de la línea tal como lo escribe el formulario del SII. Puede cambiar de texto sin que cambie el código."},"valor":{"type":"number","description":"El valor numérico. En pesos para los montos y cantidades; como número decimal para las tasas (0.125 es 0,125 %)."},"tipo":{"type":"string","enum":["monto","tasa"],"description":"'tasa' cuando el formulario escribe el valor con decimales (el código 115); 'monto' en todo lo demás, incluidas las cantidades de documentos."}},"required":["glosa","valor","tipo"],"additionalProperties":false}},{"type":"null"}],"description":"Los códigos del formulario con valor, por número de código sin ceros a la izquierda ('89', no '089'). Un código que no aparece venía en blanco en el formulario: vacío no es cero. 'null' cuando la declaración no es la vigente o su formulario todavía no se leyó."},"ultimaLecturaEn":{"type":"string","description":"Cuándo se observó esta fila por última vez, en ISO 8601 UTC."}},"required":["folio","periodo","estado","tipoDeclaracion","fechaPresentacion","corrigeAFolios","medioPago","banco","totalAPagar","codigos","ultimaLecturaEn"],"additionalProperties":false},"description":"Las declaraciones que calzan con el filtro, de la más reciente a la más antigua. Salen de lo ya sincronizado, nunca de una consulta en vivo al SII."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"revision":{"anyOf":[{"type":"object","properties":{"revisadoEn":{"type":"string","description":"Cuándo terminó la última revisión del F29 de esta conexión, en ISO 8601 UTC."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'false' si quedaron declaraciones sin leer; se retoman solas en la revisión siguiente. 'null' si no se puede saber."},"pendientes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas declaraciones quedaron sin leer en esa revisión. 'null' si no se puede saber."}},"required":["revisadoEn","completo","pendientes"],"additionalProperties":false},{"type":"null"}],"description":"La última revisión del F29. 'null' significa que el F29 de esta conexión no se ha revisado nunca: una lista vacía con 'revision' distinto de null sí quiere decir que no hay declaraciones en ese rango."}},"required":["declaraciones","cursor","revision"],"additionalProperties":false},"sii__guias__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."},"perspectiva":{"description":"emitidas = las que emitió esta empresa; recibidas = las que le emitieron. Sin este filtro vienen las dos.","type":"string","enum":["emitidas","recibidas"]},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":100,"description":"Filas por página.","type":"integer","minimum":1,"maximum":500}}},"sii__guias__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentos":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"emitidas = las guías que emitió esta empresa; recibidas = las que le emitieron."},"tipoDte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Siempre 52: guía de despacho electrónica."},"periodo":{"type":"string","description":"El período tributario de la guía, en formato AAAA-MM."},"folio":{"type":"string","description":"El folio de la guía, en TEXTO decimal canónico (sin ceros a la izquierda). Junto con 'perspectiva' y 'rutContraparte' la identifica. Es texto y no un número a propósito: un folio es un identificador con el que no se hace aritmética, y hay folios reales que no caben en un entero de 32 bits. Compáralo como cadena."},"rutContraparte":{"type":"string","description":"El RUT del otro lado: en 'emitidas' es el cliente y en 'recibidas' es quien emitió la guía. El RUT propio no viaja en la fila porque ya lo define la conexión."},"razonSocialContraparte":{"type":"string","description":"La razón social de ese mismo lado, tal como la informó el SII."},"montoNeto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto en pesos chilenos, entero."},"montoExento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento de IVA en pesos chilenos, entero."},"montoIva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA en pesos chilenos, entero."},"montoTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto total de la guía en pesos chilenos, entero."},"tasaIva":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"La tasa de IVA multiplicada por cien: 1900 es 19%. 'null' cuando el SII no la informó."},"fechaEmisionDate":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La misma fecha de emisión en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"fechaEmision":{"type":"string","deprecated":true,"x-emisso-formato":"DD/MM/AAAA","x-emisso-canonico":"fechaEmisionDate","x-emisso-admite-vacio":false,"description":"No la pases por new Date(). Es la fecha tal cual la manda el SII, en formato chileno DD/MM/AAAA. JavaScript la lee como MM/DD: '07/09/2026' te da el 9 de julio y '28/08/2026' te da Invalid Date. Usa 'fechaEmisionDate': AAAA-MM-DD, null cuando no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6."},"fechaRecepcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo el SII recibió la guía, en formato AAAA-MM-DD. 'null' si no vino."},"eventoOrden":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El código del evento que registró el receptor sobre la guía, como texto. 'null' cuando no hubo evento."},"eventoDescripcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La descripción de ese mismo evento, por ejemplo 'Acuse recibo'. 'null' cuando no hubo evento o el SII no la mandó."},"dhdrCodigo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Un identificador interno del SII para la guía. Sirve para correlacionar contra el portal, pero su estabilidad entre sincronizaciones no está verificada: no lo uses para identificar el documento."}},"required":["perspectiva","tipoDte","periodo","folio","rutContraparte","razonSocialContraparte","montoNeto","montoExento","montoIva","montoTotal","tasaIva","fechaEmisionDate","fechaEmision","fechaRecepcion","eventoOrden","eventoDescripcion","dhdrCodigo"],"additionalProperties":false},"description":"Las guías de despacho que calzan con el filtro, una por fila. Sale de la caché ya sincronizada: el SII sólo conserva el detalle de los últimos 6 meses, así que un período más viejo no se puede traer aunque la guía exista."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"sincronizacion":{"anyOf":[{"type":"object","properties":{"sincronizadoEn":{"type":"string","description":"Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'true' = el período se cargó entero. 'false' = quedaron casillas sin traer. 'null' = se está cargando o no hay registro de ese intento."},"incompletos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."},"fueraDeVentana":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."},"perspectivasFallidas":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false},"description":"Qué direcciones fallaron en esa sincronización, con su código de error. La pueblan las guías de despacho y las boletas de honorarios; para los demás llega vacía."}},"required":["sincronizadoEn","completo","incompletos","fueraDeVentana","perspectivasFallidas"],"additionalProperties":false},{"type":"null"}],"description":"Completitud del último sync del período consultado. Con 'periodo', 'null' y una lista vacía significa que ese mes no está cargado: dilo, no lo informes como cero (revisa 'historico' en 'conexiones.estado.consultar'). Sin 'periodo' siempre es 'null': usa ese bloque para saber qué meses hay."}},"required":["documentos","cursor","sincronizacion"],"additionalProperties":false},"sii__honorario__anular__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"previewRef":{"type":"string","pattern":"^bhcp1\\.[A-Za-z0-9_-]{43}$","description":"Referencia opaca del preview vigente y aprobado de esta solicitud de anulación."}},"required":["previewRef"],"additionalProperties":false},"sii__honorario__anular__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resultado":{"type":"object","properties":{"estado":{"type":"string","enum":["anulada","pendiente_receptor","rechazada","revision_administrativa","resultado_desconocido"],"description":"Resultado de la solicitud; resultado_desconocido exige consultar y reconciliar el mismo intento, sin repetir el envío."},"solicitudId":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$","description":"ID de la solicitud de anulación cuyo resultado durable se informa."},"puedeReintentar":{"type":"boolean","const":false,"description":"Siempre false: el envío fiscal final de esta solicitud nunca se repite."},"atribucion":{"type":"string","enum":["own_response","observed_external","unknown"],"description":"Origen de la evidencia: respuesta propia correlacionada, observación externa o atribución desconocida."},"estadoFiscal":{"type":"string","enum":["vigente","vigente_anulacion_pendiente","anulada","observada_receptor","observada_unidad","desconocido"],"description":"Estado fiscal observado de la boleta; una observación no demuestra por sí sola que esta solicitud causó el cambio."}},"required":["estado","solicitudId","puedeReintentar","atribucion","estadoFiscal"],"additionalProperties":false,"description":"Resultado durable de la anulación, con estado fiscal y atribución separados."}},"required":["resultado"],"additionalProperties":false},"sii__honorario__emitir__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"previewRef":{"type":"string","minLength":1,"maxLength":8192,"description":"Referencia opaca: el servidor verifica propietario, snapshot, autorización y vigencia."}},"required":["previewRef"],"additionalProperties":false},"sii__honorario__emitir__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resultado":{"oneOf":[{"type":"object","properties":{"estado":{"type":"string","const":"emitido","description":"El proveedor confirmó la emisión de esta solicitud."},"solicitudId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^bhr_[a-zA-Z0-9]+$","description":"Identificador opaco de la solicitud de honorarios en tu organización."},"folio":{"type":"string","maxLength":64,"pattern":"^[1-9]\\d*$","description":"Folio confirmado por el SII."}},"required":["estado","solicitudId","folio"],"additionalProperties":false},{"type":"object","properties":{"estado":{"type":"string","const":"rechazado","description":"El proveedor confirmó el rechazo sin emitir."},"solicitudId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^bhr_[a-zA-Z0-9]+$","description":"Identificador opaco de la solicitud de honorarios en tu organización."},"codigo":{"type":"string","minLength":1,"maxLength":128,"description":"Código del rechazo confirmado."},"puedeReintentar":{"type":"boolean","const":false,"description":"La misma solicitud no permite otro envío."}},"required":["estado","solicitudId","codigo","puedeReintentar"],"additionalProperties":false},{"type":"object","properties":{"estado":{"type":"string","const":"resultado_desconocido","description":"El resultado requiere conciliación con el SII antes de confirmarse."},"solicitudId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^bhr_[a-zA-Z0-9]+$","description":"Identificador opaco de la solicitud de honorarios en tu organización."},"puedeReintentar":{"type":"boolean","const":false,"description":"El envío no puede repetirse mientras su resultado sea incierto."}},"required":["estado","solicitudId","puedeReintentar"],"additionalProperties":false}],"description":"Resultado persistido del único intento de emisión."}},"required":["resultado"],"additionalProperties":false},"sii__honorario__previsualizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"solicitudId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^bhr_[a-zA-Z0-9]+$","description":"Identificador opaco de la solicitud de honorarios en tu organización."}},"required":["solicitudId"],"additionalProperties":false},"sii__honorario__previsualizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^bhr_[a-zA-Z0-9]+$","description":"Identificador opaco de la solicitud de honorarios en tu organización."},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Versión del documento que debe autorizar el profesional."},"previewRef":{"type":"string","minLength":1,"maxLength":8192,"description":"Referencia opaca: el servidor verifica propietario, snapshot, autorización y vigencia."},"payloadHash":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"SHA-256 del contenido canónico de la solicitud."},"bruto":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Honorarios brutos en pesos chilenos."},"retencion":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Impuesto que retiene el receptor, en pesos chilenos."},"liquido":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Monto que recibe el emisor después de la retención, en pesos chilenos."},"ppmEmisor":{"description":"Pago provisional a cargo del emisor cuando el receptor no retiene, en pesos chilenos.","type":"integer","minimum":0,"maximum":9007199254740991},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Vencimiento del borrador, instante ISO 8601 con zona explícita."}},"required":["requestId","version","previewRef","payloadHash","bruto","retencion","liquido","expiresAt"],"additionalProperties":false},"sii__honorario__previsualizar_anulacion__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"solicitudId":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$","description":"ID de la solicitud persistida de anulación de honorarios, con documento y motivo exactos."}},"required":["solicitudId"],"additionalProperties":false},"sii__honorario__previsualizar_anulacion__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","maxLength":128,"pattern":"^bhc_[A-Za-z0-9_-]+$","description":"ID de la solicitud persistida de anulación de honorarios."},"documentVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Versión exacta del documento y motivo vinculados al preview."},"previewRef":{"type":"string","pattern":"^bhcp1\\.[A-Za-z0-9_-]{43}$","description":"Referencia opaca del preview vigente y aprobado de esta solicitud de anulación."},"previewHash":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"SHA-256 del contenido material de la previsualización que requiere aprobación."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Vencimiento del preview como instante ISO 8601 con zona explícita."}},"required":["requestId","documentVersion","previewRef","previewHash","expiresAt"],"additionalProperties":false},"sii__rcv_totales__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Mes AAAA-MM. Sin él, la respuesta trae todos los meses sincronizados y 'sincronizacion' llega null.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"perspectiva":{"description":"compras = la empresa es el receptor; ventas = la empresa es el emisor.","type":"string","enum":["compras","ventas"]},"tipoDte":{"description":"Tipo de documento: 39 boletas, 48 comprobantes de pago, …","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":100,"description":"Filas por página.","type":"integer","minimum":1,"maximum":500}}},"sii__rcv_totales__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"totales":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["compras","ventas"],"description":"compras = la empresa es el receptor; ventas = la empresa es el emisor."},"periodo":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"El mes del total, en formato AAAA-MM."},"estado":{"type":"string","enum":["registro","pendiente","no_incluir","reclamado"],"description":"La casilla del registro a la que pertenece el total. En ventas es siempre 'registro'."},"tipoDte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Tipo de documento: 39 boleta electrónica, 48 comprobante de pago electrónico (pagos con tarjeta), entre otros que el SII informa sólo como total."},"nombreTipo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El nombre del tipo tal como lo escribe el SII. 'null' si no vino."},"cantidad":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos documentos suma el total del mes (por ejemplo, cuántas boletas). Es un conteo, no un folio."},"montoNeto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto del mes, en pesos chilenos."},"montoIva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA del mes, en pesos chilenos."},"montoExento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento del mes, en pesos chilenos."},"montoTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total del mes tal como lo informa el SII, en pesos chilenos. Úsalo tal cual: en los comprobantes de pago no siempre es la suma de neto, IVA y exento."},"sumable":{"type":"boolean","description":"'true' si el total es una venta del mes que no repite ningún documento y se suma a las ventas de 'sii.rcv.consultar': hoy, las boletas (39) de ventas. 'false' en los comprobantes de pago con tarjeta (48): los informa el procesador del pago y pueden repetir ventas por las que la empresa también emitió boleta o factura, así que depende del caso: súmalos si la empresa no emite otro documento por esas ventas o si corrigió la duplicidad con una nota de crédito (la nota ya resta lo repetido); no los sumes si emitió boleta o factura y no corrigió nada. También 'false' en compras, en 'Otros aumenta/disminuye débito' (920 y 922) y en cualquier tipo que Connect todavía no ha medido: no los sumes sin revisar."},"fuente":{"type":"string","enum":["resumen","historico"],"description":"'resumen' = leído del resumen del RCV en la última sincronización; 'historico' = recuperado de un sync anterior al 2026-09-27."},"sincronizadoEn":{"type":"string","description":"Cuándo se leyó este total del SII por última vez, en ISO 8601 UTC."}},"required":["perspectiva","periodo","estado","tipoDte","nombreTipo","cantidad","montoNeto","montoIva","montoExento","montoTotal","sumable","fuente","sincronizadoEn"],"additionalProperties":false},"description":"Un total por mes, perspectiva, estado y tipo. Cada total se actualiza cuando se sincroniza su período: el del mes en curso crece hasta que el mes cierra, y el de un mes cerrado cambia sólo si el SII lo corrige y ese período se vuelve a sincronizar. Nunca se repite un mismo total en dos filas."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"sincronizacion":{"anyOf":[{"type":"object","properties":{"sincronizadoEn":{"type":"string","description":"Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'true' = el período se cargó entero. 'false' = quedaron casillas sin traer. 'null' = se está cargando o no hay registro de ese intento."},"incompletos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."},"fueraDeVentana":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."},"perspectivasFallidas":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false},"description":"Qué direcciones fallaron en esa sincronización, con su código de error. La pueblan las guías de despacho y las boletas de honorarios; para los demás llega vacía."}},"required":["sincronizadoEn","completo","incompletos","fueraDeVentana","perspectivasFallidas"],"additionalProperties":false},{"type":"null"}],"description":"Completitud del último sync del período consultado. Con 'periodo', 'null' y una lista vacía significa que ese mes no está cargado: dilo, no lo informes como cero (revisa 'historico' en 'conexiones.estado.consultar'). Sin 'periodo' siempre es 'null': usa ese bloque para saber qué meses hay."}},"required":["totales","cursor","sincronizacion"],"additionalProperties":false},"sii__rcv__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Período tributario AAAA-MM. Sin él, la respuesta cruza períodos y 'sincronizacion' llega null.","type":"string","pattern":"^\\d{4}-\\d{2}$"},"perspectiva":{"description":"compras = la empresa es el receptor; ventas = la empresa es el emisor.","type":"string","enum":["compras","ventas"]},"tipoDte":{"description":"Tipo de DTE (33 factura electrónica, 34 exenta, 46 factura de compra, 56 nota de débito, 61 nota de crédito, …).","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"estado":{"description":"Estado del documento en el RCV.","type":"string","enum":["registro","pendiente","no_incluir","reclamado"]},"cursor":{"description":"Paginación: el valor que devolvió la respuesta anterior, tal cual.","type":"string"},"limit":{"default":100,"description":"Filas por página.","type":"integer","minimum":1,"maximum":500}}},"sii__rcv__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"documentos":{"type":"array","items":{"type":"object","properties":{"tipoDte":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Código del tipo de DTE: 33 factura electrónica, 34 exenta, 46 factura de compra, 56 nota de débito, 61 nota de crédito. Es un NÚMERO, a diferencia de 'folio': es un código de un vocabulario cerrado, no un identificador."},"folio":{"type":"string","description":"El folio del documento, en TEXTO decimal canónico (sin ceros a la izquierda). Junto con 'tipoDte' y 'rutEmisor' lo identifica de forma única. Es texto y no un número a propósito: un folio es un identificador con el que no se hace aritmética, y hay folios reales que no caben en un entero de 32 bits. Compáralo como cadena y no lo conviertas a número para ordenar ni para volver a mandarlo."},"rutEmisor":{"type":"string","description":"Quien EMITIÓ el documento: en 'ventas' es la empresa de esta conexión, en 'compras' es la contraparte."},"rutReceptor":{"type":"string","description":"Quien RECIBIÓ el documento: en 'compras' es la empresa de esta conexión, en 'ventas' es la contraparte."},"razonSocial":{"type":"string","description":"La razón social de la CONTRAPARTE, nunca la de la empresa de esta conexión, tal como la informó el SII."},"fechaEmisionDate":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La misma fecha de emisión en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"fechaEmision":{"type":"string","deprecated":true,"x-emisso-formato":"DD/MM/AAAA","x-emisso-canonico":"fechaEmisionDate","x-emisso-admite-vacio":true,"description":"No la pases por new Date(). Es la fecha tal cual la manda el SII, en formato chileno DD/MM/AAAA. JavaScript la lee como MM/DD: '07/09/2026' te da el 9 de julio y '28/08/2026' te da Invalid Date. Puede venir vacía ('') cuando el SII no informó la fecha. Usa 'fechaEmisionDate': AAAA-MM-DD, null cuando no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6."},"montoNeto":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto neto en pesos chilenos, entero. Un 0 no distingue 'el documento no tiene neto' (uno sólo exento) de 'el SII no informó el campo': las dos formas llegan igual."},"montoIva":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"IVA en pesos chilenos, entero. Un 0 es ambiguo por el mismo motivo que en 'montoNeto'."},"montoTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto total del documento en pesos chilenos, entero."},"estado":{"type":"string","description":"La casilla del Registro de Compras donde el SII tiene el documento: 'registro', 'pendiente', 'no_incluir' o 'reclamado'. Las ventas son siempre 'registro'."},"periodo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El período tributario con que se sincronizó el documento, en formato AAAA-MM. 'null' en filas viejas que no lo guardaron."},"montoExento":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Monto exento de IVA en pesos chilenos, entero."},"fechaRecepcion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo el SII recibió el documento, en formato AAAA-MM-DD. 'null' si no vino."},"eventoReceptor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"La leyenda del evento que registró el receptor (un acuse, un reclamo). 'null' cuando no hubo evento, pero también cuando no se sabe cuál fue: si en el período hay más de unos 1.000 documentos del mismo tipo, el SII entrega el registro sin este dato. Para saber si hubo un acuse o un reclamo, 'fechaAcuse' y 'fechaReclamo' son más completas que este campo."},"eventoReceptorCod":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El código de ese mismo evento: 'C' recibo otorgado, 'R' reclamado, 'A' no reclamado en plazo, 'P' forma de pago contado, entre otros. Decide por el código, nunca por la leyenda. 'null' NO asegura que no hubo evento: si en el período hay más de unos 1.000 documentos del mismo tipo, el SII entrega el registro sin el código, y en un documento sin fecha de acuse ni de reclamo no se puede distinguir 'A' ni 'P' de 'sin evento'. Un acuse o un reclamo se ve en 'fechaAcuse' y 'fechaReclamo'."},"tipoDocRef":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Tipo del documento que este corrige o referencia (una nota de crédito sobre una factura 33). 'null' cuando no referencia a ninguno. Es un NÚMERO, a diferencia de 'folioDocRef': código de vocabulario cerrado contra identificador."},"folioDocRef":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Folio del documento referenciado, en TEXTO decimal canónico igual que 'folio', o 'null' cuando no hay referencia. Es el campo más expuesto del conector porque sale de lo que tipeó el emisor en el DTE, así que trátalo como cadena y no lo conviertas a número."},"fechaAcuse":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha del acuse de recibo, en formato AAAA-MM-DD. 'null' si no se acusó."},"fechaReclamo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fecha del reclamo, en formato AAAA-MM-DD. 'null' si no se reclamó."},"tipoTransaccion":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Con qué tipo de transacción quedó clasificado el documento en el RCV, tal cual lo manda el SII. 'null' si no vino."},"perspectiva":{"type":"string","enum":["compras","ventas"],"description":"compras = tú eres el receptor; ventas = tú eres el emisor"}},"required":["tipoDte","folio","rutEmisor","rutReceptor","razonSocial","fechaEmisionDate","fechaEmision","montoNeto","montoIva","montoTotal","estado","periodo","montoExento","fechaRecepcion","eventoReceptor","eventoReceptorCod","tipoDocRef","folioDocRef","fechaAcuse","fechaReclamo","tipoTransaccion","perspectiva"],"additionalProperties":false},"description":"Los documentos del RCV que calzan con el filtro, uno por fila. Sale de la caché ya sincronizada, nunca de una consulta en vivo al SII."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."},"sincronizacion":{"anyOf":[{"type":"object","properties":{"sincronizadoEn":{"type":"string","description":"Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."},"completo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"'true' = el período se cargó entero. 'false' = quedaron casillas sin traer. 'null' = se está cargando o no hay registro de ese intento."},"incompletos":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."},"fueraDeVentana":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."},"perspectivasFallidas":{"type":"array","items":{"type":"object","properties":{"perspectiva":{"type":"string","enum":["emitidas","recibidas"],"description":"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."},"code":{"type":"string","description":"El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."}},"required":["perspectiva","code"],"additionalProperties":false},"description":"Qué direcciones fallaron en esa sincronización, con su código de error. La pueblan las guías de despacho y las boletas de honorarios; para los demás llega vacía."}},"required":["sincronizadoEn","completo","incompletos","fueraDeVentana","perspectivasFallidas"],"additionalProperties":false},{"type":"null"}],"description":"Completitud del último sync del período consultado. Con 'periodo', 'null' y una lista vacía significa que ese mes no está cargado: dilo, no lo informes como cero (revisa 'historico' en 'conexiones.estado.consultar'). Sin 'periodo' siempre es 'null': usa ese bloque para saber qué meses hay."}},"required":["documentos","cursor","sincronizacion"],"additionalProperties":false},"tgr__conexion__sincronizar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"description":"Período de ejecución en AAAA-MM; si se omite, el mes actual en Santiago. No filtra los convenios: la Tesorería sólo muestra su estado actual.","type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"alcances":{"default":["convenios"],"description":"Los módulos a sincronizar. Hoy hay uno: 'convenios', que trae las tres pantallas.","minItems":1,"type":"array","items":{"type":"string","const":"convenios"}}}},"tgr__conexion__sincronizar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"periodo":{"type":"string","description":"Período de ejecución en AAAA-MM."},"estado":{"type":"string","enum":["encolado","completado"],"description":"'encolado' = la sincronización quedó en cola y va a empezar enseguida; esta respuesta NO trae datos todavía, y el trabajo se sigue por 'jobId'. 'completado' = la sincronización ya corrió y su resumen por alcance viene en 'results'. Un cliente recibe siempre 'encolado': un sync abre una sesión real contra el sistema externo y puede tardar minutos, así que no se te hace esperar por él."},"jobId":{"description":"El identificador de la sincronización encolada. Por la API REST, el avance se consulta en 'GET /v1/syncs/{jobId}'; por MCP, búscalo en 'trabajos' de 'conexiones.estado.consultar' y revisa 'datosListos' ahí mismo. Es el mismo id que viaja en el webhook 'sync.completed' o 'sync.failed' si tu plan los incluye. Es null cuando 'estado' es 'completado': ahí el resultado ya está en la respuesta y no hay nada que seguir.","anyOf":[{"type":"string"},{"type":"null"}]},"yaEnCurso":{"description":"'true' significa que ya había una sincronización viva para esa conexión y ese período, y que 'jobId' es la de ella. No es un error ni un rechazo: pedir dos veces el mismo período es inofensivo y te devuelve el trabajo que ya está andando. Ojo con el otro lado: 'false' NO garantiza que la hayas creado tú: dos llamadas a la vez pueden recibir las dos 'false' y el MISMO 'jobId'. Lo que sí vale siempre es que hay una sola sincronización activa por conexión y período, así que el 'jobId' que recibes es el trabajo que cubre tu pedido, lo hayas encolado tú o no.","type":"boolean"},"results":{"description":"El resumen por alcance, una fila por alcance sincronizado. AUSENTE cuando 'estado' es 'encolado': el trabajo todavía no corrió. Ausente no es lo mismo que vacío: un arreglo vacío significaría que se miró y no había nada.","type":"array","items":{"type":"object","properties":{"alcance":{"type":"string","const":"convenios","description":"El módulo sincronizado."},"marcador":{"description":"Detalle técnico, cuando el conector pudo componer uno. En una fila que falló dice en qué paso ocurrió y qué se encontró (conteos, status HTTP, content-type); en una que terminó incompleta, qué no se pudo cubrir. Sirve para diagnosticar sin volver a reproducirlo, y nunca contiene datos del contribuyente.","type":"string"},"status":{"type":"string","enum":["ok","failed"],"description":"'ok' = el alcance terminó bien; que 'recordsSynced' sea 0 no lo vuelve un fallo. 'failed' = no terminó bien, y la causa va en 'error'. Ojo con un 'failed': NO garantiza que no se haya escrito nada. Cuando el sistema externo trunca un listado, el alcance queda 'failed' con las filas que alcanzó en 'recordsSynced'. Mira siempre las dos cosas juntas. Y revisa fila por fila: un alcance puede fallar mientras los otros de la misma corrida terminan bien."},"recordsSynced":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Cuántos registros de este alcance escribió ESTA corrida. Es el trabajo de esta llamada, no el total acumulado que tienes guardado: para saber cuánto hay, consulta. Un 0 no significa por sí solo «no hay datos»; cuando el cero tiene una explicación, viene en 'detalle'."},"error":{"description":"Por qué este alcance no terminó bien. Presente solo cuando 'status' es 'failed'. Normalmente es un código del catálogo de errores; cuando el sistema externo truncó el listado es una etiqueta de resultado ('movimientos_truncated', 'cartolas_truncated') que no está en ese catálogo y que significa «se escribió lo que alcanzó a venir». Decide por el valor, nunca por el texto libre.","type":"string"},"detalle":{"description":"Explicación en lenguaje llano, presente solo cuando el resultado necesita una. Existe para que un cero se pueda transmitir tal cual en vez de concluir «no hay datos»: transmítelo a quien pregunte en lugar de resumir el número solo.","type":"string"}},"required":["alcance","status","recordsSynced"],"additionalProperties":false}}},"required":["periodo","estado"],"additionalProperties":false},"tgr__conexion__verificar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"tgr__conexion__verificar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"verificadoEn":{"type":"string","description":"Instante (ISO 8601) en que el login de prueba terminó bien. Es la única salida de esta tool: recibirla ya significa que la credencial sirve. Si no sirviera, la respuesta sería un error con su código de catálogo, nunca este objeto con un booleano en false."}},"required":["verificadoEn"],"additionalProperties":false},"tgr__convenios_cuotas__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"numeroResolucion":{"description":"Filtra por un número de resolución, escrito tal cual lo muestra la Tesorería. Omítelo para ver todas las filas.","type":"string","minLength":1,"maxLength":32},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"tgr__convenios_cuotas__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"convenios":{"type":"array","items":{"type":"object","properties":{"numeroResolucion":{"type":"string","description":"El número de la resolución con que la Tesorería otorgó el convenio. Identifica al convenio en las tres pantallas: úsalo para cruzarlas. Es texto: no lo conviertas a número."},"fechaResolucion":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha de la resolución en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"tipoConvenio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El tipo de convenio con el texto de la Tesorería. null cuando la celda vino vacía."},"numeroCuotas":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"En cuántas cuotas se pactó el convenio. null cuando la celda no traía un entero; el texto queda en 'celdas'."},"celdas":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Las celdas de la fila tal como las mostró la Tesorería, por encabezado de columna normalizado. Úsalas cuando un campo derivado venga en null: ahí está el texto original."},"observadoEn":{"type":"string","description":"Cuándo se vio esta fila en la Tesorería por última vez (ISO 8601). Las filas que dejan de aparecer en la pantalla salen de esta consulta en la sincronización siguiente."}},"required":["numeroResolucion","fechaResolucion","tipoConvenio","numeroCuotas","celdas","observadoEn"],"additionalProperties":false},"description":"Los convenios activos y las propuestas aceptadas de la pantalla «Cuotas convenios vigentes»."},"pantallaLeidaEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se leyó esta pantalla de la Tesorería por última vez (ISO 8601). Es lo que vuelve interpretable una lista vacía: con fecha, la Tesorería mostró la pantalla sin filas; en null, la pantalla todavía no se ha leído (sincroniza con 'tgr.conexion.sincronizar' antes de concluir que no hay nada)."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["convenios","pantallaLeidaEn","cursor"],"additionalProperties":false},"tgr__convenios_detalle__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"numeroResolucion":{"description":"Filtra por un número de resolución, escrito tal cual lo muestra la Tesorería. Omítelo para ver todas las filas.","type":"string","minLength":1,"maxLength":32},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"tgr__convenios_detalle__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"convenios":{"type":"array","items":{"type":"object","properties":{"numeroResolucion":{"type":"string","description":"El número de la resolución con que la Tesorería otorgó el convenio. Identifica al convenio en las tres pantallas: úsalo para cruzarlas. Es texto: no lo conviertas a número."},"fechaResolucion":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha de la resolución en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"tipoConvenio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El tipo de convenio con el texto de la Tesorería. null cuando la celda vino vacía."},"tipoPago":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El tipo de pago del comprobante (por ejemplo «CONVENIO CON CONDONACION»)."},"fechaInicio":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha de inicio del convenio en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"numeroCuotas":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"En cuántas cuotas se pactó el convenio. null cuando la celda no traía un entero; el texto queda en 'celdas'."},"cuotasPagadas":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Cuántas cuotas registra pagadas la Tesorería."},"montoCuotaContado":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"El monto de la cuota contado (el pie), en pesos chilenos. null cuando la Tesorería no lo muestra o no se pudo leer."},"totalAPagar":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"El total del convenio, con la condonación ya aplicada, en pesos chilenos. null cuando la Tesorería no lo muestra o no se pudo leer."},"proximaCuota":{"anyOf":[{"type":"object","properties":{"numero":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El número de la cuota."},"fechaVencimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"Su vencimiento en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"monto":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Su monto en pesos chilenos; null si todavía no se liquida."}},"required":["numero","fechaVencimiento","monto"],"additionalProperties":false},{"type":"null"}],"description":"La primera cuota que la Tesorería no registra pagada. null si están todas pagadas o no se leyó la pantalla de cuotas."},"cuotas":{"type":"array","items":{"type":"object","properties":{"numero":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"El número de la cuota dentro del convenio, desde 1."},"fechaVencimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"El vencimiento de la cuota en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"monto":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"El monto de la cuota en pesos chilenos. null en la cuota de ajuste mientras la Tesorería no la liquida (se calcula después de pagar la penúltima), o si no se pudo leer. Un null NO es cero."},"tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"«Cuota contado», «Cuota normal», «Cuota de ajuste»… con el texto de la Tesorería. null si el comprobante no se leyó."},"pagada":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Si la Tesorería la registra pagada. null cuando no se leyó la pantalla de cuotas."}},"required":["numero","fechaVencimiento","monto","tipo","pagada"],"additionalProperties":false},"description":"Todas las cuotas del convenio, en orden."},"deudas":{"type":"array","items":{"type":"object","properties":{"tipo":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El tipo de deuda con el texto de la Tesorería (por ejemplo «FISCAL»)."},"rutRol":{"type":"string","description":"El RUT o rol de la deuda, como texto."},"formulario":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El formulario de la deuda (por ejemplo 21 o 22), como texto."},"folio":{"type":"string","description":"El folio de la deuda, como texto: no lo conviertas a número."},"fechaVencimiento":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"El vencimiento original de la deuda en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"condonacionIntereses":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El porcentaje de condonación de intereses otorgado (0 a 100). null si no se leyó el comprobante."},"condonacionMultas":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"El porcentaje de condonación de multas otorgado (0 a 100). null si no se leyó el comprobante."},"totalAPagar":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Lo que se paga por esta deuda en el convenio, en pesos chilenos. null cuando la Tesorería no lo muestra o no se pudo leer."}},"required":["tipo","rutRol","formulario","folio","fechaVencimiento","condonacionIntereses","condonacionMultas","totalAPagar"],"additionalProperties":false},"description":"Las deudas que el convenio acoge."},"observadoEn":{"type":"string","description":"Cuándo se vio esta fila en la Tesorería por última vez (ISO 8601). Las filas que dejan de aparecer en la pantalla salen de esta consulta en la sincronización siguiente."}},"required":["numeroResolucion","fechaResolucion","tipoConvenio","tipoPago","fechaInicio","numeroCuotas","cuotasPagadas","montoCuotaContado","totalAPagar","proximaCuota","cuotas","deudas","observadoEn"],"additionalProperties":false},"description":"Un detalle por convenio, armado desde las páginas que enlazan las tres pantallas."},"pantallaLeidaEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se leyó el detalle de los convenios por última vez (ISO 8601). Con fecha y sin filas, la empresa no tiene convenios con detalle; en null, el detalle todavía no se ha leído (sincroniza con 'tgr.conexion.sincronizar' antes de concluir que no hay nada)."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["convenios","pantallaLeidaEn","cursor"],"additionalProperties":false},"tgr__convenios__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"numeroResolucion":{"description":"Filtra por un número de resolución, escrito tal cual lo muestra la Tesorería. Omítelo para ver todas las filas.","type":"string","minLength":1,"maxLength":32},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"tgr__convenios__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"convenios":{"type":"array","items":{"type":"object","properties":{"numeroResolucion":{"type":"string","description":"El número de la resolución con que la Tesorería otorgó el convenio. Identifica al convenio en las tres pantallas: úsalo para cruzarlas. Es texto: no lo conviertas a número."},"fechaResolucion":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha de la resolución en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"tipoConvenio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El tipo de convenio con el texto de la Tesorería. null cuando la celda vino vacía."},"numeroCuotas":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"En cuántas cuotas se pactó el convenio. null cuando la celda no traía un entero; el texto queda en 'celdas'."},"fechaTermino":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha de término del convenio en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"celdas":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Las celdas de la fila tal como las mostró la Tesorería, por encabezado de columna normalizado. Úsalas cuando un campo derivado venga en null: ahí está el texto original."},"observadoEn":{"type":"string","description":"Cuándo se vio esta fila en la Tesorería por última vez (ISO 8601). Las filas que dejan de aparecer en la pantalla salen de esta consulta en la sincronización siguiente."}},"required":["numeroResolucion","fechaResolucion","tipoConvenio","numeroCuotas","fechaTermino","celdas","observadoEn"],"additionalProperties":false},"description":"Los convenios activos de la pantalla «Estado de pago de convenio»."},"pantallaLeidaEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se leyó esta pantalla de la Tesorería por última vez (ISO 8601). Es lo que vuelve interpretable una lista vacía: con fecha, la Tesorería mostró la pantalla sin filas; en null, la pantalla todavía no se ha leído (sincroniza con 'tgr.conexion.sincronizar' antes de concluir que no hay nada)."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["convenios","pantallaLeidaEn","cursor"],"additionalProperties":false},"tgr__resoluciones__consultar__Input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"numeroResolucion":{"description":"Filtra por un número de resolución, escrito tal cual lo muestra la Tesorería. Omítelo para ver todas las filas.","type":"string","minLength":1,"maxLength":32},"cursor":{"description":"Puntero opaco a la página siguiente. Reenvía tal cual el 'cursor' que devolvió la llamada anterior; nunca lo construyas a mano. Omítelo para pedir la primera página.","type":"string"},"limit":{"default":100,"description":"Cuántas filas trae la página, entre 1 y 500. Por omisión, 100.","type":"integer","minimum":1,"maximum":500}}},"tgr__resoluciones__consultar__Output":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resoluciones":{"type":"array","items":{"type":"object","properties":{"numeroResolucion":{"type":"string","description":"El número de la resolución con que la Tesorería otorgó el convenio. Identifica al convenio en las tres pantallas: úsalo para cruzarlas. Es texto: no lo conviertas a número."},"fechaResolucion":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha de la resolución en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"fechaActivacion":{"anyOf":[{"type":"string"},{"type":"null"}],"x-emisso-formato":"AAAA-MM-DD","description":"La fecha en que se activó el beneficio en formato AAAA-MM-DD, o null si no se pudo parsear. Es un día calendario sin zona horaria: compáralo como texto o con Date.UTC, porque new Date('2026-09-07') es medianoche UTC y en Chile se muestra como el 6. Es el campo que conviene usar para ordenar y filtrar."},"tipoBeneficio":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"El tipo de beneficio que otorgó la resolución, con el texto de la Tesorería."},"celdas":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Las celdas de la fila tal como las mostró la Tesorería, por encabezado de columna normalizado. Úsalas cuando un campo derivado venga en null: ahí está el texto original."},"observadoEn":{"type":"string","description":"Cuándo se vio esta fila en la Tesorería por última vez (ISO 8601). Las filas que dejan de aparecer en la pantalla salen de esta consulta en la sincronización siguiente."}},"required":["numeroResolucion","fechaResolucion","fechaActivacion","tipoBeneficio","celdas","observadoEn"],"additionalProperties":false},"description":"Las resoluciones vigentes en la pantalla, en orden estable."},"pantallaLeidaEn":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cuándo se leyó esta pantalla de la Tesorería por última vez (ISO 8601). Es lo que vuelve interpretable una lista vacía: con fecha, la Tesorería mostró la pantalla sin filas; en null, la pantalla todavía no se ha leído (sincroniza con 'tgr.conexion.sincronizar' antes de concluir que no hay nada)."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Puntero a la página siguiente. Si viene distinto de null hay más filas: vuelve a llamar reenviándolo tal cual en 'cursor'. Un null significa que no queda nada por traer."}},"required":["resoluciones","pantallaLeidaEn","cursor"],"additionalProperties":false},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","description":"El error de esta llamada. Toda respuesta que no sea 2xx trae exactamente esta forma.","required":["code","message","request_id"],"properties":{"code":{"type":"string","enum":["alcance_not_enabled","alcance_scheme_unsupported","billing_past_due","collection_cleanup_pending","collection_configuration_missing","collection_document_invalid","collection_document_too_large","collection_expired","collection_identity_mismatch","collection_inconclusive","collection_not_enabled","collection_not_found","collection_scope_forbidden","connected_account_required","connection_ambiguous","connection_busy","connection_credential_required","connection_disabled","connection_identity_mismatch","connection_scope_not_enabled","connection_session_pending","connection_sync_in_progress","connector_onboarding_required","connector_plan_limit","connector_variant_unsupported","feature_not_in_plan","forbidden","handler_error","honorarios_annulment_conflict","honorarios_beta_disabled","honorarios_duplicate_reference","honorarios_policy_denied","honorarios_request_not_found","idempotency_conflict","idempotency_in_progress","idempotency_key_missing","internal_error","invalid_webhook_url","malformed_request","not_implemented","output_contract_error","payload_too_large","quota_exceeded","rate_limited","scope_not_granted","service_unavailable","sii_anulacion_documento_no_encontrado","sii_anulacion_en_curso","sii_anulacion_no_admitida","sii_anulacion_ya_emitida","sii_dte_validation_failed","sii_dte_variant_not_enabled","sii_emission_not_found","sii_emission_outcome_unknown","sii_emission_rejected","sii_emitter_profile_changed","sii_emitter_profile_required","sii_facturador_contract_changed","sii_facturador_not_enabled","sii_facturador_not_enrolled","sii_preparation_confirmation_required","sii_preview_changed","sii_preview_token_expired","sii_preview_token_invalid","sii_signing_material_invalid","sii_signing_material_required","subscription_required","sync_job_not_found","timeout","too_many_pending","tool_not_found","unauthorized","unsupported_media_type","upstream_error","upstream_unexpected_response","validation_error","webhook_delivery_not_found","webhook_endpoint_not_found"],"description":"El código del catálogo. Decide SIEMPRE por este valor y nunca por el texto de 'message', que puede cambiar sin aviso; los códigos son estables."},"message":{"type":"string","description":"Descripción legible del error. Para mostrar, no para ramificar."},"suggested_fix":{"type":"string","description":"El paso siguiente, escrito para ejecutarse. Cuando el error depende de datos concretos (qué conexiones hay, qué alcance falta) los nombra, así que léelo antes de reintentar."},"request_id":{"type":"string","description":"El id de esta llamada (req_…). Correlaciona con la bitácora y es lo primero que pide soporte."},"details":{"description":"Detalle estructurado del error cuando lo hay, por ejemplo los campos que no validaron. Su forma depende del código."}}}}},"ResponseMeta":{"type":"object","required":["request_id","tool_id","plane","latency_ms","audit_status"],"properties":{"request_id":{"type":"string","description":"Identificador que el servidor le da a esta llamada (req_…). Correlaciona con la fila de la bitácora y es lo primero que pide soporte: guárdalo en tus logs."},"operation_request_id":{"type":"string","format":"uuid","description":"Identidad del intento e-Boleta original. Se conserva al reproducir el resultado del journal; request_id identifica la llamada actual."},"tool_id":{"type":"string","description":"La tool que se ejecutó, con su id punteado."},"plane":{"type":"string","enum":["action","read"],"description":"'read' = la llamada escribió en el plano persistido (un sync). 'action' = efímera, no persistió nada de negocio: actuar afuera, o leer lo que un sync ya dejó."},"latency_ms":{"type":"integer","description":"Cuánto tardó la ejecución, en milisegundos."},"audit_status":{"type":"string","enum":["recorded","degraded"],"description":"'recorded' = la bitácora recibió la fila de esta llamada. 'degraded' = la acción se hizo pero el registro cayó a un respaldo duradero. Nunca convierte una acción exitosa en un error, porque reintentar por eso sería pagar o emitir dos veces."},"idempotency":{"type":"string","enum":["replayed"],"description":"Presente solo cuando una tool destructiva devolvió la respuesta guardada de un intento previo con la misma Idempotency-Key. Significa que en ESTA llamada no ocurrió ningún efecto nuevo."}}}},"responses":{"Error_honorarios_request_not_found":{"description":"honorarios_request_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_honorarios_beta_disabled":{"description":"honorarios_beta_disabled (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_honorarios_policy_denied":{"description":"honorarios_policy_denied (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_honorarios_duplicate_reference":{"description":"honorarios_duplicate_reference (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_honorarios_annulment_conflict":{"description":"honorarios_annulment_conflict (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_not_found":{"description":"collection_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_not_enabled":{"description":"collection_not_enabled (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_configuration_missing":{"description":"collection_configuration_missing (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_scope_forbidden":{"description":"collection_scope_forbidden (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_expired":{"description":"collection_expired (410)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_inconclusive":{"description":"collection_inconclusive (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_identity_mismatch":{"description":"collection_identity_mismatch (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_document_invalid":{"description":"collection_document_invalid (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_document_too_large":{"description":"collection_document_too_large (413)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_collection_cleanup_pending":{"description":"collection_cleanup_pending (503)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_validation_error":{"description":"validation_error (400)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_malformed_request":{"description":"malformed_request (400)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_unsupported_media_type":{"description":"unsupported_media_type (415)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_payload_too_large":{"description":"payload_too_large (413)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_unauthorized":{"description":"unauthorized (401)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_service_unavailable":{"description":"service_unavailable (503)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_forbidden":{"description":"forbidden (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_scope_not_granted":{"description":"scope_not_granted (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_scope_not_enabled":{"description":"connection_scope_not_enabled (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_disabled":{"description":"connection_disabled (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_ambiguous":{"description":"connection_ambiguous (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_busy":{"description":"connection_busy (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connected_account_required":{"description":"connected_account_required (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_credential_required":{"description":"connection_credential_required (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_identity_mismatch":{"description":"connection_identity_mismatch (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_alcance_scheme_unsupported":{"description":"alcance_scheme_unsupported (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_alcance_not_enabled":{"description":"alcance_not_enabled (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_tool_not_found":{"description":"tool_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_idempotency_key_missing":{"description":"idempotency_key_missing (400)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_idempotency_conflict":{"description":"idempotency_conflict (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_idempotency_in_progress":{"description":"idempotency_in_progress (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connector_onboarding_required":{"description":"connector_onboarding_required (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connector_plan_limit":{"description":"connector_plan_limit (402)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connector_variant_unsupported":{"description":"connector_variant_unsupported (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_facturador_not_enabled":{"description":"sii_facturador_not_enabled (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_dte_variant_not_enabled":{"description":"sii_dte_variant_not_enabled (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_dte_validation_failed":{"description":"sii_dte_validation_failed (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_facturador_contract_changed":{"description":"sii_facturador_contract_changed (502)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_facturador_not_enrolled":{"description":"sii_facturador_not_enrolled (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_preview_token_invalid":{"description":"sii_preview_token_invalid (400)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_preview_token_expired":{"description":"sii_preview_token_expired (410)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_anulacion_documento_no_encontrado":{"description":"sii_anulacion_documento_no_encontrado (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_anulacion_en_curso":{"description":"sii_anulacion_en_curso (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_anulacion_ya_emitida":{"description":"sii_anulacion_ya_emitida (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_anulacion_no_admitida":{"description":"sii_anulacion_no_admitida (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_preview_changed":{"description":"sii_preview_changed (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_emitter_profile_required":{"description":"sii_emitter_profile_required (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_emitter_profile_changed":{"description":"sii_emitter_profile_changed (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_preparation_confirmation_required":{"description":"sii_preparation_confirmation_required (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_signing_material_required":{"description":"sii_signing_material_required (428)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_signing_material_invalid":{"description":"sii_signing_material_invalid (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_emission_rejected":{"description":"sii_emission_rejected (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_emission_outcome_unknown":{"description":"sii_emission_outcome_unknown (500)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sii_emission_not_found":{"description":"sii_emission_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_rate_limited":{"description":"rate_limited (429)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_sync_in_progress":{"description":"connection_sync_in_progress (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_too_many_pending":{"description":"too_many_pending (429)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_sync_job_not_found":{"description":"sync_job_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_webhook_endpoint_not_found":{"description":"webhook_endpoint_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_webhook_delivery_not_found":{"description":"webhook_delivery_not_found (404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_invalid_webhook_url":{"description":"invalid_webhook_url (422)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_quota_exceeded":{"description":"quota_exceeded (429)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_feature_not_in_plan":{"description":"feature_not_in_plan (403)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_billing_past_due":{"description":"billing_past_due (402)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_subscription_required":{"description":"subscription_required (402)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_connection_session_pending":{"description":"connection_session_pending (409)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_output_contract_error":{"description":"output_contract_error (500)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_handler_error":{"description":"handler_error (500)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_upstream_error":{"description":"upstream_error (502)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_upstream_unexpected_response":{"description":"upstream_unexpected_response (502)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_timeout":{"description":"timeout (504)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_not_implemented":{"description":"not_implemented (501)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Error_internal_error":{"description":"internal_error (500)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"connect_sk_","description":"API key de la organización, en 'Authorization: Bearer connect_sk_…'. Es la credencial para tu backend y tus agentes propios; se crea en el dashboard con permisos explícitos y su valor completo se muestra una sola vez. Autentica como agente: la bitácora atribuye la acción a la clave, nunca a la persona que la creó."},"oauth2":{"type":"oauth2","description":"OAuth 2.1 para clientes MCP interactivos, con registro dinámico y PKCE S256 obligatorio. El access token viaja igual, en 'Authorization: Bearer connect_at_…', y autentica como usuario. Los endpoints viven en la raíz del origen, no bajo /api.","flows":{"authorizationCode":{"authorizationUrl":"https://connect.emisso.ai/authorize","tokenUrl":"https://connect.emisso.ai/token","refreshUrl":"https://connect.emisso.ai/token","scopes":{"banco_estado:read":"Permiso para las tools de 'banco_estado'.","banco_security:read":"Permiso para las tools de 'banco_security'.","bch_empresas:read":"Permiso para las tools de 'bch_empresas'.","bci_360:read":"Permiso para las tools de 'bci_360'.","bci_pyme:read":"Permiso para las tools de 'bci_pyme'.","bice_empresas:read":"Permiso para las tools de 'bice_empresas'.","conexiones:delete":"Permiso para las tools de 'conexiones'.","conexiones:disable":"Permiso para las tools de 'conexiones'.","conexiones:enable":"Permiso para las tools de 'conexiones'.","conexiones:read":"Permiso para las tools de 'conexiones'.","conexiones:write":"Permiso para las tools de 'conexiones'.","core:read":"Permiso para las tools de 'core'.","echo:read":"Permiso para las tools de 'echo'.","indicadores:read":"Permiso para las tools de 'indicadores'.","itau_empresas:read":"Permiso para las tools de 'itau_empresas'.","mercadopublico:read":"Permiso para las tools de 'mercadopublico'.","mercadopublico:write":"Permiso para las tools de 'mercadopublico'.","notta:read":"Permiso para las tools de 'notta'.","notta:write":"Permiso para las tools de 'notta'.","pjud:read":"Permiso para las tools de 'pjud'.","previred:read":"Permiso para las tools de 'previred'.","santander_empresas:read":"Permiso para las tools de 'santander_empresas'.","sii:boletas:write":"Permiso para las tools de 'sii'.","sii:carpeta_tributaria:generar":"Permiso para las tools de 'sii'.","sii:honorarios:annul":"Permiso para las tools de 'sii'.","sii:honorarios:write":"Permiso para las tools de 'sii'.","sii:read":"Permiso para las tools de 'sii'.","sii:write":"Permiso para las tools de 'sii'.","tgr:read":"Permiso para las tools de 'tgr'."}}}}}}}