createArcaClient() devuelve el cliente. Sus métodos son la API para emitir:
reciben datos de tu negocio y devuelven el resultado fiscal ya normalizado.
client.wsfe, client.wsmtxca y client.padron son los módulos técnicos que
el cliente usa por debajo. Están en
Módulos de transporte, y el Padrón en
Consultar contribuyentes.
createArcaClient()
ARCA_* y valida la
configuración al crear el cliente. Si falta el CUIT, un PEM o el entorno, lanza
ArcaConfigurationError antes de cualquier llamada. client.config expone
taxId y environment, de solo lectura. Las opciones están en
Configuración.
issue()
input, y autoriza el comprobante. Sin idempotencyKey, lee el próximo
número, autoriza una vez y hace a lo sumo una consulta si la respuesta queda
incierta. Con clave y store, reserva el número antes de escribir, y una
repetición consulta la reserva en vez de emitir otra vez.
Los errores de input y la falla al leer el próximo número se lanzan antes de
autorizar. Todo lo que pasa después vuelve como uno de los cuatro
resultados. Los campos de input están en
Emitir facturas.
preview()
issue() antes de su primera
llamada. Devuelve:
issueCreditNote()
for nombra el comprobante autorizado que corregís, o una lista de ellos. La
nota acredita las líneas de items, un desglose amounts ya revisado, o el
original entero con all: true. Uno de los tres es obligatorio. La clase, el
receptor, la moneda, el concepto y las fechas de servicio salen del original.
Con associatedPeriod: { from, to } en lugar de for, la nota ajusta un
período y lleva su propio input de negocio. Devuelve los mismos
resultados que issue().
issueDebitNote()
issueCreditNote(), sin all: true: una nota de débito
suma a la cuenta, así que sus líneas o importes siempre son explícitos. En WSFE
también acepta notas de crédito ordinarias autorizadas (3, 8 y 13) en for y
deriva la nota de débito de la misma clase (2, 7 y 12).
previewCreditNote() y previewDebitNote()
preview(), son asincrónicas: consultan cada original una vez,
sin escribir y sin reservar número. Devuelven lo mismo que preview() más
originals, los comprobantes consultados en el orden del input. Una nota por
período no consulta nada y no trae originals. PreviewOptions acepta
representedTaxId, service, forceRefresh y abortSignal.
recover()
indeterminate con
lookup.kind === "not_found": para emitir, llamá otra vez al método original
con la misma clave. Con un store que provee withLock, espera a que termine
una emisión en curso en esa secuencia, para no consultar una reserva que otra
llamada con la misma clave está cambiando. Si tu abortSignal vence mientras
espera, o el lock sigue tomado, lanza ArcaLockTimeoutError sin consultar a
ARCA. Sin withLock, un conflicto en el
número de una clave rechazada se informa pero no queda guardado: otra llamada
con la misma clave puede haberlo escrito, así que la próxima consulta lo vuelve
a revisar. Si no hay reserva para esa clave, lanza ArcaInputError con
code === "ARCA_INPUT_RESERVATION_NOT_FOUND".
RecoveryOptions acepta representedTaxId, forceRefresh, include y
abortSignal.
lookup()
for en una nota de crédito. Solo lee: no usa el store ni reserva número.
Devuelve null si ARCA no tiene ese comprobante y lanza ante cualquier otro
error del proveedor. Con service: "wsmtxca" consulta WSMTXCA.
El resultado es un VoucherSummary, el mismo que traen originals y un
conflict: importes en centavos, fechas YYYY-MM-DD, y sin la respuesta cruda.
Un campo que ARCA omite no aparece.
lastAuthorized()
0 si nunca autorizó ninguno. Solo lee: no usa el store ni
reserva número. Con service: "wsmtxca" consulta WSMTXCA, y la respuesta es
la misma en los dos servicios.
Opciones de emisión
issue(), issueCreditNote() e issueDebitNote() aceptan IssueOptions como
segundo argumento. Todas son opcionales.
Resultados
Los cuatro métodos que emiten, yrecover(), devuelven un IssueOutcome. Los
resultados fiscales se devuelven, no se lanzan, y kind los distingue:
attempted son las coordenadas del intento: salesPoint, voucherType y
number. En indeterminate, lookup.kind dice por qué quedó abierto:
Qué hacer con cada uno está en
Emitir facturas.
IssuedVoucher
voucher, en un resultado autorizado, habla en las unidades del input: fechas
YYYY-MM-DD e importes en centavos.
FiscalHeader
header es la misma en preview() y en voucher, tanto en una autorización
directa como en una recuperada.
Importes
amounts trae tres enteros en centavos:
QR de un comprobante guardado
voucher.qr ya trae la URL. Para reimprimir un comprobante guardado sin volver
a emitir, arcaQrUrl() la arma con los mismos datos, sin I/O:
arcaQrPayload() devuelve el JSON que va codificado en esa URL, y
ARCA_QR_URL es la base. El QR lleva el documento del receptor tal como se
mandó a ARCA, también el tipo 99 con número 0 de un consumidor final sin
identificar: sin esos campos, la página de constatación de ARCA deja el receptor
vacío y hay que cargarlo a mano.