WSFEv1 · WSFEX · WSAA

ARCA Facturación

@ramiidv/arca-facturacion@7.0.2

SDK completo para facturación electrónica con ARCA. Facturas A, B, C, E, M, Notas de Crédito/Débito, Recibos, FCE MiPyME, Exportación. Cálculo automático de IVA, totales y numeración. Emisión segura: nunca reintenta una emisión y permite recuperar resultados inciertos, también en exportación.

npm install @ramiidv/arca-facturacion@7.0.2
TypeScript
import { readFileSync } from "node:fs";
import { ArcaFacturacion, ArcaRechazoError, CbteTipo, IvaTipo, FileTicketStorage } from "@ramiidv/arca-facturacion";

const arca = new ArcaFacturacion({
  cuit: 20123456786,
  // certs/ en el .gitignore: nunca subas la clave
  cert: readFileSync("./certs/certificado.crt", "utf-8"),
  key: readFileSync("./certs/clave.key", "utf-8"),
  ticketStorage: new FileTicketStorage("./.arca-tickets"),
  // homologación por defecto; production: true para producción
});

try {
  const result = await arca.facturar({
    ptoVta: 1,
    cbteTipo: CbteTipo.FACTURA_B,
    items: [{ total: 1210, iva: IvaTipo.IVA_21 }], // precio final
  });
  console.log(result.cae);          // CAE autorizado
  console.log(result.cbteNro);      // Número de comprobante
  console.log(arca.urlQR(result));  // QR para la factura impresa
} catch (e) {
  if (!(e instanceof ArcaRechazoError)) throw e;
  console.error(e.observaciones);   // ARCA rechazó el comprobante
}

Características

Qué incluye Facturación

Cálculo automático

IVA, totales, numeración y fecha. Precios netos o con IVA incluido y descuento global, al centavo y con el redondeo del manual (mitad al par).

Emisión segura

Las emisiones no se reintentan. Ante un timeout, recuperarComprobante dice si quedó autorizada o se puede reintentar.

Reglas del manual

Validación local de las reglas del manual de WSFEv1 v4.8 y WSFEX 3.1.1 (receptor por clase, FCE, asociados, compradores, moneda, opcionales): el error trae el código de ARCA antes de tocar la red.

Rechazos como errores

facturar, notaCredito, notaDebito y facturarExpo devuelven siempre un comprobante autorizado con CAE; si ARCA rechaza, lanzan ArcaRechazoError con las observaciones.

Exportación recuperable

facturarExpo con auto ID, numeración y totales; con canMisMonExt S la cotización es opcional. Ante ArcaResultadoInciertoExpo se reenvía con el mismo Id y WSFEX devuelve el CAE original sin duplicar; si el Id ya era de otro comprobante, lanza ArcaConflictoExpo.

CAEA de contingencia

Solicitud, informe y sin movimiento. Cada comprobante se informa con fechaHoraGeneracion (CbteFchHsGen, RG 5782).

QR oficial

arca.urlQR(resultado) con la URL de la especificación vigente (arca.gob.ar/fe/qr), fecha YYYY-MM-DD y CAE validado.

Cotizaciones

getCotizacion devuelve { monId, monCotiz, fchCotiz }, también a una fecha dada. getCotizacionExpo para WSFEX.

Producción y TLS

La producción de WSFEv1 y WSFEX negocia DH de 1024 bits y Node ≥ 17 rechaza DH de 1024 bits; con legacyTls: "auto" (default) el SDK hace el fallback solo.

Ticket persistente

ticketStorage para reutilizar el ticket de WSAA entre reinicios.

Todos los comprobantes

Facturas A, B, C, E, M. Notas de Crédito/Débito con el tipo inferido del original. Recibos. FCE MiPyME, también de productos (vtoPago).

Tipo de comprobante

resolverCbteTipo elige A, B o C según la condición de IVA de emisor y receptor.

Instalá @ramiidv/arca-facturacion

TypeScript nativo, Node.js 22.12+, sin librerías SOAP: las únicas dependencias externas son fast-xml-parser y node-forge (vía arca-common). Gratis, open source, MIT.