Características
dte-sdk cubre la vida completa de un documento tributario electrónico chileno con nueve funciones tipadas: construirlo, totalizarlo, timbrarlo, firmarlo, enviarlo al SII, seguir su estado y serializarlo. Cada paso retorna un objeto nuevo e inmutable, así que puedes detenerte en cualquier etapa, inspeccionarla y seguir.
Estas páginas describen la API planificada para la 1.0. La versión publicada
0.0.2 es un placeholder, y los detalles pueden cambiar antes de la 1.0.
Las funciones#
Construye un documento inmutable y validado, con sus totales ya calculados.
calculateTotals()Neto, exento, IVA y total en pesos enteros, con redondeo half-up por línea.
stampDte()Agrega el timbre electrónico (TED) con tu CAF. Incluye parseCaf().
Firma con tu certificado digital vía XMLDSig. Incluye loadCertificate().
Sube al SII y obtén un track ID. Incluye getStatus().
Serializa cualquier etapa a XML según el esquema del SII, en ISO-8859-1 por defecto.
Las otras tres funciones públicas viven en la página del paso al que apoyan: parseCaf() junto a stampDte(), loadCertificate() junto a signDte(), y getStatus() junto a sendToSii(). Todas las firmas, tipos y constantes también están en la Referencia de la API.
Cómo se componen#
Un documento pasa por cinco pasos. Cada uno recibe el resultado del anterior:
Crear
createDte() valida el emisor, el receptor y las líneas, y calcula los totales. Retorna un Dte.
Timbrar
stampDte() agrega el TED usando el CAF de ese tipo y folio. Retorna un StampedDte.
Firmar
signDte() firma el documento con tu certificado. Retorna un SignedDte.
Enviar
sendToSii() sube uno o más documentos firmados y retorna un track ID.
Consultar
getStatus() te dice si el SII los aceptó, los aceptó con reparos o los rechazó.
En código:
import { createDte, getStatus, sendToSii, signDte, stampDte } from 'dte-sdk'
const dte = createDte(input) // Dte
const stamped = stampDte(dte, caf) // StampedDte
const signed = await signDte(stamped, certificate) // SignedDte
const { trackId } = await sendToSii(signed, {
certificate,
environment: 'certification',
senderRut: '15.234.567-4',
resolution: { number: 0, date: '2026-09-01' },
})
const status = await getStatus(trackId, {
certificate,
environment: 'certification',
issuerRut: '76.123.456-0',
})calculateTotals() y toXml() son helpers que puedes usar en cualquier momento: totales para un carro de compras antes de que exista el documento, XML para una vista previa o un archivo.
Comportamiento compartido#
Todas las funciones:
- ✅ Están completamente tipadas - cada etapa tiene su propio tipo, así que enviar un documento sin firmar es un error de compilación
- ✅ Son inmutables - cada paso retorna un objeto nuevo y nunca modifica su entrada
- ✅ Lanzan una sola clase de error -
DteError, con uncodeestable para decidir qué hacer - ✅ Emiten mensajes genéricos - los errores nunca incluyen RUTs, montos, llaves privadas del CAF ni contraseñas de certificados
- ✅ Corren en todas partes - Node 20 o superior, el navegador, Deno y Bun, usando Web Crypto
- ✅ No agregan dependencias - cero dependencias en runtime, ESM y CJS con tree-shaking
dte-sdk construye, timbra, firma y envía documentos. No genera la versión
impresa en PDF: usa stamped.pdf417 con tu propio proceso de impresión.
Próximos pasos#
- Sigue un flujo completo en Emitir una factura
- Conoce las piezas (folios, CAF, certificados) en Conceptos
- Protege tu CAF y tu certificado con la guía de Seguridad