[feature] AI-basert deteksjon av konsern, franchiser og merkevarerMediumfeature
## Problem
Kun **1.4%** av selskapene (27,857 av 2M) er markert som del av konsern (`is_in_group = true`). Dette tallet er sannsynligvis mye høyere i virkeligheten.
### Typer grupperinger vi mangler
- **Konsern:** Mor/datter-selskaper med felles eierskap
- **Franchiser:** Rema 1000, Narvesen, McDonald's, etc.
- **Merkevarer:** Selskaper som opererer under samme brand
- **Forvaltning:** Boligbyggelag som USBL (1,789 selskaper), OBOS (632)
### Data vi allerede har
Via `web_identities` kan vi se at mange selskaper deler domene:
| Domene | Antall selskaper |
|--------|------------------|
| usbl.no | 1,789 |
| obos.no | 632 |
| narvesen.no | 177 |
## AI-tilnærming
### 1. Regelbasert pre-filtering
- Selskaper med samme domene i `web_identities`
- Selskaper med lignende navn (fuzzy matching)
- Selskaper med overlappende aksjonærer/styremedlemmer
### 2. LLM-klassifisering
For kandidater fra pre-filtering:
```
Gitt disse selskapene, klassifiser relasjonen:
- KONSERN (mor/datter)
- FRANCHISE (franchisegiver/taker)
- MERKEVARE (samme brand)
- FORVALTNING (BBL, stiftelse)
- INGEN_RELASJON
```
### 3. Ny tabell: `company_groups`
```sql
CREATE TABLE company_groups (
id UUID PRIMARY KEY,
name TEXT NOT NULL,
group_type TEXT CHECK (group_type IN ('konsern', 'franchise', 'merkevare', 'forvaltning')),
parent_org_nr TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE company_group_members (
group_id UUID REFERENCES company_groups(id),
org_nr TEXT NOT NULL,
role TEXT DEFAULT 'member',
PRIMARY KEY (group_id, org_nr)
);
```
## Forventet verdi
- Bedre datakvalitet og forståelse av norsk næringsliv
- Mulighet for "vis alle i konsernet" på selskapssider
- Bedre søk og filtrering
Companybook Workspace•21.1.2026•Kenneth