UNPKG

@openade/common

Version:

Common types, validators, and XML builders for Italian fiscal receipts

219 lines 9.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildEmissionPointCensusXML = buildEmissionPointCensusXML; exports.buildEmissionPointActivationXML = buildEmissionPointActivationXML; exports.buildDailyReceiptsXML = buildDailyReceiptsXML; exports.buildCommercialDocumentXML = buildCommercialDocumentXML; exports.buildJournalXML = buildJournalXML; exports.buildAnomaliesXML = buildAnomaliesXML; const fast_xml_parser_1 = require("fast-xml-parser"); function createXMLBuilder() { return new fast_xml_parser_1.XMLBuilder({ ignoreAttributes: false, format: true, indentBy: ' ', suppressEmptyNode: true, }); } function buildEmissionPointCensusXML(census) { const builder = createXMLBuilder(); const xmlObject = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8', }, CensimentoPEM: { '@_versione': census.version, Contribuente: { PartitaIVA: census.taxpayer.vatNumber, ...(census.taxpayer.fiscalCode && { CodiceFiscale: census.taxpayer.fiscalCode }), Denominazione: census.taxpayer.businessName, RegimeFiscale: census.taxpayer.taxRegimeCode, }, IdentificativoPEM: census.emissionDevice.identifier, ...(census.emissionDevice.type && { Tipo: census.emissionDevice.type }), ...(census.location && { Indirizzo: { Via: census.location.indirizzo, NumeroCivico: census.location.numeroCivico, CAP: census.location.cap, Comune: census.location.comune, Provincia: census.location.provincia, Nazione: census.location.nazione, }, }), }, }; return builder.build(xmlObject); } function buildEmissionPointActivationXML(activationData) { return buildEmissionPointCensusXML(activationData); } function buildDailyReceiptsXML(receipts) { const builder = createXMLBuilder(); const xmlObject = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8', }, CorrispettiviGiornalieri: { '@_versione': receipts.versione, Contribuente: { PartitaIVA: receipts.contribuente.partitaIVA, ...(receipts.contribuente.codiceFiscale && { CodiceFiscale: receipts.contribuente.codiceFiscale, }), }, IdentificativoPEM: receipts.identificativoPEM, DataRiferimento: receipts.dataRiferimento, DataOraTrasmissione: receipts.dataOraTrasmissione, RiepilogoIVA: receipts.riepilogoIVA.map((riepilogo) => ({ ...(riepilogo.aliquotaIVA !== undefined && { AliquotaIVA: riepilogo.aliquotaIVA.toFixed(2), }), ...(riepilogo.natura && { Natura: riepilogo.natura }), Imponibile: riepilogo.imponibile.toFixed(2), Imposta: riepilogo.imposta.toFixed(2), })), ImportoTotale: receipts.importoTotale.toFixed(2), }, }; return builder.build(xmlObject); } function buildCommercialDocumentXML(document) { const builder = createXMLBuilder(); const xmlObject = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8', }, DocumentoCommerciale: { '@_versione': document.versione, Contribuente: { PartitaIVA: document.contribuente.partitaIVA, ...(document.contribuente.codiceFiscale && { CodiceFiscale: document.contribuente.codiceFiscale, }), Denominazione: document.contribuente.denominazione, RegimeFiscale: document.contribuente.regimeFiscale, }, IdentificativoPEM: document.identificativoPEM, DatiGenerali: { TipoDocumento: document.datiGenerali.tipoDocumento, Numero: document.datiGenerali.numero, DataOra: document.datiGenerali.dataOra, }, ...(document.cliente && { Cliente: { ...(document.cliente.partitaIVA && { PartitaIVA: document.cliente.partitaIVA }), ...(document.cliente.codiceFiscale && { CodiceFiscale: document.cliente.codiceFiscale, }), Denominazione: document.cliente.denominazione, }, }), ...(document.divisa && { Divisa: document.divisa }), DettaglioLinee: document.dettaglioLinee.map((linea) => ({ NumeroLinea: linea.numeroLinea, Descrizione: linea.descrizione, ...(linea.quantita && { Quantita: linea.quantita }), PrezzoUnitario: linea.prezzoUnitario.toFixed(2), PrezzoTotale: linea.prezzoTotale.toFixed(2), ...(linea.aliquotaIVA !== undefined && { AliquotaIVA: linea.aliquotaIVA.toFixed(2) }), ...(linea.natura && { Natura: linea.natura }), })), DatiRiepilogo: document.datiRiepilogo.map((riepilogo) => ({ ...(riepilogo.aliquotaIVA !== undefined && { AliquotaIVA: riepilogo.aliquotaIVA.toFixed(2), }), ...(riepilogo.natura && { Natura: riepilogo.natura }), Imponibile: riepilogo.imponibile.toFixed(2), Imposta: riepilogo.imposta.toFixed(2), })), ImportoTotale: document.importoTotale.toFixed(2), ...(document.datiPagamento && { DatiPagamento: document.datiPagamento.map((pag) => ({ ModalitaPagamento: pag.modalitaPagamento, ...(pag.importo && { Importo: pag.importo.toFixed(2) }), })), }), ...(document.note && { Note: document.note }), }, }; return builder.build(xmlObject); } function buildJournalXML(journal) { const builder = createXMLBuilder(); const xmlObject = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8', }, Giornale: { '@_versione': journal.versione, Contribuente: { PartitaIVA: journal.contribuente.partitaIVA, }, IdentificativoPEM: journal.identificativoPEM, DataRiferimento: journal.dataRiferimento, Righe: journal.voci.map((voce) => ({ TipoRiga: voce.tipo, DataOra: voce.dataOra, ...(voce.numeroDocumento && { RiferimentoDocumento: voce.numeroDocumento, }), ...(voce.importo !== undefined && { ImportoTotale: voce.importo.toFixed(2), }), ...(voce.metodoPagamento && { MetodoPagamento: voce.metodoPagamento, }), ...(voce.note && { Note: voce.note }), })), NumeroVoci: journal.numeroVoci, ImportoTotaleGiornata: journal.importoTotaleGiornata.toFixed(2), DataOraGenerazione: journal.dataOraGenerazione, }, }; return builder.build(xmlObject); } function buildAnomaliesXML(anomalies) { const builder = createXMLBuilder(); const xmlObject = { '?xml': { '@_version': '1.0', '@_encoding': 'UTF-8', }, RichiestaAnomalie: { '@_xmlns': 'http://ivaservizi.agenziaentrate.gov.it/docs/xsd/anomalie/v1.0', Versione: '1.0', Anomalia: anomalies.map((anomaly) => ({ Tipo: anomaly.type, CodiceFiscale: anomaly.taxpayerFiscalCode, IdentificativoPEM: anomaly.pemId, ...(anomaly.pemLocation && { IndirizzoPEM: anomaly.pemLocation }), Descrizione: anomaly.details, Timestamp: anomaly.timestamp, ...(anomaly.startedAt && { DataInizio: anomaly.startedAt }), ...(anomaly.resolvedAt && { DataRisoluzione: anomaly.resolvedAt }), ...(anomaly.metadata?.operationsWithoutNetwork && { OperazioniSenzaRete: anomaly.metadata.operationsWithoutNetwork, }), ...(anomaly.metadata?.networkRestoredAt && { DataRipristinoRete: anomaly.metadata.networkRestoredAt, }), ...(anomaly.metadata?.expectedHash && { HashAtteso: anomaly.metadata.expectedHash, }), ...(anomaly.metadata?.actualHash && { HashEffettivo: anomaly.metadata.actualHash, }), ...(anomaly.metadata?.affectedDocuments && { DocumentiCoinvolti: anomaly.metadata.affectedDocuments, }), })), }, }; return builder.build(xmlObject); } //# sourceMappingURL=xml.builder.js.map