UNPKG

@nqminds/fin-genie-audit-period

Version:

A databot for extracting an audit's period for FinGenie

72 lines (59 loc) 2.13 kB
"use strict"; const FinGenieDatabot = require("@nqminds/fin-genie-databot"); const split = require("split"); const dayjs = require("dayjs"); const periodPipeline = require("./period-pipeline"); class AuditPeriod extends FinGenieDatabot { constructor(input, output, context) { super(input, output, context); } async main() { try { const glDatasetId = this.getDatasetId("generalLedger", this.input.auditId); this.stage = "Getting aggregated general ledger data"; const [{min, max}] = await this.getAggregatedData(glDatasetId, periodPipeline); const settings = { "setting": "period", "value": { min: this.formatDate(min), max: this.formatDate(max), }, "overrideId": this.input.auditId, }; this.stage = "extract org id"; const resource = await this.api.getResource(this.input.auditId); const orgId = resource.parents[0]; this.stage = `updating ${orgId} settings`; const settingsDatasetId = this.getDatasetId("organisationSettings", orgId); await this.api.updateData(settingsDatasetId, settings, true); return Promise.resolve(); } catch (err) { await this.reportBug(err); this.output.result({error: err, stage: this.stage}); return Promise.resolve(); } } formatDate(milliseconds) { return dayjs(milliseconds).format("MMM YY"); } async getAggregatedData(glDatasetId, pipeline) { const {body: dataStream} = await this.api.getAggregateDataStream( glDatasetId, pipeline, true, ); return new Promise((resolve, reject) => { const data = []; dataStream.pipe(split(JSON.parse, null, {trailing: true})) .on("data", async(document) => data.push(document)) .on("end", () => resolve(data)) .on("error", (err) => { // TDX sends a new line even if the dataset is empty if (err.message === "Unexpected end of JSON input" && data.length === 0) { resolve(data); } else { reject(err); } }); }); } } module.exports = AuditPeriod;