@devlas/dte-sii 2.9.7 → 2.11.0
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/EnviadorSII.js +100 -54
- package/LICENSE +27 -27
- package/LibroCompraVenta.js +141 -17
- package/LibroGuia.js +36 -25
- package/SiiCertificacion.js +85 -3
- package/SiiPortalAuth.js +85 -19
- package/WsReclamo.js +434 -434
- package/cert/BoletaCert.js +41 -4
- package/cert/CertRunner.js +1123 -1209
- package/cert/LibroCompras.js +3 -2
- package/cert/LibroGuias.js +2 -1
- package/cert/LibroVentas.js +2 -1
- package/cert/MuestrasImpresas.js +831 -131
- package/cert/comunaOficina.js +458 -458
- package/cert/index.js +122 -122
- package/cert/types.js +328 -328
- package/package.json +2 -3
- package/test-muestras.js +180 -0
- package/test-qdetestlibro.js +174 -0
- package/utils/progress.js +4 -0
- package/utils/browser.js +0 -79
package/cert/BoletaCert.js
CHANGED
|
@@ -162,6 +162,7 @@ class BoletaCert {
|
|
|
162
162
|
tipo: 39,
|
|
163
163
|
folio: folioActual,
|
|
164
164
|
fechaEmision: fechaHoy,
|
|
165
|
+
precioConIva: true, // Set de pruebas SII define precios "con IVA" (precio al consumidor)
|
|
165
166
|
emisor: {
|
|
166
167
|
RUTEmisor: this.emisor.rut,
|
|
167
168
|
RznSocEmisor: this.emisor.razon_social,
|
|
@@ -453,8 +454,34 @@ class BoletaCert {
|
|
|
453
454
|
}
|
|
454
455
|
} else {
|
|
455
456
|
console.log(` [OK] Enviado - TrackId: ${resultadoBoleta.trackId}`);
|
|
457
|
+
|
|
458
|
+
// Verificar estado SOAP antes de continuar. Error 6 "Rut No Autorizado a Firmar"
|
|
459
|
+
// es fatal — reintentar con otro sec no sirve de nada.
|
|
460
|
+
process.stderr.write(`[PROGRESS]${JSON.stringify({ step: 'BOLETA_SOAP_CHECK' })}\n`);
|
|
461
|
+
console.log(` ⏳ Esperando 20s para verificar estado SOAP del EnvioBOLETA...`);
|
|
462
|
+
await new Promise(r => setTimeout(r, 20000));
|
|
463
|
+
try {
|
|
464
|
+
const _estadoBoleta = await enviador.consultarEstadoSoap(resultadoBoleta.trackId, this.emisor.rut);
|
|
465
|
+
console.log(` [Estado SOAP EnvioBOLETA] ${_estadoBoleta.estado} — ${_estadoBoleta.mensaje}`);
|
|
466
|
+
if (_estadoBoleta.esRechazado) {
|
|
467
|
+
const _glosa = _estadoBoleta.glosa || _estadoBoleta.estado || '?';
|
|
468
|
+
const _esAuth = /autorizado|autorizar|firmar|permiso/i.test(_glosa);
|
|
469
|
+
console.log(` [ERR] EnvioBOLETA rechazado por SII${_esAuth ? ' (error de autorización)' : ''}: ${_glosa}`);
|
|
470
|
+
return {
|
|
471
|
+
success: false,
|
|
472
|
+
error: `EnvioBOLETA rechazado por SII: ${_glosa} (${_estadoBoleta.estado})`,
|
|
473
|
+
fase: 'EnvioBOLETA-SOAP',
|
|
474
|
+
noAutorizado: _esAuth,
|
|
475
|
+
estadoSoap: _estadoBoleta.estado,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
// Estado intermedio (REC, SOK, FOK…) → SII aún procesa, continuar con RCOF
|
|
479
|
+
} catch (_e) {
|
|
480
|
+
console.log(` [!] No se pudo verificar estado SOAP EnvioBOLETA: ${_e.message} — continuando`);
|
|
481
|
+
}
|
|
456
482
|
}
|
|
457
|
-
|
|
483
|
+
|
|
484
|
+
process.stderr.write(`[PROGRESS]${JSON.stringify({ step: 'BOLETA_RCOF' })}\n`);
|
|
458
485
|
// 5 & 6. Generar y enviar RCOF — loop hasta que SII lo acepte o se agoten intentos.
|
|
459
486
|
// Estrategia: enviar → si ok, esperar 30s → consultar estado (EPR o RPR = éxito).
|
|
460
487
|
// Si DUPLICADO: el SII ya tiene un RCOF para este RUT/período. El entorno de certificación
|
|
@@ -528,8 +555,17 @@ class BoletaCert {
|
|
|
528
555
|
break;
|
|
529
556
|
}
|
|
530
557
|
|
|
531
|
-
// SII lo rechazó explícitamente
|
|
532
|
-
|
|
558
|
+
// SII lo rechazó explícitamente.
|
|
559
|
+
// Si es un error de autorización (error 6 "Rut No Autorizado a Firmar"),
|
|
560
|
+
// cambiar sec no sirve — abortar inmediatamente.
|
|
561
|
+
const _glosaRcof = estadoRcof.glosa || estadoRcof.mensaje || '';
|
|
562
|
+
const _esAuthRcof = /autorizado|autorizar|firmar|permiso/i.test(_glosaRcof);
|
|
563
|
+
if (_esAuthRcof) {
|
|
564
|
+
console.log(` [ERR-AUTH] RCOF rechazado por error de autorización (${estadoRcof.estado}): ${_glosaRcof} — abortando (reintentar no ayuda)`);
|
|
565
|
+
resultadoRCOF = { ok: false, error: `Empresa no autorizada para firmar RCOF: ${_glosaRcof}`, noAutorizado: true };
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
console.log(` [⚠️ RECHAZADO] RCOF sec=${secActual} rechazado (${estadoRcof.estado}: ${_glosaRcof}). Probando sec=${secActual + 1}...`);
|
|
533
569
|
trackIdRCOFloop = null;
|
|
534
570
|
}
|
|
535
571
|
|
|
@@ -542,7 +578,8 @@ class BoletaCert {
|
|
|
542
578
|
success: false,
|
|
543
579
|
error: resultadoRCOF.error,
|
|
544
580
|
fase: 'RCOF',
|
|
545
|
-
|
|
581
|
+
noAutorizado: resultadoRCOF.noAutorizado || false,
|
|
582
|
+
trackIdBoleta: resultadoBoleta.trackId,
|
|
546
583
|
};
|
|
547
584
|
}
|
|
548
585
|
}
|