UNPKG

@accounter/server

Version:
50 lines 2.29 kB
/** * Parses report entries from the content for a specific section * @param content - The full report content * @param section - The section to parse ('profitAndLoss', 'taxAdjustment', or 'balanceSheet') * @returns Array of ReportEntry objects, with filler records filtered out */ export function parseReportEntries(content, section) { // Define starting positions based on the specification const startPosition = { profitAndLoss: 512, // Position 512 according to spec taxAdjustment: 3212, // Position 3212 according to spec balanceSheet: 5912, // Position 5912 according to spec }; // Determine maximum number of entries (150 for each section according to spec) const maxEntries = 150; const entryLength = 18; // Each entry is 18 bytes (5 digits code + 13 digits amount) const entries = []; // Start position for this section const position = startPosition[section]; // Parse each entry for (let i = 0; i < maxEntries; i++) { const entryStartPos = position + i * entryLength; const entryEndPos = entryStartPos + entryLength; // Extract the entry if content is long enough if (content.length >= entryEndPos) { const codeStr = content.substring(entryStartPos, entryStartPos + 5).trim(); const amountStr = content.substring(entryStartPos + 5, entryEndPos).trim(); // Parse code and amount const code = parseInt(codeStr || '0'); let amount = 0; if (amountStr) { // Check if the amount is negative (sign in leftmost position) const isNegative = amountStr.charAt(0) === '-'; // Remove sign if present, then parse const absAmountStr = isNegative ? amountStr.substring(1) : amountStr; amount = parseInt(absAmountStr || '0'); // Apply negative sign if needed if (isNegative) { amount = -amount; } } // Filter out filler records (code 0 and amount 0) if (!(code === 0 && amount === 0)) { entries.push({ code, amount }); } } } return entries; } //# sourceMappingURL=parse-report-entries.js.map