@devlas/dte-sii 2.12.25 → 2.12.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DTE.js +7 -0
- package/Envio.js +5 -0
- package/README.md +15 -0
- package/cert/BoletaCert.js +8 -0
- package/cert/CertRunner.js +14 -0
- package/package.json +1 -1
package/DTE.js
CHANGED
|
@@ -350,6 +350,13 @@ class DTE {
|
|
|
350
350
|
format: false,
|
|
351
351
|
});
|
|
352
352
|
|
|
353
|
+
// NO QUITAR estos dos xmlns del <DTE>. NO son redundantes aunque el sobre
|
|
354
|
+
// <EnvioBOLETA>/<EnvioDTE> también los declare.
|
|
355
|
+
// El DigestValue de la firma se calcula en _c14nDocumento(), que lee el xmlns
|
|
356
|
+
// desde el <DTE> y lo hereda al <Documento> canonicalizado. Si se quita, se
|
|
357
|
+
// firma un <Documento> sin namespace, pero el SII lo canonicaliza CON
|
|
358
|
+
// xmlns="http://www.sii.cl/SiiDte" (lo hereda igual) → los digests no coinciden
|
|
359
|
+
// → "firma inválida" / rechazo. Tampoco stripearlos después en Envio.js.
|
|
353
360
|
const dteConVersion = {
|
|
354
361
|
'@_xmlns': 'http://www.sii.cl/SiiDte',
|
|
355
362
|
'@_xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
package/Envio.js
CHANGED
|
@@ -81,6 +81,11 @@ class EnvioBase {
|
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
83
|
* Extraer XML de DTEs sin declaration
|
|
84
|
+
*
|
|
85
|
+
* NO stripear el xmlns del <DTE> aquí (aunque el sobre ya lo declare). Ese
|
|
86
|
+
* namespace es parte del documento firmado: el DigestValue de la firma se
|
|
87
|
+
* calculó heredándolo al <Documento>. Si se quita, el SII recalcula el digest
|
|
88
|
+
* CON el namespace y no coincide → "firma inválida". Solo quitar el prolog XML.
|
|
84
89
|
*/
|
|
85
90
|
_extractDTEsXml() {
|
|
86
91
|
return this.dtes.map(dte => {
|
package/README.md
CHANGED
|
@@ -197,6 +197,21 @@ const estadoDte = await enviador.consultarEstadoDte({
|
|
|
197
197
|
|
|
198
198
|
## Boletas electrónicas
|
|
199
199
|
|
|
200
|
+
> **Recomendado para CERTIFICAR boletas: usar `CertRunner` + `BoletaCert`, no el camino manual.**
|
|
201
|
+
>
|
|
202
|
+
> Para el proceso de certificación de boletas ante el SII, use el orquestador de
|
|
203
|
+
> alto nivel (`require('@devlas/dte-sii/cert')` → `CertRunner` / `BoletaCert`). Ese
|
|
204
|
+
> camino descarga el set, genera y firma las boletas, arma el `EnvioBOLETA` + RCOF,
|
|
205
|
+
> obtiene el TrackId y declara el cumplimiento. Es el flujo probado end-to-end.
|
|
206
|
+
>
|
|
207
|
+
> El camino manual de bajo nivel (`DTE` + `EnvioBOLETA` + `EnviadorSII`) que se
|
|
208
|
+
> muestra más abajo funciona, pero es fácil romperlo. **Error frecuente:** "optimizar"
|
|
209
|
+
> quitando los `xmlns` del `<DTE>` por parecer redundantes con el sobre. NO lo haga:
|
|
210
|
+
> el `xmlns="http://www.sii.cl/SiiDte"` del `<DTE>` es parte del documento firmado
|
|
211
|
+
> (se hereda al `<Documento>` al calcular el DigestValue). Si lo quita, el SII
|
|
212
|
+
> recalcula el digest con el namespace y no coincide → rechazo por "firma inválida".
|
|
213
|
+
> Ver [Certificación SII](#certificación-sii).
|
|
214
|
+
|
|
200
215
|
> **Diferencia crítica por ambiente**
|
|
201
216
|
>
|
|
202
217
|
> - **Producción** → usar la API **REST** del SII (`enviarBoleta`) con los datos reales de resolución de la empresa.
|
package/cert/BoletaCert.js
CHANGED
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
* 3. Se genera RCOF (ConsumoFolio) para reportar los folios usados
|
|
13
13
|
* 4. Se envían ambos documentos al SII
|
|
14
14
|
* 5. SII valida y aprueba
|
|
15
|
+
*
|
|
16
|
+
* NOTA sobre el RCOF (ConsumoFolio):
|
|
17
|
+
* El RCOF está deprecado en producción y ya no se usa en la operación normal.
|
|
18
|
+
* Solo se mantiene aquí porque este paso de certificación todavía lo exige.
|
|
19
|
+
* Al enviarlo, el SII puede devolver reparos: eso es esperado en certificación
|
|
20
|
+
* y no bloquea el avance del proceso.
|
|
15
21
|
*/
|
|
16
22
|
|
|
17
23
|
const path = require('path');
|
|
@@ -482,6 +488,8 @@ class BoletaCert {
|
|
|
482
488
|
}
|
|
483
489
|
|
|
484
490
|
process.stderr.write(`[PROGRESS]${JSON.stringify({ step: 'BOLETA_RCOF' })}\n`);
|
|
491
|
+
// RCOF deprecado en producción: solo se envía aquí porque la certificación aún
|
|
492
|
+
// lo exige. Reparos del SII en este envío son esperados y NO bloquean el avance.
|
|
485
493
|
// 5 & 6. Generar y enviar RCOF — loop hasta que SII lo acepte o se agoten intentos.
|
|
486
494
|
// Estrategia: enviar → si ok, esperar 30s → consultar estado (EPR o RPR = éxito).
|
|
487
495
|
// Si DUPLICADO: el SII ya tiene un RCOF para este RUT/período. El entorno de certificación
|
package/cert/CertRunner.js
CHANGED
|
@@ -3073,6 +3073,20 @@ class CertRunner {
|
|
|
3073
3073
|
// ═══════════════════════════════════════════════════════════════
|
|
3074
3074
|
// BOLETA ELECTRÓNICA — automatización portal certBolElectDteInternet
|
|
3075
3075
|
// ═══════════════════════════════════════════════════════════════
|
|
3076
|
+
//
|
|
3077
|
+
// Métodos que se usan para la CERTIFICACIÓN DE BOLETAS (flujo, en orden):
|
|
3078
|
+
// 1. obtenerSetBoletaPortal → descarga el Set de Pruebas (?SET=1)
|
|
3079
|
+
// 2. (BoletaCert.ejecutarCertificacion emite EnvioBOLETA + RCOF → devuelve trackId)
|
|
3080
|
+
// 3. solicitarValidacionBoletaPortal → declara el trackId del envío (?SET=2)
|
|
3081
|
+
// 4. completarDeclaracionBoletaPortal→ declara cumplimiento y autoriza producción
|
|
3082
|
+
//
|
|
3083
|
+
// Apoyo (solo lectura / recuperación de estado):
|
|
3084
|
+
// - consultarEstadoBoletaPortal → estado en el portal GWT de boleta
|
|
3085
|
+
// - verificarAutorizacionBoleta → confirma si la empresa ya emite tipo 39
|
|
3086
|
+
//
|
|
3087
|
+
// El portal de boleta usa GWT-RPC (certBolElectDteInternet), distinto del portal
|
|
3088
|
+
// pe_avance usado para facturas/DTE. La certificación de boletas NO usa las fases
|
|
3089
|
+
// de sets/libros/simulación/intercambio/muestras; esas son solo del track DTE.
|
|
3076
3090
|
|
|
3077
3091
|
/**
|
|
3078
3092
|
* Descarga el Set de Pruebas de Boleta Electrónica desde el portal SII.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devlas/dte-sii",
|
|
3
|
-
"version": "2.12.
|
|
3
|
+
"version": "2.12.26",
|
|
4
4
|
"description": "Facturación y boletas electrónicas para el SII de Chile. Genera, timbra, firma y envía DTEs, libros electrónicos y automatiza la certificación.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "dte-sii.d.ts",
|