Skip to main content
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