# NodeFact

Biblioteca para facturación electrónica en Perú, compatible con los requerimientos de SUNAT.

## Instalación

```bash
npm install nodefact
```

## Características

- Generación de XMLs según los esquemas UBL 2.1
- Firma digital de documentos XML
- Comunicación con los servicios web de SUNAT
- Validación de documentos
- Generación de representaciones imprimibles (PDF)

## Documentos Soportados

- Facturas y Boletas (UBL 2.1)
- Notas de Crédito (UBL 2.1)
- Notas de Débito (UBL 2.1)
- Guías de Remisión (UBL estándar y 2022)
- Comprobantes de Retención
- Comprobantes de Percepción
- Resúmenes Diarios
- Comunicaciones de Baja

## Uso Básico

### Generación de XML

```typescript
import { generateXML } from 'nodefact';

// Datos de la factura
const invoiceData = {
  // ... datos de la factura
};

// Generar XML
const xml = generateXML(invoiceData, '01'); // 01 = Factura
```

### Firma Digital

```typescript
import { signXml } from 'nodefact';

// Opción 1: Usando archivos separados para clave privada y certificado
const signOptions = {
  keyFile: 'path/to/private.key',
  certFile: 'path/to/certificate.pem',
  password: 'password'
};

// Opción 2: Usando un único archivo PEM que contiene tanto la clave privada como el certificado
// const signOptions = {
//   pemFile: 'path/to/certificate.pem',
//   password: 'password'
// };

// Firmar XML
const result = await signXml(xml, signOptions);

if (result.success) {
  console.log('XML firmado:', result.signedXml);
} else {
  console.error('Error al firmar:', result.error);
}
```

### Envío a SUNAT

```typescript
import { SunatEndpoints, createSunatClient } from 'nodefact';

// Crear cliente SUNAT
const client = createSunatClient({
  endpoint: SunatEndpoints.HOMOLOGACION_FACTURA,
  credentials: {
    ruc: '20123456789',
    usuario: 'MODDATOS',
    clave: 'moddatos'
  }
});

// Enviar documento
const result = await client.sendBill('20123456789-01-F001-1.zip', base64Content);

if (result.success) {
  console.log('Documento aceptado:', result.cdr);
} else {
  console.error('Error al enviar:', result.error);
}
```

### Generación de PDF

```typescript
import { generatePdf } from 'nodefact';

// Generar PDF
const result = await generatePdf(invoiceData, {
  outputPath: 'factura.pdf',
  logo: 'path/to/logo.png'
});

if (result.success) {
  console.log('PDF generado en:', result.path);
} else {
  console.error('Error al generar PDF:', result.error);
}
```

## Licencia

MIT
