Skip to content

Facturación Electrónica

El servicio electronicBillingService permite la gestión completa de comprobantes electrónicos (Facturas, Notas de Crédito, Débito, etc.) a través del Web Service de Facturación Electrónica (WSFE).


Crear Comprobante (CAE)

El método principal para generar una factura y obtener el CAE.

Parámetros de createVoucher

ParámetroTipoDescripción
CantRegnumberCantidad de registros (normalmente 1)
PtoVtanumberPunto de venta (1-9999)
CbteTiponumberTipo de comprobante (ver tabla)
ConceptonumberTipo de concepto (ver tabla)
DocTiponumberTipo de documento del receptor (ver tabla)
DocNronumberNro de documento (0 para Consumidor Final)
CbteDesdenumberNúmero de comprobante desde
CbteHastanumberNúmero de comprobante hasta
CbteFchstringFecha en formato YYYYMMDD
ImpTotalnumberImporte total
ImpNetonumberImporte neto gravado
ImpIVAnumberImporte IVA total
ImpTotConcnumberImporte no gravado
ImpOpExnumberImporte operaciones exentas
ImpTribnumberImporte de tributos
MonIdstringMoneda (PES, DOL, etc.)
MonCotiznumberCotización de la moneda
IvaIVA[]Alícuotas de IVA aplicadas
TributosTributo[](opcional) Tributos adicionales
CbtesAsocCbteAsoc[](opcional) Comprobantes asociados (NC/ND)

Tipos de Comprobante (CbteTipo)

CódigoDescripción
1Factura A
2Nota de Débito A
3Nota de Crédito A
6Factura B
7Recibo B
8Nota de Débito B
9Nota de Crédito B
11Factura C
12Recibo C
13Nota de Débito C
14Nota de Crédito C
51Factura M
81Tique Factura A
82Tique Factura B
83Tique
91Remito R
118Tique Factura T
201Factura de Crédito MiPyMEs (FCE) A
206Factura de Crédito MiPyMEs (FCE) B
211Factura de Crédito MiPyMEs (FCE) C

Tipos de Documento (DocTipo)

CódigoDescripción
80CUIT
86CUIL
87DNI
89Libreta Cívica (LC)
90Extranjeros
91Pasaporte
92Documento Mercosur
99Consumidor Final

Conceptos (Concepto)

CódigoDescripción
1Productos
2Servicios
3Productos y Servicios

Códigos de Alícuota IVA (Iva[].Id)

IDTasa
30%
410.5%
521%
627%
75%
82.5%

Respuesta (CreateVoucherResultDto)

createVoucher y createNextVoucher devuelven un CreateVoucherResultDto con los campos principales del CAE y, si AFIP los informa, errores u observaciones estructurados.

ts
interface CreateVoucherResultDto {
  CAE?: string;
  CAEFchVto?: string;
  Resultado?: "A" | "R" | "P";
  Reproceso?: "S" | "N";
  PtoVta?: number;
  CbteTipo?: number;
  // ... FECAEDetResponse, errors, etc.
}

Los mismos métodos existen como createInvoice y createNextInvoice (equivalentes a createVoucher y createNextVoucher).

Ejemplo Básico

ts
const invoice = await arca.electronicBillingService.createVoucher({
  CantReg: 1,
  PtoVta: 1,
  CbteTipo: 6, // Factura B
  Concepto: 1, // Productos
  DocTipo: 99, // Consumidor Final
  DocNro: 0,
  CbteDesde: 1,
  CbteHasta: 1,
  CbteFch: "20240101", // String en formato YYYYMMDD
  ImpTotal: 121,
  ImpTotConc: 0,
  ImpNeto: 100,
  ImpOpEx: 0,
  ImpIVA: 21,
  ImpTrib: 0,
  MonId: "PES",
  MonCotiz: 1,
  Iva: [
    {
      Id: 5, // 21%
      BaseImp: 100,
      Importe: 21,
    },
  ],
});
Ver respuesta completa
json
{
  "CAE": "74154876254185",
  "CAEFchVto": "20240111",
  "Resultado": "A",
  "Reproceso": "N",
  "PtoVta": 1,
  "CbteTipo": 6
}

Siguiente Comprobante Automático

createNextVoucher combina getLastVoucher + createVoucher en un solo paso. No requiere CbteDesde ni CbteHasta.

ts
const invoice = await arca.electronicBillingService.createNextVoucher({
  CantReg: 1,
  PtoVta: 1,
  CbteTipo: 6,
  Concepto: 1,
  DocTipo: 99,
  DocNro: 0,
  CbteFch: "20240501",
  ImpTotal: 121,
  ImpTotConc: 0,
  ImpNeto: 100,
  ImpOpEx: 0,
  ImpIVA: 21,
  ImpTrib: 0,
  MonId: "PES",
  MonCotiz: 1,
  Iva: [{ Id: 5, BaseImp: 100, Importe: 21 }],
});

Consultar Último Comprobante

Obtiene el número del último comprobante autorizado para un punto de venta y tipo específico.

ts
const lastVoucher = await arca.electronicBillingService.getLastVoucher(1, 6);
// getLastVoucher(puntoVenta, tipoComprobante)

if (lastVoucher.cbteNro !== undefined) {
  console.log(`Último comprobante: ${lastVoucher.cbteNro}`);
}

Información de Comprobante

Recupera los datos de un comprobante ya emitido.

ts
const voucherInfo = await arca.electronicBillingService.getVoucherInfo(1, 1, 6);
// getVoucherInfo(nroComprobante, puntoVenta, tipoComprobante)

if (voucherInfo) {
  console.log("Datos del comprobante:", voucherInfo);
} else {
  console.log("El comprobante no existe.");
}

Tablas de Referencia

Métodos auxiliares para obtener los códigos y tipos disponibles en ARCA.

ts
const salesPoints = await arca.electronicBillingService.getSalesPoints();
ts
const voucherTypes = await arca.electronicBillingService.getVoucherTypes();
ts
const conceptTypes = await arca.electronicBillingService.getConceptTypes();
ts
const documentTypes = await arca.electronicBillingService.getDocumentTypes();
ts
const aliquotTypes = await arca.electronicBillingService.getAliquotTypes();
ts
const currencies = await arca.electronicBillingService.getCurrencyTypes();
ts
const taxTypes = await arca.electronicBillingService.getTaxTypes();
ts
const optionalTypes = await arca.electronicBillingService.getOptionalTypes();
ts
const ivaReceptorTypes =
  await arca.electronicBillingService.getIvaReceptorTypes();
// Parámetro opcional: claseCmp (string)
ts
const countries = await arca.electronicBillingService.getCountries();
ts
const activities = await arca.electronicBillingService.getActivities();
ts
const quotation = await arca.electronicBillingService.getQuotation("DOL");
ts
const maxRecords =
  await arca.electronicBillingService.getMaxRecordsPerRequest();

CAEA (Código de Autorización Electrónico Anticipado)

El flujo CAEA permite emitir comprobantes sin solicitar CAE en cada operación, usando un código anticipado por quincena.

Periodo y orden

  • period: entero YYYYMM (ej. 202406 para junio 2024).
  • order: 1 (1.ª quincena) o 2 (2.ª quincena).
ts
const period = 202406;
const order = 1;

const caeaResponse = await arca.electronicBillingService.getCaea(period, order);
const caea = caeaResponse.resultGet?.caea;

Consultar CAEA vigente

ts
const consulted = await arca.electronicBillingService.consultCaea(period, order);

Sin movimiento en un punto de venta

ts
const informed = await arca.electronicBillingService.informCaeaNoMovement(
  caea,
  puntoVenta,
);

const status = await arca.electronicBillingService.consultCaeaNoMovement(
  caea,
  puntoVenta,
);

Informar comprobante con CAEA

informCaeaUsage recibe el payload del comprobante (misma forma que createVoucher) más el código CAEA:

ts
const usage = await arca.electronicBillingService.informCaeaUsage(
  {
    CantReg: 1,
    PtoVta: 1,
    CbteTipo: 6,
    Concepto: 1,
    DocTipo: 99,
    DocNro: 0,
    CbteDesde: 1,
    CbteHasta: 1,
    CbteFch: "20240615",
    ImpTotal: 121,
    ImpTotConc: 0,
    ImpNeto: 100,
    ImpOpEx: 0,
    ImpIVA: 21,
    ImpTrib: 0,
    MonId: "PES",
    MonCotiz: 1,
    Iva: [{ Id: 5, BaseImp: 100, Importe: 21 }],
  },
  caea,
);

Disponibilidad en homologación

CAEA puede no estar habilitado para todos los periodos en testing. La respuesta incluye errors estructurados de AFIP cuando el código no está disponible.


Estado del Servidor

Verifica si los servicios de ARCA están operativos.

ts
const status = await arca.electronicBillingService.getServerStatus();
console.log(status);

Made by Rodrigo Alcorta with ❤️