@devlas/dte-sii 2.22.0 → 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.
Files changed (2) hide show
  1. package/SiiPortalAuth.js +30 -0
  2. package/package.json +1 -1
package/SiiPortalAuth.js CHANGED
@@ -821,7 +821,37 @@ class SiiPortalAuth {
821
821
  * El HTML tiene filas <tr><td>Label</td><td>&nbsp;Valor</td></tr>
822
822
  * @private
823
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
+
824
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
+
825
855
  const datos = {};
826
856
  const decode = s => s
827
857
  .replace(/<[^>]+>/g, '')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devlas/dte-sii",
3
- "version": "2.22.0",
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",