Connect

Consultar totales del mes del RCV

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.

Tool IDsii.rcv_totales.consultar
Nombre MCPsii__rcv_totales__consultar
Conectorsii
Planoaction
Lee el alcancercv (debe estar habilitado en la conexión)
Scope (permiso)sii:read
Authnone
Versión2
Sensiblesí
Deprecadono
ComportamientoreadOnly=true, destructive=false, idempotent=true, openWorld=false

Requiere conexión. Indica cuál en cada llamada: header X-Connect-Connection en REST, campo connectionId en el execute de MCP y en las opciones del SDK. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale de conexiones.estado.consultar.

Qué hace

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'.

Entrada

CampoTipoRequeridoDescripción
periodostring ^\d{4}-\d{2}$noMes AAAA-MM. Sin él, la respuesta trae todos los meses sincronizados y 'sincronizacion' llega null.
perspectiva"compras" · "ventas"nocompras = la empresa es el receptor; ventas = la empresa es el emisor.
tipoDteenteronoTipo de documento: 39 boletas, 48 comprobantes de pago, …
cursorstringnoPaginación: el valor que devolvió la respuesta anterior, tal cual.
limitentero 1-500no · default 100Filas por página.
JSON Schema de entrada
{
  "$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
    }
  }
}

Ejemplo

curl
curl -X POST https://connect.emisso.ai/api/v1/tools/sii.rcv_totales.consultar/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"periodo":"2026-09","perspectiva":"ventas"}}'
SDK TypeScript
const data = await connect.tools.sii.rcv_totales.consultar({ periodo: "2026-09", perspectiva: "ventas" }, { connectionId: "conn_9tKfR2mQx4Vb" });
MCP · meta-tool execute
{
  "tool": "sii.rcv_totales.consultar",
  "params": {
    "periodo": "2026-09",
    "perspectiva": "ventas"
  },
  "connectionId": "conn_9tKfR2mQx4Vb"
}

Salida esperada (200):

{
  "data": {
    "totales": [
      {
        "perspectiva": "ventas",
        "periodo": "2026-09",
        "estado": "registro",
        "tipoDte": 48,
        "nombreTipo": "Total mes Comprobantes Pago Electrónico",
        "cantidad": 85,
        "montoNeto": 2000000,
        "montoIva": 380000,
        "montoExento": 0,
        "montoTotal": 2380000,
        "sumable": false,
        "fuente": "resumen",
        "sincronizadoEn": "2026-09-27T12:36:13.000Z"
      },
      {
        "perspectiva": "ventas",
        "periodo": "2026-09",
        "estado": "registro",
        "tipoDte": 39,
        "nombreTipo": "Boleta Electrónica",
        "cantidad": 996,
        "montoNeto": 15504202,
        "montoIva": 2945798,
        "montoExento": 0,
        "montoTotal": 18450000,
        "sumable": true,
        "fuente": "resumen",
        "sincronizadoEn": "2026-09-27T12:36:13.000Z"
      }
    ],
    "cursor": null,
    "sincronizacion": {
      "sincronizadoEn": "2026-09-27T12:36:13.000Z",
      "completo": true,
      "incompletos": 0,
      "fueraDeVentana": null,
      "perspectivasFallidas": []
    }
  },
  "meta": {
    "request_id": "req_…",
    "tool_id": "sii.rcv_totales.consultar",
    "plane": "action",
    "latency_ms": 24,
    "audit_status": "recorded"
  }
}

Las ventas del mes son los documentos de venta de 'sii.rcv.consultar' (las notas de crédito restan) más estos totales con 'sumable: true'. Los pagos con tarjeta (48) dependen del caso: el procesador del pago los informa aparte y pueden repetir ventas con boleta o factura. Súmalos si la empresa no emite otro documento por esas ventas o si corrigió la duplicidad con una nota de crédito; no, si no corrigió nada. 'cantidad' es cuántas boletas o pagos suma el total, no un folio. El total del mes en curso crece en cada sincronización; nunca aparece dos veces.

Salida

CampoTipoRequeridoDescripción
totaleslista de objetosí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.
totales[].perspectiva"compras" · "ventas"sícompras = la empresa es el receptor; ventas = la empresa es el emisor.
totales[].periodostring ^\d{4}-\d{2}$síEl mes del total, en formato AAAA-MM.
totales[].estado"registro" · "pendiente" · "no_incluir" · "reclamado"síLa casilla del registro a la que pertenece el total. En ventas es siempre 'registro'.
totales[].tipoDteenterosí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.
totales[].nombreTipostringnullsí
totales[].cantidadenterosíCuántos documentos suma el total del mes (por ejemplo, cuántas boletas). Es un conteo, no un folio.
totales[].montoNetoenterosíMonto neto del mes, en pesos chilenos.
totales[].montoIvaenterosíIVA del mes, en pesos chilenos.
totales[].montoExentoenterosíMonto exento del mes, en pesos chilenos.
totales[].montoTotalenterosí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.
totales[].sumablebooleanosí'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.
totales[].fuente"resumen" · "historico"sí'resumen' = leído del resumen del RCV en la última sincronización; 'historico' = recuperado de un sync anterior al 2026-09-27.
totales[].sincronizadoEnstringsíCuándo se leyó este total del SII por última vez, en ISO 8601 UTC.
cursorstringnullsí
sincronizacionobjetonullsí
sincronizacion.sincronizadoEnstringsíCuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo.
sincronizacion.completobooleanonullsí
sincronizacion.incompletosenteronullsí
sincronizacion.fueraDeVentanaenteronullsí
sincronizacion.perspectivasFallidaslista de objetosí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.
sincronizacion.perspectivasFallidas[].perspectiva"emitidas" · "recibidas"síQué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron.
sincronizacion.perspectivasFallidas[].codestringsíEl código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto.
JSON Schema de salida
{
  "$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
}

Errores de esta tool

CódigoHTTPReintentableQué hacer
connection_disabled403noReactívala en /connections o usa otra conexión del mismo sistema.
alcance_not_enabled403noHabilita el alcance en /connections o quítalo del input de la sincronización.

Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.

Próximos pasos

En esta página