nodefact
Version:
Biblioteca para facturación electrónica en Perú con Node.js. Compatible con UBL 2.1 y servicios web de SUNAT.
120 lines (90 loc) • 2.6 kB
Markdown
# 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