@ramiidv/arca-padron 0.1.0 → 0.3.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 (152) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +106 -21
  3. package/dist/cjs/arca-padron.d.ts +98 -0
  4. package/dist/cjs/arca-padron.d.ts.map +1 -0
  5. package/dist/cjs/arca-padron.js +177 -0
  6. package/dist/cjs/arca-padron.js.map +1 -0
  7. package/dist/{base-client.d.ts → cjs/base-client.d.ts} +12 -2
  8. package/dist/cjs/base-client.d.ts.map +1 -0
  9. package/dist/cjs/base-client.js +52 -0
  10. package/dist/cjs/base-client.js.map +1 -0
  11. package/dist/cjs/condicion-iva.d.ts +24 -0
  12. package/dist/cjs/condicion-iva.d.ts.map +1 -0
  13. package/dist/cjs/condicion-iva.js +119 -0
  14. package/dist/cjs/condicion-iva.js.map +1 -0
  15. package/dist/{constants.d.ts → cjs/constants.d.ts} +21 -3
  16. package/dist/{constants.d.ts.map → cjs/constants.d.ts.map} +1 -1
  17. package/dist/cjs/constants.js +113 -0
  18. package/dist/cjs/constants.js.map +1 -0
  19. package/dist/{errors.d.ts → cjs/errors.d.ts} +3 -1
  20. package/dist/cjs/errors.d.ts.map +1 -0
  21. package/dist/cjs/errors.js +36 -0
  22. package/dist/cjs/errors.js.map +1 -0
  23. package/dist/cjs/index.d.ts +16 -0
  24. package/dist/cjs/index.d.ts.map +1 -0
  25. package/dist/cjs/index.js +56 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/mapping.d.ts +9 -0
  28. package/dist/cjs/mapping.d.ts.map +1 -0
  29. package/dist/cjs/mapping.js +14 -0
  30. package/dist/cjs/mapping.js.map +1 -0
  31. package/dist/cjs/package.json +1 -0
  32. package/dist/{padron-a10.d.ts → cjs/padron-a10.d.ts} +3 -1
  33. package/dist/cjs/padron-a10.d.ts.map +1 -0
  34. package/dist/cjs/padron-a10.js +73 -0
  35. package/dist/cjs/padron-a10.js.map +1 -0
  36. package/dist/{padron-a100.d.ts → cjs/padron-a100.d.ts} +2 -1
  37. package/dist/cjs/padron-a100.d.ts.map +1 -0
  38. package/dist/cjs/padron-a100.js +38 -0
  39. package/dist/cjs/padron-a100.js.map +1 -0
  40. package/dist/cjs/padron-a13.d.ts +24 -0
  41. package/dist/cjs/padron-a13.d.ts.map +1 -0
  42. package/dist/cjs/padron-a13.js +80 -0
  43. package/dist/cjs/padron-a13.js.map +1 -0
  44. package/dist/{padron-a4.d.ts → cjs/padron-a4.d.ts} +3 -1
  45. package/dist/cjs/padron-a4.d.ts.map +1 -0
  46. package/dist/cjs/padron-a4.js +173 -0
  47. package/dist/cjs/padron-a4.js.map +1 -0
  48. package/dist/cjs/padron-a5.d.ts +24 -0
  49. package/dist/cjs/padron-a5.d.ts.map +1 -0
  50. package/dist/cjs/padron-a5.js +156 -0
  51. package/dist/cjs/padron-a5.js.map +1 -0
  52. package/dist/cjs/soap-client.d.ts.map +1 -0
  53. package/dist/cjs/soap-client.js +13 -0
  54. package/dist/cjs/soap-client.js.map +1 -0
  55. package/dist/cjs/types.d.ts +346 -0
  56. package/dist/cjs/types.d.ts.map +1 -0
  57. package/dist/cjs/types.js +3 -0
  58. package/dist/cjs/types.js.map +1 -0
  59. package/dist/cjs/wsaa.d.ts.map +1 -0
  60. package/dist/cjs/wsaa.js +6 -0
  61. package/dist/cjs/wsaa.js.map +1 -0
  62. package/dist/esm/arca-padron.d.ts +98 -0
  63. package/dist/esm/arca-padron.d.ts.map +1 -0
  64. package/dist/esm/arca-padron.js +173 -0
  65. package/dist/esm/arca-padron.js.map +1 -0
  66. package/dist/esm/base-client.d.ts +36 -0
  67. package/dist/esm/base-client.d.ts.map +1 -0
  68. package/dist/esm/base-client.js +48 -0
  69. package/dist/esm/base-client.js.map +1 -0
  70. package/dist/esm/condicion-iva.d.ts +24 -0
  71. package/dist/esm/condicion-iva.d.ts.map +1 -0
  72. package/dist/esm/condicion-iva.js +116 -0
  73. package/dist/esm/condicion-iva.js.map +1 -0
  74. package/dist/esm/constants.d.ts +97 -0
  75. package/dist/esm/constants.d.ts.map +1 -0
  76. package/dist/{constants.js → esm/constants.js} +21 -3
  77. package/dist/esm/constants.js.map +1 -0
  78. package/dist/esm/errors.d.ts +22 -0
  79. package/dist/esm/errors.d.ts.map +1 -0
  80. package/dist/{errors.js → esm/errors.js} +3 -1
  81. package/dist/esm/errors.js.map +1 -0
  82. package/dist/esm/index.d.ts +16 -0
  83. package/dist/esm/index.d.ts.map +1 -0
  84. package/dist/esm/index.js +22 -0
  85. package/dist/esm/index.js.map +1 -0
  86. package/dist/esm/mapping.d.ts +9 -0
  87. package/dist/esm/mapping.d.ts.map +1 -0
  88. package/dist/esm/mapping.js +8 -0
  89. package/dist/esm/mapping.js.map +1 -0
  90. package/dist/esm/padron-a10.d.ts +18 -0
  91. package/dist/esm/padron-a10.d.ts.map +1 -0
  92. package/dist/{padron-a10.js → esm/padron-a10.js} +4 -9
  93. package/dist/esm/padron-a10.js.map +1 -0
  94. package/dist/esm/padron-a100.d.ts +16 -0
  95. package/dist/esm/padron-a100.d.ts.map +1 -0
  96. package/dist/{padron-a100.js → esm/padron-a100.js} +3 -9
  97. package/dist/esm/padron-a100.js.map +1 -0
  98. package/dist/esm/padron-a13.d.ts +24 -0
  99. package/dist/esm/padron-a13.d.ts.map +1 -0
  100. package/dist/esm/padron-a13.js +75 -0
  101. package/dist/esm/padron-a13.js.map +1 -0
  102. package/dist/esm/padron-a4.d.ts +18 -0
  103. package/dist/esm/padron-a4.d.ts.map +1 -0
  104. package/dist/{padron-a4.js → esm/padron-a4.js} +4 -9
  105. package/dist/esm/padron-a4.js.map +1 -0
  106. package/dist/esm/padron-a5.d.ts +24 -0
  107. package/dist/esm/padron-a5.d.ts.map +1 -0
  108. package/dist/esm/padron-a5.js +151 -0
  109. package/dist/esm/padron-a5.js.map +1 -0
  110. package/dist/esm/soap-client.d.ts +2 -0
  111. package/dist/esm/soap-client.d.ts.map +1 -0
  112. package/dist/esm/soap-client.js.map +1 -0
  113. package/dist/esm/types.d.ts +346 -0
  114. package/dist/esm/types.d.ts.map +1 -0
  115. package/dist/esm/types.js.map +1 -0
  116. package/dist/esm/wsaa.d.ts +3 -0
  117. package/dist/esm/wsaa.d.ts.map +1 -0
  118. package/dist/esm/wsaa.js.map +1 -0
  119. package/llms.txt +37 -15
  120. package/package.json +26 -18
  121. package/dist/arca-padron.d.ts +0 -70
  122. package/dist/arca-padron.d.ts.map +0 -1
  123. package/dist/arca-padron.js +0 -129
  124. package/dist/arca-padron.js.map +0 -1
  125. package/dist/base-client.d.ts.map +0 -1
  126. package/dist/base-client.js +0 -27
  127. package/dist/base-client.js.map +0 -1
  128. package/dist/constants.js.map +0 -1
  129. package/dist/errors.d.ts.map +0 -1
  130. package/dist/errors.js.map +0 -1
  131. package/dist/index.d.ts +0 -12
  132. package/dist/index.d.ts.map +0 -1
  133. package/dist/index.js +0 -16
  134. package/dist/index.js.map +0 -1
  135. package/dist/padron-a10.d.ts.map +0 -1
  136. package/dist/padron-a10.js.map +0 -1
  137. package/dist/padron-a100.d.ts.map +0 -1
  138. package/dist/padron-a100.js.map +0 -1
  139. package/dist/padron-a4.d.ts.map +0 -1
  140. package/dist/padron-a4.js.map +0 -1
  141. package/dist/soap-client.d.ts.map +0 -1
  142. package/dist/soap-client.js.map +0 -1
  143. package/dist/types.d.ts +0 -172
  144. package/dist/types.d.ts.map +0 -1
  145. package/dist/types.js.map +0 -1
  146. package/dist/wsaa.d.ts.map +0 -1
  147. package/dist/wsaa.js.map +0 -1
  148. /package/dist/{soap-client.d.ts → cjs/soap-client.d.ts} +0 -0
  149. /package/dist/{wsaa.d.ts → cjs/wsaa.d.ts} +0 -0
  150. /package/dist/{soap-client.js → esm/soap-client.js} +0 -0
  151. /package/dist/{types.js → esm/types.js} +0 -0
  152. /package/dist/{wsaa.js → esm/wsaa.js} +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ ## 0.3.0 (2026-10-30)
4
+
5
+ ### Breaking changes
6
+ - Requiere `@ramiidv/arca-common` ^0.3.0 (`AccessTicket.expirationTime` es un string ISO).
7
+ - `ImpuestoId.MONOTRIBUTO` es `20` (estaba como `21`, incorrecto según el manual de
8
+ `ws_sr_constancia_inscripcion`). `ImpuestoId.MONOTRIBUTO_SOCIAL` queda deprecado (mismo valor 20):
9
+ el monotributo social se identifica por la categoría.
10
+ - `status()` devuelve también `a5` y `a13`.
11
+
12
+ ### Features
13
+ - `getConstanciaInscripcion(cuit)`: constancia de inscripción (`ws_sr_constancia_inscripcion`,
14
+ `getPersona_v2`), que reemplaza a Padrón A5 (deprecado por ARCA). Tipo `PersonaA5` con datos
15
+ generales, domicilio fiscal, caracterizaciones, régimen general, monotributo y errores.
16
+ - `getPersonaA13(cuit)` y `getIdPersonaListByDocumento(dni)` (`ws_sr_padron_a13`).
17
+ - `condicionIvaDesdePadron(persona)`: condición frente al IVA para `CondicionIVAReceptorId` (también
18
+ reconoce el impuesto 30 en estado `EX` / `NA`).
19
+ - `ticketStorage`, `clockOffsetMs`, `autoClockSkew`, `signal` y `wsaa` en `ArcaPadronConfig`; `signal`
20
+ por llamada en todos los métodos.
21
+ - `ArcaPadronError` y `ArcaPadronServiceError` tienen `code` propio (`ARCA_PADRON_ERROR`,
22
+ `ARCA_PADRON_SERVICE_ERROR`).
23
+ - Re-exporta `CondicionIva`, `MemoryTicketStorage`, `FileTicketStorage` y `ArcaTicketVigenteError`.
24
+ - Build dual ESM + CommonJS con `exports` condicional, y smoke test CommonJS/ESM en CI.
25
+
26
+ ### Fixes
27
+ - Se quitaron dependencias que no se usaban (`fast-xml-parser`, `node-forge`): todo pasa por arca-common.
28
+ - A4, A10 y A100 no desenvolvían `personaReturn` / `parameterCollectionReturn`: con respuestas reales de
29
+ ARCA los datos quedaban vacíos y A100 devolvía `[]`.
30
+ - Documentación: el paquete es `@ramiidv/arca-padron` (decía `@ramiidv/arca-padron-sdk`, que da 404).
31
+ - Ejemplo de eventos: los campos son `service` y `source` (decía `serviceId`).
32
+
33
+ ### Estado de los servicios
34
+ Según el catálogo de web services de ARCA (consultado el 24/10/2026), A4, A10, A13 y A100 no están
35
+ deprecados; A5 sí (reemplazado por la constancia de inscripción).
36
+
37
+ ## 0.2.0
38
+
39
+ - Migración de WSAA/SOAP a `@ramiidv/arca-common`.
40
+
41
+ ## 0.1.0 (2026-03-31)
42
+
43
+ ### Features
44
+ - Initial release
45
+ - Padrón A4: full taxpayer data (domicilios, impuestos, actividades, regímenes, relaciones, categorías, emails, teléfonos)
46
+ - Padrón A10: minimal taxpayer data (name, status, domicilio fiscal)
47
+ - Padrón A100: parameter tables lookup (provincias, tipos documento, etc.)
48
+ - Auto-handles WSAA authentication
49
+ - Shared infrastructure from @ramiidv/arca-common
50
+ - Retry with exponential backoff on transient errors
51
+ - Event system for logging/debugging
package/README.md CHANGED
@@ -1,37 +1,48 @@
1
- # @ramiidv/arca-padron-sdk
1
+ # @ramiidv/arca-padron
2
2
 
3
- SDK de TypeScript para los web services de Padron de ARCA (ex AFIP). Soporta los alcances A4 (datos completos), A10 (datos basicos) y A100 (tablas de parametros).
3
+ SDK de TypeScript para los web services de Padron de ARCA (ex AFIP): Constancia de Inscripcion
4
+ (`ws_sr_constancia_inscripcion`, ex A5), A4 (datos completos), A10 y A13 (datos basicos) y A100
5
+ (tablas de parametros). Incluye `condicionIvaDesdePadron` para obtener la condicion frente al IVA
6
+ que pide la factura electronica (`CondicionIVAReceptorId`).
4
7
 
5
8
  ## Caracteristicas
6
9
 
7
10
  - Zero dependencias SOAP: construye los envelopes SOAP manualmente
8
11
  - Zero dependencias HTTP: usa `fetch` nativo (Node 18+)
9
12
  - Firma CMS/PKCS#7 con node-forge
10
- - ESM only
13
+ - ESM y CommonJS (funciona con `import` y con `require`, incluido TypeScript con `"module": "CommonJS"`)
11
14
  - TypeScript estricto con tipos completos
12
- - Cache automatico de tokens WSAA
15
+ - Cache automatico de tokens WSAA, con persistencia opcional (`ticketStorage`) y ajuste de reloj
16
+ - Cancelacion con `AbortSignal` (global o por llamada)
13
17
  - Reintentos con backoff exponencial
14
18
  - Sistema de eventos para monitoreo
15
19
 
16
20
  ## Instalacion
17
21
 
18
22
  ```bash
19
- npm install @ramiidv/arca-padron-sdk
23
+ npm install @ramiidv/arca-padron
20
24
  ```
21
25
 
22
26
  ## Inicio rapido
23
27
 
24
28
  ```typescript
25
29
  import { readFileSync } from 'fs';
26
- import { ArcaPadron } from '@ramiidv/arca-padron-sdk';
30
+ import { ArcaPadron, FileTicketStorage } from '@ramiidv/arca-padron';
27
31
 
28
32
  const padron = new ArcaPadron({
29
33
  cert: readFileSync('./cert.pem', 'utf-8'),
30
34
  key: readFileSync('./key.pem', 'utf-8'),
31
35
  cuit: '20123456789',
32
36
  production: false, // false = homologacion
37
+ ticketStorage: new FileTicketStorage('./.arca-tickets'), // recomendado
33
38
  });
34
39
 
40
+ // Constancia de inscripcion (ex A5) + condicion frente al IVA para facturar
41
+ import { condicionIvaDesdePadron } from '@ramiidv/arca-padron';
42
+ const constancia = await padron.getConstanciaInscripcion('30712345674');
43
+ const { condicionIva, motivo } = condicionIvaDesdePadron(constancia);
44
+ // condicionIva: CondicionIva.RESPONSABLE_INSCRIPTO (1), motivo: "Inscripto en IVA (impuesto 30)."
45
+
35
46
  // Consulta completa (A4)
36
47
  const contribuyente = await padron.getPersona('20123456789');
37
48
  console.log(contribuyente.tipoPersona, contribuyente.nombre);
@@ -41,7 +52,7 @@ const contribuyenteBasico = await padron.getPersonaBasic('20123456789');
41
52
  console.log(contribuyenteBasico.domicilio?.[0]?.direccion);
42
53
 
43
54
  // Tablas de parametros (A100)
44
- import { CollectionName } from '@ramiidv/arca-padron-sdk';
55
+ import { CollectionName } from '@ramiidv/arca-padron';
45
56
  const provincias = await padron.getParametros(CollectionName.PROVINCIA);
46
57
  console.log(provincias.length, 'provincias');
47
58
  ```
@@ -63,14 +74,75 @@ interface ArcaPadronConfig {
63
74
  /** Delay base en ms para backoff exponencial (default: 1000) */
64
75
  retryDelayMs?: number;
65
76
  /** Callback de eventos para monitoreo */
66
- onEvent?: (event: ArcaPadronEvent) => void;
77
+ onEvent?: (event: ArcaEvent) => void;
78
+ /** Persistencia de tickets WSAA entre reinicios (recomendado) */
79
+ ticketStorage?: TicketStorage;
80
+ /** Desfase relojARCA - relojLocal en ms (default: 0) */
81
+ clockOffsetMs?: number;
82
+ /** Ajustar el desfase si WSAA rechaza el login por reloj (default: true) */
83
+ autoClockSkew?: boolean;
84
+ /** Cancela todas las llamadas de la instancia */
85
+ signal?: AbortSignal;
86
+ /** WsaaClient compartido (ej: `arca.wsaa` de arca-facturacion con el mismo certificado) */
87
+ wsaa?: WsaaClient;
67
88
  }
68
89
  ```
69
90
 
91
+ > **Persisti el Ticket de Acceso.** WSAA rechaza el login si ya hay un TA vigente para el
92
+ > certificado y servicio. Sin `ticketStorage`, un reinicio del proceso te deja sin poder consultar
93
+ > hasta que venza (hasta 12 horas, `ArcaTicketVigenteError`). Ver `TicketStorage` en
94
+ > [`@ramiidv/arca-common`](https://github.com/ramiidv/arca-common).
95
+
96
+ Si usas tambien `@ramiidv/arca-facturacion` con el mismo certificado, comparti el cliente WSAA:
97
+
98
+ ```typescript
99
+ const arca = new Arca({ cuit, cert, key, ticketStorage });
100
+ const padron = new ArcaPadron({ cuit: String(cuit), cert, key, wsaa: arca.wsaa });
101
+ ```
102
+
103
+ Todos los metodos aceptan un ultimo parametro opcional `{ signal }`.
104
+
70
105
  ## API
71
106
 
72
107
  ### Metodos de alto nivel
73
108
 
109
+ #### `getConstanciaInscripcion(cuit: string): Promise<PersonaA5>`
110
+
111
+ Constancia de inscripcion via `ws_sr_constancia_inscripcion` (metodo `getPersona_v2`). Reemplaza a
112
+ Padron A5 (`ws_sr_padron_a5`), deprecado por ARCA. Incluye datos generales, domicilio fiscal,
113
+ caracterizaciones, regimen general (impuestos, actividades, regimenes), monotributo (categoria,
114
+ impuestos, actividad) y, si ARCA no puede emitir la constancia, `errorConstancia`.
115
+
116
+ ```typescript
117
+ const constancia = await padron.getConstanciaInscripcion('30712345674');
118
+ constancia.domicilioFiscal; // { direccion, localidad, codPostal, idProvincia, ... }
119
+ constancia.impuestos; // impuestos de ambos regimenes
120
+ constancia.monotributo?.categoria; // { idCategoria, descripcionCategoria, ... }
121
+ ```
122
+
123
+ #### `condicionIvaDesdePadron(persona): { condicionIva: CondicionIva | null; motivo: string }`
124
+
125
+ Funcion pura (no consulta ARCA). Acepta una constancia (`PersonaA5`) o una persona de A4:
126
+
127
+ | Padron | `condicionIva` |
128
+ | --- | --- |
129
+ | Monotributo activo (impuesto 20 o categoria) | `MONOTRIBUTISTA` (6) |
130
+ | Monotributo social (categorias 61, 99, 100) | `MONOTRIBUTO_SOCIAL` (13) |
131
+ | Trabajador independiente promovido | `MONOTRIBUTO_INDEPENDIENTE_PROMOVIDO` (16) |
132
+ | IVA activo (impuesto 30) | `RESPONSABLE_INSCRIPTO` (1) |
133
+ | IVA exento (impuesto 32) | `EXENTO` (4) |
134
+ | IVA no alcanzado (impuesto 34) | `IVA_NO_ALCANZADO` (15) |
135
+ | Ninguno de los anteriores, o constancia no emitida | `null` (con el motivo) |
136
+
137
+ Si el padron no alcanza, devuelve `null` en lugar de asumir consumidor final: decidilo segun la
138
+ operacion. Fuente: manual de `ws_sr_constancia_inscripcion` v4.1 (impuestos 20 y 30, estado `AC`,
139
+ categorias de monotributo social). Los impuestos 32 y 34 se reconocen tambien por su descripcion.
140
+
141
+ #### `getPersonaA13(cuit: string): Promise<PersonaA13>`
142
+
143
+ Datos basicos via `ws_sr_padron_a13`. Tambien `getIdPersonaListByDocumento(dni)` devuelve los
144
+ CUIT/CUIL asociados a un documento.
145
+
74
146
  #### `getPersona(cuit: string): Promise<PersonaA4>`
75
147
 
76
148
  Obtiene los datos completos de un contribuyente via ws_sr_padron_a4. Autentica automaticamente con WSAA.
@@ -92,7 +164,7 @@ const contribuyenteBasico = await padron.getPersonaBasic('20123456789');
92
164
  Obtiene una tabla de parametros via ws_sr_padron_a100.
93
165
 
94
166
  ```typescript
95
- import { CollectionName } from '@ramiidv/arca-padron-sdk';
167
+ import { CollectionName } from '@ramiidv/arca-padron';
96
168
 
97
169
  const provincias = await padron.getParametros(CollectionName.PROVINCIA);
98
170
  const tiposDocumento = await padron.getParametros(CollectionName.TIPO_DOCUMENTO);
@@ -101,9 +173,9 @@ const tiposRelacion = await padron.getParametros(CollectionName.TIPO_RELACION);
101
173
 
102
174
  Colecciones disponibles (enum `CollectionName`, valores SUPA.\* prefijados): `PROVINCIA`, `TIPO_DOCUMENTO`, `TIPO_DOMICILIO`, `TIPO_CLAVE`, `TIPO_EMPRESA_JURIDICA`, `TIPO_EMPRESA_JURIDICA_SUBGRUPO`, `TIPO_RELACION`, `TIPO_SUBTIPO_RELACION`, `TIPO_COMPONENTE_SOCIEDAD`, `TIPO_RELACION_COMPONENTE_SOC`, `TIPO_EMAIL`, `TIPO_TELEFONO`, `TIPO_RESIDENCIA`, `TIPO_DATO_ADICIONAL_DOMICILIO`, `ORGANISMO_INFORMANTE`, `ORGANISMO_CONTROL`, `PROVINCIA_SOCIEDAD_ORG`, `SEXO`, `CALLE`, `LOCALIDAD`.
103
175
 
104
- #### `status(): Promise<{ a4: ServerStatus, a10: ServerStatus, a100: ServerStatus }>`
176
+ #### `status(): Promise<{ a5, a4, a10, a13, a100 }>`
105
177
 
106
- Verifica el estado de los tres servicios (no requiere autenticacion).
178
+ Verifica el estado de los servicios (no requiere autenticacion).
107
179
 
108
180
  ```typescript
109
181
  const estadoServicios = await padron.status();
@@ -130,6 +202,9 @@ const credenciales = {
130
202
  const contribuyente = await padron.a4.getPersona(credenciales, '20123456789');
131
203
  ```
132
204
 
205
+ Clientes disponibles: `padron.wsaa`, `padron.a5` (constancia), `padron.a4`, `padron.a10`,
206
+ `padron.a13`, `padron.a100`.
207
+
133
208
  ## Tipos de respuesta
134
209
 
135
210
  ### PersonaA4 (datos completos)
@@ -219,18 +294,25 @@ El SDK usa una jerarquia de errores de 4 clases:
219
294
 
220
295
  ```
221
296
  Error
222
- └── ArcaPadronError (base)
297
+ └── ArcaError (base, de @ramiidv/arca-common)
298
+ ├── ArcaPadronError
223
299
  ├── ArcaAuthError (errores de WSAA)
224
- ├── ArcaPadronServiceError (errores de negocio)
225
- └── ArcaSoapError (errores HTTP/transporte)
300
+ │ └── ArcaTicketVigenteError (TA vigente que no esta en memoria ni en el storage)
301
+ ├── ArcaServiceError
302
+ │ └── ArcaPadronServiceError (errores de negocio)
303
+ └── ArcaSoapError (errores HTTP/transporte, SOAP Faults)
226
304
  ```
227
305
 
306
+ Todos tienen un `code` estable y `instanceof` funciona aunque haya mas de una copia del paquete
307
+ cargada. ARCA informa "persona inexistente" y similares como SOAP Fault (`ArcaSoapError` con
308
+ `faultString`).
309
+
228
310
  ```typescript
229
311
  import {
230
312
  ArcaAuthError,
231
313
  ArcaPadronServiceError,
232
314
  ArcaSoapError,
233
- } from '@ramiidv/arca-padron-sdk';
315
+ } from '@ramiidv/arca-padron';
234
316
 
235
317
  try {
236
318
  await padron.getPersona('20123456789');
@@ -260,10 +342,10 @@ const padron = new ArcaPadron({
260
342
  onEvent: (evento) => {
261
343
  switch (evento.type) {
262
344
  case 'auth:login':
263
- console.log(`Login para ${evento.serviceId}`);
345
+ console.log(`Login para ${evento.service}`);
264
346
  break;
265
347
  case 'auth:cache-hit':
266
- console.log(`Token cacheado para ${evento.serviceId}`);
348
+ console.log(`Token reutilizado para ${evento.service} (${evento.source})`);
267
349
  break;
268
350
  case 'request:start':
269
351
  console.log(`Inicio ${evento.method}`);
@@ -291,19 +373,22 @@ import {
291
373
  TipoPersona,
292
374
  ImpuestoId,
293
375
  CollectionName,
294
- } from '@ramiidv/arca-padron-sdk';
376
+ } from '@ramiidv/arca-padron';
295
377
 
296
- // Verificar si el contribuyente esta inscripto en IVA
378
+ // Verificar si el contribuyente esta inscripto en IVA (mejor: condicionIvaDesdePadron)
297
379
  const tieneIva = contribuyente.impuesto?.some(
298
- (imp) => imp.idImpuesto === ImpuestoId.IVA_RESPONSABLE_INSCRIPTO && imp.estado === 'AC'
380
+ (imp) => imp.idImpuesto === ImpuestoId.IVA_RESPONSABLE_INSCRIPTO && imp.estado === 'ACTIVO'
299
381
  );
382
+
383
+ // ImpuestoId.MONOTRIBUTO = 20 (antes figuraba como 21, que era incorrecto)
300
384
  ```
301
385
 
302
386
  ## Requisitos
303
387
 
304
388
  - Node.js >= 18 (soporte nativo de `fetch`)
305
389
  - Certificado digital emitido por ARCA/AFIP
306
- - Autorizacion para los servicios web correspondientes
390
+ - Autorizacion para los servicios web correspondientes: `ws_sr_constancia_inscripcion`,
391
+ `ws_sr_padron_a4`, `ws_sr_padron_a10`, `ws_sr_padron_a13`, `ws_sr_padron_a100` (cada uno por separado)
307
392
 
308
393
  ## Licencia
309
394
 
@@ -0,0 +1,98 @@
1
+ import { WsaaClient } from '@ramiidv/arca-common';
2
+ import type { CallOptions } from '@ramiidv/arca-common';
3
+ import { PadronA4Client } from './padron-a4.js';
4
+ import { PadronA5Client } from './padron-a5.js';
5
+ import { PadronA10Client } from './padron-a10.js';
6
+ import { PadronA13Client } from './padron-a13.js';
7
+ import { PadronA100Client } from './padron-a100.js';
8
+ import type { ArcaPadronConfig, ParameterRecord, PersonaA4, PersonaA5, PersonaA10, PersonaA13, ServerStatus } from './types.js';
9
+ /**
10
+ * Main orchestrator class for ARCA Padrón web services.
11
+ *
12
+ * Provides high-level methods that handle WSAA authentication automatically
13
+ * and expose results from the Constancia de Inscripción (ex A5), A4 (full),
14
+ * A10 (basic), A13 (basic) and A100 (parameters) web services.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { ArcaPadron, condicionIvaDesdePadron, FileTicketStorage } from '@ramiidv/arca-padron';
19
+ * import { readFileSync } from 'fs';
20
+ *
21
+ * const client = new ArcaPadron({
22
+ * cert: readFileSync('cert.pem', 'utf-8'),
23
+ * key: readFileSync('key.pem', 'utf-8'),
24
+ * cuit: '20123456789',
25
+ * production: false,
26
+ * ticketStorage: new FileTicketStorage('./.arca-tickets'),
27
+ * });
28
+ *
29
+ * const persona = await client.getConstanciaInscripcion('30712345674');
30
+ * const { condicionIva, motivo } = condicionIvaDesdePadron(persona);
31
+ * ```
32
+ */
33
+ export declare class ArcaPadron {
34
+ /** Low-level WSAA client for direct access (se puede compartir con arca-facturacion) */
35
+ readonly wsaa: WsaaClient;
36
+ /** Low-level Constancia de Inscripción (ex Padrón A5) client */
37
+ readonly a5: PadronA5Client;
38
+ /** Low-level Padrón A4 client for direct access */
39
+ readonly a4: PadronA4Client;
40
+ /** Low-level Padrón A10 client for direct access */
41
+ readonly a10: PadronA10Client;
42
+ /** Low-level Padrón A13 client for direct access */
43
+ readonly a13: PadronA13Client;
44
+ /** Low-level Padrón A100 client for direct access */
45
+ readonly a100: PadronA100Client;
46
+ private readonly cuit;
47
+ private readonly signal?;
48
+ constructor(config: ArcaPadronConfig);
49
+ /**
50
+ * Constancia de inscripción (ws_sr_constancia_inscripcion, ex Padrón A5):
51
+ * datos generales, domicilio fiscal, impuestos del régimen general y
52
+ * monotributo. Combinar con `condicionIvaDesdePadron` para facturar.
53
+ * @param cuit - CUIT of the taxpayer to query
54
+ */
55
+ getConstanciaInscripcion(cuit: string, call?: CallOptions): Promise<PersonaA5>;
56
+ /**
57
+ * Get full taxpayer data (Padrón A4) for a given CUIT.
58
+ * Authenticates automatically via WSAA.
59
+ * @param cuit - CUIT of the taxpayer to query
60
+ */
61
+ getPersona(cuit: string, call?: CallOptions): Promise<PersonaA4>;
62
+ /**
63
+ * Get basic taxpayer data (Padrón A10) for a given CUIT.
64
+ * Authenticates automatically via WSAA.
65
+ * @param cuit - CUIT of the taxpayer to query
66
+ */
67
+ getPersonaBasic(cuit: string, call?: CallOptions): Promise<PersonaA10>;
68
+ /**
69
+ * Get basic taxpayer data (Padrón A13) for a given CUIT.
70
+ * @param cuit - CUIT of the taxpayer to query
71
+ */
72
+ getPersonaA13(cuit: string, call?: CallOptions): Promise<PersonaA13>;
73
+ /**
74
+ * CUITs/CUILs asociados a un número de documento (Padrón A13).
75
+ * @param documento - Número de documento (DNI)
76
+ */
77
+ getIdPersonaListByDocumento(documento: string, call?: CallOptions): Promise<string[]>;
78
+ /**
79
+ * Get a parameter table (Padrón A100) by collection name.
80
+ * Authenticates automatically via WSAA.
81
+ * @param collection - Name of the collection (e.g. CollectionName.PROVINCIA, CollectionName.TIPO_DOCUMENTO)
82
+ */
83
+ getParametros(collection: string, call?: CallOptions): Promise<ParameterRecord[]>;
84
+ /**
85
+ * Health check for the Padrón services.
86
+ * Does not require authentication.
87
+ */
88
+ status(call?: CallOptions): Promise<{
89
+ a5: ServerStatus;
90
+ a4: ServerStatus;
91
+ a10: ServerStatus;
92
+ a13: ServerStatus;
93
+ a100: ServerStatus;
94
+ }>;
95
+ private opts;
96
+ private getAuth;
97
+ }
98
+ //# sourceMappingURL=arca-padron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arca-padron.d.ts","sourceRoot":"","sources":["../../src/arca-padron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAa,WAAW,EAAmB,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,UAAU;IACrB,wFAAwF;IACxF,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,gEAAgE;IAChE,SAAgB,EAAE,EAAE,cAAc,CAAC;IACnC,mDAAmD;IACnD,SAAgB,EAAE,EAAE,cAAc,CAAC;IACnC,oDAAoD;IACpD,SAAgB,GAAG,EAAE,eAAe,CAAC;IACrC,oDAAoD;IACpD,SAAgB,GAAG,EAAE,eAAe,CAAC;IACrC,qDAAqD;IACrD,SAAgB,IAAI,EAAE,gBAAgB,CAAC;IAEvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAc;gBAE1B,MAAM,EAAE,gBAAgB;IA0CpC;;;;;OAKG;IACG,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAMpF;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAMtE;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAM5E;;;OAGG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAM1E;;;OAGG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAM3F;;;;OAIG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAMvF;;;OAGG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QACxC,EAAE,EAAE,YAAY,CAAC;QACjB,EAAE,EAAE,YAAY,CAAC;QACjB,GAAG,EAAE,YAAY,CAAC;QAClB,GAAG,EAAE,YAAY,CAAC;QAClB,IAAI,EAAE,YAAY,CAAC;KACpB,CAAC;IAgBF,OAAO,CAAC,IAAI;YAIE,OAAO;CAQtB"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ArcaPadron = void 0;
4
+ const arca_common_1 = require("@ramiidv/arca-common");
5
+ const constants_js_1 = require("./constants.js");
6
+ const padron_a4_js_1 = require("./padron-a4.js");
7
+ const padron_a5_js_1 = require("./padron-a5.js");
8
+ const padron_a10_js_1 = require("./padron-a10.js");
9
+ const padron_a13_js_1 = require("./padron-a13.js");
10
+ const padron_a100_js_1 = require("./padron-a100.js");
11
+ /**
12
+ * Main orchestrator class for ARCA Padrón web services.
13
+ *
14
+ * Provides high-level methods that handle WSAA authentication automatically
15
+ * and expose results from the Constancia de Inscripción (ex A5), A4 (full),
16
+ * A10 (basic), A13 (basic) and A100 (parameters) web services.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { ArcaPadron, condicionIvaDesdePadron, FileTicketStorage } from '@ramiidv/arca-padron';
21
+ * import { readFileSync } from 'fs';
22
+ *
23
+ * const client = new ArcaPadron({
24
+ * cert: readFileSync('cert.pem', 'utf-8'),
25
+ * key: readFileSync('key.pem', 'utf-8'),
26
+ * cuit: '20123456789',
27
+ * production: false,
28
+ * ticketStorage: new FileTicketStorage('./.arca-tickets'),
29
+ * });
30
+ *
31
+ * const persona = await client.getConstanciaInscripcion('30712345674');
32
+ * const { condicionIva, motivo } = condicionIvaDesdePadron(persona);
33
+ * ```
34
+ */
35
+ class ArcaPadron {
36
+ /** Low-level WSAA client for direct access (se puede compartir con arca-facturacion) */
37
+ wsaa;
38
+ /** Low-level Constancia de Inscripción (ex Padrón A5) client */
39
+ a5;
40
+ /** Low-level Padrón A4 client for direct access */
41
+ a4;
42
+ /** Low-level Padrón A10 client for direct access */
43
+ a10;
44
+ /** Low-level Padrón A13 client for direct access */
45
+ a13;
46
+ /** Low-level Padrón A100 client for direct access */
47
+ a100;
48
+ cuit;
49
+ signal;
50
+ constructor(config) {
51
+ const isProduction = config.production ?? false;
52
+ const env = isProduction ? 'production' : 'testing';
53
+ this.cuit = config.cuit;
54
+ this.signal = config.signal;
55
+ const onEvent = config.onEvent;
56
+ const soapOptions = {
57
+ timeout: config.timeout,
58
+ retries: config.retries,
59
+ retryDelayMs: config.retryDelayMs,
60
+ };
61
+ this.wsaa =
62
+ config.wsaa ??
63
+ new arca_common_1.WsaaClient({
64
+ cert: config.cert,
65
+ key: config.key,
66
+ production: isProduction,
67
+ timeout: config.timeout,
68
+ retries: config.retries,
69
+ retryDelayMs: config.retryDelayMs,
70
+ onEvent,
71
+ ticketStorage: config.ticketStorage,
72
+ clockOffsetMs: config.clockOffsetMs,
73
+ autoClockSkew: config.autoClockSkew,
74
+ });
75
+ const clientConfig = (svc) => ({
76
+ endpoint: svc[env],
77
+ namespace: svc.namespace,
78
+ soapOptions,
79
+ onEvent,
80
+ });
81
+ this.a5 = new padron_a5_js_1.PadronA5Client(clientConfig(constants_js_1.ENDPOINTS.a5));
82
+ this.a4 = new padron_a4_js_1.PadronA4Client(clientConfig(constants_js_1.ENDPOINTS.a4));
83
+ this.a10 = new padron_a10_js_1.PadronA10Client(clientConfig(constants_js_1.ENDPOINTS.a10));
84
+ this.a13 = new padron_a13_js_1.PadronA13Client(clientConfig(constants_js_1.ENDPOINTS.a13));
85
+ this.a100 = new padron_a100_js_1.PadronA100Client(clientConfig(constants_js_1.ENDPOINTS.a100));
86
+ }
87
+ /**
88
+ * Constancia de inscripción (ws_sr_constancia_inscripcion, ex Padrón A5):
89
+ * datos generales, domicilio fiscal, impuestos del régimen general y
90
+ * monotributo. Combinar con `condicionIvaDesdePadron` para facturar.
91
+ * @param cuit - CUIT of the taxpayer to query
92
+ */
93
+ async getConstanciaInscripcion(cuit, call) {
94
+ const opts = this.opts(call);
95
+ const auth = await this.getAuth(constants_js_1.ENDPOINTS.a5.serviceId, opts);
96
+ return this.a5.getPersona(auth, cuit, opts);
97
+ }
98
+ /**
99
+ * Get full taxpayer data (Padrón A4) for a given CUIT.
100
+ * Authenticates automatically via WSAA.
101
+ * @param cuit - CUIT of the taxpayer to query
102
+ */
103
+ async getPersona(cuit, call) {
104
+ const opts = this.opts(call);
105
+ const auth = await this.getAuth(constants_js_1.ENDPOINTS.a4.serviceId, opts);
106
+ return this.a4.getPersona(auth, cuit, opts);
107
+ }
108
+ /**
109
+ * Get basic taxpayer data (Padrón A10) for a given CUIT.
110
+ * Authenticates automatically via WSAA.
111
+ * @param cuit - CUIT of the taxpayer to query
112
+ */
113
+ async getPersonaBasic(cuit, call) {
114
+ const opts = this.opts(call);
115
+ const auth = await this.getAuth(constants_js_1.ENDPOINTS.a10.serviceId, opts);
116
+ return this.a10.getPersona(auth, cuit, opts);
117
+ }
118
+ /**
119
+ * Get basic taxpayer data (Padrón A13) for a given CUIT.
120
+ * @param cuit - CUIT of the taxpayer to query
121
+ */
122
+ async getPersonaA13(cuit, call) {
123
+ const opts = this.opts(call);
124
+ const auth = await this.getAuth(constants_js_1.ENDPOINTS.a13.serviceId, opts);
125
+ return this.a13.getPersona(auth, cuit, opts);
126
+ }
127
+ /**
128
+ * CUITs/CUILs asociados a un número de documento (Padrón A13).
129
+ * @param documento - Número de documento (DNI)
130
+ */
131
+ async getIdPersonaListByDocumento(documento, call) {
132
+ const opts = this.opts(call);
133
+ const auth = await this.getAuth(constants_js_1.ENDPOINTS.a13.serviceId, opts);
134
+ return this.a13.getIdPersonaListByDocumento(auth, documento, opts);
135
+ }
136
+ /**
137
+ * Get a parameter table (Padrón A100) by collection name.
138
+ * Authenticates automatically via WSAA.
139
+ * @param collection - Name of the collection (e.g. CollectionName.PROVINCIA, CollectionName.TIPO_DOCUMENTO)
140
+ */
141
+ async getParametros(collection, call) {
142
+ const opts = this.opts(call);
143
+ const auth = await this.getAuth(constants_js_1.ENDPOINTS.a100.serviceId, opts);
144
+ return this.a100.getParameterCollectionByName(auth, collection, opts);
145
+ }
146
+ /**
147
+ * Health check for the Padrón services.
148
+ * Does not require authentication.
149
+ */
150
+ async status(call) {
151
+ const opts = this.opts(call);
152
+ const [a5, a4, a10, a13, a100] = await Promise.all([
153
+ this.a5.dummy(opts),
154
+ this.a4.dummy(opts),
155
+ this.a10.dummy(opts),
156
+ this.a13.dummy(opts),
157
+ this.a100.dummy(opts),
158
+ ]);
159
+ return { a5, a4, a10, a13, a100 };
160
+ }
161
+ // -------------------------------------------------------------------------
162
+ // Private helpers
163
+ // -------------------------------------------------------------------------
164
+ opts(call) {
165
+ return { signal: (0, arca_common_1.anySignal)(this.signal, call?.signal) };
166
+ }
167
+ async getAuth(serviceId, opts) {
168
+ const ticket = await this.wsaa.getAccessTicket(serviceId, opts);
169
+ return {
170
+ Token: ticket.token,
171
+ Sign: ticket.sign,
172
+ CuitRepresentada: this.cuit,
173
+ };
174
+ }
175
+ }
176
+ exports.ArcaPadron = ArcaPadron;
177
+ //# sourceMappingURL=arca-padron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arca-padron.js","sourceRoot":"","sources":["../../src/arca-padron.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { ArcaEvent, SoapCallOptions, ServerStatus } from '@ramiidv/arca-common';
1
+ import type { ArcaEvent, CallOptions, SoapCallOptions, ServerStatus } from '@ramiidv/arca-common';
2
+ import type { WsAuth } from './types.js';
2
3
  /** Shared configuration for all Padrón service clients. */
3
4
  export interface PadronClientConfig {
4
5
  /** SOAP endpoint URL */
@@ -13,6 +14,11 @@ export interface PadronClientConfig {
13
14
  /**
14
15
  * Abstract base class for Padrón web service clients.
15
16
  * Provides shared constructor logic and health-check method.
17
+ *
18
+ * Los WS de Padrón declaran los parámetros sin namespace
19
+ * (`elementFormDefault="unqualified"`): `afipSoapCall` de arca-common prefija
20
+ * el método y deja los parámetros sin namespace. Todas las consultas se
21
+ * reintentan ante errores transitorios.
16
22
  */
17
23
  export declare abstract class BasePadronClient {
18
24
  protected readonly endpoint: string;
@@ -20,7 +26,11 @@ export declare abstract class BasePadronClient {
20
26
  protected readonly soapOptions?: Pick<SoapCallOptions, 'timeout' | 'retries' | 'retryDelayMs'>;
21
27
  protected readonly onEvent?: (event: ArcaEvent) => void;
22
28
  constructor(config: PadronClientConfig);
29
+ /** Llama a un método del servicio. */
30
+ protected call(method: string, params: Record<string, unknown>, opts?: CallOptions): Promise<Record<string, unknown>>;
31
+ /** Parámetros de autenticación en el orden del WSDL: token, sign, cuitRepresentada. */
32
+ protected authParams(auth: WsAuth): Record<string, unknown>;
23
33
  /** Health check for this service. */
24
- dummy(): Promise<ServerStatus>;
34
+ dummy(opts?: CallOptions): Promise<ServerStatus>;
25
35
  }
26
36
  //# sourceMappingURL=base-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-client.d.ts","sourceRoot":"","sources":["../../src/base-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,CAAC;IAC5E,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,8BAAsB,gBAAgB;IACpC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,CAAC;IAC/F,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;gBAE5C,MAAM,EAAE,kBAAkB;IAOtC,sCAAsC;IACtC,SAAS,CAAC,IAAI,CACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQnC,uFAAuF;IACvF,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ3D,qCAAqC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CASvD"}