> For the complete documentation index, see [llms.txt](https://docs.cerrix.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cerrix.com/cerrix-documentation-no/cerrix-funksjoner/admin-settings/api-documentation/api-endpoint-relationships.md).

# Relasjoner mellom API-endepunkter

## To API-familier - ulike nøkkeltyper

CERRIX eksponerer endepunkter i to parallelle "familier":

| Familie                        | Stiprefiks                                                                                   | Identifier-type                                          | Formål                                                                            |
| ------------------------------ | -------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Direkte data                   | `/directdata/v1/*`                                                                           | `GUID` (uuid)                                            | Normalisert, én enhet per endepunkt, utformet for korrekte relasjonelle koblinger |
| Aggregert / forhåndssammenføyd | `/riskdata/*`, `/eventdata/*`, `/moidata/*`, `/findingreportdata/*`, `/taskdata/*`, `/kri/*` | streng `*Identifier` (f.eks. `R-001`, `EV-014`, `M-022`) | Forhåndssammensatte/denormaliserte nyttelaster                                    |

Bro mellom familier: enheter eksponerer både deres `GUID` og deres `Identifier`. For å koble en rad som kommer fra `/eventdata/events` (nøkkel: `identifikator`) med en fra `/directdata/v1/eventmoi` (nøkkel: `EventGuid`), bruk `Identifier` ↔ `GUID` tilordningen som er tilgjengelig på den tilsvarende direct-data-entiteten.

## Primærnøkler per endepunkt (Direct Data)

| Domene                                           | Endepunkt                                                | PK                                      | Forretningsnøkkel     |
| ------------------------------------------------ | -------------------------------------------------------- | --------------------------------------- | --------------------- |
| Bruker                                           | `/directdata/v1/bruker`                                  | `GUID`                                  | —                     |
| Organisasjon                                     | `/directdata/v1/Organisasjon`                            | `GUID`                                  | `Sti`                 |
| Forretningsdimensjon                             | `/directdata/v1/forretningsdimensjon`                    | `GUID`                                  | `Sti`                 |
| Rammeverksdimensjon                              | `/directdata/v1/rammeverksdimensjon`                     | `GUID`                                  | `Sti`                 |
| Risiko                                           | `/directdata/v1/Risiko`                                  | `GUID`                                  | `Identifier`          |
| Kontroll                                         | `/directdata/v1/Kontroll`                                | `GUID`                                  | `Identifier`          |
| Avvik                                            | `/directdata/v1/hendelser`                               | `Id` (uuid)                             | `Identifier` (nummer) |
| Tredjepart                                       | `/directdata/v1/tredjepart`                              | `GUID`                                  | `Identifier`          |
| Tredjepartskontrakt                              | `/directdata/v1/tredjepartkontrakt`                      | `ContractGuid`                          | `Kontraktnummer`      |
| Funnrapport                                      | `/directdata/v1/funnrapport`                             | `GUID`                                  | `Rapportnummer`       |
| Vurdering                                        | `/directdata/v1/vurdering`                               | `GUID`                                  | —                     |
| KRI                                              | `/directdata/v1/kri`                                     | `GUID`                                  | `Identifier`          |
| Oppgaveserie                                     | `/directdata/v1/taskseries`                              | `GUID`                                  | —                     |
| MoI (Risiko)                                     | `/directdata/v1/riskmoi`                                 | `GUID`                                  | `Identifier`          |
| MoI (Kontroll)                                   | `/directdata/v1/controlmoi`                              | `GUID`                                  | `Identifier`          |
| MoI (Hendelse)                                   | `/directdata/v1/eventmoi`                                | `GUID`                                  | `Identifier`          |
| MoI (Tredjepart)                                 | `/directdata/v1/thirdpartymoi`                           | `GUID`                                  | `Identifier`          |
| MoI (BIM / Funnrapport)                          | `/directdata/v1/bimmoi`                                  | `GUID`                                  | `Identifier`          |
| MoI (Dataforvaltning)                            | `/directdata/v1/datamanagementmoi`                       | `GUID`                                  | `Identifier`          |
| MoI-kommentar                                    | `/directdata/v1/moicomment`                              | `GUID`                                  | —                     |
| Avansert effektivitet                            | `/directdata/v1/advancedeffectiveness`                   | `GUID`                                  | —                     |
| Periode for avansert effektivitet                | `/directdata/v1/advancedeffectivenessperiod`             | `GUID`                                  | —                     |
| Avansert effektivitetseksempel                   | `/directdata/v1/advancedeffectivenesssample`             | `GUID`                                  | —                     |
| Definisjon av teststeg for avansert effektivitet | `/directdata/v1/advancedeffectivenessteststepdefinition` | `GUID`                                  | —                     |
| Inndata for teststeg for avansert effektivitet   | `/directdata/v1/advancedeffectivenessteststepinput`      | `GUID`                                  | —                     |
| Design/implementering                            | `/directdata/v1/designimplementation`                    | `GUID`                                  | —                     |
| Enkel effektivitet                               | `/directdata/v1/simpleeffectiveness`                     | `GUID`                                  | —                     |
| Egendefinerte feltverdier                        | `/directdata/v1/{entity}customfieldvalues`               | sammensatt (`{Entity}Guid`, `Feltnavn`) | —                     |

For aggregerte endepunkter er PK-en den `*Identifier` strengen i hver array (f.eks. `Risiko Identifier`, `Kontroll Identifier`, `Hendelse Identifier`, `moI Identifier`, `rapportnr.`).

## Fremmednøkkelkart (hvordan man kobler sammen på tvers av endepunkter)

### **Hierarki / Grunndata (brukes overalt)**

* `Organisasjon.ParentGuid` → `Organisasjon.Guid` (selvrefererende tre; `Sti` viser hele brødsmulestien).
* `Forretningsdimensjon.ParentGuid` → `Forretningsdimensjon.Guid` (tre).
* `Rammeverksdimensjon.ParentGuid` → `Rammeverksdimensjon.Guid` (tre).
* `Bruker.OrganisasjonGuid` → `Organisasjon.Guid`.

### **Risiko**

* `Risiko.OrganisasjonGuid` → `Organisasjon.Guid`
* `Risiko.Forretningsdimensjoner[]` → `Forretningsdimensjon.Guid`
* `Risiko.Rammeverksdimensjoner[]` → `Rammeverksdimensjon.Guid`
* `Risiko.TilknyttedeKontroller[]` → `Kontroll.Guid` (mange-til-mange; speiles av `Kontroll.TilknyttedeRisikoer[]`)
* `Risiko.TilknyttedeRisikoMois[]` → `RisikoMoi.Guid` (også tilgjengelig via `RisikoMoi.RisikoGuid`)
* `Risiko.TilknyttedeBimMois[]` → `BimMoi.Guid`
* `Risiko.TilknyttedeTredjeparter[]` → `Tredjepart.Guid`
* `Risiko.GodkjennerBrukerGuid` / `VurdererBrukerGuid` → `Bruker.Guid`

### **Kontroll**

* `Kontroll.OrganisasjonGuid` → `Organisasjon.Guid`; `Kontroll.GjeldendeOrganisasjoner[]` → `Organisasjon.Guid`
* `Kontroll.Forretningsdimensjoner[]` / `Rammeverksdimensjoner[]` → tilsvarende dimensjon `GUID`
* `Kontroll.TilknyttedeRisikoer[]` → `Risiko.Guid`
* `Kontroll.TilknyttedeKontrollMois[]` → `KontrollMoi.Guid` (også `KontrollMoi.KontrollGuid`)
* `Kontroll.TilknyttedeBimMois[]` → `BimMoi.Guid`
* `Kontroll.TilknyttedeTredjeparter[]` → `Tredjepart.Guid`
* `DesignImplementering.KontrollGuid` → `Kontroll.Guid`
* `EnkelEffektivitet.KontrollGuid` → `Kontroll.Guid`
* `AvansertEffektivitet.KontrollGuid` → `Kontroll.Guid`
* `AvansertEffektivitetPeriode.KontrollGuid` → `Kontroll.Guid`; `.PeriodeGuid` referert fra `AdvancedEffectiveness.PeriodGuid`
* `AdvancedEffectivenessSample.EffectivenessGuid` → `AdvancedEffectiveness.Guid`
* `AdvancedEffectivenessTestStepDefinition.EffectivenessGuid` → `AdvancedEffectiveness.Guid`
* `AdvancedEffectivenessTestStep(input).SampleGuid` → `AdvancedEffectivenessSample.Guid`; `.TestStepDefinitionGuid` → trinndefinisjon
* `ControlScoreOverview.ControlGuid` → `Kontroll.Guid`

### **MoI-er (én MoI-tabell per foreldertype)**

Hver MoI-variant har én forelder-FK pluss de universelle MoI-feltene:

| MoI-endepunkt                      | Forelder-FK                              | Forelder-endepunkt                                                       |
| ---------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------ |
| `/directdata/v1/riskmoi`           | `RiskGuid`                               | `/directdata/v1/Risiko`                                                  |
| `/directdata/v1/controlmoi`        | `ControlGuid`                            | `/directdata/v1/Kontroll`                                                |
| `/directdata/v1/eventmoi`          | `EventGuid`                              | hendelse (eldre `/eventdata/events.identifier`; samme post, se bro i §1) |
| `/directdata/v1/thirdpartymoi`     | `ThirdPartyGuid`                         | `/directdata/v1/tredjepart`                                              |
| `/directdata/v1/bimmoi`            | `FindingReportGuid` (+ `AssessmentGuid`) | `/directdata/v1/funnrapport`, `/directdata/v1/vurdering`                 |
| `/directdata/v1/datamanagementmoi` | `ProcessingPurposeGuid`                  | databehandling (Behandlingsform�l)                                       |

Felles MoI-FK-er på tvers av alle varianter: `OrganizationResponsibleGuid`, `OrganizationReviewerGuid` → `Organisasjon.Guid`; `Ansvarlige[]`, `Delegater[]`, `Vurderere[]` → `Bruker.Guid`; `Forretningsdimensjoner[]` → `Forretningsdimensjon.Guid`.`MoiComment.MoiGuid` → enhver MoI `GUID` (fungerer uavhengig av kilde — kommentarer er universelle). Det aggregerte endepunktet `/moidata/moi` samler alle MoI-kilder i én nyttelast; `moi_Source` angir hvilken foreldertype den kom fra.

### **Hendelser (eldre) og Incidents (erstatningsmodul)**

Events-modulen er eldre og blir erstattet av Incidents. Eldre hendelseskoblinger (strengidentifikatorer):

* `/eventdata/eventmois` — `eventMoIs.hendelse Identifier` → `hendelser.identifier`.
* `/eventdata/databreachmois` — `Personvernbrudd.hendelse Identifier` → `hendelser.identifier`; `moIs.hendelse Identifier` → det samme.
* `/riskdata/riskcontrolmois` hendelsesblokk: `hendelser.eventIdentifier` kobles til `hendelser.identifier`.

Nye Avvik (`/directdata/v1/hendelser`):

* `Id` (uuid) PK, `Identifier` (number) forretningsnøkkel.
* `RapporterendeOrganisasjon`, `BerørteOrganisasjoner[]`, `ForårsaketAvOrganisasjoner[]` → `Organisasjon.Guid`.
* `BerørteTredjeparter[]`, `ForårsaketAvTredjeparter[]` → `Tredjepart.Guid`.
* `Klassifisering` → `AvviksKlassifisering.Id`; `Avvikstyper[]` → `AvviksType.Id`.
* `RotårsaksKategori[]` → grunndata for rotårsakskategori.
* `ForretningsdimensjonsGuids[]` / `RammedimensjonsGuids[]` → tilsvarende dimensjoner.
* `RapportørGuid`, `AnsvarligeGuids[]`, `VurdererGuids[]`, `InformerteGuids[]` → `Bruker.Guid`.

### **Tredjepart**

* `Tredjepart.OrganisasjonsAnsvarligGuid` / `OrganisasjonensReelleEierGuid` → `Organisasjon.Guid`
* `Tredjepart.OrganisasjonerIBruk[]` → `Organisasjon.Guid`
* `Tredjepart.Ansvarlige[]` → `Bruker.Guid`
* `Tredjepart.TilknyttedeRisikoer[]` → `Risiko.Guid`; `.TilknyttedeKontroller[]` → `Kontroll.Guid`
* `Tredjepart.TilknyttedeTredjepartMois[]` → `TredjepartMoi.Guid` (også `TredjepartMoi.TredjepartGuid`)
* `TredjepartKontakt.TredjepartGuid` → `Tredjepart.Guid`
* `TredjepartKontrakt.TredjepartGuid` → `Tredjepart.Guid`
* `TredjepartKontrakt.KontraktsEierGuid` → `Bruker.Guid`
* `TredjepartKontrakt.Tjenester[]` → `Tredjepartstjenester.Id`
* Grunndata-FK-er: `RelasjonsId` → `TredjepartsRelasjon.Id`; `KritikalitetId` → `Tredjepartskritikalitet.Id`; `StatusForInvolveringId` → `TredjepartsStatusForInvolvering.Id`; `Tjenester[]` → `Tredjepartstjenester.Id`.

### **Funnrapport / Vurdering / BIM**

* `Vurdering.FunnrapportGuid` → `Funnrapport.Guid`
* `Vurdering.TilknyttedeBimMois[]` → `BimMoi.Guid`
* `BimMoi.FunnrapportGuid` → `Funnrapport.Guid`; `BimMoi.VurderingGuid` → `Vurdering.Guid`
* `Funnrapport.OrganisasjonsAnsvarligGuid` / `OrganizationReviewerGuid` → `Organisasjon.Guid`; `AnsvarligGuid` / `VurdererGuid` → `Bruker.Guid`
* `FunnrapportRapportTypeId` → `FunnrapportRapportType.Id`; `TotalScoreId` → `FunnrapportRapportTypeScore.Id`; `ValideringstypeId` → `FunnrapportValideringstype.Id`
* Arv `/funnrapportdata/funnrapportvurderinger` kobles via `rapportnavn` + `rapportnr.`.

### **KRI**

* `Kri.Organisasjoner[]` → `Organisasjon.Guid`
* `Kri.Forretningsdimensjoner[]` / `Rammeverksdimensjoner[]` → tilsvarende dimensjoner
* `Kri.Risikokataloger[]` → `Risikokatalog.Id`
* `KriDataVerdier.KriGuid` → `Kri.Guid`; `.Organisasjon` → `Organisasjon.Guid`
* Arv `/kri/data/list` returnerer Identifier; `POST /kri/data/store/{identifier}` skriver tilbake via Identifier.

### **Oppgave**

* `Task.tilknyttedeKontroller[].guid` (eldre) / `tilknyttetKontroll` (POST) → `Kontroll.Guid`
* `Task.tilknyttedeOrganisasjoner[]` → `Organisasjon.Guid`
* `Task.tilknyttedeForretningsdimensjoner[]` / `tilknyttedeRammedimensjoner[]` → tilsvarende dimensjoner
* `Task.ansvarlige[]` / `gjennomlesere[]` → `Bruker.Guid`
* `TaskSeries.Ansvarlige[]` / `Vurderere[]` → `Bruker.Guid`

### **Tilpassede felt (mønster delt av Kontroll, Tredjepart, Tredjepartskontrakt, Avvik)**

* `{entity}tilpassedefelt` returnerer feltdefinisjonene (`GUID`, navn, type, alternativer).
* `{entity}tilpassedefeltverdier` returnerer rader fra `{Entity}Guid` + dynamisk `Feltnavn: verdi` par.
* Koble på `{Entity}Guid` (f.eks. `ControlGuid`, `TredjepartGuid`, `ContractGuid`,`AvvikId`).

## ER-diagram

{% code expandable="true" collapsedlinecount="10" %}

```mermaid

erDiagram
    Organisasjon ||--o{ Organisasjon : "ParentGuid (tre)"
    Forretningsdimensjon ||--o{ Forretningsdimensjon : "ParentGuid (tre)"
    Rammedimensjon ||--o{ Rammedimensjon : "ParentGuid (tre)"

    Organisasjon ||--o{ Bruker : "OrganisasjonGuid"

    %% Risiko side
    Organisasjon ||--o{ Risiko : "OrganisasjonGuid"
    Risiko }o--o{ Kontroll : "LinkedRisikoer / LinkedKontroller"
    Risiko }o--o{ Tredjepart : "LinkedTredjeparter"
    Risiko ||--o{ RisikoMoi : "RisikoGuid"
    Risiko }o--o{ Forretningsdimensjon : "Forretningsdimensjoner[]"
    Risiko }o--o{ Rammedimensjon : "Rammedimensjoner[]"
    Risikokatalog ||--o{ Risiko : "RisikokatalogId"

    %% Kontroll side
    Organisasjon ||--o{ Kontroll : "OrganisasjonGuid"
    Kontroll ||--o{ KontrollMoi : "KontrollGuid"
    Kontroll ||--o{ DesignImplementering : "KontrollGuid"
    Kontroll ||--o{ EnkelEffektivitet : "KontrollGuid"
    Kontroll ||--o{ AvansertEffektivitet : "KontrollGuid"
    Kontroll ||--o{ Kontrollscoreoversikt : "KontrollGuid"
    AvansertEffektivitet ||--o{ AvansertEffektivitetsperiode : "PeriodGuid"
    AvansertEffektivitet ||--o{ AvansertEffektivitetsprøve : "EffektivitetGuid"
    AvansertEffektivitet ||--o{ AdvEffTestStepDef : "EffektivitetGuid"
    AvansertEffektivitetsprøve ||--o{ AdvEffTestStepInput : "TestStepDefinitionGuid"
    AdvEffTestStepDef ||--o{ AdvEffTestStepInput : "TestStepDefinitionGuid"

    %% Oppgaver
    Kontroll ||--o{ Oppgave : "tilknyttetKontroll"
    Oppgaveserie ||--o{ Oppgave : "(serie → oppgaver)"

    %% Hendelse / Avvik
    Hendelse ||--o{ HendelseMoi : "HendelseGuid / hendelse Identifier"
    Hendelse ||--o| Databrudd : "hendelse Identifier"
    Hendelse ||--o{ DatabruddMoi : "hendelse Identifier"
    Organisasjon ||--o{ Avvik : "RapporterendeOrganisasjon / Berørt / ForårsaketAv"
    Tredjepart }o--o{ Avvik : "Berørt / ForårsaketAv Tredjeparter"
    Avviksklassifisering ||--o{ Avvik : "Klassifisering"
    Avvikstype }o--o{ Avvik : "Avvikstyper[]"

    %% Tredjepart
    Organisasjon ||--o{ Tredjepart : "OrganisasjonAnsvarligGuid"
    Tredjepart ||--o{ TredjepartKontakt : "TredjepartGuid"
    Tredjepart ||--o{ TredjepartKontrakt : "TredjepartGuid"
    Tredjepart ||--o{ TredjepartMoi : "TredjepartGuid"
    Tredjepart ||--o{ TredjepartVurdering : "(vurderinger)"
    TredjepartKontrakt }o--o{ Tredjepartstjenester : "Tjenester[]"

    %% Funnrapport / Vurdering / BIM
    Funnrapport ||--o{ Vurdering : "FunnrapportGuid"
    Funnrapport ||--o{ BimMoi : "FunnrapportGuid"
    Vurdering ||--o{ BimMoi : "VurderingGuid / KobledeBimMoi"

    %% MoI for dataforvaltning
    Behandlingsformål ||--o{ DataManagementMoi : "BehandlingsformålGuid"

    %% MoI-kommentarer er universelle
    RisikoMoi ||--o{ MoiComment : "MoiGuid"
    KontrollMoi ||--o{ MoiComment : "MoiGuid"
    HendelseMoi ||--o{ MoiComment : "MoiGuid"
    TredjepartMoi ||--o{ MoiComment : "MoiGuid"
    BimMoi ||--o{ MoiComment : "MoiGuid"
    DataManagementMoi ||--o{ MoiComment : "MoiGuid"

    %% KRI
    KRI ||--o{ KRIDataValue : "KriGuid"
    Organisasjon ||--o{ KRI : "Organisasjoner[]"
    Risikokatalog }o--o{ KRI : "Risikokataloger[]"

    %% Tverrgående grunndata på de fleste enheter (BD/FD/Bruker-koblinger utelatt på enhetene over for lesbarhet)
    Forretningsdimensjon }o--o{ Kontroll : "Forretningsdimensjoner[]"
    Rammedimensjon }o--o{ Kontroll : "Rammedimensjoner[]"
    Forretningsdimensjon }o--o{ Tredjepart : "Forretningsdimensjoner[]"
    Rammedimensjon }o--o{ Tredjepart : "Rammedimensjoner[]"
    Forretningsdimensjon }o--o{ Avvik : "ForretningsdimensjonGuids[]"
    Rammedimensjon }o--o{ Avvik : "RammedimensjonGuids[]"
```

{% endcode %}

## Løse identifikatorer i praksis

API-et er integrasjonsflaten for å bygge din egen datamodell på CERRIX, så ta utgangspunkt i svarene fra endepunktene når du utformer koblingene dine. Noen praktiske mønstre dukker opp i nesten hver integrasjon.

### Løse bruker-GUID-er til navn

Felter som refererer til brukere — slik som evidensopplasteren på en testplan, eller listen over Reviewer på en oppgave i `/directdata/v1/tasks` — returnerer lister med bruker-GUID-er. Løs disse til navn ved å koble dem mot `/directdata/v1/bruker` på `GUID`. En tom liste er et gyldig resultat: en Reviewer-liste som kommer tilbake tom, betyr ganske enkelt at ingen Reviewer er tildelt den oppgaven.

### Last identifikatorkolonner som tekst

Konfigurer uthentingen slik at den leser `GUID`, `Id`, og `Identifier` kolonner som **tekst** felt. Disse verdiene kan inneholde bokstaver, så en pipeline som forventer en numerisk type ender opp med å lagre tomme (`NULL`) verdier selv om API-et returnerer identifikatorene korrekt. Hvis ID-kolonnene ser tomme ut i dataplattformen din, bør du først sjekke hvilken datatype som er konfigurert for uthentingen.

### Anbefalt modelleringsmønster

Når du laster inn API-et i et datavarehus eller en Power BI-modell:

* Importer hvert Direct Data-endepunkt som sin egen dimensjons- eller faktatabell **nøkkelbasert på `GUID`**, samtidig som du beholder `Identifier` som en forretningsvennlig visningskolonne.
* Materialiser mange-til-mange-arrayer som `LinkedKontroller[]` og `LinkedRisikoer[]` som **koblingstabeller**.
* Modeller MoI-er som én felles dimensjon ved å kombinere (`UNION ALL`) de seks `*moi` endepunktene, og utleder en overordnet typekolonne fra kildeendepunktet.
* Bruk de aggregerte endepunktene (`/riskdata/riskcontrol`, `/moidata/moi`, og så videre) for å kontrollere at koblingene dine stemmer, eller for direkte rapportering.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.cerrix.com/cerrix-documentation-no/cerrix-funksjoner/admin-settings/api-documentation/api-endpoint-relationships.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
