@devlas/dte-sii 2.21.1 → 2.23.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/SiiPortalAuth.js +45 -0
- package/package.json +1 -1
package/SiiPortalAuth.js
CHANGED
|
@@ -510,6 +510,21 @@ class SiiPortalAuth {
|
|
|
510
510
|
throw errLimite;
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
+
// El certificado nunca fue habilitado como método de login en el SII: trámite manual
|
|
514
|
+
// único del contribuyente (sii.cl, Clave Tributaria, Cambiar clave, habilitar
|
|
515
|
+
// autenticación con Certificado Digital), no un problema del certificado en sí ni de
|
|
516
|
+
// esta librería. Sin esta deteccion caía en el genérico "no se recibieron cookies", que
|
|
517
|
+
// no dice qué hacer -- caso real verificado el 2026-09-09 (RUT anonimizado en los tests).
|
|
518
|
+
if (r2.body.includes('Cambiar clave') || r2.body.includes('01.01.215.500.473')) {
|
|
519
|
+
const errNoHabilitado = new Error(
|
|
520
|
+
'SiiPortalAuth: el certificado no está habilitado como método de autenticación en el SII.\n' +
|
|
521
|
+
'El contribuyente debe entrar a sii.cl, Clave Tributaria, Cambiar clave, habilitar ' +
|
|
522
|
+
'autenticación con Certificado Digital, y asociar este certificado. No se resuelve reintentando.'
|
|
523
|
+
);
|
|
524
|
+
errNoHabilitado.code = 'CERTIFICADO_NO_HABILITADO';
|
|
525
|
+
throw errNoHabilitado;
|
|
526
|
+
}
|
|
527
|
+
|
|
513
528
|
const autenticado = Object.keys(cookieJar).some(k => k.startsWith('NETSCAPE_LIVEWIRE'));
|
|
514
529
|
if (!autenticado) {
|
|
515
530
|
throw new Error('SiiPortalAuth: autenticación fallida — no se recibieron cookies de sesión NETSCAPE_LIVEWIRE.*');
|
|
@@ -806,7 +821,37 @@ class SiiPortalAuth {
|
|
|
806
821
|
* El HTML tiene filas <tr><td>Label</td><td> Valor</td></tr>
|
|
807
822
|
* @private
|
|
808
823
|
*/
|
|
824
|
+
/**
|
|
825
|
+
* "el Contribuyente no está autorizado para operar en esta modalidad" — la empresa nunca
|
|
826
|
+
* quedó postulada (y/o enrolada) como emisor electrónico ante el SII, así que ad_empresa2
|
|
827
|
+
* ni siquiera devuelve la tabla de datos que `_parsearTablaEmpresa` espera: devuelve esta
|
|
828
|
+
* página de rechazo. Mismo patrón y mismo código de error que `CafSolicitor.esEmpresaNoAutorizada`
|
|
829
|
+
* (`EMPRESA_NO_AUTORIZADA`) — ahí ya existía para otro flujo, acá faltaba. Sin esto caía en
|
|
830
|
+
* el genérico "no se encontraron datos de resolución", que no dice qué falta. Caso real
|
|
831
|
+
* verificado el 2026-09-10 (RUT anonimizado en los tests).
|
|
832
|
+
*/
|
|
833
|
+
static esEmpresaNoAutorizada(html) {
|
|
834
|
+
const texto = String(html || '').replace(/<[^>]+>/g, ' ');
|
|
835
|
+
// El SII usa dos sujetos distintos para el mismo rechazo, segun la pagina: "la empresa
|
|
836
|
+
// no esta autorizada" (ver CafSolicitor.esEmpresaNoAutorizada) y "el Contribuyente no
|
|
837
|
+
// esta autorizado" (ad_empresa2, caso real 2026-09-10) -- distinto genero tambien
|
|
838
|
+
// (autorizada/autorizado), por eso el [oa] al final en vez de repetir todo el patron.
|
|
839
|
+
return /(empresa|contribuyente)\s+no\s+est.{0,8}\s*autorizad[oa]\s+para\s+operar/i.test(texto);
|
|
840
|
+
}
|
|
841
|
+
|
|
809
842
|
static _parsearTablaEmpresa(html) {
|
|
843
|
+
if (SiiPortalAuth.esEmpresaNoAutorizada(html)) {
|
|
844
|
+
const err = new Error(
|
|
845
|
+
'SiiPortalAuth: la empresa no está autorizada para operar en esta modalidad. ' +
|
|
846
|
+
'No es un problema de datos ni de sesión: el SII no reconoce a la empresa como ' +
|
|
847
|
+
'emisor electrónico en este ambiente. Las dos causas habituales son que todavía ' +
|
|
848
|
+
'no complete la certificación (en producción no queda autorizada hasta entonces) ' +
|
|
849
|
+
'o que nunca se haya corrido la Postulación/Enrolamiento.'
|
|
850
|
+
);
|
|
851
|
+
err.code = 'EMPRESA_NO_AUTORIZADA';
|
|
852
|
+
throw err;
|
|
853
|
+
}
|
|
854
|
+
|
|
810
855
|
const datos = {};
|
|
811
856
|
const decode = s => s
|
|
812
857
|
.replace(/<[^>]+>/g, '')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devlas/dte-sii",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.23.0",
|
|
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",
|