UNPKG

@accounter/server

Version:
79 lines 3.9 kB
/** * Safely parses a string to an integer with a fallback value * @param value The string to parse * @param fallback The fallback value if parsing fails * @returns The parsed integer or fallback value */ function parseIntWithFallback(value, fallback) { const trimmed = value.trim(); if (!trimmed) return fallback; const parsed = parseInt(trimmed); return Number.isNaN(parsed) ? fallback : parsed; } /** * Safely parses a single character to an integer with a fallback value * @param char The character to parse * @param fallback The fallback value if parsing fails * @returns The parsed integer or fallback value */ function parseCharWithFallback(char, fallback) { if (!char) return fallback; const parsed = parseInt(char); return Number.isNaN(parsed) ? fallback : parsed; } /** * Safely extracts a string field with optional trimming * @param str The source string * @param start The starting index (inclusive) * @param end The ending index (exclusive) * @param makeUndefinedIfEmpty Whether to return undefined for empty strings * @returns The extracted substring or undefined */ function extractString(str, start, end, makeUndefinedIfEmpty = true) { const value = str.substring(start, end).trim(); return value || (makeUndefinedIfEmpty ? undefined : value); } /** * Parses the header section of the report content * @param headerLine - The line containing header information * @returns A HeaderRecord object */ export function parseHeaderRecord(headerLine) { // Ensure we have data to parse if (!headerLine || headerLine.length < 142) { throw new Error('Invalid header line: Insufficient data'); } // Extract header fields according to the specification const header = { taxFileNumber: extractString(headerLine, 0, 9, false) || '', taxYear: extractString(headerLine, 9, 13, false) || '', idNumber: extractString(headerLine, 13, 22, false) || '', vatFileNumber: extractString(headerLine, 22, 31), withholdingTaxFileNumber: extractString(headerLine, 31, 40), industryCode: extractString(headerLine, 40, 44, false) || '', businessDescription: extractString(headerLine, 44, 94), businessType: parseIntWithFallback(headerLine.substring(94, 96), 0), reportingMethod: parseIntWithFallback(headerLine.substring(96, 98), 0), accountingMethod: parseIntWithFallback(headerLine.substring(98, 100), 0), accountingSystem: parseIntWithFallback(headerLine.substring(100, 102), 0), isPartnership: parseCharWithFallback(headerLine.charAt(102), undefined), includesProfitLoss: parseCharWithFallback(headerLine.charAt(103), 0), includesTaxAdjustment: parseCharWithFallback(headerLine.charAt(104), 0), includesBalanceSheet: parseCharWithFallback(headerLine.charAt(105), 0), profitLossEntryCount: parseIntWithFallback(headerLine.substring(106, 109), undefined), taxAdjustmentEntryCount: parseIntWithFallback(headerLine.substring(109, 112), undefined), balanceSheetEntryCount: parseIntWithFallback(headerLine.substring(112, 115), undefined), ifrsImplementationYear: extractString(headerLine, 115, 119), ifrsReportingOption: parseCharWithFallback(headerLine.charAt(119), undefined), softwareRegistrationNumber: extractString(headerLine, 120, 128), partnershipCount: parseIntWithFallback(headerLine.substring(128, 131), undefined), partnershipProfitShare: parseIntWithFallback(headerLine.substring(131, 137), undefined), currencyType: parseIntWithFallback(headerLine.substring(137, 139), 0), auditOpinionType: parseIntWithFallback(headerLine.substring(139, 141), undefined), amountsInThousands: parseCharWithFallback(headerLine.charAt(141), 2), }; return header; } //# sourceMappingURL=parse-header.js.map