facturacion-es

Nodos n8n para Facturación Electrónica El Salvador (DTE): Build, Sign (JWS RS512), MH Auth/Send/Events, Store+QR. TEST-ONLY con cert autofirmado.

Package Information

Released: this month
Downloads: 0 weekly / 0 monthly
Latest Version: 0.1.0

Available Nodes

Documentation generating…

Documentation

n8n-nodes-facturacion-es

Nodos community para n8n: Facturación Electrónica de El Salvador (DTE, Ministerio de Hacienda).

Crea, firma (JWS RS512), envía, consulta e invalida DTEs, genera QR de verificación pública y guarda respaldo local. Incluye modo prueba para desarrollar el flujo sin certificado ni conexión a Hacienda.

Nodos

Nodo Qué hace
Facturación El Salvador (facturacionEs) Nodo principal. Recursos: Documento (Crear, Crear + Firmar + Enviar, Firmar, Enviar, Consultar), Eventos (Invalidar, Contingencia, Retorno), Herramientas (Verificar JWS, Generar QR).
DTE Firmar [Binario] (dteFirmarBinario) Firma un DTE con el cert .crt XML que llega como binary (Drive Download / S3 Get / HTTP Request). Sin credenciales; passwordPri va como parámetro. Para rotación externa o multi-emisor.

Nodos ocultos legacy (compatibilidad con workflows viejos, usar el agrupador): DteBuild, DteSign, MhAuth, MhSend, MhEvents, DteStoreQr.

Tipos DTE soportados

01 FE, 03 CCFE, 04 NRE, 05 NCE, 06 NDE, 07 CRE, 08 CLE, 09 DCLE, 11 FEXE, 14 FSEE, 15 CDE. Validación estructural local (ajv); no sustituye los schemas oficiales de MH.

Credencial: FacturacionES cuenta

Una sola credencial por ambiente (crea una para pruebas y otra para producción):

Campo Descripción
NIT (user) NIT del emisor. Se usa como user en /seguridad/auth y como kid del JWS.
Cert XML / Cert Path Contenido XML del .crt de MH, o ruta al archivo.
Password certificado Password de la clave privada (se valida contra SHA512 == <clave> del XML).
Password aplicación MH Clave de aplicación para /seguridad/auth.
Base URL Pruebas: https://apitest.dtes.mh.gob.sv · Producción: https://api.dtes.mh.gob.sv. El ambiente (00/01) se deriva solo de esta URL (apitest → 00).
Timeout / Reintentos Defecto 8000 ms y 2 reintentos.

Los secretos viven solo en el vault cifrado de n8n; nunca se loguean ni se guardan en el workflow.

Instalación

En tu instancia n8n (local):

cd ~/.n8n
npm install n8n-nodes-facturacion-es

Reinicia n8n. O vía variable de entorno:

N8N_CUSTOM_EXTENSIONS=n8n-nodes-facturacion-es

Con Docker, instala dentro del contenedor o monta ~/.n8n/nodes:

docker exec -u node -it n8n-local npm install -C ~/.n8n n8n-nodes-facturacion-es
docker restart n8n-local

Requiere n8n con community nodes habilitados y Node 20+.

Uso

Flujo típico (nodo Facturación El Salvador):

  1. Crear — arma el DTE (manual por campos o JSON completo). Emite { dte }. No necesita credencial.
  2. Firmar — firma JWS compacto RS512 con el cert de la credencial. Emite { dte, jws, payloadCanonico, nit }.
  3. Enviar — POST /fesv/recepciondte { ambiente, idEnvio, version, tipoDte, documento: jws }. Con timeout consulta antes de reenviar; el rechazo devuelve observaciones (no reenvía igual).
  4. Consultar — POST /fesv/recepcion/consultadte { ambiente, codigoGeneracion }.
  5. Generar QR (Herramientas) — URL https://admin.factura.gob.sv/consultaPublica?ambiente=..&codGen=..&fechaEmi=.. + PNG como binary qr.

Crear + Firmar + Enviar hace todo en un paso. El idEnvio (entero ≥1, correlativo por emisor/ambiente) se autogenera con contador persistente si lo dejas en 0.

Encadenado: cada operación lee por defecto {{ $json.dte }} / {{ $json.jws }} del paso anterior.

Eventos

Recurso Eventos: Invalidar (POST /fesv/anulardte, v2), Contingencia (POST /fesv/contingencia, v3), Retorno (POST /fesv/retorno). El JSON del evento se firma localmente con el cert y se envía como { ambiente, documento: jwsEvento }.

Modo prueba

Colección Options → Modo prueba: en Firmar genera JWS mock alg=none sin cert; en Enviar/Eventos hace dry-run sin llamar a MH. Solo para probar el flujo — MH lo rechazaría. La firma mock nunca sale del equipo.

Respaldo local

Crear/Enviar guardan automáticamente en <base>/dte-store/<codigoGeneracion>/: <codGen>.json (DTE + firma + sello), <codGen>.jws.txt, <codGen>.sello.txt, <codGen>.qr.txt. Base por defecto ~/.n8n en Docker. Conserva 10 años según normativa.

Desarrollo

pnpm install
pnpm run build   # tsc → dist/
pnpm test        # 18 pruebas (firma con cert de test autofirmado)

pnpm run gen-cert regenera el cert de test (test/fixtures/, password default Test1234!, solo pruebas).

Compatibilidad

  • n8nNodesApiVersion: 1
  • Endpoints MH: https://apitest.dtes.mh.gob.sv (pruebas), https://api.dtes.mh.gob.sv (producción)
  • Firma: JWS Compact, alg: RS512, kid: <NIT>, payload = DTE sin firmaElectronica/selloRecibido

Licencia

MIT — ver LICENSE.

Discussion