import { z } from 'zod';
import { CompanyDatabase } from '../database/db.js';
import { BrregClient } from '../apis/brreg.js';
const BoardTrackingSchema = z.object({
org_nr: z.string().optional().describe("Organisasjonsnummer"),
person_id: z.string().optional().describe("Person-ID for å finne alle styrer personen sitter i"),
company_name: z.string().optional().describe("Selskapsnavn (alternativ til org.nr)")
});
export async function trackBoard(args: unknown, db: CompanyDatabase, brreg: BrregClient) {
const params = BoardTrackingSchema.parse(args);
let orgNr = params.org_nr;
// If name provided, search for org number
if (!orgNr && params.company_name) {
const companies = await brreg.searchCompanies(params.company_name, 1);
if (companies.length > 0) {
orgNr = companies[0].organisasjonsnummer;
} else {
return {
content: [{
type: "text" as const,
text: `Fant ikke selskap med navn "${params.company_name}"`
}]
};
}
}
if (!orgNr && !params.person_id) {
return {
content: [{
type: "text" as const,
text: "Må oppgi enten org_nr, company_name eller person_id"
}]
};
}
// Get board members
const boardMembers = await db.getBoardMembers(orgNr!);
// If no cached data, fetch from Brønnøysund
if (boardMembers.length === 0 && orgNr) {
const roles = await brreg.getRoles(orgNr);
// Parse and save roles
for (const roleGroup of roles) {
for (const role of roleGroup.roller || []) {
await db.insertBoardMember({
company_org_nr: orgNr,
person_id: role.person?.fodselsdato,
name: role.person?.navn?.fornavn + ' ' + role.person?.navn?.etternavn,
role_type: role.type?.kode,
role_description: role.type?.beskrivelse,
appointed_date: null,
birth_date: role.person?.fodselsdato,
is_active: true
});
}
}
}
const company = await db.getCompany(orgNr!);
const report = `
👔 STYRESAMMENSETNING: ${company?.name || 'Ukjent selskap'}
${boardMembers.length > 0 ? `
${boardMembers.map((m: any, idx: number) =>
`${idx + 1}. ${m.name || 'Ukjent navn'}
🏷️ ${m.role_description || m.role_type || 'Ukjent rolle'}
${m.birth_date ? `📅 ${m.birth_date}` : ''}`
).join('\n\n')}
` : '📭 Ingen styremedlemmer funnet i database.\n\nℹ️ Brønnøysunds Roller-API krever autentisering for full tilgang.'}
💡 For å tracke en persons styreverv på tvers av selskaper, bruk person_id parameteren.
`;
return {
content: [{
type: "text" as const,
text: report
}]
};
}