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.2import { 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.