import { z } from 'zod';
import { CompanyDatabase } from '../database/db.js';
import { BrregClient } from '../apis/brreg.js';
const GetCompanySchema = z.object({
org_nr: z.string().optional().describe("Organisasjonsnummer (9 siffer)"),
name: z.string().optional().describe("Selskapsnavn")
});
/**
* Get complete information about a specific company
* Direct lookup by org number or name search
*/
export async function getCompany(args: unknown, db: CompanyDatabase, brreg: BrregClient) {
const params = GetCompanySchema.parse(args);
if (!params.org_nr && !params.name) {
return {
content: [{
type: "text" as const,
text: "⚠️ Må oppgi enten org_nr eller name"
}]
};
}
let company: any = null;
let orgNr = params.org_nr;
// If name provided, search for org number first
if (!orgNr && params.name) {
console.error(`Searching for company by name: ${params.name}`);
const searchResults = await brreg.searchCompanies(params.name, 10);
if (searchResults.length === 0) {
return {
content: [{
type: "text" as const,
text: `Fant ingen selskaper med navn "${params.name}"`
}]
};
}
if (searchResults.length === 1) {
// Exact match, use it
orgNr = searchResults[0].organisasjonsnummer;
} else {
// Multiple matches, show options
const options = searchResults.slice(0, 5).map((c, idx) =>
`${idx + 1}. ${c.navn} (${c.organisasjonsnummer})\n ${c.forretningsadresse?.poststed || 'Ukjent'} - ${c.naeringskode1?.beskrivelse || 'Ukjent bransje'}`
).join('\n\n');
return {
content: [{
type: "text" as const,
text: `Fant ${searchResults.length} selskaper med navn "${params.name}":\n\n${options}\n\n💡 Bruk org.nr for å hente spesifikt selskap.`
}]
};
}
}
// Get full company details
console.error(`Fetching company details for: ${orgNr}`);
const brregCompany = await brreg.getCompany(orgNr!);
if (!brregCompany) {
return {
content: [{
type: "text" as const,
text: `Fant ikke selskap med org.nr ${orgNr}`
}]
};
}
// Save to database
await db.insertOrUpdateCompany({
org_nr: brregCompany.organisasjonsnummer,
name: brregCompany.navn,
organization_form: brregCompany.organisasjonsform?.beskrivelse,
organization_form_code: brregCompany.organisasjonsform?.kode,
nace_code: brregCompany.naeringskode1?.kode,
nace_description: brregCompany.naeringskode1?.beskrivelse,
employees_count: brregCompany.antallAnsatte,
established_date: brregCompany.registreringsdatoEnhetsregisteret,
business_address: brregCompany.forretningsadresse?.adresse?.join(', '),
business_postcode: brregCompany.forretningsadresse?.postnummer,
business_city: brregCompany.forretningsadresse?.poststed,
business_municipality: brregCompany.forretningsadresse?.kommune,
business_municipality_number: brregCompany.forretningsadresse?.kommunenummer,
postal_address: brregCompany.postadresse?.adresse?.join(', '),
postal_postcode: brregCompany.postadresse?.postnummer,
postal_city: brregCompany.postadresse?.poststed,
in_mva_register: brregCompany.registrertIMvaregisteret,
in_foretaksregister: brregCompany.registrertIForetaksregisteret,
bankrupt: brregCompany.konkurs,
under_liquidation: brregCompany.underAvvikling,
under_forced_liquidation: brregCompany.underTvangsavviklingEllerTvangsopplosning,
last_updated: new Date().toISOString()
} as any);
const report = `
🏢 ${brregCompany.navn}
📋 GRUNNINFO:
- Organisasjonsnummer: ${brregCompany.organisasjonsnummer}
- Organisasjonsform: ${brregCompany.organisasjonsform?.beskrivelse || 'Ukjent'}
- Etablert: ${brregCompany.stiftelsesdato || brregCompany.registreringsdatoEnhetsregisteret || 'Ukjent'}
🏷️ BRANSJE:
- NACE: ${brregCompany.naeringskode1?.kode || 'Ukjent'}
- Beskrivelse: ${brregCompany.naeringskode1?.beskrivelse || 'Ukjent'}
${brregCompany.naeringskode2 ? `- NACE 2: ${brregCompany.naeringskode2.kode} - ${brregCompany.naeringskode2.beskrivelse}` : ''}
👥 ANSATTE:
- Antall: ${brregCompany.antallAnsatte || 'Ikke registrert'}
${(brregCompany as any).harRegistrertAntallAnsatte ? '- Status: ✅ Registrert i NAV Aa-registeret' : '- Status: ⚠️ Ikke rapportert'}
📍 ADRESSE:
- Forretningsadresse: ${brregCompany.forretningsadresse?.adresse?.join(', ') || 'Ukjent'}
- Poststed: ${brregCompany.forretningsadresse?.postnummer || ''} ${brregCompany.forretningsadresse?.poststed || 'Ukjent'}
- Kommune: ${brregCompany.forretningsadresse?.kommune || 'Ukjent'}
📞 KONTAKT:
${(brregCompany as any).hjemmeside ? `- Hjemmeside: ${(brregCompany as any).hjemmeside}` : ''}
${(brregCompany as any).telefon ? `- Telefon: ${(brregCompany as any).telefon}` : ''}
📊 STATUS:
- I MVA-registeret: ${brregCompany.registrertIMvaregisteret ? '✅ Ja' : '❌ Nei'}
- I Foretaksregisteret: ${brregCompany.registrertIForetaksregisteret ? '✅ Ja' : '❌ Nei'}
- Konkurs: ${brregCompany.konkurs ? '🔴 JA' : '✅ Nei'}
- Under avvikling: ${brregCompany.underAvvikling ? '⚠️ JA' : '✅ Nei'}
${(brregCompany as any).sisteInnsendteAarsregnskap ? `- Siste årsregnskap: ${(brregCompany as any).sisteInnsendteAarsregnskap}` : ''}
💡 VIDERE ANALYSE:
- analyze_ownership - Se eierstruktur og datterselskaper
- track_board - Se styresammensetning
- analyze_financials - Risikovurdering (eller importer regnskapsdata først)
- import_financials - Importer årsregnskap for full analyse
`;
return {
content: [{
type: "text" as const,
text: report
}]
};
}