npm package: @cdwenz/afip-sdk
Description: SDK Node.js para facturación electrónica AFIP WSFEv1
Latest version: 1.0.7

# @cdwenz/afip-sdk

SDK ligero para **Node.js** que simplifica la integración con los servicios de **facturación electrónica de AFIP (WSFEv1)** en Argentina.

Este proyecto busca ofrecer una interfaz moderna y clara para trabajar con AFIP sin tener que lidiar directamente con **SOAP, XML, autenticación WSAA y firma CMS**.

---

## Características

- Implementación completa del flujo de autenticación **WSAA**
- Firma automática del **TRA (loginTicketRequest)** usando certificado AFIP
- Cache automático de **token y sign**
- Integración directa con **WSFEv1**
- Soporte para **Facturas A, B y C**
- Manejo de **múltiples ítems**
- Soporte para **múltiples alícuotas de IVA**
- **Cálculo automático** de:
  - Neto
  - IVA
  - Total
- Manejo de **CAE y fecha de vencimiento**
- Validaciones básicas antes de enviar datos a AFIP
- Control de concurrencia para evitar **duplicación de comprobantes**
- Compatible con **homologación y producción**

---

## Instalación

```bash
npm install @cdwenz/afip-sdk
```

## Configuración

El SDK requiere:

- CUIT del emisor
- Certificado AFIP (.crt)
- Clave privada (.key)
- Entorno (homologación o producción)

```bash
import { AFIP } from "@cdwenz/afip-sdk"

const afip = new AFIP({
  cuit: 20123456789,
  certPath: "./cert.crt",
  keyPath: "./private.key",
  production: false
})
```
## Crear una factura

```bash
const invoice = await afip.createInvoice({

  puntoVenta: 1,
  tipoComprobante: 6, // Factura B

  docTipo: 99,
  docNro: 0,

  items: [
    {
      description: "Producto de prueba",
      quantity: 1,
      unitPrice: 1000,
      iva: 21
    }
  ]

})

console.log(invoice)
```

Respuesta:
```bash
{
  "comprobante": 1023,
  "cae": "70417054367476",
  "caeVto": "20260411",
  "total": 1210
}
```

## Qué significa cada campo

**puntoVenta**

Punto de venta AFIP.
```bash
1
```

**tipoComprobante**

AFIP usa códigos.

| tipo           | código |
| -------------- | ------ |
| Factura A      | 1      |
| Factura B      | 6      |
| Factura C      | 11     |
| Nota Crédito A | 3      |
| Nota Crédito B | 8      |
| Nota Crédito C | 13     |


**docTipo**

Tipo de documento del cliente.

| tipo             | código |
| ---------------- | ------ |
| Consumidor final | 99     |
| DNI              | 96     |
| CUIT             | 80     |

**docNro**

Número del documento.

Ejemplo consumidor final:

```bash
0
```


## Métodos disponibles

login()

Obtiene un token y sign desde WSAA.

```bash
await afip.login()
```

getLastVoucher(puntoVenta, tipoComprobante)

Consulta el último comprobante autorizado.

```bash
const last = await afip.getLastVoucher(1, 6)
```

createInvoice(data)

Genera una factura electrónica utilizando FECAESolicitar.

Características:

- Cálculo automático de totales
- Múltiples ítems
- Múltiples alícuotas de IVA

## Entornos AFIP

El SDK soporta automáticamente ambos entornos.

Homologación

```bash
https://wsaahomo.afip.gov.ar
https://wswhomo.afip.gov.ar
```

Producción

```bash
https://wsaa.afip.gov.ar
https://servicios1.afip.gov.ar
```

Se controlan mediante:

```bash
production: true
```

## ⚠️ Requisitos

Para utilizar el SDK necesitas:

- Certificado digital AFIP válido
- Clave privada asociada al certificado
- Punto de venta habilitado para WSFEv1

## Casos de uso

Este SDK puede integrarse fácilmente en:

- APIs backend
- sistemas SaaS
- e-commerce
- POS
- plataformas gastronómicas
- sistemas administrativos

## Licencia

MIT

## Autor

Cristian Wenz

GitHub
https://github.com/cdwenz