All Projects → emilioastarita → facturajs

emilioastarita / facturajs

Licence: MIT license
Facturas digitales con AFIP Web Services y nodej

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to facturajs

django-afip
⚖️ AFIP invoice integration for django.
Stars: ✭ 36 (-47.06%)
Mutual labels:  argentina, afip
Max-Bot
Max Bot is an open-source bot made in node-js with discord-js. It Has Commands from fun to moderator.
Stars: ✭ 27 (-60.29%)
Mutual labels:  node-js
Android spy app
This is a android spy app, which uploads user data such as contacts, messages, call log, send message(s), photos, videos, open a browser link etc. Android Rat
Stars: ✭ 232 (+241.18%)
Mutual labels:  node-js
majo.exe
🚀 Discord bot for fun, memes, images, giveaway moderation, anime, NSFW and even more! With over 150 slash commands
Stars: ✭ 188 (+176.47%)
Mutual labels:  node-js
Iobroker.js Controller
ioBroker controller
Stars: ✭ 238 (+250%)
Mutual labels:  node-js
Luki
[Deprecated] The official repository for Luki the Discord bot
Stars: ✭ 21 (-69.12%)
Mutual labels:  node-js
Pdf Bot
🤖 A Node queue API for generating PDFs using headless Chrome. Comes with a CLI, S3 storage and webhooks for notifying subscribers about generated PDFs
Stars: ✭ 2,551 (+3651.47%)
Mutual labels:  node-js
pacNEM
pacNEM is a Browser PacMan game with NodeJS, Socket.io, Handlebars and NEM Blockchain
Stars: ✭ 20 (-70.59%)
Mutual labels:  node-js
Gyromina
Gyromina, a multipurpose Discord bot with fun + function all in one
Stars: ✭ 97 (+42.65%)
Mutual labels:  node-js
yaclt
Yet Another Change Log Tool
Stars: ✭ 24 (-64.71%)
Mutual labels:  node-js
libredte-webapp
Aplicación Web de LibreDTE Versión Comunidad
Stars: ✭ 23 (-66.18%)
Mutual labels:  facturacion
Bootstrap3 Pug Former jade Node Express Grunt
Bootstrap 3 templated by Jade
Stars: ✭ 242 (+255.88%)
Mutual labels:  node-js
learn-how-to-build-a-mean-stack-application
The goal of this tutorial is to guide you through the coding of a full-stack JavaScript example application project and connecting a backend API to an Angular 5 front-end application employing the MEAN stack.
Stars: ✭ 55 (-19.12%)
Mutual labels:  node-js
Azure Event Hubs
☁️ Cloud-scale telemetry ingestion from any stream of data with Azure Event Hubs
Stars: ✭ 233 (+242.65%)
Mutual labels:  node-js
ifto
A simple debugging module for AWS Lambda (λ) timeout
Stars: ✭ 72 (+5.88%)
Mutual labels:  node-js
Fluent Logger Node
A structured logger for Fluentd (Node.js)
Stars: ✭ 233 (+242.65%)
Mutual labels:  node-js
Nodebestpractices
✅ The Node.js best practices list (December 2021)
Stars: ✭ 72,734 (+106861.76%)
Mutual labels:  node-js
xmldsig
Firma digital en Facturación Electrónica
Stars: ✭ 36 (-47.06%)
Mutual labels:  facturacion-electronica
HIMS
Hospital Information Management System create using Node Js
Stars: ✭ 41 (-39.71%)
Mutual labels:  node-js
ChatBot
A W.I.P All-in-One Discord Bot
Stars: ✭ 32 (-52.94%)
Mutual labels:  node-js

facturajs

facturajs

Afip Web Services desde nodejs.

~$ yarn add facturajs
# OR
~$ npm i facturajs

WebServices de la AFIP con node

El objetivo de esta lib es facilitar la comunicación con la AFIP utilizando node.js. En mi caso particular, necesitaba generar facturas electrónicas como monotributista de manera automática.

No tiene muchas pretenciones, pero el código puede ser ilustrativo para armar otras integraciones más complejas.

Obtener certificados en la AFIP

Los servicios de AFIP están disponibles mediante SOAP y su página principal es AFIP WS.

Los servicios poseen dos entornos conocidos como homologación (para testing), y producción.

Para utilizar ambos entornos hay que obtener certificados digitales de la AFIP.

De nuestro lado lo primero es generar certificados relacionados a nuestro CUIT:

# Crear clave privada
~ $ openssl genrsa -out private/private_key.key 2048 
# Crear certificado
~ $ openssl req -new -key private/private_key.key -subj "/C=AR/O=TU_EMPRESA/CN=TU_SISTEMA/serialNumber=CUIT TU_CUIT" -out private/afip.csr

(*) Dónde dice CUIT TU_CUIT es importante el espacio y conservar la palabra "CUIT".

Adherirse a homologación (testing)

En este pdf (WSASS como adherirse) pueden ver el proceso de adhesión al servicio de homologación. Básicamente das de alta el servicio y le cargas el CSR generado en el paso anterior, la página web te va a entregar otro cert que lo tenes que copiar y lo guardas en un archivo de texto: private/cert.pem. El último paso, en esa misma página, sería autorizar tu cert al servicio que quieras usar. En mi caso quería el de facturas digitales llamado: wsfe.

Ejemplo de uso

Crear una factura electrónica

En este ejemplo pueden ver como crear una factura electrónica con el último número de comprobante válido.

Para poder ver más en detalle que está sucediendo se puede configurar el LOG_LEVEL y namespace de DEBUG:

~$ LOG_LEVEL=3 DEBUG=facturajs node dist/examples/create-bill-monotributo.js
# Salida:
# Last bill number:  43
# Next bill number to create:  44
# Created bill {
#     "FeCabResp": {
#         "Cuit": "XXXXXXXXXX",
#         "PtoVta": 2,
#         "CbteTipo": 11,
#         "FchProceso": "20180423081028",
#         "CantReg": 1,
#         "Resultado": "A",
#         "Reproceso": "N"
#     },
#     "FeDetResp": {
#         "FECAEDetResponse": [
#             {
#                 "Concepto": 1,
#                 "DocTipo": 99,
#                 "DocNro": "0",
#                 "CbteDesde": "44",
#                 "CbteHasta": "44",
#                 "CbteFch": "20180423",
#                 "Resultado": "A",
#                 "CAE": "68174646182386",
#                 "CAEFchVto": "20180503"
#             }
#         ]
#     }
# }

Ejecutar cualquier método del WebService

De manera general cualquier método del WebService se puede llamar con execRemote(servicio, método, parámetros), por ejemplo:

const afip = new AfipServices(config);
afip.execRemote('wsfev1', 'FECAESolicitar', {
    Auth: {Cuit: 27000000000},
    params: {
        CbteTipo: 11,
        PtoVta: 2
    }    
}).then(res => console.log(res))

Config

El constructor AfipServices acepta un objeto que cumpla con la interfaz de IConfigService. La descripción de sus propiedades:

  • homo Un booleano que determina el uso del entorno de homologación.
  • cacheTokensPath Path a un file dónde se cachearan los tokens obtenidos para no solicitarlos cada vez.
  • tokensExpireInHours La cantidad de horas en la que expirará el archivo de tokens cacheados.
  • privateKeyContents El contenido de la private key (no hace falta path en este caso)
  • privateKeyPath Path a la private key (al igual que antes podemos omitir el contenido)
  • certContents El contenido del certificado (no hace falta path en este caso)
  • certPath Path al certificado (al igual que antes podemos omitir el contenido)

Nota acerca de métodos de cifrado openssl

En algunos sistemas operativos con una versión de la configuración de openssl mas nueva se reportó un error porque openssl rechaza los métodos de cifrado de AFIP. Algunos usuarios reportaron que en un sistema Debian la solución fue editar /etc/ssl/openssl.cnf. Y comentar la siguiente línea:

# CipherString = DEFAULT@SECLEVEL=2

Proyectos relacionados

  • SOAP de la AFIP a REST enciende un server expressjs y sirve de wrapper alrededor del SOAP para poder consumir los servicios con una interfaz REST. A partir de ese repo se armó esta lib.

Colaboradores

  • mbenedettini
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].