@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 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, Concepto, DocTipo, IvaTipo, Moneda } from "arca-sdk";
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 (obtiene el número automáticamente)
34
- const result = await arca.crearFacturaAuto(1, CbteTipo.FACTURA_B, {
35
- Concepto: Concepto.PRODUCTOS,
36
- DocTipo: DocTipo.CONSUMIDOR_FINAL,
37
- DocNro: 0,
38
- CbteFch: Arca.formatDate(new Date()),
39
- ImpTotal: 121,
40
- ImpTotConc: 0,
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
- const { approved, cae, caeFchVto } = Arca.extractCAE(result);
51
- console.log(approved ? `CAE: ${cae}` : "Rechazada");
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
- ## Tipos de comprobante soportados
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
- | Enum | Código | Descripción |
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
- 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).
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 A por servicios
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.crearFacturaAuto(1, CbteTipo.FACTURA_A, {
97
- Concepto: Concepto.SERVICIOS,
98
- DocTipo: DocTipo.CUIT,
99
- DocNro: 30712345678,
100
- CbteFch: Arca.formatDate(new Date()),
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
- ### Nota de crédito
80
+ ### Factura A — Servicios a otra empresa
117
81
 
118
82
  ```typescript
119
- const result = await arca.crearFacturaAuto(1, CbteTipo.NOTA_CREDITO_B, {
120
- Concepto: Concepto.PRODUCTOS,
121
- DocTipo: DocTipo.CONSUMIDOR_FINAL,
122
- DocNro: 0,
123
- CbteFch: Arca.formatDate(new Date()),
124
- ImpTotal: 121,
125
- ImpTotConc: 0,
126
- ImpNeto: 100,
127
- ImpOpEx: 0,
128
- ImpTrib: 0,
129
- ImpIVA: 21,
130
- MonId: Moneda.PESOS,
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.crearFacturaAuto(1, CbteTipo.FACTURA_A, {
142
- Concepto: Concepto.PRODUCTOS,
143
- DocTipo: DocTipo.CUIT,
144
- DocNro: 30712345678,
145
- CbteFch: Arca.formatDate(new Date()),
146
- ImpTotal: 1352.5,
147
- ImpTotConc: 0,
148
- ImpNeto: 1100, // 1000 + 100
149
- ImpOpEx: 0,
150
- ImpTrib: 0,
151
- ImpIVA: 252.5, // 210 + 42.5 (nota: no incluye el IVA 0%)
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.crearFacturaAuto(1, CbteTipo.FCE_FACTURA_A, {
167
- Concepto: Concepto.PRODUCTOS,
168
- DocTipo: DocTipo.CUIT,
169
- DocNro: 30712345678,
170
- CbteFch: Arca.formatDate(new Date()),
171
- ImpTotal: 121000,
172
- ImpTotConc: 0,
173
- ImpNeto: 100000,
174
- ImpOpEx: 0,
175
- ImpTrib: 0,
176
- ImpIVA: 21000,
177
- MonId: Moneda.PESOS,
178
- MonCotiz: 1,
179
- Iva: [{ Id: IvaTipo.IVA_21, BaseImp: 100000, Importe: 21000 }],
180
- // Dato obligatorio para FCE: CBU del emisor
181
- Opcionales: [{ Id: "2101", Valor: "0110012345678901234567" }],
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 de comprobante, documento, IVA, monedas, tributos
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` = testing (default), `true` = producción |
221
- | `tokenTTLMinutes` | `number` | TTL del token en minutos (default: 720 = 12h) |
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
- ### Facturación
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)` | Obtiene el número automáticamente y crea la factura |
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.extractCAE(result)` | Extrae CAE y estado del resultado |
253
- | `Arca.formatDate(date)` | Formatea `Date` a `YYYYMMDD` |
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
  */
@@ -1 +1 @@
1
- {"version":3,"file":"arca.d.ts","sourceRoot":"","sources":["../src/arca.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB,qBAAa,IAAI;IACf,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAU;gBAEhB,MAAM,EAAE,UAAU;IAkB9B;;OAEG;YACW,OAAO;IAarB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAK1E;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1E;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAKlB;;;OAGG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,WAAW,CAAC,GACtD,OAAO,CAAC,oBAAoB,CAAC;IAgBhC;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC;IASjC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAI3C,oDAAoD;IAC9C,mBAAmB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKjD,kDAAkD;IAC5C,iBAAiB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/C,4CAA4C;IACtC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKzC,uCAAuC;IACjC,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKzC,gDAAgD;IAC1C,eAAe,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK7C,yDAAyD;IACnD,gBAAgB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK9C,+CAA+C;IACzC,cAAc,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAK/C,2CAA2C;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKhE,2DAA2D;IACrD,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAS5C;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG;QAC/C,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAgBD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAOrC;;OAEG;IACH,cAAc,IAAI,IAAI;CAGvB"}
1
+ {"version":3,"file":"arca.d.ts","sourceRoot":"","sources":["../src/arca.ts"],"names":[],"mappings":"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"}