import { CompanyDatabase } from './build/database/db.js';
import { BrregClient } from './build/apis/brreg.js';
import { readdirSync, readFileSync, existsSync, statSync } from 'fs';
import { resolve } from 'path';
console.log('π Importing ALL extracted JSON files into database...');
console.log('ββββββββββββββββββββββββββββββββββββββ\n');
const db = new CompanyDatabase();
const brreg = new BrregClient();
// Find all JSON files in extracted folders
const extractedDir = resolve('./data/extracted');
let totalImported = 0;
let totalSkipped = 0;
let totalErrors = 0;
if (!existsSync(extractedDir)) {
console.log('β No extracted data directory found');
process.exit(1);
}
// Get all org folders
const orgFolders = readdirSync(extractedDir).filter(f => {
if (f.startsWith('.')) return false; // Skip hidden files
const path = resolve(extractedDir, f);
try {
const stats = statSync(path);
return stats.isDirectory() && readdirSync(path).some(file => file.endsWith('.json'));
} catch {
return false;
}
});
console.log(`Found ${orgFolders.length} companies with extracted data\n`);
for (const orgFolder of orgFolders) {
const orgNr = orgFolder === 'temp' ? null : orgFolder;
const folderPath = resolve(extractedDir, orgFolder);
const jsonFiles = readdirSync(folderPath).filter(f => f.endsWith('.json'));
if (jsonFiles.length === 0) continue;
console.log(`\nπ Processing ${orgFolder} (${jsonFiles.length} files)...`);
for (const jsonFile of jsonFiles) {
const filePath = resolve(folderPath, jsonFile);
try {
const data = JSON.parse(readFileSync(filePath, 'utf-8'));
// Extract org_nr from file if not in folder name
let finalOrgNr = orgNr;
if (!finalOrgNr && data.file) {
const match = data.file.match(/(\d{9})/);
finalOrgNr = match ? match[1] : null;
}
if (!finalOrgNr) {
console.log(` β οΈ Skipping ${jsonFile} - no org_nr found`);
totalSkipped++;
continue;
}
// Ensure company exists in database
let company = db.getCompany(finalOrgNr);
if (!company) {
console.log(` π Fetching company ${finalOrgNr} from Brreg...`);
const brregCompany = await brreg.getCompany(finalOrgNr);
if (brregCompany) {
db.insertOrUpdateCompany({
org_nr: brregCompany.organisasjonsnummer,
name: brregCompany.navn,
organization_form: brregCompany.organisasjonsform?.beskrivelse,
nace_code: brregCompany.naeringskode1?.kode,
employees_count: brregCompany.antallAnsatte,
last_updated: new Date().toISOString()
});
company = db.getCompany(finalOrgNr);
}
}
// Check if this year already exists
const existing = db.getFinancialHistory(finalOrgNr, 20).find(r => r.year === data.year);
if (existing && existing.source !== 'estimated') {
console.log(` βοΈ ${data.year} already in DB (source: ${existing.source})`);
totalSkipped++;
continue;
}
// Insert into database
db.insertFinancialSnapshot({
org_nr: finalOrgNr,
year: data.year,
revenue: data.revenue,
profit: data.profit,
assets: data.assets,
equity: data.equity,
employees: null,
source: data.source || 'openai_vision_extraction'
});
const revenue = data.revenue ? (data.revenue/1000000).toFixed(1) + 'M' : 'N/A';
const profit = data.profit ? (data.profit/1000000).toFixed(1) + 'M' : 'N/A';
console.log(` β
Imported ${data.year}: Rev=${revenue}, Profit=${profit}`);
totalImported++;
} catch (error) {
console.error(` β Error with ${jsonFile}: ${error.message}`);
totalErrors++;
}
}
}
console.log('\nββββββββββββββββββββββββββββββββββββββ');
console.log('π IMPORT SUMMARY');
console.log('ββββββββββββββββββββββββββββββββββββββ\n');
console.log(`β
Successfully imported: ${totalImported} records`);
console.log(`βοΈ Skipped (already exists): ${totalSkipped} records`);
console.log(`β Errors: ${totalErrors} records`);
// Test query for one company
if (orgFolders.length > 0) {
const testOrgNr = orgFolders[0] === 'temp' ? '999059198' : orgFolders[0];
const history = db.getFinancialHistory(testOrgNr, 10);
if (history.length > 0) {
console.log(`\nπ Sample data for ${testOrgNr}:`);
console.log('Year | Revenue | Source');
console.log('ββββββββββββββββββββββββββββ');
history.forEach(h => {
const rev = h.revenue ? (h.revenue/1000000).toFixed(1) + 'M' : 'N/A';
console.log(`${h.year} | ${rev.padEnd(12)} | ${h.source}`);
});
}
}
console.log('\nβ
Database import complete!');
db.close();