import { z } from 'zod';
import { CompanyDatabase } from '../database/db.js';
import { BrregClient } from '../apis/brreg.js';
const OwnershipAnalysisSchema = z.object({
org_nr: z.string().describe("Organisasjonsnummer"),
include_subunits: z.boolean().default(true).describe("Inkluder datterselskaper/underenheter"),
depth: z.number().default(2).describe("Dybde i eierskapstreet")
});
export async function analyzeOwnership(args: unknown, db: CompanyDatabase, brreg: BrregClient) {
const params = OwnershipAnalysisSchema.parse(args);
// Get company info
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}`
}]
};
}
// Save to DB
await db.insertOrUpdateCompany({
org_nr: brregCompany.organisasjonsnummer,
name: brregCompany.navn,
organization_form: brregCompany.organisasjonsform?.beskrivelse,
nace_code: brregCompany.naeringskode1?.kode,
nace_description: brregCompany.naeringskode1?.beskrivelse,
employees_count: brregCompany.antallAnsatte,
business_municipality: brregCompany.forretningsadresse?.kommune,
last_updated: new Date().toISOString()
} as any);
company = await db.getCompany(params.org_nr);
}
// Get ownership structure
const ownership = await db.getOwnership(params.org_nr);
// Get subunits
let subunits: any[] = [];
if (params.include_subunits) {
subunits = await db.getSubunits(params.org_nr);
if (subunits.length === 0) {
const brregSubunits = await brreg.getSubunits(params.org_nr);
for (const sub of brregSubunits) {
await db.insertSubunit({
org_nr: sub.organisasjonsnummer,
parent_org_nr: params.org_nr,
name: sub.navn,
nace_code: sub.naeringskode1?.kode,
employees_count: sub.antallAnsatte,
business_address: sub.forretningsadresse?.adresse?.join(', '),
municipality: sub.forretningsadresse?.kommune,
established_date: sub.registreringsdatoEnhetsregisteret
});
}
subunits = await db.getSubunits(params.org_nr);
}
}
const report = `
🏢 EIERSKAPSANALYSE: ${company?.name}
📋 GRUNNINFO:
- Org.nr: ${params.org_nr}
- Organisasjonsform: ${company?.organization_form || 'Ukjent'}
- Bransje: ${company?.nace_description || 'Ukjent'}
- Ansatte: ${company?.employees_count || 'Ukjent'}
${ownership.length > 0 ? `
👥 EIERSKAP:
${ownership.map((o: any, idx: number) =>
`${idx + 1}. ${o.owner_name}
${o.owner_org_nr ? `📋 ${o.owner_org_nr}` : ''}
${o.ownership_percentage ? `📊 ${o.ownership_percentage}% eierandel` : ''}
${o.owner_type ? `🏷️ ${o.owner_type}` : ''}`
).join('\n\n')}
` : '📭 Ingen eierinfo tilgjengelig i database'}
${subunits.length > 0 ? `
🏭 DATTERSELSKAPER/UNDERENHETER (${subunits.length}):
${subunits.slice(0, 10).map((s: any, idx: number) =>
`${idx + 1}. ${s.name}
📋 ${s.org_nr}
👥 ${s.employees_count || 'Ukjent'} ansatte
📍 ${s.municipality || 'Ukjent'}`
).join('\n\n')}
${subunits.length > 10 ? `\n... og ${subunits.length - 10} flere` : ''}
` : ''}
💡 Dette er en forenklet eierskapsanalyse. For full UBO-analyse, bruk eksterne verktøy.
`;
return {
content: [{
type: "text" as const,
text: report
}]
};
}