import { z } from 'zod';
import { CompanyDatabase } from '../database/db.js';
import { BrregClient } from '../apis/brreg.js';
import { RegnskapClient } from '../apis/regnskap.js';
const BuildHistorySchema = z.object({
org_nr: z.string().describe("Organisasjonsnummer"),
years_needed: z.number().default(5).describe("Antall år tilbake (f.eks. 5 for 2020-2024)")
});
/**
* Smart tool to build complete financial history
* Auto-fetches latest year + provides download links for historical years
*/
export async function buildFinancialHistory(args: unknown, db: CompanyDatabase, brreg: BrregClient) {
const params = BuildHistorySchema.parse(args);
// Get company
let company = await db.getCompany(params.org_nr);
if (!company) {
const brregCompany = await brreg.getCompany(params.org_nr);
if (!brregCompany) {
return {
content: [{
type: "text" as const,
text: `Fant ikke selskap med org.nr ${params.org_nr}`
}]
};
}
await 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()
} as any);
company = await db.getCompany(params.org_nr);
}
// Step 1: Auto-fetch latest year
const regnskapClient = new RegnskapClient();
const latestData = await regnskapClient.getExtractedFinancials(params.org_nr);
if (!latestData) {
return {
content: [{
type: "text" as const,
text: `❌ Ingen regnskapsdata tilgjengelig i Regnskapsregisteret API for ${company?.name}`
}]
};
}
// Save latest year
await db.insertFinancialSnapshot({
org_nr: latestData.org_nr,
year: latestData.year,
revenue: latestData.revenue,
profit: latestData.profit,
assets: latestData.assets,
equity: latestData.equity,
employees: null,
source: 'regnskapsregisteret_api'
});
// Check what historical years are needed
const currentHistory = await db.getFinancialHistory(params.org_nr, params.years_needed);
const currentYears = currentHistory.map((h: any) => h.year);
const targetYear = latestData.year;
const startYear = targetYear - params.years_needed + 1;
const missingYears = [];
for (let year = startYear; year < targetYear; year++) {
if (!currentYears.includes(year)) {
missingYears.push(year);
}
}
const companyPageUrl = `https://virksomhet.brreg.no/nb/oppslag/enheter/${params.org_nr}`;
const report = `
📊 BYGGE FINANSIELL HISTORIKK: ${company?.name}
✅ SISTE ÅR AUTOMATISK HENTET (${latestData.year}):
💰 Omsetning: ${latestData.revenue ? (latestData.revenue / 1000000).toFixed(1) + 'M NOK' : 'N/A'}
📈 Resultat: ${latestData.profit ? (latestData.profit / 1000000).toFixed(1) + 'M NOK' : 'N/A'}
🏢 Eiendeler: ${latestData.assets ? (latestData.assets / 1000000).toFixed(1) + 'M NOK' : 'N/A'}
${currentHistory.length > 1 ? `
✅ HAR ALLEREDE ${currentHistory.length} ÅR I DATABASE:
${currentHistory.map((h: any) => `- ${h.year}: ${h.revenue ? (h.revenue / 1000000).toFixed(0) + 'M NOK' : 'N/A'}`).join('\n')}
` : ''}
${missingYears.length > 0 ? `
📥 MANGLER ${missingYears.length} ÅR FOR KOMPLETT HISTORIKK:
Trenger data for: ${missingYears.join(', ')}
🔗 RASK NEDLASTING (5 min per år):
1️⃣ ÅPNE SELSKAPSSIDE:
${companyPageUrl}
2️⃣ FOR HVERT ÅR (${missingYears.join(', ')}):
- Scroll til "Årsregnskap"
- Klikk "Innsendt årsregnskap [år]"
- PDF lastes ned
- Hent ut: Omsetning, Resultat, Eiendeler, Egenkapital
3️⃣ RASK BULK-IMPORT:
Opprett denne CSV-filen (ca. 5 min):
org_nr,year,revenue,profit,assets,equity,source
${params.org_nr},${latestData.year},${latestData.revenue},${latestData.profit},${latestData.assets},${latestData.equity},auto
${missingYears.map(y => ` ${params.org_nr},${y},[fyll inn],[fyll inn],[fyll inn],[fyll inn],bronnoysund`).join('\n')}
4️⃣ IMPORTER:
import_financials_from_file /path/to/file.csv format csv
⏱️ ESTIMERT TID: ${missingYears.length * 5} minutter
💰 KOSTNAD: GRATIS
🎯 RESULTAT: ${params.years_needed} år med komplett historikk!
` : `
🎉 KOMPLETT HISTORIKK ALLEREDE I DATABASE!
Du har ${currentHistory.length} år med data (${(currentHistory[currentHistory.length - 1] as any).year}-${(currentHistory[0] as any).year})
Kjør 'analyze_financials' eller 'analyze_growth' for trendanalyse!
`}
💡 FREMOVER:
Kjør 'fetch_financials' en gang i året for å holde historikken oppdatert.
Neste år (${latestData.year + 1}): Automatisk henting gir deg ${currentHistory.length + 1} års data!
ℹ️ API-BEGRENSNING:
Brønnøysund Open API gir kun siste år.
Historiske data krever engangs manuell nedlasting,
deretter er alt automatisk! 🚀
`;
return {
content: [{
type: "text" as const,
text: report
}]
};
}