@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 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) y Facturas de Crédito Electrónica MiPyME (FCE).
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`, `observaciones`, `raw`.
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
- ### Parámetros
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
- * Obtiene las credenciales de autenticación para WSFE.
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
- * const result = await arca.crearFactura({
18
- * PtoVta: 1,
19
- * CbteTipo: CbteTipo.FACTURA_B,
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 asociada a un comprobante original.
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 asociada a un comprobante original.
96
- * El tipo de ND se infiere automáticamente del tipo del comprobante original.
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 result = await arca.notaDebito({
100
+ * const caea = await arca.solicitarCAEA("202604", 1);
101
+ *
102
+ * const result = await arca.registrarFacturaCAEA(caea.CAEA, {
101
103
  * ptoVta: 1,
102
- * comprobanteOriginal: {
103
- * tipo: CbteTipo.FACTURA_A,
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
- notaDebito(opts: NotaDebitoOpts): Promise<FacturaResult>;
115
- private facturarConAsociado;
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 comprobante previamente autorizado.
113
+ * Consulta datos de un contribuyente por CUIT (padrón A13 - básico).
114
+ * Retorna nombre, tipo de persona, estado, impuestos.
118
115
  */
119
- consultarComprobante(cbteTipo: number, ptoVta: number, cbteNro: number): Promise<FECompConsultarResult>;
116
+ consultarCuit(cuit: number): Promise<Contribuyente>;
120
117
  /**
121
- * Verifica el estado de los servidores de ARCA.
122
- * No requiere autenticación.
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
- * Extrae el CAE y detalles de respuesta de FECAESolicitar.
147
- * Helper para simplificar el procesamiento del resultado.
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
@@ -1 +1 @@
1
- {"version":3,"file":"arca.d.ts","sourceRoot":"","sources":["../src/arca.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arca.d.ts","sourceRoot":"","sources":["../src/arca.ts"],"names":[],"mappings":"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"}