sakti-parser-fa
Version:
Simple TypeScript library for parsing Indonesian government budget Excel files (Sakti FA)
67 lines • 2.27 kB
JavaScript
/**
* Simple formatter for SAKTI parse results
*/
export class SaktiFormatter {
/**
* Format parse result to JSON or CSV
*/
format(result, options = {}) {
const { format = 'json', includeMetadata = true } = options;
if (format === 'csv') {
return this.toCSV(result, includeMetadata);
}
return this.toJSON(result, includeMetadata);
}
toJSON(result, includeMetadata) {
const output = {
data: result.data
};
if (includeMetadata) {
output.metadata = result.metadata;
}
return JSON.stringify(output, null, 2);
}
toCSV(result, includeMetadata) {
const lines = [];
// Add metadata as comments if requested
if (includeMetadata) {
lines.push(`# ${result.metadata.judul}`);
lines.push(`# Periode: ${result.metadata.periode_text}`);
lines.push(`# Kementerian: ${result.metadata.kementerian_kode} - ${result.metadata.kementerian_nama}`);
lines.push('');
}
// CSV headers
const headers = [
'_level',
'_parent',
'mata_anggaran',
'level_1_kode', 'level_1_uraian',
'level_2_kode', 'level_2_uraian',
'level_3_kode', 'level_3_uraian',
'level_4_kode', 'level_4_uraian',
'level_5_kode', 'level_5_uraian',
'level_6_kode', 'level_6_uraian',
'level_7_kode', 'level_7_uraian',
'level_8_kode', 'level_8_uraian',
'level_9_kode', 'level_9_uraian',
'level_10_kode', 'level_10_uraian',
'level_11_kode', 'level_11_uraian',
'nilai_rupiah',
'nilai_total'
];
lines.push(headers.join(','));
// CSV data
result.data.forEach(row => {
const values = headers.map(header => {
const value = row[header];
if (typeof value === 'string' && value.includes(',')) {
return `"${value}"`;
}
return value || '';
});
lines.push(values.join(','));
});
return lines.join('\\n');
}
}
//# sourceMappingURL=formatter.js.map