UNPKG

@openade/pem

Version:

Punto di Emissione (Emission Point) - Device library for fiscal receipts

57 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DocumentBuilder = void 0; class DocumentBuilder { constructor(config) { this.vatNumber = config.vatNumber; this.businessName = config.businessName; this.pemId = config.pemId; } build(lines, documentNumber) { const now = new Date(); const dataOra = now.toISOString(); const dettaglioLinee = lines.map((line, index) => ({ numeroLinea: index + 1, descrizione: line.description, quantita: line.quantity, prezzoUnitario: line.unitPrice, prezzoTotale: line.quantity * line.unitPrice, aliquotaIVA: line.vatRate, })); const vatGroups = new Map(); lines.forEach((line) => { const total = line.quantity * line.unitPrice; const taxable = total / (1 + line.vatRate / 100); const tax = total - taxable; const existing = vatGroups.get(line.vatRate) || { imponibile: 0, imposta: 0 }; existing.imponibile += taxable; existing.imposta += tax; vatGroups.set(line.vatRate, existing); }); const datiRiepilogo = Array.from(vatGroups.entries()).map(([rate, amounts]) => ({ aliquotaIVA: rate, imponibile: Math.round(amounts.imponibile * 100) / 100, imposta: Math.round(amounts.imposta * 100) / 100, })); const totalAmount = lines.reduce((sum, line) => sum + line.quantity * line.unitPrice, 0); return { versione: '1.0', contribuente: { partitaIVA: this.vatNumber, denominazione: this.businessName, regimeFiscale: 'RF01', }, identificativoPEM: this.pemId, datiGenerali: { tipoDocumento: 'TD01', numero: documentNumber, dataOra, }, dettaglioLinee, datiRiepilogo, importoTotale: Math.round(totalAmount * 100) / 100, }; } } exports.DocumentBuilder = DocumentBuilder; //# sourceMappingURL=document.builder.js.map