@ramiidv/arca-padron 0.3.0 → 0.5.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 (172) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/README.md +146 -99
  3. package/dist/arca-padron.d.ts +107 -0
  4. package/dist/arca-padron.d.ts.map +1 -0
  5. package/dist/arca-padron.js +178 -0
  6. package/dist/arca-padron.js.map +1 -0
  7. package/dist/base-client.d.ts +45 -0
  8. package/dist/base-client.d.ts.map +1 -0
  9. package/dist/base-client.js +54 -0
  10. package/dist/base-client.js.map +1 -0
  11. package/dist/{esm/condicion-iva.d.ts → condicion-iva.d.ts} +9 -5
  12. package/dist/condicion-iva.d.ts.map +1 -0
  13. package/dist/condicion-iva.js +170 -0
  14. package/dist/condicion-iva.js.map +1 -0
  15. package/dist/{esm/constants.d.ts → constants.d.ts} +57 -12
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/{esm/constants.js → constants.js} +53 -11
  18. package/dist/constants.js.map +1 -0
  19. package/dist/errors.d.ts +50 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +58 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +24 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +30 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/mapping.d.ts +22 -0
  28. package/dist/mapping.d.ts.map +1 -0
  29. package/dist/mapping.js +52 -0
  30. package/dist/mapping.js.map +1 -0
  31. package/dist/padron-a10.d.ts +24 -0
  32. package/dist/padron-a10.d.ts.map +1 -0
  33. package/dist/padron-a10.js +41 -0
  34. package/dist/padron-a10.js.map +1 -0
  35. package/dist/padron-a100.d.ts +26 -0
  36. package/dist/padron-a100.d.ts.map +1 -0
  37. package/dist/padron-a100.js +46 -0
  38. package/dist/padron-a100.js.map +1 -0
  39. package/dist/padron-a13.d.ts +36 -0
  40. package/dist/padron-a13.d.ts.map +1 -0
  41. package/dist/padron-a13.js +95 -0
  42. package/dist/padron-a13.js.map +1 -0
  43. package/dist/padron-a4.d.ts +21 -0
  44. package/dist/padron-a4.d.ts.map +1 -0
  45. package/dist/padron-a4.js +128 -0
  46. package/dist/padron-a4.js.map +1 -0
  47. package/dist/padron-a5.d.ts +39 -0
  48. package/dist/padron-a5.d.ts.map +1 -0
  49. package/dist/padron-a5.js +214 -0
  50. package/dist/padron-a5.js.map +1 -0
  51. package/dist/{cjs/types.d.ts → types.d.ts} +36 -53
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js.map +1 -0
  54. package/llms.txt +46 -27
  55. package/package.json +21 -32
  56. package/dist/cjs/arca-padron.d.ts +0 -98
  57. package/dist/cjs/arca-padron.d.ts.map +0 -1
  58. package/dist/cjs/arca-padron.js +0 -177
  59. package/dist/cjs/arca-padron.js.map +0 -1
  60. package/dist/cjs/base-client.d.ts +0 -36
  61. package/dist/cjs/base-client.d.ts.map +0 -1
  62. package/dist/cjs/base-client.js +0 -52
  63. package/dist/cjs/base-client.js.map +0 -1
  64. package/dist/cjs/condicion-iva.d.ts +0 -24
  65. package/dist/cjs/condicion-iva.d.ts.map +0 -1
  66. package/dist/cjs/condicion-iva.js +0 -119
  67. package/dist/cjs/condicion-iva.js.map +0 -1
  68. package/dist/cjs/constants.d.ts +0 -97
  69. package/dist/cjs/constants.d.ts.map +0 -1
  70. package/dist/cjs/constants.js +0 -113
  71. package/dist/cjs/constants.js.map +0 -1
  72. package/dist/cjs/errors.d.ts +0 -22
  73. package/dist/cjs/errors.d.ts.map +0 -1
  74. package/dist/cjs/errors.js +0 -36
  75. package/dist/cjs/errors.js.map +0 -1
  76. package/dist/cjs/index.d.ts +0 -16
  77. package/dist/cjs/index.d.ts.map +0 -1
  78. package/dist/cjs/index.js +0 -56
  79. package/dist/cjs/index.js.map +0 -1
  80. package/dist/cjs/mapping.d.ts +0 -9
  81. package/dist/cjs/mapping.d.ts.map +0 -1
  82. package/dist/cjs/mapping.js +0 -14
  83. package/dist/cjs/mapping.js.map +0 -1
  84. package/dist/cjs/package.json +0 -1
  85. package/dist/cjs/padron-a10.d.ts +0 -18
  86. package/dist/cjs/padron-a10.d.ts.map +0 -1
  87. package/dist/cjs/padron-a10.js +0 -73
  88. package/dist/cjs/padron-a10.js.map +0 -1
  89. package/dist/cjs/padron-a100.d.ts +0 -16
  90. package/dist/cjs/padron-a100.d.ts.map +0 -1
  91. package/dist/cjs/padron-a100.js +0 -38
  92. package/dist/cjs/padron-a100.js.map +0 -1
  93. package/dist/cjs/padron-a13.d.ts +0 -24
  94. package/dist/cjs/padron-a13.d.ts.map +0 -1
  95. package/dist/cjs/padron-a13.js +0 -80
  96. package/dist/cjs/padron-a13.js.map +0 -1
  97. package/dist/cjs/padron-a4.d.ts +0 -18
  98. package/dist/cjs/padron-a4.d.ts.map +0 -1
  99. package/dist/cjs/padron-a4.js +0 -173
  100. package/dist/cjs/padron-a4.js.map +0 -1
  101. package/dist/cjs/padron-a5.d.ts +0 -24
  102. package/dist/cjs/padron-a5.d.ts.map +0 -1
  103. package/dist/cjs/padron-a5.js +0 -156
  104. package/dist/cjs/padron-a5.js.map +0 -1
  105. package/dist/cjs/soap-client.d.ts +0 -2
  106. package/dist/cjs/soap-client.d.ts.map +0 -1
  107. package/dist/cjs/soap-client.js +0 -13
  108. package/dist/cjs/soap-client.js.map +0 -1
  109. package/dist/cjs/types.d.ts.map +0 -1
  110. package/dist/cjs/types.js +0 -3
  111. package/dist/cjs/types.js.map +0 -1
  112. package/dist/cjs/wsaa.d.ts +0 -3
  113. package/dist/cjs/wsaa.d.ts.map +0 -1
  114. package/dist/cjs/wsaa.js +0 -6
  115. package/dist/cjs/wsaa.js.map +0 -1
  116. package/dist/esm/arca-padron.d.ts +0 -98
  117. package/dist/esm/arca-padron.d.ts.map +0 -1
  118. package/dist/esm/arca-padron.js +0 -173
  119. package/dist/esm/arca-padron.js.map +0 -1
  120. package/dist/esm/base-client.d.ts +0 -36
  121. package/dist/esm/base-client.d.ts.map +0 -1
  122. package/dist/esm/base-client.js +0 -48
  123. package/dist/esm/base-client.js.map +0 -1
  124. package/dist/esm/condicion-iva.d.ts.map +0 -1
  125. package/dist/esm/condicion-iva.js +0 -116
  126. package/dist/esm/condicion-iva.js.map +0 -1
  127. package/dist/esm/constants.d.ts.map +0 -1
  128. package/dist/esm/constants.js.map +0 -1
  129. package/dist/esm/errors.d.ts +0 -22
  130. package/dist/esm/errors.d.ts.map +0 -1
  131. package/dist/esm/errors.js +0 -26
  132. package/dist/esm/errors.js.map +0 -1
  133. package/dist/esm/index.d.ts +0 -16
  134. package/dist/esm/index.d.ts.map +0 -1
  135. package/dist/esm/index.js +0 -22
  136. package/dist/esm/index.js.map +0 -1
  137. package/dist/esm/mapping.d.ts +0 -9
  138. package/dist/esm/mapping.d.ts.map +0 -1
  139. package/dist/esm/mapping.js +0 -8
  140. package/dist/esm/mapping.js.map +0 -1
  141. package/dist/esm/padron-a10.d.ts +0 -18
  142. package/dist/esm/padron-a10.d.ts.map +0 -1
  143. package/dist/esm/padron-a10.js +0 -69
  144. package/dist/esm/padron-a10.js.map +0 -1
  145. package/dist/esm/padron-a100.d.ts +0 -16
  146. package/dist/esm/padron-a100.d.ts.map +0 -1
  147. package/dist/esm/padron-a100.js +0 -34
  148. package/dist/esm/padron-a100.js.map +0 -1
  149. package/dist/esm/padron-a13.d.ts +0 -24
  150. package/dist/esm/padron-a13.d.ts.map +0 -1
  151. package/dist/esm/padron-a13.js +0 -75
  152. package/dist/esm/padron-a13.js.map +0 -1
  153. package/dist/esm/padron-a4.d.ts +0 -18
  154. package/dist/esm/padron-a4.d.ts.map +0 -1
  155. package/dist/esm/padron-a4.js +0 -169
  156. package/dist/esm/padron-a4.js.map +0 -1
  157. package/dist/esm/padron-a5.d.ts +0 -24
  158. package/dist/esm/padron-a5.d.ts.map +0 -1
  159. package/dist/esm/padron-a5.js +0 -151
  160. package/dist/esm/padron-a5.js.map +0 -1
  161. package/dist/esm/soap-client.d.ts +0 -2
  162. package/dist/esm/soap-client.d.ts.map +0 -1
  163. package/dist/esm/soap-client.js +0 -3
  164. package/dist/esm/soap-client.js.map +0 -1
  165. package/dist/esm/types.d.ts +0 -346
  166. package/dist/esm/types.d.ts.map +0 -1
  167. package/dist/esm/types.js.map +0 -1
  168. package/dist/esm/wsaa.d.ts +0 -3
  169. package/dist/esm/wsaa.d.ts.map +0 -1
  170. package/dist/esm/wsaa.js +0 -2
  171. package/dist/esm/wsaa.js.map +0 -1
  172. /package/dist/{esm/types.js → types.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,121 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - bed68e8: Paquetes solo ESM y Node >= 20.19. `arca-common`, `arca-facturacion` y
8
+ `arca-padron` dejan de publicar un build CommonJS: desde CommonJS se cargan con
9
+ `require()` (require(esm), Node >= 20.19 / 22.12). Todos los paquetes pasan a
10
+ requerir Node >= 20.19.0 (Node 18 y 20 sin soporte). El código vive ahora en el
11
+ monorepo `arca-sdks`.
12
+ - f8bd053: Las clases principales extienden `ArcaSdkBase` de arca-common, así que todos
13
+ los SDKs tienen la misma base: `wsaa`, `cuit`, `production`, `on()`/`off()`,
14
+ `clearAuthCache()`, `config.wsaa` (WsaaClient compartido) y `config.signal`
15
+ (signal global). arca-mtxca acepta `endpoints: { mtxca, wsaa }` (`endpoint` y
16
+ `wsaaEndpoint` quedan deprecados). Los `dummy`/`status` validan la respuesta con
17
+ `parseServerStatus`: si falta un campo lanzan `ArcaSoapError`.
18
+ - c9f1444: Requests y respuestas se validan, serializan y decodifican con el DSL de
19
+ `@ramiidv/arca-common/schema`, transcripto del XSD oficial de cada servicio.
20
+
21
+ - Corrección: las respuestas se parsean sin conversión numérica, así que los
22
+ `xs:string` con contenido numérico ya no pierden ceros a la izquierda ni
23
+ decimales (ej: `"0012"`, `"1.50"`, `DocNro`, `codigoSeguridad`).
24
+ - Los campos desconocidos en el input se rechazan con `ArcaValidationError`
25
+ (antes se ignoraban).
26
+ - Todos los errores de validación se informan juntos (`details`), con mensajes
27
+ del tipo `campo: motivo`. Cambió el texto de los mensajes.
28
+ - arca-fecred deja de recortar espacios de los textos y envía `codCtaCte` tal
29
+ cual; porcentaje y cotización se envían con decimales fijos.
30
+
31
+ ### Patch Changes
32
+
33
+ - 20ecf7d: DSL de schemas, segunda versión:
34
+
35
+ - Corrección: `dec()` redondea sobre el valor decimal escrito (`8.575` →
36
+ `8.58`; antes daba `8.57` por la representación binaria). Afecta los importes
37
+ que los SDKs envían redondeados.
38
+ - `must()` rechaza también el valor vacío; los elementos `xsi:nil` cuentan
39
+ como ausentes (en una lista, como lista vacía); `must()` en listas exige el
40
+ elemento; un objeto opcional vacío se omite y uno obligatorio valida sus hijos.
41
+ - Al decodificar se validan enteros (`int()`) y valores permitidos
42
+ (`str({ values })`).
43
+ - Nuevos: `siNo()` (S/N ↔ boolean), `double()`, `xml(nombre, campo)` (nombre
44
+ distinto en el XML), `custom(encode, decode)`, `roundHalfUp()` y
45
+ `decodeResponse(..., { emptyLists: 'omit' })`.
46
+ - Updated dependencies [8c02c30]
47
+ - Updated dependencies [f8bd053]
48
+ - Updated dependencies [242fb5f]
49
+ - Updated dependencies [fd438bc]
50
+ - Updated dependencies [bed68e8]
51
+ - Updated dependencies [20ecf7d]
52
+ - Updated dependencies [b86db00]
53
+ - @ramiidv/arca-common@0.5.0
54
+
55
+ ## 0.4.0 (2026-11-01)
56
+
57
+ ### Breaking changes
58
+ - Requiere `@ramiidv/arca-common` ^0.4.0. `ArcaPadronConfig` extiende `ArcaBaseConfig` (`cuit` acepta
59
+ `string | number`; se agregan `tokenTTLMinutes`, `loginErrorCooldownMs`, `fetch`, `legacyTls` y
60
+ `endpoints`, que se pasan al `WsaaClient` y a cada servicio).
61
+ - Las CUIT se validan localmente con `validateCuit` (dígito verificador) y se envían normalizadas: una
62
+ CUIT inválida (también la representada de la config) lanza `ArcaValidationError` sin llamar a ARCA.
63
+ - Los SOAP Faults de negocio conocidos (CUIT inexistente, clave INACTIVA, id inválido, token no
64
+ autorizado; textos de los manuales) se lanzan como `ArcaPadronServiceError` con `reason` tipado y el
65
+ `ArcaSoapError` original en `cause` (antes llegaban como `ArcaSoapError`).
66
+ - Si `personaReturn` no trae `persona` (A4, A10, A13), la constancia no trae `datosGenerales` ni
67
+ `errorConstancia`, o A100 no trae `parameterCollection`, se lanza `ArcaPadronError` (antes se
68
+ devolvía una persona inventada `{ idPersona: '', tipoPersona: 'FISICA' }` o `[]`). También si falta el
69
+ id de un ítem (`idImpuesto`, `idActividad`, `idCategoria`, etc.): ya no se rellenan con `0` / `''`.
70
+ - `status()` devuelve `PromiseSettledResult<ServerStatus>` por servicio (`Promise.allSettled`): un
71
+ servicio caído ya no hace fallar todo.
72
+ - `ImpuestoId.BIENES_PERSONALES` es `180` (estaba como `31`, incorrecto); se quitó el alias
73
+ `ImpuestoId.MONOTRIBUTO_SOCIAL` (mismo valor que `MONOTRIBUTO`, rompía el mapeo inverso).
74
+ - `condicionIvaDesdePadron`: el impuesto 30 en estado `NA` / `NO APORTANTE` ya no se interpreta como IVA
75
+ no alcanzado (`NA` es "NO APORTANTE" en la tabla TipoEstado); un impuesto 20 en baja ya no da
76
+ monotributista aunque haya categoría.
77
+ - Tipos: `DomicilioA4` ya no tiene `estadoDomicilio` (no existe en el WSDL de A4) y, como
78
+ `DependenciaA4`/`DependenciaA10`, tiene sus campos opcionales (son `minOccurs="0"`);
79
+ `ImpuestoA4.estado` y `ParameterAttribute.value` son opcionales.
80
+ - Se eliminaron los módulos internos `soap-client.ts` y `wsaa.ts` (re-exports puros): `WsaaClient`,
81
+ `ensureArray`, `parseXml` y `buildXml` se siguen exportando desde el índice.
82
+
83
+ ### Features
84
+ - `getConstanciasInscripcion(cuits)` / `a5.getPersonaList`: `getPersonaList_v2`, hasta 250 CUITs; las
85
+ inexistentes vuelven con `errorConstancia`.
86
+ - `getPersonaA13V2(cuit)` / `a13.getPersonaV2`: consulta de claves INACTIVAS (manual A13 v1.4).
87
+ - `monotributo.componenteDeSociedad` en la constancia (tipo `relacion` del WSDL).
88
+ - `CollectionName`: `AUTONOMO_MONOTRIBUTO`, `REGIMEN`, `TIPO_REGIMEN`, `CARACTERIZACION`,
89
+ `TIPO_ARCHIVO`, `ACTIVIDAD_RUBRO`, `RUBRO_ACTIVIDAD`, `ACTIVIDAD_OCUPACIONAL` (manual A100 v2.1).
90
+ - `ImpuestoId`: `MONOTRIBUTO_AUTONOMO` (21), `AUTONOMOS` (308).
91
+ - `getIdPersonaListByDocumento` acepta el documento con puntos/espacios y lo valida.
92
+ - Se exportan `ArcaValidationError`, `DocTipo`, `PadronErrorReason`, `PadronStatus`, `PadronServicio`,
93
+ `ComponenteSociedadA5`, `PadronSoapOptions` y `MAX_PERSONA_LIST`.
94
+
95
+ ### Fixes
96
+ - A4 y A10: los campos `xs:string` con contenido numérico (`codPostal`, `datoAdicional`, `localidad`,
97
+ `numeroInscripcion`) salían como `number`; ahora son `string`. A4 y A10 usan los helpers de
98
+ `mapping.ts` (sin bloques duplicados de dependencia, claves inactivas y domicilio).
99
+ - A100: `id`, `description`, `name` y `value` se preservan tal cual (`"10.50"` ya no se convierte en
100
+ `10.5`, ni `"1E3"` en `1000`). Usa `parseNumbers: false` de arca-common en lugar de envolver `fetch`:
101
+ el A100 ya no desactiva el fallback TLS legacy (`legacyTls`) y respeta el `fetch` de la config.
102
+ - Todos los servicios parsean las respuestas con `parseNumbers: false` y convierten explícitamente los
103
+ campos numéricos del WSDL: los `xs:string` con decimales, exponente o ceros a la izquierda
104
+ (`datoAdicional`, `piso`, `numeroDocumento`, etc.) llegan tal cual (`"1.50"` antes era `"1.5"`).
105
+ - Los elementos `xsi:nil="true"` se tratan como ausentes (antes, por ejemplo, una caracterización nil
106
+ se mapeaba como `{ idCaracterizacion: 0 }`).
107
+ - `condicionIvaDesdePadron`: reconoce los estados del manual A4 en palabras (`ACTIVO EN TRAMITE`,
108
+ `EXENTO`, `EXENTO EN TRAMITE`, `BAJA ...`) además de las abreviaturas; categorías 101 a 104
109
+ (proyectos productivos) como monotributo social; incluye `errorRegimenGeneral` / `errorMonotributo`
110
+ en el motivo y ya no afirma "No figura inscripto" cuando ARCA informó errores.
111
+ - `ArcaPadronError` y `ArcaPadronServiceError` ahora se lanzan de verdad (la documentación enseñaba a
112
+ capturarlos pero el SDK nunca los usaba).
113
+
114
+ ### Deprecated
115
+ - `TipoDocumento` (es `DocTipo` numérico de WSFEv1, no el `tipoDocumento` string del padrón): usar `DocTipo`.
116
+ - `checkServiceErrors` desde este paquete (Padrón informa los errores como SOAP Fault).
117
+ - `ImpuestoId.IVA_NO_INSCRIPTO` (33), sin respaldo en los manuales.
118
+
3
119
  ## 0.3.0 (2026-10-30)
4
120
 
5
121
  ### Breaking changes
@@ -37,6 +153,7 @@ deprecados; A5 sí (reemplazado por la constancia de inscripción).
37
153
  ## 0.2.0
38
154
 
39
155
  - Migración de WSAA/SOAP a `@ramiidv/arca-common`.
156
+ - CI en Node 18/20/22, build standalone, workflow de release, `publishConfig` público y homepage.
40
157
 
41
158
  ## 0.1.0 (2026-03-31)
42
159
 
package/README.md CHANGED
@@ -7,14 +7,14 @@ que pide la factura electronica (`CondicionIVAReceptorId`).
7
7
 
8
8
  ## Caracteristicas
9
9
 
10
- - Zero dependencias SOAP: construye los envelopes SOAP manualmente
11
- - Zero dependencias HTTP: usa `fetch` nativo (Node 18+)
12
- - Firma CMS/PKCS#7 con node-forge
10
+ - Unica dependencia: `@ramiidv/arca-common` (WSAA, SOAP, validadores); usa `fetch` nativo (Node 18+)
13
11
  - ESM y CommonJS (funciona con `import` y con `require`, incluido TypeScript con `"module": "CommonJS"`)
14
12
  - TypeScript estricto con tipos completos
15
13
  - Cache automatico de tokens WSAA, con persistencia opcional (`ticketStorage`) y ajuste de reloj
16
14
  - Cancelacion con `AbortSignal` (global o por llamada)
17
- - Reintentos con backoff exponencial
15
+ - Reintentos con backoff exponencial ante errores transitorios (nunca ante un SOAP Fault)
16
+ - Errores de negocio tipados: `ArcaPadronServiceError` con `reason` (`inexistente`, `inactiva`, ...)
17
+ - Validacion local de CUIT (digito verificador) antes de llamar a ARCA
18
18
  - Sistema de eventos para monitoreo
19
19
 
20
20
  ## Instalacion
@@ -32,23 +32,23 @@ import { ArcaPadron, FileTicketStorage } from '@ramiidv/arca-padron';
32
32
  const padron = new ArcaPadron({
33
33
  cert: readFileSync('./cert.pem', 'utf-8'),
34
34
  key: readFileSync('./key.pem', 'utf-8'),
35
- cuit: '20123456789',
35
+ cuit: '20123456786',
36
36
  production: false, // false = homologacion
37
37
  ticketStorage: new FileTicketStorage('./.arca-tickets'), // recomendado
38
38
  });
39
39
 
40
40
  // Constancia de inscripcion (ex A5) + condicion frente al IVA para facturar
41
41
  import { condicionIvaDesdePadron } from '@ramiidv/arca-padron';
42
- const constancia = await padron.getConstanciaInscripcion('30712345674');
42
+ const constancia = await padron.getConstanciaInscripcion('30712345671');
43
43
  const { condicionIva, motivo } = condicionIvaDesdePadron(constancia);
44
44
  // condicionIva: CondicionIva.RESPONSABLE_INSCRIPTO (1), motivo: "Inscripto en IVA (impuesto 30)."
45
45
 
46
46
  // Consulta completa (A4)
47
- const contribuyente = await padron.getPersona('20123456789');
47
+ const contribuyente = await padron.getPersona('20-11111111-2'); // con o sin guiones
48
48
  console.log(contribuyente.tipoPersona, contribuyente.nombre);
49
49
 
50
50
  // Consulta basica (A10)
51
- const contribuyenteBasico = await padron.getPersonaBasic('20123456789');
51
+ const contribuyenteBasico = await padron.getPersonaBasic('20111111112');
52
52
  console.log(contribuyenteBasico.domicilio?.[0]?.direccion);
53
53
 
54
54
  // Tablas de parametros (A100)
@@ -59,32 +59,30 @@ console.log(provincias.length, 'provincias');
59
59
 
60
60
  ## Configuracion
61
61
 
62
+ `ArcaPadronConfig` extiende `ArcaBaseConfig` de `@ramiidv/arca-common`:
63
+
62
64
  ```typescript
63
- interface ArcaPadronConfig {
64
- /** Certificado X.509 en formato PEM */
65
- cert: string;
66
- /** Clave privada RSA en formato PEM */
67
- key: string;
68
- /** CUIT de la entidad representada */
69
- cuit: string;
70
- /** Usar endpoints de produccion (default: false) */
71
- production?: boolean;
72
- /** Cantidad de reintentos en errores 5xx/red (default: 1) */
73
- retries?: number;
74
- /** Delay base en ms para backoff exponencial (default: 1000) */
75
- retryDelayMs?: number;
76
- /** Callback de eventos para monitoreo */
65
+ interface ArcaPadronConfig extends ArcaBaseConfig {
66
+ // De ArcaBaseConfig:
67
+ cert: string; // Certificado X.509 en formato PEM
68
+ key: string; // Clave privada en formato PEM
69
+ cuit: string | number; // CUIT representada (se valida el digito verificador)
70
+ production?: boolean; // default: false (homologacion)
71
+ timeout?: number; // ms por request (default: 30000)
72
+ retries?: number; // reintentos ante errores transitorios (default: 1)
73
+ retryDelayMs?: number; // backoff exponencial (default: 1000)
74
+ tokenTTLMinutes?: number; // vigencia pedida a WSAA (default: 720)
77
75
  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;
76
+ ticketStorage?: TicketStorage; // persistencia de tickets WSAA (recomendado)
77
+ clockOffsetMs?: number; // relojARCA - relojLocal en ms (default: 0)
78
+ autoClockSkew?: boolean; // default: true
79
+ loginErrorCooldownMs?: number; // default: 60000
80
+ fetch?: typeof fetch; // fetch propio (proxy, mTLS, tests)
81
+ legacyTls?: 'auto' | 'never' | 'always';
82
+ // Propias de Padron:
83
+ signal?: AbortSignal; // cancela todas las llamadas de la instancia
84
+ wsaa?: WsaaClient; // WsaaClient compartido (ej: arca.wsaa de arca-facturacion)
85
+ endpoints?: { wsaa?: string; a5?: string; a4?: string; a10?: string; a13?: string; a100?: string };
88
86
  }
89
87
  ```
90
88
 
@@ -97,71 +95,102 @@ Si usas tambien `@ramiidv/arca-facturacion` con el mismo certificado, comparti e
97
95
 
98
96
  ```typescript
99
97
  const arca = new Arca({ cuit, cert, key, ticketStorage });
100
- const padron = new ArcaPadron({ cuit: String(cuit), cert, key, wsaa: arca.wsaa });
98
+ const padron = new ArcaPadron({ cuit, cert, key, wsaa: arca.wsaa });
101
99
  ```
102
100
 
103
- Todos los metodos aceptan un ultimo parametro opcional `{ signal }`.
101
+ Todos los metodos aceptan un ultimo parametro opcional `{ signal }`. Las CUIT se aceptan con o sin
102
+ guiones (`'20-11111111-2'`, `'20111111112'` o `20111111112`): se validan localmente (digito
103
+ verificador) y se envian normalizadas; una CUIT invalida lanza `ArcaValidationError` sin llamar a ARCA.
104
+
105
+ Todas las operaciones de Padron son consultas (no modifican nada en ARCA): se pueden reintentar sin
106
+ riesgo.
104
107
 
105
108
  ## API
106
109
 
107
110
  ### Metodos de alto nivel
108
111
 
109
- #### `getConstanciaInscripcion(cuit: string): Promise<PersonaA5>`
112
+ #### `getConstanciaInscripcion(cuit): Promise<PersonaA5>`
110
113
 
111
114
  Constancia de inscripcion via `ws_sr_constancia_inscripcion` (metodo `getPersona_v2`). Reemplaza a
112
115
  Padron A5 (`ws_sr_padron_a5`), deprecado por ARCA. Incluye datos generales, domicilio fiscal,
113
116
  caracterizaciones, regimen general (impuestos, actividades, regimenes), monotributo (categoria,
114
- impuestos, actividad) y, si ARCA no puede emitir la constancia, `errorConstancia`.
117
+ impuestos, actividad, `componenteDeSociedad`) y, si ARCA no puede emitir la constancia (o una parte),
118
+ `errorConstancia` / `errorRegimenGeneral` / `errorMonotributo`: esos casos se devuelven, no se lanzan.
115
119
 
116
120
  ```typescript
117
- const constancia = await padron.getConstanciaInscripcion('30712345674');
118
- constancia.domicilioFiscal; // { direccion, localidad, codPostal, idProvincia, ... }
119
- constancia.impuestos; // impuestos de ambos regimenes
121
+ const constancia = await padron.getConstanciaInscripcion('30712345671');
122
+ constancia.domicilioFiscal; // { direccion, localidad, codPostal, idProvincia, ... }
123
+ constancia.impuestos; // impuestos de ambos regimenes
120
124
  constancia.monotributo?.categoria; // { idCategoria, descripcionCategoria, ... }
121
125
  ```
122
126
 
127
+ #### `getConstanciasInscripcion(cuits): Promise<PersonaA5[]>`
128
+
129
+ Hasta 250 CUITs en una llamada (`getPersonaList_v2`). Las CUITs inexistentes no hacen fallar la
130
+ consulta: vuelven como una persona con `errorConstancia.error = ['No existe persona con ese Id']`.
131
+
132
+ ```typescript
133
+ const constancias = await padron.getConstanciasInscripcion(['20224107030', '27015942210']);
134
+ for (const c of constancias) {
135
+ if (c.errorConstancia) console.warn(c.idPersona, c.errorConstancia.error);
136
+ }
137
+ ```
138
+
123
139
  #### `condicionIvaDesdePadron(persona): { condicionIva: CondicionIva | null; motivo: string }`
124
140
 
125
141
  Funcion pura (no consulta ARCA). Acepta una constancia (`PersonaA5`) o una persona de A4:
126
142
 
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) |
143
+ | Padron | `condicionIva` |
144
+ | --------------------------------------------------------------------------- | ------------------------------------------ |
145
+ | Monotributo activo (impuesto 20 activo; si no figura el 20, la categoria) | `MONOTRIBUTISTA` (6) |
146
+ | Monotributo social (categorias 61, 99, 100 y proyectos productivos 101-104) | `MONOTRIBUTO_SOCIAL` (13) |
147
+ | Trabajador independiente promovido (por la descripcion de la categoria) | `MONOTRIBUTO_INDEPENDIENTE_PROMOVIDO` (16) |
148
+ | IVA (impuesto 30) `ACTIVO` / `ACTIVO EN TRAMITE` / `AC` | `RESPONSABLE_INSCRIPTO` (1) |
149
+ | IVA (impuesto 30) `EXENTO` / `EXENTO EN TRAMITE` / `EX`, o impuesto 32 | `EXENTO` (4) |
150
+ | Impuesto 34 (IVA no alcanzado) | `IVA_NO_ALCANZADO` (15) |
151
+ | Ninguno de los anteriores, constancia no emitida o con errores | `null` (con el motivo) |
152
+
153
+ Los impuestos en `BAJA PROVISORIA`, `BAJA DEFINITIVA` o `NO APORTANTE` no cuentan (un impuesto 20
154
+ en baja no se considera monotributo aunque haya categoria). Si el padron no alcanza, devuelve `null`
155
+ en lugar de asumir consumidor final: decidilo segun la operacion. Si ARCA informo
156
+ `errorRegimenGeneral` / `errorMonotributo`, el motivo los incluye.
136
157
 
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.
158
+ Fuentes: manual de `ws_sr_constancia_inscripcion` v4.1 (impuestos 20 y 30, estado `AC`, categorias
159
+ de monotributo del anexo 5.3) y manual de `ws_sr_padron_a4` v1.3 §5.3 (TipoEstado). Los impuestos 32
160
+ y 34 no figuran en los manuales: se reconocen por id o por su descripcion. La categoria 98
161
+ (`B ASOCIADO COOPERATIVA`) se trata como monotributo comun.
140
162
 
141
- #### `getPersonaA13(cuit: string): Promise<PersonaA13>`
163
+ #### `getPersonaA13(cuit): Promise<PersonaA13>` y `getPersonaA13V2(cuit)`
142
164
 
143
- Datos basicos via `ws_sr_padron_a13`. Tambien `getIdPersonaListByDocumento(dni)` devuelve los
144
- CUIT/CUIL asociados a un documento.
165
+ Datos basicos via `ws_sr_padron_a13`. `getPersona` falla con `reason: 'inactiva'` si la clave esta
166
+ inactiva; `getPersonaV2` (manual A13 v1.4) devuelve los datos igual (con `estadoClave: 'INACTIVO'`).
145
167
 
146
- #### `getPersona(cuit: string): Promise<PersonaA4>`
168
+ #### `getIdPersonaListByDocumento(documento): Promise<string[]>`
169
+
170
+ CUIT/CUIL asociados a un numero de documento (A13). Acepta puntos y espacios (`'11.709.676'`).
171
+ Devuelve `[]` si ARCA no informa claves.
172
+
173
+ #### `getPersona(cuit): Promise<PersonaA4>`
147
174
 
148
175
  Obtiene los datos completos de un contribuyente via ws_sr_padron_a4. Autentica automaticamente con WSAA.
149
176
 
150
177
  ```typescript
151
- const contribuyente = await padron.getPersona('20123456789');
178
+ const contribuyente = await padron.getPersona('20111111112');
152
179
  ```
153
180
 
154
- #### `getPersonaBasic(cuit: string): Promise<PersonaA10>`
181
+ #### `getPersonaBasic(cuit): Promise<PersonaA10>`
155
182
 
156
183
  Obtiene los datos basicos de un contribuyente via ws_sr_padron_a10.
157
184
 
158
185
  ```typescript
159
- const contribuyenteBasico = await padron.getPersonaBasic('20123456789');
186
+ const contribuyenteBasico = await padron.getPersonaBasic('20111111112');
160
187
  ```
161
188
 
162
189
  #### `getParametros(collection: string): Promise<ParameterRecord[]>`
163
190
 
164
- Obtiene una tabla de parametros via ws_sr_padron_a100.
191
+ Obtiene una tabla de parametros via ws_sr_padron_a100. `id`, `descripcion` y los `value` de los
192
+ atributos se devuelven tal cual los envia ARCA (`"10.50"` sigue siendo `"10.50"`). Lanza
193
+ `ArcaPadronError` si la respuesta no trae `parameterCollection`; una coleccion vacia devuelve `[]`.
165
194
 
166
195
  ```typescript
167
196
  import { CollectionName } from '@ramiidv/arca-padron';
@@ -171,15 +200,20 @@ const tiposDocumento = await padron.getParametros(CollectionName.TIPO_DOCUMENTO)
171
200
  const tiposRelacion = await padron.getParametros(CollectionName.TIPO_RELACION);
172
201
  ```
173
202
 
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`.
203
+ Colecciones disponibles (enum `CollectionName`, manual A100 v2.1 anexo 5.1): `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`, `AUTONOMO_MONOTRIBUTO`, `REGIMEN`, `TIPO_REGIMEN`, `CARACTERIZACION`, `TIPO_ARCHIVO`, `ACTIVIDAD_RUBRO`, `RUBRO_ACTIVIDAD`, `ACTIVIDAD_OCUPACIONAL`.
204
+ La coleccion de categorias de monotributo no se incluye porque su nombre aparece cortado en el manual.
175
205
 
176
- #### `status(): Promise<{ a5, a4, a10, a13, a100 }>`
206
+ #### `status(): Promise<PadronStatus>`
177
207
 
178
- Verifica el estado de los servicios (no requiere autenticacion).
208
+ Verifica el estado de los servicios (`dummy`, no requiere autenticacion). Consulta los cinco en
209
+ paralelo con `Promise.allSettled`: cada uno es un `PromiseSettledResult<ServerStatus>`, asi que un
210
+ servicio caido no oculta el estado de los demas.
179
211
 
180
212
  ```typescript
181
- const estadoServicios = await padron.status();
182
- console.log(estadoServicios.a4.appserver); // "OK"
213
+ const estado = await padron.status();
214
+ if (estado.a4.status === 'fulfilled')
215
+ console.log(estado.a4.value.appserver); // "OK"
216
+ else console.error('A4 caido:', estado.a4.reason);
183
217
  ```
184
218
 
185
219
  ### Acceso a clientes de bajo nivel
@@ -187,7 +221,9 @@ console.log(estadoServicios.a4.appserver); // "OK"
187
221
  Para casos avanzados, se pueden usar los clientes individuales directamente:
188
222
 
189
223
  ```typescript
190
- const padron = new ArcaPadron({ /* ... */ });
224
+ const padron = new ArcaPadron({
225
+ /* ... */
226
+ });
191
227
 
192
228
  // Obtener ticket de acceso manualmente
193
229
  const ticket = await padron.wsaa.getAccessTicket('ws_sr_padron_a4');
@@ -195,11 +231,12 @@ const ticket = await padron.wsaa.getAccessTicket('ws_sr_padron_a4');
195
231
  const credenciales = {
196
232
  Token: ticket.token,
197
233
  Sign: ticket.sign,
198
- CuitRepresentada: '20123456789',
234
+ CuitRepresentada: '20123456786',
199
235
  };
200
236
 
201
237
  // Llamar directamente al servicio
202
- const contribuyente = await padron.a4.getPersona(credenciales, '20123456789');
238
+ const contribuyente = await padron.a4.getPersona(credenciales, '20111111112');
239
+ // Tambien: padron.a5.getPersona / getPersonaList, padron.a13.getPersonaV2, padron.a100.getParameterCollectionByName
203
240
  ```
204
241
 
205
242
  Clientes disponibles: `padron.wsaa`, `padron.a5` (constancia), `padron.a4`, `padron.a10`,
@@ -207,6 +244,10 @@ Clientes disponibles: `padron.wsaa`, `padron.a5` (constancia), `padron.a4`, `pad
207
244
 
208
245
  ## Tipos de respuesta
209
246
 
247
+ Los campos `xs:string` de los WSDL (codigos postales, datos adicionales, numeros de inscripcion,
248
+ documentos) y los `xs:long` (CUIT, actividades, telefonos) se devuelven siempre como `string`, aunque
249
+ sean numericos. Los elementos `xsi:nil` se tratan como ausentes.
250
+
210
251
  ### PersonaA4 (datos completos)
211
252
 
212
253
  ```typescript
@@ -284,50 +325,57 @@ interface ParameterRecord {
284
325
 
285
326
  interface ParameterAttribute {
286
327
  name: string;
287
- value: string;
328
+ value?: string; // tal cual lo envia ARCA (xs:string)
288
329
  }
289
330
  ```
290
331
 
291
332
  ## Manejo de errores
292
333
 
293
- El SDK usa una jerarquia de errores de 4 clases:
294
-
295
334
  ```
296
335
  Error
297
336
  └── ArcaError (base, de @ramiidv/arca-common)
298
- ├── ArcaPadronError
337
+ ├── ArcaPadronError (respuesta de ARCA sin un dato obligatorio, ej: personaReturn sin persona)
299
338
  ├── ArcaAuthError (errores de WSAA)
300
339
  │ └── ArcaTicketVigenteError (TA vigente que no esta en memoria ni en el storage)
340
+ ├── ArcaValidationError (CUIT o documento invalido: no se llamo a ARCA)
301
341
  ├── ArcaServiceError
302
- │ └── ArcaPadronServiceError (errores de negocio)
303
- └── ArcaSoapError (errores HTTP/transporte, SOAP Faults)
342
+ │ └── ArcaPadronServiceError (errores de negocio: reason + errors + cause)
343
+ └── ArcaSoapError (HTTP/red/timeout y SOAP Faults no reconocidos)
304
344
  ```
305
345
 
306
346
  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`).
347
+ cargada. ARCA informa los errores de negocio como SOAP Fault; el SDK reconoce los textos de los
348
+ manuales y los convierte en `ArcaPadronServiceError` con un `reason` tipado (el `ArcaSoapError`
349
+ original queda en `cause`). No se reintentan.
350
+
351
+ | `reason` | Mensaje de ARCA |
352
+ | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
353
+ | `inexistente` | "La Clave (CUIT/CUIL) consultada es inexistente", "No existe persona con ese Id" |
354
+ | `inactiva` | "La clave (CUIT/CUIL) consultada se encuentra INACTIVA" (A13: usar `getPersonaA13V2`) |
355
+ | `id_invalido` | "El Id de la persona no es valido" |
356
+ | `no_autorizado` | "No autorizado, par token/sign invalido.", "Falta token y/o sign.", "Debe enviar la CUIT representada", "Este token no le permite actuar en representacion de la CUIT ..." |
357
+
358
+ Un SOAP Fault con otro texto queda como `ArcaSoapError` (con `faultString`). En la constancia de
359
+ inscripcion, los motivos por los que ARCA no emite la constancia (CUIT limitada, domicilio
360
+ incompleto, etc.) no son excepciones: vienen en `errorConstancia`, `errorRegimenGeneral` y
361
+ `errorMonotributo`.
309
362
 
310
363
  ```typescript
311
- import {
312
- ArcaAuthError,
313
- ArcaPadronServiceError,
314
- ArcaSoapError,
315
- } from '@ramiidv/arca-padron';
364
+ import { ArcaAuthError, ArcaPadronServiceError, ArcaSoapError, ArcaValidationError } from '@ramiidv/arca-padron';
316
365
 
317
366
  try {
318
- await padron.getPersona('20123456789');
367
+ await padron.getPersona('20111111112');
319
368
  } catch (error) {
320
- if (error instanceof ArcaAuthError) {
321
- // Certificado vencido, servicio no autorizado, WSAA caido
322
- console.error('Error de autenticacion:', error.message);
369
+ if (error instanceof ArcaValidationError) {
370
+ console.error('CUIT invalida:', error.message);
323
371
  } else if (error instanceof ArcaPadronServiceError) {
324
- // Errores de negocio (CUIT no encontrada, etc.)
325
- for (const detalle of error.errors) {
326
- console.error(`[${detalle.code}] ${detalle.msg}`);
327
- }
372
+ if (error.reason === 'inexistente') console.error('La CUIT no existe');
373
+ else if (error.reason === 'inactiva') console.error('La CUIT esta inactiva');
374
+ else console.error(error.errors[0]?.msg);
375
+ } else if (error instanceof ArcaAuthError) {
376
+ console.error('Error de autenticacion:', error.message);
328
377
  } else if (error instanceof ArcaSoapError) {
329
- // Errores HTTP/red
330
- console.error('Error HTTP:', error.statusCode, error.message);
378
+ console.error('Error HTTP/red:', error.statusCode, error.message);
331
379
  }
332
380
  }
333
381
  ```
@@ -367,20 +415,19 @@ const padron = new ArcaPadron({
367
415
  ## Enums utiles
368
416
 
369
417
  ```typescript
370
- import {
371
- Provincia,
372
- TipoDomicilio,
373
- TipoPersona,
374
- ImpuestoId,
375
- CollectionName,
376
- } from '@ramiidv/arca-padron';
418
+ import { Provincia, TipoDomicilio, TipoPersona, ImpuestoId, CollectionName } from '@ramiidv/arca-padron';
377
419
 
378
420
  // Verificar si el contribuyente esta inscripto en IVA (mejor: condicionIvaDesdePadron)
379
421
  const tieneIva = contribuyente.impuesto?.some(
380
- (imp) => imp.idImpuesto === ImpuestoId.IVA_RESPONSABLE_INSCRIPTO && imp.estado === 'ACTIVO'
422
+ (imp) => imp.idImpuesto === ImpuestoId.IVA_RESPONSABLE_INSCRIPTO && imp.estado?.startsWith('ACTIVO'),
381
423
  );
382
424
 
383
- // ImpuestoId.MONOTRIBUTO = 20 (antes figuraba como 21, que era incorrecto)
425
+ // ImpuestoId.MONOTRIBUTO = 20, IVA_RESPONSABLE_INSCRIPTO = 30, BIENES_PERSONALES = 180,
426
+ // EMPLEADOR = 301, AUTONOMOS = 308 (manuales de ARCA). IVA_EXENTO (32) e IVA_NO_ALCANZADO (34)
427
+ // no figuran en los manuales del padron.
428
+ //
429
+ // `TipoDocumento` esta deprecado: es `DocTipo` (codigos numericos de WSFEv1), no el
430
+ // `tipoDocumento` string del padron ("DNI", "LC"...).
384
431
  ```
385
432
 
386
433
  ## Requisitos
@@ -0,0 +1,107 @@
1
+ import { ArcaSdkBase } 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, PadronServicio, PadronStatus, ParameterRecord, PersonaA4, PersonaA5, PersonaA10, PersonaA13 } 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 extends ArcaSdkBase<PadronServicio> {
34
+ /** Low-level Constancia de Inscripción (ex Padrón A5) client */
35
+ readonly a5: PadronA5Client;
36
+ /** Low-level Padrón A4 client for direct access */
37
+ readonly a4: PadronA4Client;
38
+ /** Low-level Padrón A10 client for direct access */
39
+ readonly a10: PadronA10Client;
40
+ /** Low-level Padrón A13 client for direct access */
41
+ readonly a13: PadronA13Client;
42
+ /** Low-level Padrón A100 client for direct access */
43
+ readonly a100: PadronA100Client;
44
+ /** @throws ArcaValidationError si la CUIT representada es inválida. */
45
+ constructor(config: ArcaPadronConfig);
46
+ /**
47
+ * Constancia de inscripción (ws_sr_constancia_inscripcion, ex Padrón A5,
48
+ * `getPersona_v2`): datos generales, domicilio fiscal, impuestos del régimen
49
+ * general y monotributo. Combinar con `condicionIvaDesdePadron` para facturar.
50
+ * @param cuit - CUIT a consultar (con o sin guiones)
51
+ * @throws ArcaValidationError si la CUIT es inválida (dígito verificador)
52
+ * @throws ArcaPadronServiceError si ARCA informa la CUIT inexistente, inactiva, etc.
53
+ */
54
+ getConstanciaInscripcion(cuit: string | number, call?: CallOptions): Promise<PersonaA5>;
55
+ /**
56
+ * Constancias de inscripción de hasta 250 CUITs en una llamada
57
+ * (`getPersonaList_v2`). Las CUITs inexistentes vuelven con `errorConstancia`
58
+ * ("No existe persona con ese Id") en lugar de hacer fallar la consulta.
59
+ */
60
+ getConstanciasInscripcion(cuits: Array<string | number>, call?: CallOptions): Promise<PersonaA5[]>;
61
+ /**
62
+ * Datos completos de un contribuyente (Padrón A4).
63
+ * @param cuit - CUIT/CUIL a consultar (con o sin guiones)
64
+ */
65
+ getPersona(cuit: string | number, call?: CallOptions): Promise<PersonaA4>;
66
+ /**
67
+ * Datos básicos de un contribuyente (Padrón A10).
68
+ * @param cuit - CUIT/CUIL a consultar (con o sin guiones)
69
+ */
70
+ getPersonaBasic(cuit: string | number, call?: CallOptions): Promise<PersonaA10>;
71
+ /**
72
+ * Datos básicos de un contribuyente (Padrón A13, `getPersona`). Con la clave
73
+ * inactiva ARCA responde con error (`reason: 'inactiva'`): ver `getPersonaA13V2`.
74
+ * @param cuit - CUIT/CUIL a consultar (con o sin guiones)
75
+ */
76
+ getPersonaA13(cuit: string | number, call?: CallOptions): Promise<PersonaA13>;
77
+ /**
78
+ * Datos básicos de un contribuyente (Padrón A13, `getPersonaV2`): responde
79
+ * también si la clave está INACTIVA (manual A13 v1.4).
80
+ */
81
+ getPersonaA13V2(cuit: string | number, call?: CallOptions): Promise<PersonaA13>;
82
+ /**
83
+ * CUITs/CUILs asociados a un número de documento (Padrón A13).
84
+ * @param documento - Número de documento (DNI); se aceptan puntos y espacios
85
+ */
86
+ getIdPersonaListByDocumento(documento: string | number, call?: CallOptions): Promise<string[]>;
87
+ /**
88
+ * Tabla de parámetros (Padrón A100) por nombre de colección.
89
+ * @param collection - Nombre de la colección (ej: CollectionName.PROVINCIA)
90
+ */
91
+ getParametros(collection: string, call?: CallOptions): Promise<ParameterRecord[]>;
92
+ /**
93
+ * Estado de los servicios de Padrón (`dummy`, sin autenticación). Consulta
94
+ * todos en paralelo y devuelve el resultado de cada uno por separado: un
95
+ * servicio caído no oculta el estado de los demás.
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * const s = await padron.status();
100
+ * if (s.a4.status === 'fulfilled') console.log(s.a4.value.appserver);
101
+ * else console.error(s.a4.reason);
102
+ * ```
103
+ */
104
+ status(call?: CallOptions): Promise<PadronStatus>;
105
+ private getAuth;
106
+ }
107
+ //# 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,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,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,cAAc,EACd,YAAY,EACZ,eAAe,EACf,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,UAAW,SAAQ,WAAW,CAAC,cAAc,CAAC;IACzD,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,uEAAuE;gBAC3D,MAAM,EAAE,gBAAgB;IAwBpC;;;;;;;OAOG;IACG,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAM7F;;;;OAIG;IACG,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMxG;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAM/E;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAMrF;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnF;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAMrF;;;OAGG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMpG;;;OAGG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAMvF;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;YAgBzC,OAAO;CAQtB"}