@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/dist/wsfe.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ENDPOINTS } from "./constants.js";
|
|
2
|
-
import {
|
|
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
|
-
|
|
18
|
-
constructor(production,
|
|
17
|
+
soapOpts;
|
|
18
|
+
constructor(production, opts = {}) {
|
|
19
19
|
this.endpoint = production
|
|
20
20
|
? ENDPOINTS.wsfe.production
|
|
21
21
|
: ENDPOINTS.wsfe.testing;
|
|
22
|
-
this.
|
|
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
|
|
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
|
|
52
|
+
const result = (await this.call("FECompUltimoAutorizado", {
|
|
54
53
|
Auth: auth,
|
|
55
54
|
PtoVta: ptoVta,
|
|
56
55
|
CbteTipo: cbteTipo,
|
|
57
|
-
}
|
|
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
|
|
61
|
+
const result = (await this.call("FECompConsultar", {
|
|
66
62
|
Auth: auth,
|
|
67
|
-
FeCompConsReq: {
|
|
68
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"wsfe.js","sourceRoot":"","sources":["../src/wsfe.ts"],"names":[],"mappings":"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"}
|
package/dist/wsfex.d.ts
ADDED
|
@@ -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