@devlas/dte-sii 2.5.9 → 2.5.11

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 CHANGED
@@ -818,7 +818,7 @@ class EnviadorSII {
818
818
 
819
819
  switch (estado) {
820
820
  case 'EPR':
821
- mensaje = '✅ Envío Procesado - ¡Listo para declarar cumplimiento!';
821
+ mensaje = '✅ Envío Procesado';
822
822
  esExitoso = true;
823
823
  break;
824
824
  case 'RPR':
@@ -873,50 +873,72 @@ class EnviadorSII {
873
873
  mensaje = `❌ Rechazado: ${glosa || 'Error en documento'}`;
874
874
  esRechazado = true;
875
875
  break;
876
- // Códigos numéricos del SII (QueryEstUp)
876
+ // Códigos de schema/firma rechazados
877
+ case 'RSC':
878
+ mensaje = `❌ Rechazado por Error en Schema: ${glosa || 'XML no cumple XSD del SII'}`;
879
+ esRechazado = true;
880
+ break;
881
+ case 'PDR':
882
+ mensaje = '⏳ Envío en Proceso - Validando...';
883
+ esIntermedio = true;
884
+ break;
885
+ // Códigos numéricos negativos = errores del servicio de consulta SII (NO rechazo del documento)
886
+ // Según doc SII: son errores del sistema de consulta, el documento puede estar OK
877
887
  case '-11':
878
- mensaje = `⏳ Pendiente de proceso - El sobre aún no ha sido revisado por el SII`;
888
+ mensaje = `⏳ Error de consulta SII (ERR/SQL/SRV_CODE) - Reintente más tarde`;
889
+ esIntermedio = true;
890
+ break;
891
+ case '-12':
892
+ mensaje = `⏳ Error retorno consulta SII - Reintente más tarde`;
893
+ esIntermedio = true;
894
+ break;
895
+ case '-13':
896
+ mensaje = `⏳ Error: RUT usuario nulo - Verificar autenticación`;
897
+ esIntermedio = true;
898
+ break;
899
+ case '-14':
900
+ mensaje = `⏳ Error XML retorno datos SII - Reintente más tarde`;
879
901
  esIntermedio = true;
880
902
  break;
881
903
  case '-10':
882
- mensaje = `❌ Token inválido o no autorizado`;
883
- esRechazado = true;
904
+ mensaje = `⏳ Error validación RUT usuario - Verificar credenciales`;
905
+ esIntermedio = true;
884
906
  break;
885
907
  case '-9':
886
- mensaje = `❌ Firma del envío inválida - ${glosa || 'Verificar certificado'}`;
887
- esRechazado = true;
908
+ mensaje = `⏳ Error retorno datos SII - Reintente más tarde`;
909
+ esIntermedio = true;
888
910
  break;
889
911
  case '-8':
890
- mensaje = `❌ El envío no pertenece al firmante`;
891
- esRechazado = true;
912
+ mensaje = `⏳ Error retorno datos SII - Reintente más tarde`;
913
+ esIntermedio = true;
892
914
  break;
893
915
  case '-7':
894
- mensaje = `❌ Error en datos del receptor - ${glosa || 'Verificar RUT receptor'}`;
895
- esRechazado = true;
916
+ mensaje = `⏳ Error retorno datos SII - Reintente más tarde`;
917
+ esIntermedio = true;
896
918
  break;
897
919
  case '-6':
898
- mensaje = `❌ Error en datos del emisor - ${glosa || 'Verificar RUT emisor'}`;
899
- esRechazado = true;
920
+ mensaje = `⏳ Error: Usuario no autorizado para consultar - Verificar credenciales`;
921
+ esIntermedio = true;
900
922
  break;
901
923
  case '-5':
902
- mensaje = `❌ Error de certificación - ${glosa || 'Verificar proceso de certificación'}`;
903
- esRechazado = true;
924
+ mensaje = `⏳ Error retorno datos SII - Reintente más tarde`;
925
+ esIntermedio = true;
904
926
  break;
905
927
  case '-4':
906
- mensaje = `❌ Envío fuera de plazo - ${glosa || 'El plazo de envío ha vencido'}`;
907
- esRechazado = true;
928
+ mensaje = `⏳ Error obtención de datos SII - Reintente más tarde`;
929
+ esIntermedio = true;
908
930
  break;
909
931
  case '-3':
910
- mensaje = `❌ RUT emisor no coincide con el certificado`;
911
- esRechazado = true;
932
+ mensaje = `⏳ Error: RUT usuario no existe en SII - Verificar autenticación`;
933
+ esIntermedio = true;
912
934
  break;
913
935
  case '-2':
914
- mensaje = `❌ Error de firma en el sobre - ${glosa || 'Verificar firma digital'}`;
915
- esRechazado = true;
936
+ mensaje = `⏳ Error retorno SII - Reintente más tarde`;
937
+ esIntermedio = true;
916
938
  break;
917
939
  case '-1':
918
- mensaje = `❌ Error de schema XML - ${glosa || 'El XML no cumple el XSD del SII'}`;
919
- esRechazado = true;
940
+ mensaje = `⏳ Error: Campo estado no retornado por SII - Reintente más tarde`;
941
+ esIntermedio = true;
920
942
  break;
921
943
  case '0':
922
944
  mensaje = `⏳ Enviado al SII, pendiente de validación`;
@@ -936,6 +958,7 @@ class EnviadorSII {
936
958
  glosa,
937
959
  mensaje,
938
960
  numAtencion: numAtencionMatch ? numAtencionMatch[1] : null,
961
+ xmlRaw: decoded,
939
962
  };
940
963
  }
941
964
 
package/README.md CHANGED
@@ -78,6 +78,40 @@ console.log(resultado.trackId)
78
78
 
79
79
  Soporta `'certificacion'` y `'produccion'`. Pasarlo al instanciar `EnviadorSII`.
80
80
 
81
+ ## Estados SII — Interpretación de respuestas
82
+
83
+ `EnviadorSII` interpreta automáticamente los códigos del SII en tres categorías:
84
+
85
+ ### QueryEstUp — Estado del sobre de envío
86
+
87
+ | Código | Descripción | `esExitoso` | `esIntermedio` | `esRechazado` |
88
+ |--------|-------------|:-----------:|:--------------:|:-------------:|
89
+ | `EPR` | Envío Procesado | ✅ | | |
90
+ | `RPR` | Procesado con Reparos | ✅ | | |
91
+ | `REC` / `SOK` / `FOK` / `CRT` / `PRD` / `PDR` | En proceso de validación | | ✅ | |
92
+ | `RSC` | Error en Schema XML | | | ✅ |
93
+ | `RFR` | Error en Firma Digital | | | ✅ |
94
+ | `RCT` | Error en Carátula | | | ✅ |
95
+
96
+ ### QueryEstDte — Estado del DTE individual
97
+
98
+ | Código | Descripción | Clasificación |
99
+ |--------|-------------|---------------|
100
+ | `DOK` | Datos coinciden | ✅ Exitoso |
101
+ | `DNK` | Datos no coinciden | ⏳ Intermedio |
102
+ | `FAU` | Folio no autorizado | ❌ Rechazado |
103
+ | `FNA` | Emisor no habilitado | ❌ Rechazado |
104
+ | `FAN` / `AND` / `ANC` | Anulado | ❌ Rechazado |
105
+ | `EMP` | Empresa sin autorización | ❌ Rechazado |
106
+
107
+ ### Códigos negativos (errores de consulta)
108
+
109
+ Los códigos `-1` a `-14` son **errores del servidor de consulta SII**, no implican rechazo del documento. Todos resultan en `esIntermedio = true` y se pueden reintentar.
110
+
111
+ > Ver `docs/README.md` en el repositorio para la tabla completa de estados con descripción detallada.
112
+
113
+ ---
114
+
81
115
  ## Licencia
82
116
 
83
117
  MIT — Copyright (c) 2026 [Devlas SpA](https://devlas.cl)
package/SiiPortalAuth.js CHANGED
@@ -326,7 +326,7 @@ class SiiPortalAuth {
326
326
  * @param {string} rutEmpresa - RUT sin DV (ej: "78206276")
327
327
  * @param {string} dvEmpresa - DV (ej: "K")
328
328
  * @param {Object} [cookieJar] - Sesión autenticada (si omite, autenticará)
329
- * @returns {Promise<Object>} { rut, razonSocial, direccion, comuna, acteco, glosa }
329
+ * @returns {Promise<Object>} { rut, razonSocial, direccion, comuna, dirReg, acteco, glosa }
330
330
  */
331
331
  async obtenerDatosContribuyente(rutEmpresa, dvEmpresa, cookieJar = null) {
332
332
  const jar = cookieJar || await this.autenticar();
@@ -395,14 +395,20 @@ class SiiPortalAuth {
395
395
  }
396
396
  }
397
397
 
398
+ const dirReg = datos['DIRECCIÓN REGIONAL DEL CONTRIBUYENTE'] || datos['DIRECCION REGIONAL DEL CONTRIBUYENTE'] || null;
399
+ const glosa = datos['GLOSA DESCRIPTIVA'] || null;
400
+
398
401
  return {
399
- rut: datos['DATOS DEL CONTRIBUYENTE RUT'] || null,
400
- razonSocial: datos['NOMBRE O RAZÓN SOCIAL'] || datos['NOMBRE O RAZON SOCIAL'] || null,
402
+ rut: datos['DATOS DEL CONTRIBUYENTE RUT'] || null,
403
+ razonSocial: datos['NOMBRE O RAZÓN SOCIAL'] || datos['NOMBRE O RAZON SOCIAL'] || null,
404
+ giro: actividades[0]?.descripcion || null, // descripción de la primera actividad económica
401
405
  direccion,
402
406
  comuna,
403
- acteco: actividades[0]?.codigo || null,
404
- actividades: actividades.length ? actividades : null,
405
- glosa: datos['GLOSA DESCRIPTIVA'] || null,
407
+ dirReg,
408
+ sucursal_sii: dirReg ? `S.I.I. - ${dirReg}` : null,
409
+ acteco: actividades[0]?.codigo || null,
410
+ actividades: actividades.length ? actividades : null,
411
+ glosa,
406
412
  };
407
413
  }
408
414
 
@@ -1,5 +1,5 @@
1
- // Copyright (c) 2026 Devlas SpA — https://devlas.cl
2
- // Licencia MIT. Ver archivo LICENSE para mas detalles.
1
+ // Copyright (c) 2026 Devlas SpA — https://devlas.cl
2
+ // Licencia MIT. Ver archivo LICENSE para mas detalles.
3
3
  /**
4
4
  * MuestrasImpresas.js
5
5
  *
@@ -208,7 +208,7 @@ class MuestrasImpresas {
208
208
  * @param {string} tedXml - XML del TED
209
209
  * @returns {Promise<string>} Data URI de la imagen PNG
210
210
  */
211
- async generarPdf417(tedXml) {
211
+ async generarPdf417(tedXml, height = 12) {
212
212
  if (!tedXml || !tedXml.includes('<TED')) {
213
213
  throw new Error('No se encontró TED para generar PDF417');
214
214
  }
@@ -223,7 +223,7 @@ class MuestrasImpresas {
223
223
  bcid: 'pdf417',
224
224
  text: binaryString,
225
225
  scale: 3,
226
- height: 12,
226
+ height,
227
227
  padding: 6,
228
228
  includetext: false,
229
229
  // CRÍTICO: Indicar a bwip-js que el texto ya está en formato binario 8-bit
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devlas/dte-sii",
3
- "version": "2.5.9",
3
+ "version": "2.5.11",
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",