UNPKG

@accounter/pcn874-generator

Version:
99 lines (98 loc) 4.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.headerInfoToHeaderAndFooterStrings = exports.numToSignedString = exports.addLeadingZeros = exports.cleanNonDigitChars = exports.digitsAdjuster = void 0; exports.sortTransactions = sortTransactions; exports.transactionToString = transactionToString; const schemas_js_1 = require("../schemas.js"); const index_js_1 = require("./index.js"); const digitsAdjuster = (value, length) => { return `${'0'.repeat(length)}${value}`.slice(-length); }; exports.digitsAdjuster = digitsAdjuster; const cleanNonDigitChars = (value) => { return value.replace(/\D/g, ''); }; exports.cleanNonDigitChars = cleanNonDigitChars; const addLeadingZeros = (value = 0, length) => { const zeros = '0'.repeat(length); const stringNum = Math.abs(Math.round(value)).toString(); const final = (zeros + stringNum).slice(-length); return final; }; exports.addLeadingZeros = addLeadingZeros; const numToSignedString = (value, length) => { const sign = value >= 0 ? '+' : '-'; const paddedNum = (0, exports.addLeadingZeros)(value, length); return `${sign}${paddedNum}`; }; exports.numToSignedString = numToSignedString; const headerInfoToHeaderAndFooterStrings = (header, options) => { try { const initiallyParsedHeader = schemas_js_1.headerCoreSchema.safeParse(header); if (!initiallyParsedHeader.success) { throw new Error(initiallyParsedHeader.error.format()._errors.join(', ')); } let { data: parsedHeader } = initiallyParsedHeader; if (!options.strict) { try { parsedHeader = schemas_js_1.headerTransformerSchema.parse(parsedHeader); } catch (e) { console.log(e); throw new Error('Error auto-fixing header', { cause: e }); } } const validatedHeader = schemas_js_1.headerStrictSchema.parse(parsedHeader); return { header: (0, index_js_1.headerBuilder)(validatedHeader), footer: (0, index_js_1.footerBuilder)(validatedHeader), }; } catch (e) { throw new Error(`Header validation error: ${e.message}`, { cause: e }); } }; exports.headerInfoToHeaderAndFooterStrings = headerInfoToHeaderAndFooterStrings; function sortTransactions(transactions, options) { if (!options.sort) { return transactions; } return transactions.sort((a, b) => { const entryTypeCompare = a.entryType.localeCompare(b.entryType); if (entryTypeCompare) { return entryTypeCompare; } const invoiceDateCompare = a.invoiceDate.localeCompare(b.invoiceDate); if (invoiceDateCompare) { return invoiceDateCompare; } const vatIdCompare = (a.vatId ?? '0').localeCompare(b.vatId ?? '0'); if (vatIdCompare) { return vatIdCompare; } return a.invoiceSum > b.invoiceSum ? 1 : -1; }); } function transactionToString(transaction, options) { try { const initiallyParsedTransaction = schemas_js_1.transactionCoreSchema.safeParse(transaction); if (!initiallyParsedTransaction.success) { throw new Error(initiallyParsedTransaction.error.format()._errors.join(', ')); } let { data: parsedTransaction } = initiallyParsedTransaction; if (!options.strict) { try { parsedTransaction = schemas_js_1.transactionTransformerSchema.parse(parsedTransaction); } catch (e) { console.log(e); throw new Error('Error auto-fixing transaction', { cause: e }); } } const validatedTransaction = schemas_js_1.transactionStrictSchema.parse(parsedTransaction); return (0, index_js_1.transactionBuilder)(validatedTransaction); } catch (e) { throw new Error(`Transaction validation error: ${e.message}\n\n${JSON.stringify(transaction)}`, { cause: e }); } }