@ramiidv/arca-sdk 0.3.0 → 1.0.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/README.md +151 -8
- package/dist/arca.d.ts +71 -126
- package/dist/arca.d.ts.map +1 -1
- package/dist/arca.js +166 -148
- package/dist/arca.js.map +1 -1
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/soap-client.d.ts +13 -6
- package/dist/soap-client.d.ts.map +1 -1
- package/dist/soap-client.js +79 -32
- package/dist/soap-client.js.map +1 -1
- package/dist/types.d.ts +207 -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 +9 -27
- package/dist/wsfe.d.ts.map +1 -1
- package/dist/wsfe.js +30 -49
- 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 +115 -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,46 @@ const result = await arca.facturar({
|
|
|
174
179
|
});
|
|
175
180
|
```
|
|
176
181
|
|
|
182
|
+
### Factura de exportación (WSFEX)
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
const nextId = (await arca.ultimoIdExpo()) + 1;
|
|
186
|
+
const nextNum = await arca.siguienteComprobanteExpo(1, CbteTipo.FACTURA_E);
|
|
187
|
+
|
|
188
|
+
const result = await arca.crearFacturaExportacion({
|
|
189
|
+
Id: nextId,
|
|
190
|
+
Cbte_Tipo: CbteTipo.FACTURA_E,
|
|
191
|
+
Fecha_cbte: Arca.formatDate(new Date()),
|
|
192
|
+
Punto_vta: 1,
|
|
193
|
+
Cbte_nro: nextNum,
|
|
194
|
+
Tipo_expo: 1, // 1=Bienes, 2=Servicios, 4=Otros
|
|
195
|
+
Permiso_existente: "N",
|
|
196
|
+
Dst_cmp: 203, // País destino (203 = Estados Unidos)
|
|
197
|
+
Cliente: "ACME Corp",
|
|
198
|
+
Cuit_pais_cliente: 50000000016,
|
|
199
|
+
Domicilio_cliente: "123 Main St, New York",
|
|
200
|
+
Id_impositivo: "12-3456789",
|
|
201
|
+
Moneda_Id: "DOL",
|
|
202
|
+
Moneda_ctz: 1200,
|
|
203
|
+
Idioma_cbte: 2, // 1=Español, 2=Inglés, 3=Portugués
|
|
204
|
+
Forma_pago: "Wire Transfer",
|
|
205
|
+
Incoterms: "FOB",
|
|
206
|
+
Items: [{
|
|
207
|
+
Pro_codigo: "SKU001",
|
|
208
|
+
Pro_ds: "Widget",
|
|
209
|
+
Pro_qty: 100,
|
|
210
|
+
Pro_umed: 7,
|
|
211
|
+
Pro_precio_uni: 10,
|
|
212
|
+
Pro_bonificacion: 0,
|
|
213
|
+
Pro_total_item: 1000,
|
|
214
|
+
}],
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
if (result.FEXResultAuth?.Resultado === "A") {
|
|
218
|
+
console.log(`CAE: ${result.FEXResultAuth.Cae}`);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
177
222
|
### Previsualizar totales sin enviar
|
|
178
223
|
|
|
179
224
|
```typescript
|
|
@@ -185,6 +230,25 @@ console.log(importes);
|
|
|
185
230
|
// { total: 1762.5, neto: 1500, iva: 262.5, exento: 0, noGravado: 0, tributos: 0 }
|
|
186
231
|
```
|
|
187
232
|
|
|
233
|
+
### QR para factura impresa
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
const url = Arca.generateQRUrl({
|
|
237
|
+
fecha: "2026-03-28",
|
|
238
|
+
cuit: 20123456789,
|
|
239
|
+
ptoVta: 1,
|
|
240
|
+
tipoCmp: CbteTipo.FACTURA_B,
|
|
241
|
+
nroCmp: 150,
|
|
242
|
+
importe: 121,
|
|
243
|
+
moneda: "PES",
|
|
244
|
+
ctz: 1,
|
|
245
|
+
tipoDocRec: DocTipo.CONSUMIDOR_FINAL,
|
|
246
|
+
nroDocRec: 0,
|
|
247
|
+
codAut: 73429843294823, // CAE
|
|
248
|
+
});
|
|
249
|
+
// → "https://www.afip.gob.ar/fe/qr/?p=<base64>"
|
|
250
|
+
```
|
|
251
|
+
|
|
188
252
|
### Factura en moneda extranjera
|
|
189
253
|
|
|
190
254
|
```typescript
|
|
@@ -201,6 +265,55 @@ const result = await arca.facturar({
|
|
|
201
265
|
});
|
|
202
266
|
```
|
|
203
267
|
|
|
268
|
+
## Retry automático
|
|
269
|
+
|
|
270
|
+
El SDK reintenta automáticamente en errores transitorios (timeout, HTTP 5xx, errores de red). No reintenta en errores de negocio (4xx, errores de ARCA).
|
|
271
|
+
|
|
272
|
+
- **Default**: 1 reintento con backoff exponencial (1s, 2s, ...)
|
|
273
|
+
- **Configurable**: `retries: 0` para desactivar, `retries: 3` para más intentos
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
const arca = new Arca({
|
|
277
|
+
...config,
|
|
278
|
+
retries: 2, // 2 reintentos (3 intentos totales)
|
|
279
|
+
retryDelayMs: 2000, // empezar con 2s → 4s → 8s
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Eventos / Logging
|
|
284
|
+
|
|
285
|
+
El SDK emite eventos para debugging y monitoreo sin forzar un logger específico.
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
// Opción 1: callback en config
|
|
289
|
+
const arca = new Arca({
|
|
290
|
+
...config,
|
|
291
|
+
onEvent: (e) => console.log(`[${e.type}]`, e),
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
// Opción 2: suscripción por tipo de evento
|
|
295
|
+
arca.on("request:end", (e) => {
|
|
296
|
+
if (e.type === "request:end") {
|
|
297
|
+
metrics.histogram("arca.request.duration", e.durationMs);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
arca.on("request:retry", (e) => {
|
|
302
|
+
if (e.type === "request:retry") {
|
|
303
|
+
logger.warn(`Retry #${e.attempt} for ${e.method}: ${e.error}`);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
| Evento | Cuándo | Datos |
|
|
309
|
+
| --- | --- | --- |
|
|
310
|
+
| `auth:login` | Nuevo token obtenido | `service`, `durationMs` |
|
|
311
|
+
| `auth:cache-hit` | Token cacheado reutilizado | `service` |
|
|
312
|
+
| `request:start` | Antes de una llamada SOAP | `method`, `endpoint` |
|
|
313
|
+
| `request:end` | Llamada SOAP completada | `method`, `durationMs` |
|
|
314
|
+
| `request:retry` | Reintentando tras error | `method`, `attempt`, `delayMs`, `error` |
|
|
315
|
+
| `request:error` | Llamada SOAP falló | `method`, `error` |
|
|
316
|
+
|
|
204
317
|
## Manejo de errores
|
|
205
318
|
|
|
206
319
|
El SDK provee clases de error específicas para catch granular:
|
|
@@ -223,7 +336,7 @@ try {
|
|
|
223
336
|
}
|
|
224
337
|
|
|
225
338
|
if (e instanceof ArcaWSFEError) {
|
|
226
|
-
// Error de WSFE con códigos de ARCA
|
|
339
|
+
// Error de WSFE/WSFEX con códigos de ARCA
|
|
227
340
|
for (const err of e.errors) {
|
|
228
341
|
console.error(`[${err.code}] ${err.msg}`);
|
|
229
342
|
}
|
|
@@ -239,7 +352,7 @@ try {
|
|
|
239
352
|
| Clase | Cuándo se lanza |
|
|
240
353
|
| --- | --- |
|
|
241
354
|
| `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 }[]` |
|
|
355
|
+
| `ArcaWSFEError` | Error devuelto por WSFE/WSFEX (campos inválidos, CUIT no autorizado, etc.). Contiene `errors: { code, msg }[]` |
|
|
243
356
|
| `ArcaSoapError` | Error HTTP, timeout, SOAP Fault. Contiene `statusCode?: number` |
|
|
244
357
|
| `ArcaError` | Clase base para todos los errores del SDK |
|
|
245
358
|
|
|
@@ -284,6 +397,9 @@ const maxRegs = await arca.getCantMaxRegistros();
|
|
|
284
397
|
| `production` | `boolean` | `false` | Entorno de producción |
|
|
285
398
|
| `tokenTTLMinutes` | `number` | `720` | TTL del token en minutos |
|
|
286
399
|
| `requestTimeoutMs` | `number` | `30000` | Timeout HTTP en milisegundos |
|
|
400
|
+
| `retries` | `number` | `1` | Reintentos en errores transitorios |
|
|
401
|
+
| `retryDelayMs` | `number` | `1000` | Delay inicial entre reintentos (exponencial) |
|
|
402
|
+
| `onEvent` | `function` | — | Callback para eventos del SDK |
|
|
287
403
|
|
|
288
404
|
### Facturación — API simplificada
|
|
289
405
|
|
|
@@ -305,7 +421,26 @@ Retornan `FacturaResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `i
|
|
|
305
421
|
| `siguienteComprobante(ptoVta, cbteTipo)` | Siguiente número (último + 1) |
|
|
306
422
|
| `consultarComprobante(cbteTipo, ptoVta, cbteNro)` | Consulta un comprobante existente |
|
|
307
423
|
|
|
308
|
-
###
|
|
424
|
+
### Exportación (WSFEX)
|
|
425
|
+
|
|
426
|
+
| Método | Descripción |
|
|
427
|
+
| --- | --- |
|
|
428
|
+
| `crearFacturaExportacion(invoice)` | Autoriza un comprobante de exportación |
|
|
429
|
+
| `ultimoComprobanteExpo(ptoVta, cbteTipo)` | Último número autorizado (WSFEX) |
|
|
430
|
+
| `siguienteComprobanteExpo(ptoVta, cbteTipo)` | Siguiente número (WSFEX) |
|
|
431
|
+
| `ultimoIdExpo()` | Último ID de request WSFEX |
|
|
432
|
+
| `consultarComprobanteExpo(cbteTipo, ptoVta, cbteNro)` | Consulta comprobante de exportación |
|
|
433
|
+
| `serverStatusExpo()` | Estado de los servidores WSFEX |
|
|
434
|
+
| `getTiposCbteExpo()` | Tipos de comprobante de exportación |
|
|
435
|
+
| `getMonedasExpo()` | Monedas (WSFEX) |
|
|
436
|
+
| `getPaisesExpo()` | Países destino |
|
|
437
|
+
| `getIdiomasExpo()` | Idiomas disponibles |
|
|
438
|
+
| `getIncotermsExpo()` | Incoterms |
|
|
439
|
+
| `getUMedExpo()` | Unidades de medida |
|
|
440
|
+
| `getTiposExpo()` | Tipos de exportación |
|
|
441
|
+
| `getCuitsPaisExpo()` | CUITs de países |
|
|
442
|
+
|
|
443
|
+
### Parámetros WSFE
|
|
309
444
|
|
|
310
445
|
| Método | Descripción |
|
|
311
446
|
| --- | --- |
|
|
@@ -321,11 +456,19 @@ Retornan `FacturaResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `i
|
|
|
321
456
|
| `getCotizacion(monedaId)` | Cotización de una moneda |
|
|
322
457
|
| `getCantMaxRegistros()` | Máx registros por request |
|
|
323
458
|
|
|
459
|
+
### Eventos
|
|
460
|
+
|
|
461
|
+
| Método | Descripción |
|
|
462
|
+
| --- | --- |
|
|
463
|
+
| `on(event, handler)` | Suscribirse a un tipo de evento |
|
|
464
|
+
| `off(event, handler)` | Desuscribirse de un evento |
|
|
465
|
+
|
|
324
466
|
### Utilidades estáticas
|
|
325
467
|
|
|
326
468
|
| Método | Descripción |
|
|
327
469
|
| --- | --- |
|
|
328
470
|
| `Arca.calcularTotales(items, opts?)` | Calcula importes e IVA sin enviar a ARCA |
|
|
471
|
+
| `Arca.generateQRUrl(input)` | Genera la URL del QR oficial de AFIP |
|
|
329
472
|
| `Arca.extractCAE(result)` | Extrae CAE del resultado raw |
|
|
330
473
|
| `Arca.formatDate(date)` | Formatea `Date` a `YYYYMMDD` (timezone Argentina) |
|
|
331
474
|
|
|
@@ -378,10 +521,10 @@ Tambien se incluyen tipos especiales: `COMPRA_BIENES_USADOS` (49), `CTA_VTA_LIQ_
|
|
|
378
521
|
|
|
379
522
|
## Entornos
|
|
380
523
|
|
|
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` |
|
|
524
|
+
| Entorno | WSAA | WSFE | WSFEX |
|
|
525
|
+
| --- | --- | --- | --- |
|
|
526
|
+
| Testing | `wsaahomo.afip.gov.ar` | `wswhomo.afip.gov.ar` | `wswhomo.afip.gov.ar` |
|
|
527
|
+
| Producción | `wsaa.afip.gov.ar` | `servicios1.afip.gov.ar` | `servicios1.afip.gov.ar` |
|
|
385
528
|
|
|
386
529
|
## Licencia
|
|
387
530
|
|
package/dist/arca.d.ts
CHANGED
|
@@ -1,175 +1,122 @@
|
|
|
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 } from "./types.js";
|
|
2
2
|
export declare class Arca {
|
|
3
3
|
private wsaa;
|
|
4
4
|
private wsfe;
|
|
5
|
+
private wsfex;
|
|
5
6
|
private cuit;
|
|
6
7
|
private production;
|
|
8
|
+
private emitter;
|
|
9
|
+
private onEventCb?;
|
|
7
10
|
constructor(config: ArcaConfig);
|
|
8
11
|
/**
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
private getAuth;
|
|
12
|
-
/**
|
|
13
|
-
* Crea una factura y obtiene el CAE.
|
|
12
|
+
* Suscribirse a eventos del SDK.
|
|
14
13
|
*
|
|
15
14
|
* @example
|
|
16
15
|
* ```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
|
-
* });
|
|
16
|
+
* arca.on("request:end", (e) => console.log(`${e.method} took ${e.durationMs}ms`));
|
|
17
|
+
* arca.on("auth:login", (e) => console.log(`Login ${e.service} in ${e.durationMs}ms`));
|
|
18
|
+
* arca.on("request:retry", (e) => console.warn(`Retry #${e.attempt}: ${e.error}`));
|
|
38
19
|
* ```
|
|
39
20
|
*/
|
|
21
|
+
on(event: ArcaEvent["type"], handler: (event: ArcaEvent) => void): this;
|
|
22
|
+
/** Desuscribirse de un evento. */
|
|
23
|
+
off(event: ArcaEvent["type"], handler: (event: ArcaEvent) => void): this;
|
|
24
|
+
private getAuth;
|
|
25
|
+
/** Solicita CAE para uno o más comprobantes (API raw). */
|
|
40
26
|
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
|
-
*/
|
|
27
|
+
/** Último número de comprobante autorizado. */
|
|
45
28
|
ultimoComprobante(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
46
|
-
/**
|
|
47
|
-
* Obtiene el siguiente número de comprobante (último + 1).
|
|
48
|
-
*/
|
|
29
|
+
/** Siguiente número de comprobante (último + 1). */
|
|
49
30
|
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
|
-
*/
|
|
31
|
+
/** Crea factura obteniendo el número automáticamente (API raw). */
|
|
54
32
|
crearFacturaAuto(ptoVta: number, cbteTipo: number, invoice: Omit<InvoiceDetail, "CbteDesde" | "CbteHasta">): Promise<FECAESolicitarResult>;
|
|
55
33
|
/**
|
|
56
34
|
* Crea una factura con API simplificada.
|
|
57
35
|
* 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
36
|
*/
|
|
75
37
|
facturar(opts: FacturarOpts): Promise<FacturaResult>;
|
|
76
38
|
/**
|
|
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
|
-
* ```
|
|
39
|
+
* Crea una nota de crédito. Tipo de NC inferido del comprobante original.
|
|
92
40
|
*/
|
|
93
41
|
notaCredito(opts: NotaCreditoOpts): Promise<FacturaResult>;
|
|
94
42
|
/**
|
|
95
|
-
* Crea una nota de débito
|
|
96
|
-
* El tipo de ND se infiere automáticamente del tipo del comprobante original.
|
|
97
|
-
*
|
|
98
|
-
* @example
|
|
99
|
-
* ```ts
|
|
100
|
-
* const result = await arca.notaDebito({
|
|
101
|
-
* 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 }],
|
|
111
|
-
* });
|
|
112
|
-
* ```
|
|
43
|
+
* Crea una nota de débito. Tipo de ND inferido del comprobante original.
|
|
113
44
|
*/
|
|
114
45
|
notaDebito(opts: NotaDebitoOpts): Promise<FacturaResult>;
|
|
115
46
|
private facturarConAsociado;
|
|
116
|
-
/**
|
|
117
|
-
* Consulta un comprobante previamente autorizado.
|
|
118
|
-
*/
|
|
47
|
+
/** Consulta un comprobante previamente autorizado. */
|
|
119
48
|
consultarComprobante(cbteTipo: number, ptoVta: number, cbteNro: number): Promise<FECompConsultarResult>;
|
|
120
|
-
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
49
|
+
/** Autoriza un comprobante de exportación (WSFEX). */
|
|
50
|
+
crearFacturaExportacion(invoice: WsfexInvoice): Promise<WsfexAuthResult>;
|
|
51
|
+
/** Último número de comprobante de exportación autorizado. */
|
|
52
|
+
ultimoComprobanteExpo(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
53
|
+
/** Siguiente número de comprobante de exportación. */
|
|
54
|
+
siguienteComprobanteExpo(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
55
|
+
/** Último ID de request WSFEX. */
|
|
56
|
+
ultimoIdExpo(): Promise<number>;
|
|
57
|
+
/** Consulta un comprobante de exportación. */
|
|
58
|
+
consultarComprobanteExpo(cbteTipo: number, ptoVta: number, cbteNro: number): Promise<WsfexGetCmpResult>;
|
|
59
|
+
/** Estado de los servidores WSFEX. */
|
|
60
|
+
serverStatusExpo(): Promise<ServerStatus>;
|
|
61
|
+
/** Tipos de comprobante de exportación. */
|
|
62
|
+
getTiposCbteExpo(): Promise<WsfexParamItem[]>;
|
|
63
|
+
/** Monedas (WSFEX). */
|
|
64
|
+
getMonedasExpo(): Promise<WsfexParamItem[]>;
|
|
65
|
+
/** Países destino de exportación. */
|
|
66
|
+
getPaisesExpo(): Promise<WsfexParamItem[]>;
|
|
67
|
+
/** Idiomas disponibles (WSFEX). */
|
|
68
|
+
getIdiomasExpo(): Promise<WsfexParamItem[]>;
|
|
69
|
+
/** Incoterms disponibles. */
|
|
70
|
+
getIncotermsExpo(): Promise<WsfexParamItem[]>;
|
|
71
|
+
/** Unidades de medida (WSFEX). */
|
|
72
|
+
getUMedExpo(): Promise<WsfexParamItem[]>;
|
|
73
|
+
/** Tipos de exportación. */
|
|
74
|
+
getTiposExpo(): Promise<WsfexParamItem[]>;
|
|
75
|
+
/** CUITs de países. */
|
|
76
|
+
getCuitsPaisExpo(): Promise<WsfexParamItem[]>;
|
|
77
|
+
/** Estado de los servidores WSFE. No requiere autenticación. */
|
|
124
78
|
serverStatus(): Promise<ServerStatus>;
|
|
125
|
-
/** Obtiene los tipos de comprobante disponibles. */
|
|
126
79
|
getTiposComprobante(): Promise<ParamItem[]>;
|
|
127
|
-
/** Obtiene los tipos de concepto disponibles (Productos, Servicios, Productos y Servicios). */
|
|
128
80
|
getTiposConcepto(): Promise<ParamItem[]>;
|
|
129
|
-
/** Obtiene los tipos de documento disponibles. */
|
|
130
81
|
getTiposDocumento(): Promise<ParamItem[]>;
|
|
131
|
-
/** Obtiene los tipos de IVA disponibles. */
|
|
132
82
|
getTiposIva(): Promise<ParamItem[]>;
|
|
133
|
-
/** Obtiene las monedas disponibles. */
|
|
134
83
|
getMonedas(): Promise<MonedaItem[]>;
|
|
135
|
-
/** Obtiene los tipos de tributo disponibles. */
|
|
136
84
|
getTiposTributo(): Promise<ParamItem[]>;
|
|
137
|
-
/** Obtiene los tipos de datos opcionales disponibles. */
|
|
138
85
|
getTiposOpcional(): Promise<ParamItem[]>;
|
|
139
|
-
/** Obtiene los puntos de venta habilitados. */
|
|
140
86
|
getPuntosVenta(): Promise<PtoVentaItem[]>;
|
|
141
|
-
/** Obtiene la cotización de una moneda. */
|
|
142
87
|
getCotizacion(monedaId: string): Promise<CotizacionResult>;
|
|
143
|
-
/** Obtiene la cantidad máxima de registros por request. */
|
|
144
88
|
getCantMaxRegistros(): Promise<number>;
|
|
145
89
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
90
|
+
* Genera la URL del QR oficial de ARCA para un comprobante autorizado.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* const url = Arca.generateQRUrl({
|
|
95
|
+
* fecha: "2026-03-28",
|
|
96
|
+
* cuit: 20123456789,
|
|
97
|
+
* ptoVta: 1,
|
|
98
|
+
* tipoCmp: CbteTipo.FACTURA_B,
|
|
99
|
+
* nroCmp: 150,
|
|
100
|
+
* importe: 121,
|
|
101
|
+
* moneda: "PES",
|
|
102
|
+
* ctz: 1,
|
|
103
|
+
* tipoDocRec: DocTipo.CONSUMIDOR_FINAL,
|
|
104
|
+
* nroDocRec: 0,
|
|
105
|
+
* codAut: 73429843294823,
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
148
108
|
*/
|
|
109
|
+
static generateQRUrl(input: QRInput): string;
|
|
110
|
+
/** Extrae CAE del resultado raw de FECAESolicitar. */
|
|
149
111
|
static extractCAE(result: FECAESolicitarResult): {
|
|
150
112
|
approved: boolean;
|
|
151
113
|
details: FECAEDetResponse[];
|
|
152
114
|
cae?: string;
|
|
153
115
|
caeFchVto?: string;
|
|
154
116
|
};
|
|
155
|
-
/**
|
|
156
|
-
* Formatea una fecha Date a formato YYYYMMDD requerido por ARCA.
|
|
157
|
-
* Usa timezone America/Argentina/Buenos_Aires.
|
|
158
|
-
*/
|
|
117
|
+
/** Formatea Date a YYYYMMDD (timezone Argentina). */
|
|
159
118
|
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
|
-
*/
|
|
119
|
+
/** Calcula importes e IVA desde line items. Para previsualizar sin enviar. */
|
|
173
120
|
static calcularTotales(items: LineItem[], opts?: {
|
|
174
121
|
tributos?: {
|
|
175
122
|
Importe: number;
|
|
@@ -179,9 +126,7 @@ export declare class Arca {
|
|
|
179
126
|
importes: import("./types.js").Importes;
|
|
180
127
|
iva: import("./types.js").AlicuotaIva[];
|
|
181
128
|
};
|
|
182
|
-
/**
|
|
183
|
-
* Invalida los tickets de acceso cacheados.
|
|
184
|
-
*/
|
|
129
|
+
/** Invalida los tickets de acceso cacheados. */
|
|
185
130
|
clearAuthCache(): void;
|
|
186
131
|
}
|
|
187
132
|
//# 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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"}
|