@ramiidv/arca-padron 0.6.0 → 0.7.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 +28 -0
- package/README.md +333 -209
- package/dist/arca-padron.d.ts +29 -19
- package/dist/arca-padron.d.ts.map +1 -1
- package/dist/arca-padron.js +25 -15
- package/dist/arca-padron.js.map +1 -1
- package/dist/base-client.d.ts +16 -5
- package/dist/base-client.d.ts.map +1 -1
- package/dist/base-client.js +12 -1
- package/dist/base-client.js.map +1 -1
- package/dist/condicion-iva.d.ts +8 -2
- package/dist/condicion-iva.d.ts.map +1 -1
- package/dist/condicion-iva.js +38 -19
- package/dist/condicion-iva.js.map +1 -1
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/mapping.d.ts +23 -3
- package/dist/mapping.d.ts.map +1 -1
- package/dist/mapping.js +63 -7
- package/dist/mapping.js.map +1 -1
- package/dist/padron-a10.d.ts +2 -2
- package/dist/padron-a10.js +2 -2
- package/dist/padron-a100.d.ts +5 -4
- package/dist/padron-a100.d.ts.map +1 -1
- package/dist/padron-a100.js +8 -5
- package/dist/padron-a100.js.map +1 -1
- package/dist/padron-a13.d.ts +6 -5
- package/dist/padron-a13.d.ts.map +1 -1
- package/dist/padron-a13.js +8 -5
- package/dist/padron-a13.js.map +1 -1
- package/dist/padron-a4.d.ts +2 -2
- package/dist/padron-a4.d.ts.map +1 -1
- package/dist/padron-a4.js +5 -30
- package/dist/padron-a4.js.map +1 -1
- package/dist/padron-a5.d.ts +27 -11
- package/dist/padron-a5.d.ts.map +1 -1
- package/dist/padron-a5.js +105 -34
- package/dist/padron-a5.js.map +1 -1
- package/dist/types.d.ts +60 -5
- package/dist/types.d.ts.map +1 -1
- package/llms.txt +96 -66
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,133 +1,170 @@
|
|
|
1
1
|
# @ramiidv/arca-padron
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
que pide la factura electronica (`CondicionIVAReceptorId`).
|
|
3
|
+
[](https://www.npmjs.com/package/@ramiidv/arca-padron)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org)
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
SDK en TypeScript para los web services de **Padrón** de **ARCA** (ex AFIP): Constancia de Inscripción
|
|
8
|
+
(`ws_sr_constancia_inscripcion`, ex A5), A4 (datos completos), A10 y A13 (datos básicos) y A100
|
|
9
|
+
(tablas de parámetros). Incluye `condicionIvaDesdePadron` para obtener la condición frente al IVA que
|
|
10
|
+
pide la factura electrónica (`CondicionIVAReceptorId`, RG 5616).
|
|
9
11
|
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- Validacion local de CUIT (digito verificador) antes de llamar a ARCA
|
|
18
|
-
- Sistema de eventos para monitoreo
|
|
12
|
+
- Única dependencia: `@ramiidv/arca-common` (WSAA, SOAP, validadores); usa `fetch` nativo.
|
|
13
|
+
- Caché de tickets WSAA con persistencia opcional (`ticketStorage`) y ajuste de reloj.
|
|
14
|
+
- Cancelación con `AbortSignal` (global o por llamada).
|
|
15
|
+
- Reintentos con backoff exponencial ante errores transitorios (nunca ante un SOAP Fault): todas las
|
|
16
|
+
operaciones son consultas.
|
|
17
|
+
- Errores de negocio tipados: `ArcaPadronServiceError` con `reason` (`inexistente`, `inactiva`...).
|
|
18
|
+
- Validación local de CUIT (dígito verificador) antes de llamar a ARCA.
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Fuentes: WSDL oficiales (`wsdl/`), manual de
|
|
21
|
+
[`ws_sr_constancia_inscripcion` v4.1](https://www.afip.gob.ar/ws/WSCI/manual_ws_sr_ws_constancia_inscripcion.pdf),
|
|
22
|
+
manuales de A4 v1.3, A13 v1.4 y A100 v2.1.
|
|
23
|
+
|
|
24
|
+
## Instalación
|
|
21
25
|
|
|
22
26
|
```bash
|
|
23
27
|
npm install @ramiidv/arca-padron
|
|
24
28
|
```
|
|
25
29
|
|
|
26
|
-
##
|
|
30
|
+
## Requisitos
|
|
31
|
+
|
|
32
|
+
- Node.js >= 20.19. Solo ESM; desde CommonJS se carga con `require()` (require(esm)).
|
|
33
|
+
- Certificado digital X.509 y clave privada de ARCA, con cada servicio asociado por separado:
|
|
34
|
+
`ws_sr_constancia_inscripcion`, `ws_sr_padron_a4`, `ws_sr_padron_a10`, `ws_sr_padron_a13`,
|
|
35
|
+
`ws_sr_padron_a100`.
|
|
36
|
+
- **Homologación**: [WSASS](https://wsass-homo.afip.gob.ar/wsass/portal/main.aspx)
|
|
37
|
+
- **Producción**: [Administración de Certificados Digitales](https://www.afip.gob.ar/ws/documentacion/certificados.asp)
|
|
38
|
+
|
|
39
|
+
## Inicio rápido
|
|
27
40
|
|
|
28
41
|
```typescript
|
|
29
|
-
import { readFileSync } from 'fs';
|
|
30
|
-
import { ArcaPadron, FileTicketStorage } from '@ramiidv/arca-padron';
|
|
42
|
+
import { readFileSync } from 'node:fs';
|
|
43
|
+
import { ArcaPadron, CollectionName, FileTicketStorage, condicionIvaDesdePadron } from '@ramiidv/arca-padron';
|
|
31
44
|
|
|
32
45
|
const padron = new ArcaPadron({
|
|
33
46
|
cert: readFileSync('./cert.pem', 'utf-8'),
|
|
34
47
|
key: readFileSync('./key.pem', 'utf-8'),
|
|
35
|
-
cuit: '20123456786',
|
|
36
|
-
production: false, // false =
|
|
48
|
+
cuit: '20123456786', // CUIT representada (quien consulta)
|
|
49
|
+
production: false, // false = homologación
|
|
37
50
|
ticketStorage: new FileTicketStorage('./.arca-tickets'), // recomendado
|
|
38
51
|
});
|
|
39
52
|
|
|
40
|
-
// Constancia de
|
|
41
|
-
import { condicionIvaDesdePadron } from '@ramiidv/arca-padron';
|
|
53
|
+
// Constancia de inscripción (ex A5) + condición frente al IVA para facturar
|
|
42
54
|
const constancia = await padron.getConstanciaInscripcion('30712345671');
|
|
43
55
|
const { condicionIva, motivo } = condicionIvaDesdePadron(constancia);
|
|
44
56
|
// condicionIva: CondicionIva.RESPONSABLE_INSCRIPTO (1), motivo: "Inscripto en IVA (impuesto 30)."
|
|
57
|
+
console.log(condicionIva, motivo);
|
|
45
58
|
|
|
46
59
|
// Consulta completa (A4)
|
|
47
60
|
const contribuyente = await padron.getPersona('20-11111111-2'); // con o sin guiones
|
|
48
61
|
console.log(contribuyente.tipoPersona, contribuyente.nombre);
|
|
49
62
|
|
|
50
|
-
// Consulta
|
|
51
|
-
const
|
|
52
|
-
console.log(
|
|
63
|
+
// Consulta básica (A10)
|
|
64
|
+
const basico = await padron.getPersonaBasic('20111111112');
|
|
65
|
+
console.log(basico.domicilio?.[0]?.direccion);
|
|
53
66
|
|
|
54
|
-
// Tablas de
|
|
55
|
-
import { CollectionName } from '@ramiidv/arca-padron';
|
|
67
|
+
// Tablas de parámetros (A100)
|
|
56
68
|
const provincias = await padron.getParametros(CollectionName.PROVINCIA);
|
|
57
69
|
console.log(provincias.length, 'provincias');
|
|
58
70
|
```
|
|
59
71
|
|
|
60
|
-
##
|
|
61
|
-
|
|
62
|
-
`ArcaPadronConfig` extiende `
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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 };
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
> **Persisti el Ticket de Acceso.** WSAA rechaza el login si ya hay un TA vigente para el
|
|
72
|
+
## Configuración
|
|
73
|
+
|
|
74
|
+
`ArcaPadronConfig` extiende `ArcaSdkConfig` de `@ramiidv/arca-common`:
|
|
75
|
+
|
|
76
|
+
| Opción | Tipo | Default | Descripción |
|
|
77
|
+
| ------------------------------------------------------------------------------------ | ---------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------- |
|
|
78
|
+
| `cert`, `key` | `string` | — | Certificado y clave privada (PEM) |
|
|
79
|
+
| `keyPassphrase` | `string` | — | Contraseña de la clave, si está encriptada |
|
|
80
|
+
| `cuit` | `number \| string` | — | CUIT representada; se valida el dígito verificador y se envía como 11 dígitos |
|
|
81
|
+
| `production` | `boolean` | `false` | Homologación o producción |
|
|
82
|
+
| `timeout` | `number` | `30000` | Timeout HTTP (ms) |
|
|
83
|
+
| `retries` / `retryDelayMs` | `number` | `1` / `1000` | Reintentos ante errores transitorios (nunca ante un SOAP Fault) |
|
|
84
|
+
| `tokenTTLMinutes` | `number` | `720` | Vigencia del TRA pedida a WSAA |
|
|
85
|
+
| `ticketStorage` | `TicketStorage` | — | Persistencia del TA (recomendado: `FileTicketStorage` o propio) |
|
|
86
|
+
| `clockOffsetMs`, `autoClockSkew`, `loginErrorCooldownMs`, `permanentErrorCooldownMs` | | | Opciones de WSAA (ver `@ramiidv/arca-common`) |
|
|
87
|
+
| `fetch` | `typeof fetch` | `globalThis.fetch` | `fetch` propio (proxy, tests) |
|
|
88
|
+
| `legacyTls` | `'auto' \| 'never' \| 'always'` | `'auto'` | Transporte TLS legacy |
|
|
89
|
+
| `onEvent` | `(e: ArcaEvent) => void` | — | Eventos `auth:*` y `request:*` |
|
|
90
|
+
| `wsaa` | `WsaaClient` | — | `WsaaClient` compartido con otros SDKs (mismo certificado); tiene que ser del mismo entorno (`production`) |
|
|
91
|
+
| `signal` | `AbortSignal` | — | Cancela todas las llamadas de la instancia (ej: al apagar la app); se combina con el `signal` de cada llamada |
|
|
92
|
+
| `endpoints` | `{ wsaa?, a5?, a4?, a10?, a13?, a100? }` | — | Sobrescribe las URLs |
|
|
93
|
+
|
|
94
|
+
> **Persistí el Ticket de Acceso.** WSAA rechaza el login si ya hay un TA vigente para el
|
|
90
95
|
> certificado y servicio. Sin `ticketStorage`, un reinicio del proceso te deja sin poder consultar
|
|
91
96
|
> hasta que venza (hasta 12 horas, `ArcaTicketVigenteError`). Ver `TicketStorage` en
|
|
92
97
|
> [`@ramiidv/arca-common`](https://github.com/ramiidv/arca-sdks/tree/main/packages/common).
|
|
93
98
|
|
|
94
|
-
Si
|
|
99
|
+
Si usás también `@ramiidv/arca-facturacion` con el mismo certificado, compartí el cliente WSAA:
|
|
95
100
|
|
|
96
101
|
```typescript
|
|
97
|
-
|
|
98
|
-
|
|
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.
|
|
102
|
+
import { readFileSync } from 'node:fs';
|
|
103
|
+
import { ArcaFacturacion } from '@ramiidv/arca-facturacion';
|
|
104
|
+
import { ArcaPadron, FileTicketStorage } from '@ramiidv/arca-padron';
|
|
104
105
|
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
const cert = readFileSync('./cert.pem', 'utf-8');
|
|
107
|
+
const key = readFileSync('./key.pem', 'utf-8');
|
|
108
|
+
const cuit = '20123456786';
|
|
107
109
|
|
|
108
|
-
|
|
110
|
+
const facturacion = new ArcaFacturacion({ cuit, cert, key, ticketStorage: new FileTicketStorage('./.arca-tickets') });
|
|
111
|
+
const padron = new ArcaPadron({ cuit, cert, key, wsaa: facturacion.wsaa });
|
|
112
|
+
```
|
|
109
113
|
|
|
110
|
-
|
|
114
|
+
Todos los métodos aceptan un último parámetro opcional `{ signal }`. Las CUIT se aceptan con o sin
|
|
115
|
+
guiones (`'20-11111111-2'`, `'20111111112'` o `20111111112`): se validan localmente (dígito
|
|
116
|
+
verificador) y se envían normalizadas; una CUIT inválida lanza `ArcaValidationError` sin llamar a
|
|
117
|
+
ARCA (salvo en `getConstanciasInscripcion`, ver abajo).
|
|
111
118
|
|
|
112
|
-
|
|
119
|
+
## API
|
|
113
120
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
| Método | Servicio / operación | Devuelve |
|
|
122
|
+
| ---------------------------------------- | -------------------------------------------------- | ------------------------------ |
|
|
123
|
+
| `getConstanciaInscripcion(cuit)` | `ws_sr_constancia_inscripcion` `getPersona_v2` | `PersonaA5` |
|
|
124
|
+
| `getConstanciasInscripcion(cuits)` | `ws_sr_constancia_inscripcion` `getPersonaList_v2` | `ListaPadron<PersonaA5>` |
|
|
125
|
+
| `getPersona(cuit)` | `ws_sr_padron_a4` `getPersona` | `PersonaA4` |
|
|
126
|
+
| `getPersonaBasic(cuit)` | `ws_sr_padron_a10` `getPersona` | `PersonaA10` |
|
|
127
|
+
| `getPersonaA13(cuit)` | `ws_sr_padron_a13` `getPersona` | `PersonaA13` |
|
|
128
|
+
| `getPersonaA13V2(cuit)` | `ws_sr_padron_a13` `getPersonaV2` | `PersonaA13` |
|
|
129
|
+
| `getIdPersonaListByDocumento(documento)` | `ws_sr_padron_a13` `getIdPersonaListByDocumento` | `ListaPadron<string>` |
|
|
130
|
+
| `getParametros(collection)` | `ws_sr_padron_a100` `getParameterCollectionByName` | `ListaPadron<ParameterRecord>` |
|
|
131
|
+
| `status()` | `dummy` de los cinco servicios (sin auth) | `PadronStatus` |
|
|
132
|
+
| `clearAuthCache()` | — | `Promise<void>` |
|
|
133
|
+
|
|
134
|
+
### `getConstanciaInscripcion(cuit): Promise<PersonaA5>`
|
|
135
|
+
|
|
136
|
+
Constancia de inscripción vía `ws_sr_constancia_inscripcion` (método `getPersona_v2`). Reemplaza a
|
|
137
|
+
Padrón A5 (`ws_sr_padron_a5`), deprecado por ARCA. Incluye datos generales, domicilio fiscal,
|
|
138
|
+
caracterizaciones, régimen general (impuestos, actividades, regímenes), monotributo (categoría,
|
|
117
139
|
impuestos, actividad, `componenteDeSociedad`) y, si ARCA no puede emitir la constancia (o una parte),
|
|
118
140
|
`errorConstancia` / `errorRegimenGeneral` / `errorMonotributo`: esos casos se devuelven, no se lanzan.
|
|
119
141
|
|
|
142
|
+
La excepción es la CUIT inexistente: tanto si ARCA la informa como SOAP Fault como si la informa en
|
|
143
|
+
`errorConstancia` ("No existe persona con ese Id"), se lanza `ArcaPadronServiceError` con
|
|
144
|
+
`reason: 'inexistente'`.
|
|
145
|
+
|
|
120
146
|
```typescript
|
|
121
147
|
const constancia = await padron.getConstanciaInscripcion('30712345671');
|
|
122
148
|
constancia.domicilioFiscal; // { direccion, localidad, codPostal, idProvincia, ... }
|
|
123
|
-
constancia.impuestos; // impuestos de ambos
|
|
149
|
+
constancia.impuestos; // impuestos de ambos regímenes
|
|
124
150
|
constancia.monotributo?.categoria; // { idCategoria, descripcionCategoria, ... }
|
|
151
|
+
constancia.metadata; // { fechaHora, servidor } de la respuesta, si ARCA lo informó
|
|
125
152
|
```
|
|
126
153
|
|
|
127
|
-
|
|
154
|
+
### `getConstanciasInscripcion(cuits): Promise<ListaPadron<PersonaA5>>`
|
|
155
|
+
|
|
156
|
+
Hasta 250 CUITs en una llamada (`getPersonaList_v2`), en el orden de `cuits`. Los problemas de una
|
|
157
|
+
CUIT no hacen fallar la consulta (ARCA informa por clave, manual v4.1 §3.3.3): vuelven en el
|
|
158
|
+
`errorConstancia` de su persona.
|
|
128
159
|
|
|
129
|
-
|
|
130
|
-
|
|
160
|
+
- CUIT inexistente: `errorConstancia.error = ['No existe persona con ese Id']` (lo informa ARCA).
|
|
161
|
+
- CUIT inválida (formato o dígito verificador): **no se envía a ARCA**; vuelve con `idPersona` igual al
|
|
162
|
+
valor recibido y el motivo en `errorConstancia.error` (`'CUIT inválido: "…". … No se consultó a ARCA.'`).
|
|
163
|
+
Si todas son inválidas, no se llama a ARCA.
|
|
164
|
+
- Persona que ARCA devuelve con datos inválidos: vuelve con el detalle en `errorConstancia` (si trae
|
|
165
|
+
alguna CUIT; si no, se omite).
|
|
166
|
+
|
|
167
|
+
Una lista vacía o de más de 250 elementos lanza `ArcaValidationError`.
|
|
131
168
|
|
|
132
169
|
```typescript
|
|
133
170
|
const constancias = await padron.getConstanciasInscripcion(['20224107030', '27015942210']);
|
|
@@ -136,124 +173,197 @@ for (const c of constancias) {
|
|
|
136
173
|
}
|
|
137
174
|
```
|
|
138
175
|
|
|
139
|
-
|
|
176
|
+
### `condicionIvaDesdePadron(persona): { condicionIva: CondicionIva | null; motivo: string }`
|
|
140
177
|
|
|
141
|
-
|
|
178
|
+
Función pura (no consulta ARCA). Acepta una constancia (`PersonaA5`) o una persona de A4:
|
|
142
179
|
|
|
143
|
-
|
|
|
180
|
+
| Padrón | `condicionIva` |
|
|
144
181
|
| --------------------------------------------------------------------------- | ------------------------------------------ |
|
|
145
|
-
| Monotributo activo (impuesto 20 activo; si no figura el 20, la
|
|
146
|
-
| Monotributo social (
|
|
147
|
-
| Trabajador independiente promovido (por la
|
|
182
|
+
| Monotributo activo (impuesto 20 activo; si no figura el 20, la categoría) | `MONOTRIBUTISTA` (6) |
|
|
183
|
+
| Monotributo social (categorías 61, 99, 100 y proyectos productivos 101-104) | `MONOTRIBUTO_SOCIAL` (13) |
|
|
184
|
+
| Trabajador independiente promovido (por la descripción de la categoría) | `MONOTRIBUTO_INDEPENDIENTE_PROMOVIDO` (16) |
|
|
148
185
|
| IVA (impuesto 30) `ACTIVO` / `ACTIVO EN TRAMITE` / `AC` | `RESPONSABLE_INSCRIPTO` (1) |
|
|
149
186
|
| IVA (impuesto 30) `EXENTO` / `EXENTO EN TRAMITE` / `EX`, o impuesto 32 | `EXENTO` (4) |
|
|
150
187
|
| Impuesto 34 (IVA no alcanzado) | `IVA_NO_ALCANZADO` (15) |
|
|
151
|
-
|
|
|
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.
|
|
188
|
+
| Impuesto 33 (IVA responsable no inscripto, categoría eliminada) | `null` (con un motivo propio) |
|
|
189
|
+
| Ninguno de los anteriores, o constancia no emitida | `null` (con el motivo) |
|
|
157
190
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
191
|
+
Si figuran a la vez monotributo e IVA activos, prioriza monotributo. Los impuestos en
|
|
192
|
+
`BAJA PROVISORIA`, `BAJA DEFINITIVA` o `NO APORTANTE` no cuentan (un impuesto 20 en baja no se
|
|
193
|
+
considera monotributo aunque haya categoría). Si el padrón no alcanza, devuelve `null` en lugar de
|
|
194
|
+
asumir consumidor final: decidilo según la operación.
|
|
162
195
|
|
|
163
|
-
|
|
196
|
+
Si ARCA informó errores (`errorConstancia`, por ejemplo una CUIT limitada en los términos de la RG
|
|
197
|
+
3832/16; `errorRegimenGeneral`; `errorMonotributo`) o la CUIT no está activa, **el motivo lo advierte
|
|
198
|
+
siempre**, también cuando se pudo determinar la condición: revisalo antes de facturar.
|
|
164
199
|
|
|
165
|
-
|
|
166
|
-
|
|
200
|
+
Fuentes: manual de `ws_sr_constancia_inscripcion` v4.1 (impuestos 20 y 30, estado `AC`, categorías
|
|
201
|
+
de monotributo del anexo 5.3) y manual de `ws_sr_padron_a4` v1.3 §5.3 (TipoEstado). Los impuestos 32,
|
|
202
|
+
33 y 34 no figuran en los manuales: se reconocen por id (y el 32 y el 34, también por su descripción).
|
|
203
|
+
La categoría 98 (`B ASOCIADO COOPERATIVA`) se trata como monotributo común.
|
|
167
204
|
|
|
168
|
-
|
|
205
|
+
### `getPersonaA13(cuit)` y `getPersonaA13V2(cuit)`: `Promise<PersonaA13>`
|
|
169
206
|
|
|
170
|
-
|
|
171
|
-
|
|
207
|
+
Datos básicos vía `ws_sr_padron_a13`. `getPersona` falla con `reason: 'inactiva'` si la clave está
|
|
208
|
+
inactiva; `getPersonaV2` (manual A13 v1.4) devuelve los datos igual (con `estadoClave: 'INACTIVO'`).
|
|
172
209
|
|
|
173
|
-
|
|
210
|
+
### `getIdPersonaListByDocumento(documento): Promise<ListaPadron<string>>`
|
|
174
211
|
|
|
175
|
-
|
|
212
|
+
CUIT/CUIL asociados a un número de documento (A13). Acepta puntos, espacios y guiones
|
|
213
|
+
(`'11.709.676'`); más de 11 dígitos lanza `ArcaValidationError`. Devuelve `[]` si ARCA no informa claves.
|
|
176
214
|
|
|
177
|
-
|
|
178
|
-
const contribuyente = await padron.getPersona('20111111112');
|
|
179
|
-
```
|
|
215
|
+
### `getPersona(cuit): Promise<PersonaA4>` y `getPersonaBasic(cuit): Promise<PersonaA10>`
|
|
180
216
|
|
|
181
|
-
|
|
217
|
+
Datos completos (`ws_sr_padron_a4`: domicilios, impuestos, actividades, regímenes, relaciones,
|
|
218
|
+
categorías, emails, teléfonos) y básicos (`ws_sr_padron_a10`: datos generales, dependencia y
|
|
219
|
+
domicilios) de un contribuyente.
|
|
182
220
|
|
|
183
|
-
|
|
221
|
+
### `getParametros(collection): Promise<ListaPadron<ParameterRecord>>`
|
|
184
222
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
#### `getParametros(collection: string): Promise<ParameterRecord[]>`
|
|
190
|
-
|
|
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 `[]`.
|
|
223
|
+
Tabla de parámetros vía `ws_sr_padron_a100`. `id`, `descripcion` y los `value` de los atributos se
|
|
224
|
+
devuelven tal cual los envía ARCA (`"10.50"` sigue siendo `"10.50"`). Lanza `ArcaPadronError` si la
|
|
225
|
+
respuesta no trae `parameterCollection`; una colección vacía devuelve `[]`. Un nombre vacío lanza
|
|
226
|
+
`ArcaValidationError` sin llamar a ARCA.
|
|
194
227
|
|
|
195
228
|
```typescript
|
|
196
|
-
import { CollectionName } from '@ramiidv/arca-padron';
|
|
197
|
-
|
|
198
229
|
const provincias = await padron.getParametros(CollectionName.PROVINCIA);
|
|
199
230
|
const tiposDocumento = await padron.getParametros(CollectionName.TIPO_DOCUMENTO);
|
|
200
|
-
const tiposRelacion = await padron.getParametros(CollectionName.TIPO_RELACION);
|
|
201
231
|
```
|
|
202
232
|
|
|
203
|
-
Colecciones disponibles (enum `CollectionName`, manual A100 v2.1 anexo 5.1): `PROVINCIA`,
|
|
204
|
-
|
|
233
|
+
Colecciones disponibles (enum `CollectionName`, manual A100 v2.1 anexo 5.1): `PROVINCIA`,
|
|
234
|
+
`TIPO_DOCUMENTO`, `TIPO_DOMICILIO`, `TIPO_CLAVE`, `TIPO_EMPRESA_JURIDICA`,
|
|
235
|
+
`TIPO_EMPRESA_JURIDICA_SUBGRUPO`, `TIPO_RELACION`, `TIPO_SUBTIPO_RELACION`, `TIPO_COMPONENTE_SOCIEDAD`,
|
|
236
|
+
`TIPO_RELACION_COMPONENTE_SOC`, `TIPO_EMAIL`, `TIPO_TELEFONO`, `TIPO_RESIDENCIA`,
|
|
237
|
+
`TIPO_DATO_ADICIONAL_DOMICILIO`, `ORGANISMO_INFORMANTE`, `ORGANISMO_CONTROL`, `PROVINCIA_SOCIEDAD_ORG`,
|
|
238
|
+
`SEXO`, `CALLE`, `LOCALIDAD`, `AUTONOMO_MONOTRIBUTO`, `REGIMEN`, `TIPO_REGIMEN`, `CARACTERIZACION`,
|
|
239
|
+
`TIPO_ARCHIVO`, `ACTIVIDAD_RUBRO`, `RUBRO_ACTIVIDAD`, `ACTIVIDAD_OCUPACIONAL`. La colección de
|
|
240
|
+
categorías de monotributo no se incluye porque su nombre aparece cortado en el manual.
|
|
205
241
|
|
|
206
|
-
|
|
242
|
+
### `status(): Promise<PadronStatus>`
|
|
207
243
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
`
|
|
244
|
+
Estado de los cinco servicios (`dummy`, sin autenticación), en paralelo. Cada uno es un
|
|
245
|
+
`ServiceStatus` de arca-common: `ok` es `true` solo si el servicio respondió y sus tres servidores
|
|
246
|
+
(`appserver`, `dbserver`, `authserver`) están en `OK`. Si respondió con alguno en otro estado (ej:
|
|
247
|
+
`dbserver: 'ERROR'`), `ok` es `false` y `status` tiene lo que informó ARCA; si no respondió, `ok` es
|
|
248
|
+
`false` sin `status`. Un servicio caído no oculta el estado de los demás.
|
|
211
249
|
|
|
212
250
|
```typescript
|
|
213
251
|
const estado = await padron.status();
|
|
214
|
-
if (estado.a4.ok)
|
|
215
|
-
|
|
216
|
-
else console.error('A4 caido:', estado.a4.error);
|
|
252
|
+
if (estado.a4.ok) console.log('A4 disponible');
|
|
253
|
+
else console.error('A4 no disponible:', estado.a4.error.message, estado.a4.status);
|
|
217
254
|
```
|
|
218
255
|
|
|
219
|
-
|
|
256
|
+
Los `dummy()` de los clientes de bajo nivel devuelven lo que informa ARCA sin evaluarlo: usá
|
|
257
|
+
`serverStatusOk(status)` de `@ramiidv/arca-common`.
|
|
258
|
+
|
|
259
|
+
### `metadata` de las respuestas
|
|
260
|
+
|
|
261
|
+
ARCA informa en cada respuesta la fecha/hora de proceso y el servidor (`metadata`). Las personas
|
|
262
|
+
(`PersonaA4`, `PersonaA10`, `PersonaA13`, `PersonaA5`) lo traen en `persona.metadata`; las listas
|
|
263
|
+
(`ListaPadron<T>`), en `lista.metadata`, una propiedad no enumerable del array (no aparece al
|
|
264
|
+
iterar, serializar ni copiar el array). Si ARCA no lo informa, la propiedad no está.
|
|
220
265
|
|
|
221
|
-
|
|
266
|
+
### Clientes de bajo nivel
|
|
267
|
+
|
|
268
|
+
Para casos avanzados, se pueden usar los clientes de cada servicio directamente: `padron.wsaa`,
|
|
269
|
+
`padron.a5` (constancia: `getPersona`, `getPersonaList`), `padron.a4`, `padron.a10`, `padron.a13`
|
|
270
|
+
(`getPersona`, `getPersonaV2`, `getIdPersonaListByDocumento`) y `padron.a100`
|
|
271
|
+
(`getParameterCollectionByName`). Reciben las credenciales (`WsAuth`) como primer argumento:
|
|
222
272
|
|
|
223
273
|
```typescript
|
|
274
|
+
import { readFileSync } from 'node:fs';
|
|
275
|
+
import { ArcaPadron, ENDPOINTS } from '@ramiidv/arca-padron';
|
|
276
|
+
import type { WsAuth } from '@ramiidv/arca-padron';
|
|
277
|
+
|
|
224
278
|
const padron = new ArcaPadron({
|
|
225
|
-
|
|
279
|
+
cert: readFileSync('./cert.pem', 'utf-8'),
|
|
280
|
+
key: readFileSync('./key.pem', 'utf-8'),
|
|
281
|
+
cuit: '20123456786',
|
|
226
282
|
});
|
|
227
283
|
|
|
228
|
-
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
const credenciales = {
|
|
232
|
-
Token: ticket.token,
|
|
233
|
-
Sign: ticket.sign,
|
|
234
|
-
CuitRepresentada: '20123456786',
|
|
235
|
-
};
|
|
284
|
+
const ticket = await padron.wsaa.getAccessTicket(ENDPOINTS.a4.serviceId);
|
|
285
|
+
const credenciales: WsAuth = { token: ticket.token, sign: ticket.sign, cuitRepresentada: '20123456786' };
|
|
236
286
|
|
|
237
|
-
// Llamar directamente al servicio
|
|
238
287
|
const contribuyente = await padron.a4.getPersona(credenciales, '20111111112');
|
|
239
|
-
|
|
288
|
+
console.log(contribuyente.idPersona);
|
|
240
289
|
```
|
|
241
290
|
|
|
242
|
-
|
|
243
|
-
`padron.a13`, `padron.a100`.
|
|
291
|
+
### Tipos de respuesta
|
|
244
292
|
|
|
245
|
-
|
|
293
|
+
Los campos `xs:string` de los WSDL (códigos postales, datos adicionales, números de inscripción,
|
|
294
|
+
documentos) y los `xs:long` (CUIT, actividades, teléfonos) se devuelven siempre como `string`, aunque
|
|
295
|
+
sean numéricos. Los `xs:dateTime` (`fechaContratoSocial`, `fechaNacimiento`, `ffRelacion`,
|
|
296
|
+
`metadata.fechaHora`...) se devuelven como el string que envía ARCA, sin convertir a `Date`. Los
|
|
297
|
+
elementos `xsi:nil` se tratan como ausentes. `tipoPersona` es `'FISICA' | 'JURIDICA'`, pero el SDK no
|
|
298
|
+
rechaza otro valor: lo devuelve tal cual (`TipoPersonaPadron`).
|
|
246
299
|
|
|
247
|
-
|
|
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.
|
|
300
|
+
#### PersonaA5 (constancia de inscripción)
|
|
250
301
|
|
|
251
|
-
|
|
302
|
+
```typescript
|
|
303
|
+
interface PersonaA5 {
|
|
304
|
+
idPersona: string;
|
|
305
|
+
tipoPersona?: TipoPersonaPadron;
|
|
306
|
+
tipoClave?: string;
|
|
307
|
+
estadoClave?: string;
|
|
308
|
+
nombre?: string;
|
|
309
|
+
apellido?: string;
|
|
310
|
+
razonSocial?: string;
|
|
311
|
+
mesCierre?: number;
|
|
312
|
+
fechaContratoSocial?: string; // xs:dateTime
|
|
313
|
+
fechaFallecimiento?: string; // xs:dateTime
|
|
314
|
+
esSucesion?: string;
|
|
315
|
+
domicilioFiscal?: DomicilioA5;
|
|
316
|
+
dependencia?: DependenciaA5;
|
|
317
|
+
caracterizacion?: CaracterizacionA5[];
|
|
318
|
+
regimenGeneral?: { impuestos: ImpuestoA5[]; actividades: ActividadA5[]; regimenes: RegimenA5[]; categoriaAutonomo?: CategoriaA5 };
|
|
319
|
+
monotributo?: {
|
|
320
|
+
impuestos: ImpuestoA5[];
|
|
321
|
+
actividades: ActividadA5[];
|
|
322
|
+
actividadMonotributista?: ActividadA5;
|
|
323
|
+
categoria?: CategoriaA5;
|
|
324
|
+
componenteDeSociedad?: ComponenteSociedadA5[];
|
|
325
|
+
};
|
|
326
|
+
impuestos: ImpuestoA5[]; // de ambos regímenes, juntos
|
|
327
|
+
errorConstancia?: { error: string[]; idPersona?: string; nombre?: string; apellido?: string };
|
|
328
|
+
errorRegimenGeneral?: { error: string[]; mensaje?: string };
|
|
329
|
+
errorMonotributo?: { error: string[]; mensaje?: string };
|
|
330
|
+
metadata?: PadronMetadata;
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
#### PersonaA13
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
interface PersonaA13 {
|
|
338
|
+
idPersona: string;
|
|
339
|
+
tipoPersona: TipoPersonaPadron;
|
|
340
|
+
tipoClave?: string;
|
|
341
|
+
estadoClave?: string;
|
|
342
|
+
nombre?: string;
|
|
343
|
+
apellido?: string;
|
|
344
|
+
razonSocial?: string;
|
|
345
|
+
numeroDocumento?: string;
|
|
346
|
+
tipoDocumento?: string;
|
|
347
|
+
formaJuridica?: string;
|
|
348
|
+
mesCierre?: number;
|
|
349
|
+
fechaNacimiento?: string; // xs:dateTime
|
|
350
|
+
fechaFallecimiento?: string; // xs:dateTime
|
|
351
|
+
fechaContratoSocial?: string; // xs:dateTime
|
|
352
|
+
idActividadPrincipal?: string;
|
|
353
|
+
descripcionActividadPrincipal?: string;
|
|
354
|
+
periodoActividadPrincipal?: number;
|
|
355
|
+
claveInactivaAsociada?: string[];
|
|
356
|
+
domicilio?: DomicilioA13[]; // calle, numero, piso, oficinaDptoLocal, codigoPostal, estadoDomicilio...
|
|
357
|
+
metadata?: PadronMetadata;
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
#### PersonaA4 (datos completos)
|
|
252
362
|
|
|
253
363
|
```typescript
|
|
254
364
|
interface PersonaA4 {
|
|
255
365
|
idPersona: string;
|
|
256
|
-
tipoPersona:
|
|
366
|
+
tipoPersona: TipoPersonaPadron;
|
|
257
367
|
tipoClave?: string;
|
|
258
368
|
estadoClave?: string;
|
|
259
369
|
apellido?: string;
|
|
@@ -261,7 +371,7 @@ interface PersonaA4 {
|
|
|
261
371
|
razonSocial?: string;
|
|
262
372
|
numeroDocumento?: string;
|
|
263
373
|
tipoDocumento?: string;
|
|
264
|
-
fechaNacimiento?: string;
|
|
374
|
+
fechaNacimiento?: string; // xs:dateTime (también las demás fecha*)
|
|
265
375
|
sexo?: string;
|
|
266
376
|
numeroInscripcion?: string;
|
|
267
377
|
formaJuridica?: string;
|
|
@@ -290,15 +400,16 @@ interface PersonaA4 {
|
|
|
290
400
|
categoria?: CategoriaA4[];
|
|
291
401
|
email?: EmailA4[];
|
|
292
402
|
telefono?: TelefonoA4[];
|
|
403
|
+
metadata?: PadronMetadata;
|
|
293
404
|
}
|
|
294
405
|
```
|
|
295
406
|
|
|
296
|
-
|
|
407
|
+
#### PersonaA10 (datos básicos)
|
|
297
408
|
|
|
298
409
|
```typescript
|
|
299
410
|
interface PersonaA10 {
|
|
300
411
|
idPersona: string;
|
|
301
|
-
tipoPersona:
|
|
412
|
+
tipoPersona: TipoPersonaPadron;
|
|
302
413
|
tipoClave?: string;
|
|
303
414
|
estadoClave?: string;
|
|
304
415
|
nombre?: string;
|
|
@@ -311,69 +422,86 @@ interface PersonaA10 {
|
|
|
311
422
|
dependencia?: DependenciaA10;
|
|
312
423
|
claveInactivaAsociada?: string[];
|
|
313
424
|
domicilio?: DomicilioA10[];
|
|
425
|
+
metadata?: PadronMetadata;
|
|
314
426
|
}
|
|
315
427
|
```
|
|
316
428
|
|
|
317
|
-
|
|
429
|
+
#### ParameterRecord (tablas A100) y metadata
|
|
318
430
|
|
|
319
431
|
```typescript
|
|
320
432
|
interface ParameterRecord {
|
|
321
433
|
id: string;
|
|
322
434
|
descripcion: string;
|
|
323
|
-
atributos?:
|
|
435
|
+
atributos?: { name: string; value?: string }[]; // value tal cual lo envía ARCA (xs:string)
|
|
324
436
|
}
|
|
325
437
|
|
|
326
|
-
interface
|
|
327
|
-
|
|
328
|
-
|
|
438
|
+
interface PadronMetadata {
|
|
439
|
+
fechaHora?: string; // xs:dateTime
|
|
440
|
+
servidor?: string;
|
|
329
441
|
}
|
|
442
|
+
|
|
443
|
+
type ListaPadron<T> = T[] & { metadata?: PadronMetadata };
|
|
330
444
|
```
|
|
331
445
|
|
|
332
446
|
## Manejo de errores
|
|
333
447
|
|
|
334
|
-
```
|
|
448
|
+
```text
|
|
335
449
|
Error
|
|
336
450
|
└── ArcaError (base, de @ramiidv/arca-common)
|
|
337
451
|
├── ArcaPadronError (respuesta de ARCA sin un dato obligatorio, ej: personaReturn sin persona)
|
|
338
452
|
├── ArcaAuthError (errores de WSAA)
|
|
339
|
-
│ └── ArcaTicketVigenteError (TA vigente que no
|
|
340
|
-
├── ArcaValidationError (CUIT o documento
|
|
453
|
+
│ └── ArcaTicketVigenteError (TA vigente que no está en memoria ni en el storage)
|
|
454
|
+
├── ArcaValidationError (CUIT o documento inválido: no se llamó a ARCA)
|
|
341
455
|
├── ArcaServiceError
|
|
342
456
|
│ └── ArcaPadronServiceError (errores de negocio: reason + errors + cause)
|
|
343
457
|
└── ArcaSoapError (HTTP/red/timeout y SOAP Faults no reconocidos)
|
|
344
458
|
```
|
|
345
459
|
|
|
346
|
-
Todos tienen un `code` estable y `instanceof` funciona aunque haya
|
|
460
|
+
Todos tienen un `code` estable y `instanceof` funciona aunque haya más de una copia del paquete
|
|
347
461
|
cargada. ARCA informa los errores de negocio como SOAP Fault; el SDK reconoce los textos de los
|
|
348
462
|
manuales y los convierte en `ArcaPadronServiceError` con un `reason` tipado (el `ArcaSoapError`
|
|
349
463
|
original queda en `cause`). No se reintentan.
|
|
350
464
|
|
|
351
465
|
| `reason` | Mensaje de ARCA |
|
|
352
466
|
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
353
|
-
| `inexistente` | "La Clave (CUIT/CUIL) consultada es inexistente", "No existe persona con ese Id"
|
|
467
|
+
| `inexistente` | "La Clave (CUIT/CUIL) consultada es inexistente", "No existe persona con ese Id" (Fault, o `errorConstancia` en `getConstanciaInscripcion`) |
|
|
354
468
|
| `inactiva` | "La clave (CUIT/CUIL) consultada se encuentra INACTIVA" (A13: usar `getPersonaA13V2`) |
|
|
355
469
|
| `id_invalido` | "El Id de la persona no es valido" |
|
|
356
470
|
| `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 ..." |
|
|
471
|
+
| `otro` | Cualquier otro error de negocio |
|
|
357
472
|
|
|
358
473
|
Un SOAP Fault con otro texto queda como `ArcaSoapError` (con `faultString`). En la constancia de
|
|
359
|
-
|
|
474
|
+
inscripción, los motivos por los que ARCA no emite la constancia (CUIT limitada, domicilio
|
|
360
475
|
incompleto, etc.) no son excepciones: vienen en `errorConstancia`, `errorRegimenGeneral` y
|
|
361
476
|
`errorMonotributo`.
|
|
362
477
|
|
|
363
478
|
```typescript
|
|
364
|
-
import {
|
|
479
|
+
import { readFileSync } from 'node:fs';
|
|
480
|
+
import {
|
|
481
|
+
ArcaAuthError,
|
|
482
|
+
ArcaPadron,
|
|
483
|
+
ArcaPadronServiceError,
|
|
484
|
+
ArcaSoapError,
|
|
485
|
+
ArcaValidationError,
|
|
486
|
+
} from '@ramiidv/arca-padron';
|
|
487
|
+
|
|
488
|
+
const padron = new ArcaPadron({
|
|
489
|
+
cert: readFileSync('./cert.pem', 'utf-8'),
|
|
490
|
+
key: readFileSync('./key.pem', 'utf-8'),
|
|
491
|
+
cuit: '20123456786',
|
|
492
|
+
});
|
|
365
493
|
|
|
366
494
|
try {
|
|
367
495
|
await padron.getPersona('20111111112');
|
|
368
496
|
} catch (error) {
|
|
369
497
|
if (error instanceof ArcaValidationError) {
|
|
370
|
-
console.error('CUIT
|
|
498
|
+
console.error('CUIT inválida:', error.message);
|
|
371
499
|
} else if (error instanceof ArcaPadronServiceError) {
|
|
372
500
|
if (error.reason === 'inexistente') console.error('La CUIT no existe');
|
|
373
|
-
else if (error.reason === 'inactiva') console.error('La CUIT
|
|
501
|
+
else if (error.reason === 'inactiva') console.error('La CUIT está inactiva');
|
|
374
502
|
else console.error(error.errors[0]?.msg);
|
|
375
503
|
} else if (error instanceof ArcaAuthError) {
|
|
376
|
-
console.error('Error de
|
|
504
|
+
console.error('Error de autenticación:', error.message);
|
|
377
505
|
} else if (error instanceof ArcaSoapError) {
|
|
378
506
|
console.error('Error HTTP/red:', error.statusCode, error.message);
|
|
379
507
|
}
|
|
@@ -382,60 +510,56 @@ try {
|
|
|
382
510
|
|
|
383
511
|
## Eventos
|
|
384
512
|
|
|
385
|
-
|
|
513
|
+
`onEvent` (o `padron.on(tipo, handler)`) recibe `auth:login`, `auth:cache-hit`, `auth:clock-skew`,
|
|
514
|
+
`auth:storage-error`, `request:start`, `request:end`, `request:retry` y `request:error` (ver
|
|
515
|
+
`ArcaEvent` en `@ramiidv/arca-common`):
|
|
386
516
|
|
|
387
517
|
```typescript
|
|
518
|
+
import { readFileSync } from 'node:fs';
|
|
519
|
+
import { ArcaPadron } from '@ramiidv/arca-padron';
|
|
520
|
+
|
|
388
521
|
const padron = new ArcaPadron({
|
|
389
|
-
|
|
522
|
+
cert: readFileSync('./cert.pem', 'utf-8'),
|
|
523
|
+
key: readFileSync('./key.pem', 'utf-8'),
|
|
524
|
+
cuit: '20123456786',
|
|
390
525
|
onEvent: (evento) => {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
console.log(`Login para ${evento.service}`);
|
|
394
|
-
break;
|
|
395
|
-
case 'auth:cache-hit':
|
|
396
|
-
console.log(`Token reutilizado para ${evento.service} (${evento.source})`);
|
|
397
|
-
break;
|
|
398
|
-
case 'request:start':
|
|
399
|
-
console.log(`Inicio ${evento.method}`);
|
|
400
|
-
break;
|
|
401
|
-
case 'request:end':
|
|
402
|
-
console.log(`Fin ${evento.method} (${evento.durationMs}ms)`);
|
|
403
|
-
break;
|
|
404
|
-
case 'request:retry':
|
|
405
|
-
console.log(`Reintento #${evento.attempt}`);
|
|
406
|
-
break;
|
|
407
|
-
case 'request:error':
|
|
408
|
-
console.log(`Error: ${evento.error.message}`);
|
|
409
|
-
break;
|
|
410
|
-
}
|
|
526
|
+
if (evento.type === 'request:end') console.log(`${evento.method}: ${evento.durationMs}ms`);
|
|
527
|
+
if (evento.type === 'request:retry') console.log(`Reintento #${evento.attempt} de ${evento.method}`);
|
|
411
528
|
},
|
|
412
529
|
});
|
|
413
530
|
```
|
|
414
531
|
|
|
415
|
-
##
|
|
532
|
+
## Entornos
|
|
416
533
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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
|
-
// `DocTipo` son los codigos numericos de WSFEv1, no el `tipoDocumento` string del padron
|
|
430
|
-
// ("DNI", "LC"...).
|
|
431
|
-
```
|
|
534
|
+
| Servicio | Homologación | Producción |
|
|
535
|
+
| ------------------------------ | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
536
|
+
| `ws_sr_constancia_inscripcion` | `https://awshomo.afip.gov.ar/sr-padron/webservices/personaServiceA5` | `https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA5` |
|
|
537
|
+
| `ws_sr_padron_a4` | `https://awshomo.afip.gov.ar/sr-padron/webservices/personaServiceA4` | `https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA4` |
|
|
538
|
+
| `ws_sr_padron_a10` | `https://awshomo.afip.gov.ar/sr-padron/webservices/personaServiceA10` | `https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA10` |
|
|
539
|
+
| `ws_sr_padron_a13` | `https://awshomo.afip.gov.ar/sr-padron/webservices/personaServiceA13` | `https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA13` |
|
|
540
|
+
| `ws_sr_padron_a100` | `https://awshomo.afip.gov.ar/sr-parametros/webservices/parameterServiceA100` | `https://aws.afip.gov.ar/sr-parametros/webservices/parameterServiceA100` |
|
|
432
541
|
|
|
433
|
-
|
|
542
|
+
El manual de la constancia de inscripción (v4.1) publica los hosts `awshomo.arca.gob.ar` /
|
|
543
|
+
`aws.arca.gob.ar`. El SDK usa `awshomo.afip.gov.ar` / `aws.afip.gov.ar`: son los `soap:address` de
|
|
544
|
+
los WSDL oficiales de los cinco servicios y los que publica el manual de A13 (v1.4), y responden
|
|
545
|
+
igual. Para usar otro host, pasá `endpoints`. Las URLs, namespaces e ids de servicio están en
|
|
546
|
+
`ENDPOINTS`; los de WSAA, en `WSAA_ENDPOINTS` de `@ramiidv/arca-common`.
|
|
547
|
+
|
|
548
|
+
### Enums útiles
|
|
549
|
+
|
|
550
|
+
- `ImpuestoId`: `MONOTRIBUTO` (20), `IVA_RESPONSABLE_INSCRIPTO` (30), `BIENES_PERSONALES` (180),
|
|
551
|
+
`EMPLEADOR` (301), `AUTONOMOS` (308)... (manuales de ARCA). `IVA_EXENTO` (32),
|
|
552
|
+
`IVA_RESPONSABLE_NO_INSCRIPTO` (33) e `IVA_NO_ALCANZADO` (34) no figuran en los manuales del padrón.
|
|
553
|
+
- `TipoDomicilio`, `TipoPersona`, `EstadoClave`, `CollectionName`, `Provincia`, `CondicionIva`.
|
|
554
|
+
- `DocTipo` son los códigos numéricos de WSFEv1, no el `tipoDocumento` string del padrón ("DNI", "LC"...).
|
|
555
|
+
|
|
556
|
+
`ensureArray`, `parseXml` y `buildXml` siguen exportados por compatibilidad, pero están deprecados:
|
|
557
|
+
importalos de `@ramiidv/arca-common`.
|
|
558
|
+
|
|
559
|
+
## Ejemplos
|
|
434
560
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
- Autorizacion para los servicios web correspondientes: `ws_sr_constancia_inscripcion`,
|
|
438
|
-
`ws_sr_padron_a4`, `ws_sr_padron_a10`, `ws_sr_padron_a13`, `ws_sr_padron_a100` (cada uno por separado)
|
|
561
|
+
En [examples](https://github.com/ramiidv/arca-sdks/tree/main/packages/padron/examples): constancia de
|
|
562
|
+
inscripción y condición frente al IVA, consultas A4 y A10, tablas de parámetros y manejo de errores.
|
|
439
563
|
|
|
440
564
|
## Licencia
|
|
441
565
|
|