Introducción
dte-sdk crea, timbra y firma DTE (Documento Tributario Electrónico) de Chile como los espera el SII, los envía por los servicios web del SII y les hace seguimiento. También cubre lo que rodea a la emisión: la verificación de los documentos que te envían tus proveedores, los libros del SII, el portal del SII autenticado con certificado (folios, el registro de compras y ventas, el respaldo MIPYME, la verificación de actividades), el proceso de certificación y las muestras impresas. La API está en inglés legible, con documentación bilingüe (EN/ES) en cada campo.
No está listo para producción. La 0.8.0 de dte-sdk está en npm, la versión más reciente, y estas páginas la documentan. La 1.0.0 será la primera recomendada para producción. Hasta entonces la API puede cambiar en cualquier versión, y buena parte de lo documentado aquí todavía no se ha probado contra el SII real: revisa el Estado del proyecto.
Qué cubre#
Todo está probado contra respuestas sintéticas del SII, con una barrera de cobertura de 100 % en CI. La página de estado del proyecto dice, área por área, qué ya se probó contra el SII real.
Tipos de documento 33, 34, 39, 41, 43, 46, 52, 56 y 61. Se valida la entrada, se sanea el texto, se exigen los largos del esquema y los totales se calculan con redondeo por línea.
TED y firmasEl timbre electrónico (TED) firmado con la llave del CAF y la firma XMLDSig envuelta hecha con tu certificado. Los documentos que envía un proveedor se revisan igual: firma, timbre y la firma del SII sobre su CAF.
SobresEnvioDTE y EnvioBOLETA con su carátula y su SetDTE firmado.
Semilla y token, envíos, estado de sobres y documentos, sondeo, aceptación y reclamos con la regla de los ocho días, y el registro público de emisores autorizados. Transporte inyectable, reintentos, una caché de tokens que puede vivir en disco y captura HTTP con datos sensibles tachados.
Libros del SIIEl libro de compras y ventas, el libro de guías de despacho y el reporte de consumo de folios, con sus resúmenes calculados desde las líneas.
Portal del SII y foliosIngreso con certificado, datos de la empresa, la verificación de actividades, cupo de folios, solicitud de CAF, anulación y recuperación, un registro local de folios y la búsqueda de archivos CAF en disco.
Registro de compras y ventasLos documentos y los resúmenes oficiales de un período, el catálogo de los 49 códigos de documento del registro, la reclasificación de compras y el respaldo MIPYME con el XML de los documentos emitidos y recibidos.
Muestras impresasUn PDF por documento según el manual del SII, con su timbre PDF417 y la oficina del SII de la comuna del emisor.
CertificaciónLos sets de pruebas del SII leídos y emitidos, sus libros, la simulación, las respuestas de intercambio, un ejecutor reanudable y la certificación de boletas.
Dos propiedades valen para todo lo anterior. El modelo de dominio está en inglés (totalAmount, issuer.businessName) y se traduce a las etiquetas oficiales del SII (MntTotal, RznSoc) mediante un códec. Los errores son valores DteError tipados, con códigos estables y sin datos personales en sus mensajes (Errores).
El ciclo de vida de un vistazo#
Todo documento pasa por los mismos pasos. Cada función recibe el resultado de la anterior y los tipos impiden saltarse un paso: no puedes firmar un documento que no se ha timbrado.
| Paso | Función | Qué ocurre |
|---|---|---|
| 1. Crear | createDocument() | Valida la entrada, sanea el texto, numera las líneas y calcula los totales |
| 2. Timbrar | stampDocument() | Arma el TED y lo firma con la llave privada del CAF |
| 3. Firmar | signDocument() | Firma el documento con tu certificado (XMLDSig envuelta); el resultado trae el XML final |
| 1 a 3 de una vez | issueDocument() | Ejecuta los tres pasos anteriores en una sola llamada |
| 4. Sobre | createEnvelope(), signEnvelope() | Agrupa documentos firmados bajo una carátula y firma el SetDTE (EnvioDTE o EnvioBOLETA) |
| 5. Enviar | createSiiClient(), uploadEnvelope() | Se autentica con el SII y sube el sobre; devuelve un track id |
| 6. Seguir | waitForUploadStatus() | Consulta al SII hasta que el envío deja de estar pendiente |
El mismo patrón se repite para los libros (createPurchaseSalesBook(), signPurchaseSalesBook(), uploadBook()) y el reporte de consumo de folios. El Inicio rápido recorre todo el camino.
Ejemplo rápido#
import { readFileSync } from 'node:fs'
import { loadCertificateFromPkcs12, parseCaf, issueDocument, createEnvelope, signEnvelope, encodeLatin1 } from 'dte-sdk'
const certificate = loadCertificateFromPkcs12(readFileSync('firma.pfx'), process.env.PFX_PASSWORD!)
const caf = parseCaf(readFileSync('caf-33.xml', 'utf8'))
const invoice = issueDocument({
document: {
type: 33,
folio: 1,
issuer: {
rut: '76543210-3',
businessName: 'Comercial Andina SpA',
businessActivity: 'Software',
address: 'Av. Los Aromos 1540',
commune: 'Santiago',
activityCode: 620200,
},
receiver: {
rut: '12345678-5',
businessName: 'Comercializadora Rapel Ltda',
businessActivity: 'Comercio',
address: 'Pasaje Los Olmos 88',
commune: 'Providencia',
},
items: [{ name: 'Plan anual', quantity: 1, unitPrice: 100000 }],
},
caf,
certificate,
})
invoice.header.totals // { netAmount: 100000, vatRate: 19, vatAmount: 19000, totalAmount: 119000 }
invoice.xml // <DTE> firmado, con su TED
const envelope = signEnvelope(
createEnvelope({
kind: 'dte',
documents: [invoice],
cover: {
issuerRut: '76543210-3',
senderRut: certificate.rut!,
resolutionDate: '2024-01-15',
resolutionNumber: 123,
},
}),
certificate,
)
encodeLatin1(envelope.xml) // bytes ISO-8859-1, tal como los recibe el SIIEl Inicio rápido continúa desde aquí: envía el sobre al ambiente de certificación del SII y lee la respuesta.
Qué necesitas#
El paquete se ocupa del formato, la criptografía y el transporte. Para emitir documentos que el SII acepte necesitas además tres cosas que solo entregan el SII y un proveedor de certificados:
- Un CAF (Código de Autorización de Folios) por cada tipo de documento que emitas: el archivo que autoriza un rango de folios. Contiene una llave privada, así que es un secreto.
- Un certificado digital, como archivo
.pfxo.p12o como PEM, de una persona autorizada para firmar por la empresa. También es un secreto. - Autorización como emisor electrónico: el número y la fecha de la resolución del SII, o el proceso de certificación (el ambiente de pruebas del SII) mientras validas tu sistema.
Conceptos básicos explica cada uno. Lee Seguridad antes de ponerlos en un servidor.
Puntos de entrada#
El paquete tiene cuatro entradas, separadas según lo que necesitan del entorno de ejecución. DteError y isDteError vienen de dte-sdk y reconocen lo que lanza cualquier entrada. Puntos de entrada explica la separación.
| Importa desde | Qué contiene | Dónde corre |
|---|---|---|
dte-sdk | Documentos, timbres, firmas, sobres, libros, la verificación de documentos recibidos, el cliente de los servicios web del SII sobre fetch y el registro público de emisores autorizados | Node, Bun, Deno; se empaqueta para el navegador sin configuración |
dte-sdk/node | Adaptadores de Node: transporte HTTPS, captura HTTP, archivo de envíos, caché de tokens y sesiones, registro de folios y búsqueda de archivos CAF en disco | Node |
dte-sdk/portal | Portal del SII, folios y solicitud de CAF, registro de compras y ventas, respaldo MIPYME, verificación de actividades y certificación | Node |
dte-sdk/pdf | Muestras impresas y la oficina del SII de cada comuna | Node, con pdf-lib y bwip-js instalados |
Siguientes pasos#
Requisitos, instalar y fijar la versión, y una prueba de que funciona.
Inicio rápidoEmite una factura tipo 33 y una boleta de punta a punta, del certificado al estado en el SII.
Conceptos básicosTipos de DTE, folios y CAF, el TED, sobres, ambientes, libros y certificación.
Puntos de entradaQué contiene cada una de las cuatro entradas y por qué están separadas.
Estado del proyectoVersiones, qué se probó contra el SII real, qué queda fuera de alcance y cómo se cuida la calidad.
FuncionalidadesCada área en detalle.
Referencia de la APICada función, tipo y constante, por punto de entrada.
EjemplosFlujos completos que puedes copiar: factura, nota de crédito, boleta y folios.
Licencia#
MIT © Arrow Software. Uso libre personal y comercial, incluso en productos cerrados y de pago, sin más obligación de atribución que conservar el aviso de licencia.