@openade/pel
Version:
Punto di Elaborazione (Elaboration Point) - Server library for managing PEMs and communicating with ADE
88 lines • 3.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateMetadataXML = generateMetadataXML;
exports.createArchiveMetadata = createArchiveMetadata;
function generateMetadataXML(metadata) {
const { config, journals, documents } = metadata;
const xml = [];
xml.push('<?xml version="1.0" encoding="UTF-8"?>');
xml.push('<Metadati versione="1.0">');
xml.push(' <Intestazione>');
xml.push(` <MatricolaPEM>${escapeXML(config.matricolaPEM)}</MatricolaPEM>`);
xml.push(` <CAU>${escapeXML(config.cau)}</CAU>`);
xml.push(` <EsercentePIva>${escapeXML(config.esercentePIva)}</EsercentePIva>`);
xml.push(' <TotaliDocumenti>');
xml.push(` <NJournal>${journals.length}</NJournal>`);
xml.push(` <NDC>${documents.length}</NDC>`);
xml.push(' </TotaliDocumenti>');
xml.push(' </Intestazione>');
for (const journal of journals) {
xml.push(' <BloccoJournal>');
xml.push(` <Nome>${escapeXML(journal.nome)}</Nome>`);
xml.push(` <ProgrAperturaCassa>${journal.progrAperturaCassa}</ProgrAperturaCassa>`);
xml.push(` <Hash>${escapeXML(journal.hash)}</Hash>`);
xml.push(` <DataChiusuraCassa>${escapeXML(journal.dataChiusuraCassa)}</DataChiusuraCassa>`);
xml.push(` <TotaleDC>${journal.totaleDC}</TotaleDC>`);
xml.push(` <HashApertura>${escapeXML(journal.hashApertura)}</HashApertura>`);
xml.push(' </BloccoJournal>');
}
for (const doc of documents) {
xml.push(' <BloccoDC>');
xml.push(` <Nome>${escapeXML(doc.nome)}</Nome>`);
xml.push(` <Hash>${escapeXML(doc.hash)}</Hash>`);
xml.push(` <DataEmissione>${escapeXML(doc.dataEmissione)}</DataEmissione>`);
xml.push(` <Numero>${escapeXML(doc.numero)}</Numero>`);
xml.push(` <HashJournal>${escapeXML(doc.hashJournal)}</HashJournal>`);
xml.push(' </BloccoDC>');
}
xml.push('</Metadati>');
return xml.join('\n');
}
function createArchiveMetadata(config, journals, documents) {
const journalMetadata = journals.map((j, index) => {
const docsInJournal = documents.filter((d) => d.journalHash === j.hash).length;
const dateStr = formatDateForFilename(j.journal.dataOraGenerazione);
return {
nome: `J_${index + 1}_${config.matricolaPEM}_${dateStr}.xml`,
progrAperturaCassa: index + 1,
hash: j.hash,
dataChiusuraCassa: j.journal.dataOraGenerazione,
totaleDC: docsInJournal,
hashApertura: j.hashApertura,
};
});
const documentMetadata = documents.map((d) => {
const dateStr = formatDateForFilename(d.document.datiGenerali.dataOra);
return {
nome: `DC_${d.document.datiGenerali.numero}_${config.matricolaPEM}_${dateStr}.xml`,
hash: d.hash,
dataEmissione: d.document.datiGenerali.dataOra,
numero: d.document.datiGenerali.numero,
hashJournal: d.journalHash,
};
});
return {
config,
journals: journalMetadata,
documents: documentMetadata,
};
}
function formatDateForFilename(isoDate) {
const date = new Date(isoDate);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day}-${hours}-${minutes}-${seconds}`;
}
function escapeXML(str) {
return str
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
//# sourceMappingURL=metadata.builder.js.map