UNPKG

poster-prro-kit

Version:

Цей Kit призначений для роботи з PRRO, а саме для генерації XML документів для податкової, генерації фіскальних чеків для термопринтерів, генерації документів для PRRO в офлайн режимі, розрахунку податків та генераціі посилання на фіскальний чек в кабін

61 lines (52 loc) 2.46 kB
import xml2js from "xml2js"; import iconv from "iconv-lite"; import { XML_ENCODING } from "./const/xml.js"; import { asyncPipe, pipe } from "../../helpers/functional.js"; import { DOCUMENT_TYPE_OFFLINE_FINISH, DOCUMENT_TYPE_OFFLINE_START, DOCUMENT_TYPE_RECEIPT, DOCUMENT_TYPE_RETURN_RECEIPT, DOCUMENT_TYPE_SERVICE_DELIVERY, DOCUMENT_TYPE_SERVICE_ENTRY, DOCUMENT_TYPE_SHIFT_CLOSE, DOCUMENT_TYPE_SHIFT_OPEN, DOCUMENT_TYPE_STORNO, DOCUMENT_TYPE_Z_REPORT, } from "./const/request.js"; import { fromBase64ToBuffer, sha256 } from "./helpers/xmlGenerator.js"; import getReceiptDocument from "./generators/receiptXMLGenerator.js"; import getServiceTransactionDocument from "./generators/serviceTransactionXMLGenerator.js"; import getOfflineStartDocument from "./generators/offlineStartXMLGenerator.js"; import getOfflineFinishDocument from "./generators/offlineFinishXMLGenerator.js"; import getZReportDocument from "./generators/zReportXMLGenerator.js"; import getShiftCloseDocument from "./generators/shiftCloseXMLGenerator.js"; import getShiftOpenDocument from "./generators/shiftOpenXMLGenerator.js"; import getStornoDocument from "./generators/stornoXMLGenerator.js"; const builder = new xml2js.Builder({ xmldec: { encoding: XML_ENCODING } }); const encodeXml = (xml) => { const encodedXml = iconv.encode(xml, XML_ENCODING); return encodedXml.toString("base64"); }; const XMLToObject = xml2js.parseStringPromise; const buildXMLDocument = pipe((data) => builder.buildObject(data), encodeXml); const getDocumentHash = asyncPipe(buildXMLDocument, fromBase64ToBuffer, sha256); const getDocument = (request) => { const { type: requestType } = request; const documentsGetterMap = { [DOCUMENT_TYPE_SHIFT_OPEN]: getShiftOpenDocument, [DOCUMENT_TYPE_RECEIPT]: getReceiptDocument, [DOCUMENT_TYPE_RETURN_RECEIPT]: getReceiptDocument, [DOCUMENT_TYPE_SERVICE_ENTRY]: getServiceTransactionDocument, [DOCUMENT_TYPE_SERVICE_DELIVERY]: getServiceTransactionDocument, [DOCUMENT_TYPE_OFFLINE_START]: getOfflineStartDocument, [DOCUMENT_TYPE_OFFLINE_FINISH]: getOfflineFinishDocument, [DOCUMENT_TYPE_Z_REPORT]: getZReportDocument, [DOCUMENT_TYPE_SHIFT_CLOSE]: getShiftCloseDocument, [DOCUMENT_TYPE_STORNO]: getStornoDocument, }; return documentsGetterMap[requestType] ? documentsGetterMap[requestType](request) : {}; }; export { XMLToObject, getDocument, getDocumentHash, buildXMLDocument };