@ramiidv/arca-mtxca 0.1.0 → 0.3.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 +171 -318
- package/dist/arca-mtxca.d.ts +83 -75
- package/dist/arca-mtxca.d.ts.map +1 -1
- package/dist/arca-mtxca.js +197 -141
- package/dist/arca-mtxca.js.map +1 -1
- package/dist/constants.d.ts +37 -21
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +49 -22
- package/dist/constants.js.map +1 -1
- package/dist/format.d.ts +18 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +65 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/mtxca-client.d.ts +90 -32
- package/dist/mtxca-client.d.ts.map +1 -1
- package/dist/mtxca-client.js +416 -324
- package/dist/mtxca-client.js.map +1 -1
- package/dist/parse.d.ts +31 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +82 -0
- package/dist/parse.js.map +1 -0
- package/dist/serialize.d.ts +43 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +323 -0
- package/dist/serialize.js.map +1 -0
- package/dist/types.d.ts +314 -174
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +16 -7
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +292 -92
- package/dist/validation.js.map +1 -1
- package/llms.txt +81 -159
- package/package.json +5 -4
package/dist/arca-mtxca.d.ts
CHANGED
|
@@ -1,99 +1,107 @@
|
|
|
1
1
|
import { WsaaClient } from '@ramiidv/arca-common';
|
|
2
|
-
import type { ServerStatus } from '@ramiidv/arca-common';
|
|
2
|
+
import type { CallOptions, ServerStatus } from '@ramiidv/arca-common';
|
|
3
3
|
import { MtxcaClient } from './mtxca-client.js';
|
|
4
|
-
import type { ArcaMtxcaConfig, AutorizarRequest,
|
|
4
|
+
import type { ActividadVigente, ArcaMtxcaConfig, AutorizarOptions, AutorizarRequest, CodigoDescripcion, CodigoDescripcionString, CotizacionResult, FechaInput, MtxcaAutorizarResult, MtxcaCAEA, MtxcaCAEANoUtilizadoResult, MtxcaComprobanteCAEA, MtxcaConsultaComprobanteResult, MtxcaInformarCAEAResult, PuntoVenta } from './types.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Provides high-level methods that handle WSAA authentication automatically.
|
|
9
|
-
* WSMTXCA is used for electronic invoicing WITH item-level detail (barcodes,
|
|
10
|
-
* quantities, unit prices, product descriptions per line).
|
|
6
|
+
* Cliente de alto nivel de WSMTXCA (factura electrónica con detalle de
|
|
7
|
+
* ítems): autenticación WSAA automática, numeración y validación local.
|
|
11
8
|
*
|
|
12
9
|
* @example
|
|
13
10
|
* ```ts
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* cert: readFileSync('cert.pem', 'utf-8'),
|
|
19
|
-
* key: readFileSync('key.pem', 'utf-8'),
|
|
20
|
-
* cuit: 20123456789,
|
|
21
|
-
* production: false,
|
|
22
|
-
* });
|
|
23
|
-
*
|
|
24
|
-
* const result = await mtxca.autorizar({
|
|
25
|
-
* ptoVta: 1,
|
|
26
|
-
* cbteTipo: CbteTipo.FACTURA_B,
|
|
27
|
-
* invoice: {
|
|
28
|
-
* concepto: 1,
|
|
29
|
-
* docTipo: 99,
|
|
30
|
-
* docNro: 0,
|
|
31
|
-
* cbteFch: '2026-03-31',
|
|
32
|
-
* importeTotal: 121,
|
|
33
|
-
* items: [{
|
|
34
|
-
* descripcion: 'Producto de ejemplo',
|
|
35
|
-
* cantidad: 1,
|
|
36
|
-
* unidadMedida: 7,
|
|
37
|
-
* precioUnitario: 100,
|
|
38
|
-
* importeItem: 100,
|
|
39
|
-
* codigoCondicionIVA: CodigoCondicionIVA.IVA_21,
|
|
40
|
-
* importeIVA: 21,
|
|
41
|
-
* }],
|
|
42
|
-
* },
|
|
43
|
-
* });
|
|
11
|
+
* const mtxca = new ArcaMtxca({ cert, key, cuit: '20123456786' });
|
|
12
|
+
* const res = await mtxca.autorizar({ ...comprobante });
|
|
13
|
+
* if (res.resultado === 'R') console.error(res.errores);
|
|
14
|
+
* else console.log(res.comprobante.cae);
|
|
44
15
|
* ```
|
|
45
16
|
*/
|
|
46
17
|
export declare class ArcaMtxca {
|
|
47
|
-
/**
|
|
18
|
+
/** Cliente WSAA (acceso directo). */
|
|
48
19
|
readonly wsaa: WsaaClient;
|
|
49
|
-
/**
|
|
20
|
+
/** Cliente SOAP de bajo nivel (acceso directo). */
|
|
50
21
|
readonly client: MtxcaClient;
|
|
51
|
-
|
|
52
|
-
|
|
22
|
+
/** CUIT representada, normalizada a 11 dígitos. */
|
|
23
|
+
readonly cuit: string;
|
|
53
24
|
constructor(config: ArcaMtxcaConfig);
|
|
54
|
-
private
|
|
25
|
+
private auth;
|
|
26
|
+
/**
|
|
27
|
+
* Autoriza un comprobante con detalle de ítems (`autorizarComprobante`).
|
|
28
|
+
*
|
|
29
|
+
* - Valida contra el XSD, redondea importes y (salvo `validarImportes: false`)
|
|
30
|
+
* valida la coherencia de importes según el manual.
|
|
31
|
+
* - Sin `numeroComprobante`, usa el último autorizado + 1. Las solicitudes
|
|
32
|
+
* para un mismo punto de venta y tipo deben ser secuenciales (error 135).
|
|
33
|
+
* - Un rechazo devuelve `resultado: 'R'` con `errores`; `O` es aprobado con
|
|
34
|
+
* observaciones.
|
|
35
|
+
* - Si lanza `ArcaSoapError` con `uncertain: true`, el comprobante pudo
|
|
36
|
+
* haberse autorizado: NO reintentes a ciegas; usá `ultimoComprobante()` y
|
|
37
|
+
* `consultarComprobante()` para saber si quedó autorizado.
|
|
38
|
+
*/
|
|
39
|
+
autorizar(request: AutorizarRequest, opts?: AutorizarOptions): Promise<MtxcaAutorizarResult>;
|
|
55
40
|
/**
|
|
56
|
-
* Autoriza un
|
|
57
|
-
*
|
|
41
|
+
* Autoriza un ajuste de IVA (`autorizarAjusteIVA`, ND/NC 2, 3, 7, 8, 52, 53).
|
|
42
|
+
* Tiene reglas propias (ej. importeSubtotal 0, sin gravado/no gravado/exento),
|
|
43
|
+
* así que solo se valida contra el XSD. Misma numeración y manejo de errores
|
|
44
|
+
* que `autorizar()`.
|
|
58
45
|
*/
|
|
59
|
-
|
|
46
|
+
autorizarAjusteIVA(request: AutorizarRequest, opts?: CallOptions): Promise<MtxcaAutorizarResult>;
|
|
47
|
+
private autorizarCAE;
|
|
60
48
|
/**
|
|
61
|
-
*
|
|
49
|
+
* Último número autorizado o informado para un punto de venta y tipo. Si no
|
|
50
|
+
* hay ninguno (error 1502 de ARCA), devuelve 0. Cualquier otro error lanza
|
|
51
|
+
* `ArcaServiceError`.
|
|
62
52
|
*/
|
|
63
|
-
ultimoComprobante(ptoVta: number, cbteTipo: number): Promise<number>;
|
|
53
|
+
ultimoComprobante(ptoVta: number, cbteTipo: number, opts?: CallOptions): Promise<number>;
|
|
54
|
+
/** Siguiente número de comprobante (último + 1). */
|
|
55
|
+
siguienteComprobante(ptoVta: number, cbteTipo: number, opts?: CallOptions): Promise<number>;
|
|
56
|
+
/** Consulta un comprobante autorizado (CAE) o informado (CAEA). Lanza `ArcaServiceError` si no existe. */
|
|
57
|
+
consultarComprobante(cbteTipo: number, ptoVta: number, cbteNro: number, opts?: CallOptions): Promise<MtxcaConsultaComprobanteResult>;
|
|
64
58
|
/**
|
|
65
|
-
*
|
|
59
|
+
* Solicita un CAEA para `periodo` (AAAAMM) y `orden` (1: días 1-15, 2: 16
|
|
60
|
+
* a fin de mes). Lanza `ArcaServiceError` si ARCA lo rechaza. Si lanza
|
|
61
|
+
* `ArcaSoapError` con `uncertain`, consultá `consultarCAEAEntreFechas()`.
|
|
66
62
|
*/
|
|
67
|
-
|
|
63
|
+
solicitarCAEA(periodo: number, orden: number, opts?: CallOptions): Promise<MtxcaCAEA>;
|
|
64
|
+
/** Consulta un CAEA otorgado. */
|
|
65
|
+
consultarCAEA(caea: string, opts?: CallOptions): Promise<MtxcaCAEA>;
|
|
66
|
+
/** CAEAs otorgados entre dos fechas. */
|
|
67
|
+
consultarCAEAEntreFechas(fechaDesde: FechaInput, fechaHasta: FechaInput, opts?: CallOptions): Promise<MtxcaCAEA[]>;
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
69
|
+
* Informa un comprobante emitido con CAEA (`informarComprobanteCAEA`). Valida
|
|
70
|
+
* el XSD y las reglas excluyentes de ítems. Un rechazo devuelve
|
|
71
|
+
* `resultado: 'R'`. Ante `uncertain`, verificá con `consultarComprobante()`.
|
|
70
72
|
*/
|
|
71
|
-
|
|
73
|
+
informarComprobanteCAEA(comprobante: MtxcaComprobanteCAEA, opts?: CallOptions): Promise<MtxcaInformarCAEAResult>;
|
|
74
|
+
/** Informa un ajuste de IVA emitido con CAEA (`informarAjusteIVACAEA`). Solo valida el XSD. */
|
|
75
|
+
informarAjusteIVACAEA(comprobante: MtxcaComprobanteCAEA, opts?: CallOptions): Promise<MtxcaInformarCAEAResult>;
|
|
76
|
+
/** Informa que un CAEA no se utilizó. Un rechazo devuelve `resultado: 'R'`. */
|
|
77
|
+
informarCAEANoUtilizado(caea: string, opts?: CallOptions): Promise<MtxcaCAEANoUtilizadoResult>;
|
|
78
|
+
/** Informa que un CAEA no se utilizó en un punto de venta. Un rechazo devuelve `resultado: 'R'`. */
|
|
79
|
+
informarCAEANoUtilizadoPtoVta(caea: string, ptoVta: number, opts?: CallOptions): Promise<MtxcaCAEANoUtilizadoResult>;
|
|
80
|
+
/** Puntos de venta que todavía no informaron movimientos para un CAEA. */
|
|
81
|
+
consultarPtosVtaCAEANoInformados(caea: string, opts?: CallOptions): Promise<PuntoVenta[]>;
|
|
82
|
+
/** Estado del servicio (`dummy`). No requiere autenticación. */
|
|
83
|
+
status(opts?: CallOptions): Promise<ServerStatus>;
|
|
84
|
+
getTiposComprobante(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
85
|
+
getTiposDocumento(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
86
|
+
getAlicuotasIVA(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
87
|
+
/** Condiciones de IVA de los ítems. */
|
|
88
|
+
getCondicionesIVA(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
89
|
+
/** Condiciones de IVA del receptor admitidas para un tipo de comprobante (RG 5616). */
|
|
90
|
+
getCondicionesIVAReceptor(cbteTipo: number, opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
91
|
+
getMonedas(opts?: CallOptions): Promise<CodigoDescripcionString[]>;
|
|
72
92
|
/**
|
|
73
|
-
*
|
|
93
|
+
* Cotización de una moneda para una fecha (default: hoy en Argentina).
|
|
94
|
+
* `cotizacion` es `null` si ARCA no tiene cotización.
|
|
74
95
|
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
getMonedas(): Promise<MonedaItem[]>;
|
|
86
|
-
/** Unidades de medida disponibles. */
|
|
87
|
-
getUnidadesMedida(): Promise<UnidadMedidaItem[]>;
|
|
88
|
-
/** Puntos de venta habilitados. */
|
|
89
|
-
getPuntosVenta(): Promise<PtoVentaItem[]>;
|
|
90
|
-
/** Puntos de venta habilitados para CAE. */
|
|
91
|
-
getPuntosVentaCAE(): Promise<PtoVentaItem[]>;
|
|
92
|
-
/** Puntos de venta habilitados para CAEA. */
|
|
93
|
-
getPuntosVentaCAEA(): Promise<PtoVentaItem[]>;
|
|
94
|
-
/** Cotizacion de una moneda. */
|
|
95
|
-
getCotizacionMoneda(monedaId: string): Promise<CotizacionResult>;
|
|
96
|
-
/** Invalida el ticket de acceso cacheado. */
|
|
97
|
-
clearAuthCache(): void;
|
|
96
|
+
getCotizacionMoneda(codigoMoneda: string, fecha?: FechaInput, opts?: CallOptions): Promise<CotizacionResult>;
|
|
97
|
+
getUnidadesMedida(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
98
|
+
getTiposTributo(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
99
|
+
getTiposDatosAdicionales(opts?: CallOptions): Promise<CodigoDescripcion[]>;
|
|
100
|
+
getActividadesVigentes(opts?: CallOptions): Promise<ActividadVigente[]>;
|
|
101
|
+
getPuntosVenta(opts?: CallOptions): Promise<PuntoVenta[]>;
|
|
102
|
+
getPuntosVentaCAE(opts?: CallOptions): Promise<PuntoVenta[]>;
|
|
103
|
+
getPuntosVentaCAEA(opts?: CallOptions): Promise<PuntoVenta[]>;
|
|
104
|
+
/** Descarta el ticket de acceso de WSMTXCA (memoria y `ticketStorage`). */
|
|
105
|
+
clearAuthCache(): Promise<void>;
|
|
98
106
|
}
|
|
99
107
|
//# sourceMappingURL=arca-mtxca.d.ts.map
|
package/dist/arca-mtxca.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arca-mtxca.d.ts","sourceRoot":"","sources":["../src/arca-mtxca.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"arca-mtxca.d.ts","sourceRoot":"","sources":["../src/arca-mtxca.ts"],"names":[],"mappings":"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"}
|
package/dist/arca-mtxca.js
CHANGED
|
@@ -1,191 +1,247 @@
|
|
|
1
|
-
import { WsaaClient } from '@ramiidv/arca-common';
|
|
2
|
-
import { MTXCA_SERVICE_ID } from './constants.js';
|
|
1
|
+
import { ArcaServiceError, formatDate, validateCuit, WsaaClient } from '@ramiidv/arca-common';
|
|
2
|
+
import { MTXCA_ENDPOINTS, MTXCA_SERVICE_ID } from './constants.js';
|
|
3
3
|
import { MtxcaClient } from './mtxca-client.js';
|
|
4
|
-
import {
|
|
4
|
+
import { buildComprobante } from './serialize.js';
|
|
5
|
+
import { validateComprobanteCAE, validateComprobanteCAEA } from './validation.js';
|
|
6
|
+
/** Error 1502 de consultarUltimoComprobanteAutorizado: no hay comprobantes para ese punto de venta y tipo. */
|
|
7
|
+
const SIN_COMPROBANTES = 1502;
|
|
5
8
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Provides high-level methods that handle WSAA authentication automatically.
|
|
9
|
-
* WSMTXCA is used for electronic invoicing WITH item-level detail (barcodes,
|
|
10
|
-
* quantities, unit prices, product descriptions per line).
|
|
9
|
+
* Cliente de alto nivel de WSMTXCA (factura electrónica con detalle de
|
|
10
|
+
* ítems): autenticación WSAA automática, numeración y validación local.
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```ts
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* cert: readFileSync('cert.pem', 'utf-8'),
|
|
19
|
-
* key: readFileSync('key.pem', 'utf-8'),
|
|
20
|
-
* cuit: 20123456789,
|
|
21
|
-
* production: false,
|
|
22
|
-
* });
|
|
23
|
-
*
|
|
24
|
-
* const result = await mtxca.autorizar({
|
|
25
|
-
* ptoVta: 1,
|
|
26
|
-
* cbteTipo: CbteTipo.FACTURA_B,
|
|
27
|
-
* invoice: {
|
|
28
|
-
* concepto: 1,
|
|
29
|
-
* docTipo: 99,
|
|
30
|
-
* docNro: 0,
|
|
31
|
-
* cbteFch: '2026-03-31',
|
|
32
|
-
* importeTotal: 121,
|
|
33
|
-
* items: [{
|
|
34
|
-
* descripcion: 'Producto de ejemplo',
|
|
35
|
-
* cantidad: 1,
|
|
36
|
-
* unidadMedida: 7,
|
|
37
|
-
* precioUnitario: 100,
|
|
38
|
-
* importeItem: 100,
|
|
39
|
-
* codigoCondicionIVA: CodigoCondicionIVA.IVA_21,
|
|
40
|
-
* importeIVA: 21,
|
|
41
|
-
* }],
|
|
42
|
-
* },
|
|
43
|
-
* });
|
|
14
|
+
* const mtxca = new ArcaMtxca({ cert, key, cuit: '20123456786' });
|
|
15
|
+
* const res = await mtxca.autorizar({ ...comprobante });
|
|
16
|
+
* if (res.resultado === 'R') console.error(res.errores);
|
|
17
|
+
* else console.log(res.comprobante.cae);
|
|
44
18
|
* ```
|
|
45
19
|
*/
|
|
46
20
|
export class ArcaMtxca {
|
|
47
|
-
/**
|
|
21
|
+
/** Cliente WSAA (acceso directo). */
|
|
48
22
|
wsaa;
|
|
49
|
-
/**
|
|
23
|
+
/** Cliente SOAP de bajo nivel (acceso directo). */
|
|
50
24
|
client;
|
|
25
|
+
/** CUIT representada, normalizada a 11 dígitos. */
|
|
51
26
|
cuit;
|
|
52
|
-
onEvent;
|
|
53
27
|
constructor(config) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.onEvent = config.onEvent;
|
|
57
|
-
const soapOptions = {
|
|
58
|
-
timeout: config.timeout,
|
|
59
|
-
retries: config.retries,
|
|
60
|
-
retryDelayMs: config.retryDelayMs,
|
|
61
|
-
};
|
|
28
|
+
this.cuit = validateCuit(config.cuit);
|
|
29
|
+
const production = config.production ?? false;
|
|
62
30
|
this.wsaa = new WsaaClient({
|
|
63
31
|
cert: config.cert,
|
|
64
32
|
key: config.key,
|
|
65
|
-
production
|
|
33
|
+
production,
|
|
34
|
+
endpoint: config.wsaaEndpoint,
|
|
35
|
+
tokenTTLMinutes: config.tokenTTLMinutes,
|
|
66
36
|
timeout: config.timeout,
|
|
67
37
|
retries: config.retries,
|
|
68
38
|
retryDelayMs: config.retryDelayMs,
|
|
69
39
|
onEvent: config.onEvent,
|
|
40
|
+
ticketStorage: config.ticketStorage,
|
|
41
|
+
clockOffsetMs: config.clockOffsetMs,
|
|
42
|
+
autoClockSkew: config.autoClockSkew,
|
|
43
|
+
loginErrorCooldownMs: config.loginErrorCooldownMs,
|
|
44
|
+
fetch: config.fetch,
|
|
45
|
+
legacyTls: config.legacyTls,
|
|
70
46
|
});
|
|
71
47
|
this.client = new MtxcaClient({
|
|
72
|
-
production:
|
|
73
|
-
|
|
48
|
+
endpoint: config.endpoint ?? (production ? MTXCA_ENDPOINTS.production : MTXCA_ENDPOINTS.testing),
|
|
49
|
+
timeout: config.timeout,
|
|
50
|
+
retries: config.retries,
|
|
51
|
+
retryDelayMs: config.retryDelayMs,
|
|
74
52
|
onEvent: config.onEvent,
|
|
53
|
+
fetch: config.fetch,
|
|
54
|
+
legacyTls: config.legacyTls,
|
|
75
55
|
});
|
|
76
56
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
async getAuth() {
|
|
81
|
-
const ticket = await this.wsaa.getAccessTicket(MTXCA_SERVICE_ID);
|
|
82
|
-
return {
|
|
83
|
-
Token: ticket.token,
|
|
84
|
-
Sign: ticket.sign,
|
|
85
|
-
Cuit: this.cuit,
|
|
86
|
-
};
|
|
57
|
+
async auth(opts) {
|
|
58
|
+
const ticket = await this.wsaa.getAccessTicket(MTXCA_SERVICE_ID, opts);
|
|
59
|
+
return { token: ticket.token, sign: ticket.sign, cuitRepresentada: this.cuit };
|
|
87
60
|
}
|
|
88
61
|
// =========================================================================
|
|
89
|
-
//
|
|
62
|
+
// CAE
|
|
90
63
|
// =========================================================================
|
|
91
64
|
/**
|
|
92
|
-
* Autoriza un comprobante con detalle de
|
|
93
|
-
*
|
|
65
|
+
* Autoriza un comprobante con detalle de ítems (`autorizarComprobante`).
|
|
66
|
+
*
|
|
67
|
+
* - Valida contra el XSD, redondea importes y (salvo `validarImportes: false`)
|
|
68
|
+
* valida la coherencia de importes según el manual.
|
|
69
|
+
* - Sin `numeroComprobante`, usa el último autorizado + 1. Las solicitudes
|
|
70
|
+
* para un mismo punto de venta y tipo deben ser secuenciales (error 135).
|
|
71
|
+
* - Un rechazo devuelve `resultado: 'R'` con `errores`; `O` es aprobado con
|
|
72
|
+
* observaciones.
|
|
73
|
+
* - Si lanza `ArcaSoapError` con `uncertain: true`, el comprobante pudo
|
|
74
|
+
* haberse autorizado: NO reintentes a ciegas; usá `ultimoComprobante()` y
|
|
75
|
+
* `consultarComprobante()` para saber si quedó autorizado.
|
|
94
76
|
*/
|
|
95
|
-
async autorizar(request) {
|
|
96
|
-
|
|
97
|
-
const auth = await this.getAuth();
|
|
98
|
-
return this.client.autorizarComprobante(auth, request);
|
|
77
|
+
async autorizar(request, opts) {
|
|
78
|
+
return this.autorizarCAE('autorizarComprobante', request, opts);
|
|
99
79
|
}
|
|
100
80
|
/**
|
|
101
|
-
*
|
|
81
|
+
* Autoriza un ajuste de IVA (`autorizarAjusteIVA`, ND/NC 2, 3, 7, 8, 52, 53).
|
|
82
|
+
* Tiene reglas propias (ej. importeSubtotal 0, sin gravado/no gravado/exento),
|
|
83
|
+
* así que solo se valida contra el XSD. Misma numeración y manejo de errores
|
|
84
|
+
* que `autorizar()`.
|
|
102
85
|
*/
|
|
103
|
-
async
|
|
104
|
-
|
|
105
|
-
|
|
86
|
+
async autorizarAjusteIVA(request, opts) {
|
|
87
|
+
return this.autorizarCAE('autorizarAjusteIVA', request, { ...opts, validarImportes: false });
|
|
88
|
+
}
|
|
89
|
+
async autorizarCAE(method, request, opts) {
|
|
90
|
+
// Valida antes de pedir el número: un error local no debe costar requests.
|
|
91
|
+
buildComprobante({ ...request, numeroComprobante: request?.numeroComprobante ?? 1 }, 'cae');
|
|
92
|
+
if (opts?.validarImportes !== false)
|
|
93
|
+
validateComprobanteCAE(request);
|
|
94
|
+
const numeroComprobante = request.numeroComprobante ??
|
|
95
|
+
(await this.siguienteComprobante(request.numeroPuntoVenta, request.codigoTipoComprobante, opts));
|
|
96
|
+
const auth = await this.auth(opts);
|
|
97
|
+
const comprobante = { ...request, numeroComprobante };
|
|
98
|
+
return method === 'autorizarComprobante'
|
|
99
|
+
? this.client.autorizarComprobante(auth, comprobante, opts)
|
|
100
|
+
: this.client.autorizarAjusteIVA(auth, comprobante, opts);
|
|
106
101
|
}
|
|
107
102
|
/**
|
|
108
|
-
*
|
|
103
|
+
* Último número autorizado o informado para un punto de venta y tipo. Si no
|
|
104
|
+
* hay ninguno (error 1502 de ARCA), devuelve 0. Cualquier otro error lanza
|
|
105
|
+
* `ArcaServiceError`.
|
|
109
106
|
*/
|
|
110
|
-
async
|
|
111
|
-
const
|
|
112
|
-
|
|
107
|
+
async ultimoComprobante(ptoVta, cbteTipo, opts) {
|
|
108
|
+
const auth = await this.auth(opts);
|
|
109
|
+
try {
|
|
110
|
+
return await this.client.consultarUltimoComprobanteAutorizado(auth, ptoVta, cbteTipo, opts);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
if (e instanceof ArcaServiceError && e.errors.length > 0 && e.errors.every((x) => x.code === SIN_COMPROBANTES)) {
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
throw e;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** Siguiente número de comprobante (último + 1). */
|
|
120
|
+
async siguienteComprobante(ptoVta, cbteTipo, opts) {
|
|
121
|
+
return (await this.ultimoComprobante(ptoVta, cbteTipo, opts)) + 1;
|
|
122
|
+
}
|
|
123
|
+
/** Consulta un comprobante autorizado (CAE) o informado (CAEA). Lanza `ArcaServiceError` si no existe. */
|
|
124
|
+
async consultarComprobante(cbteTipo, ptoVta, cbteNro, opts) {
|
|
125
|
+
const auth = await this.auth(opts);
|
|
126
|
+
return this.client.consultarComprobante(auth, cbteTipo, ptoVta, cbteNro, opts);
|
|
113
127
|
}
|
|
128
|
+
// =========================================================================
|
|
129
|
+
// CAEA
|
|
130
|
+
// =========================================================================
|
|
114
131
|
/**
|
|
115
|
-
*
|
|
132
|
+
* Solicita un CAEA para `periodo` (AAAAMM) y `orden` (1: días 1-15, 2: 16
|
|
133
|
+
* a fin de mes). Lanza `ArcaServiceError` si ARCA lo rechaza. Si lanza
|
|
134
|
+
* `ArcaSoapError` con `uncertain`, consultá `consultarCAEAEntreFechas()`.
|
|
116
135
|
*/
|
|
117
|
-
async
|
|
118
|
-
const auth = await this.
|
|
119
|
-
return this.client.
|
|
136
|
+
async solicitarCAEA(periodo, orden, opts) {
|
|
137
|
+
const auth = await this.auth(opts);
|
|
138
|
+
return this.client.solicitarCAEA(auth, periodo, orden, opts);
|
|
139
|
+
}
|
|
140
|
+
/** Consulta un CAEA otorgado. */
|
|
141
|
+
async consultarCAEA(caea, opts) {
|
|
142
|
+
const auth = await this.auth(opts);
|
|
143
|
+
return this.client.consultarCAEA(auth, caea, opts);
|
|
144
|
+
}
|
|
145
|
+
/** CAEAs otorgados entre dos fechas. */
|
|
146
|
+
async consultarCAEAEntreFechas(fechaDesde, fechaHasta, opts) {
|
|
147
|
+
const auth = await this.auth(opts);
|
|
148
|
+
return this.client.consultarCAEAEntreFechas(auth, fechaDesde, fechaHasta, opts);
|
|
120
149
|
}
|
|
121
|
-
// =========================================================================
|
|
122
|
-
// Estado del servicio
|
|
123
|
-
// =========================================================================
|
|
124
150
|
/**
|
|
125
|
-
*
|
|
151
|
+
* Informa un comprobante emitido con CAEA (`informarComprobanteCAEA`). Valida
|
|
152
|
+
* el XSD y las reglas excluyentes de ítems. Un rechazo devuelve
|
|
153
|
+
* `resultado: 'R'`. Ante `uncertain`, verificá con `consultarComprobante()`.
|
|
126
154
|
*/
|
|
127
|
-
async
|
|
128
|
-
|
|
155
|
+
async informarComprobanteCAEA(comprobante, opts) {
|
|
156
|
+
buildComprobante(comprobante, 'caea');
|
|
157
|
+
validateComprobanteCAEA(comprobante);
|
|
158
|
+
const auth = await this.auth(opts);
|
|
159
|
+
return this.client.informarComprobanteCAEA(auth, comprobante, opts);
|
|
160
|
+
}
|
|
161
|
+
/** Informa un ajuste de IVA emitido con CAEA (`informarAjusteIVACAEA`). Solo valida el XSD. */
|
|
162
|
+
async informarAjusteIVACAEA(comprobante, opts) {
|
|
163
|
+
const auth = await this.auth(opts);
|
|
164
|
+
return this.client.informarAjusteIVACAEA(auth, comprobante, opts);
|
|
165
|
+
}
|
|
166
|
+
/** Informa que un CAEA no se utilizó. Un rechazo devuelve `resultado: 'R'`. */
|
|
167
|
+
async informarCAEANoUtilizado(caea, opts) {
|
|
168
|
+
const auth = await this.auth(opts);
|
|
169
|
+
return this.client.informarCAEANoUtilizado(auth, caea, opts);
|
|
170
|
+
}
|
|
171
|
+
/** Informa que un CAEA no se utilizó en un punto de venta. Un rechazo devuelve `resultado: 'R'`. */
|
|
172
|
+
async informarCAEANoUtilizadoPtoVta(caea, ptoVta, opts) {
|
|
173
|
+
const auth = await this.auth(opts);
|
|
174
|
+
return this.client.informarCAEANoUtilizadoPtoVta(auth, caea, ptoVta, opts);
|
|
175
|
+
}
|
|
176
|
+
/** Puntos de venta que todavía no informaron movimientos para un CAEA. */
|
|
177
|
+
async consultarPtosVtaCAEANoInformados(caea, opts) {
|
|
178
|
+
const auth = await this.auth(opts);
|
|
179
|
+
return this.client.consultarPtosVtaCAEANoInformados(auth, caea, opts);
|
|
129
180
|
}
|
|
130
181
|
// =========================================================================
|
|
131
|
-
//
|
|
182
|
+
// Estado
|
|
132
183
|
// =========================================================================
|
|
133
|
-
/**
|
|
134
|
-
async
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return this.client.
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return this.client.consultarCondicionesIVA(auth);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
async
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
async
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return this.client.
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
async
|
|
180
|
-
|
|
181
|
-
|
|
184
|
+
/** Estado del servicio (`dummy`). No requiere autenticación. */
|
|
185
|
+
async status(opts) {
|
|
186
|
+
return this.client.dummy(opts);
|
|
187
|
+
}
|
|
188
|
+
// =========================================================================
|
|
189
|
+
// Parámetros
|
|
190
|
+
// =========================================================================
|
|
191
|
+
async getTiposComprobante(opts) {
|
|
192
|
+
return this.client.consultarTiposComprobante(await this.auth(opts), opts);
|
|
193
|
+
}
|
|
194
|
+
async getTiposDocumento(opts) {
|
|
195
|
+
return this.client.consultarTiposDocumento(await this.auth(opts), opts);
|
|
196
|
+
}
|
|
197
|
+
async getAlicuotasIVA(opts) {
|
|
198
|
+
return this.client.consultarAlicuotasIVA(await this.auth(opts), opts);
|
|
199
|
+
}
|
|
200
|
+
/** Condiciones de IVA de los ítems. */
|
|
201
|
+
async getCondicionesIVA(opts) {
|
|
202
|
+
return this.client.consultarCondicionesIVA(await this.auth(opts), opts);
|
|
203
|
+
}
|
|
204
|
+
/** Condiciones de IVA del receptor admitidas para un tipo de comprobante (RG 5616). */
|
|
205
|
+
async getCondicionesIVAReceptor(cbteTipo, opts) {
|
|
206
|
+
return this.client.consultarCondicionesIVAReceptor(await this.auth(opts), cbteTipo, opts);
|
|
207
|
+
}
|
|
208
|
+
async getMonedas(opts) {
|
|
209
|
+
return this.client.consultarMonedas(await this.auth(opts), opts);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Cotización de una moneda para una fecha (default: hoy en Argentina).
|
|
213
|
+
* `cotizacion` es `null` si ARCA no tiene cotización.
|
|
214
|
+
*/
|
|
215
|
+
async getCotizacionMoneda(codigoMoneda, fecha = formatDate(new Date()), opts) {
|
|
216
|
+
return this.client.consultarCotizacionMoneda(await this.auth(opts), codigoMoneda, fecha, opts);
|
|
217
|
+
}
|
|
218
|
+
async getUnidadesMedida(opts) {
|
|
219
|
+
return this.client.consultarUnidadesMedida(await this.auth(opts), opts);
|
|
220
|
+
}
|
|
221
|
+
async getTiposTributo(opts) {
|
|
222
|
+
return this.client.consultarTiposTributo(await this.auth(opts), opts);
|
|
223
|
+
}
|
|
224
|
+
async getTiposDatosAdicionales(opts) {
|
|
225
|
+
return this.client.consultarTiposDatosAdicionales(await this.auth(opts), opts);
|
|
226
|
+
}
|
|
227
|
+
async getActividadesVigentes(opts) {
|
|
228
|
+
return this.client.consultarActividadesVigentes(await this.auth(opts), opts);
|
|
229
|
+
}
|
|
230
|
+
async getPuntosVenta(opts) {
|
|
231
|
+
return this.client.consultarPuntosVenta(await this.auth(opts), opts);
|
|
232
|
+
}
|
|
233
|
+
async getPuntosVentaCAE(opts) {
|
|
234
|
+
return this.client.consultarPuntosVentaCAE(await this.auth(opts), opts);
|
|
235
|
+
}
|
|
236
|
+
async getPuntosVentaCAEA(opts) {
|
|
237
|
+
return this.client.consultarPuntosVentaCAEA(await this.auth(opts), opts);
|
|
182
238
|
}
|
|
183
239
|
// =========================================================================
|
|
184
|
-
// Cache
|
|
240
|
+
// Cache
|
|
185
241
|
// =========================================================================
|
|
186
|
-
/**
|
|
187
|
-
clearAuthCache() {
|
|
188
|
-
this.wsaa.clearTicket(MTXCA_SERVICE_ID);
|
|
242
|
+
/** Descarta el ticket de acceso de WSMTXCA (memoria y `ticketStorage`). */
|
|
243
|
+
async clearAuthCache() {
|
|
244
|
+
await this.wsaa.clearTicket(MTXCA_SERVICE_ID);
|
|
189
245
|
}
|
|
190
246
|
}
|
|
191
247
|
//# sourceMappingURL=arca-mtxca.js.map
|
package/dist/arca-mtxca.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arca-mtxca.js","sourceRoot":"","sources":["../src/arca-mtxca.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"arca-mtxca.js","sourceRoot":"","sources":["../src/arca-mtxca.ts"],"names":[],"mappings":"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"}
|