@ramiidv/arca-padron 0.2.0 → 0.4.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.
- package/CHANGELOG.md +116 -0
- package/README.md +205 -65
- package/dist/cjs/arca-padron.d.ts +111 -0
- package/dist/cjs/arca-padron.d.ts.map +1 -0
- package/dist/cjs/arca-padron.js +211 -0
- package/dist/cjs/arca-padron.js.map +1 -0
- package/dist/cjs/base-client.d.ts +45 -0
- package/dist/cjs/base-client.d.ts.map +1 -0
- package/dist/cjs/base-client.js +68 -0
- package/dist/cjs/base-client.js.map +1 -0
- package/dist/cjs/condicion-iva.d.ts +28 -0
- package/dist/cjs/condicion-iva.d.ts.map +1 -0
- package/dist/cjs/condicion-iva.js +166 -0
- package/dist/cjs/condicion-iva.js.map +1 -0
- package/dist/cjs/constants.d.ts +142 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +155 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/errors.d.ts +50 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +62 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +24 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +66 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mapping.d.ts +52 -0
- package/dist/cjs/mapping.d.ts.map +1 -0
- package/dist/cjs/mapping.js +135 -0
- package/dist/cjs/mapping.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/padron-a10.d.ts +21 -0
- package/dist/cjs/padron-a10.d.ts.map +1 -0
- package/dist/cjs/padron-a10.js +38 -0
- package/dist/cjs/padron-a10.js.map +1 -0
- package/dist/cjs/padron-a100.d.ts +20 -0
- package/dist/cjs/padron-a100.d.ts.map +1 -0
- package/dist/cjs/padron-a100.js +48 -0
- package/dist/cjs/padron-a100.js.map +1 -0
- package/dist/cjs/padron-a13.d.ts +34 -0
- package/dist/cjs/padron-a13.d.ts.map +1 -0
- package/dist/cjs/padron-a13.js +100 -0
- package/dist/cjs/padron-a13.js.map +1 -0
- package/dist/cjs/padron-a4.d.ts +21 -0
- package/dist/cjs/padron-a4.d.ts.map +1 -0
- package/dist/cjs/padron-a4.js +119 -0
- package/dist/cjs/padron-a4.js.map +1 -0
- package/dist/cjs/padron-a5.d.ts +37 -0
- package/dist/cjs/padron-a5.d.ts.map +1 -0
- package/dist/cjs/padron-a5.js +181 -0
- package/dist/cjs/padron-a5.js.map +1 -0
- package/dist/cjs/types.d.ts +337 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/arca-padron.d.ts +111 -0
- package/dist/esm/arca-padron.d.ts.map +1 -0
- package/dist/esm/arca-padron.js +207 -0
- package/dist/esm/arca-padron.js.map +1 -0
- package/dist/esm/base-client.d.ts +45 -0
- package/dist/esm/base-client.d.ts.map +1 -0
- package/dist/esm/base-client.js +64 -0
- package/dist/esm/base-client.js.map +1 -0
- package/dist/esm/condicion-iva.d.ts +28 -0
- package/dist/esm/condicion-iva.d.ts.map +1 -0
- package/dist/esm/condicion-iva.js +163 -0
- package/dist/esm/condicion-iva.js.map +1 -0
- package/dist/esm/constants.d.ts +142 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/{constants.js → esm/constants.js} +67 -7
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/errors.d.ts +50 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +55 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +24 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +30 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mapping.d.ts +52 -0
- package/dist/esm/mapping.d.ts.map +1 -0
- package/dist/esm/mapping.js +118 -0
- package/dist/esm/mapping.js.map +1 -0
- package/dist/esm/padron-a10.d.ts +21 -0
- package/dist/esm/padron-a10.d.ts.map +1 -0
- package/dist/esm/padron-a10.js +33 -0
- package/dist/esm/padron-a10.js.map +1 -0
- package/dist/esm/padron-a100.d.ts +20 -0
- package/dist/esm/padron-a100.d.ts.map +1 -0
- package/dist/esm/padron-a100.js +44 -0
- package/dist/esm/padron-a100.js.map +1 -0
- package/dist/esm/padron-a13.d.ts +34 -0
- package/dist/esm/padron-a13.d.ts.map +1 -0
- package/dist/esm/padron-a13.js +94 -0
- package/dist/esm/padron-a13.js.map +1 -0
- package/dist/esm/padron-a4.d.ts +21 -0
- package/dist/esm/padron-a4.d.ts.map +1 -0
- package/dist/esm/padron-a4.js +114 -0
- package/dist/esm/padron-a4.js.map +1 -0
- package/dist/esm/padron-a5.d.ts +37 -0
- package/dist/esm/padron-a5.d.ts.map +1 -0
- package/dist/esm/padron-a5.js +176 -0
- package/dist/esm/padron-a5.js.map +1 -0
- package/dist/esm/types.d.ts +337 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js.map +1 -0
- package/llms.txt +69 -28
- package/package.json +25 -17
- package/dist/arca-padron.d.ts +0 -70
- package/dist/arca-padron.d.ts.map +0 -1
- package/dist/arca-padron.js +0 -129
- package/dist/arca-padron.js.map +0 -1
- package/dist/base-client.d.ts +0 -26
- package/dist/base-client.d.ts.map +0 -1
- package/dist/base-client.js +0 -27
- package/dist/base-client.js.map +0 -1
- package/dist/constants.d.ts +0 -79
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/errors.d.ts +0 -20
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -24
- package/dist/errors.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -16
- package/dist/index.js.map +0 -1
- package/dist/padron-a10.d.ts +0 -16
- package/dist/padron-a10.d.ts.map +0 -1
- package/dist/padron-a10.js +0 -74
- package/dist/padron-a10.js.map +0 -1
- package/dist/padron-a100.d.ts +0 -15
- package/dist/padron-a100.d.ts.map +0 -1
- package/dist/padron-a100.js +0 -40
- package/dist/padron-a100.js.map +0 -1
- package/dist/padron-a4.d.ts +0 -16
- package/dist/padron-a4.d.ts.map +0 -1
- package/dist/padron-a4.js +0 -174
- package/dist/padron-a4.js.map +0 -1
- package/dist/soap-client.d.ts +0 -2
- package/dist/soap-client.d.ts.map +0 -1
- package/dist/soap-client.js +0 -3
- package/dist/soap-client.js.map +0 -1
- package/dist/types.d.ts +0 -172
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/wsaa.d.ts +0 -3
- package/dist/wsaa.d.ts.map +0 -1
- package/dist/wsaa.js +0 -2
- package/dist/wsaa.js.map +0 -1
- /package/dist/{types.js → esm/types.js} +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.4.0 (2026-11-01)
|
|
4
|
+
|
|
5
|
+
### Breaking changes
|
|
6
|
+
- Requiere `@ramiidv/arca-common` ^0.4.0. `ArcaPadronConfig` extiende `ArcaBaseConfig` (`cuit` acepta
|
|
7
|
+
`string | number`; se agregan `tokenTTLMinutes`, `loginErrorCooldownMs`, `fetch`, `legacyTls` y
|
|
8
|
+
`endpoints`, que se pasan al `WsaaClient` y a cada servicio).
|
|
9
|
+
- Las CUIT se validan localmente con `validateCuit` (dígito verificador) y se envían normalizadas: una
|
|
10
|
+
CUIT inválida (también la representada de la config) lanza `ArcaValidationError` sin llamar a ARCA.
|
|
11
|
+
- Los SOAP Faults de negocio conocidos (CUIT inexistente, clave INACTIVA, id inválido, token no
|
|
12
|
+
autorizado; textos de los manuales) se lanzan como `ArcaPadronServiceError` con `reason` tipado y el
|
|
13
|
+
`ArcaSoapError` original en `cause` (antes llegaban como `ArcaSoapError`).
|
|
14
|
+
- Si `personaReturn` no trae `persona` (A4, A10, A13), la constancia no trae `datosGenerales` ni
|
|
15
|
+
`errorConstancia`, o A100 no trae `parameterCollection`, se lanza `ArcaPadronError` (antes se
|
|
16
|
+
devolvía una persona inventada `{ idPersona: '', tipoPersona: 'FISICA' }` o `[]`). También si falta el
|
|
17
|
+
id de un ítem (`idImpuesto`, `idActividad`, `idCategoria`, etc.): ya no se rellenan con `0` / `''`.
|
|
18
|
+
- `status()` devuelve `PromiseSettledResult<ServerStatus>` por servicio (`Promise.allSettled`): un
|
|
19
|
+
servicio caído ya no hace fallar todo.
|
|
20
|
+
- `ImpuestoId.BIENES_PERSONALES` es `180` (estaba como `31`, incorrecto); se quitó el alias
|
|
21
|
+
`ImpuestoId.MONOTRIBUTO_SOCIAL` (mismo valor que `MONOTRIBUTO`, rompía el mapeo inverso).
|
|
22
|
+
- `condicionIvaDesdePadron`: el impuesto 30 en estado `NA` / `NO APORTANTE` ya no se interpreta como IVA
|
|
23
|
+
no alcanzado (`NA` es "NO APORTANTE" en la tabla TipoEstado); un impuesto 20 en baja ya no da
|
|
24
|
+
monotributista aunque haya categoría.
|
|
25
|
+
- Tipos: `DomicilioA4` ya no tiene `estadoDomicilio` (no existe en el WSDL de A4) y, como
|
|
26
|
+
`DependenciaA4`/`DependenciaA10`, tiene sus campos opcionales (son `minOccurs="0"`);
|
|
27
|
+
`ImpuestoA4.estado` y `ParameterAttribute.value` son opcionales.
|
|
28
|
+
- Se eliminaron los módulos internos `soap-client.ts` y `wsaa.ts` (re-exports puros): `WsaaClient`,
|
|
29
|
+
`ensureArray`, `parseXml` y `buildXml` se siguen exportando desde el índice.
|
|
30
|
+
|
|
31
|
+
### Features
|
|
32
|
+
- `getConstanciasInscripcion(cuits)` / `a5.getPersonaList`: `getPersonaList_v2`, hasta 250 CUITs; las
|
|
33
|
+
inexistentes vuelven con `errorConstancia`.
|
|
34
|
+
- `getPersonaA13V2(cuit)` / `a13.getPersonaV2`: consulta de claves INACTIVAS (manual A13 v1.4).
|
|
35
|
+
- `monotributo.componenteDeSociedad` en la constancia (tipo `relacion` del WSDL).
|
|
36
|
+
- `CollectionName`: `AUTONOMO_MONOTRIBUTO`, `REGIMEN`, `TIPO_REGIMEN`, `CARACTERIZACION`,
|
|
37
|
+
`TIPO_ARCHIVO`, `ACTIVIDAD_RUBRO`, `RUBRO_ACTIVIDAD`, `ACTIVIDAD_OCUPACIONAL` (manual A100 v2.1).
|
|
38
|
+
- `ImpuestoId`: `MONOTRIBUTO_AUTONOMO` (21), `AUTONOMOS` (308).
|
|
39
|
+
- `getIdPersonaListByDocumento` acepta el documento con puntos/espacios y lo valida.
|
|
40
|
+
- Se exportan `ArcaValidationError`, `DocTipo`, `PadronErrorReason`, `PadronStatus`, `PadronServicio`,
|
|
41
|
+
`ComponenteSociedadA5`, `PadronSoapOptions` y `MAX_PERSONA_LIST`.
|
|
42
|
+
|
|
43
|
+
### Fixes
|
|
44
|
+
- A4 y A10: los campos `xs:string` con contenido numérico (`codPostal`, `datoAdicional`, `localidad`,
|
|
45
|
+
`numeroInscripcion`) salían como `number`; ahora son `string`. A4 y A10 usan los helpers de
|
|
46
|
+
`mapping.ts` (sin bloques duplicados de dependencia, claves inactivas y domicilio).
|
|
47
|
+
- A100: `id`, `description`, `name` y `value` se preservan tal cual (`"10.50"` ya no se convierte en
|
|
48
|
+
`10.5`, ni `"1E3"` en `1000`). Usa `parseNumbers: false` de arca-common en lugar de envolver `fetch`:
|
|
49
|
+
el A100 ya no desactiva el fallback TLS legacy (`legacyTls`) y respeta el `fetch` de la config.
|
|
50
|
+
- Todos los servicios parsean las respuestas con `parseNumbers: false` y convierten explícitamente los
|
|
51
|
+
campos numéricos del WSDL: los `xs:string` con decimales, exponente o ceros a la izquierda
|
|
52
|
+
(`datoAdicional`, `piso`, `numeroDocumento`, etc.) llegan tal cual (`"1.50"` antes era `"1.5"`).
|
|
53
|
+
- Los elementos `xsi:nil="true"` se tratan como ausentes (antes, por ejemplo, una caracterización nil
|
|
54
|
+
se mapeaba como `{ idCaracterizacion: 0 }`).
|
|
55
|
+
- `condicionIvaDesdePadron`: reconoce los estados del manual A4 en palabras (`ACTIVO EN TRAMITE`,
|
|
56
|
+
`EXENTO`, `EXENTO EN TRAMITE`, `BAJA ...`) además de las abreviaturas; categorías 101 a 104
|
|
57
|
+
(proyectos productivos) como monotributo social; incluye `errorRegimenGeneral` / `errorMonotributo`
|
|
58
|
+
en el motivo y ya no afirma "No figura inscripto" cuando ARCA informó errores.
|
|
59
|
+
- `ArcaPadronError` y `ArcaPadronServiceError` ahora se lanzan de verdad (la documentación enseñaba a
|
|
60
|
+
capturarlos pero el SDK nunca los usaba).
|
|
61
|
+
|
|
62
|
+
### Deprecated
|
|
63
|
+
- `TipoDocumento` (es `DocTipo` numérico de WSFEv1, no el `tipoDocumento` string del padrón): usar `DocTipo`.
|
|
64
|
+
- `checkServiceErrors` desde este paquete (Padrón informa los errores como SOAP Fault).
|
|
65
|
+
- `ImpuestoId.IVA_NO_INSCRIPTO` (33), sin respaldo en los manuales.
|
|
66
|
+
|
|
67
|
+
## 0.3.0 (2026-10-30)
|
|
68
|
+
|
|
69
|
+
### Breaking changes
|
|
70
|
+
- Requiere `@ramiidv/arca-common` ^0.3.0 (`AccessTicket.expirationTime` es un string ISO).
|
|
71
|
+
- `ImpuestoId.MONOTRIBUTO` es `20` (estaba como `21`, incorrecto según el manual de
|
|
72
|
+
`ws_sr_constancia_inscripcion`). `ImpuestoId.MONOTRIBUTO_SOCIAL` queda deprecado (mismo valor 20):
|
|
73
|
+
el monotributo social se identifica por la categoría.
|
|
74
|
+
- `status()` devuelve también `a5` y `a13`.
|
|
75
|
+
|
|
76
|
+
### Features
|
|
77
|
+
- `getConstanciaInscripcion(cuit)`: constancia de inscripción (`ws_sr_constancia_inscripcion`,
|
|
78
|
+
`getPersona_v2`), que reemplaza a Padrón A5 (deprecado por ARCA). Tipo `PersonaA5` con datos
|
|
79
|
+
generales, domicilio fiscal, caracterizaciones, régimen general, monotributo y errores.
|
|
80
|
+
- `getPersonaA13(cuit)` y `getIdPersonaListByDocumento(dni)` (`ws_sr_padron_a13`).
|
|
81
|
+
- `condicionIvaDesdePadron(persona)`: condición frente al IVA para `CondicionIVAReceptorId` (también
|
|
82
|
+
reconoce el impuesto 30 en estado `EX` / `NA`).
|
|
83
|
+
- `ticketStorage`, `clockOffsetMs`, `autoClockSkew`, `signal` y `wsaa` en `ArcaPadronConfig`; `signal`
|
|
84
|
+
por llamada en todos los métodos.
|
|
85
|
+
- `ArcaPadronError` y `ArcaPadronServiceError` tienen `code` propio (`ARCA_PADRON_ERROR`,
|
|
86
|
+
`ARCA_PADRON_SERVICE_ERROR`).
|
|
87
|
+
- Re-exporta `CondicionIva`, `MemoryTicketStorage`, `FileTicketStorage` y `ArcaTicketVigenteError`.
|
|
88
|
+
- Build dual ESM + CommonJS con `exports` condicional, y smoke test CommonJS/ESM en CI.
|
|
89
|
+
|
|
90
|
+
### Fixes
|
|
91
|
+
- Se quitaron dependencias que no se usaban (`fast-xml-parser`, `node-forge`): todo pasa por arca-common.
|
|
92
|
+
- A4, A10 y A100 no desenvolvían `personaReturn` / `parameterCollectionReturn`: con respuestas reales de
|
|
93
|
+
ARCA los datos quedaban vacíos y A100 devolvía `[]`.
|
|
94
|
+
- Documentación: el paquete es `@ramiidv/arca-padron` (decía `@ramiidv/arca-padron-sdk`, que da 404).
|
|
95
|
+
- Ejemplo de eventos: los campos son `service` y `source` (decía `serviceId`).
|
|
96
|
+
|
|
97
|
+
### Estado de los servicios
|
|
98
|
+
Según el catálogo de web services de ARCA (consultado el 24/10/2026), A4, A10, A13 y A100 no están
|
|
99
|
+
deprecados; A5 sí (reemplazado por la constancia de inscripción).
|
|
100
|
+
|
|
101
|
+
## 0.2.0
|
|
102
|
+
|
|
103
|
+
- Migración de WSAA/SOAP a `@ramiidv/arca-common`.
|
|
104
|
+
- CI en Node 18/20/22, build standalone, workflow de release, `publishConfig` público y homepage.
|
|
105
|
+
|
|
106
|
+
## 0.1.0 (2026-03-31)
|
|
107
|
+
|
|
108
|
+
### Features
|
|
109
|
+
- Initial release
|
|
110
|
+
- Padrón A4: full taxpayer data (domicilios, impuestos, actividades, regímenes, relaciones, categorías, emails, teléfonos)
|
|
111
|
+
- Padrón A10: minimal taxpayer data (name, status, domicilio fiscal)
|
|
112
|
+
- Padrón A100: parameter tables lookup (provincias, tipos documento, etc.)
|
|
113
|
+
- Auto-handles WSAA authentication
|
|
114
|
+
- Shared infrastructure from @ramiidv/arca-common
|
|
115
|
+
- Retry with exponential backoff on transient errors
|
|
116
|
+
- Event system for logging/debugging
|
package/README.md
CHANGED
|
@@ -1,113 +1,218 @@
|
|
|
1
|
-
# @ramiidv/arca-padron
|
|
1
|
+
# @ramiidv/arca-padron
|
|
2
2
|
|
|
3
|
-
SDK de TypeScript para los web services de Padron de ARCA (ex AFIP)
|
|
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
|
-
-
|
|
8
|
-
-
|
|
9
|
-
- Firma CMS/PKCS#7 con node-forge
|
|
10
|
-
- ESM only
|
|
10
|
+
- Unica dependencia: `@ramiidv/arca-common` (WSAA, SOAP, validadores); usa `fetch` nativo (Node 18+)
|
|
11
|
+
- ESM y CommonJS (funciona con `import` y con `require`, incluido TypeScript con `"module": "CommonJS"`)
|
|
11
12
|
- TypeScript estricto con tipos completos
|
|
12
|
-
- Cache automatico de tokens WSAA
|
|
13
|
-
-
|
|
13
|
+
- Cache automatico de tokens WSAA, con persistencia opcional (`ticketStorage`) y ajuste de reloj
|
|
14
|
+
- Cancelacion con `AbortSignal` (global o por llamada)
|
|
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
|
|
14
18
|
- Sistema de eventos para monitoreo
|
|
15
19
|
|
|
16
20
|
## Instalacion
|
|
17
21
|
|
|
18
22
|
```bash
|
|
19
|
-
npm install @ramiidv/arca-padron
|
|
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
|
|
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
|
-
cuit: '
|
|
35
|
+
cuit: '20123456786',
|
|
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('30712345671');
|
|
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
|
-
const contribuyente = await padron.getPersona('
|
|
47
|
+
const contribuyente = await padron.getPersona('20-11111111-2'); // con o sin guiones
|
|
37
48
|
console.log(contribuyente.tipoPersona, contribuyente.nombre);
|
|
38
49
|
|
|
39
50
|
// Consulta basica (A10)
|
|
40
|
-
const contribuyenteBasico = await padron.getPersonaBasic('
|
|
51
|
+
const contribuyenteBasico = await padron.getPersonaBasic('20111111112');
|
|
41
52
|
console.log(contribuyenteBasico.domicilio?.[0]?.direccion);
|
|
42
53
|
|
|
43
54
|
// Tablas de parametros (A100)
|
|
44
|
-
import { CollectionName } from '@ramiidv/arca-padron
|
|
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
|
```
|
|
48
59
|
|
|
49
60
|
## Configuracion
|
|
50
61
|
|
|
62
|
+
`ArcaPadronConfig` extiende `ArcaBaseConfig` de `@ramiidv/arca-common`:
|
|
63
|
+
|
|
51
64
|
```typescript
|
|
52
|
-
interface ArcaPadronConfig {
|
|
53
|
-
|
|
54
|
-
cert: string;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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)
|
|
75
|
+
onEvent?: (event: ArcaEvent) => void;
|
|
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 };
|
|
67
86
|
}
|
|
68
87
|
```
|
|
69
88
|
|
|
89
|
+
> **Persisti el Ticket de Acceso.** WSAA rechaza el login si ya hay un TA vigente para el
|
|
90
|
+
> certificado y servicio. Sin `ticketStorage`, un reinicio del proceso te deja sin poder consultar
|
|
91
|
+
> hasta que venza (hasta 12 horas, `ArcaTicketVigenteError`). Ver `TicketStorage` en
|
|
92
|
+
> [`@ramiidv/arca-common`](https://github.com/ramiidv/arca-common).
|
|
93
|
+
|
|
94
|
+
Si usas tambien `@ramiidv/arca-facturacion` con el mismo certificado, comparti el cliente WSAA:
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
const arca = new Arca({ cuit, cert, key, ticketStorage });
|
|
98
|
+
const padron = new ArcaPadron({ cuit, cert, key, wsaa: arca.wsaa });
|
|
99
|
+
```
|
|
100
|
+
|
|
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.
|
|
107
|
+
|
|
70
108
|
## API
|
|
71
109
|
|
|
72
110
|
### Metodos de alto nivel
|
|
73
111
|
|
|
74
|
-
#### `
|
|
112
|
+
#### `getConstanciaInscripcion(cuit): Promise<PersonaA5>`
|
|
113
|
+
|
|
114
|
+
Constancia de inscripcion via `ws_sr_constancia_inscripcion` (metodo `getPersona_v2`). Reemplaza a
|
|
115
|
+
Padron A5 (`ws_sr_padron_a5`), deprecado por ARCA. Incluye datos generales, domicilio fiscal,
|
|
116
|
+
caracterizaciones, regimen general (impuestos, actividades, regimenes), monotributo (categoria,
|
|
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.
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
const constancia = await padron.getConstanciaInscripcion('30712345671');
|
|
122
|
+
constancia.domicilioFiscal; // { direccion, localidad, codPostal, idProvincia, ... }
|
|
123
|
+
constancia.impuestos; // impuestos de ambos regimenes
|
|
124
|
+
constancia.monotributo?.categoria; // { idCategoria, descripcionCategoria, ... }
|
|
125
|
+
```
|
|
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
|
+
|
|
139
|
+
#### `condicionIvaDesdePadron(persona): { condicionIva: CondicionIva | null; motivo: string }`
|
|
140
|
+
|
|
141
|
+
Funcion pura (no consulta ARCA). Acepta una constancia (`PersonaA5`) o una persona de A4:
|
|
142
|
+
|
|
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.
|
|
157
|
+
|
|
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.
|
|
162
|
+
|
|
163
|
+
#### `getPersonaA13(cuit): Promise<PersonaA13>` y `getPersonaA13V2(cuit)`
|
|
164
|
+
|
|
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'`).
|
|
167
|
+
|
|
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>`
|
|
75
174
|
|
|
76
175
|
Obtiene los datos completos de un contribuyente via ws_sr_padron_a4. Autentica automaticamente con WSAA.
|
|
77
176
|
|
|
78
177
|
```typescript
|
|
79
|
-
const contribuyente = await padron.getPersona('
|
|
178
|
+
const contribuyente = await padron.getPersona('20111111112');
|
|
80
179
|
```
|
|
81
180
|
|
|
82
|
-
#### `getPersonaBasic(cuit
|
|
181
|
+
#### `getPersonaBasic(cuit): Promise<PersonaA10>`
|
|
83
182
|
|
|
84
183
|
Obtiene los datos basicos de un contribuyente via ws_sr_padron_a10.
|
|
85
184
|
|
|
86
185
|
```typescript
|
|
87
|
-
const contribuyenteBasico = await padron.getPersonaBasic('
|
|
186
|
+
const contribuyenteBasico = await padron.getPersonaBasic('20111111112');
|
|
88
187
|
```
|
|
89
188
|
|
|
90
189
|
#### `getParametros(collection: string): Promise<ParameterRecord[]>`
|
|
91
190
|
|
|
92
|
-
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 `[]`.
|
|
93
194
|
|
|
94
195
|
```typescript
|
|
95
|
-
import { CollectionName } from '@ramiidv/arca-padron
|
|
196
|
+
import { CollectionName } from '@ramiidv/arca-padron';
|
|
96
197
|
|
|
97
198
|
const provincias = await padron.getParametros(CollectionName.PROVINCIA);
|
|
98
199
|
const tiposDocumento = await padron.getParametros(CollectionName.TIPO_DOCUMENTO);
|
|
99
200
|
const tiposRelacion = await padron.getParametros(CollectionName.TIPO_RELACION);
|
|
100
201
|
```
|
|
101
202
|
|
|
102
|
-
Colecciones disponibles (enum `CollectionName`,
|
|
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.
|
|
103
205
|
|
|
104
|
-
#### `status(): Promise<
|
|
206
|
+
#### `status(): Promise<PadronStatus>`
|
|
105
207
|
|
|
106
|
-
Verifica el estado de los
|
|
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.
|
|
107
211
|
|
|
108
212
|
```typescript
|
|
109
|
-
const
|
|
110
|
-
console.log(
|
|
213
|
+
const estado = await padron.status();
|
|
214
|
+
if (estado.a4.status === 'fulfilled') console.log(estado.a4.value.appserver); // "OK"
|
|
215
|
+
else console.error('A4 caido:', estado.a4.reason);
|
|
111
216
|
```
|
|
112
217
|
|
|
113
218
|
### Acceso a clientes de bajo nivel
|
|
@@ -123,15 +228,23 @@ const ticket = await padron.wsaa.getAccessTicket('ws_sr_padron_a4');
|
|
|
123
228
|
const credenciales = {
|
|
124
229
|
Token: ticket.token,
|
|
125
230
|
Sign: ticket.sign,
|
|
126
|
-
CuitRepresentada: '
|
|
231
|
+
CuitRepresentada: '20123456786',
|
|
127
232
|
};
|
|
128
233
|
|
|
129
234
|
// Llamar directamente al servicio
|
|
130
|
-
const contribuyente = await padron.a4.getPersona(credenciales, '
|
|
235
|
+
const contribuyente = await padron.a4.getPersona(credenciales, '20111111112');
|
|
236
|
+
// Tambien: padron.a5.getPersona / getPersonaList, padron.a13.getPersonaV2, padron.a100.getParameterCollectionByName
|
|
131
237
|
```
|
|
132
238
|
|
|
239
|
+
Clientes disponibles: `padron.wsaa`, `padron.a5` (constancia), `padron.a4`, `padron.a10`,
|
|
240
|
+
`padron.a13`, `padron.a100`.
|
|
241
|
+
|
|
133
242
|
## Tipos de respuesta
|
|
134
243
|
|
|
244
|
+
Los campos `xs:string` de los WSDL (codigos postales, datos adicionales, numeros de inscripcion,
|
|
245
|
+
documentos) y los `xs:long` (CUIT, actividades, telefonos) se devuelven siempre como `string`, aunque
|
|
246
|
+
sean numericos. Los elementos `xsi:nil` se tratan como ausentes.
|
|
247
|
+
|
|
135
248
|
### PersonaA4 (datos completos)
|
|
136
249
|
|
|
137
250
|
```typescript
|
|
@@ -209,43 +322,62 @@ interface ParameterRecord {
|
|
|
209
322
|
|
|
210
323
|
interface ParameterAttribute {
|
|
211
324
|
name: string;
|
|
212
|
-
value
|
|
325
|
+
value?: string; // tal cual lo envia ARCA (xs:string)
|
|
213
326
|
}
|
|
214
327
|
```
|
|
215
328
|
|
|
216
329
|
## Manejo de errores
|
|
217
330
|
|
|
218
|
-
El SDK usa una jerarquia de errores de 4 clases:
|
|
219
|
-
|
|
220
331
|
```
|
|
221
332
|
Error
|
|
222
|
-
└──
|
|
333
|
+
└── ArcaError (base, de @ramiidv/arca-common)
|
|
334
|
+
├── ArcaPadronError (respuesta de ARCA sin un dato obligatorio, ej: personaReturn sin persona)
|
|
223
335
|
├── ArcaAuthError (errores de WSAA)
|
|
224
|
-
|
|
225
|
-
|
|
336
|
+
│ └── ArcaTicketVigenteError (TA vigente que no esta en memoria ni en el storage)
|
|
337
|
+
├── ArcaValidationError (CUIT o documento invalido: no se llamo a ARCA)
|
|
338
|
+
├── ArcaServiceError
|
|
339
|
+
│ └── ArcaPadronServiceError (errores de negocio: reason + errors + cause)
|
|
340
|
+
└── ArcaSoapError (HTTP/red/timeout y SOAP Faults no reconocidos)
|
|
226
341
|
```
|
|
227
342
|
|
|
343
|
+
Todos tienen un `code` estable y `instanceof` funciona aunque haya mas de una copia del paquete
|
|
344
|
+
cargada. ARCA informa los errores de negocio como SOAP Fault; el SDK reconoce los textos de los
|
|
345
|
+
manuales y los convierte en `ArcaPadronServiceError` con un `reason` tipado (el `ArcaSoapError`
|
|
346
|
+
original queda en `cause`). No se reintentan.
|
|
347
|
+
|
|
348
|
+
| `reason` | Mensaje de ARCA |
|
|
349
|
+
| --- | --- |
|
|
350
|
+
| `inexistente` | "La Clave (CUIT/CUIL) consultada es inexistente", "No existe persona con ese Id" |
|
|
351
|
+
| `inactiva` | "La clave (CUIT/CUIL) consultada se encuentra INACTIVA" (A13: usar `getPersonaA13V2`) |
|
|
352
|
+
| `id_invalido` | "El Id de la persona no es valido" |
|
|
353
|
+
| `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 ..." |
|
|
354
|
+
|
|
355
|
+
Un SOAP Fault con otro texto queda como `ArcaSoapError` (con `faultString`). En la constancia de
|
|
356
|
+
inscripcion, los motivos por los que ARCA no emite la constancia (CUIT limitada, domicilio
|
|
357
|
+
incompleto, etc.) no son excepciones: vienen en `errorConstancia`, `errorRegimenGeneral` y
|
|
358
|
+
`errorMonotributo`.
|
|
359
|
+
|
|
228
360
|
```typescript
|
|
229
361
|
import {
|
|
230
362
|
ArcaAuthError,
|
|
231
363
|
ArcaPadronServiceError,
|
|
232
364
|
ArcaSoapError,
|
|
233
|
-
|
|
365
|
+
ArcaValidationError,
|
|
366
|
+
} from '@ramiidv/arca-padron';
|
|
234
367
|
|
|
235
368
|
try {
|
|
236
|
-
await padron.getPersona('
|
|
369
|
+
await padron.getPersona('20111111112');
|
|
237
370
|
} catch (error) {
|
|
238
|
-
if (error instanceof
|
|
239
|
-
|
|
240
|
-
console.error('Error de autenticacion:', error.message);
|
|
371
|
+
if (error instanceof ArcaValidationError) {
|
|
372
|
+
console.error('CUIT invalida:', error.message);
|
|
241
373
|
} else if (error instanceof ArcaPadronServiceError) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
374
|
+
if (error.reason === 'inexistente') console.error('La CUIT no existe');
|
|
375
|
+
else if (error.reason === 'inactiva') console.error('La CUIT esta inactiva');
|
|
376
|
+
else console.error(error.errors[0]?.msg);
|
|
377
|
+
} else if (error instanceof ArcaAuthError) {
|
|
378
|
+
console.error('Error de autenticacion:', error.message);
|
|
246
379
|
} else if (error instanceof ArcaSoapError) {
|
|
247
|
-
|
|
248
|
-
console.error('Error HTTP:', error.statusCode, error.message);
|
|
380
|
+
console.error('Error HTTP/red:', error.statusCode, error.message);
|
|
249
381
|
}
|
|
250
382
|
}
|
|
251
383
|
```
|
|
@@ -260,10 +392,10 @@ const padron = new ArcaPadron({
|
|
|
260
392
|
onEvent: (evento) => {
|
|
261
393
|
switch (evento.type) {
|
|
262
394
|
case 'auth:login':
|
|
263
|
-
console.log(`Login para ${evento.
|
|
395
|
+
console.log(`Login para ${evento.service}`);
|
|
264
396
|
break;
|
|
265
397
|
case 'auth:cache-hit':
|
|
266
|
-
console.log(`Token
|
|
398
|
+
console.log(`Token reutilizado para ${evento.service} (${evento.source})`);
|
|
267
399
|
break;
|
|
268
400
|
case 'request:start':
|
|
269
401
|
console.log(`Inicio ${evento.method}`);
|
|
@@ -291,19 +423,27 @@ import {
|
|
|
291
423
|
TipoPersona,
|
|
292
424
|
ImpuestoId,
|
|
293
425
|
CollectionName,
|
|
294
|
-
} from '@ramiidv/arca-padron
|
|
426
|
+
} from '@ramiidv/arca-padron';
|
|
295
427
|
|
|
296
|
-
// Verificar si el contribuyente esta inscripto en IVA
|
|
428
|
+
// Verificar si el contribuyente esta inscripto en IVA (mejor: condicionIvaDesdePadron)
|
|
297
429
|
const tieneIva = contribuyente.impuesto?.some(
|
|
298
|
-
(imp) => imp.idImpuesto === ImpuestoId.IVA_RESPONSABLE_INSCRIPTO && imp.estado
|
|
430
|
+
(imp) => imp.idImpuesto === ImpuestoId.IVA_RESPONSABLE_INSCRIPTO && imp.estado?.startsWith('ACTIVO')
|
|
299
431
|
);
|
|
432
|
+
|
|
433
|
+
// ImpuestoId.MONOTRIBUTO = 20, IVA_RESPONSABLE_INSCRIPTO = 30, BIENES_PERSONALES = 180,
|
|
434
|
+
// EMPLEADOR = 301, AUTONOMOS = 308 (manuales de ARCA). IVA_EXENTO (32) e IVA_NO_ALCANZADO (34)
|
|
435
|
+
// no figuran en los manuales del padron.
|
|
436
|
+
//
|
|
437
|
+
// `TipoDocumento` esta deprecado: es `DocTipo` (codigos numericos de WSFEv1), no el
|
|
438
|
+
// `tipoDocumento` string del padron ("DNI", "LC"...).
|
|
300
439
|
```
|
|
301
440
|
|
|
302
441
|
## Requisitos
|
|
303
442
|
|
|
304
443
|
- Node.js >= 18 (soporte nativo de `fetch`)
|
|
305
444
|
- Certificado digital emitido por ARCA/AFIP
|
|
306
|
-
- Autorizacion para los servicios web correspondientes
|
|
445
|
+
- Autorizacion para los servicios web correspondientes: `ws_sr_constancia_inscripcion`,
|
|
446
|
+
`ws_sr_padron_a4`, `ws_sr_padron_a10`, `ws_sr_padron_a13`, `ws_sr_padron_a100` (cada uno por separado)
|
|
307
447
|
|
|
308
448
|
## Licencia
|
|
309
449
|
|
|
@@ -0,0 +1,111 @@
|
|
|
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, 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 {
|
|
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
|
+
* `getPersona_v2`): datos generales, domicilio fiscal, impuestos del régimen
|
|
52
|
+
* general y monotributo. Combinar con `condicionIvaDesdePadron` para facturar.
|
|
53
|
+
* @param cuit - CUIT a consultar (con o sin guiones)
|
|
54
|
+
* @throws ArcaValidationError si la CUIT es inválida (dígito verificador)
|
|
55
|
+
* @throws ArcaPadronServiceError si ARCA informa la CUIT inexistente, inactiva, etc.
|
|
56
|
+
*/
|
|
57
|
+
getConstanciaInscripcion(cuit: string | number, call?: CallOptions): Promise<PersonaA5>;
|
|
58
|
+
/**
|
|
59
|
+
* Constancias de inscripción de hasta 250 CUITs en una llamada
|
|
60
|
+
* (`getPersonaList_v2`). Las CUITs inexistentes vuelven con `errorConstancia`
|
|
61
|
+
* ("No existe persona con ese Id") en lugar de hacer fallar la consulta.
|
|
62
|
+
*/
|
|
63
|
+
getConstanciasInscripcion(cuits: Array<string | number>, call?: CallOptions): Promise<PersonaA5[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Datos completos de un contribuyente (Padrón A4).
|
|
66
|
+
* @param cuit - CUIT/CUIL a consultar (con o sin guiones)
|
|
67
|
+
*/
|
|
68
|
+
getPersona(cuit: string | number, call?: CallOptions): Promise<PersonaA4>;
|
|
69
|
+
/**
|
|
70
|
+
* Datos básicos de un contribuyente (Padrón A10).
|
|
71
|
+
* @param cuit - CUIT/CUIL a consultar (con o sin guiones)
|
|
72
|
+
*/
|
|
73
|
+
getPersonaBasic(cuit: string | number, call?: CallOptions): Promise<PersonaA10>;
|
|
74
|
+
/**
|
|
75
|
+
* Datos básicos de un contribuyente (Padrón A13, `getPersona`). Con la clave
|
|
76
|
+
* inactiva ARCA responde con error (`reason: 'inactiva'`): ver `getPersonaA13V2`.
|
|
77
|
+
* @param cuit - CUIT/CUIL a consultar (con o sin guiones)
|
|
78
|
+
*/
|
|
79
|
+
getPersonaA13(cuit: string | number, call?: CallOptions): Promise<PersonaA13>;
|
|
80
|
+
/**
|
|
81
|
+
* Datos básicos de un contribuyente (Padrón A13, `getPersonaV2`): responde
|
|
82
|
+
* también si la clave está INACTIVA (manual A13 v1.4).
|
|
83
|
+
*/
|
|
84
|
+
getPersonaA13V2(cuit: string | number, call?: CallOptions): Promise<PersonaA13>;
|
|
85
|
+
/**
|
|
86
|
+
* CUITs/CUILs asociados a un número de documento (Padrón A13).
|
|
87
|
+
* @param documento - Número de documento (DNI); se aceptan puntos y espacios
|
|
88
|
+
*/
|
|
89
|
+
getIdPersonaListByDocumento(documento: string | number, call?: CallOptions): Promise<string[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Tabla de parámetros (Padrón A100) por nombre de colección.
|
|
92
|
+
* @param collection - Nombre de la colección (ej: CollectionName.PROVINCIA)
|
|
93
|
+
*/
|
|
94
|
+
getParametros(collection: string, call?: CallOptions): Promise<ParameterRecord[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Estado de los servicios de Padrón (`dummy`, sin autenticación). Consulta
|
|
97
|
+
* todos en paralelo y devuelve el resultado de cada uno por separado: un
|
|
98
|
+
* servicio caído no oculta el estado de los demás.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* const s = await padron.status();
|
|
103
|
+
* if (s.a4.status === 'fulfilled') console.log(s.a4.value.appserver);
|
|
104
|
+
* else console.error(s.a4.reason);
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
status(call?: CallOptions): Promise<PadronStatus>;
|
|
108
|
+
private opts;
|
|
109
|
+
private getAuth;
|
|
110
|
+
}
|
|
111
|
+
//# 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,EAA2B,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnE,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,EAEhB,YAAY,EACZ,eAAe,EACf,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EAEX,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;IAiDpC;;;;;;;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;IAgBvD,OAAO,CAAC,IAAI;YAIE,OAAO;CAQtB"}
|