verifactu-node-lib
Version:
Node.js library for generating VeriFacTu invoices compatible with AEAT
155 lines (154 loc) • 5.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.main = main;
exports.createSimplifiedInvoice = createSimplifiedInvoice;
const index_1 = require("./src/index");
// Ejemplo de uso de la librería VeriFacTu
async function main() {
// Configuración del software
const software = {
developerName: "Mi Empresa Desarrolladora S.L.",
developerIrsId: "B12345678",
name: "Mi Software de Facturación",
id: "SOFT_001",
version: "1.0.0",
number: "12345",
useOnlyVerifactu: true,
useMulti: true,
useCurrentMulti: false
};
// Información de la factura anterior (para encadenamiento)
const previousInvoice = {
issuerIrsId: "99999990S",
number: "FAC-099",
issuedTime: new Date("2024-03-17T10:00:00.000Z"),
hash: "abc123def456789..."
};
// Ejemplo 1: Crear una factura
try {
const invoice = {
issuer: {
irsId: "99999990S",
name: "Mi Empresa S.L."
},
recipient: {
irsId: "B87654321",
name: "Cliente S.A.",
country: "ES"
},
id: {
number: "FAC-100",
issuedTime: new Date("2024-03-18T10:00:00.000Z")
},
type: "F1", // Factura completa
description: {
text: "Servicios de consultoría tecnológica",
operationDate: new Date("2024-03-18T09:00:00.000Z")
},
vatLines: [
{
vatOperation: "S1", // Operación sujeta
base: 1000.00,
rate: 21,
amount: 210.00,
vatKey: "01" // IVA general
}
],
total: 1210.00,
amount: 210.00
};
console.log('Creando factura VeriFacTu...');
const result = await (0, index_1.createVerifactuInvoice)(invoice, software, previousInvoice);
console.log('✅ Factura creada exitosamente');
console.log('📱 QR Code:', result.qrcode);
console.log('🔗 Información de encadenamiento:', result.chainInfo);
console.log('📄 XML (base64):', result.verifactuXml.substring(0, 50) + '...');
// El XML decodificado se puede obtener así:
const xmlDecoded = Buffer.from(result.verifactuXml, 'base64').toString('utf8');
console.log('📄 XML decodificado (primeros 200 caracteres):', xmlDecoded.substring(0, 200) + '...');
// Debug: Mostrar XML completo para diagnosticar
console.log('\n🔍 XML COMPLETO PARA DEBUG:');
console.log(xmlDecoded);
console.log('🔍 FIN XML COMPLETO\n');
}
catch (error) {
console.error('❌ Error creando factura:', error instanceof Error ? error.message : String(error));
}
// Ejemplo 2: Anular una factura
try {
const cancelInvoice = {
issuer: {
irsId: "99999990S",
name: "Mi Empresa S.L."
},
id: {
number: "FAC-100",
issuedTime: new Date("2024-03-18T10:00:00.000Z")
}
};
console.log('\nAnulando factura VeriFacTu...');
const cancelResult = await (0, index_1.cancelVerifactuInvoice)(cancelInvoice, software, previousInvoice);
console.log('✅ Factura anulada exitosamente');
console.log('🔗 Información de encadenamiento:', cancelResult.chainInfo);
console.log('📄 XML de anulación (base64):', cancelResult.verifactuXml.substring(0, 50) + '...');
}
catch (error) {
console.error('❌ Error anulando factura:', error instanceof Error ? error.message : String(error));
}
}
// Ejemplo de factura simplificada (sin destinatario)
async function createSimplifiedInvoice() {
const software = {
developerName: "Mi Empresa Desarrolladora S.L.",
developerIrsId: "B12345678",
name: "Mi Software de Facturación",
id: "SOFT_001",
version: "1.0.0",
number: "12345",
useOnlyVerifactu: true,
useMulti: true,
useCurrentMulti: false
};
try {
const simplifiedInvoice = {
issuer: {
irsId: "99999990S",
name: "Mi Empresa S.L."
},
// Sin destinatario para factura simplificada
id: {
number: "SIMP-001",
issuedTime: new Date("2024-03-18T14:00:00.000Z")
},
type: "F2", // Factura simplificada
description: {
text: "Venta en mostrador",
},
vatLines: [
{
vatOperation: "S1",
base: 50.00,
rate: 21,
amount: 10.50,
vatKey: "01"
}
],
total: 60.50,
amount: 10.50
};
console.log('\nCreando factura simplificada...');
const result = await (0, index_1.createVerifactuInvoice)(simplifiedInvoice, software);
console.log('✅ Factura simplificada creada exitosamente');
console.log('🔗 Hash de encadenamiento:', result.chainInfo.hash);
}
catch (error) {
console.error('❌ Error creando factura simplificada:', error instanceof Error ? error.message : String(error));
}
}
// Ejecutar ejemplos
if (require.main === module) {
main()
.then(() => createSimplifiedInvoice())
.then(() => console.log('\n🎉 Ejemplos completados'))
.catch(console.error);
}