Skip to content

Latest commit

 

History

History
852 lines (599 loc) · 68.4 KB

cli-reference.md

File metadata and controls

852 lines (599 loc) · 68.4 KB

← Documentación

Referencia del CLI

TL;DR

Si solo querés un ejemplo mínimo funcional para arrancar:

arcli fc -m 300000 --cs --consumidor-final

Eso crea una Factura C con:

  • monto
  • concepto servicios
  • receptor consumidor final
  • IVA receptor consumidor final

Asume que ya configuraste CUIT, credenciales y punto de venta (arcli config revisar lo verifica). Sin --emitir (y con emitir en false en la config, el valor por defecto) solo muestra la vista previa.

¿Preferís que te pregunte paso a paso? Corré arcli sin argumentos y se abre el modo interactivo. Antes de emitir te muestra el comando equivalente.

Si querés entender más, este orden sirve: Cómo pensar los comprobantes → Parámetros por familia → Cómo funcionan los flags → Ejemplos útiles. Si ya conocés el CLI, las tablas de flags sirven como referencia rápida.

Cómo pensar rápido un comando

Si querés armar un comando sin perderte, este orden suele funcionar bien:

  1. elegí el comprobante: fc, fa, nca, ndb, fcec, etc
  2. definí el monto: --monto
  3. elegí el concepto: --cs, --cp, --csp o --concepto
  4. definí la identidad del receptor: --cuit, --cuil, --dni, --consumidor-final
  5. definí el IVA receptor: --ir-*, --ir o --iva-receptor

Con eso ya tenés la base. Después sumás fechas de servicio, JSON, salida estructurada o asociado solo si ese caso lo necesita.

Cómo pensar los comprobantes en ARCLI

ARCLI trabaja con dos ideas al mismo tiempo:

  • familias, como factura o nota-credito
  • letras, como a, b o c

Entonces:

  • arcli factura c y arcli fc representan el mismo comprobante
  • arcli nota-credito a y arcli nca también

Los shortcuts existen para escribir menos. Las familias existen para que el comando sea más explícito o más fácil de descubrir.

En todos los casos, la estructura base se parece bastante:

  • importe
  • concepto
  • identidad del receptor
  • IVA del receptor
  • punto de venta
  • modo de ejecución

Después cambian algunas cosas según la familia:

  • las facturas no usan comprobante asociado
  • las notas sí lo usan
  • las electrónicas mantienen la misma forma general, pero cambian el tipo ARCA

Familias

Comando Argumentos Descripción
factura <a|b|c|e> Emite o previsualiza Factura A, B, C o la de exportación E (WSFEX)
nota-credito <a|b|c> Emite o previsualiza Nota de crédito A, B o C
nota-debito <a|b|c> Emite o previsualiza Nota de débito A, B o C
factura-credito-electronica <a|b|c> Emite o previsualiza Factura de crédito electrónica A, B o C
nota-credito-electronica <a|b|c> Emite o previsualiza Nota de crédito electrónica A, B o C
nota-debito-electronica <a|b|c> Emite o previsualiza Nota de débito electrónica A, B o C
recibo <c> Emite o previsualiza Recibo C (solo letra C)

Shortcuts

Shortcut Comando largo
fa factura a
fb factura b
fc factura c
nca nota-credito a
ncb nota-credito b
ncc nota-credito c
nda nota-debito a
ndb nota-debito b
ndc nota-debito c
fe factura e
fcea factura-credito-electronica a
fceb factura-credito-electronica b
fcec factura-credito-electronica c
ncea nota-credito-electronica a
nceb nota-credito-electronica b
ncec nota-credito-electronica c
ndea nota-debito-electronica a
ndeb nota-debito-electronica b
ndec nota-debito-electronica c
rc recibo c

arcli factura e y arcli fe son la misma Factura de exportación E: la letra E de la familia factura se resuelve por WSFEX, con sus propios flags (ver Factura de exportación).

Cómo funcionan los flags

Antes de ver parámetro por parámetro, hay cuatro reglas que te conviene tener presentes:

  • prioridad: flags > JSON > config > defaults
  • los flags pisan todo: si algo viene por CLI, manda eso
  • hay flags excluyentes: no todo se puede combinar
  • --json y --bruto cambian la salida, no el sentido del comprobante

Ejemplo simple de prioridad:

  • si en config guardaste puntoVenta = 3
  • en voucher.json mandás puntoVenta = 5
  • y en CLI ejecutás --pv 7

ARCLI usa 7, porque el flag explícito siempre pisa JSON y config.

Exclusividades importantes

Hay varias combinaciones de flags que no podés usar juntas (entorno, modo de ejecución, concepto, IVA receptor, identidad del receptor, tipo de asociado). El detalle completo vive en Flags mutuamente excluyentes.

Flags globales

Usalos cuando necesitás controlar el entorno, la salida o el modo de inspección del resultado. Cada comando acepta solo los que usa:

Comando Flags globales que acepta
comprobantes (fa, fc, nca, factura, ...) --testing, --produccion, --json, --bruto
padron, fce-obligado, ultimos, consultar, parametros, estado --testing, --produccion, --json
certificado generar, certificado importar --testing, --produccion, --json
interactivo --testing, --produccion
config (y sus subcomandos), pdf (y sus subcomandos), completado, acceso-directo --json

Emisión en producción

El entorno y la decisión de emitir son independientes:

  • Entorno: --testing o --produccion; sin flag, config.entorno (testing por defecto).
  • Emitir: --emitir o --previsualizar; sin flag, emitir/previsualizar del JSON de --cargar; si tampoco, config.emitir (false por defecto). Si nada pide emitir, en una terminal se muestra la vista previa y se pregunta, nombrando el entorno: ¿Emitimos la factura B en PRODUCCIÓN? (Esc cuenta como no, igual que en el modo interactivo, y también en las preguntas del PDF); con --json o sin terminal no se emite.

Así, --produccion --emitir emite en producción sin preguntar, y también lo hace un comando sin flags si la config tiene entorno produccion y emitir true. Es a propósito, para quien no quiere confirmar cada vez. Para no depender de la config (scripts, agentes), pasá siempre el entorno y --emitir o --previsualizar.

Flag Alias Tipo Valor por defecto Descripción
--testing ninguno boolean false Fuerza entorno testing en esta ejecución
--produccion ninguno boolean false Fuerza entorno produccion en esta ejecución
--json ninguno boolean config.json (false por defecto) Devuelve salida estructurada
--bruto ninguno boolean config.bruto (false por defecto) Agrega respuesta cruda de ARCA cuando exista

Si pasás una de estas opciones a un comando que no la usa (por ejemplo arcli padron 20201797064 --bruto), el comando corre igual y en stderr aparece un aviso: Aviso: `--bruto` no aplica a `arcli padron`, se ignora.

Todos los comandos con --json lo resuelven igual: el flag o, si no está, la clave de config json. También los errores de uso (opción desconocida, valor faltante, comando que no existe): con --json o json=true salen como INPUT_VALIDATION_ERROR en el formato de error JSON; sin JSON, en el mismo panel que el resto de los errores, con la sugerencia de ayuda.

Flags de comprobantes

Esta sección describe qué existe. Más abajo vas a encontrar qué hace falta en cada familia.

Ejecución

Estos flags controlan si ARCLI previsualiza o emite de verdad.

Flag Alias Tipo Valor por defecto Descripción
--previsualizar ninguno boolean lo contrario de emitir, resuelto desde flags, JSON o config Muestra la solicitud sin emitir
--emitir ninguno boolean config.emitir (false por defecto) Emite realmente en ARCA

Identidad e IVA receptor

Estos flags definen a quién le emitís y bajo qué condición de IVA.

En la práctica, siempre necesitás:

  • una identidad
  • una condición de IVA receptor
Flag Alias Tipo Valor por defecto Descripción
--cuit <numero> ninguno string ninguno CUIT del receptor: 11 dígitos, con o sin guiones
--cuil <numero> ninguno string ninguno CUIL del receptor: 11 dígitos, con o sin guiones
--dni <numero> ninguno string ninguno DNI del receptor: 7 u 8 dígitos, con o sin puntos
--consumidor-final --cfinal boolean false Documento 0 e IVA receptor consumidor-final
--iva-receptor <tipo> --ir <tipo> 'cliente-del-exterior' | 'consumidor-final' | 'iva-liberado' | 'iva-no-alcanzado' | 'monotributista-social' | 'monotributo-trabajador-independiente-promovido' | 'proveedor-del-exterior' | 'responsable-inscripto' | 'responsable-monotributo' | 'sujeto-exento' | 'sujeto-no-categorizado' Con --cuit, la del padrón; si no, config.ivaReceptor Condición IVA del receptor
--ir-ce ninguno boolean false Cliente del exterior
--ir-cf ninguno boolean false Consumidor final
--ir-il ninguno boolean false IVA liberado
--ir-ina ninguno boolean false IVA no alcanzado
--ir-ms ninguno boolean false Monotributista social
--ir-mtip ninguno boolean false Monotributo trabajador independiente promovido
--ir-pe ninguno boolean false Proveedor del exterior
--ir-ri ninguno boolean false Responsable inscripto
--ir-rm ninguno boolean false Responsable monotributo
--ir-se ninguno boolean false Sujeto exento
--ir-snc ninguno boolean false Sujeto no categorizado

El IVA receptor tiene que ser válido para la letra del comprobante. Por ejemplo, fa no admite --ir-cf y fb no admite --ir-ri. Ver IVA receptor.

Contenido

Estos flags arman el contenido del comprobante.

En casi todos los casos te va a interesar mirar primero:

  • --monto
  • --concepto
  • --fecha
  • --punto-venta
Flag Alias Tipo Valor por defecto Descripción
--cargar <ruta> ninguno string ninguno Carga datos base desde un archivo JSON
--monto <numero> -m number requerido Importe total del comprobante
--alicuota <tasa> ninguno '0' | '2.5' | '5' | '10.5' | '21' | '27' config.alicuota o 21 Alícuota de IVA (solo A y B)
--alicuota <tasa>:<monto> ninguno repetible ninguno Varias alícuotas: monto con IVA de cada una
--exento <numero> ninguno number 0 Parte exenta del monto (solo A y B)
--nogravado <numero> ninguno number 0 Parte no gravada del monto (solo A y B)
--fecha <fecha> -f string hoy Fecha del comprobante
--dia <numero> -d integer ninguno Deprecado: usá --vencimiento o --vto
--punto-venta <numero> --pv integer config.puntoVenta Punto de venta
--concepto <tipo> -c 'productos' | 'servicios' | 'productos-servicios' config.concepto productos, servicios o productos-servicios
--cs ninguno boolean false Equivale a --concepto servicios
--cp ninguno boolean false Equivale a --concepto productos
--csp ninguno boolean false Equivale a --concepto productos-servicios
--moneda <codigo> --mda string(3) config.moneda o ARS Moneda del comprobante: ISO o código de ARCA
--cotizacion-moneda <numero> --cm number oficial de ARCA Cotización de la moneda
--misma-moneda ninguno boolean false El pago se cancela en la moneda extranjera
--servicio-desde <fecha> --sd <fecha> string ninguno Fecha de inicio del servicio
--servicio-hasta <fecha> --sh <fecha> string ninguno Fecha de fin del servicio
--vencimiento <fecha> --vto <fecha> string fin del servicio o fecha del comprobante Vencimiento del pago (FchVtoPago)

En moneda extranjera (--moneda USD) hay dos formas de informar la cotización:

  • Te pagan en pesos (default): pasá --cotizacion-moneda con la cotización acordada. Sin ella, ARCLI usa la oficial de ARCA y lo avisa en "Avisos". No puede ser 1.
  • Te pagan en la moneda extranjera: pasá --misma-moneda. ARCLI consulta la cotización oficial a ARCA y la muestra en la vista previa. No se combina con --cotizacion-moneda.

En pesos la cotización siempre es 1 y --misma-moneda no aplica. Detalle en Moneda y cotización.

--moneda acepta el código ISO o el de ARCA, en mayúsculas o minúsculas: ARS y PES son lo mismo, como USD y DOL, EUR y 060 o UYU y 011. ARCLI traduce el ISO al código de ARCA antes de enviar y la vista previa muestra el nombre con el ISO (Pesos uruguayos (UYU)). Están todas las monedas de la tabla de ARCA (arcli parametros monedas) que tienen código ISO; un código que no está en esa tabla se manda tal cual y lo rechaza ARCA si no existe. Lo mismo vale para codigoMoneda en el JSON y la clave moneda de la config.

--alicuota acepta alias: general (21), reducida (10.5), incrementada (27) y cero (0). Para una factura con ítems a distintas alícuotas, repetí --alicuota TASA:MONTO (por ejemplo --alicuota general:1210 --alicuota reducida:552,50); el total se calcula solo. Ver Varias alícuotas.

--monto siempre es el total del comprobante. Si informás --exento o --nogravado, ARCLI los descuenta del total y calcula neto e IVA sobre el resto. Ejemplo: fb -m 1196 --exento 50 --nogravado 25 da neto 926,45 e IVA 194,55. El flag es --nogravado, sin guion, porque el CLI interpreta cualquier --no-* como la negación de otro flag.

Los montos usan formato argentino: el punto separa miles y la coma separa decimales. 15000, 15.000, 1500,50 y 1.500,50 son válidos; 1500.50 da error, igual que el texto sobrante (12abc) y más de 2 decimales. La cotización acepta hasta 6. Vale para --monto, --exento, --nogravado, --cotizacion-moneda y el monto de --alicuota TASA:MONTO. En el JSON de --cargar los montos son números, también con 2 decimales como máximo (la cotización, 6).

Las fechas de un comprobante

Un comprobante puede llevar hasta cuatro fechas, y cada una responde a una pregunta distinta:

Fecha Flag Responde Sin el flag
Del comprobante -f, --fecha ¿Qué día se emite? hoy
Período del servicio --sd/--servicio-desde, --sh/--servicio-hasta ¿Qué período cubre la factura? la fecha del comprobante
Vencimiento --vto, --vencimiento ¿Cuándo vence el pago? el fin del servicio, o la fecha del comprobante
Período asociado (notas) --pd/--periodo-desde, --ph/--periodo-hasta ¿Qué facturas ajusta la nota? no va: se usa el comprobante asociado (--ac…)
  • --servicio-* y --vencimiento son de facturas (y notas) de servicios. --periodo-* es solo de notas: en lugar de ajustar una factura puntual, ajustan todo lo facturado en ese período.
  • --dia está deprecado: usá --vencimiento o --vto.

Ejemplos:

# Servicio de octubre, facturado hoy, que vence el 10/11
arcli fc -m 1000 --cs --cfinal --sd 1/10 --sh 31/10 --vto 10/11

# Nota de crédito por un descuento sobre todo lo facturado en octubre de 2026
arcli ncc -m 500 --cs --cfinal --pd 1/10/2026 --ph 31/10/2026

Para facturar con otra fecha, sumá -f: por ejemplo, -f 31/10 el 3/11 (en servicios, hasta 10 días antes o después de hoy).

Las cuatro se escriben igual: formato argentino (día primero), con mes y año opcionales; sin año se toma la fecha más cercana a hoy. Detalle completo en Fechas aceptadas.

Asociados

Estos flags importan solo para notas. Si estás emitiendo una factura, podés ignorarlos.

Dicho más directo: no aplican a factura, factura-credito-electronica, recibo, fa, fb, fc, fcea, fceb, fcec ni rc.

Flag Alias Tipo Valor por defecto Descripción
--ac <atajo> ninguno string ninguno Atajo del comprobante asociado
--at <numero> ninguno integer ninguno Tipo ARCA del comprobante asociado
--asociado-punto-venta <numero> --apv <numero> integer ninguno Punto de venta del asociado
--ar <numero> ninguno integer ninguno Número del comprobante asociado
--acuit <numero> ninguno string(11) ninguno CUIT del comprobante asociado
--afecha <fecha> ninguno string ninguno Fecha del comprobante asociado
--periodo-desde <fecha> --pd <fecha> string ninguno Inicio del período asociado
--periodo-hasta <fecha> --ph <fecha> string ninguno Fin del período asociado

Crédito electrónico (FCE)

Estos flags solo aplican a comprobantes de crédito electrónica. En cualquier otro comprobante dan error, porque ARCA los rechaza (10169).

Flag Alias Tipo Valor por defecto Aplica a Descripción
--cbu <cbu> ninguno string(22) config.cbu Factura FCE CBU del emisor (obligatorio)
--alias <alias> ninguno string(6..20) config.aliasCbu Factura FCE Alias del CBU (opcional)
--transferencia <modalidad> ninguno 'sca' | 'adc' sca Factura FCE Modalidad de transferencia
--anulacion ninguno boolean false NC/ND FCE La nota anula una factura rechazada

PDF

Estos flags controlan el PDF del comprobante emitido. Los datos que se pasan acá solo van en el PDF: ARCA no los recibe. Detalle en PDF de comprobantes.

Flag Alias Tipo Valor por defecto Descripción
--exportar-pdf --pdf boolean según config.pdf Genera el PDF después de emitir
--sin-pdf ninguno boolean según config.pdf No genera el PDF
--descripcion <texto> ninguno string Según detalle Detalle del comprobante en el PDF
--condicion-venta <tipo> --cv string config.condicionVenta Condición de venta en el PDF
--sin-condicion-venta ninguno boolean ninguno Omite la condición aunque esté configurada
--receptor-nombre <texto> ninguno string ninguno Nombre o razón social del receptor en el PDF
--receptor-domicilio <texto> ninguno string ninguno Domicilio del receptor en el PDF

--condicion-venta acepta contado, tarjeta-debito, tarjeta-credito, cuenta-corriente, cheque, transferencia, otros-medios-electronicos u otra, que se imprimen con su nombre (cuenta-corriente sale "Cuenta Corriente"). Cualquier otro texto se imprime tal cual: --cv "Billetera virtual". --sin-condicion-venta permite omitirla en un comprobante aunque exista un valor en la config; no se combina con --condicion-venta ni --cv. Solo en A, B y C; en la factura E va --forma-pago, que sí viaja a ARCA.

--exportar-pdf y --sin-pdf no se combinan. Sin ninguno de los dos, decide config.pdf (preguntar por defecto: en una terminal pregunta, con --json o sin terminal no genera).

Comando arcli pdf

Instala o revisa el plugin que genera los PDFs. No viene con ARCLI porque pesa unos 160 MB.

Comando Descripción
arcli pdf Estado del plugin: instalado o no, versión y navegador
arcli pdf estado Igual que arcli pdf
arcli pdf instalar Descarga el plugin (y un navegador si no hay Chrome)
arcli pdf desinstalar Borra el plugin y el navegador que haya descargado

Todos aceptan --json. El formato está en Entrada y salida.

Comando arcli certificado

Arma el pedido del certificado de ARCA y carga el certificado que te devuelve, sin openssl. Los pasos en ARCA, con capturas, están en Cómo obtener los certificados.

Comando Descripción
arcli certificado generar [--testing|--produccion] [--alias <alias>] Crea la clave privada y el CSR para subir a ARCA, y muestra los pasos del entorno
arcli certificado importar <archivo> [--testing|--produccion] Valida el .crt que bajaste de ARCA, lo guarda y configura cert.<entorno> y key.<entorno>
  • Los archivos van a certificados/<CUIT>/, junto al archivo de config: <entorno>.key (permisos 0600), <entorno>.crt y <entorno>.csr.
  • generar usa el entorno de --testing/--produccion o, sin flag, el de la config. --alias es el nombre del certificado en ARCA (por defecto arcli).
  • Renovar sin cortar la facturación: generar deja la clave nueva como pendiente (<entorno>.nueva.key) y no toca la activa: seguís facturando con el certificado actual hasta que importar valida el nuevo. Recién ahí la pendiente pasa a ser la activa, y el par anterior queda como <entorno>.anterior.*. Si ya hay un pedido pendiente, generar frena; --reemplazar lo descarta y arma otro.
  • importar saca el entorno del certificado (ARCA firma los de testing con "Computadores Test" y los de producción con "Computadores"). Antes de tocar nada valida que sea un certificado, que sea de tu CUIT, que no esté vencido y que corresponda a la clave del pedido. Acepta archivos con BOM o finales de línea de Windows. Al terminar, dice qué cargó: entorno, CUIT, alias y vencimiento.
  • Si ya había otro certificado configurado para ese entorno, importar pregunta antes de reemplazarlo; sin terminal o con --json, hace falta --reemplazar.
  • Las rutas configuradas a mano con arcli config establecer cert.*/key.* siguen andando igual: importar solo las cambia al cargar un certificado nuevo.
  • En la terminal, el título va con el color del entorno y la carpeta, el CSR y la clave son links: con un clic se abren (en terminales que los soportan, como la de VS Code, iTerm2 o Windows Terminal; FORCE_HYPERLINK=0 los apaga).
  • Los dos aceptan --json. El formato está en Entrada y salida.

Comandos arcli estado y arcli parametros

Consultan a ARCA sin emitir nada. Usan el entorno y el punto de venta de la config (o --testing / --produccion) y aceptan --json.

Comando Descripción
arcli estado Si los servidores de ARCA responden, cuánto tardan y si el punto de venta está habilitado
arcli parametros Lista las tablas disponibles (no consulta ARCA)
arcli parametros <tabla> puntos-venta, comprobantes, documentos, alicuotas, iva-receptor, monedas, conceptos, opcionales o tributos
arcli parametros cotizacion <moneda> Cotización oficial de ARCA, por ejemplo USD
  • Las tablas muestran solo los valores vigentes hoy, salvo puntos-venta, que también lista los bloqueados o dados de baja, marcados.
  • Puntos de venta en testing: ARCA no los informa, así que parametros puntos-venta sale vacío y estado no puede verificar el punto de venta. En testing cualquier número sirve.
  • En producción, estado avisa si el punto de venta configurado no existe para tu CUIT, está bloqueado o dado de baja.
  • estado con listo: false sale con exit code 0: es un diagnóstico, no un error. Si ARCA no responde, el error es ARCA_UNAVAILABLE.
  • El JSON de cada uno está en Entrada y salida y tablas de ARCA.

Parámetros por familia de comprobantes

Acá está la parte más práctica del documento: qué necesitás para emitir cada familia y qué cambia entre una y otra.

Facturas A, B y C

Las facturas comparten la misma base.

Qué necesitás para emitir este comprobante

Obligatorio

  • monto: --monto
  • concepto: --concepto, --cs, --cp o --csp
  • IVA del receptor: --iva-receptor, --ir o un solo --ir-* (con --cuit se puede omitir: sale del padrón)

Opcional

  • identidad del receptor: --cuit, --cuil, --dni, --consumidor-final o --cfinal. Sin ninguna, es consumidor final (documento 0)
  • punto de venta si no está en config: --punto-venta o --pv
  • fecha del comprobante: --fecha
  • moneda y cotización: --moneda, --mda, --cotizacion-moneda, --cm, --misma-moneda
  • carga JSON: --cargar
  • fechas de servicio y vencimiento: --servicio-desde, --servicio-hasta, --vencimiento (y --dia, deprecado)
  • modo de ejecución: --previsualizar, --emitir
  • salida: --json, --bruto

Ejemplo mínimo funcional

Factura C simple:

arcli fc -m 300000 --cs --consumidor-final

Factura A con CUIT:

arcli fa -m 1 --cs --cuit 20168598204 --ir-ri

Resumen rápido de parámetros

Parámetro Alias Tipo Requerido Cuándo usarlo
--monto <numero> -m number Sí Siempre
--concepto <tipo> -c 'productos' | 'servicios' | 'productos-servicios' Sí Siempre
--cs, --cp, --csp ninguno boolean Condicional Si preferís el atajo en lugar de --concepto
--cuit <numero> / --cuil <numero> / --dni <numero> / --consumidor-final --cfinal string / boolean No Sin ninguna, consumidor final; una sola identidad
--iva-receptor <tipo> / --ir <tipo> / --ir-* ninguno unión de IVA receptor o boolean Sí Una sola forma; con --cuit, sin el flag sale del padrón
--punto-venta <numero> --pv <numero> integer Condicional Si no está en config
--fecha <fecha> -f string No Si querés fijar una fecha específica
--dia <numero> -d integer No Deprecado: usá --vencimiento o --vto
--servicio-desde <fecha> --sd <fecha> string Condicional Si el concepto usa servicio
--servicio-hasta <fecha> --sh <fecha> string Condicional Si el concepto usa servicio
--vencimiento <fecha> --vto <fecha> string No Servicios y facturas FCE

Qué no aplica

Las facturas no usan comprobante asociado, así que no aplican:

  • --ac
  • --at
  • --apv
  • --asociado-punto-venta
  • --ar
  • --acuit

Recibo C

arcli rc (o arcli recibo c) emite el Recibo C, tipo ARCA 15. Usa los mismos flags y validaciones que la Factura C: sin IVA discriminado, sin comprobante asociado y sin FCE. Una nota de crédito o débito C lo puede asociar con --ac rc. Detalle en Reglas de validación.

arcli rc -m 15000 --cs --cfinal

Notas de crédito y débito A, B y C

Las notas heredan todo lo de una factura, pero suman una regla importante: siempre requieren un comprobante asociado o un período asociado.

Diferencias clave con facturas

  • siempre requieren asociado: una factura puntual (--ac…) o un período (--periodo-desde y --periodo-hasta)
  • el asociado debe ser una factura compatible o, en notas C, un Recibo C (--ac rc)
  • la letra del asociado debe coincidir con la de la nota
  • --ac y --at son excluyentes

Qué necesitás para emitir este comprobante

Obligatorio

  • todo lo base de una factura
  • además:
    • un comprobante asociado: --ac o --at, con --asociado-punto-venta (o --apv), --ar y --acuit
    • o un período asociado: --periodo-desde y --periodo-hasta (entonces no van --ac, --apv, --ar ni --acuit)

Opcional

  • el resto de flags base de facturas

Ejemplo mínimo funcional

arcli nca -m 1 --cs --cuit 20168598204 --ir-ri --ac fa --apv 3 --ar 6 --acuit 20333333334

Nota por período

Si la nota ajusta un período entero y no una factura puntual (por ejemplo, un descuento sobre todo lo facturado en el mes), usá el período en lugar del bloque --ac:

arcli ncb -m 5000 --cs --cfinal --periodo-desde 01-09-2026 --periodo-hasta 30-09-2026

El período no puede terminar después de la fecha de la nota. Las notas FCE no lo aceptan.

Resumen rápido de parámetros asociados

Parámetro Alias Tipo Requerido Cuándo usarlo
--ac <atajo> ninguno string Condicional Si querés identificar el asociado por shortcut
--at <numero> ninguno integer Condicional Si querés identificar el asociado por tipo ARCA
--asociado-punto-venta <numero> --apv <numero> integer Condicional Con --ac/--at
--ar <numero> ninguno integer Condicional Con --ac/--at
--acuit <numero> ninguno string(11) Condicional Con --ac/--at; no con período; en NC/ND FCE toma el CUIT emisor

Factura de crédito electrónica A, B y C

La base es la de una factura común, más los datos de cobro que exige el régimen MiPyMEs.

Qué cambia respecto a una factura común

  • cambia el tipo ARCA
  • no usa comprobante asociado
  • lleva el CBU del emisor y la modalidad de transferencia
  • siempre lleva vencimiento de pago, incluso con concepto productos
  • la fecha del comprobante puede ir de 5 días antes a 1 día después de hoy

Qué necesitás para emitir este comprobante

Obligatorio

  • lo mismo que en una factura común
  • CBU: --cbu, o configurado una vez con arcli config establecer cbu <22 dígitos>

Opcional

  • --alias, --transferencia (por defecto sca) y --vencimiento

Ejemplo mínimo funcional

arcli fcea -m 1 --cs --cuit 20168598204 --ir-ri --cbu 0110599520000012345678

Nota de crédito electrónica y nota de débito electrónica A, B y C

Acá se combinan las dos reglas anteriores:

  • base de factura
  • tipo ARCA electrónico
  • comprobante asociado obligatorio, con su fecha

Qué necesitás para emitir este comprobante

Obligatorio

  • todo lo base de una factura
  • bloque de asociado completo, incluida --afecha
  • el asociado tiene que ser del propio emisor: --acuit se puede omitir y toma el CUIT configurado

Opcional

  • --anulacion si la nota anula una factura que el comprador rechazó

No llevan CBU, alias, transferencia ni vencimiento de pago.

Ejemplo mínimo funcional

arcli ncea -m 1 --cs --cuit 20168598204 --ir-ri --ac fcea --apv 3 --ar 6 --afecha 01-03-2026

Factura de exportación E (WSFEX)

arcli fe y arcli factura e hacen lo mismo: emiten o previsualizan una Factura de exportación E con el servicio wsfex, que tiene sus propios datos y su propio certificado autorizado. No es una letra más de la familia de facturas: no lleva concepto, IVA ni receptor con CUIT/CUIL/DNI, y en cambio lleva país de destino, incoterm, permisos de embarque e ítems reales.

Las notas de crédito y débito E todavía no están soportadas.

Credenciales

WSFEX pide un certificado autorizado al servicio wsfex. ARCLI usa exportacion.cert.<entorno> y exportacion.key.<entorno> si están configurados; si no, cae en cert.<entorno> y key.<entorno>. El par se resuelve junto: si configurás solo una de las dos claves de exportación, el comando corta antes de ir a ARCA. Ver Configuración.

Qué necesitás para emitir este comprobante

Obligatorio

  • importe total: --monto
  • cliente y domicilio en el exterior: --cliente, --domicilio-cliente
  • país de destino: --pais-destino, por código (203) o por nombre (Brasil)
  • número del comprobante: --numero, el siguiente al último E emitido en ese punto de venta (1 si es el primero). ARCLI todavía no lo puede consultar: @arcasdk/core arma mal el pedido de FEXGetLast_CMP
  • actividad: --actividad o la clave exportacion.actividad de la config, con un código de la tabla de actividades de WSFEX

Opcional

  • --id-impositivo y --cuit-pais (sin --cuit-pais se resuelve desde el país de destino; si ARCA no publica un CUIT para ese país, el flag es obligatorio)
  • --tipo-expo (1 bienes, 2 servicios, 4 otros; por defecto 2)
  • --item para el detalle real; sin ítems va un renglón con --descripcion
  • --incoterm y --incoterms-desc, --idioma, --forma-pago (por defecto Transferencia Internacional)
  • --permiso y --permiso-existente para permisos de embarque (solo con --tipo-expo 1; en 2 y 4 ARCA exige Permiso_existente vacío)
  • --id-solicitud si lo querés fijar a mano (por defecto, el siguiente de WSFEX)
  • punto de venta si no está en config: --punto-venta o --pv
  • moneda y cotización: --moneda (por defecto DOL), --mda, --cotizacion-moneda, --cm, --misma-moneda
  • PDF: --exportar-pdf, --pdf o --sin-pdf
  • modo y salida: --previsualizar, --emitir, --json, --bruto

Sin --tipo-expo, --moneda ni --forma-pago, la E sale de servicios (Tipo_expo 2), en dólares (DOL) y con forma de pago Transferencia Internacional. Las claves moneda y cotizacion de la config son de los comprobantes locales y no aplican a exportación.

La actividad no tiene default: cada emisor tiene la suya. La tabla de actividades de WSFEX (FEXGetPARAM_Actividades) no es la del padrón y es más chica (por ejemplo, 620900 no está y 620100 sí), así que un código que no está es error de validación antes de ir a ARCA, con las actividades que empiezan igual.

El pago de una exportación se hace en la moneda extranjera del comprobante (Moneda_Id/Moneda_ctz). Si además se cobra en esa misma moneda, --misma-moneda manda CanMisMonExt en S, que es el campo de WSFEX que lo declara; sin el flag va en N.

La E no lleva comprobantes asociados ni datos opcionales todavía, así que solicitud no incluye Cmps_asoc ni Opcionales: ARCA rechaza esos bloques vacíos (error 1820 el primero).

Ejemplo mínimo funcional

arcli fe --monto 1500 --cliente "ACME LLC" --domicilio-cliente "123 Main St" --pais-destino 203 \
  --numero 1 --actividad 620100

Con los datos del receptor del exterior (CUIT del país, ID impositivo, razón social y domicilio), ítems, incoterm y salida JSON:

arcli fe -m 1500 --cliente "ACME LLC" --id-impositivo "12-3456789" --domicilio-cliente "123 Main St" \
  --pais-destino 212 --cuit-pais 55000002126 --tipo-expo 1 --incoterm FOB --numero 2 --actividad 620100 \
  --item "001|Bienes varios|1|1500|unidad" --emitir --json

Cobrando en dólares, con la cotización de aduana de ARCA (sin --cm) y el pago en la misma moneda (--misma-moneda):

arcli fe -m 1500 --cliente "ACME LLC" --domicilio-cliente "123 Main St" --pais-destino 212 \
  --numero 3 --actividad 620100 --misma-moneda --previsualizar

Resumen rápido de parámetros

Parámetro Alias Tipo Requerido Cuándo usarlo
--monto <numero> -m number Sí Siempre
--cliente <texto> ninguno string Sí Siempre: nombre o razón social del cliente del exterior
--domicilio-cliente <texto> ninguno string Sí Siempre
--pais-destino <codigo|nombre> ninguno string Sí Siempre: código de ARCA o nombre tal como lo informa ARCA
--id-impositivo <texto> ninguno string No ID fiscal del cliente en su país
--cuit-pais <numero> ninguno integer No CUIT del país del cliente; sin el flag sale de la tabla de ARCA
--tipo-expo <1|2|4> ninguno 1 bienes, 2 servicios, 4 otros No Por defecto 2 (servicios)
--actividad <codigo> ninguno integer Condicional Si no está exportacion.actividad en la config; código de la tabla de WSFEX
--item <partes> ninguno string repetible No codigo|descripcion|cantidad|precio|unidad; la suma debe dar --monto
--incoterm <codigo> ninguno string No Por ejemplo FOB; se valida contra la tabla de ARCA
--incoterms-desc <texto> ninguno string No Por defecto, la descripción de la tabla de ARCA
--idioma <codigo> ninguno integer No 1 español (por defecto), 2 inglés, 3 portugués
--forma-pago <texto> ninguno string No Por defecto Transferencia Internacional
--permiso <id> ninguno string repetible No Permiso de embarque ya existente; requiere --permiso-existente y --tipo-expo 1
--permiso-existente ninguno boolean No Marca que los permisos informados ya están en ARCA
--numero <numero> ninguno integer Sí El siguiente al último E de ese punto de venta
--id-solicitud <numero> ninguno integer No Por defecto, el siguiente de WSFEX
--punto-venta <numero> --pv <numero> integer Condicional Si no está en config
--fecha <fecha> -f string No No admite fechas futuras
--fecha-pago <fecha> ninguno string No Por defecto, la fecha del comprobante
--moneda <codigo> --mda string No Código ISO o de ARCA, por ejemplo USD o DOL; por defecto DOL
--cotizacion-moneda <numero> --cm number No Sin flag se usa la última cotización de aduana publicada por ARCA
--misma-moneda ninguno boolean No El pago se cancela en la misma moneda extranjera: manda CanMisMonExt en S
--observaciones <texto> ninguno string No Observaciones del comprobante
--obs-comerciales <texto> ninguno string No Observaciones comerciales
--descripcion <texto> ninguno string No Solo sin --item; también va al PDF
--cargar <ruta> ninguno string No Un objeto con un comprobante, no un lote

Los flags globales (--testing, --produccion, --json, --bruto) y los de modo (--previsualizar, --emitir) funcionan igual que en el resto de los comprobantes.

Ítems

Cada --item se separa con | para no pelear con las comas de los importes. La forma completa es codigo|descripcion|cantidad|precio|unidad; con cuatro partes se omite el código y con tres la unidad, que queda en unidad (código 7 de ARCA). La unidad puede ser el código numérico o el nombre de la tabla de unidades, que se compara sin mayúsculas y acepta singular o plural (unidad o unidades).

arcli fe -m 1500 --cliente "ACME LLC" --domicilio-cliente "123 Main St" --pais-destino 203 \
  --numero 4 --actividad 620100 --item "001|Servicio de consultoría|1|1000|unidad" \
  --item "002|Soporte|2|250|unidades" --previsualizar

WSFEX no valida que Imp_total coincida con la suma de los ítems, así que ARCLI lo valida antes de ir a ARCA: si la suma no da --monto, el comando corta con un error de validación.

Qué no aplica

Estos flags de facturación no existen en fe, que los rechaza como opción desconocida. arcli factura e comparte el comando con A, B y C, así que los acepta pero los saltea con un aviso en "Avisos" (y en avisos del JSON); lo mismo pasa al revés con los flags de la E en arcli factura a, b o c:

  • concepto (--concepto, --cs, --cp, --csp) y fechas de servicio (--servicio-desde, --servicio-hasta, --vencimiento y --dia, deprecado)
  • identidad del receptor (--cuit, --cuil, --dni, --consumidor-final) e --iva-receptor
  • IVA y alícuotas (--alicuota, --exento, --nogravado; tampoco alicuotas en el JSON)
  • comprobante asociado (--ac, --at, --apv, --ar, --acuit, --afecha, --anulacion, --periodo-desde, --periodo-hasta)
  • datos de cobro FCE (--cbu, --alias, --transferencia); el régimen FCE (verificarFce en la config) tampoco se consulta

Los defaults de config de esos campos (concepto, IVA receptor, alícuota, CBU) no se usan al emitir una E.

Vista previa, numeración y PDF

  • La vista previa consulta las tablas de WSFEX (países, monedas, unidades, incoterms, idiomas, actividades), la cotización y el ID de la solicitud, pero no emite.
  • WSFEX numera por punto de venta y tipo de comprobante. --numero es obligatorio mientras @arcasdk/core no permita consultar el último (FEXGetLast_CMP); si te equivocás, ARCA rechaza el comprobante. El ID de la solicitud sí se consulta (FEXGetLast_ID); fijalo con --id-solicitud si emitís en paralelo.
  • El PDF se genera después de emitir, como en el resto de los comprobantes. Se guarda como factura-e_<pv>-<numero>.pdf y usa el diseño de exportación: ítems reales, país de destino, CUIT del país, ID impositivo, divisa, forma y fecha de pago, incoterm y la leyenda de IVA exento. Ver PDF.
  • Un comprobante rechazado por WSFEX sale como respuesta válida con exit code 2, igual que en las letras A, B y C.

El JSON de salida y el de --cargar están en Entrada y salida.

Ejemplos útiles

arcli ejemplos

Muestra ejemplos seguros y listos para copiar de todos los comprobantes soportados.

arcli ejemplos

La salida incluye versión mínima, versión completa, forma larga y forma corta para cada comprobante. Todos usan --previsualizar para evitar emisiones reales por error.

Básico (manual)

arcli fc -m 300000 --cs --consumidor-final

Desde JSON

arcli fc --cargar ./voucher.json --json

Usando config

Si ya guardaste cuit, puntoVenta, concepto e ivaReceptor en config:

arcli config establecer concepto servicios
arcli config establecer ivaReceptor consumidor-final
arcli fc -m 300000

Debug

arcli fa -m 1 --cs --cuit 20168598204 --ir-ri --emitir --json --bruto

Consultar comprobantes emitidos

Dos comandos de solo lectura para ver lo que ya está emitido en ARCA, sin abrir el modo interactivo:

arcli ultimos fb                  # últimas 15 facturas B del punto de venta configurado
arcli ultimos nca --cantidad 25   # últimas 25 notas de crédito A
arcli consultar fb 14             # detalle de la factura B número 14
arcli consultar fb 14 --json      # lo mismo, en JSON
Comando Argumentos Flags
arcli ultimos <tipo> tipo: atajo del comprobante (fa, fb, nca, fcea…) --cantidad <n> (1 a 50; por defecto config.comprobantesPorLista o 15), --pv / --punto-venta, --json, --testing, --produccion
arcli consultar <tipo> <numero> tipo y número del comprobante --pv / --punto-venta, --json, --testing, --produccion

Sin --pv usan el punto de venta de la config. Todavía no aceptan la Factura de exportación E (fe). Si el comprobante no existe, consultar termina con el error VOUCHER_NOT_FOUND. El formato del JSON está en Entrada y salida.

Consultar el régimen FCE

arcli fce-obligado <cuit> le pregunta a ARCA si un receptor está obligado a recibir Factura de Crédito Electrónica y desde qué monto. Con eso sabés si corresponde fa/fb/fc o fcea/fceb/fcec.

arcli fce-obligado 30546689979
arcli fce-obligado 30546689979 --fecha 15/10 --json
Flag Alias Descripción
--fecha <fecha> -f Fecha de emisión a consultar; por defecto hoy
--json, --testing, --produccion ninguno Flags globales

Usa el servicio wsfecred, que hay que autorizar aparte de wsfe. Ver Autorizar el servicio web.

Si activás arcli config establecer verificarFce true, la misma consulta corre en cada factura con CUIT del receptor y deja un aviso si el comprobante no coincide con el régimen. Por ejemplo, una fa a un receptor obligado por encima del mínimo. El aviso no frena la emisión. Ver Régimen FCE del receptor.

El JSON está en Entrada y salida.

Consultar el padrón

arcli padron <cuit> muestra lo que ARCA tiene de un CUIT: nombre o razón social, domicilio fiscal, condición frente al IVA, impuestos, categoría de monotributo y actividad principal.

arcli padron 20201797064
arcli padron 20201797064 --json
Flag Alias Descripción
--json, --testing, --produccion ninguno Flags globales

La condición IVA sale de los impuestos activos: monotributo es responsable-monotributo, IVA es responsable-inscripto e IVA exento es sujeto-exento. Con otros datos queda sin informar (condicionIva: null). Si el CUIT no está en el padrón, termina con el error TAXPAYER_NOT_FOUND. En testing el padrón tiene datos ficticios: 20201797064 devuelve datos completos. El JSON está en Entrada y salida.

Usa el servicio ws_sr_constancia_inscripcion, que hay que autorizar aparte de wsfe. Ver Autorizar el servicio web.

IVA receptor desde el padrón

Al facturar con --cuit sin --ir (ni ivaReceptor en el JSON), ARCLI consulta el padrón y usa esa condición IVA, aunque la config tenga un ivaReceptor por defecto. También completa el nombre y el domicilio del receptor para el PDF, si no los pasaste. La vista previa lo marca: IVA receptor Responsable inscripto (padrón).

Caso Resultado
--ir, --ir-* o ivaReceptor en el JSON Se usa ese valor; no se consulta el padrón
El padrón informa la condición Se usa la del padrón
El padrón no responde o no informa la condición Se usa ivaReceptor de la config, con un aviso en avisos
Lo mismo, sin ivaReceptor en la config Error INPUT_VALIDATION_ERROR: indicala con --ir

Para no consultarlo: arcli config establecer consultarPadron false. El modo interactivo hace la misma consulta al cargar un CUIT y propone esa condición, marcada "(según el padrón)".

Autocompletado

Completa con Tab comandos, flags y valores en bash, zsh y fish: atajos (arcli ultimos nc<Tab>), flags (arcli fc --ir-<Tab>), valores de --iva-receptor, --concepto, --alicuota, --moneda, --transferencia y --ac, claves de config y sus valores (arcli config establecer entorno <Tab>), tablas de parametros y letras de las familias. Donde va una ruta (--cargar), completa archivos.

arcli completado instalar        # con el shell de $SHELL; o: arcli completado instalar zsh
arcli completado                 # ¿está instalado?
arcli completado desinstalar

arcli completado instalar agrega al archivo de inicio del shell una línea marcada con un comentario # arcli y desinstalar saca solo eso:

Shell Archivo
zsh ~/.zshrc (o $ZDOTDIR/.zshrc)
bash ~/.bashrc; en macOS, el primero que exista de ~/.bash_profile, ~/.bash_login y ~/.profile
fish ~/.config/fish/completions/arcli.fish, o $XDG_CONFIG_HOME/fish/completions/arcli.fish si está definida (archivo propio; desinstalar lo borra)

Pedir el comando ya es la confirmación: no vuelve a preguntar, como arcli pdf instalar. Con --json devuelve { "cambio", "instalado", "ruta", "shell" }. Si no se puede saber el shell, da INPUT_VALIDATION_ERROR y hay que indicarlo. Un programa no puede cambiar la terminal que ya está abierta: después de instalar, abrí una nueva.

arcli completado <bash|zsh|fish> solo imprime el script, para instalarlo a mano. Cada Tab le pregunta a la versión instalada qué sigue, así que después de actualizar arcli no hay que reinstalar nada. En el modo interactivo está en Configuración → Autocompletado.

Acceso directo

Crea un ícono que abre ARCLI en su modo interactivo con doble clic, sin escribir comandos:

arcli acceso-directo                # en el escritorio
arcli acceso-directo ~/Documentos   # en otra carpeta, que tiene que existir
Sistema Qué crea Dónde quedan el lanzador y el ícono
macOS ARCLI.app Dentro de la .app
Windows ARCLI.lnk En acceso-directo/, junto al archivo de config
Linux ARCLI.desktop En acceso-directo/, junto al archivo de config

Abre una terminal con ARCLI. Si termina con un error, la ventana espera un Enter para que se pueda leer. Con --json devuelve { "reemplazado", "ruta", "usaArcliInstalado" }.

  • Creado desde el código fuente (yarn dev acceso-directo): abre el arcli instalado en lugar del .ts del repo, que Node no puede correr sin el cargador de yarn dev. Lo avisa al crearlo y en usaArcliInstalado. Si no hay un arcli instalado, el ícono avisa que falta instalarlo.

  • Repetirlo: actualiza el acceso directo de esa carpeta. En macOS y Linux, si ya hay un archivo con ese nombre que no creó ARCLI, da INPUT_VALIDATION_ERROR y no lo toca.

  • Si cambiás Node o ARCLI de lugar: el acceso directo guarda sus rutas al crearse. Si ya no están, prueba con el arcli del PATH; si tampoco anda, volvé a correr el comando.

  • Quitarlo: borrá el ícono como cualquier archivo.

  • En el modo interactivo está en Configuración → Acceso directo en el escritorio.

Configuración

Comandos config y claves disponibles: Configuración.

Estabilidad

Todos los comandos de esta referencia son estables, salvo storybook, una herramienta interna de desarrollo que no aparece en la ayuda ni en llms.txt.

Ver también