# Ejendomsovervågning

Sæt ejendomme på en overvågningsliste, og få en signeret webhook, når BBR, vurdering, plandata eller jordforurening ændrer sig for dem. Følg desuden nye, ændrede og nedlagte adresser i de kommuner og postnumre, du arbejder i.

> **Kræver Pro** Ejendomsovervågning kræver Pro-planen eller højere; alle `/v1/overvaagning`-ruter svarer `402` på en lavere plan. Kaldene måles ikke mod din kvote. Hændelserne leveres med [webhooks](https://grundfast.dk/docs/webhooks).

## Overvågningslisten

Tilføj op til 100 BFE-numre pr. kald. Listen kan administreres med en API-nøgle eller fra dashboardet under **Overvågning**. En `note` følger med på alle hændelser for de ejendomme, den blev tilføjet med.

```http
POST /v1/overvaagning/ejendomme
Authorization: Bearer gf_live_...
Content-Type: application/json

{ "bfe": [5651067, 2425322], "note": "Portefølje Nord" }

HTTP/1.1 201 Created

{ "tilfoejet": 2, "allerede_overvaaget": [], "antal": 2, "maks": 250 }
```

| Metode | Sti | Hvad |
| --- | --- | --- |
| GET | /v1/overvaagning/ejendomme | Listen, nyeste først, med `side` og `antal`. |
| POST | /v1/overvaagning/ejendomme | Tilføj op til 100 BFE-numre. |
| GET | /v1/overvaagning/ejendomme/:bfe | Én ejendom med hvert registers seneste tilstand. |
| DELETE | /v1/overvaagning/ejendomme/:bfe | Stop overvågningen. |
| GET | /v1/overvaagning/adresser/haendelser | Feedet af adresseændringer i et område. |

| Plan | Ejendomme på listen |
| --- | --- |
| Pro | 250 |
| Scale | 2.500 |
| Enterprise | 25.000 |

Et kald, der ville bringe listen over planens loft, afvises med `409` og tilføjer ingenting. BFE-numre, der allerede er på listen, tælles ikke og returneres i `allerede_overvaaget`.

## Sådan tjekker vi

Hver ejendom læses cirka én gang i døgnet fra fire registre. Hvert register får sit eget fingeraftryk af de felter, der betyder noget, så en hændelse siger præcis, hvilket register der flyttede sig:

| Register | Hvad der sammenlignes |
| --- | --- |
| bbr | Bygninger og enheder: anvendelse, opførelses- og ombygningsår, etager, arealer, materialer og opvarmning. |
| vurdering | Seneste vurdering pr. vurderingsejendom: år, ejendoms- og grundværdi, areal, benyttelse og juridisk kategori. |
| plan | Zone, lokalplaner, delområder, kommuneplanrammer og aflyste planer med status. |
| jord | Områdeklassificering: om ejendommen er klassificeret, analysefri, forslag og antal polygoner. |

- **Det første tjek er et udgangspunkt** og sender ingen hændelse. Det kører kort efter, at ejendommen er tilføjet.
- Fingeraftrykket er uafhængigt af rækkefølgen i kildens svar, så samme data altid giver samme aftryk.
- Kan et register ikke læses, bevares det forrige aftryk (status `fejl`). En kilde, der er nede, udløser derfor aldrig en falsk ændring — næste vellykkede læsning sammenlignes med den sidste gode.
- Svarer et register, at det intet har for ejendommen (status `mangler`), er det en tilstand i sig selv: dukker en vurdering op, eller forsvinder en bygning, er det en ændring.
- Tidspunkterne spredes over døgnet, så en stor liste ikke tjekkes på én gang. Fejler alle registre, prøves igen efter 1, 2, 4 … timer.
- Opdateringer kan nå os op til et døgn efter, at de er registreret, fordi kilderne selv opdateres løbende og vi læser gennem vores cache.

Se hver ejendoms tilstand med `GET /v1/overvaagning/ejendomme/:bfe`: `registre.bbr.status`, `hash`, `opsummering`, `kontrolleret` og `aendret` pr. register. Selve hændelsen er `ejendom.aendret` — se payloaden under [webhooks](https://grundfast.dk/docs/webhooks#ejendom-aendret).

## Adresseændringer

Når den daglige DAR-opdatering lægges ind, sammenligner vi hver berørt adgangsadresse med det, vi havde før, og registrerer en ændring, når den er ny (`adresse.oprettet`), når betegnelse, vej, husnummer, postnummer, kommune eller placering har ændret sig (`adresse.aendret`), eller når den er nedlagt eller henlagt (`adresse.nedlagt`). Ændringer, der ikke rører de felter, giver ingen hændelse.

- En ændring hører til **området, adressen ligger i efter ændringen**; en nedlagt adresse hører til der, hvor den lå. Vil du følge en bestemt adresse uanset hvor den flytter hen, så angiv dens id.
- Ændringer gemmes i **35 dage**.
- Få dem som webhooks i bundter på op til 100 ved at abonnere med et `adresseFilter` — se [Adressehændelser i bundter](https://grundfast.dk/docs/webhooks#adresse-haendelser) — eller hent dem selv fra feedet.

```http
GET /v1/overvaagning/adresser/haendelser?kommunekode=0101&efter=0&antal=100
Authorization: Bearer gf_live_...

HTTP/1.1 200 OK

{
  "antal": 100,
  "haendelser": [ { "sekvens": 48112, "haendelse": "adresse.oprettet", ... }, ... ],
  "naeste_efter": 48311,
  "flere": true,
  "meta": { ... }
}
```

Angiv mindst én af `kommunekode`, `postnr` eller `adgangsadresse_id` (kommaseparerede lister er tilladt). Gem `naeste_efter`, og send den som `efter` i næste kald: så springer du aldrig en ændring over og får aldrig den samme to gange. Er `flere` `true`, ligger der allerede flere ændringer klar — kald igen med det samme.

```ts
import { GrundfastClient } from '@grundfast/sdk';

const gf = new GrundfastClient({ apiKey: process.env.GRUNDFAST_API_KEY! });

let efter = Number(await loadCursor()); // din egen gemte position, 0 første gang
for await (const h of gf.iterateAdresseHaendelser({ kommunekode: ['0101'], efter })) {
  await handle(h);
  efter = h.sekvens;
}
await saveCursor(efter);
```
