ARCA no anula comprobantes. Una corrección es una nota de crédito, y todos los
modos de issueCreditNote() escriben un documento fiscal real que queda en los
registros de ARCA.
Una nota de crédito nombra el comprobante, o los comprobantes, que corrige, o
el período que ajusta. issueDebitNote() emite notas de débito con el mismo
contrato.
Nota parcial
Lo habitual es la nota parcial: una devolución o una corrección de precio que
acredita las líneas que elegís en vez de la factura entera.
Este bloque es examples/nota-de-credito-parcial.ts:
El SDK consulta el original y toma de ahí la clase, el receptor, la moneda y el
concepto. ARCA no informa la condición de IVA del receptor en comprobantes
autorizados antes de que existiera ese campo. Para esos originales pasá
to: { condition: "consumidor_final" } con la condición real del receptor. Se
usa solo si la consulta no la trae, y si la trae tiene que coincidir.
El indicador paidInForeignCurrency solo corresponde a comprobantes en moneda
extranjera. En las consultas de comprobantes en pesos, el SDK omite ese
indicador para preparar notas y recuperar emisiones de resultado incierto.
Nota total
all: true acredita el original completo: espeja sus importes y sus alícuotas
de IVA línea por línea.
Este bloque es examples/nota-de-credito-total.ts:
El modo es explícito y obligatorio. Un input sin items ni all: true, o con
los dos, se rechaza antes de cualquier I/O. Así, un campo olvidado nunca puede
acreditar la factura entera.
Qué sale del original y qué aportás vos
Del original el SDK toma la clase y por lo tanto el tipo de nota
(1 → 3, 6 → 8, 11 → 13), el tipo, el número y la condición de IVA del receptor,
la moneda y el tipo de cambio, el concepto y, para los conceptos 2 y 3, las
fechas de servicio. En una nota ordinaria, el vencimiento se eleva a la fecha
de la nota cuando hace falta. Una nota FCE sin anulación no lleva vencimiento
de pago. La aplicación aporta for, el modo (items o amounts, con un total opcional,
o all: true) y puede elegir el salesPoint de la nota, que por defecto es el
del original, y date, que por defecto es hoy en Buenos Aires. Una nota
vinculada no tiene campos issuer ni currency. Solo las notas por
período los llevan, porque no hay original de donde tomarlos.
Si la consulta del original no informa la condición de IVA del receptor,
pasá to.condition. Esto puede ocurrir con comprobantes anteriores a ese
campo. Si el original ya informa la condición, podés omitir to o aportar la
misma condición. to solo admite condition. El tipo y el número de documento
del receptor siempre salen del original.
La forma de los ítems sigue la clase del original. Una nota de clase C acepta
ítems { amount }. Las notas de clase A y B aceptan ítems { gross | net, vat }
con las mismas alícuotas y la misma conciliación que issue(). La clase es
evidencia del original, así que una forma que la contradice se rechaza después
de consultarlo y antes de cualquier escritura.
En lugar de items podés pasar amounts, el mismo desglose fiscal revisado
que acepta issue(): { net, vat, exempt?, untaxed?, vatRates? } en centavos,
con un total opcional. Es el modo para una nota parcial cuya composición ya
calculó tu aplicación. El SDK no recalcula el IVA. items y amounts son
excluyentes, y ninguno de los dos se combina con all: true.
Varios originales
for acepta un original o una lista de originales. Con una lista, el SDK
consulta cada uno y los asocia todos a la misma nota, y el tope deja de ser el
total de un comprobante para ser la suma de los totales de todos.
Como la nota tiene un solo valor de cada campo heredado y varias fuentes para
él, los originales tienen que coincidir en todo lo que la nota hereda: clase y
familia, y por lo tanto el tipo de nota, tipo y número de documento y
condición de IVA del receptor, moneda y tipo de cambio, concepto y fechas de
servicio. Si alguno difiere, se lanza ArcaInputError nombrando el campo, y la
nota se emite por grupo. El punto de venta de la nota entra en esa
comparación solo cuando no lo pasás: con salesPoint explícito, los originales
pueden ser de puntos de venta distintos.
all: true acepta un solo original: una nota total de varios comprobantes no
tiene un total único, así que se rechaza antes de cualquier I/O. Con varios
originales van items o amounts. Repetir las mismas coordenadas en la lista
también se rechaza antes de consultar ARCA.
Tributos en las notas
Una nota total espeja los tributos del original tal como los devuelve la
consulta. Una nota parcial no prorratea nada: si la nota lleva tributos, los
pasás vos en taxes, con las mismas filas
{ id, description?, base, rate, amount } en centavos que usa issue(). El
SDK nunca adivina qué percepción corresponde ni en qué proporción.
Límites
La nota no puede superar el total del original, o la suma de los totales
cuando for nombra varios. El SDK no lleva la cuenta de notas anteriores
contra un original. Evitar que varias notas sumen más que la factura es tarea
de la aplicación.
El original puede ser una factura o una nota de débito autorizada de las
familias ordinaria (1, 2, 6, 7, 11, 12), A con leyenda (51, 52) o FCE
(201, 202, 206, 207, 211, 212), incluidos los originales con tributos. for
identifica cada original con { salesPoint, voucherType, number } y nada más:
alcanzan esas tres coordenadas del comprobante anterior.
Los saldos acumulados, el stock, la contabilidad, la condición de agente de
retención o percepción y qué percepción corresponde en cada caso siguen siendo
de la aplicación. Los campos opcionales propios de la nota los aportás vos: no
se copian del original.
Una nota a otro receptor o en otra moneda es un documento distinto. Emitila
como una nota propia contra su original. Si el contribuyente o el punto de
venta opera a través de WSMTXCA, revisá el
caso especial de WSMTXCA.
Notas de débito
issueDebitNote({ for, items | amounts }) emite una nota de débito contra los
mismos originales. En WSFE también acepta una nota de crédito ordinaria
autorizada de clase A, B o C (3, 8 o 13). Deriva una nota de débito de la misma
familia y clase (2, 7 o 12), y asocia las coordenadas de esa nota de crédito.
previewDebitNote() acepta los mismos inputs y consulta el original sin emitir.
No admite all: true: una nota de débito agrega al saldo, así que sus líneas
o importes son siempre explícitos. Este soporte de notas de crédito originales
es para WSFE y la familia ordinaria. Las notas de crédito FCE, A con leyenda y
los originales WSMTXCA mantienen sus restricciones.
Notas por período
Con associatedPeriod: { from, to } la nota ajusta un período en vez de un
comprobante. En ese modo no hay for y no hay original que consultar, así que
la nota lleva los mismos datos de negocio que una factura: issuer, to,
items o amounts, moneda y demás.
Notas FCE
Una nota FCE necesita un original FCE. fce: { annulment, reference? } informa
la anulación de forma explícita: all: true no la elige por vos. El CUIT del
emisor y la fecha del original viajan en la asociación, no en campos sueltos.
Una nota FCE sin anulación lleva exactamente una factura FCE asociada. En
WSMTXCA, toda nota FCE lleva exactamente un original, incluso cuando es de
anulación. Esta restricción no afecta las notas ordinarias contra varios
originales.
Para los conceptos 2 y 3, una nota FCE con annulment: false conserva las
fechas de servicio del original y omite su vencimiento de pago. Esto también
se aplica si pasás { id: "22", value: "N" } en optionalFields, y a las
notas de débito. ARCA rechaza ese vencimiento con el código 10175 en WSFE.
Vista previa de notas
previewCreditNote() y previewDebitNote() derivan lo que enviaría la
emisión. A diferencia de preview(), que no hace ninguna I/O, estas consultan
los originales: una lectura por original, sin escritura y sin reservar número.
La respuesta de una nota vinculada incluye esos comprobantes en originals,
VoucherSummary normalizados y sin la respuesta cruda, en el orden en que los
pasaste. Un VoucherSummary habla en las unidades del input: importes en
centavos y fechas YYYY-MM-DD. Una nota por período no tiene originales, así que tampoco necesita esa
consulta ni devuelve esa propiedad.
header describe la nota nueva, no sus originales. Por ejemplo, si una factura
ordinaria de servicios vencía el 10 de septiembre y la nota se fecha el 19,
el SDK ajusta el vencimiento final de la nota al 19. Ese valor aparece en
previsualizacion.header.paymentDueDate.
En una nota FCE sin anulación, header.paymentDueDate se omite. El
vencimiento de la factura sigue disponible en originals.
Guardá la misma cabecera después de una autorización directa o recuperada. No
hace falta leer request, lookup ni recoveredByMatch:
Evitar duplicados y probar en producción
idempotencyKey e include funcionan igual que en issue(). Dale a la nota su
propia clave estable, por ejemplo nc:${devolucion.id}. Una repetición con
clave consulta solo la nota reservada e informa amounts a partir del request
guardado, así que en ese camino computedTotal es igual a sentTotal y
vatAdjustment es 0.
Una prueba de humo en producción es una factura de ARS 1 seguida de una nota
total. Los dos documentos son reales y quedan en los registros de ARCA. La
nota es una operación aparte. Si falla, la factura queda pendiente. Hacé
coincidir issuer con tu condición fiscal real. Last modified on October 8, 2026