# BBR: kodelister og transformationer

Datafordeler leverer BBR som rå entiteter med talkoder, fremmednøgler, flere versioner og koordinater i UTM. Her er, hvad Grundfast gør ved dem, før du får svaret.

## Oversatte kodefelter

Felter som anvendelse, materialer og varme er koder i BBR. Grundfast oversætter hver kode til dansk tekst og returnerer begge dele som `{ "kode", "tekst" }`. Disse kodelister kan også hentes direkte:

| Kodeliste | BBR-felt | Eksempel |
| --- | --- | --- |
| bygningsanvendelse | Bygningens anvendelse (byg021) | `120` → Fritliggende enfamiliehus |
| enhedsanvendelse | Enhedens anvendelse (enh020) | `120` → Fritliggende enfamiliehus |
| varmeinstallation | Opvarmningsform (byg056) | `1` → Fjernvarme/blokvarme |
| opvarmningsmiddel | Primært brændsel (byg057) | `7` → Naturgas |
| supplerendevarme | Supplerende varme (byg058) | `1` → Varmepumpe |
| ydervaeg | Ydervæggens materiale (byg032) | `1` → Mursten |
| tagdaekning | Tagdækningsmateriale (byg033) | `5` → Tegl |

```bash
curl https://api.grundfast.dk/v1/kodeliste/tagdaekning
```

Svaret er `{ "navn", "koder": [{ "kode", "tekst" }] }`. Ydervæg og tag leveres både som primært og supplerende materiale (`ydervaeg_supplerende`, `tag_supplerende`). Begge lister bruger koden `3` for "Fibercement herunder asbest", så en materialebaseret asbest-screening skal læse alle fire felter.

## De fire transformationer

### 1. Koder til tekst

Som beskrevet ovenfor. Et kodefelt er `null`, når registret ikke har en værdi. En kode, der ikke findes i listen, beholdes med teksten `Ukendt (<kode>)` i stedet for at blive gættet eller droppet.

### 2. EPSG:25832 til WGS84

BBR-koordinater er i ETRS89 / UTM zone 32N, fx `POINT (533103.83 6223775.44)`. Grundfast reprojicerer til WGS84 og returnerer `[lon, lat]` i `geometri.coordinates` med de oprindelige koordinater i `geometri.epsg25832`. Se [Koordinatsystemer og geometri](https://grundfast.dk/docs/koordinater).

### 3. Kun den gældende version

BBR er bitemporalt: hver entitet har registrerings- og virkningstid og kan have flere versioner. Et almindeligt opslag giver den version, der gælder nu — bygningen, som den står i dag — så du ikke selv skal sortere i en tidsserie. Har du brug for tidligere versioner, så brug `?asOf=` eller `/historik`, som kræver Scale-planen. Se [Historik og tidsrejser](https://grundfast.dk/docs/historik).

### 4. Hele ejendommen i ét svar

Datafordeler leverer grafen i sider med cursors. Grundfast følger alle sider og samler ejendom, grund, bygninger og enheder, tilføjer jordstykker og ejerlavsnavne fra Matriklen, adresser fra DAR, kommune og region fra DAGI og et resumé af ejendomsvurderingen.

```http
GET /v1/bbr/ejendom/5651067
→ { "type": "ejendom", "bfe_nummer": 5651067, "jordstykker": [ … ],
    "hovedbygning_index": 0, "bygninger": [ { …, "enheder": [ … ] } ], … }
```

Adressen hænger på enhederne i ejendommen. Skal du kun bruge en adresse eller en virksomhed, findes adresser (DAR) og CVR også som selvstændige endpoints. Kommer du fra de gamle tjenester på services.datafordeler.dk, så se [migreringsguiden](https://grundfast.dk/migrering).

## Fredning og bevaringsværdi

BBR siger ikke, om en bygning er fredet. Grundfast slår hver bygning op i Slots- og Kulturstyrelsens register over fredede og bevaringsværdige bygninger (FBB) og lægger svaret på bygningen som `fredning`:

**bygninger[].fredning**

```json
{
  "fredning": {
    "fredet": false,
    "status": 3,
    "status_tekst": "vurderet",
    "bevaringsvaerdi": 4,
    "kilde": "fbb",
    "hentet": "2026-08-31T09:00:00Z"
  }
}
```

1. **`fredet` — fredet efter bygningsfredningsloven.** `true`, når bygningen er fredet; ellers `false`.
2. **`bevaringsvaerdi` — SAVE-værdien 1–9.** 1 er højest. `null` betyder, at bygningen ikke har fået en værdi — ikke at den er uden bevaringsværdi.
3. **`fredning: null` betyder ukendt.** Vi kunne ikke slå bygningen op. Det er ikke det samme som `fredet: false`.

Om en bygning er "bevaringsværdig", afhænger af den grænse, kommunen bruger. Vi leverer registrets værdier, ikke en vurdering.

## Hovedbygningen

En ejendom har ofte flere bygninger: hus, garage, udhus — og nogle gange registreringer uden attributter. `hovedbygning_index` peger på den bygning i `bygninger`, der har det største samlede bygningsareal (eller bebyggede areal, hvis det mangler). Brug den, når du skal vise ét opførelsesår eller ét areal for ejendommen. Den er `null`, hvis ingen bygning har et kendt areal.

```ts
const ejendom = await gf.ejendom(5651067);
const hoved =
  ejendom.hovedbygning_index === null ? undefined : ejendom.bygninger[ejendom.hovedbygning_index];
console.log(hoved?.opfoerelsesaar, hoved?.areal.samlet_boligareal_m2);
```

## Når Datafordeler er nede

Datafordeler har perioder med udfald og midlertidige afvisninger. Grundfast prøver igen med backoff, og svarer kilden stadig ikke, får du den seneste cachede kopi af ejendommen, markeret med `X-Grundfast-Stale: true` og `X-Grundfast-Cache-Age`. Se [Svar, null og friskhed](https://grundfast.dk/docs/svar-og-headers#friskhed) og den aktuelle status på [/status](https://grundfast.dk/status).

- BBR: se https://grundfast.dk/docs/api
