@ramiidv/arca-sdk 0.1.0 → 0.2.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 +251 -136
- package/dist/arca.d.ts +88 -2
- package/dist/arca.d.ts.map +1 -1
- package/dist/arca.js +138 -5
- package/dist/arca.js.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +36 -0
- package/dist/constants.js.map +1 -1
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +44 -0
- package/dist/errors.js.map +1 -0
- package/dist/facturacion.d.ts +39 -0
- package/dist/facturacion.d.ts.map +1 -0
- package/dist/facturacion.js +189 -0
- package/dist/facturacion.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/soap-client.d.ts +2 -2
- package/dist/soap-client.d.ts.map +1 -1
- package/dist/soap-client.js +29 -13
- package/dist/soap-client.js.map +1 -1
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wsaa.d.ts +5 -0
- package/dist/wsaa.d.ts.map +1 -1
- package/dist/wsaa.js +28 -7
- package/dist/wsaa.js.map +1 -1
- package/dist/wsfe.d.ts +6 -1
- package/dist/wsfe.d.ts.map +1 -1
- package/dist/wsfe.js +28 -16
- package/dist/wsfe.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Soporta **todos los tipos de comprobante** de WSFEv1: Facturas, Notas de Débito
|
|
|
7
7
|
## Instalación
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install arca-sdk
|
|
10
|
+
npm install @ramiidv/arca-sdk
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## Requisitos
|
|
@@ -21,7 +21,7 @@ npm install arca-sdk
|
|
|
21
21
|
|
|
22
22
|
```typescript
|
|
23
23
|
import fs from "fs";
|
|
24
|
-
import { Arca, CbteTipo,
|
|
24
|
+
import { Arca, CbteTipo, IvaTipo } from "@ramiidv/arca-sdk";
|
|
25
25
|
|
|
26
26
|
const arca = new Arca({
|
|
27
27
|
cuit: 20123456789,
|
|
@@ -30,158 +30,219 @@ const arca = new Arca({
|
|
|
30
30
|
production: false, // true para producción
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
// Crear factura B para consumidor final
|
|
34
|
-
const result = await arca.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
ImpNeto: 100,
|
|
42
|
-
ImpOpEx: 0,
|
|
43
|
-
ImpTrib: 0,
|
|
44
|
-
ImpIVA: 21,
|
|
45
|
-
MonId: Moneda.PESOS,
|
|
46
|
-
MonCotiz: 1,
|
|
47
|
-
Iva: [{ Id: IvaTipo.IVA_21, BaseImp: 100, Importe: 21 }],
|
|
33
|
+
// Crear factura B para consumidor final
|
|
34
|
+
const result = await arca.facturar({
|
|
35
|
+
ptoVta: 1,
|
|
36
|
+
cbteTipo: CbteTipo.FACTURA_B,
|
|
37
|
+
items: [
|
|
38
|
+
{ neto: 1000, iva: IvaTipo.IVA_21 },
|
|
39
|
+
{ neto: 500, iva: IvaTipo.IVA_10_5 },
|
|
40
|
+
],
|
|
48
41
|
});
|
|
49
42
|
|
|
50
|
-
|
|
51
|
-
console.log(
|
|
43
|
+
if (result.aprobada) {
|
|
44
|
+
console.log(`CAE: ${result.cae}`);
|
|
45
|
+
console.log(`Vencimiento: ${result.caeVencimiento}`);
|
|
46
|
+
console.log(`Comprobante #${result.cbteNro}`);
|
|
47
|
+
console.log(`Total: $${result.importes.total}`); // 1762.5
|
|
48
|
+
}
|
|
52
49
|
```
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
El SDK calcula automáticamente: IVA, totales (neto, IVA, exento, no gravado, tributos), número de comprobante, fecha (timezone Argentina), y agrupa alícuotas de IVA.
|
|
55
52
|
|
|
56
|
-
|
|
57
|
-
| --- | --- | --- |
|
|
58
|
-
| `FACTURA_A` | 1 | Factura A |
|
|
59
|
-
| `NOTA_DEBITO_A` | 2 | Nota de Débito A |
|
|
60
|
-
| `NOTA_CREDITO_A` | 3 | Nota de Crédito A |
|
|
61
|
-
| `RECIBO_A` | 4 | Recibo A |
|
|
62
|
-
| `FACTURA_B` | 6 | Factura B |
|
|
63
|
-
| `NOTA_DEBITO_B` | 7 | Nota de Débito B |
|
|
64
|
-
| `NOTA_CREDITO_B` | 8 | Nota de Crédito B |
|
|
65
|
-
| `RECIBO_B` | 9 | Recibo B |
|
|
66
|
-
| `FACTURA_C` | 11 | Factura C |
|
|
67
|
-
| `NOTA_DEBITO_C` | 12 | Nota de Débito C |
|
|
68
|
-
| `NOTA_CREDITO_C` | 13 | Nota de Crédito C |
|
|
69
|
-
| `RECIBO_C` | 15 | Recibo C |
|
|
70
|
-
| `FACTURA_E` | 19 | Factura de Exportación |
|
|
71
|
-
| `NOTA_DEBITO_E` | 20 | Nota de Débito E |
|
|
72
|
-
| `NOTA_CREDITO_E` | 21 | Nota de Crédito E |
|
|
73
|
-
| `FACTURA_M` | 51 | Factura M |
|
|
74
|
-
| `NOTA_DEBITO_M` | 52 | Nota de Débito M |
|
|
75
|
-
| `NOTA_CREDITO_M` | 53 | Nota de Crédito M |
|
|
76
|
-
| `RECIBO_M` | 54 | Recibo M |
|
|
77
|
-
| `FCE_FACTURA_A` | 201 | Factura de Crédito Electrónica MiPyME A |
|
|
78
|
-
| `FCE_NOTA_DEBITO_A` | 202 | Nota de Débito FCE MiPyME A |
|
|
79
|
-
| `FCE_NOTA_CREDITO_A` | 203 | Nota de Crédito FCE MiPyME A |
|
|
80
|
-
| `FCE_FACTURA_B` | 206 | Factura de Crédito Electrónica MiPyME B |
|
|
81
|
-
| `FCE_NOTA_DEBITO_B` | 207 | Nota de Débito FCE MiPyME B |
|
|
82
|
-
| `FCE_NOTA_CREDITO_B` | 208 | Nota de Crédito FCE MiPyME B |
|
|
83
|
-
| `FCE_FACTURA_C` | 211 | Factura de Crédito Electrónica MiPyME C |
|
|
84
|
-
| `FCE_NOTA_DEBITO_C` | 212 | Nota de Débito FCE MiPyME C |
|
|
85
|
-
| `FCE_NOTA_CREDITO_C` | 213 | Nota de Crédito FCE MiPyME C |
|
|
53
|
+
## Configuración
|
|
86
54
|
|
|
87
|
-
|
|
55
|
+
```typescript
|
|
56
|
+
const arca = new Arca({
|
|
57
|
+
cuit: 20123456789, // CUIT sin guiones
|
|
58
|
+
cert: "...", // Certificado X.509 (PEM)
|
|
59
|
+
key: "...", // Clave privada (PEM)
|
|
60
|
+
production: false, // Default: false (testing/homologación)
|
|
61
|
+
tokenTTLMinutes: 720, // Default: 720 (12 horas)
|
|
62
|
+
requestTimeoutMs: 30_000, // Default: 30000 (30 segundos)
|
|
63
|
+
});
|
|
64
|
+
```
|
|
88
65
|
|
|
89
66
|
## Ejemplos
|
|
90
67
|
|
|
91
|
-
### Factura
|
|
92
|
-
|
|
93
|
-
Para servicios (`Concepto.SERVICIOS` o `Concepto.PRODUCTOS_Y_SERVICIOS`), es obligatorio incluir las fechas de servicio y vencimiento de pago.
|
|
68
|
+
### Factura B — Consumidor final (caso más común)
|
|
94
69
|
|
|
95
70
|
```typescript
|
|
96
|
-
const result = await arca.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
ImpTotal: 60500,
|
|
102
|
-
ImpTotConc: 0,
|
|
103
|
-
ImpNeto: 50000,
|
|
104
|
-
ImpOpEx: 0,
|
|
105
|
-
ImpTrib: 0,
|
|
106
|
-
ImpIVA: 10500,
|
|
107
|
-
MonId: Moneda.PESOS,
|
|
108
|
-
MonCotiz: 1,
|
|
109
|
-
FchServDesde: "20260301",
|
|
110
|
-
FchServHasta: "20260331",
|
|
111
|
-
FchVtoPago: "20260415",
|
|
112
|
-
Iva: [{ Id: IvaTipo.IVA_21, BaseImp: 50000, Importe: 10500 }],
|
|
71
|
+
const result = await arca.facturar({
|
|
72
|
+
ptoVta: 1,
|
|
73
|
+
cbteTipo: CbteTipo.FACTURA_B,
|
|
74
|
+
items: [{ neto: 100, iva: IvaTipo.IVA_21 }],
|
|
75
|
+
// DocTipo, DocNro, fecha, moneda, concepto → se completan automáticamente
|
|
113
76
|
});
|
|
77
|
+
// result.importes.total === 121
|
|
114
78
|
```
|
|
115
79
|
|
|
116
|
-
###
|
|
80
|
+
### Factura A — Servicios a otra empresa
|
|
117
81
|
|
|
118
82
|
```typescript
|
|
119
|
-
const result = await arca.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
MonCotiz: 1,
|
|
132
|
-
Iva: [{ Id: IvaTipo.IVA_21, BaseImp: 100, Importe: 21 }],
|
|
133
|
-
// Asociar con la factura original
|
|
134
|
-
CbtesAsoc: [{ Tipo: CbteTipo.FACTURA_B, PtoVta: 1, Nro: 150 }],
|
|
83
|
+
const result = await arca.facturar({
|
|
84
|
+
ptoVta: 1,
|
|
85
|
+
cbteTipo: CbteTipo.FACTURA_A,
|
|
86
|
+
docTipo: DocTipo.CUIT,
|
|
87
|
+
docNro: 30712345678,
|
|
88
|
+
items: [{ neto: 50000, iva: IvaTipo.IVA_21 }],
|
|
89
|
+
servicio: {
|
|
90
|
+
desde: new Date("2026-03-01"),
|
|
91
|
+
hasta: new Date("2026-03-31"),
|
|
92
|
+
vtoPago: new Date("2026-04-15"),
|
|
93
|
+
},
|
|
94
|
+
// concepto se auto-detecta como SERVICIOS al proveer `servicio`
|
|
135
95
|
});
|
|
136
96
|
```
|
|
137
97
|
|
|
138
98
|
### Factura con múltiples alícuotas de IVA
|
|
139
99
|
|
|
140
100
|
```typescript
|
|
141
|
-
const result = await arca.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
MonId: Moneda.PESOS,
|
|
153
|
-
MonCotiz: 1,
|
|
154
|
-
Iva: [
|
|
155
|
-
{ Id: IvaTipo.IVA_21, BaseImp: 1000, Importe: 210 },
|
|
156
|
-
{ Id: IvaTipo.IVA_10_5, BaseImp: 100, Importe: 10.5 },
|
|
157
|
-
// Para incluir items al 0%, se debe declarar también:
|
|
158
|
-
// { Id: IvaTipo.IVA_0, BaseImp: 500, Importe: 0 },
|
|
101
|
+
const result = await arca.facturar({
|
|
102
|
+
ptoVta: 1,
|
|
103
|
+
cbteTipo: CbteTipo.FACTURA_A,
|
|
104
|
+
docTipo: DocTipo.CUIT,
|
|
105
|
+
docNro: 30712345678,
|
|
106
|
+
items: [
|
|
107
|
+
{ neto: 1000, iva: IvaTipo.IVA_21 }, // IVA: 210
|
|
108
|
+
{ neto: 500, iva: IvaTipo.IVA_10_5 }, // IVA: 52.5
|
|
109
|
+
{ neto: 200, iva: IvaTipo.IVA_0 }, // IVA: 0 (gravado al 0%)
|
|
110
|
+
{ neto: 300, exento: true }, // Exento (ImpOpEx)
|
|
111
|
+
{ neto: 150 }, // No gravado (ImpTotConc)
|
|
159
112
|
],
|
|
160
113
|
});
|
|
114
|
+
// result.importes:
|
|
115
|
+
// neto: 1700, iva: 262.5, exento: 300, noGravado: 150, total: 2412.5
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Factura C — Monotributista
|
|
119
|
+
|
|
120
|
+
Para comprobantes tipo C, el SDK no discrimina IVA automáticamente.
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const result = await arca.facturar({
|
|
124
|
+
ptoVta: 1,
|
|
125
|
+
cbteTipo: CbteTipo.FACTURA_C,
|
|
126
|
+
items: [{ neto: 5000 }],
|
|
127
|
+
});
|
|
128
|
+
// ImpNeto: 5000, ImpIVA: 0, ImpTotal: 5000
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Nota de crédito
|
|
132
|
+
|
|
133
|
+
El tipo de NC se infiere automáticamente del comprobante original (FACTURA_B → NOTA_CREDITO_B).
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
const result = await arca.notaCredito({
|
|
137
|
+
ptoVta: 1,
|
|
138
|
+
comprobanteOriginal: {
|
|
139
|
+
tipo: CbteTipo.FACTURA_B,
|
|
140
|
+
ptoVta: 1,
|
|
141
|
+
nro: 150,
|
|
142
|
+
},
|
|
143
|
+
items: [{ neto: 100, iva: IvaTipo.IVA_21 }],
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Nota de débito
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
const result = await arca.notaDebito({
|
|
151
|
+
ptoVta: 1,
|
|
152
|
+
comprobanteOriginal: {
|
|
153
|
+
tipo: CbteTipo.FACTURA_A,
|
|
154
|
+
ptoVta: 1,
|
|
155
|
+
nro: 200,
|
|
156
|
+
fecha: "20260301",
|
|
157
|
+
},
|
|
158
|
+
docTipo: DocTipo.CUIT,
|
|
159
|
+
docNro: 30712345678,
|
|
160
|
+
items: [{ neto: 500, iva: IvaTipo.IVA_21 }],
|
|
161
|
+
});
|
|
161
162
|
```
|
|
162
163
|
|
|
163
164
|
### Factura MiPyME (FCE)
|
|
164
165
|
|
|
165
166
|
```typescript
|
|
166
|
-
const result = await arca.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
167
|
+
const result = await arca.facturar({
|
|
168
|
+
ptoVta: 1,
|
|
169
|
+
cbteTipo: CbteTipo.FCE_FACTURA_A,
|
|
170
|
+
docTipo: DocTipo.CUIT,
|
|
171
|
+
docNro: 30712345678,
|
|
172
|
+
items: [{ neto: 100000, iva: IvaTipo.IVA_21 }],
|
|
173
|
+
opcionales: [{ Id: "2101", Valor: "0110012345678901234567" }], // CBU obligatorio
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Previsualizar totales sin enviar
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const { importes, iva } = Arca.calcularTotales([
|
|
181
|
+
{ neto: 1000, iva: IvaTipo.IVA_21 },
|
|
182
|
+
{ neto: 500, iva: IvaTipo.IVA_10_5 },
|
|
183
|
+
]);
|
|
184
|
+
console.log(importes);
|
|
185
|
+
// { total: 1762.5, neto: 1500, iva: 262.5, exento: 0, noGravado: 0, tributos: 0 }
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Factura en moneda extranjera
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
const cotiz = await arca.getCotizacion(Moneda.DOLARES);
|
|
192
|
+
|
|
193
|
+
const result = await arca.facturar({
|
|
194
|
+
ptoVta: 1,
|
|
195
|
+
cbteTipo: CbteTipo.FACTURA_A,
|
|
196
|
+
docTipo: DocTipo.CUIT,
|
|
197
|
+
docNro: 30712345678,
|
|
198
|
+
items: [{ neto: 1000, iva: IvaTipo.IVA_21 }],
|
|
199
|
+
moneda: Moneda.DOLARES,
|
|
200
|
+
cotizacion: cotiz.MonCotiz,
|
|
182
201
|
});
|
|
183
202
|
```
|
|
184
203
|
|
|
204
|
+
## Manejo de errores
|
|
205
|
+
|
|
206
|
+
El SDK provee clases de error específicas para catch granular:
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import {
|
|
210
|
+
Arca,
|
|
211
|
+
ArcaAuthError,
|
|
212
|
+
ArcaWSFEError,
|
|
213
|
+
ArcaSoapError,
|
|
214
|
+
} from "@ramiidv/arca-sdk";
|
|
215
|
+
|
|
216
|
+
try {
|
|
217
|
+
const result = await arca.facturar({ ... });
|
|
218
|
+
} catch (e) {
|
|
219
|
+
if (e instanceof ArcaAuthError) {
|
|
220
|
+
// Error de autenticación WSAA (certificado inválido, expirado, etc.)
|
|
221
|
+
console.error("Auth error:", e.message);
|
|
222
|
+
arca.clearAuthCache(); // Limpiar cache e intentar de nuevo
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (e instanceof ArcaWSFEError) {
|
|
226
|
+
// Error de WSFE con códigos de ARCA
|
|
227
|
+
for (const err of e.errors) {
|
|
228
|
+
console.error(`[${err.code}] ${err.msg}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (e instanceof ArcaSoapError) {
|
|
233
|
+
// Error HTTP/SOAP (timeout, servidor caído, etc.)
|
|
234
|
+
console.error("HTTP status:", e.statusCode);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
| Clase | Cuándo se lanza |
|
|
240
|
+
| --- | --- |
|
|
241
|
+
| `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 }[]` |
|
|
243
|
+
| `ArcaSoapError` | Error HTTP, timeout, SOAP Fault. Contiene `statusCode?: number` |
|
|
244
|
+
| `ArcaError` | Clase base para todos los errores del SDK |
|
|
245
|
+
|
|
185
246
|
## Consultas
|
|
186
247
|
|
|
187
248
|
```typescript
|
|
@@ -200,32 +261,46 @@ const ptosVenta = await arca.getPuntosVenta();
|
|
|
200
261
|
// Cotización del dólar
|
|
201
262
|
const cotiz = await arca.getCotizacion(Moneda.DOLARES);
|
|
202
263
|
|
|
203
|
-
// Tipos
|
|
264
|
+
// Tipos disponibles
|
|
204
265
|
const tiposCbte = await arca.getTiposComprobante();
|
|
266
|
+
const tiposConcepto = await arca.getTiposConcepto();
|
|
205
267
|
const tiposDoc = await arca.getTiposDocumento();
|
|
206
268
|
const tiposIva = await arca.getTiposIva();
|
|
207
269
|
const monedas = await arca.getMonedas();
|
|
208
270
|
const tiposTrib = await arca.getTiposTributo();
|
|
271
|
+
const tiposOpc = await arca.getTiposOpcional();
|
|
272
|
+
const maxRegs = await arca.getCantMaxRegistros();
|
|
209
273
|
```
|
|
210
274
|
|
|
211
275
|
## API
|
|
212
276
|
|
|
213
277
|
### `new Arca(config)`
|
|
214
278
|
|
|
215
|
-
| Parámetro | Tipo | Descripción |
|
|
216
|
-
| --- | --- | --- |
|
|
217
|
-
| `cuit` | `number` | CUIT del contribuyente (sin guiones) |
|
|
218
|
-
| `cert` | `string` | Contenido del certificado X.509 (PEM) |
|
|
219
|
-
| `key` | `string` | Contenido de la clave privada (PEM) |
|
|
220
|
-
| `production` | `boolean` | `false`
|
|
221
|
-
| `tokenTTLMinutes` | `number` | TTL del token en minutos
|
|
279
|
+
| Parámetro | Tipo | Default | Descripción |
|
|
280
|
+
| --- | --- | --- | --- |
|
|
281
|
+
| `cuit` | `number` | — | CUIT del contribuyente (sin guiones) |
|
|
282
|
+
| `cert` | `string` | — | Contenido del certificado X.509 (PEM) |
|
|
283
|
+
| `key` | `string` | — | Contenido de la clave privada (PEM) |
|
|
284
|
+
| `production` | `boolean` | `false` | Entorno de producción |
|
|
285
|
+
| `tokenTTLMinutes` | `number` | `720` | TTL del token en minutos |
|
|
286
|
+
| `requestTimeoutMs` | `number` | `30000` | Timeout HTTP en milisegundos |
|
|
287
|
+
|
|
288
|
+
### Facturación — API simplificada
|
|
289
|
+
|
|
290
|
+
| Método | Descripción |
|
|
291
|
+
| --- | --- |
|
|
292
|
+
| `facturar(opts)` | Crea un comprobante con cálculo automático de IVA y totales |
|
|
293
|
+
| `notaCredito(opts)` | Crea nota de crédito asociada (tipo NC inferido automáticamente) |
|
|
294
|
+
| `notaDebito(opts)` | Crea nota de débito asociada (tipo ND inferido automáticamente) |
|
|
222
295
|
|
|
223
|
-
|
|
296
|
+
Retornan `FacturaResult` con: `aprobada`, `cae`, `caeVencimiento`, `cbteNro`, `importes`, `observaciones`, `raw`.
|
|
297
|
+
|
|
298
|
+
### Facturación — API raw
|
|
224
299
|
|
|
225
300
|
| Método | Descripción |
|
|
226
301
|
| --- | --- |
|
|
227
|
-
| `crearFactura(request)` | Solicita CAE para uno o más comprobantes |
|
|
228
|
-
| `crearFacturaAuto(ptoVta, cbteTipo, invoice)` |
|
|
302
|
+
| `crearFactura(request)` | Solicita CAE para uno o más comprobantes (sin auto-cálculo) |
|
|
303
|
+
| `crearFacturaAuto(ptoVta, cbteTipo, invoice)` | Como `crearFactura` pero obtiene el número automáticamente |
|
|
229
304
|
| `ultimoComprobante(ptoVta, cbteTipo)` | Último número autorizado |
|
|
230
305
|
| `siguienteComprobante(ptoVta, cbteTipo)` | Siguiente número (último + 1) |
|
|
231
306
|
| `consultarComprobante(cbteTipo, ptoVta, cbteNro)` | Consulta un comprobante existente |
|
|
@@ -236,6 +311,7 @@ const tiposTrib = await arca.getTiposTributo();
|
|
|
236
311
|
| --- | --- |
|
|
237
312
|
| `serverStatus()` | Estado de los servidores |
|
|
238
313
|
| `getTiposComprobante()` | Lista de tipos de comprobante |
|
|
314
|
+
| `getTiposConcepto()` | Lista de tipos de concepto |
|
|
239
315
|
| `getTiposDocumento()` | Lista de tipos de documento |
|
|
240
316
|
| `getTiposIva()` | Lista de alícuotas de IVA |
|
|
241
317
|
| `getMonedas()` | Lista de monedas |
|
|
@@ -249,17 +325,56 @@ const tiposTrib = await arca.getTiposTributo();
|
|
|
249
325
|
|
|
250
326
|
| Método | Descripción |
|
|
251
327
|
| --- | --- |
|
|
252
|
-
| `Arca.
|
|
253
|
-
| `Arca.
|
|
328
|
+
| `Arca.calcularTotales(items, opts?)` | Calcula importes e IVA sin enviar a ARCA |
|
|
329
|
+
| `Arca.extractCAE(result)` | Extrae CAE del resultado raw |
|
|
330
|
+
| `Arca.formatDate(date)` | Formatea `Date` a `YYYYMMDD` (timezone Argentina) |
|
|
331
|
+
|
|
332
|
+
## Tipos de comprobante soportados
|
|
333
|
+
|
|
334
|
+
| Enum | Código | Descripción |
|
|
335
|
+
| --- | --- | --- |
|
|
336
|
+
| `FACTURA_A` | 1 | Factura A |
|
|
337
|
+
| `NOTA_DEBITO_A` | 2 | Nota de Débito A |
|
|
338
|
+
| `NOTA_CREDITO_A` | 3 | Nota de Crédito A |
|
|
339
|
+
| `RECIBO_A` | 4 | Recibo A |
|
|
340
|
+
| `FACTURA_B` | 6 | Factura B |
|
|
341
|
+
| `NOTA_DEBITO_B` | 7 | Nota de Débito B |
|
|
342
|
+
| `NOTA_CREDITO_B` | 8 | Nota de Crédito B |
|
|
343
|
+
| `RECIBO_B` | 9 | Recibo B |
|
|
344
|
+
| `FACTURA_C` | 11 | Factura C |
|
|
345
|
+
| `NOTA_DEBITO_C` | 12 | Nota de Débito C |
|
|
346
|
+
| `NOTA_CREDITO_C` | 13 | Nota de Crédito C |
|
|
347
|
+
| `RECIBO_C` | 15 | Recibo C |
|
|
348
|
+
| `FACTURA_E` | 19 | Factura de Exportación |
|
|
349
|
+
| `NOTA_DEBITO_E` | 20 | Nota de Débito E |
|
|
350
|
+
| `NOTA_CREDITO_E` | 21 | Nota de Crédito E |
|
|
351
|
+
| `FACTURA_M` | 51 | Factura M |
|
|
352
|
+
| `NOTA_DEBITO_M` | 52 | Nota de Débito M |
|
|
353
|
+
| `NOTA_CREDITO_M` | 53 | Nota de Crédito M |
|
|
354
|
+
| `RECIBO_M` | 54 | Recibo M |
|
|
355
|
+
| `FCE_FACTURA_A` | 201 | Factura de Crédito Electrónica MiPyME A |
|
|
356
|
+
| `FCE_NOTA_DEBITO_A` | 202 | Nota de Débito FCE MiPyME A |
|
|
357
|
+
| `FCE_NOTA_CREDITO_A` | 203 | Nota de Crédito FCE MiPyME A |
|
|
358
|
+
| `FCE_FACTURA_B` | 206 | Factura de Crédito Electrónica MiPyME B |
|
|
359
|
+
| `FCE_NOTA_DEBITO_B` | 207 | Nota de Débito FCE MiPyME B |
|
|
360
|
+
| `FCE_NOTA_CREDITO_B` | 208 | Nota de Crédito FCE MiPyME B |
|
|
361
|
+
| `FCE_FACTURA_C` | 211 | Factura de Crédito Electrónica MiPyME C |
|
|
362
|
+
| `FCE_NOTA_DEBITO_C` | 212 | Nota de Débito FCE MiPyME C |
|
|
363
|
+
| `FCE_NOTA_CREDITO_C` | 213 | Nota de Crédito FCE MiPyME C |
|
|
364
|
+
|
|
365
|
+
Tambien se incluyen tipos especiales: `COMPRA_BIENES_USADOS` (49), `CTA_VTA_LIQ_PROD_A/B` (60/61), `LIQUIDACION_A/B` (63/64), y comprobantes RG 1415 (34, 35, 39, 40).
|
|
254
366
|
|
|
255
367
|
## Enums disponibles
|
|
256
368
|
|
|
257
369
|
- `CbteTipo` — Tipos de comprobante
|
|
258
370
|
- `Concepto` — Tipos de concepto (Productos, Servicios, Ambos)
|
|
259
|
-
- `DocTipo` — Tipos de documento (CUIT, DNI, etc.)
|
|
371
|
+
- `DocTipo` — Tipos de documento (CUIT, DNI, Consumidor Final, etc.)
|
|
260
372
|
- `IvaTipo` — Alícuotas de IVA (0%, 2.5%, 5%, 10.5%, 21%, 27%)
|
|
373
|
+
- `IVA_RATES` — Record que mapea IvaTipo a su porcentaje numérico
|
|
261
374
|
- `Moneda` — Códigos de moneda (PES, DOL, EUR, etc.)
|
|
262
375
|
- `TributoTipo` — Tipos de tributo
|
|
376
|
+
- `NOTA_CREDITO_MAP` — Mapeo de tipo factura → tipo nota de crédito
|
|
377
|
+
- `NOTA_DEBITO_MAP` — Mapeo de tipo factura → tipo nota de débito
|
|
263
378
|
|
|
264
379
|
## Entornos
|
|
265
380
|
|
package/dist/arca.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ArcaConfig, InvoiceRequest, InvoiceDetail, FECAESolicitarResult, FECAEDetResponse, FECompConsultarResult, ServerStatus, ParamItem, MonedaItem, PtoVentaItem, CotizacionResult } from "./types.js";
|
|
1
|
+
import type { ArcaConfig, InvoiceRequest, InvoiceDetail, FECAESolicitarResult, FECAEDetResponse, FECompConsultarResult, ServerStatus, ParamItem, MonedaItem, PtoVentaItem, CotizacionResult, FacturarOpts, NotaCreditoOpts, NotaDebitoOpts, FacturaResult, LineItem, Importes } from "./types.js";
|
|
2
2
|
export declare class Arca {
|
|
3
3
|
private wsaa;
|
|
4
4
|
private wsfe;
|
|
@@ -52,6 +52,67 @@ export declare class Arca {
|
|
|
52
52
|
* Simplifica el flujo más común: obtener número → crear factura.
|
|
53
53
|
*/
|
|
54
54
|
crearFacturaAuto(ptoVta: number, cbteTipo: number, invoice: Omit<InvoiceDetail, "CbteDesde" | "CbteHasta">): Promise<FECAESolicitarResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Crea una factura con API simplificada.
|
|
57
|
+
* 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
|
+
*/
|
|
75
|
+
facturar(opts: FacturarOpts): Promise<FacturaResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Crea una nota de crédito asociada a un comprobante original.
|
|
78
|
+
* El tipo de NC se infiere automáticamente del tipo del comprobante original.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const result = await arca.notaCredito({
|
|
83
|
+
* ptoVta: 1,
|
|
84
|
+
* comprobanteOriginal: {
|
|
85
|
+
* tipo: CbteTipo.FACTURA_B,
|
|
86
|
+
* ptoVta: 1,
|
|
87
|
+
* nro: 5,
|
|
88
|
+
* },
|
|
89
|
+
* items: [{ neto: 500, iva: IvaTipo.IVA_21 }],
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
notaCredito(opts: NotaCreditoOpts): Promise<FacturaResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Crea una nota de débito asociada a un comprobante original.
|
|
96
|
+
* El tipo de ND se infiere automáticamente del tipo del comprobante original.
|
|
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
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
notaDebito(opts: NotaDebitoOpts): Promise<FacturaResult>;
|
|
115
|
+
private facturarConAsociado;
|
|
55
116
|
/**
|
|
56
117
|
* Consulta un comprobante previamente autorizado.
|
|
57
118
|
*/
|
|
@@ -63,6 +124,8 @@ export declare class Arca {
|
|
|
63
124
|
serverStatus(): Promise<ServerStatus>;
|
|
64
125
|
/** Obtiene los tipos de comprobante disponibles. */
|
|
65
126
|
getTiposComprobante(): Promise<ParamItem[]>;
|
|
127
|
+
/** Obtiene los tipos de concepto disponibles (Productos, Servicios, Productos y Servicios). */
|
|
128
|
+
getTiposConcepto(): Promise<ParamItem[]>;
|
|
66
129
|
/** Obtiene los tipos de documento disponibles. */
|
|
67
130
|
getTiposDocumento(): Promise<ParamItem[]>;
|
|
68
131
|
/** Obtiene los tipos de IVA disponibles. */
|
|
@@ -91,8 +154,31 @@ export declare class Arca {
|
|
|
91
154
|
};
|
|
92
155
|
/**
|
|
93
156
|
* Formatea una fecha Date a formato YYYYMMDD requerido por ARCA.
|
|
157
|
+
* Usa timezone America/Argentina/Buenos_Aires.
|
|
94
158
|
*/
|
|
95
|
-
static formatDate(date: Date): string;
|
|
159
|
+
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
|
+
*/
|
|
173
|
+
static calcularTotales(items: LineItem[], opts?: {
|
|
174
|
+
tributos?: {
|
|
175
|
+
Importe: number;
|
|
176
|
+
}[];
|
|
177
|
+
tipoC?: boolean;
|
|
178
|
+
}): {
|
|
179
|
+
importes: Importes;
|
|
180
|
+
iva: import("./types.js").AlicuotaIva[];
|
|
181
|
+
};
|
|
96
182
|
/**
|
|
97
183
|
* Invalida los tickets de acceso cacheados.
|
|
98
184
|
*/
|
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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"}
|