@devlas/dte-sii 2.14.2 → 2.14.3

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/cert/CertRunner.js +43 -5
  2. package/package.json +1 -1
@@ -3944,12 +3944,43 @@ class CertRunner {
3944
3944
  const listaParaDeclarar = estadoResp.includes('P90');
3945
3945
  const estadoMatch = estadoResp.match(/"(P\d+)"/);
3946
3946
  const listaVacia = /\/\/OK\[0,\[\]/.test(estadoResp);
3947
- const estado = listaParaDeclarar ? 'P90'
3948
- : estadoMatch ? estadoMatch[1]
3949
- : listaVacia ? 'sin_estado_sok_pendiente'
3950
- : 'desconocido';
3951
3947
 
3952
- return { success: true, inscrita: true, listaParaDeclarar, estado };
3948
+ // ⚠️ La consulta pregunta puntualmente por el estado 90, así que una lista vacía
3949
+ // significa "no está en P90" — y eso pasa en DOS situaciones opuestas:
3950
+ // a) todavía no llegó (el SII no emitió el SOK del set), o
3951
+ // b) YA lo pasó: declaró cumplimiento y avanzó a P91.
3952
+ //
3953
+ // Darlas por (a) siempre hacía que, después de una declaración exitosa, se
3954
+ // informara "esperando aprobación del SII (SOK)". La pantalla le pedía al usuario
3955
+ // esperar una etapa que ya había superado (visto el 17/08/2026, RUT 78441936-3:
3956
+ // declaró a las 14:01 con DECLARACION EFECTUADA y a las 14:5x seguía diciendo que
3957
+ // faltaba el SOK).
3958
+ //
3959
+ // Se desempata preguntando por el 91, que es el estado al que mueve
3960
+ // `autorizarEmpresaBolProd`.
3961
+ let estado = listaParaDeclarar ? 'P90'
3962
+ : estadoMatch ? estadoMatch[1]
3963
+ : listaVacia ? 'sin_estado_sok_pendiente'
3964
+ : 'desconocido';
3965
+ let yaDeclarada = false;
3966
+
3967
+ if (estado === 'sin_estado_sok_pendiente') {
3968
+ try {
3969
+ const resp91 = await gwtPost(
3970
+ `7|0|7|${CBE_BASE}|${CBE_POLICY}|${CBE_SVC}|obtenerEstadoAutorizaEmp|java.lang.Integer/3438268394|java.lang.String/2004016611|${dvUp}|1|2|3|4|4|5|6|5|6|5|${rutNum}|7|5|91|0|`
3971
+ );
3972
+ if (resp91.includes('P91')) {
3973
+ estado = 'P91';
3974
+ yaDeclarada = true;
3975
+ }
3976
+ } catch (e) {
3977
+ // Si la segunda consulta falla se conserva la lectura original: es un dato de
3978
+ // más, no una dependencia.
3979
+ console.log(` [!] No se pudo desempatar el estado con P91: ${e.message}`);
3980
+ }
3981
+ }
3982
+
3983
+ return { success: true, inscrita: true, listaParaDeclarar, estado, yaDeclarada };
3953
3984
  }
3954
3985
 
3955
3986
  async completarDeclaracionBoletaPortal({
@@ -3973,6 +4004,13 @@ class CertRunner {
3973
4004
  if (!estadoActual.inscrita) {
3974
4005
  return { success: false, error: 'No se pudo obtener representante vigente (facade CBE)' };
3975
4006
  }
4007
+ // Ya declaró y avanzó a P91: la etapa está cumplida, no pendiente. Sin este caso,
4008
+ // reintentar la declaración sobre una empresa ya declarada devolvía `pendingSok` y
4009
+ // la etapa quedaba "esperando" para siempre, esperando un SOK que ya había llegado
4010
+ // y ya se había usado.
4011
+ if (estadoActual.yaDeclarada) {
4012
+ return { success: true, yaDeclarada: true, mensaje: 'La declaración de cumplimiento ya estaba efectuada (P91)' };
4013
+ }
3976
4014
  if (!estadoActual.listaParaDeclarar) {
3977
4015
  const legible = estadoActual.estado === 'sin_estado_sok_pendiente'
3978
4016
  ? 'sin estado registrado (SOK aún no emitido)'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devlas/dte-sii",
3
- "version": "2.14.2",
3
+ "version": "2.14.3",
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",