@accounter/server
Version:
Accounter GraphQL server
50 lines • 2.29 kB
JavaScript
/**
* 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