@ramiidv/arca-sdk 0.3.0 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +205 -9
- package/dist/arca.d.ts +110 -119
- package/dist/arca.d.ts.map +1 -1
- package/dist/arca.js +307 -146
- package/dist/arca.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/facturacion.js +3 -3
- package/dist/facturacion.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/padron.d.ts +22 -0
- package/dist/padron.d.ts.map +1 -0
- package/dist/padron.js +87 -0
- package/dist/padron.js.map +1 -0
- package/dist/soap-client.d.ts +13 -6
- package/dist/soap-client.d.ts.map +1 -1
- package/dist/soap-client.js +84 -32
- package/dist/soap-client.js.map +1 -1
- package/dist/types.d.ts +343 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wsaa.d.ts +6 -2
- package/dist/wsaa.d.ts.map +1 -1
- package/dist/wsaa.js +25 -6
- package/dist/wsaa.js.map +1 -1
- package/dist/wsfe.d.ts +13 -27
- package/dist/wsfe.d.ts.map +1 -1
- package/dist/wsfe.js +82 -51
- package/dist/wsfe.js.map +1 -1
- package/dist/wsfex.d.ts +50 -0
- package/dist/wsfex.d.ts.map +1 -0
- package/dist/wsfex.js +141 -0
- package/dist/wsfex.js.map +1 -0
- package/llm.txt +169 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
SDK en TypeScript para interactuar con los Web Services de **ARCA** (ex AFIP) — Facturación Electrónica Argentina.
|
|
4
4
|
|
|
5
|
-
Soporta **todos los tipos de comprobante** de WSFEv1: Facturas, Notas de Débito/Crédito, Recibos (A, B, C, E, M)
|
|
5
|
+
Soporta **todos los tipos de comprobante** de WSFEv1 y WSFEX: Facturas, Notas de Débito/Crédito, Recibos (A, B, C, E, M), Facturas de Crédito Electrónica MiPyME (FCE) y Facturas de Exportación.
|
|
6
6
|
|
|
7
7
|
## Instalación
|
|
8
8
|
|
|
@@ -60,6 +60,11 @@ const arca = new Arca({
|
|
|
60
60
|
production: false, // Default: false (testing/homologación)
|
|
61
61
|
tokenTTLMinutes: 720, // Default: 720 (12 horas)
|
|
62
62
|
requestTimeoutMs: 30_000, // Default: 30000 (30 segundos)
|
|
63
|
+
retries: 1, // Default: 1 (reintentos en errores transitorios)
|
|
64
|
+
retryDelayMs: 1_000, // Default: 1000 (backoff exponencial: 1s, 2s, ...)
|
|
65
|
+
onEvent: (e) => { // Opcional: callback para logging/debugging
|
|
66
|
+
console.log(e.type, e);
|
|
67
|
+
},
|
|
63
68
|
});
|
|
64
69
|
```
|
|
65
70
|
|
|
@@ -174,6 +179,77 @@ const result = await arca.facturar({
|
|
|
174
179
|
});
|
|
175
180
|
```
|
|
176
181
|
|
|
182
|
+
### Factura de exportación (WSFEX)
|
|
183
|
+
|
|
184
|
+
ID, número de comprobante y total por item se calculan automáticamente.
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
const result = await arca.facturarExpo({
|
|
188
|
+
ptoVta: 1,
|
|
189
|
+
cbteTipo: CbteTipo.FACTURA_E,
|
|
190
|
+
tipoExpo: 1, // 1=Bienes, 2=Servicios, 4=Otros
|
|
191
|
+
pais: 203, // País destino (203 = Estados Unidos)
|
|
192
|
+
cliente: {
|
|
193
|
+
nombre: "ACME Corp",
|
|
194
|
+
cuitPais: 50000000016,
|
|
195
|
+
domicilio: "123 Main St, New York",
|
|
196
|
+
idImpositivo: "12-3456789",
|
|
197
|
+
},
|
|
198
|
+
moneda: "DOL",
|
|
199
|
+
cotizacion: 1200,
|
|
200
|
+
formaPago: "Wire Transfer",
|
|
201
|
+
incoterms: "FOB",
|
|
202
|
+
idioma: 2, // 1=Español, 2=Inglés, 3=Portugués
|
|
203
|
+
items: [{
|
|
204
|
+
codigo: "SKU001",
|
|
205
|
+
descripcion: "Widget",
|
|
206
|
+
cantidad: 100,
|
|
207
|
+
unidad: 7,
|
|
208
|
+
precioUnitario: 10,
|
|
209
|
+
}],
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
if (result.aprobada) {
|
|
213
|
+
console.log(`CAE: ${result.cae}, Cbte #${result.cbteNro}`);
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Consultar contribuyente (Padrón)
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
// Consulta básica por CUIT (padrón A13)
|
|
221
|
+
const persona = await arca.consultarCuit(30712345678);
|
|
222
|
+
console.log(persona.nombre); // "EMPRESA SA"
|
|
223
|
+
console.log(persona.tipoPersona); // "JURIDICA"
|
|
224
|
+
console.log(persona.estadoClave); // "ACTIVO"
|
|
225
|
+
console.log(persona.impuestos); // [{ id: 30, descripcion: "IVA", estado: "AC" }]
|
|
226
|
+
|
|
227
|
+
// Consulta detallada (padrón A5 — requiere autorización adicional)
|
|
228
|
+
const detalle = await arca.consultarCuitDetalle(20123456789);
|
|
229
|
+
console.log(detalle.domicilioFiscal); // { direccion, localidad, codPostal }
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### CAEA — Facturación offline / contingencia
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
// 1. Solicitar CAEA para un período (antes de que empiece)
|
|
236
|
+
const caea = await arca.solicitarCAEA("202604", 1); // abril, 1ra quincena
|
|
237
|
+
console.log(`CAEA: ${caea.CAEA}, vigencia: ${caea.FchVigDesde} - ${caea.FchVigHasta}`);
|
|
238
|
+
|
|
239
|
+
// 2. Emitir facturas offline usando el CAEA (misma interfaz que facturar())
|
|
240
|
+
const result = await arca.registrarFacturaCAEA(caea.CAEA, {
|
|
241
|
+
ptoVta: 5,
|
|
242
|
+
cbteTipo: CbteTipo.FACTURA_B,
|
|
243
|
+
items: [{ neto: 100, iva: IvaTipo.IVA_21 }],
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
// 3. Si no hubo movimientos en el período
|
|
247
|
+
await arca.sinMovimientoCAEA(caea.CAEA, 5);
|
|
248
|
+
|
|
249
|
+
// Consultar un CAEA existente
|
|
250
|
+
const existente = await arca.consultarCAEA("202604", 1);
|
|
251
|
+
```
|
|
252
|
+
|
|
177
253
|
### Previsualizar totales sin enviar
|
|
178
254
|
|
|
179
255
|
```typescript
|
|
@@ -185,6 +261,25 @@ console.log(importes);
|
|
|
185
261
|
// { total: 1762.5, neto: 1500, iva: 262.5, exento: 0, noGravado: 0, tributos: 0 }
|
|
186
262
|
```
|
|
187
263
|
|
|
264
|
+
### QR para factura impresa
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
const url = Arca.generateQRUrl({
|
|
268
|
+
fecha: "2026-03-28",
|
|
269
|
+
cuit: 20123456789,
|
|
270
|
+
ptoVta: 1,
|
|
271
|
+
tipoCmp: CbteTipo.FACTURA_B,
|
|
272
|
+
nroCmp: 150,
|
|
273
|
+
importe: 121,
|
|
274
|
+
moneda: "PES",
|
|
275
|
+
ctz: 1,
|
|
276
|
+
tipoDocRec: DocTipo.CONSUMIDOR_FINAL,
|
|
277
|
+
nroDocRec: 0,
|
|
278
|
+
codAut: 73429843294823, // CAE
|
|
279
|
+
});
|
|
280
|
+
// → "https://www.afip.gob.ar/fe/qr/?p=<base64>"
|
|
281
|
+
```
|
|
282
|
+
|
|
188
283
|
### Factura en moneda extranjera
|
|
189
284
|
|
|
190
285
|
```typescript
|
|
@@ -201,6 +296,55 @@ const result = await arca.facturar({
|
|
|
201
296
|
});
|
|
202
297
|
```
|
|
203
298
|
|
|
299
|
+
## Retry automático
|
|
300
|
+
|
|
301
|
+
El SDK reintenta automáticamente en errores transitorios (timeout, HTTP 5xx, errores de red). No reintenta en errores de negocio (4xx, errores de ARCA).
|
|
302
|
+
|
|
303
|
+
- **Default**: 1 reintento con backoff exponencial (1s, 2s, ...)
|
|
304
|
+
- **Configurable**: `retries: 0` para desactivar, `retries: 3` para más intentos
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
const arca = new Arca({
|
|
308
|
+
...config,
|
|
309
|
+
retries: 2, // 2 reintentos (3 intentos totales)
|
|
310
|
+
retryDelayMs: 2000, // empezar con 2s → 4s → 8s
|
|
311
|
+
});
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Eventos / Logging
|
|
315
|
+
|
|
316
|
+
El SDK emite eventos para debugging y monitoreo sin forzar un logger específico.
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
// Opción 1: callback en config
|
|
320
|
+
const arca = new Arca({
|
|
321
|
+
...config,
|
|
322
|
+
onEvent: (e) => console.log(`[${e.type}]`, e),
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
// Opción 2: suscripción por tipo de evento
|
|
326
|
+
arca.on("request:end", (e) => {
|
|
327
|
+
if (e.type === "request:end") {
|
|
328
|
+
metrics.histogram("arca.request.duration", e.durationMs);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
arca.on("request:retry", (e) => {
|
|
333
|
+
if (e.type === "request:retry") {
|
|
334
|
+
logger.warn(`Retry #${e.attempt} for ${e.method}: ${e.error}`);
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
| Evento | Cuándo | Datos |
|
|
340
|
+
| --- | --- | --- |
|
|
341
|
+
| `auth:login` | Nuevo token obtenido | `service`, `durationMs` |
|
|
342
|
+
| `auth:cache-hit` | Token cacheado reutilizado | `service` |
|
|
343
|
+
| `request:start` | Antes de una llamada SOAP | `method`, `endpoint` |
|
|
344
|
+
| `request:end` | Llamada SOAP completada | `method`, `durationMs` |
|
|
345
|
+
| `request:retry` | Reintentando tras error | `method`, `attempt`, `delayMs`, `error` |
|
|
346
|
+
| `request:error` | Llamada SOAP falló | `method`, `error` |
|
|
347
|
+
|
|
204
348
|
## Manejo de errores
|
|
205
349
|
|
|
206
350
|
El SDK provee clases de error específicas para catch granular:
|
|
@@ -223,7 +367,7 @@ try {
|
|
|
223
367
|
}
|
|
224
368
|
|
|
225
369
|
if (e instanceof ArcaWSFEError) {
|
|
226
|
-
// Error de WSFE con códigos de ARCA
|
|
370
|
+
// Error de WSFE/WSFEX con códigos de ARCA
|
|
227
371
|
for (const err of e.errors) {
|
|
228
372
|
console.error(`[${err.code}] ${err.msg}`);
|
|
229
373
|
}
|
|
@@ -239,7 +383,7 @@ try {
|
|
|
239
383
|
| Clase | Cuándo se lanza |
|
|
240
384
|
| --- | --- |
|
|
241
385
|
| `ArcaAuthError` | Falla en login WSAA, respuesta inesperada, token/sign inválidos |
|
|
242
|
-
| `ArcaWSFEError` | Error devuelto por WSFE (campos inválidos, CUIT no autorizado, etc.). Contiene `errors: { code, msg }[]` |
|
|
386
|
+
| `ArcaWSFEError` | Error devuelto por WSFE/WSFEX (campos inválidos, CUIT no autorizado, etc.). Contiene `errors: { code, msg }[]` |
|
|
243
387
|
| `ArcaSoapError` | Error HTTP, timeout, SOAP Fault. Contiene `statusCode?: number` |
|
|
244
388
|
| `ArcaError` | Clase base para todos los errores del SDK |
|
|
245
389
|
|
|
@@ -284,6 +428,9 @@ const maxRegs = await arca.getCantMaxRegistros();
|
|
|
284
428
|
| `production` | `boolean` | `false` | Entorno de producción |
|
|
285
429
|
| `tokenTTLMinutes` | `number` | `720` | TTL del token en minutos |
|
|
286
430
|
| `requestTimeoutMs` | `number` | `30000` | Timeout HTTP en milisegundos |
|
|
431
|
+
| `retries` | `number` | `1` | Reintentos en errores transitorios |
|
|
432
|
+
| `retryDelayMs` | `number` | `1000` | Delay inicial entre reintentos (exponencial) |
|
|
433
|
+
| `onEvent` | `function` | — | Callback para eventos del SDK |
|
|
287
434
|
|
|
288
435
|
### Facturación — API simplificada
|
|
289
436
|
|
|
@@ -292,8 +439,10 @@ const maxRegs = await arca.getCantMaxRegistros();
|
|
|
292
439
|
| `facturar(opts)` | Crea un comprobante con cálculo automático de IVA y totales |
|
|
293
440
|
| `notaCredito(opts)` | Crea nota de crédito asociada (tipo NC inferido automáticamente) |
|
|
294
441
|
| `notaDebito(opts)` | Crea nota de débito asociada (tipo ND inferido automáticamente) |
|
|
442
|
+
| `facturarExpo(opts)` | Factura de exportación con auto ID, numeración y cálculo de totales |
|
|
443
|
+
| `registrarFacturaCAEA(caea, opts)` | Registra factura con CAEA (misma interfaz que `facturar()`) |
|
|
295
444
|
|
|
296
|
-
Retornan `FacturaResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `importes`, `
|
|
445
|
+
Retornan `FacturaResult` / `FacturaExpoResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `importes`/`obs`, `raw`.
|
|
297
446
|
|
|
298
447
|
### Facturación — API raw
|
|
299
448
|
|
|
@@ -305,7 +454,46 @@ Retornan `FacturaResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `i
|
|
|
305
454
|
| `siguienteComprobante(ptoVta, cbteTipo)` | Siguiente número (último + 1) |
|
|
306
455
|
| `consultarComprobante(cbteTipo, ptoVta, cbteNro)` | Consulta un comprobante existente |
|
|
307
456
|
|
|
308
|
-
###
|
|
457
|
+
### Exportación (WSFEX)
|
|
458
|
+
|
|
459
|
+
| Método | Descripción |
|
|
460
|
+
| --- | --- |
|
|
461
|
+
| `facturarExpo(opts)` | Factura de exportación simplificada (auto ID y numeración) |
|
|
462
|
+
| `crearFacturaExportacion(invoice)` | Autoriza un comprobante de exportación (API raw) |
|
|
463
|
+
| `ultimoComprobanteExpo(ptoVta, cbteTipo)` | Último número autorizado (WSFEX) |
|
|
464
|
+
| `siguienteComprobanteExpo(ptoVta, cbteTipo)` | Siguiente número (WSFEX) |
|
|
465
|
+
| `ultimoIdExpo()` | Último ID de request WSFEX |
|
|
466
|
+
| `consultarComprobanteExpo(cbteTipo, ptoVta, cbteNro)` | Consulta comprobante de exportación |
|
|
467
|
+
| `serverStatusExpo()` | Estado de los servidores WSFEX |
|
|
468
|
+
| `getTiposCbteExpo()` | Tipos de comprobante de exportación |
|
|
469
|
+
| `getMonedasExpo()` | Monedas (WSFEX) |
|
|
470
|
+
| `getPaisesExpo()` | Países destino |
|
|
471
|
+
| `getIdiomasExpo()` | Idiomas disponibles |
|
|
472
|
+
| `getIncotermsExpo()` | Incoterms |
|
|
473
|
+
| `getUMedExpo()` | Unidades de medida |
|
|
474
|
+
| `getTiposExpo()` | Tipos de exportación |
|
|
475
|
+
| `getCuitsPaisExpo()` | CUITs de países |
|
|
476
|
+
|
|
477
|
+
### CAEA (Autorización Anticipada)
|
|
478
|
+
|
|
479
|
+
| Método | Descripción |
|
|
480
|
+
| --- | --- |
|
|
481
|
+
| `solicitarCAEA(periodo, orden)` | Solicita un CAEA para un período y quincena |
|
|
482
|
+
| `consultarCAEA(periodo, orden)` | Consulta un CAEA existente |
|
|
483
|
+
| `registrarFacturaCAEA(caea, opts)` | Registra factura con CAEA (API simplificada) |
|
|
484
|
+
| `registrarCAEA(request)` | Informa comprobantes con CAEA (API raw) |
|
|
485
|
+
| `sinMovimientoCAEA(caea, ptoVta)` | Informa sin movimientos para un CAEA |
|
|
486
|
+
|
|
487
|
+
### Padrón (Consulta de contribuyentes)
|
|
488
|
+
|
|
489
|
+
| Método | Descripción |
|
|
490
|
+
| --- | --- |
|
|
491
|
+
| `consultarCuit(cuit)` | Datos básicos de un contribuyente (padrón A13) |
|
|
492
|
+
| `consultarCuitDetalle(cuit)` | Datos detallados con domicilio (padrón A5) |
|
|
493
|
+
|
|
494
|
+
Retornan `Contribuyente` con: `cuit`, `nombre`, `tipoPersona`, `estadoClave`, `domicilioFiscal?`, `impuestos?`, `raw`.
|
|
495
|
+
|
|
496
|
+
### Parámetros WSFE
|
|
309
497
|
|
|
310
498
|
| Método | Descripción |
|
|
311
499
|
| --- | --- |
|
|
@@ -321,11 +509,19 @@ Retornan `FacturaResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `i
|
|
|
321
509
|
| `getCotizacion(monedaId)` | Cotización de una moneda |
|
|
322
510
|
| `getCantMaxRegistros()` | Máx registros por request |
|
|
323
511
|
|
|
512
|
+
### Eventos
|
|
513
|
+
|
|
514
|
+
| Método | Descripción |
|
|
515
|
+
| --- | --- |
|
|
516
|
+
| `on(event, handler)` | Suscribirse a un tipo de evento |
|
|
517
|
+
| `off(event, handler)` | Desuscribirse de un evento |
|
|
518
|
+
|
|
324
519
|
### Utilidades estáticas
|
|
325
520
|
|
|
326
521
|
| Método | Descripción |
|
|
327
522
|
| --- | --- |
|
|
328
523
|
| `Arca.calcularTotales(items, opts?)` | Calcula importes e IVA sin enviar a ARCA |
|
|
524
|
+
| `Arca.generateQRUrl(input)` | Genera la URL del QR oficial de ARCA |
|
|
329
525
|
| `Arca.extractCAE(result)` | Extrae CAE del resultado raw |
|
|
330
526
|
| `Arca.formatDate(date)` | Formatea `Date` a `YYYYMMDD` (timezone Argentina) |
|
|
331
527
|
|
|
@@ -378,10 +574,10 @@ Tambien se incluyen tipos especiales: `COMPRA_BIENES_USADOS` (49), `CTA_VTA_LIQ_
|
|
|
378
574
|
|
|
379
575
|
## Entornos
|
|
380
576
|
|
|
381
|
-
| Entorno | WSAA | WSFE |
|
|
382
|
-
| --- | --- | --- |
|
|
383
|
-
| Testing | `wsaahomo.afip.gov.ar` | `wswhomo.afip.gov.ar` |
|
|
384
|
-
| Producción | `wsaa.afip.gov.ar` | `servicios1.afip.gov.ar` |
|
|
577
|
+
| Entorno | WSAA | WSFE | WSFEX | Padrón |
|
|
578
|
+
| --- | --- | --- | --- | --- |
|
|
579
|
+
| Testing | `wsaahomo.afip.gov.ar` | `wswhomo.afip.gov.ar` | `wswhomo.afip.gov.ar` | `awshomo.afip.gov.ar` |
|
|
580
|
+
| Producción | `wsaa.afip.gov.ar` | `servicios1.afip.gov.ar` | `servicios1.afip.gov.ar` | `aws.afip.gov.ar` |
|
|
385
581
|
|
|
386
582
|
## Licencia
|
|
387
583
|
|
package/dist/arca.d.ts
CHANGED
|
@@ -1,175 +1,168 @@
|
|
|
1
|
-
import type { ArcaConfig, InvoiceRequest, InvoiceDetail, FECAESolicitarResult, FECAEDetResponse, FECompConsultarResult, ServerStatus, ParamItem, MonedaItem, PtoVentaItem, CotizacionResult, FacturarOpts, NotaCreditoOpts, NotaDebitoOpts, FacturaResult, LineItem } from "./types.js";
|
|
1
|
+
import type { ArcaConfig, ArcaEvent, InvoiceRequest, InvoiceDetail, FECAESolicitarResult, FECAEDetResponse, FECompConsultarResult, ServerStatus, ParamItem, MonedaItem, PtoVentaItem, CotizacionResult, FacturarOpts, NotaCreditoOpts, NotaDebitoOpts, FacturaResult, LineItem, QRInput, WsfexInvoice, WsfexAuthResult, WsfexGetCmpResult, WsfexParamItem, FacturarExpoOpts, FacturaExpoResult, CaeaSolicitarResult, CaeaRegInfRequest, CaeaSinMovResult, Contribuyente } from "./types.js";
|
|
2
2
|
export declare class Arca {
|
|
3
3
|
private wsaa;
|
|
4
4
|
private wsfe;
|
|
5
|
+
private wsfex;
|
|
6
|
+
private padron;
|
|
5
7
|
private cuit;
|
|
6
8
|
private production;
|
|
9
|
+
private emitter;
|
|
10
|
+
private onEventCb?;
|
|
7
11
|
constructor(config: ArcaConfig);
|
|
8
12
|
/**
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
private getAuth;
|
|
12
|
-
/**
|
|
13
|
-
* Crea una factura y obtiene el CAE.
|
|
13
|
+
* Suscribirse a eventos del SDK.
|
|
14
14
|
*
|
|
15
15
|
* @example
|
|
16
16
|
* ```ts
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* invoices: [{
|
|
21
|
-
* Concepto: Concepto.PRODUCTOS,
|
|
22
|
-
* DocTipo: DocTipo.CONSUMIDOR_FINAL,
|
|
23
|
-
* DocNro: 0,
|
|
24
|
-
* CbteDesde: nextNum,
|
|
25
|
-
* CbteHasta: nextNum,
|
|
26
|
-
* CbteFch: "20260328",
|
|
27
|
-
* ImpTotal: 121,
|
|
28
|
-
* ImpTotConc: 0,
|
|
29
|
-
* ImpNeto: 100,
|
|
30
|
-
* ImpOpEx: 0,
|
|
31
|
-
* ImpTrib: 0,
|
|
32
|
-
* ImpIVA: 21,
|
|
33
|
-
* MonId: Moneda.PESOS,
|
|
34
|
-
* MonCotiz: 1,
|
|
35
|
-
* Iva: [{ Id: IvaTipo.IVA_21, BaseImp: 100, Importe: 21 }],
|
|
36
|
-
* }],
|
|
37
|
-
* });
|
|
17
|
+
* arca.on("request:end", (e) => console.log(`${e.method} took ${e.durationMs}ms`));
|
|
18
|
+
* arca.on("auth:login", (e) => console.log(`Login ${e.service} in ${e.durationMs}ms`));
|
|
19
|
+
* arca.on("request:retry", (e) => console.warn(`Retry #${e.attempt}: ${e.error}`));
|
|
38
20
|
* ```
|
|
39
21
|
*/
|
|
22
|
+
on(event: ArcaEvent["type"], handler: (event: ArcaEvent) => void): this;
|
|
23
|
+
/** Desuscribirse de un evento. */
|
|
24
|
+
off(event: ArcaEvent["type"], handler: (event: ArcaEvent) => void): this;
|
|
25
|
+
private getAuth;
|
|
26
|
+
/** Solicita CAE para uno o más comprobantes (API raw). */
|
|
40
27
|
crearFactura(request: InvoiceRequest): Promise<FECAESolicitarResult>;
|
|
41
|
-
/**
|
|
42
|
-
* Obtiene el último número de comprobante autorizado.
|
|
43
|
-
* Útil para calcular el siguiente número antes de crear una factura.
|
|
44
|
-
*/
|
|
28
|
+
/** Último número de comprobante autorizado. */
|
|
45
29
|
ultimoComprobante(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
46
|
-
/**
|
|
47
|
-
* Obtiene el siguiente número de comprobante (último + 1).
|
|
48
|
-
*/
|
|
30
|
+
/** Siguiente número de comprobante (último + 1). */
|
|
49
31
|
siguienteComprobante(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
50
|
-
/**
|
|
51
|
-
* Crea una factura automáticamente calculando el siguiente número de comprobante.
|
|
52
|
-
* Simplifica el flujo más común: obtener número → crear factura.
|
|
53
|
-
*/
|
|
32
|
+
/** Crea factura obteniendo el número automáticamente (API raw). */
|
|
54
33
|
crearFacturaAuto(ptoVta: number, cbteTipo: number, invoice: Omit<InvoiceDetail, "CbteDesde" | "CbteHasta">): Promise<FECAESolicitarResult>;
|
|
55
34
|
/**
|
|
56
35
|
* Crea una factura con API simplificada.
|
|
57
36
|
* Calcula automáticamente IVA, totales, y número de comprobante.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```ts
|
|
61
|
-
* const result = await arca.facturar({
|
|
62
|
-
* ptoVta: 1,
|
|
63
|
-
* cbteTipo: CbteTipo.FACTURA_B,
|
|
64
|
-
* items: [
|
|
65
|
-
* { neto: 1000, iva: IvaTipo.IVA_21 },
|
|
66
|
-
* { neto: 500, iva: IvaTipo.IVA_10_5 },
|
|
67
|
-
* ],
|
|
68
|
-
* });
|
|
69
|
-
*
|
|
70
|
-
* if (result.aprobada) {
|
|
71
|
-
* console.log(`CAE: ${result.cae}, Cbte: ${result.cbteNro}`);
|
|
72
|
-
* }
|
|
73
|
-
* ```
|
|
74
37
|
*/
|
|
75
38
|
facturar(opts: FacturarOpts): Promise<FacturaResult>;
|
|
76
39
|
/**
|
|
77
|
-
* Crea una nota de crédito
|
|
78
|
-
* El tipo de NC se infiere automáticamente del tipo del comprobante original.
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```ts
|
|
82
|
-
* const result = await arca.notaCredito({
|
|
83
|
-
* ptoVta: 1,
|
|
84
|
-
* comprobanteOriginal: {
|
|
85
|
-
* tipo: CbteTipo.FACTURA_B,
|
|
86
|
-
* ptoVta: 1,
|
|
87
|
-
* nro: 5,
|
|
88
|
-
* },
|
|
89
|
-
* items: [{ neto: 500, iva: IvaTipo.IVA_21 }],
|
|
90
|
-
* });
|
|
91
|
-
* ```
|
|
40
|
+
* Crea una nota de crédito. Tipo de NC inferido del comprobante original.
|
|
92
41
|
*/
|
|
93
42
|
notaCredito(opts: NotaCreditoOpts): Promise<FacturaResult>;
|
|
94
43
|
/**
|
|
95
|
-
* Crea una nota de débito
|
|
96
|
-
|
|
44
|
+
* Crea una nota de débito. Tipo de ND inferido del comprobante original.
|
|
45
|
+
*/
|
|
46
|
+
notaDebito(opts: NotaDebitoOpts): Promise<FacturaResult>;
|
|
47
|
+
private facturarConAsociado;
|
|
48
|
+
/** Consulta un comprobante previamente autorizado. */
|
|
49
|
+
consultarComprobante(cbteTipo: number, ptoVta: number, cbteNro: number): Promise<FECompConsultarResult>;
|
|
50
|
+
/** Autoriza un comprobante de exportación (WSFEX). */
|
|
51
|
+
crearFacturaExportacion(invoice: WsfexInvoice): Promise<WsfexAuthResult>;
|
|
52
|
+
/** Último número de comprobante de exportación autorizado. */
|
|
53
|
+
ultimoComprobanteExpo(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
54
|
+
/** Siguiente número de comprobante de exportación. */
|
|
55
|
+
siguienteComprobanteExpo(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
56
|
+
/** Último ID de request WSFEX. */
|
|
57
|
+
ultimoIdExpo(): Promise<number>;
|
|
58
|
+
/** Consulta un comprobante de exportación. */
|
|
59
|
+
consultarComprobanteExpo(cbteTipo: number, ptoVta: number, cbteNro: number): Promise<WsfexGetCmpResult>;
|
|
60
|
+
/** Estado de los servidores WSFEX. */
|
|
61
|
+
serverStatusExpo(): Promise<ServerStatus>;
|
|
62
|
+
/** Tipos de comprobante de exportación. */
|
|
63
|
+
getTiposCbteExpo(): Promise<WsfexParamItem[]>;
|
|
64
|
+
/** Monedas (WSFEX). */
|
|
65
|
+
getMonedasExpo(): Promise<WsfexParamItem[]>;
|
|
66
|
+
/** Países destino de exportación. */
|
|
67
|
+
getPaisesExpo(): Promise<WsfexParamItem[]>;
|
|
68
|
+
/** Idiomas disponibles (WSFEX). */
|
|
69
|
+
getIdiomasExpo(): Promise<WsfexParamItem[]>;
|
|
70
|
+
/** Incoterms disponibles. */
|
|
71
|
+
getIncotermsExpo(): Promise<WsfexParamItem[]>;
|
|
72
|
+
/** Unidades de medida (WSFEX). */
|
|
73
|
+
getUMedExpo(): Promise<WsfexParamItem[]>;
|
|
74
|
+
/** Tipos de exportación. */
|
|
75
|
+
getTiposExpo(): Promise<WsfexParamItem[]>;
|
|
76
|
+
/** CUITs de países. */
|
|
77
|
+
getCuitsPaisExpo(): Promise<WsfexParamItem[]>;
|
|
78
|
+
/**
|
|
79
|
+
* Crea una factura de exportación con API simplificada.
|
|
80
|
+
* Obtiene automáticamente el ID y número de comprobante.
|
|
81
|
+
*/
|
|
82
|
+
facturarExpo(opts: FacturarExpoOpts): Promise<FacturaExpoResult>;
|
|
83
|
+
/**
|
|
84
|
+
* Solicita un CAEA para un período y quincena.
|
|
85
|
+
* @param periodo - Período en formato YYYYMM
|
|
86
|
+
* @param orden - 1 = primera quincena, 2 = segunda quincena
|
|
87
|
+
*/
|
|
88
|
+
solicitarCAEA(periodo: string, orden: number): Promise<CaeaSolicitarResult>;
|
|
89
|
+
/** Consulta un CAEA previamente solicitado. */
|
|
90
|
+
consultarCAEA(periodo: string, orden: number): Promise<CaeaSolicitarResult>;
|
|
91
|
+
/** Informa comprobantes emitidos con un CAEA. */
|
|
92
|
+
registrarCAEA(request: CaeaRegInfRequest): Promise<FECAESolicitarResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Registra una factura emitida con CAEA (API simplificada).
|
|
95
|
+
* Equivale a `facturar()` pero usando un CAEA pre-solicitado.
|
|
96
|
+
* Calcula automáticamente IVA, totales, y número de comprobante.
|
|
97
97
|
*
|
|
98
98
|
* @example
|
|
99
99
|
* ```ts
|
|
100
|
-
* const
|
|
100
|
+
* const caea = await arca.solicitarCAEA("202604", 1);
|
|
101
|
+
*
|
|
102
|
+
* const result = await arca.registrarFacturaCAEA(caea.CAEA, {
|
|
101
103
|
* ptoVta: 1,
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* ptoVta: 1,
|
|
105
|
-
* nro: 10,
|
|
106
|
-
* fecha: "20260301",
|
|
107
|
-
* },
|
|
108
|
-
* docTipo: DocTipo.CUIT,
|
|
109
|
-
* docNro: 20123456789,
|
|
110
|
-
* items: [{ neto: 200, iva: IvaTipo.IVA_21 }],
|
|
104
|
+
* cbteTipo: CbteTipo.FACTURA_B,
|
|
105
|
+
* items: [{ neto: 100, iva: IvaTipo.IVA_21 }],
|
|
111
106
|
* });
|
|
112
107
|
* ```
|
|
113
108
|
*/
|
|
114
|
-
|
|
115
|
-
|
|
109
|
+
registrarFacturaCAEA(caea: string, opts: FacturarOpts): Promise<FacturaResult>;
|
|
110
|
+
/** Informa que no hubo movimientos para un CAEA en un punto de venta. */
|
|
111
|
+
sinMovimientoCAEA(caea: string, ptoVta: number): Promise<CaeaSinMovResult>;
|
|
116
112
|
/**
|
|
117
|
-
* Consulta un
|
|
113
|
+
* Consulta datos de un contribuyente por CUIT (padrón A13 - básico).
|
|
114
|
+
* Retorna nombre, tipo de persona, estado, impuestos.
|
|
118
115
|
*/
|
|
119
|
-
|
|
116
|
+
consultarCuit(cuit: number): Promise<Contribuyente>;
|
|
120
117
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
118
|
+
* Consulta datos detallados de un contribuyente (padrón A5).
|
|
119
|
+
* Requiere autorización adicional en el certificado.
|
|
120
|
+
* Incluye domicilio fiscal, actividades, etc.
|
|
123
121
|
*/
|
|
122
|
+
consultarCuitDetalle(cuit: number): Promise<Contribuyente>;
|
|
123
|
+
/** Estado de los servidores WSFE. No requiere autenticación. */
|
|
124
124
|
serverStatus(): Promise<ServerStatus>;
|
|
125
|
-
/** Obtiene los tipos de comprobante disponibles. */
|
|
126
125
|
getTiposComprobante(): Promise<ParamItem[]>;
|
|
127
|
-
/** Obtiene los tipos de concepto disponibles (Productos, Servicios, Productos y Servicios). */
|
|
128
126
|
getTiposConcepto(): Promise<ParamItem[]>;
|
|
129
|
-
/** Obtiene los tipos de documento disponibles. */
|
|
130
127
|
getTiposDocumento(): Promise<ParamItem[]>;
|
|
131
|
-
/** Obtiene los tipos de IVA disponibles. */
|
|
132
128
|
getTiposIva(): Promise<ParamItem[]>;
|
|
133
|
-
/** Obtiene las monedas disponibles. */
|
|
134
129
|
getMonedas(): Promise<MonedaItem[]>;
|
|
135
|
-
/** Obtiene los tipos de tributo disponibles. */
|
|
136
130
|
getTiposTributo(): Promise<ParamItem[]>;
|
|
137
|
-
/** Obtiene los tipos de datos opcionales disponibles. */
|
|
138
131
|
getTiposOpcional(): Promise<ParamItem[]>;
|
|
139
|
-
/** Obtiene los puntos de venta habilitados. */
|
|
140
132
|
getPuntosVenta(): Promise<PtoVentaItem[]>;
|
|
141
|
-
/** Obtiene la cotización de una moneda. */
|
|
142
133
|
getCotizacion(monedaId: string): Promise<CotizacionResult>;
|
|
143
|
-
/** Obtiene la cantidad máxima de registros por request. */
|
|
144
134
|
getCantMaxRegistros(): Promise<number>;
|
|
145
135
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
136
|
+
* Genera la URL del QR oficial de ARCA para un comprobante autorizado.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const url = Arca.generateQRUrl({
|
|
141
|
+
* fecha: "2026-03-28",
|
|
142
|
+
* cuit: 20123456789,
|
|
143
|
+
* ptoVta: 1,
|
|
144
|
+
* tipoCmp: CbteTipo.FACTURA_B,
|
|
145
|
+
* nroCmp: 150,
|
|
146
|
+
* importe: 121,
|
|
147
|
+
* moneda: "PES",
|
|
148
|
+
* ctz: 1,
|
|
149
|
+
* tipoDocRec: DocTipo.CONSUMIDOR_FINAL,
|
|
150
|
+
* nroDocRec: 0,
|
|
151
|
+
* codAut: 73429843294823,
|
|
152
|
+
* });
|
|
153
|
+
* ```
|
|
148
154
|
*/
|
|
155
|
+
static generateQRUrl(input: QRInput): string;
|
|
156
|
+
/** Extrae CAE del resultado raw de FECAESolicitar. */
|
|
149
157
|
static extractCAE(result: FECAESolicitarResult): {
|
|
150
158
|
approved: boolean;
|
|
151
159
|
details: FECAEDetResponse[];
|
|
152
160
|
cae?: string;
|
|
153
161
|
caeFchVto?: string;
|
|
154
162
|
};
|
|
155
|
-
/**
|
|
156
|
-
* Formatea una fecha Date a formato YYYYMMDD requerido por ARCA.
|
|
157
|
-
* Usa timezone America/Argentina/Buenos_Aires.
|
|
158
|
-
*/
|
|
163
|
+
/** Formatea Date a YYYYMMDD (timezone Argentina). */
|
|
159
164
|
static formatDate(date: Date | string): string;
|
|
160
|
-
/**
|
|
161
|
-
* Calcula los importes de una factura a partir de line items.
|
|
162
|
-
* Útil para previsualizar totales antes de enviar a ARCA.
|
|
163
|
-
*
|
|
164
|
-
* @example
|
|
165
|
-
* ```ts
|
|
166
|
-
* const { importes } = Arca.calcularTotales([
|
|
167
|
-
* { neto: 1000, iva: IvaTipo.IVA_21 },
|
|
168
|
-
* { neto: 500, iva: IvaTipo.IVA_10_5 },
|
|
169
|
-
* ]);
|
|
170
|
-
* console.log(importes.total); // 1762.5
|
|
171
|
-
* ```
|
|
172
|
-
*/
|
|
165
|
+
/** Calcula importes e IVA desde line items. Para previsualizar sin enviar. */
|
|
173
166
|
static calcularTotales(items: LineItem[], opts?: {
|
|
174
167
|
tributos?: {
|
|
175
168
|
Importe: number;
|
|
@@ -179,9 +172,7 @@ export declare class Arca {
|
|
|
179
172
|
importes: import("./types.js").Importes;
|
|
180
173
|
iva: import("./types.js").AlicuotaIva[];
|
|
181
174
|
};
|
|
182
|
-
/**
|
|
183
|
-
* Invalida los tickets de acceso cacheados.
|
|
184
|
-
*/
|
|
175
|
+
/** Invalida los tickets de acceso cacheados. */
|
|
185
176
|
clearAuthCache(): void;
|
|
186
177
|
}
|
|
187
178
|
//# sourceMappingURL=arca.d.ts.map
|
package/dist/arca.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arca.d.ts","sourceRoot":"","sources":["../src/arca.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arca.d.ts","sourceRoot":"","sources":["../src/arca.ts"],"names":[],"mappings":"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"}
|