@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/dist/wsfe.js CHANGED
@@ -1,5 +1,5 @@
1
- import { ENDPOINTS } from "./constants.js";
2
- import { wsfeSoapCall } from "./soap-client.js";
1
+ import { ENDPOINTS, WSFE_NAMESPACE } from "./constants.js";
2
+ import { afipSoapCall } from "./soap-client.js";
3
3
  import { ArcaWSFEError } from "./errors.js";
4
4
  function toArray(val) {
5
5
  if (val === undefined || val === null)
@@ -14,22 +14,27 @@ function checkErrors(result) {
14
14
  }
15
15
  export class WsfeClient {
16
16
  endpoint;
17
- timeoutMs;
18
- constructor(production, timeoutMs = 30_000) {
17
+ soapOpts;
18
+ constructor(production, opts = {}) {
19
19
  this.endpoint = production
20
20
  ? ENDPOINTS.wsfe.production
21
21
  : ENDPOINTS.wsfe.testing;
22
- this.timeoutMs = timeoutMs;
22
+ this.soapOpts = {
23
+ timeoutMs: opts.timeoutMs,
24
+ retries: opts.retries,
25
+ retryDelayMs: opts.retryDelayMs,
26
+ onEvent: opts.onEvent,
27
+ };
28
+ }
29
+ call(method, params) {
30
+ return afipSoapCall(this.endpoint, WSFE_NAMESPACE, method, params, this.soapOpts);
23
31
  }
24
32
  // ============================================================
25
33
  // Facturación
26
34
  // ============================================================
27
- /**
28
- * Solicita CAE (Código de Autorización Electrónica) para uno o más comprobantes.
29
- */
30
35
  async solicitarCAE(auth, request) {
31
36
  const detRequests = request.invoices.map((inv) => this.buildDetRequest(inv));
32
- const params = {
37
+ const result = (await this.call("FECAESolicitar", {
33
38
  Auth: auth,
34
39
  FeCAEReq: {
35
40
  FeCabReq: {
@@ -37,100 +42,76 @@ export class WsfeClient {
37
42
  PtoVta: request.PtoVta,
38
43
  CbteTipo: request.CbteTipo,
39
44
  },
40
- FeDetReq: {
41
- FECAEDetRequest: detRequests,
42
- },
45
+ FeDetReq: { FECAEDetRequest: detRequests },
43
46
  },
44
- };
45
- const result = (await wsfeSoapCall(this.endpoint, "FECAESolicitar", params, this.timeoutMs));
47
+ }));
46
48
  checkErrors(result);
47
49
  return result;
48
50
  }
49
- /**
50
- * Obtiene el último número de comprobante autorizado para un punto de venta y tipo.
51
- */
52
51
  async ultimoComprobante(auth, ptoVta, cbteTipo) {
53
- const result = (await wsfeSoapCall(this.endpoint, "FECompUltimoAutorizado", {
52
+ const result = (await this.call("FECompUltimoAutorizado", {
54
53
  Auth: auth,
55
54
  PtoVta: ptoVta,
56
55
  CbteTipo: cbteTipo,
57
- }, this.timeoutMs));
56
+ }));
58
57
  checkErrors(result);
59
58
  return result.CbteNro;
60
59
  }
61
- /**
62
- * Consulta un comprobante previamente autorizado.
63
- */
64
60
  async consultarComprobante(auth, cbteTipo, ptoVta, cbteNro) {
65
- const result = (await wsfeSoapCall(this.endpoint, "FECompConsultar", {
61
+ const result = (await this.call("FECompConsultar", {
66
62
  Auth: auth,
67
- FeCompConsReq: {
68
- CbteTipo: cbteTipo,
69
- CbteNro: cbteNro,
70
- PtoVta: ptoVta,
71
- },
72
- }, this.timeoutMs));
63
+ FeCompConsReq: { CbteTipo: cbteTipo, CbteNro: cbteNro, PtoVta: ptoVta },
64
+ }));
73
65
  checkErrors(result);
74
66
  return result;
75
67
  }
76
68
  // ============================================================
77
69
  // Parámetros
78
70
  // ============================================================
79
- /**
80
- * Verifica el estado de los servidores de ARCA.
81
- */
82
71
  async serverStatus() {
83
- const result = await wsfeSoapCall(this.endpoint, "FEDummy", {}, this.timeoutMs);
84
- return result;
72
+ return (await this.call("FEDummy", {}));
85
73
  }
86
- /**
87
- * Obtiene los tipos de comprobante disponibles.
88
- */
89
74
  async getParam(auth, method, itemKey) {
90
- const result = (await wsfeSoapCall(this.endpoint, method, { Auth: auth }, this.timeoutMs));
75
+ const result = (await this.call(method, { Auth: auth }));
91
76
  checkErrors(result);
92
77
  return toArray(result.ResultGet?.[itemKey]);
93
78
  }
94
79
  async getTiposComprobante(auth) {
95
80
  return this.getParam(auth, "FEParamGetTiposCbte", "CbteTipo");
96
81
  }
97
- /** Obtiene los tipos de concepto disponibles. */
98
82
  async getTiposConcepto(auth) {
99
83
  return this.getParam(auth, "FEParamGetTiposConcepto", "ConceptoTipo");
100
84
  }
101
- /** Obtiene los tipos de documento disponibles. */
102
85
  async getTiposDocumento(auth) {
103
86
  return this.getParam(auth, "FEParamGetTiposDoc", "DocTipo");
104
87
  }
105
- /** Obtiene los tipos de IVA disponibles. */
106
88
  async getTiposIva(auth) {
107
89
  return this.getParam(auth, "FEParamGetTiposIva", "IvaTipo");
108
90
  }
109
- /** Obtiene las monedas disponibles. */
110
91
  async getMonedas(auth) {
111
92
  return this.getParam(auth, "FEParamGetTiposMonedas", "Moneda");
112
93
  }
113
- /** Obtiene los tipos de tributo disponibles. */
114
94
  async getTiposTributo(auth) {
115
95
  return this.getParam(auth, "FEParamGetTiposTributos", "TributoTipo");
116
96
  }
117
- /** Obtiene los tipos de opcionales disponibles. */
118
97
  async getTiposOpcional(auth) {
119
98
  return this.getParam(auth, "FEParamGetTiposOpcional", "OpcionalTipo");
120
99
  }
121
- /** Obtiene los puntos de venta habilitados. */
122
100
  async getPuntosVenta(auth) {
123
101
  return this.getParam(auth, "FEParamGetPtosVenta", "PtoVenta");
124
102
  }
125
- /** Obtiene la cotización de una moneda. */
126
103
  async getCotizacion(auth, monedaId) {
127
- const result = (await wsfeSoapCall(this.endpoint, "FEParamGetCotizacion", { Auth: auth, MonId: monedaId }, this.timeoutMs));
104
+ const result = (await this.call("FEParamGetCotizacion", {
105
+ Auth: auth,
106
+ MonId: monedaId,
107
+ }));
128
108
  checkErrors(result);
129
109
  return result;
130
110
  }
131
- /** Obtiene la cantidad máxima de registros por request de FECAESolicitar. */
132
111
  async getCantMaxRegistros(auth) {
133
- const result = (await wsfeSoapCall(this.endpoint, "FECompTotXRequest", { Auth: auth }, this.timeoutMs));
112
+ const result = (await this.call("FECompTotXRequest", {
113
+ Auth: auth,
114
+ }));
134
115
  checkErrors(result);
135
116
  return result.RegXReq ?? 0;
136
117
  }
package/dist/wsfe.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wsfe.js","sourceRoot":"","sources":["../src/wsfe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wsfe.js","sourceRoot":"","sources":["../src/wsfe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { WsfeAuth, WsfexInvoice, WsfexAuthResult, WsfexGetCmpResult, WsfexParamItem, ServerStatus, ArcaEvent } from "./types.js";
2
+ export declare class WsfexClient {
3
+ private endpoint;
4
+ private soapOpts;
5
+ constructor(production: boolean, opts?: {
6
+ timeoutMs?: number;
7
+ retries?: number;
8
+ retryDelayMs?: number;
9
+ onEvent?: (event: ArcaEvent) => void;
10
+ });
11
+ private call;
12
+ /**
13
+ * Autoriza un comprobante de exportación.
14
+ */
15
+ authorize(auth: WsfeAuth, invoice: WsfexInvoice): Promise<WsfexAuthResult>;
16
+ /**
17
+ * Obtiene el último comprobante autorizado.
18
+ */
19
+ getLastCmp(auth: WsfeAuth, ptoVta: number, cbteTipo: number): Promise<number>;
20
+ /**
21
+ * Obtiene el último ID de request.
22
+ */
23
+ getLastId(auth: WsfeAuth): Promise<number>;
24
+ /**
25
+ * Consulta un comprobante de exportación.
26
+ */
27
+ getCmp(auth: WsfeAuth, cbteTipo: number, ptoVta: number, cbteNro: number): Promise<WsfexGetCmpResult>;
28
+ /**
29
+ * Verifica el estado de los servidores de WSFEX.
30
+ */
31
+ serverStatus(): Promise<ServerStatus>;
32
+ private getParamList;
33
+ /** Tipos de comprobante de exportación. */
34
+ getTiposCbte(auth: WsfeAuth): Promise<WsfexParamItem[]>;
35
+ /** Monedas disponibles. */
36
+ getMonedas(auth: WsfeAuth): Promise<WsfexParamItem[]>;
37
+ /** Países destino. */
38
+ getPaises(auth: WsfeAuth): Promise<WsfexParamItem[]>;
39
+ /** Idiomas disponibles. */
40
+ getIdiomas(auth: WsfeAuth): Promise<WsfexParamItem[]>;
41
+ /** Incoterms disponibles. */
42
+ getIncoterms(auth: WsfeAuth): Promise<WsfexParamItem[]>;
43
+ /** Unidades de medida. */
44
+ getUMed(auth: WsfeAuth): Promise<WsfexParamItem[]>;
45
+ /** Tipos de exportación. */
46
+ getTiposExpo(auth: WsfeAuth): Promise<WsfexParamItem[]>;
47
+ /** CUITs de países. */
48
+ getCuitsPais(auth: WsfeAuth): Promise<WsfexParamItem[]>;
49
+ }
50
+ //# sourceMappingURL=wsfex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsfex.d.ts","sourceRoot":"","sources":["../src/wsfex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EAGf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,SAAS,EACV,MAAM,YAAY,CAAC;AAiBpB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAkC;gBAGhD,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE;QACJ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;KACjC;IAaR,OAAO,CAAC,IAAI;IAcZ;;OAEG;IACG,SAAS,CACb,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,eAAe,CAAC;IA2B3B;;OAEG;IACG,UAAU,CACd,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAUlB;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAQhD;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC;IAS7B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;YAQ7B,YAAY;IAe1B,2CAA2C;IACrC,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAS7D,2BAA2B;IACrB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAS3D,sBAAsB;IAChB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAS1D,2BAA2B;IACrB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAS3D,6BAA6B;IACvB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAS7D,0BAA0B;IACpB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IASxD,4BAA4B;IACtB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAS7D,uBAAuB;IACjB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAQ9D"}
package/dist/wsfex.js ADDED
@@ -0,0 +1,141 @@
1
+ import { ENDPOINTS, WSFEX_NAMESPACE } from "./constants.js";
2
+ import { afipSoapCall } from "./soap-client.js";
3
+ import { ArcaWSFEError } from "./errors.js";
4
+ function toArray(val) {
5
+ if (val === undefined || val === null)
6
+ return [];
7
+ return Array.isArray(val) ? val : [val];
8
+ }
9
+ function checkFexErr(result) {
10
+ if (result.FEXErr && result.FEXErr.ErrCode !== 0) {
11
+ throw new ArcaWSFEError([
12
+ { code: result.FEXErr.ErrCode, msg: result.FEXErr.ErrMsg },
13
+ ]);
14
+ }
15
+ }
16
+ export class WsfexClient {
17
+ endpoint;
18
+ soapOpts;
19
+ constructor(production, opts = {}) {
20
+ this.endpoint = production
21
+ ? ENDPOINTS.wsfex.production
22
+ : ENDPOINTS.wsfex.testing;
23
+ this.soapOpts = {
24
+ timeoutMs: opts.timeoutMs,
25
+ retries: opts.retries,
26
+ retryDelayMs: opts.retryDelayMs,
27
+ onEvent: opts.onEvent,
28
+ };
29
+ }
30
+ call(method, params) {
31
+ return afipSoapCall(this.endpoint, WSFEX_NAMESPACE, method, params, this.soapOpts);
32
+ }
33
+ // ============================================================
34
+ // Facturación de exportación
35
+ // ============================================================
36
+ /**
37
+ * Autoriza un comprobante de exportación.
38
+ */
39
+ async authorize(auth, invoice) {
40
+ const cmp = { ...invoice };
41
+ // Wrappear Items
42
+ if (invoice.Items && invoice.Items.length > 0) {
43
+ cmp.Items = { Item: invoice.Items };
44
+ }
45
+ // Wrappear Permisos
46
+ if (invoice.Permisos && invoice.Permisos.length > 0) {
47
+ cmp.Permisos = { Permiso: invoice.Permisos };
48
+ }
49
+ // Wrappear Cmps_asoc
50
+ if (invoice.Cmps_asoc && invoice.Cmps_asoc.length > 0) {
51
+ cmp.Cmps_asoc = { Cmp_asoc: invoice.Cmps_asoc };
52
+ }
53
+ const result = (await this.call("FEXAuthorize", {
54
+ Auth: auth,
55
+ Cmp: cmp,
56
+ }));
57
+ checkFexErr(result);
58
+ return result;
59
+ }
60
+ /**
61
+ * Obtiene el último comprobante autorizado.
62
+ */
63
+ async getLastCmp(auth, ptoVta, cbteTipo) {
64
+ const result = (await this.call("FEXGetLast_CMP", {
65
+ Auth: auth,
66
+ Cbte_Tipo: cbteTipo,
67
+ Punto_vta: ptoVta,
68
+ }));
69
+ checkFexErr(result);
70
+ return result.FEXResult_LastCMP?.Cbte_nro ?? 0;
71
+ }
72
+ /**
73
+ * Obtiene el último ID de request.
74
+ */
75
+ async getLastId(auth) {
76
+ const result = (await this.call("FEXGetLast_ID", {
77
+ Auth: auth,
78
+ }));
79
+ checkFexErr(result);
80
+ return result.FEXResultGet?.Id ?? 0;
81
+ }
82
+ /**
83
+ * Consulta un comprobante de exportación.
84
+ */
85
+ async getCmp(auth, cbteTipo, ptoVta, cbteNro) {
86
+ const result = (await this.call("FEXGetCMP", {
87
+ Auth: auth,
88
+ Cmp: { Cbte_tipo: cbteTipo, Punto_vta: ptoVta, Cbte_nro: cbteNro },
89
+ }));
90
+ checkFexErr(result);
91
+ return result;
92
+ }
93
+ /**
94
+ * Verifica el estado de los servidores de WSFEX.
95
+ */
96
+ async serverStatus() {
97
+ return (await this.call("FEXDummy", {}));
98
+ }
99
+ // ============================================================
100
+ // Parámetros
101
+ // ============================================================
102
+ async getParamList(auth, method, resultKey, itemKey) {
103
+ const result = (await this.call(method, { Auth: auth }));
104
+ checkFexErr(result);
105
+ const items = result[resultKey]?.[itemKey];
106
+ return toArray(items);
107
+ }
108
+ /** Tipos de comprobante de exportación. */
109
+ async getTiposCbte(auth) {
110
+ return this.getParamList(auth, "FEXGetPARAM_Cbte_Tipo", "FEXResultGet", "ClsFEXResponse_Cbte_Tipo");
111
+ }
112
+ /** Monedas disponibles. */
113
+ async getMonedas(auth) {
114
+ return this.getParamList(auth, "FEXGetPARAM_MON", "FEXResultGet", "ClsFEXResponse_Mon");
115
+ }
116
+ /** Países destino. */
117
+ async getPaises(auth) {
118
+ return this.getParamList(auth, "FEXGetPARAM_DST_Pais", "FEXResultGet", "ClsFEXResponse_DST_pais");
119
+ }
120
+ /** Idiomas disponibles. */
121
+ async getIdiomas(auth) {
122
+ return this.getParamList(auth, "FEXGetPARAM_Idiomas", "FEXResultGet", "ClsFEXResponse_Idi");
123
+ }
124
+ /** Incoterms disponibles. */
125
+ async getIncoterms(auth) {
126
+ return this.getParamList(auth, "FEXGetPARAM_Incoterms", "FEXResultGet", "ClsFEXResponse_Inc");
127
+ }
128
+ /** Unidades de medida. */
129
+ async getUMed(auth) {
130
+ return this.getParamList(auth, "FEXGetPARAM_UMed", "FEXResultGet", "ClsFEXResponse_UMed");
131
+ }
132
+ /** Tipos de exportación. */
133
+ async getTiposExpo(auth) {
134
+ return this.getParamList(auth, "FEXGetPARAM_Tipo_Expo", "FEXResultGet", "ClsFEXResponse_Tex");
135
+ }
136
+ /** CUITs de países. */
137
+ async getCuitsPais(auth) {
138
+ return this.getParamList(auth, "FEXGetPARAM_DST_CUIT", "FEXResultGet", "ClsFEXResponse_DST_cuit");
139
+ }
140
+ }
141
+ //# sourceMappingURL=wsfex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsfex.js","sourceRoot":"","sources":["../src/wsfex.ts"],"names":[],"mappings":"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"}
package/llm.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # @ramiidv/arca-sdk
2
2
 
3
3
  > TypeScript SDK for ARCA (formerly AFIP) electronic invoicing in Argentina.
4
- > Wraps WSFEv1 and WSAA SOAP web services.
4
+ > Wraps WSFEv1, WSFEX, and WSAA SOAP web services.
5
5
 
6
6
  ## What this SDK does
7
7
 
@@ -10,6 +10,10 @@
10
10
  - Handles all comprobante types: A, B, C, E, M, and MiPyME FCE
11
11
  - Auto-calculates IVA, totals, and comprobante numbers
12
12
  - Queries ARCA parameters (document types, IVA rates, currencies, exchange rates, etc.)
13
+ - Export invoices via WSFEX (Factura de Exportación)
14
+ - Retry with exponential backoff on transient errors
15
+ - Event system for logging/debugging (auth, requests, retries)
16
+ - QR code URL generation for printed invoices
13
17
 
14
18
  ## Install
15
19
 
@@ -65,6 +69,9 @@ new Arca({
65
69
  production?: boolean, // Default: false (uses homologación/testing endpoints)
66
70
  tokenTTLMinutes?: number, // Default: 720 (12 hours)
67
71
  requestTimeoutMs?: number, // Default: 30000 (30 seconds). Uses AbortController.
72
+ retries?: number, // Default: 1. Retries on transient errors (timeout, 5xx).
73
+ retryDelayMs?: number, // Default: 1000. Exponential backoff: delay * 2^attempt.
74
+ onEvent?: (event: ArcaEvent) => void, // Callback for all SDK events
68
75
  })
69
76
  ```
70
77
 
@@ -339,6 +346,112 @@ await arca.facturar({
339
346
  });
340
347
  ```
341
348
 
349
+ ## Events / Logging
350
+
351
+ Two ways to subscribe:
352
+
353
+ ```typescript
354
+ // 1. Config callback (receives all events)
355
+ const arca = new Arca({
356
+ ...,
357
+ onEvent: (e) => console.log(e.type, e),
358
+ });
359
+
360
+ // 2. Typed .on()/.off() (filter by event type)
361
+ arca.on("request:end", (e) => console.log(`${e.method} took ${e.durationMs}ms`));
362
+ arca.on("auth:login", (e) => console.log(`Login ${e.service} in ${e.durationMs}ms`));
363
+ arca.on("request:retry", (e) => console.warn(`Retry #${e.attempt}: ${e.error}`));
364
+ ```
365
+
366
+ Event types (discriminated union `ArcaEvent`):
367
+ - `auth:login` — new token obtained. Fields: `service`, `durationMs`
368
+ - `auth:cache-hit` — cached token reused. Fields: `service`
369
+ - `request:start` — SOAP call starting. Fields: `method`, `endpoint`
370
+ - `request:end` — SOAP call completed. Fields: `method`, `durationMs`
371
+ - `request:retry` — retrying after error. Fields: `method`, `attempt`, `delayMs`, `error`
372
+ - `request:error` — request failed. Fields: `method`, `error`
373
+
374
+ ## Retry
375
+
376
+ Enabled by default (`retries: 1`). Only retries on transient errors (timeout, 5xx, network). Does NOT retry on 4xx or business errors. Exponential backoff: `retryDelayMs * 2^attempt`.
377
+
378
+ ## QR Code URL
379
+
380
+ ARCA requires a QR code on printed invoices. `generateQRUrl` produces the official URL:
381
+
382
+ ```typescript
383
+ const url = Arca.generateQRUrl({
384
+ fecha: "2026-03-28", // YYYY-MM-DD
385
+ cuit: 20123456789,
386
+ ptoVta: 1,
387
+ tipoCmp: CbteTipo.FACTURA_B,
388
+ nroCmp: 150,
389
+ importe: 121,
390
+ moneda: "PES",
391
+ ctz: 1,
392
+ tipoDocRec: DocTipo.CONSUMIDOR_FINAL,
393
+ nroDocRec: 0,
394
+ codAut: 73429843294823, // CAE number
395
+ });
396
+ // → "https://www.afip.gob.ar/fe/qr/?p=<base64>"
397
+ ```
398
+
399
+ ## WSFEX (Export invoices)
400
+
401
+ For export invoices (`Factura E`, `Nota de Crédito E`, etc.). Uses a separate ARCA web service (WSFEX) with different endpoints and schema.
402
+
403
+ ```typescript
404
+ // Get next ID and number
405
+ const nextId = (await arca.ultimoIdExpo()) + 1;
406
+ const nextNum = await arca.siguienteComprobanteExpo(1, CbteTipo.FACTURA_E);
407
+
408
+ // Authorize export invoice
409
+ const result = await arca.crearFacturaExportacion({
410
+ Id: nextId,
411
+ Cbte_Tipo: CbteTipo.FACTURA_E,
412
+ Fecha_cbte: "20260328",
413
+ Punto_vta: 1,
414
+ Cbte_nro: nextNum,
415
+ Tipo_expo: 1, // 1=Bienes, 2=Servicios, 4=Otros
416
+ Permiso_existente: "N",
417
+ Dst_cmp: 203, // Country code (203 = USA)
418
+ Cliente: "ACME Corp",
419
+ Cuit_pais_cliente: 50000000016, // CUIT del país
420
+ Domicilio_cliente: "123 Main St, NY",
421
+ Id_impositivo: "12-3456789",
422
+ Moneda_Id: "DOL",
423
+ Moneda_ctz: 1200,
424
+ Idioma_cbte: 2, // 1=ES, 2=EN, 3=PT
425
+ Forma_pago: "Wire Transfer",
426
+ Incoterms: "FOB",
427
+ Items: [{
428
+ Pro_codigo: "SKU001",
429
+ Pro_ds: "Widget",
430
+ Pro_qty: 100,
431
+ Pro_umed: 7, // Unit of measure code
432
+ Pro_precio_uni: 10,
433
+ Pro_bonificacion: 0,
434
+ Pro_total_item: 1000,
435
+ }],
436
+ });
437
+
438
+ if (result.FEXResultAuth?.Resultado === "A") {
439
+ console.log("CAE:", result.FEXResultAuth.Cae);
440
+ }
441
+
442
+ // Query methods
443
+ await arca.consultarComprobanteExpo(CbteTipo.FACTURA_E, 1, nextNum);
444
+ await arca.serverStatusExpo();
445
+ await arca.getPaisesExpo();
446
+ await arca.getIncotermsExpo();
447
+ await arca.getUMedExpo();
448
+ await arca.getTiposExpo();
449
+ await arca.getMonedasExpo();
450
+ await arca.getIdiomasExpo();
451
+ await arca.getCuitsPaisExpo();
452
+ await arca.getTiposCbteExpo();
453
+ ```
454
+
342
455
  ## Key domain concepts
343
456
 
344
457
  - **CUIT**: Argentine tax ID (11 digits, no hyphens). Used for business identification.
@@ -350,3 +463,4 @@ await arca.facturar({
350
463
  - **Homologación**: ARCA's testing/sandbox environment. Use `production: false`.
351
464
  - **FCE MiPyME**: Factura de Crédito Electrónica for small/medium businesses. Requires CBU in opcionales.
352
465
  - **Tipo C**: Invoices issued by monotributistas (simplified tax regime). No IVA discrimination.
466
+ - **WSFEX**: ARCA's web service for export invoices. Separate from WSFEv1, different schema.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ramiidv/arca-sdk",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "SDK para interactuar con los Web Services de ARCA (ex AFIP) - Facturación Electrónica Argentina",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",