El portal del SII autenticado con certificado: sesión, datos de la empresa, solicitudes de folios y CAF, el registro de compras y ventas, el respaldo MIPYME y la verificación de actividades; además de los sets de certificación y el runner de certificación. Corre solo en Node, porque fetch no puede presentar un certificado cliente.
TypeScript
import { createPortalClient, openPortalSession, queryFolioQuota } from 'dte-sdk/portal'
⚠️
Lo que ya se probó contra el portal real: en producción, el 9 y el 10 de noviembre de 2026, el login con certificado y la sesión reutilizada entre lecturas, con una empresa no inscrita como emisor, y las lecturas del registro de compras y ventas (fetchRegisterSummary, listPeriodDocuments, fetchPurchaseDocument, listPurchaseTypes) con las filas de una factura recibida; en ejecuciones anteriores cuyo ambiente no quedó anotado, login, logout, datos del contribuyente y las páginas de rechazo, con una empresa no inscrita como emisor, y las solicitudes de solo lectura del registro con una empresa sin documentos. Las páginas de folios y CAF de una empresa inscrita aún no se han visto, porque necesitan una, y tampoco las escrituras del registro ni las descargas del respaldo MIPYME. La verificación de actividades se leyó para una verificación pendiente y, el 9 de noviembre, para una condicionada, pendiente de acreditación; una aprobada aún no se ha visto, así que su lectura sigue inestable. La certificación (sets, runner, intercambio, subida de las muestras) y la certificación de boletas aún no se han ejecutado. Todo está probado con respuestas sintéticas. Ver Estado.
Los grupos siguientes siguen las guías: Portal, Registro, Sets de pruebas, Runner, Intercambio y muestras y Boletas. Las funciones del portal reciben un PortalClient primero y un CallOverrides al final; los pasos de la certificación reciben un CertificationDependencies y un CertificationState.
El portal informa un rechazo como un DteError con código SII_PORTAL_REJECTED y details.rejection, uno de los valores de PortalRejection. PORTAL_REJECTIONS y portalRejectionMessage dan el texto en español para el operador. Los flujos compuestos devuelven los rechazos como datos en vez de lanzar. Guía: Portal.
TypeScript
// Qué significa cada rechazo y qué hacer, en español, para el operador.const PORTAL_REJECTIONS: Readonly<Record<PortalRejection, string>>// El mensaje en español de un rechazo.function portalRejectionMessage(rejection: PortalRejection): string
Tipo
Descripción
AccountingStatus
Estado contable de un documento en el registro. Definido como 'registered' | 'pending' | 'notIncluded' | 'claimed'. Cuáles puede tener cada lado está en REGISTER_ACCOUNTING_STATUSES.
DocumentDirection
En qué lado de un documento está el contribuyente. Definido como 'issued' | 'received'.
PortalRejection
Por qué el SII rechazó una solicitud del portal.
RegisterOperation
Qué libro del registro. Definido como 'purchase' | 'sale'.
createPortalClient devuelve un cliente congelado; las operaciones del portal son funciones libres que lo reciben primero y aceptan un CallOverrides final (signal, timeoutMs, retry). El portal corre solo en Node, porque fetch no puede presentar un certificado cliente: el transporte por defecto es node:https con el certificado y la verificación TLS activada. El certificado debe estar habilitado como método de ingreso en sii.cl, o el login lanza SII_PORTAL_CERT_NOT_ENABLED. Las sesiones se abren a pedido; openPortalSession y closePortalSession lo hacen de forma explícita. sessionCache y lock son puertos para despliegues con varias réplicas. Guía: Portal.
// Valida y completa las opciones en un `PortalClient` congelado.function createPortalClient(options: PortalClientOptions): PortalClient// Política de reintentos del portal: 4 intentos a los 2, 4 y 8 s, sin jitter, repitiendo lo que// acepta `isRetryablePortalError`.const DEFAULT_PORTAL_RETRY_POLICY: RetryPolicy// True para lo que conviene repetir en el portal: fallas de transporte, timeouts, HTTP// 502/503/504, y las fallas TLS que el SII produce de forma intermitente con certificado cliente// (`EPROTO … rsa_pss`), que no indican un certificado malo.function isRetryablePortalError(error: unknown): boolean
Tipo
Descripción
PortalClient
El cliente del portal: datos planos congelados, con todos los campos resueltos. Se pasa a las funciones del portal.
PortalClientOptions
Opciones de createPortalClient.
Campos de PortalClientOptions
Campo
Tipo
Descripción
environment
Environment
Ambiente: elige maullin o palena para las páginas CGI.
certificate
Certificate
Certificado que se presenta al iniciar sesión; su titular es el usuario del portal.
companyRut?
string
RUT_EMP + DV_EMP — RUT de la empresa, salvo que la llamada indique otro.
transport?
HttpTransport
Transporte HTTP; por defecto https de Node con el certificado cliente y tope TLS 1.2.
sessionCache?
TokenCache
Dónde vive la sesión; en memoria por defecto. createDirectoryTokenCache({ dir }) de dte-sdk/node la guarda en disco, un archivo por certificado que solo puede leer su dueño.
sessionTtlMs?
number
Vigencia de la sesión en la caché; 90 min por defecto, renovada en cada uso.
lock?
PortalLock
Quién puede usar la sesión ahora; por defecto una exclusión mutua en el proceso, que solo vale dentro de un proceso: los procesos que comparten una sesión en disco necesitan un candado compartido.
retry?
Partial<RetryPolicy> | false
Ajustes de la política de reintentos, o false para desactivarlos.
timeoutMs?
number
Timeout por petición, en ms; 20 000 por defecto.
closePreviousSessions?
boolean
Cerrar sesiones anteriores cuando el SII informa el límite y lo ofrece; true por defecto.
logger?
Logger
Logger; silencioso por defecto.
capture?
HttpCapture
Puerto de captura HTTP; apagado por defecto.
now?
() => Date
Reloj inyectable.
sleep?
SleepFn
Espera entre reintentos y entre pasos.
randomId?
() => string
transactionId — Fuente de los identificadores de transacción del RCV; por defecto crypto.randomUUID.
// Exclusión mutua por clave dentro de un proceso.function createMemoryPortalLock(): PortalLock
Tipo
Descripción
PortalLock
Quién puede usar ahora una sesión del portal: run parte solo con el candado tomado y este se libera al terminar, aunque falle. Definido como <T>(key: string, run: () => Promise<T>) => Promise<T>.
// Abre una sesión de forma explícita, reutilizando una en caché que siga viva, según lo dice la// página de empresa del ambiente del cliente (`ad_empresa1`). Las demás operaciones no lo// necesitan: inician sesión a pedido.function openPortalSession( portal: PortalClient, overrides?: CallOverrides,): Promise<PortalSessionInfo>// Cierra la sesión para devolver su cupo y siempre borra la sesión en caché. Un cierre fallido// solo se registra: de todos modos el SII vence la sesión por su cuenta.function closePortalSession(portal: PortalClient, overrides?: CallOverrides): Promise<void>
La resolución de la empresa (por ambiente), sus datos de contribuyente y el perfil del emisor que combina ambos. Guía: Portal.
TypeScript
// Lee la resolución de una empresa. Es por ambiente: certificación y producción responden fechas y// números distintos para un mismo RUT, y el par equivocado hace que se rechace un envío con "Error// en Carátula".function fetchCompanyResolution( portal: PortalClient, input?: { readonly companyRut?: string; readonly environment?: Environment; }, overrides?: CallOverrides,): Promise<CompanyResolution>// Lee los datos del contribuyente: nombre, domicilio separado en sus partes, actividades y// sucursales.function fetchTaxpayerData( portal: PortalClient, input?: { readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<TaxpayerData>// Lee la resolución y los datos del contribuyente en secuencia y los combina. En paralelo, una// respuesta pisa la cookie del balanceador que la otra necesita y `ad_empresa2` responde vacío.function fetchIssuerProfile( portal: PortalClient, input?: { readonly companyRut?: string; readonly environment?: Environment; }, overrides?: CallOverrides,): Promise<IssuerProfile>
Tipo
Descripción
IssuerProfile
Lo que una empresa necesita para llenar un Issuer y una carátula.
CompanyResolution
Lo que ad_empresa2 dice de una empresa en un ambiente.
TaxpayerData
Lo que ce_consulta_muestra_e dice de un contribuyente. Solo responde en el host de certificación.
TaxpayerActivity
Una actividad económica.
TaxpayerBranch
Una sucursal inscrita.
Campos de IssuerProfile
Campo
Tipo
Descripción
rut
SiiRut
RUTEmisor — RUT de la empresa.
businessName
string
RznSoc — Razón social.
businessActivity
string
GiroEmis — Giro: la primera actividad, si no la glosa.
activityCode
number | null
Acteco — Código de la primera actividad, o null.
address
string
DirOrigen — Dirección.
commune
string
CmnaOrigen — Comuna.
city
string
CiudadOrigen — Ciudad; la comuna si falta.
resolutionDate
string
FchResol — Fecha de resolución del ambiente pedido.
resolutionNumber
number
NroResol — Número de resolución del ambiente pedido.
Campos de CompanyResolution
Campo
Tipo
Descripción
rut
string | null
Rut — RUT de la empresa tal como aparece.
businessName
string | null
Razón Social — Razón social.
resolutionDate
string | null
Fecha Resolución — Fecha de resolución, AAAA-MM-DD.
resolutionNumber
number | null
Resolución — Número de resolución.
authorizationDate
string | null
Fecha Autorización — Fecha de autorización, tal como viene.
Campos de TaxpayerData
Campo
Tipo
Descripción
rut
string | null
DATOS DEL CONTRIBUYENTE RUT — RUT.
businessName
string | null
NOMBRE O RAZÓN SOCIAL — Razón social.
businessActivity
string | null
GiroEmis — Descripción de la primera actividad.
activityCode
number | null
Acteco — Código de la primera actividad.
address
string | null
DirOrigen — Parte de calle y número del domicilio.
neighborhood
string | null
Villa/Pob. — Villa o población.
city
string | null
Ciudad — Ciudad.
commune
string | null
Comuna — Comuna.
portalAddress
string | null
DIRECCIÓN DE LA EMPRESA — Celda del domicilio, sin cambios.
regionalOffice
string | null
DIRECCIÓN REGIONAL DEL CONTRIBUYENTE — Dirección regional del SII.
Lee el estado de cada set de pruebas y libro en el host de certificación. Solo lee; declarar el avance es declareProgress. Guía: Sets de pruebas.
TypeScript
// Lee el estado de cada set de pruebas y libro, en el host de certificación. Solo lee: declarar// avance es `declareProgress`.function queryCertificationSets( portal: PortalClient, input?: { readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<CertificationSets>
Tipo
Descripción
CertificationSets
El estado de certificación de una empresa.
CertificationSet
Un set de pruebas o libro de la certificación, y su estado.
Lista los tipos de documento que la empresa puede timbrar, lee el cupo de folios (esto no timbra nada) y solicita un CAF. El SII puede otorgar menos de lo que pides: lee granted. El XML del CAF contiene una llave privada: trátalo como un secreto. Guía: Portal.
TypeScript
// Lista los tipos de documento que el portal ofrece para timbraje con esta empresa. Una página de// error no es "sin tipos": una página sin selector y sin rechazo declarado lanza.function listStampableTypes( portal: PortalClient, input?: { readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<readonly StampableType[]>// Lee cuántos folios autoriza el SII para un tipo, deteniéndose en el formulario que lo muestra:// no se timbra nada y el cupo no se mueve. `MAX_AUTOR` y `FOLIOS_DISP` aparecen solo mientras el// SII raciona el tipo. El formulario es el que tiene el tipo elegido en su selector: la página de la// empresa, sin tipo elegido, se recarga con él, y una última página que no es ese formulario lanza// `SII_PORTAL_SESSION_EXPIRED` o `SII_PORTAL_UNEXPECTED_PAGE` en vez de leerse como un tipo sin racionar.function queryFolioQuota( portal: PortalClient, input: { readonly type: DocumentType; readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<FolioQuota>// Solicita un rango de folios y descarga su CAF por los cinco pasos del portal. Un rechazo puede// llegar en cualquier paso. Si se excede el máximo efectivo y no hay `minQuantity`, pide una vez// más por un folio. Si el SII responde la solicitud con el formulario de solicitud otra vez, no se// envía nada de nuevo: lanza `SII_PORTAL_REJECTED` con `stampingUncertain`, porque los folios pudieron// otorgarse, y `listReobtainableRanges` dice si se otorgaron.function requestCaf( portal: PortalClient, input: CafRequestInput, overrides?: CallOverrides,): Promise<ObtainedCaf>
Tipo
Descripción
CafRequestInput
Entrada de requestCaf.
FolioQuota
El cupo de timbraje de un tipo de documento.
ObtainedCaf
Un CAF obtenido del portal. xml contiene la llave privada del CAF: guárdalo como un secreto.
QuotaFields
El cupo de un formulario: ambos null si el SII no está racionando este tipo, porque solo entonces los publica.
StampableType
Un tipo de documento que el portal ofrece para timbraje.
Campos de CafRequestInput
Campo
Tipo
Descripción
type
DocumentType
COD_DOCTO — Tipo de documento.
quantity
number
CANTIDAD — Folios pedidos.
minQuantity?
number
Mínimo aceptable: bajo él no se timbra, porque un rango corto queda sin usar y baja el próximo máximo.
companyRut?
string
RUT_EMP + DV_EMP — RUT de la empresa; por defecto el del cliente.
Campos de FolioQuota
Campo
Tipo
Descripción
maxAuthorized
number | null
MAX_AUTOR — Máximo de folios que el SII autoriza ahora.
availableFolios
number | null
FOLIOS_DISP — Folios timbrados sin utilizar.
unrestricted
boolean
El SII no está racionando este tipo.
blocked
boolean
El SII no autoriza nada: "NO SE AUTORIZA TIMBRAJE".
Campos de ObtainedCaf
Campo
Tipo
Descripción
xml
string
AUTORIZACION — El archivo tal como lo entregó el SII.
caf
Caf
El archivo parseado.
granted
number
Folios que cubre.
maxAuthorized
number | null
MAX_AUTOR — Máximo que autorizó el SII, o null si no estaba racionando.
availableFolios
number | null
FOLIOS_DISP — Folios timbrados sin usar, o null si no estaba racionando.
recovered
boolean
Volvió por "ya fue autorizado" o por la reobtención.
Anular folios sin usar es irreversible y exige un alcance explícito. Lista antes los rangos sin usar. Guía: Portal.
TypeScript
// Lista los rangos sin usar de un tipo de documento, siguiendo las páginas del listado. No cambia// nada.function listFolioRanges( portal: PortalClient, input: { readonly type: DocumentType; readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<FolioRanges>// Anula folios sin usar: hasta cuatro pasadas por el listado, por rango y folio por folio cuando// parte del rango ya se anuló o se recibió, deteniendo una pasada tras dos negativas reales// seguidas. Un folio solo conserva la respuesta del SII. Cuando el SII ya respondió por algunos// folios, un `DteError` que termina el recorrido (una sesión vencida, un bloqueo, la cancelación de// quien llama, un listado posterior rechazado o ilegible) vuelve en `failure`, con lo hecho hasta// entonces; un rango que nunca llegó (`transport`) no es respuesta, y antes de cualquier respuesta// el error se lanza. Un rango respondido folio por folio vuelve en tan pocas piezas como lo// permitan sus respuestas, y un recorrido cortado en un folio conserva los folios respondidos antes.function annulFolios( portal: PortalClient, input: AnnulFoliosInput, overrides?: CallOverrides,): Promise<AnnulmentResult>
Tipo
Descripción
AnnulFoliosInput
Entrada de annulFolios. Se exige range, withinDays o all: la anulación no se puede deshacer y los folios anulados pesan contra el cupo de timbraje durante seis meses.
AnnulmentResult
Lo que hizo una anulación, aunque un paso posterior la haya cortado.
FolioRanges
Los rangos sin usar de un tipo de documento.
FolioSpan
Algunos folios y cuántos son.
AnnulmentRejectionReason
Por qué no se anularon unos folios. alreadyAnnulled y received son lo que el SII dijo de ellos y son definitivos; siiError, transport y unknown (una respuesta sin palabras conocidas) no lo son, porque el SII pudo haberlos anulado igual. Definido como 'alreadyAnnulled' | 'received' | 'siiError' | 'transport' | 'unknown'.
UnusedFolioRange
Un rango timbrado con folios sin usar, tal como lo lista la página de anulación. Los rangos anulados siguen en esta lista para siempre.
Campos de AnnulFoliosInput
Campo
Tipo
Descripción
type
DocumentType
COD_DOCTO — Tipo de documento.
range?
{ readonly from: number; readonly to: number }
FOLIO_INI_A, FOLIO_FIN_A — Solo estos folios.
withinDays?
number
Solo rangos timbrados en estos días; un rango sin fecha legible se omite.
all?
boolean
Todos los rangos sin usar, hasta maxRanges.
reason?
string
MOTIVO — Motivo; "Folios no utilizados" por defecto.
maxRanges?
number
Máximo de rangos que se intentan en CADA pasada, tomados del final del listado; 50 por defecto.
exclude?
readonly { readonly from: number; readonly to: number }[]
Folios que no se tocan, como un CAF todavía en uso.
knownAnnulled?
readonly string[]
knownAnnulled de la corrida anterior: un rango listado cuyos folios cubren estas claves, en una o en varias, no se vuelve a intentar.
companyRut?
string
RUT_EMP + DV_EMP — RUT de la empresa; por defecto el del cliente.
Campos de AnnulmentResult
Campo
Tipo
Descripción
annulled
readonly FolioSpan[]
Folios anulados. Los folios contiguos con la misma respuesta son un solo tramo.
Folios no anulados y por qué, los folios contiguos con la misma respuesta en un solo tramo. alreadyAnnulled y received son resultados esperados, no negativas; unknown es una respuesta del SII sin palabras conocidas, así que esos folios pueden estar anulados o no.
totalAnnulled
number
Suma de annulled.
totalRejected
number
Suma de rejected.
knownAnnulled
readonly string[]
Claves desde-hasta definitivas (anuladas, alreadyAnnulled o received): guárdalas y devuélvelas, porque el portal las sigue listando para siempre. Un rango respondido folio por folio queda en tan pocas claves como lo permitan sus respuestas, una por cada tramo de folios con la misma respuesta, así que lee las claves como tramos de folios, no como los rangos del listado. Nada que el SII haya respondido con palabras desconocidas va aquí.
failure
FolioFlowFailure | null
Lo que detuvo el recorrido cuando el SII ya había respondido por algunos folios, o null: un DteError de un listado posterior (listFolioRanges) o de un rango posterior (annulFolios), un rechazo incluido. Anular no se puede deshacer, así que vuelve lo hecho hasta entonces: guarda knownAnnulled venga o no failure. Null en un recorrido que termina.
Vuelve a descargar el CAF de un rango que el SII ya autorizó. No gasta cupo. Guía: Portal.
TypeScript
// Lista los rangos autorizados que el SII deja volver a descargar. Los rangos anulados aparecen// sin marcar, así que saber cuáles lo son cuesta una petición por rango. Al trámite se entra como a// los demás, con login a pedido y la pantalla de representación. Solo un listado da una lista, vacía// si no tiene rangos: una página que declara un rechazo lanza `SII_PORTAL_REJECTED`, una de ingreso// `SII_PORTAL_SESSION_EXPIRED` y cualquier otra `SII_PORTAL_UNEXPECTED_PAGE`.function listReobtainableRanges( portal: PortalClient, input: { readonly type: DocumentType; readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<readonly ReobtainableRange[]>// Descarga el CAF de un rango ya autorizado. No gasta cupo. Primero se entra al trámite, como entra// `listReobtainableRanges`, con login a pedido, así que una sesión en caché que venció después del// listado inicia sesión de nuevo en vez de enviar el rango con ella. Una página que declara un// rechazo en la entrada lanza `SII_PORTAL_REJECTED` y cualquier otra que no es el trámite// `SII_PORTAL_UNEXPECTED_PAGE`, antes de enviar nada; una página de ingreso en cualquier paso lanza// `SII_PORTAL_SESSION_EXPIRED`, nunca el rechazo de un paso.function reobtainCaf( portal: PortalClient, input: { readonly type: DocumentType; readonly range: ReobtainableRange; }, overrides?: CallOverrides,): Promise<ObtainedCaf>
Tipo
Descripción
ReobtainableRange
Un rango autorizado que el SII deja volver a descargar. La lista también trae rangos ya emitidos, que el SII no marca de ninguna forma: reutilizar uno hace que cada documento se rechace con DTE-3-101.
Entrar al trámite le suma a reobtainCaf un GET, de rf_reobtencion1_folios, respecto de antes de la 0.7.0. Quien tomaba reobtainDownloadMissing o reobtainCafMissing por una sesión vencida ahora recibe SII_PORTAL_SESSION_EXPIRED.
Flujos compuestos construidos sobre las operaciones anteriores. Devuelven los rechazos como datos y, cuando ya tienen algo que quien llama no puede perder (CAF, o folios que el SII anuló), también cualquier otro DteError, en failure. El error original va antes al logger del cliente, como la advertencia sii portal flow stopped, keeping what it holds, con los detalles del error, flow, code y stoppedAt, y cada detalle de texto tachado. La advertencia deja fuera lo que dijo una página (portalMessage, body) y la url de donde vino, que pueden nombrar a la empresa y su RUT; los errores lanzados los conservan. Guía: Portal.
TypeScript
// Solicita un CAF que cubra toda la cantidad; bajo ella no se timbra nada. Con `allowAnnul`, una// vez que el SII respondió la anulación, un `DteError` que la corta, o uno de la solicitud que se// repite después, termina el flujo con `rejection: null`, el cupo de la primera solicitud, la falla// en `failure` y lo anulado en `knownAnnulled`; tras una anulación cortada no se vuelve a pedir.// Antes de la primera respuesta de la anulación, lanza.function requestCafExact( portal: PortalClient, input: RequestCafExactInput, overrides?: CallOverrides,): Promise<RequestCafExactResult>// Cubre una cantidad con varios CAF, para cuando `FOLIOS_DISP` es 0 y `MAX_AUTOR` es chico: el SII// raciona por historial, no hay nada que anular ni reobtener, y esperar no lo mueve. Un rechazo// vuelve con su propio tipo y `portalMessage`, en el primer viaje o en uno posterior; después de una// entrega, solo un folio por sobre el máximo (`quotaExceeded`) se lee como `quotaCapReached`. Con un// CAF ya en la mano, un viaje posterior que falla con un `DteError`// que no es un rechazo (una falla de transporte, un tiempo agotado, una sesión vencida, un bloqueo,// `CAF_INVALID`, la cancelación de quien llama) termina el flujo con los CAF obtenidos, el último// cupo visto y la falla en `failure`; sin un CAF en la mano, lanza. `quantity` debe ser un entero// de al menos 1, o lanza `INVALID_OPTION` antes de que salga nada.function requestCafInBatches( portal: PortalClient, input: RequestCafInBatchesInput, overrides?: CallOverrides,): Promise<FolioFlowResult>// Cubre una cantidad con rangos autorizados sin gastar cupo, partiendo por el folio más antiguo.// Es lo que levanta un bloqueo de timbraje, porque el SII pide emitir folios. El listado inicia// sesión a pedido, y cualquier fallo al listar (un rechazo, una sesión vencida, una página que no es// el listado) se lee como sin rangos, con el fallo en `reason`: no lanza. Una descarga rechazada se// registra y se sigue. Con un CAF ya en la mano, una descarga que falla con cualquier otro// `DteError` (una falla de transporte, un tiempo agotado, una sesión vencida, un bloqueo, la// cancelación de quien llama) termina el recorrido con los CAF descargados, el mensaje de la falla// en `reason` y la falla en `failure`; sin un CAF en la mano, lanza. Una página de ingreso en// respuesta al rango o al archivo es una sesión vencida, no una descarga rechazada.function reobtainFolios( portal: PortalClient, input: ReobtainFoliosInput, overrides?: CallOverrides,): Promise<ReobtainResult>
Tipo
Descripción
FolioFlowFailure
El DteError que detuvo un flujo de folios que ya tenía algo que quien llama no puede perder: CAF, o folios que el SII anuló. Solo se guarda su código, con el tipo de un rechazo, porque sus otros detalles pueden traer lo que dijo una página; el logger recibe el resto, nunca lo que dijo una página ni su dirección.
FolioFlowResult
El resultado de un flujo compuesto. Los rechazos vuelven como datos, porque el flujo puede tener ya CAF en la mano: esos deben llegar a quien llama, y un CAF no puede viajar en los detalles de un error, que se registran. Por lo mismo, con un CAF ya en la mano, o folios ya anulados, cualquier otro DteError también vuelve como dato, en failure.
ReobtainFoliosInput
Entrada de reobtainFolios.
ReobtainResult
Lo que obtuvo reobtainFolios. Lo descargado vuelve aunque no alcance o falle una descarga posterior, así quien llama pide solo la diferencia.
RequestCafExactInput
Entrada de requestCafExact.
RequestCafExactResult
El resultado de requestCafExact, más la memoria de rangos anulados. Su failure se llena cuando el SII ya respondió su anulación y falla un paso posterior, y knownAnnulled guarda entonces lo anulado.
El paso que falló. Leer el cupo o listar rangos no cambia nada; una solicitud pudo otorgarse igual, y listReobtainableRanges dice si se otorgó; una anulación pudo pasar, y la siguiente lo sabe por el SII como "ya anulado".
rejection?
PortalRejection
El tipo de rechazo cuando code es SII_PORTAL_REJECTED, como un listado que el SII rechaza después de una anulación; ausente si no.
Campos de FolioFlowResult
Campo
Tipo
Descripción
complete
boolean
Se cubrió la cantidad pedida.
cafs
readonly ObtainedCaf[]
Todos los CAF obtenidos, aunque no alcancen.
granted
number
Folios cubiertos.
maxAuthorized
number | null
MAX_AUTOR — Último máximo visto, o null.
availableFolios
number | null
FOLIOS_DISP — Último valor visto, o null.
rejection
PortalRejection | null
Por qué no alcanzó, o null.
portalMessage
string | null
Lo que dijo el portal, con sus secretos tachados, o null.
failure
FolioFlowFailure | null
Lo que detuvo el flujo mientras tenía algo que quien llama no puede perder, o null; rejection es entonces null. requestCafInBatches lo llena con CAF en la mano, cuando no fue un rechazo; requestCafExact una vez que el SII respondió su anulación, con lo que cortó la anulación o la solicitud que sigue, y knownAnnulled guarda lo anulado.
Campos de ReobtainFoliosInput
Campo
Tipo
Descripción
type
DocumentType
COD_DOCTO — Tipo de documento.
quantity
number
Folios por cubrir.
isIssued?
(range: { readonly from: number; readonly to: number }) => boolean | Promise<boolean>
El registro de quien llama de los rangos ya enviados al SII, que el portal no marca.
isFolioFree?
(folio: number) => boolean | Promise<boolean>
Confirma un folio en el SII, normalmente con folioReceived.
maxChecksPerRange?
number
Máximo de consultas por rango; 30 por defecto.
companyRut?
string
RUT_EMP + DV_EMP — RUT de la empresa; por defecto el del cliente.
El registro corre sobre la sesión del portal. Las lecturas entregan campos tipados (null cuando faltan) y una copia raw de la fila. Las escrituras (changePurchaseType, moveVatToCommonUse, moveVatToRecoverable) cambian el registro real en un cliente de producción. Lo que el registro hace con cada código de documento son datos del paquete: revisa Códigos de documento y estados del registro. Guía: Registro.
TypeScript
// Cambia el tipo de compra de un documento. En producción esto cambia el registro real.function changePurchaseType( portal: PortalClient, input: ChangePurchaseTypeInput, overrides?: CallOverrides,): Promise<void>// Una compra tal como la tiene el registro, incluido su tipo de compra vigente.function fetchPurchaseDocument( portal: PortalClient, key: PurchaseDocumentKey, overrides?: CallOverrides,): Promise<PurchaseDocument | null>// Los totales oficiales de un período por tipo de documento y estado contable, incluido lo que el// SII agrega, como las boletas. No se miran los códigos de respuesta, así que un mes que el SII se// niega a mostrar se lee como uno vacío.function fetchRegisterSummary( portal: PortalClient, input: RegisterSummaryInput, overrides?: CallOverrides,): Promise<RegisterSummary>// Todos los documentos de un período, sin XML: el resumen por tipo y luego una llamada de detalle// por fila, al mismo tiempo. Este no es el registro oficial. No se miran los códigos de respuesta,// así que un mes que el SII se niega a mostrar se lee como uno vacío.function listPeriodDocuments( portal: PortalClient, input: ListPeriodDocumentsInput, overrides?: CallOverrides,): Promise<PeriodDocuments>// Los tipos de compra que el SII permite darle a un documento.function listPurchaseTypes( portal: PortalClient, overrides?: CallOverrides,): Promise<readonly PurchaseType[]>// Mueve el IVA de un documento de recuperable a uso común. En producción esto cambia el registro// real.function moveVatToCommonUse( portal: PortalClient, input: MoveVatInput, overrides?: CallOverrides,): Promise<void>// Mueve el IVA de un documento de uso común de vuelta a recuperable: lo inverso de// `moveVatToCommonUse`, con las mismas reglas. Al devolver todo, `commonUseVat` queda en 0 y// `recoverableVat` lleva el total.function moveVatToRecoverable( portal: PortalClient, input: MoveVatInput, overrides?: CallOverrides,): Promise<void>
Tipo
Descripción
ChangePurchaseTypeInput
Lo que necesita changePurchaseType.
ListPeriodDocumentsInput
Lo que necesita listPeriodDocuments.
MoveVatInput
Lo que necesitan las funciones que mueven IVA: el monto final de cada casilla tras el cambio, no una diferencia. Un monto ausente va vacío.
PurchaseDocumentKey
Qué compra del registro.
RegisterSummaryInput
Lo que necesita fetchRegisterSummary.
PeriodDocument
Un documento de un período: sin hora ni XML. Los nombres de campo no están medidos, como en PeriodSummaryRow.
PeriodDocuments
Los documentos de un período.
PeriodSummaryRow
Una fila del resumen de un período, por tipo de documento y sección.
PurchaseDocument
Una compra tal como la tiene el registro. Los nombres de campo no están medidos, como en PeriodSummaryRow.
PurchaseType
Un tipo de compra que el SII permite darle a un documento. Medido.
RcvObject
Un objeto de una respuesta del RCV, tal como lo envió el SII. Definido como Readonly<Record<string, unknown>>.
RegisterHeader
La cabecera del registro oficial. Los nombres de campo no están medidos, como en PeriodSummaryRow. proportionalityFactor es un número de 0 a 1, que también se lee de un texto con espacios y coma decimal (" 1,0000"); un valor fuera de ese rango es null y queda en raw.
RegisterSummary
El registro oficial de un período.
RegisterSummaryRow
Una fila del registro oficial. Los nombres de campo no están medidos, como en PeriodSummaryRow.
Campos de ChangePurchaseTypeInput
Campo
Tipo
Descripción
type
number
tipoDocumento — Tipo de documento.
folio
number
numeroDocumento — Folio.
period
string
periodoTributario — Período tributario, AAAA-MM.
counterpartyRut
string
rutContraparte + dvContraparte — RUT del emisor.
companyRut?
string
rut + dv — Empresa, si no es la del cliente.
purchaseType
string
tipoCompra — Un id de listPurchaseTypes.
Campos de ListPeriodDocumentsInput
Campo
Tipo
Descripción
period
string
periodo — Período, AAAA-MM.
direction?
DocumentDirection
operacion — Documentos emitidos o recibidos; por defecto emitidos.
companyRut?
string
rutContribuyente + dvContribuyente — Empresa, si no es la del cliente.
Campos de MoveVatInput
Campo
Tipo
Descripción
type
number
tipoDocumento — Tipo de documento.
folio
number
numeroDocumento — Folio.
period
string
periodoTributario — Período tributario, AAAA-MM.
counterpartyRut
string
rutContraparte + dvContraparte — RUT del emisor.
companyRut?
string
rut + dv — Empresa, si no es la del cliente.
commonUseVat?
number
ivaComun — IVA de uso común final.
recoverableVat?
number
ivaRec — IVA recuperable final.
Campos de RegisterSummaryInput
Campo
Tipo
Descripción
period
string
ptributario — Período, AAAA-MM.
operation
RegisterOperation
operacion — Compras o ventas.
accountingStatus?
AccountingStatus
estadoContab — Estado contable; por defecto registrado.
companyRut?
string
rutEmisor + dvEmisor — Empresa, si no es la del cliente.
Lo que el registro hace con cada código de documento, y qué estados contables puede tener cada lado. Son datos del paquete, agregados en la 0.2.0: nada de esto llama al SII. Úsalos al leer los totales de fetchRegisterSummary: qué códigos restan, cuáles nunca llegan al registro, cuáles lista el registro documento por documento y en cuáles el comprador retiene el IVA. Guía: Registro.
TypeScript
import { REGISTER_ACCOUNTING_STATUSES, REGISTER_DOCUMENT_CODES, registerDocumentCode } from 'dte-sdk/portal'registerDocumentCode(61)?.sign // -1: una nota de crédito resta de los totalesregisterDocumentCode(52)?.inRegister // false: las guías de despacho nunca llegan al registroregisterDocumentCode(71) // undefined: no es uno de los 49 códigosREGISTER_DOCUMENT_CODES.length // 49REGISTER_ACCOUNTING_STATUSES.sale // ['registered']
TypeScript
// Los 49 códigos de documento del registro de compras y ventas, ordenados por código.const REGISTER_DOCUMENT_CODES: readonly RegisterDocumentCode[]// Lo que el registro hace con un código de documento, o `undefined` si el código no es uno de los 49.function registerDocumentCode(code: number): RegisterDocumentCode | undefined// Los estados contables que puede tener cada lado del registro: los cuatro en compras, solo// `registered` en ventas, porque ninguna fuente del SII describe otros estados de una venta.const REGISTER_ACCOUNTING_STATUSES: Readonly<Record<RegisterOperation, readonly AccountingStatus[]>>
Tipo
Descripción
RegisterDocumentCode
Un código de documento del registro, con lo que el registro hace con él.
Campos de RegisterDocumentCode
Campo
Tipo
Descripción
code
number
TpoDoc — Código de documento del SII, el número del tipo de documento tributario.
name
string
Nombre oficial del documento, como lo escriben las tablas de códigos del SII.
operations
readonly RegisterOperation[]
Lados del registro donde aparece el código, compras antes que ventas; vacío si el código no está en el registro.
electronic
boolean
Se emite como DTE, en el formato XML del SII. Los códigos 47 y 48 no son DTE.
inRegister
boolean
Falso cuando el código nunca llega al registro: las guías de despacho 50 y 52. Inferido.
sign
1 | -1
-1 cuando el código resta de los totales del registro (notas de crédito y disminuciones), 1 si suma. Inferido del F29. Los montos de los códigos 40, 43 y 103 pueden venir negativos y traen su propio signo.
perDocument
boolean
Columna "solo en resumen" — Falso cuando el registro muestra solo una línea de resumen mensual del código, sin detalle por documento.
buyerWithholdsVat
boolean
El comprador retiene el IVA (cambio de sujeto). Las notas de débito y crédito de una factura de compra pueden llevar la retención por documento y no por código, así que este indicador no las cubre.
Los códigos, según lo que el catálogo dice de ellos
El comprador retiene el IVA (buyerWithholdsVat: true)
29, 45, 46
DTE (electronic: true)
33, 34, 39, 41, 43, 46, 52, 56, 61, 110, 111, 112
El catálogo sigue las fuentes públicas del SII: el formato "Información Electrónica de Compras y Ventas" v3.0 (las tablas de códigos de cada lado y su columna "solo en resumen"), los formatos de carga del registro para compras, ventas y resumen de ventas, sus preguntas frecuentes, la Resolución Exenta SII N° 12 de 2011 (el comprador de una factura de inicio retiene todo el IVA) y las instrucciones del F29 (las notas de crédito restan). Lo que el SII no dice, el catálogo lo infiere, y su JSDoc lo indica: las guías de despacho 50 y 52 no figuran en ninguna tabla de códigos del registro, por eso quedan fuera de él; el signo de cada código es el del F29 y no uno que el registro declare; el código 906 es solo resumen; y los códigos 500 y 501 vienen del formato antiguo de libros. Todavía no se ha contrastado con un registro real con documentos.
Los cuatro estados contables: registered (REGISTRO) es un documento en el registro; pending (PENDIENTE), una compra a la que aún le falta el acuse de recibo del comprador; claimed (RECLAMADO), una compra reclamada dentro de 8 días, que no puede cambiar de estado; notIncluded (NO_INCLUIR), una compra que el contribuyente decidió dejar fuera.
Descarga el XML de los documentos emitidos o recibidos de un rango de fechas desde el respaldo MIPYME. Guía: Registro.
TypeScript
// Descarga desde el respaldo MIPYME el XML de los documentos emitidos o recibidos de un rango de// fechas, partiendo el rango hasta que cada tramo quepa en los 20 documentos por descarga que// permite el SII.function downloadMipymeBackup( portal: PortalClient, input: MipymeBackupInput, overrides?: CallOverrides,): Promise<MipymeBackup>
Tipo
Descripción
MipymeBackup
Lo que descargó un respaldo.
MipymeBackupChunk
Un tramo de un respaldo.
MipymeBackupInput
Lo que necesita downloadMipymeBackup.
MipymeDownloadedChunk
Un tramo descargado, tal como lo recibe onChunk.
Campos de MipymeBackupInput
Campo
Tipo
Descripción
from
string
FEC_DESDE — Primer día, AAAA-MM-DD.
to
string
FEC_HASTA — Último día, AAAA-MM-DD.
direction?
DocumentDirection
ORIGEN — Documentos emitidos o recibidos; por defecto emitidos.
type?
number
TPO_DOC — Solo este tipo de documento; por defecto todos.
attempts?
number
Intentos por listado y por descarga; por defecto 3.
Para emitir documentos electrónicos con IVA, el SII pide algo más que ser contribuyente de IVA: la empresa necesita una verificación positiva de sus actividades en terreno, o una en proceso (los requisitos del SII). Sin ella, una solicitud de CAF para un tipo que la necesita se rechaza con activityVerificationPending. unstable_fetchActivityVerification lee esa verificación desde la "Consulta estado de verificación y acreditación" del SII, y listAccreditationDocuments, desde la misma app, el catálogo de los documentos que acreditan una actividad. Ambas corren en la misma sesión que el resto del portal y llegaron en la 0.3.0. Ambas leen producción sea cual sea el ambiente del cliente, porque la app existe solo ahí. Guía: Portal.
⚠️
unstable_ significa que su forma puede cambiar en cualquier versión, incluso un patch.unstable_fetchActivityVerification se ha leído contra el SII real el 8 de noviembre de 2026, para una empresa con la verificación pendiente, y el 9 de noviembre, para una verificación condicionada, pendiente de acreditación. Aún no se conocen los códigos del SII para una verificación aprobada, así que nada en el resultado dice por sí solo si la empresa puede emitir documentos con IVA. Cuando se lea una aprobada, la función pasa a llamarse fetchActivityVerification. Hasta entonces, fija la versión y lee el changelog antes de cada actualización, también de los patch. listAccreditationDocuments no está marcada como inestable.
TypeScript
import { listAccreditationDocuments, unstable_fetchActivityVerification } from 'dte-sdk/portal'const { requests, messages } = await unstable_fetchActivityVerification(portal)requests.length // 0 si la empresa nunca pidió la verificaciónrequests[0]?.status // 'PAC', descrito como 'PENDIENTE DE ACREDITACIÓN'requests[0]?.preliminaryResult // 'CONDICIONADA'requests[0]?.finalResult // null mientras no lo hayrequests[0]?.requestedOn // 'AAAA-MM-DD'messages.filter((message) => message.blocking) // los mensajes en que se detiene la página del propio SIIconst documents = await listAccreditationDocuments(portal)documents[0] // { category: 'general', code: 1, description: '…' }
TypeScript
// Inestable: su forma puede cambiar en cualquier versión, incluso un patch. La verificación de// actividades de la empresa, la "Consulta estado de verificación y acreditación" del SII. Envía el// RUT de la empresa, no el de la sesión, y una solicitud de otro RUT lanza en vez de pasar como de// la empresa. Lee producción sea cual sea el ambiente del cliente. Los funcionarios, los// comentarios y el domicilio nunca salen.function unstable_fetchActivityVerification( portal: PortalClient, input?: ActivityVerificationInput, overrides?: CallOverrides,): Promise<ActivityVerification>// Los tipos de documento que el SII acepta para acreditar una actividad, en el orden del SII: una// lista general y una específica, cuyos códigos se repiten. Lee producción sea cual sea el ambiente// del cliente.function listAccreditationDocuments( portal: PortalClient, overrides?: CallOverrides,): Promise<readonly AccreditationDocument[]>
Tipo
Descripción
ActivityVerificationInput
Lo que necesita unstable_fetchActivityVerification.
ActivityVerification
La verificación de actividades de una empresa. Los funcionarios, los comentarios, el domicilio y lo interno del trámite quedan fuera a propósito, y no hay raw. Inestable.
ActivityVerificationRequest
Una solicitud de verificación de las actividades de la empresa. Inestable.
ActivityVerificationMessage
Un mensaje que el SII agrega a la verificación.
AccreditationDocument
Un tipo de documento que el SII acepta para acreditar una actividad. El código se repite entre categorías: la clave es el par.
AccreditationDocumentCategory
A qué lista pertenece un documento que acredita una actividad: GRAL general, ESPEC específico. Definido como 'general' | 'specific'.
Campos de ActivityVerificationInput
Campo
Tipo
Descripción
companyRut?
string
contribuyenteBO.rut + contribuyenteBO.dv — Empresa, si no es la del cliente.
Campos de ActivityVerification
Campo
Tipo
Descripción
requests
readonly ActivityVerificationRequest[]
converiBO — Las solicitudes; vacía si la empresa nunca pidió la verificación.
messages
readonly ActivityVerificationMessage[]
arrMensajeBO — Los mensajes del SII.
Campos de ActivityVerificationRequest
Campo
Tipo
Descripción
number
number | null
verNumVerificacion — Número de la verificación.
kind
string | null
tipo — Tipo de verificación, como VIA.
reason
string | null
motivo — Motivo, como lo escribe el SII.
preliminaryResult
string | null
resultadoVia — Resultado preliminar, como CONDICIONADA.
finalResult
string | null
resultadoFinal — Resultado final; null mientras no lo hay.
status
string | null
verEstadoVerificacion — Código del estado, como PAC.
statusDescription
string | null
descEstadoVerificacion — Qué significa el estado, como PENDIENTE DE ACREDITACIÓN.
requestedOn
string | null
fechaSolicitud — Fecha de la solicitud, AAAA-MM-DD.
accreditationDeadline
string | null
fechaLimiteAcreditacion — Último día para acreditar la actividad, AAAA-MM-DD; null si no hay.
procedureStatus
string | null
descEstadoTramite — Estado del trámite de acreditación, como lo escribe el SII.
hasCertificate
boolean
idCertificado — True cuando el SII emitió el certificado de la verificación.
Campos de ActivityVerificationMessage
Campo
Tipo
Descripción
text
string
mensaje — El mensaje.
blocking
boolean
puedeContinuar en false — True cuando la página del propio SII se detiene en él.
Campos de AccreditationDocument
Campo
Tipo
Descripción
category
AccreditationDocumentCategory | null
docaCategoria — La categoría; null si dte-sdk no la conoce.
code
number | null
docaCodigo — Código dentro de la categoría.
description
string | null
docaDescripcion — Nombre del documento.
Lo que lanzan:
Un código de error del SII en la respuesta lanza SII_PORTAL_REJECTED con rejection: 'activityVerificationRefused', y las palabras del SII en details.portalMessage cuando dijo algo.
Una solicitud cuyo RUT no es el de la empresa lanza SII_PORTAL_UNEXPECTED_PAGE con step: 'otherTaxpayer', y no se devuelve nada de ella. La página del propio SII muestra la verificación de quien inició sesión; esta función envía el RUT de la empresa, y el SII respondió a una sesión del representante legal de la empresa.
Una respuesta sin la verificación o sin el catálogo lanza SII_PORTAL_UNEXPECTED_PAGE. Sin empresa en la llamada ni en el cliente, unstable_fetchActivityVerification lanza MISSING_FIELD, y con una inválida, INVALID_RUT. Los códigos de sesión y de transporte son los del resto del portal.
Como las lecturas del registro, cada llamada a la app del SII es una sola petición salvo que actives retry, mientras el ingreso y la visita a la app mantienen sus reintentos. Una lectura que encuentra una sesión vencida o una página ilegible parte de nuevo una vez con una sesión nueva.
Control local de folios: cuáles se reservaron, se enviaron y se anularon. createFolioRegistry trabaja sobre un almacén que tú entregas; createMemoryFolioRegistry lo guarda en memoria y createDirectoryFolioRegistry (de dte-sdk/node) lo guarda en un archivo JSON. Guía: Portal.
TypeScript
// Primeros 12 caracteres hexadecimales del SHA-256 de un archivo CAF, para distinguir dos archivos// de un mismo rango.function cafFingerprint(xml: string): string// Un registro sobre un almacén. Las llamadas corren una tras otra dentro de este proceso, cada una// leyendo el libro de nuevo; varios procesos necesitan un almacén o un registro propio que se haga// cargo.function createFolioRegistry(store: FolioLedgerStore, now?: () => Date): FolioRegistry// Un registro que vive en memoria: para tests y corridas cortas.function createMemoryFolioRegistry(now?: () => Date): FolioRegistry
Tipo
Descripción
FolioLedgerStore
Dónde se guarda un libro.
FolioRegistry
Control local de folios: cuáles se reservaron, enviaron y anularon. Un servicio con su propia base implementa estas funciones con sus propias transacciones; el resto arma una con createFolioRegistry.
FolioEntry
Una entrada del libro.
FolioLedger
Todo el registro como un solo valor apto para JSON.
FolioScope
Los folios de un CAF para una empresa en un ambiente.
Uno por entrada del registro, es decir por archivo CAF: su rango, el environment de su alcance y la cafFingerprint del archivo que cuenta (null si su alcance no la tiene), y sus folios usados, enviados y aún sin usar. Dos archivos de un mismo rango, o un rango en ambos ambientes, son dos entradas, que se distinguen por estos dos campos. Un FolioRegistry propio devuelve ambos en cada rango.
Campos de ReserveOptions
Campo
Tipo
Descripción
lowestFree?
boolean
Entrega el menor folio del rango que no está usado ni anulado, estén donde estén los usados: un folio devuelto, o que quedó libre bajo un folio marcado como enviado, vuelve a salir.
Todo lo que no necesita el portal: leer el texto del set de pruebas del SII, planificar lo que emite cada set, asignar folios, emitir los documentos y armar los libros. Nada de esto envía; lo hace el runner. Guía: Sets de pruebas.
// Tipos de set que puede traer el texto del set de pruebas del SII, por su nombre en inglés.const TEST_SET_KINDS: { readonly basic: "basic" readonly exempt: "exempt" readonly guide: "guide" readonly purchase: "purchase" readonly export: "export" readonly settlement: "settlement" readonly salesBook: "salesBook" readonly purchaseBook: "purchaseBook" readonly exemptPurchaseBook: "exemptPurchaseBook" readonly guideBook: "guideBook" readonly other: "other"}// Nombres de los sets y libros tal como los lista el portal de certificación (`pe_avance2`).const TEST_SET_PORTAL_NAMES: Readonly<Partial<Record<TestSetKind, string>>>// `TpoDocRef` — El tipo de documento de referencia que lleva cada documento del set en su primera// referencia: `SET`.const TEST_SET_REFERENCE_TYPE = 'SET'// La contraparte de cada línea de los libros de compras de certificación: el RUT del propio SII y// un nombre de relleno. El SII lo acepta, existe como contribuyente y no es dato personal de// nadie.const CERTIFICATION_COUNTERPARTY: { readonly rut: "60803000-K"; readonly name: "Razon Social" }
// Parsea el texto del set de pruebas del SII: sets, sus casos con ítems y referencias, los// documentos de proveedor de los sets de libro de compras y el factor de proporcionalidad.function parseTestSetText(text: string): readonly TestSet[]
Tipo
Descripción
TestSet
Un set del texto del set de pruebas.
TestCase
Un caso de un set: un documento a emitir.
TestCaseItem
Una fila de ítem de un caso.
TestBookDocument
Un documento de proveedor de un set de libro de compras.
// Los casos que emite cada set, con los folios que necesita cada tipo de documento, a partir de// los sets parseados. Por cada tipo gana el último set del texto.function planCertificationSets(sets: readonly TestSet[]): CertificationPlan
Tipo
Descripción
CertificationPlan
Lo que la certificación emite, por tipo de set; un tipo que el texto no trae está ausente. Los libros de ventas y de guías no tienen plan: salen de los sets básico y de guías emitidos.
BasicSetPlan
El set básico: facturas 33, notas de crédito 61, notas de débito 56.
ExemptSetPlan
El set exento: facturas 34, notas de crédito 61, notas de débito 56; toda línea exenta.
GuideSetPlan
El set de guías: una 52 por caso.
PurchaseSetPlan
El set de factura de compra: una 46, a lo más una 61 y una 56.
PurchaseBookPlan
Un set de libro de compras: los documentos de proveedor y el factor de proporcionalidad (0,6 si el set no lo trae).
PlannedInvoice
Un caso de factura (33, 34 o 46).
PlannedNote
Un caso de nota de crédito o débito.
PlannedGuide
Un caso de guía de despacho.
PlannedItem
Un ítem de un caso, listo para ser una línea de documento.
SetFolios
Folios que necesita cada tipo de documento. Definido como Readonly<Record<number, number>>.
// Una fuente de folios sobre uno o varios CAF: un contador por CAF, gana el primer CAF del tipo// con folio libre, un folio nunca se entrega dos veces, y el CAF devuelto es el que contiene el// folio en su rango, así timbra con su propia llave.function createFolioAllocator(cafs: readonly Caf[], options?: FolioAllocatorOptions): FolioSource
Tipo
Descripción
FolioSource
De dónde sale el siguiente folio de un tipo, con el CAF que lo timbra. El asignador en memoria de abajo es una implementación; el runner puede implementarlo con el registro de folios.
FolioAllocatorOptions
Opciones de createFolioAllocator.
Campos de FolioAllocatorOptions
Campo
Tipo
Descripción
usedFolios?
readonly { readonly type: number; readonly folio: number }[]
Folios ya usados; el asignador parte después del mayor usado de cada CAF.
// Emite cada documento del plan de un set y firma su sobre.function issueTestSet(plan: IssuableSetPlan, options: IssueSetOptions): Promise<IssuedSet>// `SetDTE/@ID` de cada sobre de certificación.const TEST_SET_ENVELOPE_ID = 'DTE_SetDoc'
Tipo
Descripción
IssueSetOptions
Lo que necesita emitir un set.
IssuableSetPlan
Los planes que acepta issueTestSet. Definido como BasicSetPlan | ExemptSetPlan | GuideSetPlan | PurchaseSetPlan.
IssuedCase
Un documento emitido de un set.
IssuedSet
Un set emitido: sus documentos en orden de emisión y el sobre firmado que los lleva.
Campos de IssueSetOptions
Campo
Tipo
Descripción
issuer
IssuerInput
El emisor, como en un documento.
receiver
ReceiverInput
El cliente que nombra cada documento; las facturas de compra y los traslados internos nombran al emisor.
// Reemite cada caso de los cuatro planes con folios nuevos, en el orden básico, exento, guías y// compra, y firma un solo sobre con todos.function issueSimulation( plan: CertificationPlan, options: IssueSetOptions,): Promise<IssuedSimulation>
Tipo
Descripción
IssuedSimulation
La simulación: cada caso de los cuatro sets reemitido, en un sobre.
// El libro de ventas de la certificación: solo las facturas y notas del set básico, con fecha 15// del período, el cliente como contraparte, todo monto presente (0 si falta) y la tasa de IVA en// cada línea.function createCertificationSalesBook( set: IssuedSet | SalesBookSource, input: CertificationSalesBookInput,): SignedPurchaseSalesBook// Un libro de compras de la certificación desde un set de libro de compras: una línea por// documento de proveedor con la contraparte de relleno del SII, el IVA al 19 % del afecto, IVA de// uso común, IVA no recuperable en entregas gratuitas, la retención de una factura de compra, el// folio referido de una nota tomado de su observación y, en el libro para exentos, IVA no// recuperable en toda línea afecta, la factura exenta en papel como tipo 32 y notas que heredan// los montos del documento que refieren.function createCertificationPurchaseBook( plan: PurchaseBookPlan, input: CertificationBookInput,): SignedPurchaseSalesBook// El libro de guías de la certificación: solo las guías del set de guías, con su tipo de traslado// y fecha de emisión; por posición la segunda lleva `Operacion` 1 y la tercera va anulada// (`Anulado` 2, total 0 y nada más), salvo que `caseFlags` diga otra cosa; una venta lleva el// cliente, el neto, la tasa y el IVA; toda guía su total.function createCertificationGuideBook( set: IssuedSet | GuideBookSource, input: CertificationGuideBookInput,): SignedGuideBook
Tipo
Descripción
CertificationBookInput
Lo que necesita cada libro de certificación.
CertificationSalesBookInput
Opciones de createCertificationSalesBook.
CertificationGuideBookInput
Opciones de createCertificationGuideBook.
BookReceiver
El cliente escrito en los libros de ventas y de guías.
GuideBookCaseFlag
Cómo entra una guía al libro de guías. Definido como 'normal' | 'modified' | 'voided'.
BookCaseTotals
Los totales de un documento emitido, como los leen los libros.
SalesBookCase
Un documento del libro de ventas: el caso del set emitido, o lo que una corrida guardó de él.
GuideBookCase
Una guía del libro de guías: el caso del set emitido, o lo que una corrida guardó de él.
SalesBookSource
Una fuente de libro de ventas que no es el set emitido: su tipo y sus casos, como los tiene una corrida retomada.
GuideBookSource
Una fuente de libro de guías que no es el set emitido.
Campos de CertificationBookInput
Campo
Tipo
Descripción
period
string
PeriodoTributario — Período AAAA-MM; el runner lo elige contra el historial del portal.
issuerRut
string
RutEmisorLibro — RUT del contribuyente dueño del libro.
senderRut
string
RutEnvia — RUT de quien envía, normalmente el titular del certificado.
Las operaciones del portal de la certificación (descargar el set, declarar el avance, leer el avance, avanzar la etapa, historial de libros, declaración de cumplimiento), el almacén que guarda el estado de una corrida, el entorno que comparten todos los pasos y una función por paso. El runner las encadena. Guía: Runner.
// Los sets en el orden en que se envían.const SET_KEYS: readonly SetKey[] = ['basic', 'guide', 'exempt', 'purchase']// Los libros en el orden en que se envían.const BOOK_KEYS: readonly BookKey[] = ['purchaseBook', 'salesBook', 'guideBook', 'exemptPurchaseBook']// Los libros que toda certificación debe tener aprobados.const MANDATORY_BOOK_KEYS: readonly BookKey[] = ['purchaseBook', 'salesBook', 'guideBook']// `FILE` — El nombre de archivo con que viaja cada libro en el envío, como lo espera el SII.const BOOK_FILE_NAMES: Readonly<Record<BookKey, string>> = { salesBook: 'LibroCV.xml', purchaseBook: 'LibroCV.xml', exemptPurchaseBook: 'LibroCVExentos.xml', guideBook: 'LibroGuia.xml',}// El nombre de artefacto de cada libro.const BOOK_ARTEFACT_NAMES: Readonly<Record<BookKey, string>> = { salesBook: 'libro-ventas.xml', purchaseBook: 'libro-compras.xml', exemptPurchaseBook: 'libro-compras-exentos.xml', guideBook: 'libro-guias.xml',}// El nombre de artefacto del sobre de cada set.const SET_ARTEFACT_NAMES: Readonly<Record<SetKey, string>>// `SETnn` — Los sets opcionales marcados al descargar el set de pruebas: guías (03), facturas// exentas (06), los libros de ventas (07), compras (08) y guías (09), el libro de compras para// exentos (15) y el set de factura de compra (72).const DEFAULT_OPTIONAL_SETS: readonly string[] = ['SET03', 'SET06', 'SET07', 'SET08', 'SET09', 'SET15', 'SET72']// Las etapas de una certificación, en orden, como las lleva el ejecutor.const CERTIFICATION_STAGES: readonly [ "testSets", "books", "simulation", "exchange", "printedSamples", "compliance", "done"]// Las palabras con que el portal nombra una etapa (`pe_avance6`, "paso <b>…</b>"), de la última// hacia atrás. Cualquier texto posterior al intercambio cae en `printedSamples`: la declaración de// cumplimiento dice si las muestras ya están aprobadas.const PORTAL_STAGE_WORDS: readonly { readonly stage: CertificationStage; readonly words: readonly string[] }[]// Los nombres de los eventos de progreso que emiten los pasos.const CERTIFICATION_STEPS: readonly [ "SETS_DOWNLOADING", "SETS_LOADED", "SETS_REGENERATED", "CAF_REQUESTING", "CAF_OK", "SET_START", "SET_OK", "SET_ERROR", "SETS_DECLARING", "SETS_DECLARED", "POLLING", "SETS_APPROVED", "SETS_REJECTED", "BOOKS_START", "BOOK_SKIPPED", "BOOK_SENDING", "BOOK_OK", "BOOK_ERROR", "BOOK_PERIOD_RETRY", "BOOKS_DECLARING", "BOOKS_DONE", "ADVANCE_WAITING", "ADVANCE_DONE", "SIM_START", "SIM_SENDING", "SIM_OK", "SIM_DECLARING", "SIM_DONE", "INTERCAMBIO_START", "INTERCAMBIO_DESCARGADO", "INTERCAMBIO_DONE", "MUESTRAS_UPLOADING", "MUESTRAS_DONE", "CERT_DONE", "CERT_ERROR"]
Tipo
Descripción
SetKey
Los cuatro sets que emite la certificación. Definido como 'basic' | 'exempt' | 'guide' | 'purchase'.
BookKey
Los libros de la certificación. Definido como 'salesBook' | 'purchaseBook' | 'exemptPurchaseBook' | 'guideBook'.
DeclarationKey
Cada fila que puede traer el formulario de declaración de avance (pe_avance2), por clave. Definido como SetKey | BookKey | 'simulation' | 'export1' | 'export2' | 'settlement'.
CertificationStage
Unión de las etapas. Definido como (typeof CERTIFICATION_STAGES)[number].
CertificationStep
Unión de los nombres de evento de progreso. Definido como (typeof CERTIFICATION_STEPS)[number].
// Descarga el set de pruebas desde `pe_generar`. Sin sesión en la caché se lee primero la página// de avance, lo que inicia sesión y deja que el SII refresque la postulación; responda lo que// responda esa lectura, la descarga sigue.function downloadTestSet( portal: PortalClient, input?: DownloadTestSetInput, overrides?: CallOverrides,): Promise<DownloadedTestSet>// Declara el track id y la fecha de envíos en `pe_avance2`, enviado a `pe_avance3`. Del formulario// se leen los campos ocultos y el índice del campo de cada fila, buscada por su etiqueta (los// índices se mueven al aprobarse sets).function declareProgress( portal: PortalClient, input: DeclareProgressInput, overrides?: CallOverrides,): Promise<DeclarationResult>// Lee la página de avance: la secuencia de entrada, `pe_avance5` y luego `pe_avance6` con la// empresa. En ninguna página del camino se busca un rechazo, y una página que no nombra etapa ni// estado sigue siendo una respuesta.function readProgress( portal: PortalClient, input?: { readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<ProgressReport>// Pide al portal pasar la postulación a su siguiente etapa: `pe_avance4` con `TOTREG` y `PASO` tal// como los trae `pe_avance2` (`PASO` cambia con la etapa; un valor fijo hace que el SII responda// "ya se encuentra en el paso"), con `pe_avance2` de referer.function advanceStage( portal: PortalClient, input?: { readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<AdvanceResult>// Lista los libros que el SII tiene para un año (`QEstLibro`, después de que `DTEauth?7` liga la// sesión a ese CGI). Todo período listado está ocupado para un nuevo envío total.function listBookHistory( portal: PortalClient, input: { readonly year: number; readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<BookHistory>// La declaración de cumplimiento: `pe_avance7`, `pe_avance8` con la empresa, una vez más con todos// los inputs de la página cuando el portal pide continuar (`OK_MSG`), y luego el formulario de// `pe_avance9` con todos los inputs de la página, salvo `Salir`, cada `OPCn` en `S` y `CONFIRMAR`,// ambos envíos con `pe_avance8` de referer.function declareCompliance( portal: PortalClient, input?: { readonly companyRut?: string; }, overrides?: CallOverrides,): Promise<ComplianceResult>
Tipo
Descripción
DownloadTestSetInput
Entrada de downloadTestSet.
DownloadedTestSet
Lo que leyó downloadTestSet. Descargar genera el set: el SII asigna los casos de nuevo, así que lo enviado para un set anterior queda sin efecto.
DeclarationEntry
Un envío por declarar: su track id y la fecha en que se envió, AAAA-MM-DD de Chile.
DeclarationEntries
Las entradas de una declaración, por clave de fila. Definido como Readonly<Partial<Record<DeclarationKey, DeclarationEntry>>>.
DeclareProgressInput
Entrada de declareProgress.
DeclarationOutcome
Cómo terminó una declaración, en una palabra. Definido como | 'accepted' | 'inReview' | 'contentErrors' | 'allRejected' | 'notSaved' | 'inconsistent' | 'declined' | 'failed'.
DeclarationResult
Lo que hizo declareProgress y lo que respondió el portal, con los hechos sobre los que decide el ciclo de declaración.
ProgressReport
El avance de la postulación como lo muestra pe_avance6.
AdvanceResult
Lo que obtuvo advanceStage. Definido como AdvanceAnswer.
BookHistory
Lo que leyó listBookHistory para un año.
ComplianceResult
Lo que hizo declareCompliance.
SetGenerationState
Una fila de la tabla de sets de pe_generar1: un set y si la empresa lo obtuvo.
OptionalSetOption
Un set opcional que la página ofrece como casilla.
SetGenerationPage
Lo que muestra pe_generar1 antes de generar un set.
DeclarationForm
El formulario de pe_avance2 tal como lo lee la declaración: solo lo que entrega un atributo entre comillas.
DeclarationAnswer
Lo que dice una respuesta de pe_avance3, leída sobre la página tal como llegó.
DeclarationVerification
Lo que dice el formulario releído de las filas recién declaradas.
AdvanceAnswer
Lo que respondió pe_avance4.
ItemState
El estado de un set o libro en la página de avance. Definido como | 'approved' | 'inReview' | 'rejected' | 'objections' | 'pending' | 'annulled' | 'inconsistent' | 'unknown'.
ProgressPage
La página de avance (pe_avance6) leída.
BookHistoryEntry
Un libro que el SII tiene, tal como lo lista QEstLibro.
ComplianceForm
El formulario de pe_avance9, listo para enviar: su acción y sus campos.
Campos de DownloadTestSetInput
Campo
Tipo
Descripción
companyRut?
string
RUT_EMP + DV_EMP — RUT de la empresa; por defecto el del cliente.
optionalSets?
readonly string[]
SETnn — Sets opcionales a marcar; por defecto DEFAULT_OPTIONAL_SETS. Solo se envían los que la página ofrece.
download?
boolean
False para leer solo la tabla de estados, sin generar un set.
previousAttentionNumber?
string
El número de atención del set en mano, para reconocer un set regenerado.
Campos de DeclareProgressInput
Campo
Tipo
Descripción
entries
DeclarationEntries
Los envíos por declarar.
companyRut?
string
RUT_EMP + DV_EMP — RUT de la empresa; por defecto el del cliente.
// Un estado nuevo para una empresa.function createCertificationState(companyRut: string, now?: Date): CertificationState// Un almacén en memoria: para tests y corridas cortas.function createMemoryCertificationStore(): CertificationStore// Lanza salvo que el nombre sea una ruta relativa de segmentos seguros: sin segmento vacío, sin// `.`, sin `..`, sin ruta absoluta, nada fuera de `[A-Za-z0-9._-]`.function assertArtefactName(name: string): void// Un almacén en un directorio: `state.json` escrito de forma atómica (archivo temporal y// renombre), los artefactos como archivos, una `/` en un nombre como subdirectorio.function createDirectoryCertificationStore( options: DirectoryCertificationStoreOptions,): CertificationStore
Tipo
Descripción
CertificationState
Todo el estado de una corrida de certificación: lo descargado, obtenido, enviado, declarado y aprobado. Un valor JSON simple que el almacén guarda entre corridas; el ejecutor retoma desde él.
CertificationStore
Dónde viven el estado y los artefactos de una corrida. Los nombres son rutas relativas con / de separador; un servicio puede respaldarlo con su propio almacenamiento.
SentEnvelope
Un envío hecho al SII: su track id, la fecha de Chile en que se envió (lo que toma la declaración), el instante.
SentCase
Un caso de un set enviado.
SentSet
Un set enviado, con sus casos.
SentBook
Un libro enviado: su período, su tipo de envío, y si el portal lo aprobó.
BooksState
Lo que guarda la fase de libros.
AccumulatedTotals
Los totales de período acumulados por período y operación, para los envíos de ajuste. Definido como Readonly< Record<string, { readonly purchase?: readonly BookTotals[]; readonly sale?: readonly BookTotals[] }> >.
EnvelopeDiagnosis
Lo que dijo el estado SOAP de un envío, guardado para diagnóstico.
DirectoryCertificationStoreOptions
Opciones de createDirectoryCertificationStore.
Campos de CertificationStore
Campo
Tipo
Descripción
load
() => Promise<CertificationState | null>
El estado guardado, o null.
save
(state: CertificationState) => Promise<void>
Reemplaza el estado guardado.
writeArtefact
(name: string, content: string) => Promise<void>
Escribe un artefacto, reemplazándolo.
readArtefact
(name: string) => Promise<string | null>
Lee un artefacto, o null.
listArtefacts
() => Promise<readonly string[]>
Todos los nombres de artefacto, ordenados.
Campos de DirectoryCertificationStoreOptions
Campo
Tipo
Descripción
dir
string
El directorio de state.json y los artefactos; se crea en el primer uso. Contiene llaves privadas de CAF: fuera del control de versiones.
// Lo que la corrida completa en un emisor que lo omite: el giro, el código de actividad, la comuna// y la ciudad. El RUT, la razón social y la dirección no tienen valor por defecto.const DEFAULT_CERTIFICATION_ISSUER: Readonly<{ businessActivity: "ACTIVIDADES DE PROGRAMACION INFORMATICA"; activityCode: 620200...// El receptor de prueba que usa la corrida cuando no se le da uno.const DEFAULT_CERTIFICATION_RECEIVER: ReceiverInput
Tipo
Descripción
CertificationDependencies
Lo que necesita cada paso: los clientes, el almacén, el registro, la empresa y el reloj.
CertificationIssuerInput
El emisor tal como lo recibe la corrida: el giro y la comuna se pueden omitir.
CertificationProgressEvent
Los eventos de progreso que emiten los pasos, con los nombres de sus pasos.
PollingLabel
Lo que espera un evento POLLING. Definido como 'sets' | 'declaration' | 'books' | 'simulation'.
StepResult<Outcome extends string>
Lo que devuelve un paso: el estado que guardó, cómo terminó, y una palabra o frase sobre el porqué.
Campos de CertificationDependencies
Campo
Tipo
Descripción
portal
PortalClient
El cliente del portal en el ambiente de certificación.
sii
SiiClient
El cliente del SII en el ambiente de certificación.
store
CertificationStore
Dónde viven el estado y los artefactos.
registry
FolioRegistry
El registro de folios.
issuer
CertificationIssuerInput
Emisor — La empresa que se certifica; lo que omita toma los valores de DEFAULT_CERTIFICATION_ISSUER.
receiver?
Partial<ReceiverInput>
Receptor — El receptor de los documentos de la corrida; por defecto el receptor de prueba de DEFAULT_CERTIFICATION_RECEIVER, campo por campo.
// Descarga el set de pruebas, lo parsea, planifica los sets y guarda el texto y el plan como// artefactos. Descargar genera el set de nuevo en el SII, así que una corrida que ya tenía plan// parte de cero: todo lo enviado queda sin efecto.function obtainTestSet( deps: CertificationDependencies, state: CertificationState, options?: { readonly optionalSets?: readonly string[]; },): Promise<StepResult<"loaded" | "regenerated">>// Envía un set de pruebas: lo emite con los folios de los CAF del estado a través del registro,// guarda el sobre y cada documento como artefactos, lo sube, marca los folios enviados pase lo que// pase, y registra el track id y la fecha de Chile del envío.function sendTestSet( deps: CertificationDependencies, state: CertificationState, options: { readonly kind: SetKey; },): Promise<StepResult<"sent">>// Declara los sets enviados hasta ahora con la fecha de hoy, con el ciclo de declaración; el// resultado y cualquier diagnóstico van al estado.function declareTestSets( deps: CertificationDependencies, state: CertificationState,): Promise<DeclarationStepResult>// Espera la aprobación de los sets enviados: 5 intentos cada 10 s, durmiendo primero, leyendo la// página de avance. Una lectura que falla solo gasta su intento.function waitForTestSetsApproval( deps: CertificationDependencies, state: CertificationState,): Promise<StepResult<"approved" | "rejected" | "timedOut">>// Pide al portal la etapa siguiente después de los libros: se lee la página de avance, hasta 30// veces cada 10 s mientras no se pueda leer; con la primera página que se lee se pide el avance de// inmediato, diga lo que diga la página de los libros (decide el portal); luego se lee de nuevo la// página para saber la etapa, y la etapa del estado pasa a la del portal cuando esa es posterior.function advanceToNextStage( deps: CertificationDependencies, state: CertificationState,): Promise<StepResult<"advanced" | "unchanged" | "failed" | "timedOut">>// Envía la simulación: CAF nuevos para un folio por caso (nunca los CAF de los sets), cada caso de// los cuatro sets reemitido en un sobre, el sobre y los documentos guardados como artefactos, el// envío, los folios marcados enviados pase lo que pase, y el track id con la fecha de Chile del// envío.function sendSimulation( deps: CertificationDependencies, state: CertificationState,): Promise<StepResult<"sent">>// Declara la simulación, salvo que la página de avance nombre el intercambio como el paso en que// está la postulación: un paso posterior se declara como cualquier otro, y también una página que// no se puede leer.function declareSimulation( deps: CertificationDependencies, state: CertificationState,): Promise<DeclarationStepResult<DeclarationOutcome | "skipped">>// Espera la simulación: 30 consultas cada 10 s a la página de avance, consultando primero. Una// lectura que falla solo gasta su intento.function waitForSimulationApproval( deps: CertificationDependencies, state: CertificationState,): Promise<StepResult<"done" | "confirmed" | "rejected" | "timedOut">>// El cierre de la certificación: una petición más para avanzar la etapa, luego la declaración de// cumplimiento.function declareComplianceFinal( deps: CertificationDependencies, state: CertificationState,): Promise<StepResult<"declared" | "blocked">>
// Asegura que la corrida tenga los folios que necesita cada tipo. Primero los CAF en mano: uno// vencido se omite, los folios de esta corrida que el SII nunca recibió se devuelven, y los que el// SII ya recibió se marcan como usados para saltarlos. Cada CAF obtenido se guarda en el estado de// inmediato. Si aún falta, lanza `FOLIO_OUT_OF_RANGE` o, cuando las tandas se detuvieron por una// falla y no por la respuesta del SII, el código de esa falla. Una reobtención o una anulación// cortadas por una falla terminan el paso también con el código de esa falla, una vez que lo que// trajo y se conservó, o lo que anuló, está en el estado. Solo un rechazo de racionamiento lleva a// anular: una tanda posterior rechazada por la empresa, la opción o la persona conserva su tipo, y// un bloqueo de la persona se levanta primero reobteniendo.function prepareFolios( deps: CertificationDependencies, state: CertificationState, options?: PrepareFoliosOptions,): Promise<PrepareFoliosResult>// Los folios que necesita cada tipo para los sets aún no enviados: la suma de los `folios` de cada// plan de set, nunca más, porque folios autorizados sin usar hacen que el SII racione la próxima// solicitud.function setFolioNeeds( plan: CertificationPlan, sent: readonly string[],): Readonly<Record<number, number>>// Los folios que necesita la simulación: uno por caso, por tipo.function simulationFolioNeeds(plan: CertificationPlan): Readonly<Record<number, number>>
Tipo
Descripción
PrepareFoliosOptions
Opciones de prepareFolios.
PrepareFoliosResult
Lo que devuelve prepareFolios: el estado, y los CAF que cubren las necesidades.
Campos de PrepareFoliosOptions
Campo
Tipo
Descripción
needs?
Readonly<Record<number, number>>
Folios necesarios por tipo; por defecto los sets aún no enviados.
fresh?
boolean
Ignorar los CAF en mano y pedir nuevos (la simulación nunca reutiliza los CAF de los sets).
Campos de PrepareFoliosResult
Campo
Tipo
Descripción
state
CertificationState
outcome
Outcome
detail?
string
cafs
readonly string[]
Los CAF con que emitir: los en mano más los nuevos, o solo los nuevos con fresh; los rangos reobtenidos que se conservan ocupan el lugar de los en mano de su tipo.
// La fase de libros.function runBooks( deps: CertificationDependencies, state: CertificationState,): Promise<StepResult<BooksOutcome>>// El mes anterior a un período `AAAA-MM`.function previousPeriod(period: string): string// El primer período en o bajo `period` que el SII no tiene, bajando mes a mes, a lo más 400 veces.function nextFreePeriod(period: string, occupied: ReadonlySet<string>): string
Tipo
Descripción
BooksOutcome
Cómo terminó la fase de libros: todos los libros pedidos aprobados; un libro obligatorio nunca enviado; una declaración que el portal no tomó o libros que el SII rechazó; la espera de aprobación agotada. Definido como 'approved' | 'incomplete' | 'rejected' | 'timedOut'.
El intercambio y las muestras impresas se responden en dos portales que hablan GWT-RPC. Este grupo reúne las utilidades GWT, las operaciones de cada portal, las respuestas del intercambio y los dos pasos que usa el runner. Guía: Intercambio y muestras.
// El portal de intercambio (`pfeInternet`): ahí se descarga el set de intercambio de la// certificación y se suben sus respuestas.const EXCHANGE_PORTAL: GwtPortal// El portal de muestras impresas (`pdfdteInternet`), el validador automático del SII de los// documentos impresos.const SAMPLES_PORTAL: GwtPortal// Los nombres de archivo de las respuestas del intercambio, como los nombran las subidas del// portal: la respuesta de recepción, los recibos y la aprobación comercial.const EXCHANGE_ANSWER_FILES: Readonly<Record<ExchangeAnswerKey, string>> = { reception: 'respuesta-recepcion-envio.xml', receipts: 'envio-recibos.xml', approval: 'respuesta-aprobacion-comercial.xml',}// Las respuestas del intercambio en orden de subida.const EXCHANGE_ANSWER_KEYS: readonly ExchangeAnswerKey[] = ['reception', 'receipts', 'approval']
Tipo
Descripción
GwtPortal
Un portal GWT del SII: la base de su módulo, la ruta e interfaz de su servicio RPC, el nombre de su módulo y el par de hashes que se sabe que funciona (capturado en junio de 2026; el SII cambia ambos al redesplegar el portal).
ExchangeAnswerKey
Las claves de las tres respuestas del intercambio. Definido como 'reception' | 'receipts' | 'approval'.
// El cuerpo de petición de una llamada: `7|0|N|` + la tabla de strings + el cuerpo, cada ítem// seguido de `|`.function gwtBody(call: GwtCall): string// Lee una respuesta: `//OK`, la tabla de strings, el mensaje, los tokens Long.function gwtAnswer(body: string): GwtAnswer// Un número en el alfabeto base 64 de GWT, el dígito más significativo primero (`264872` es// `BAqo`).function encodeGwtLong(value: number): string// El número que contiene un token base 64 de GWT, o null si un carácter no está en el alfabeto.function decodeGwtLong(token: string): number | null// Los hashes de un portal GWT: el par del llamador si lo da; si no, se lee el `nocache.js` del// módulo (los strings de 32 hexadecimales entre `=`, `'` o `,`): el par conocido vale si su// permutación está listada, si no, la primera listada es la permutación y su `cache.html` da la// política, el primer string de 32 hexadecimales entre comillas que no sea ella; cualquier falla,// página vacía o candidato ausente deja el par conocido.function discoverGwtHashes(context: PortalContext, input: GwtDiscoveryInput): Promise<GwtHashes>
Tipo
Descripción
GwtCall
Una llamada GWT-RPC: adónde va y qué lleva.
GwtParameter
Un parámetro de una llamada GWT-RPC, como lo serializan los portales del SII: un string (en la tabla, 0 si es null, o en un lugar propio si es distinct), un java.lang.Integer encajonado, un java.lang.Long encajonado (un número, o un token ya en el alfabeto base 64 de GWT), un booleano primitivo (Z), null (un String salvo que nombre su tipo declarado), o un objeto con sus campos en orden de serialización.
GwtAnswer
Una respuesta GWT-RPC, leída.
GwtHashes
Los dos hashes que un portal GWT exige en cada llamada.
GwtDiscoveryInput
Lo que necesita discoverGwtHashes: el módulo, el par que se sabe que funciona, y un par del llamador que gana.
GwtStage
Una etapa de trabajo en un portal GWT: una entrada autenticada, un calentamiento y un par de hashes que comparten todas las llamadas de la etapa. Sus cookies viven solo lo que dura la etapa.
Campos de GwtDiscoveryInput
Campo
Tipo
Descripción
moduleBase
string
La URL base del módulo, con su barra final.
moduleName
string
El nombre del módulo (<name>.nocache.js).
known
GwtHashes
El par que se sabe que funciona.
override?
GwtHashes
Un par que el llamador conoce mejor; entonces no se consulta nada.
// Descarga el set de intercambio del portal de intercambio: el calentamiento y luego// `downloadFile` con la empresa en la query y un cuerpo multipart vacío. La descarga no cambia la// postulación.function downloadExchangeSet( portal: PortalClient, input?: ExchangeCompanyInput, overrides?: CallOverrides,): Promise<ExchangeSetDownload>// Valida al usuario en el portal de intercambio: el calentamiento y luego `validarUsuario` con la// empresa y el titular del certificado, sobre los hashes conocidos. La respuesta dice si la// empresa está en la etapa de intercambio; no se exige `//OK`.function validateExchangeUser( portal: PortalClient, input?: ExchangeGwtInput, overrides?: CallOverrides,): Promise<ExchangeUserValidation>// Sube las tres respuestas del intercambio, en el orden del portal: la respuesta de recepción a// `uploadFile1`, los recibos a `uploadFile2`, la aprobación comercial a `uploadFile3`, cada una// como una sola parte `uploadFormElement`.function uploadExchangeAnswers( portal: PortalClient, input: UploadExchangeAnswersInput, overrides?: CallOverrides,): Promise<ExchangeUploadResult>// Confirma el intercambio en el portal: `validarSetContriPostSeguimiento` con la empresa (su// respuesta se guarda, no se juzga) y luego `updatePostulacionSeguimiento` para los ids de// seguimiento 40, 41 y 43, uno por respuesta subida, cada uno de los cuales debe responder `//OK`.function confirmExchange( portal: PortalClient, input?: ExchangeGwtInput, overrides?: CallOverrides,): Promise<ExchangeConfirmation>// Ejecuta `run` en una etapa del portal de intercambio: la sesión asegurada, un calentamiento, y// cada llamada que recibe la etapa enviada una vez sobre ella. La subida, la validación del// usuario y la confirmación comparten una etapa.function withExchangeStage<T>( portal: PortalClient, operation: string, overrides: CallOverrides | undefined, run: (stage: GwtStage) => Promise<T>, sessionChecked?: boolean,): Promise<T>
Tipo
Descripción
ExchangeCompanyInput
Entrada de las operaciones del intercambio que solo nombran a la empresa.
ExchangeGwtInput
Entrada de las operaciones del intercambio que llaman al servicio del portal.
ExchangeSetDownload
Lo que leyó downloadExchangeSet.
ExchangeUserValidation
Lo que leyó validateExchangeUser: el estado y la respuesta cruda, con los hashes usados, para las llamadas siguientes.
UploadExchangeAnswersInput
Entrada de uploadExchangeAnswers: las tres respuestas en XML, firmadas.
ExchangeUploadAnswer
Lo que respondió una página de subida.
ExchangeUploadResult
Lo que hizo uploadExchangeAnswers.
ExchangeConfirmationAnswer
Lo que respondió una confirmación de seguimiento.
ExchangeConfirmation
Lo que hizo confirmExchange.
ExchangeUserState
Lo que dijo el portal de intercambio al validar al usuario.
Campos de ExchangeCompanyInput
Campo
Tipo
Descripción
companyRut?
string
re + dve — RUT de la empresa; por defecto el del cliente.
stage?
GwtStage
La etapa en que correr, de withExchangeStage; sin ella la llamada abre una etapa propia.
Campos de ExchangeGwtInput
Campo
Tipo
Descripción
companyRut?
string
re + dve — RUT de la empresa; por defecto el del cliente.
stage?
GwtStage
La etapa en que correr, de withExchangeStage; sin ella la llamada abre una etapa propia.
gwt?
GwtHashes
Los hashes del portal, si el llamador conoce otros mejores que el par que se sabe que funciona, que es el de por defecto; nunca se buscan.
Campos de UploadExchangeAnswersInput
Campo
Tipo
Descripción
companyRut?
string
re + dve — RUT de la empresa; por defecto el del cliente.
stage?
GwtStage
La etapa en que correr, de withExchangeStage; sin ella la llamada abre una etapa propia.
reception
string
RespuestaDTE/Resultado/RecepcionEnvio — La respuesta de recepción.
receipts
string
EnvioRecibos — Los recibos.
approval
string
RespuestaDTE/Resultado/ResultadoDTE — La aprobación comercial.
// Lee la revisión de muestras impresas de la empresa: `leeImpreso` con el RUT de la empresa. El// portal responde HTTP 200 con un estado, o con una frase cuando la postulación no está en la// etapa de muestras impresas (antes de ella, y también después).function readSamplesReview( portal: PortalClient, input?: ReadSamplesReviewInput, overrides?: CallOverrides,): Promise<SamplesReview>// Crea una revisión de muestras impresas: `creaLista` con la empresa como remitente y proveedor.// El portal solo crea una cuando la revisión actual está `RECHAZADO` o `APROBADO`, o no hay// ninguna; una revisión en `INGRESO` se retoma.function createSamplesReview( portal: PortalClient, input?: SamplesCompanyInput, overrides?: CallOverrides,): Promise<SamplesReviewCreated>// Sube un PDF a una revisión: `POST upload` con las partes `Filedata` (el archivo), `id` (el id de// la revisión en decimal) y `ambiente` (`false`), el referer el `cache.html` de la permutación.// HTTP 200 es éxito.function uploadSample( portal: PortalClient, input: UploadSampleInput, overrides?: CallOverrides,): Promise<SampleUploaded>// Envía una revisión al SII: `solicitaRevisionSII` con el token de la revisión. La respuesta es// `//OK[0,[],0,7]` tanto si el SII acepta como si rechaza las muestras: el estado se lee de nuevo// después.function submitSamplesReview( portal: PortalClient, input: SamplesReviewInput, overrides?: CallOverrides,): Promise<{ readonly body: string; }>// Lee cómo clasificó el SII cada PDF de una revisión rechazada: `muestraMail` con el token de la// revisión. Una falla se registra y entrega un detalle vacío: el rechazo se mantiene sin él.function readSamplesDetail( portal: PortalClient, input: SamplesReviewInput, overrides?: CallOverrides,): Promise<SamplesDetail>// Ejecuta `run` en una etapa del portal de muestras: la sesión asegurada, un calentamiento, los// hashes buscados una vez, y cada llamada que recibe la etapa enviada una vez sobre ella.function withSamplesStage<T>( portal: PortalClient, operation: string, overrides: CallOverrides | undefined, run: (stage: GwtStage) => Promise<T>,): Promise<T>
Tipo
Descripción
SamplesCompanyInput
Entrada de las operaciones de muestras que nombran a la empresa.
ReadSamplesReviewInput
Entrada de readSamplesReview.
SamplesReviewInput
Entrada de las operaciones de muestras que nombran una revisión por su token.
SamplesReview
Lo que leyó readSamplesReview.
SamplesReviewCreated
Lo que hizo createSamplesReview.
UploadSampleInput
Entrada de uploadSample.
SampleUploaded
Lo que hizo uploadSample.
SamplesDetail
Lo que leyó readSamplesDetail.
ReviewState
Los estados en que puede estar una revisión de muestras, como los escribe el portal. Definido como 'APROBADO' | 'POR REVISAR' | 'EN REVISION' | 'RECHAZADO' | 'INGRESO' | 'ENVIADO AL SII'.
SampleDetail
Una fila del detalle del rechazo: cómo clasificó el SII un PDF.
Campos de SamplesCompanyInput
Campo
Tipo
Descripción
companyRut?
string
RUT de la empresa; por defecto el del cliente.
gwt?
GwtHashes
Los hashes del portal, si el llamador los conoce; si no, se descubren.
stage?
GwtStage
La etapa en que correr, de withSamplesStage; sin ella la llamada abre una etapa propia.
Campos de ReadSamplesReviewInput
Campo
Tipo
Descripción
companyRut?
string
RUT de la empresa; por defecto el del cliente.
gwt?
GwtHashes
Los hashes del portal, si el llamador los conoce; si no, se descubren.
stage?
GwtStage
La etapa en que correr, de withSamplesStage; sin ella la llamada abre una etapa propia.
anyStatus?
boolean
True para leer la respuesta sea cual sea su estado HTTP; por defecto cualquier estado distinto de 200 es inesperado.
Campos de SamplesReviewInput
Campo
Tipo
Descripción
revisionToken
string
El token Long de la revisión, como lo escribió el portal.
// Arma y firma las tres respuestas a un set de intercambio, como las espera la certificación: la// respuesta de recepción (el sobre recibido, cada documento recibido cuando su receptor es la// empresa, si no "error en RUT receptor"), los recibos de la Ley 19.983 (uno por documento,// firmados por el titular del certificado) y la aprobación comercial (aceptado cuando el receptor// es la empresa, si no rechazado con `CodRchDsc` -1).function createExchangeAnswers(setXml: string, input: CreateExchangeAnswersInput): ExchangeAnswers// Lee el set de intercambio como lo lee el lector de campo, con tolerancia: no se comprueba que el// XML esté bien formado y sus etiquetas se leen por su nombre completo, así que un sobre con// prefijo no es un sobre; la raíz es `EnvioDTE`, `EnvioDTEB`, `EnvioDTETraslado` o `EnvioBOLETA`;// el id del set (el atributo `ID`, si no un hijo `ID`, si no `SetDTE`), los RUT de la carátula y,// por documento, su tipo (`TipoDTE` o `TpoDoc`), folio, fecha de emisión, emisor y receptor (los// de la carátula cuando el documento no los nombra) y total.function parseExchangeSet(setXml: string): ExchangeSet
Tipo
Descripción
ExchangeDocument
Un documento del set de intercambio, como lo describen las respuestas.
ExchangeSet
El set de intercambio que envía el SII: su id, su carátula y sus documentos.
ExchangeContact
El contacto que nombran las respuestas, cada campo opcional.
CreateExchangeAnswersInput
Entrada de createExchangeAnswers.
ExchangeAnswer
Una respuesta, lista para subir.
ExchangeAnswers
Las tres respuestas del intercambio y el set que responden.
ExchangeState
La etapa de intercambio: el set respondido y hasta dónde llegaron las respuestas.
SamplesState
La etapa de muestras impresas: la revisión y lo que se subió a ella.
Campos de CreateExchangeAnswersInput
Campo
Tipo
Descripción
companyRut
string
RutResponde — La empresa que responde: el receptor que el SII espera en cada documento.
// La etapa de intercambio: el set (dado, guardado de una corrida anterior, o descargado), las tres// respuestas generadas y guardadas como artefactos, el usuario validado en el portal, las// respuestas subidas y el intercambio confirmado, que mueve la postulación a las muestras// impresas.function runExchange( deps: CertificationDependencies, state: CertificationState, input?: RunExchangeInput,): Promise<StepResult<ExchangeOutcome>>// El artefacto que guarda el set de intercambio; el llamador lo llena a mano cuando falla la// descarga.const EXCHANGE_SET_ARTEFACT: "intercambio/set-intercambio.xml"// La etapa de muestras impresas: la revisión leída (un bloqueo o una revisión ya enviada terminan// aquí), retomada cuando está en `INGRESO` con un id legible o creada si no, cada PDF subido en// orden (cada nombre guardado sobre la marcha), la revisión enviada, y su estado leído de nuevo// (una lectura fallida se advierte y deja el estado desconocido): `RECHAZADO` trae el detalle y su// resumen.function uploadPrintedSamples( deps: CertificationDependencies, state: CertificationState, input: UploadPrintedSamplesInput,): Promise<StepResult<SamplesOutcome>>
Tipo
Descripción
RunExchangeInput
Entrada de runExchange.
ExchangeOutcome
Cómo terminó runExchange: done con las respuestas subidas y confirmadas; alreadyDone cuando el estado o el portal dicen que el intercambio ya se completó; setUnavailable cuando el set no se pudo descargar (el artefacto que nombra el detalle debe llenarse a mano); notInExchange cuando el portal dice que la empresa no está en la etapa. Definido como 'done' | 'alreadyDone' | 'setUnavailable' | 'notInExchange'.
UploadPrintedSamplesInput
Entrada de uploadPrintedSamples.
SamplesOutcome
Cómo terminó uploadPrintedSamples: submitted con la revisión enviada al SII; alreadySubmitted cuando ya se había enviado una revisión (su estado en el detalle); blocked cuando el portal dice que la postulación no está en la etapa; rejected cuando el SII rechazó la revisión de inmediato (el resumen en el detalle). Definido como 'submitted' | 'alreadySubmitted' | 'blocked' | 'rejected'.
PrintedSampleFile
Un archivo de muestra como lo sube la certificación: su nombre base y sus bytes.
Campos de RunExchangeInput
Campo
Tipo
Descripción
setXml?
string
El set de intercambio, cuando el llamador lo tiene (descargado a mano del portal).
Campos de UploadPrintedSamplesInput
Campo
Tipo
Descripción
samples
readonly PrintedSampleFile[]
Los PDF a subir, en orden; readPrintedSamples los lee de un directorio.
runCertification corre el lado HTML de la certificación en el orden de las etapas (sets de pruebas, libros, simulación, intercambio, muestras impresas, declaración de cumplimiento), retomando desde el estado guardado, y se detiene con un RunStop. La declaración de cumplimiento es irreversible y solo se hace con declareCompliance: true. Guía: Runner.
TypeScript
// El lado HTML de la certificación, en el orden de las etapas, retomado desde el estado guardado:// el set de pruebas (descargado una vez), los folios, cada set aún no enviado, su declaración y// aprobación; los libros; el avance; la simulación enviada, declarada y confirmada; el set de// intercambio respondido, subido y confirmado; las muestras impresas subidas y enviadas cuando la// opción `samples` las da (si no, se detiene ahí); y luego declara cumplimiento, solo con// `declareCompliance: true`, porque esa declaración no se puede deshacer.function runCertification( dependencies: CertificationDependencies, options?: RunCertificationOptions,): Promise<RunCertificationResult>
Tipo
Descripción
RunCertificationOptions
Opciones de runCertification.
RunCertificationResult
Lo que devuelve runCertification.
RunStop
Por qué se detuvo el ejecutor. Definido como | 'done' | 'exchange' | 'printedSamples' | 'compliance' | 'until' | 'blocked' | 'rejected' | 'timedOut' | 'incomplete'.
Campos de RunCertificationOptions
Campo
Tipo
Descripción
until?
CertificationStage
Detenerse al completar esta etapa.
optionalSets?
readonly string[]
Los sets opcionales a marcar al descargar; por defecto DEFAULT_OPTIONAL_SETS.
declareCompliance?
boolean
Hacer la declaración de cumplimiento, la declaración jurada del representante legal, que no se puede deshacer. Apagado por defecto: el ejecutor se detiene en compliance.
exchangeSetXml?
string
El set de intercambio, cuando se descargó a mano del portal.
La certificación de boletas es una aplicación aparte y no tiene runner: son piezas que tú encadenas. Una boleta (39, 41) lleva receiptReferences, nunca references. Guía: Boletas.
// El portal de boletas (`certBolElectDteInternet`), donde corre la certificación de boletas// electrónicas. Sus hashes no se descubren: `moduleName` es lo que sugiere su interfaz, no un dato// registrado.const RECEIPTS_PORTAL: GwtPortal// Parsea el set de pruebas de boletas que entrega el portal de boletas, un texto plano.function parseReceiptsTestSet(text: string): readonly ReceiptsTestCase[]
Tipo
Descripción
ReceiptsTestCase
Un caso del set de pruebas de boletas: una boleta por emitir.
// Emite el set de pruebas de boletas: una boleta tipo 39 por caso, en orden, cada una con el// siguiente folio de la fuente, el consumidor final como receptor, los precios del set tomados con// IVA incluido, la exención de un ítem exento, la unidad de medida que nombra una observación en// su primer ítem, y una referencia con el código `SET` y la razón `CASO-<n>`; luego firma el// `EnvioBOLETA` que las lleva, con el titular del certificado como enviador (el emisor cuando el// certificado no nombra ninguno) y el SII como receptor.function issueReceiptsSet( cases: readonly ReceiptsTestCase[], options: IssueReceiptsSetOptions,): Promise<IssuedReceiptsSet>
Tipo
Descripción
IssueReceiptsSetOptions
Lo que necesita emitir el set de boletas.
IssuedReceipt
Una boleta emitida del set.
IssuedReceiptsSet
El set de boletas emitido: sus boletas en orden de caso y el sobre firmado que las lleva.
Campos de IssueReceiptsSetOptions
Campo
Tipo
Descripción
issuer
CertificationIssuerInput
Emisor — El emisor, como en un documento; lo que omita toma los valores de DEFAULT_CERTIFICATION_ISSUER. El RUT, la razón social y la dirección no los tienen.
certificate
Certificate
RutEnvia — El certificado de firma; su titular es quien envía el sobre.
NroResol, FchResol — La resolución del ambiente de certificación; por defecto número 0 y la fecha UTC del instante, campo por campo.
now?
() => Date
FchEmis, TSTED, TmstFirma, TmstFirmaEnv — Reloj, leído una vez para la fecha de emisión (su fecha UTC), una vez por boleta para sus marcas (el instante UTC al segundo) y una vez para el sobre (la hora de Chile).
// Envía el set de boletas: sube el sobre y lee la respuesta (`STATUS` 0 con track id es enviado;// `STATUS` 7 con track id también se toma como enviado, y sin él es un duplicado que salta al// reporte sin track id; `STATUS` 99 y cualquier otra respuesta es una falla y lanza), espera 20 s// y lee una vez el estado de un sobre enviado (un rechazo termina aquí; una consulta que nunca// llegó se registra, y una respuesta sin estado, o con uno desconocido, no bloquea nada), y luego// envía el reporte de consumo de folios armado desde el sobre, con la secuencia `sequence` más el// intento, hasta diez intentos: un `STATUS` 7 sin track id es un duplicado y tres seguidos// significan que el reporte de hoy ya se aceptó; un `STATUS` 99 u otro rechazo lo termina como// `consumptionFailed`; a un reporte subido se le dan 30 s y se lee su estado una vez: un éxito o// un estado intermedio (también un código de error de la consulta o `0`) lo acepta, una consulta// que nunca llegó lo acepta, y cualquier otra cosa (un rechazo, ningún estado, un estado// desconocido) prueba la secuencia siguiente, salvo que su glosa hable de autorización o firma.function sendReceiptsSet( sii: SiiClient, issued: { readonly envelope: SignedEnvelope; }, options?: SendReceiptsSetOptions,): Promise<ReceiptsSendResult>// Arma de nuevo el reporte de consumo de folios desde un sobre de boletas ya enviado y lo sube una// vez, con la secuencia dada.function resendReceiptsConsumption( sii: SiiClient, input: ResendReceiptsConsumptionInput,): Promise<{ readonly sequence: number; readonly xml: string; readonly trackId: string; readonly duplicate: boolean; }>
Tipo
Descripción
ReceiptsProgressEvent
Los eventos de progreso de sendReceiptsSet, con los nombres de sus pasos. Definido como { readonly step: 'BOLETA_SOAP_CHECK' } | { readonly step: 'BOLETA_RCOF' }.
SendReceiptsSetOptions
Opciones de sendReceiptsSet.
ReceiptsConsumptionAttempt
Un reporte de consumo de folios intentado.
ReceiptsSendResult
Lo que hizo sendReceiptsSet.
ResendReceiptsConsumptionInput
Entrada de resendReceiptsConsumption.
Campos de SendReceiptsSetOptions
Campo
Tipo
Descripción
sequence?
number
SecEnvio — La secuencia del primer reporte de consumo de folios; 100 por defecto (también si es 0), y cada intento suma uno.
sleep?
(ms: number) => Promise<void>
Función de espera; por defecto la del cliente.
onProgress?
(event: ReceiptsProgressEvent) => void
Eventos de progreso.
Campos de ReceiptsSendResult
Campo
Tipo
Descripción
outcome
'sent' | 'envelopeRejected' | 'consumptionFailed'
Cómo terminó.
notAuthorized
boolean
La glosa del SII o el error habla de autorización o firma: la empresa aún no puede firmar boletas.
envelopeTrackId
string | null
TrackId — El track id del sobre, para declararlo en el portal de boletas; null cuando el SII ya tenía el sobre y no nombró ninguno.
envelopeDuplicate
boolean
El SII ya tenía el sobre.
consumptionTrackId
string | null
El track id del reporte aceptado, o null.
consumptionSequence
number | null
SecEnvio del reporte aceptado, o null.
consumptionAlreadySent
boolean
Tres reportes seguidos fueron duplicados: ya se aceptó uno hoy.
consumptions
readonly ReceiptsConsumptionAttempt[]
Cada reporte intentado, en orden.
detail?
string
La glosa o el error que lo terminó, cuando no terminó en sent.
Campos de ResendReceiptsConsumptionInput
Campo
Tipo
Descripción
envelopeXml
string
EnvioBOLETA — El sobre de boletas tal como se envió.
// Descarga el set de pruebas de boletas.function downloadReceiptsTestSet( portal: PortalClient, input?: DownloadReceiptsTestSetInput, overrides?: CallOverrides,): Promise<ReceiptsTestSetDownload>// Declara el track id del sobre de boletas, para que el SII valide el set (`ingresarTrackId`), tal// como se da. Se envía una vez.function declareReceiptsTrackId( portal: PortalClient, input: ReceiptsPortalInput & { readonly trackId: string; }, overrides?: CallOverrides,): Promise<{ readonly body: string; }>// Lee el estado de la postulación de boletas: si la empresa está inscrita (tiene representantes// vigentes), si el SII aprobó el set (`P90`, lista para declarar) y si la declaración ya se hizo// (`P91`).function readReceiptsStatus( portal: PortalClient, input?: ReceiptsPortalInput, overrides?: CallOverrides,): Promise<ReceiptsStatus>// Hace la declaración de cumplimiento de la postulación de boletas, que autoriza a la empresa a// emitir boletas en producción (`autorizarEmpresaBolProd`). No se puede deshacer.function declareReceiptsCompliance( portal: PortalClient, input: DeclareReceiptsComplianceInput, overrides?: CallOverrides,): Promise<ReceiptsComplianceResult>// Lee si la empresa puede emitir boletas. En producción, un GET de la página de entrada del// timbraje y un POST de su formulario con la empresa, y el tipo 39 entre los valores de opción// entre comillas de la respuesta (que debe tener un selector).function verifyReceiptsAuthorization( input: VerifyReceiptsAuthorizationInput,): Promise<ReceiptsAuthorization>
Tipo
Descripción
ReceiptsPortalInput
Lo que recibe cada operación del portal de boletas.
DownloadReceiptsTestSetInput
Entrada de downloadReceiptsTestSet.
ReceiptsTestSetDownload
Lo que leyó downloadReceiptsTestSet.
ReceiptsStatus
El estado de la postulación de boletas.
ReceiptsProvider
El proveedor de software que nombra la declaración.
DeclareReceiptsComplianceInput
Entrada de declareReceiptsCompliance.
ReceiptsComplianceResult
Cómo terminó declareReceiptsCompliance.
VerifyReceiptsAuthorizationInput
Entrada de verifyReceiptsAuthorization.
ReceiptsAuthorizationCheck
Un lado de verifyReceiptsAuthorization. queryFailed significa que el portal no respondió la pregunta: nunca es "no autorizada".
ReceiptsAuthorization
Lo que leyó verifyReceiptsAuthorization; un lado es null cuando no se entregó su cliente.
ReceiptsProgress
La fila de boletas de la página de avance.
Campos de ReceiptsPortalInput
Campo
Tipo
Descripción
companyRut?
string
RUT de la empresa; por defecto el del cliente.
gwt?
GwtHashes
Los hashes del portal, cuando el par que se sabe que funciona quedó obsoleto.
sessionChecked?
boolean
True cuando una operación anterior de la misma corrida ya comprobó la sesión guardada.
Campos de DownloadReceiptsTestSetInput
Campo
Tipo
Descripción
companyRut?
string
RUT de la empresa; por defecto el del cliente.
gwt?
GwtHashes
Los hashes del portal, cuando el par que se sabe que funciona quedó obsoleto.
sessionChecked?
boolean
True cuando una operación anterior de la misma corrida ya comprobó la sesión guardada.
providerMail?
string
mailProvSw — El correo del proveedor de software que el portal pide con el set.
Campos de DeclareReceiptsComplianceInput
Campo
Tipo
Descripción
companyRut?
string
RUT de la empresa; por defecto el del cliente.
gwt?
GwtHashes
Los hashes del portal, cuando el par que se sabe que funciona quedó obsoleto.
sessionChecked?
boolean
True cuando una operación anterior de la misma corrida ya comprobó la sesión guardada.
provider
ReceiptsProvider
El proveedor de software; una empresa que es su propio proveedor se pasa a sí misma.
businessName
string
La razón social de la empresa.
link?
string
El link de consulta; por defecto www.sii.cl.
Campos de VerifyReceiptsAuthorizationInput
Campo
Tipo
Descripción
production?
PortalClient
Un cliente en producción, para leer el formulario de timbraje.
certification?
PortalClient
Un cliente en certificación, para leer la página de avance (pe_avance6).
companyRut?
string
RUT de la empresa; por defecto el de cada cliente.
sessionChecked?
boolean
True cuando una operación anterior de la misma corrida ya comprobó las sesiones guardadas.