Codificacin de cdigo QR AFIP

RunLLM
RunLLM

El código QR de AFIP debe cumplir con una estructura y codificación específica: los datos de la factura se serializan en JSON, se codifican en Base64 (URL-safe), y se incluyen como parámetro p en la URL oficial de AFIP. No se puede usar cualquier formato; hay que seguir la especificación oficial para que el QR sea válido y los datos se autocompleten correctamente al escanearlo, según documentación oficial y especificaciones de AFIP.

¿Te gustaría ver un ejemplo de cómo armar y codificar el QR en algún lenguaje específico?

Sources:

Mauricio Calgaro
Mauricio Calgaro

Dame un ejemplo en node js

@user Dame un ejemplo en node js

RunLLM
RunLLM

Claro, aquí tienes un ejemplo en Node.js usando la librería qrcode. Primero, arma el objeto con los datos requeridos, conviértelo a JSON, codifícalo en Base64 y genera la URL para el QR. Luego, usa la librería para crear la imagen:

const QRCode = require('qrcode');

const QRCodeData = {
  ver: 1,
  fecha: '2024-06-01',
  cuit: 20304050607,
  ptoVta: 1,
  tipoCmp: 6,
  nroCmp: 32,
  importe: 150,
  moneda: 'ARS',
  ctz: 1,
  tipoDocRec: 80,
  nroDocRec: 20304050607,
  tipoCodAut: 'E',
  codAut: 12345678912345
};

const QRCodeText = 'https://www.afip.gob.ar/fe/qr/?p=' + Buffer.from(JSON.stringify(QRCodeData)).toString('base64');

QRCode.toFile('qr-afip.png', QRCodeText, function (err) {
  if (err) throw err;
  console.log('QR generado correctamente');
});

Este ejemplo sigue la especificación oficial y la guía de Afip SDK para Node.js. ¿Necesitás más detalles sobre algún paso?

Sources:

Mauricio Calgaro
Mauricio Calgaro

@user me podrias dar mas detalle de cada campo del QRCodeData? esa imagen PNG creada como la puedo exportar a un PDF?

RunLLM
RunLLM

Cada campo de QRCodeData tiene un significado específico según la especificación de AFIP:

  • ver: versión del formato (siempre 1).
  • fecha: fecha de emisión (YYYY-MM-DD).
  • cuit: CUIT del emisor.
  • ptoVta: punto de venta.
  • tipoCmp: tipo de comprobante (ej. 6 = Factura B).
  • nroCmp: número de comprobante.
  • importe: importe total.
  • moneda: moneda (ej. 'ARS').
  • ctz: cotización de la moneda.
  • tipoDocRec: tipo de documento del receptor (80 = CUIT, 96 = DNI, etc.).
  • nroDocRec: número de documento del receptor.
  • tipoCodAut: tipo de código de autorización ('E' para CAE, 'A' para CAEA).
  • codAut: CAE o CAEA obtenido al autorizar la factura.
    Referencia: Especificaciones AFIP, Afip SDK.

Para exportar la imagen PNG del QR a un PDF, primero genera el HTML de la factura incluyendo la imagen (por ejemplo, usando <img src="qr-afip.png">), y luego usa una librería como puppeteer o la API de Afip SDK para convertir ese HTML a PDF. Ejemplo de flujo: generar HTML → convertir a PDF. ¿Te gustaría ver un ejemplo de código para este proceso?

Sources:

Mauricio Calgaro
Mauricio Calgaro

@user en la Constatación de Comprobantes con CAE cuando cargo el url del codigo qr el ptovta y tipoCmp no me agrega los ceros a la izquierda y me da error en la constatación

RunLLM
RunLLM

El error ocurre porque AFIP espera que los campos ptoVta (punto de venta) y tipoCmp (tipo de comprobante) tengan ceros a la izquierda según el formato requerido en la vista de constatación, pero en el QR deben ir como números enteros, sin ceros a la izquierda. El QR está bien generado, pero al cargar manualmente en la web de AFIP, debes completar esos campos con el formato correcto (por ejemplo, ptoVta como "0001" y tipoCmp como "006") para evitar el error. Esto es una limitación de la interfaz de AFIP, no del QR ni del SDK, según experiencias de la comunidad.

¿Te gustaría una guía paso a paso para completar esos campos correctamente en la web de AFIP?

Sources: