Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-qr-afip
Nodo comunitario de n8n que lee el QR fiscal de AFIP/ARCA de una factura electrónica argentina en PDF y devuelve sus datos en JSON.
Sirve para controlar lo que otro paso (OCR, IA, carga manual) extrajo de la factura contra los datos que el emisor informó al pedir el CAE.
Instalación
En n8n: Configuración → Community nodes → Install y escribir n8n-nodes-qr-afip. Lo tiene que hacer un usuario owner o admin.
No necesita salida a internet ni credenciales: el render del PDF (mupdf) y la lectura del QR (zxing) corren en WebAssembly dentro de n8n.
Uso
El nodo Leer QR AFIP recibe items con un PDF en un campo binario (por defecto data, el que deja el nodo de Google Drive o el de HTTP Request) y agrega el resultado en un campo del JSON (por defecto qrAfip). El JSON original y el binario pasan sin cambios, así que se puede poner en serie antes de otros nodos que usen el mismo PDF.
| Parámetro | Default | Descripción |
|---|---|---|
| Campo binario del PDF | data |
Campo binario de entrada |
| Campo de salida | qrAfip |
Dónde se deja el resultado |
| Máximo de páginas a revisar | 30 |
Se revisan primero la primera y la última página. 0 = todas |
| CUIT receptor esperado | vacío | Si se indica, derivados.receptorEsperado dice si el QR está emitido a ese CUIT |
Con Settings → On Error → Continue los errores (por ejemplo, un item sin binario) quedan en el resultado en lugar de cortar la ejecución.
Resultado
{
"ok": true,
"encontrado": true,
"pagina": 1,
"paginas": 1,
"qr": {
"ver": 1, "fecha": "2026-01-15", "cuit": "30712345678", "ptoVta": 12, "tipoCmp": 1, "nroCmp": 1234,
"importe": 121000.50, "moneda": "PES", "ctz": 1, "tipoDocRec": 80, "nroDocRec": "30123456789",
"tipoCodAut": "E", "codAut": "76123456789012"
},
"derivados": { "letra": "A", "nroFormateado": "00012A00001234", "receptorEsperado": true },
"parser": "tolerante",
"advertencias": ["JSON del QR con números con ceros a la izquierda"],
"url": "https://www.afip.gob.ar/fe/qr/?p=...",
"ms": 175
}
- Sin QR:
ok: false,encontrado: falseymotivo. - QR encontrado pero ilegible:
ok: false,encontrado: true,motivoyjsonCrudo. cuit,nroDocRecycodAutvan como texto. El resto de los campos numéricos, como número.nroFormateado= punto de venta (5 dígitos) + letra + número (8 dígitos).
Tolerancias
El JSON del QR debería ser válido, pero en facturas reales no siempre lo es. El nodo recupera estos casos y lo informa en parser: "tolerante" y en advertencias:
- Números con ceros a la izquierda (
"ptoVta":0210). - Texto sin comillas (
"tipoCodAut":E) y nombres de campo con otra capitalización ("ptovta"). - El JSON duplicado dentro del mismo QR: se toma el último bloque completo.
- Comillas o llaves de más alrededor del JSON.
- Base64 partido en líneas, url-safe o sin relleno
=. - QR en cualquier página, no solo en la primera.
- QR estampado como imagen con fondo transparente encima del texto: si no aparece en la página renderizada, se leen las imágenes del PDF de a una (lo transparente en blanco, con margen y agrandadas). En ese caso el resultado trae
origen: "imagen embebida".
No se recuperan los PDF dañados que mupdf no puede abrir.
Licencia
AGPL-3.0-or-later, por depender de mupdf (AGPL-3.0-or-later). zxing-wasm es MIT.