{"id":51104293,"url":"https://github.com/fintlabs/fint-kontroll-orgunit-service","last_synced_at":"2026-06-24T13:01:47.487Z","repository":{"id":340389546,"uuid":"1153610876","full_name":"FINTLabs/fint-kontroll-orgunit-service","owner":"FINTLabs","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-20T13:54:26.000Z","size":114,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T15:37:21.853Z","etag":null,"topics":["bas"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FINTLabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-09T13:55:40.000Z","updated_at":"2026-04-20T13:54:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/FINTLabs/fint-kontroll-orgunit-service","commit_stats":null,"previous_names":["fintlabs/fint-kontroll-orgunit-service"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/FINTLabs/fint-kontroll-orgunit-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FINTLabs%2Ffint-kontroll-orgunit-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FINTLabs%2Ffint-kontroll-orgunit-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FINTLabs%2Ffint-kontroll-orgunit-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FINTLabs%2Ffint-kontroll-orgunit-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FINTLabs","download_url":"https://codeload.github.com/FINTLabs/fint-kontroll-orgunit-service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FINTLabs%2Ffint-kontroll-orgunit-service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34733256,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bas"],"created_at":"2026-06-24T13:01:41.982Z","updated_at":"2026-06-24T13:01:47.473Z","avatar_url":"https://github.com/FINTLabs.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FINT-KONTROLL-ORGUNIT-SERVICE\n\nDenne tjenesten er en del av FINT-KONTROLL. Den konsumerer organisasjonselementer fra Kafka, mapper dem til `OrgUnit`, lagrer dem i databasen og publiserer resultatet videre til Kafka. Tjenesten beregner også `OrgunitDistance` og eksponerer et API for oppslag i orgunit-strukturen.\n\n\nSe også [Arkitettur, struktur og flyt](docs/architecture.md)\n## Beskrivelse\n\n1. Leser `OrganisasjonselementResource` fra Kafka.\n2. Lagrer innkommende meldinger i cache.\n3. Mapper data til intern `OrgUnit`.\n4. Oppdaterer databasen.\n5. Publiserer `OrgUnit` til Kafka.\n6. Leser publiserte `OrgUnit` tilbake inn i cache.\n7. Genererer og publiserer `OrgunitDistance` periodisk.\n8. Eksponerer orgunits via REST API.\n\n\n## OrgUnit modell\n| Fieldname           | Type           | Nullable |\n|---------------------|---------------|----------|\n| id                  | Long          | Yes      |\n| resourceId          | String        | No       |\n| organisationUnitId  | String        | No       |\n| name                | String        | No       |\n| shortName           | String        | Yes      |\n| parentRef           | String        | No       |\n| managerRef          | String        | Yes      |\n| childrenRef         | List\u003cString\u003e  | Yes      |\n\n\n## OrgUnitDistance modell\n| Fieldname       | Type           | Nullable |\n|-----------------|---------------|----------|\n| id              | Long          | Yes      |\n| orgUnitId       | String        | No       |\n| subOrgUnitId    | String        | No       |\n| distance        | Int           | No       |\n\norgUnitId og subOrgUnitId er referanser til organisationUnitId på OrgUnit objectet.\n\n## kafka topics\n### consumer\n- `administrasjon-organisasjon-organisasjonselement`\n- `orgunit`\n- `orgunitdistance`\n\n**.kontroll.entity.administrasjon-organisasjon-organisasjonselement**\n\n| Property                                |\n|-----------------------------------------|\n| .continueFromPreviousOffsetOnAssignment |\n\n```json\nEksempel på organisasjonselement:\n{\n    \"gyldighetsperiode\": {\n        \"slutt\": \"2030-12-31T00:00:00Z\",\n        \"start\": \"2023-01-01T00:00:00Z\"\n    },\n    \"kortnavn\": \"FAK\",\n    \"navn\": \"FAK Finans og administrasjon\",\n    \"organisasjonsId\": {\n        \"identifikatorverdi\": \"5\"\n    },\n    \"organisasjonsKode\": {\n        \"identifikatorverdi\": \"V30\"\n    },\n    \"organisasjonsnavn\": \"FAK Finans og administrasjon\",\n    \"organisasjonsnummer\": {\n        \"identifikatorverdi\": \"5\"\n    },\n    \"_links\": {\n        \"overordnet\": [\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/organisasjon/organisasjonselement/organisasjonsid/1\"\n            }\n        ],\n        \"underordnet\": [\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/organisasjon/organisasjonselement/organisasjonsid/26\"\n            },\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/organisasjon/organisasjonselement/organisasjonsid/36\"\n            }\n        ],\n        \"leder\": [\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/personal/personalressurs/ansattnummer/1002\"\n            }\n        ],\n        \"arbeidsforhold\": [\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/personal/arbeidsforhold/systemid/5dad7056-d9bd-4c7d-ae3c-09e16344ab5d\"\n            },\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/personal/arbeidsforhold/systemid/2d1c057e-6e85-4e40-8937-3abec7233db1\"\n            },\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/personal/arbeidsforhold/systemid/ed3f08da-f4e8-40dd-8547-cfaeb6897fc5\"\n            }\n        ],\n        \"self\": [\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/organisasjon/organisasjonselement/organisasjonsid/5\"\n            },\n            {\n                \"href\": \"https://beta.felleskomponent.no/administrasjon/organisasjon/organisasjonselement/organisasjonskode/V30\"\n            }\n        ]\n    }\n}\n```\n\n**.kontroll.entity.orgunit**\n\n```json\nEksempel på orgUnit\n{\n    \"id\": 3,\n    \"resourceId\": \"https://beta.felleskomponent.no/administrasjon/organisasjon/organisasjonselement/organisasjonsid/26\",\n    \"organisationUnitId\": \"26\",\n    \"name\": \"OKO Økonomiavdeling\",\n    \"shortName\": \"OKO\",\n    \"parentRef\": \"5\",\n    \"managerRef\": \"[https://beta.felleskomponent.no/administrasjon/personal/personalressurs/ansattnummer/1005]\",\n    \"childrenRef\": [\n        \"27\",\n        \"30\"\n    ],\n    \"allSubOrgUnitsRef\": [\n        \"27\",\n        \"30\"\n    ]\n}\n```\n\n\n**kontroll.entity.orgunitdistance**\n\n| Property           |\n|--------------------|\n| .seekToBeginningOnAssignment              |\n\n```json\nEksempler på orgUnitDistance\n{\n   \"id\": \"89_89\",\n   \"orgUnitId\": \"89\",\n   \"subOrgUnitId\": \"89\",\n   \"distance\": 0\n}\nog\n{\n   \"id\": \"84_89\",\n   \"orgUnitId\": \"84\",\n   \"subOrgUnitId\": \"89\",\n   \"distance\": 1\n}\n```\n\n\n\n\n### producer\n- `orgunit`\n- `orgunitdistance`\n\n**.kontroll.entity.orgunit**\n\n | Property                                |\n  |-----------------------------------------|\n  | .lastValueRetainedForever |\n\n```json\nEksempel: se consumer\n```\n\n**.kontroll.entity.orgunit-distance**\n\n| Property                                |\n|-----------------------------------------|\n| .lastValueRetainedForever |\n\n```json\nEksempel: se consumer\n```\n\n\n## API\nSwagger UI er tilgjengelig på `http://localhost:\u003cport\u003e/swagger-ui/index.html`.\n\nEndepunkter:\n- `GET /api/orgunits`\n- `GET /api/orgunits/{id}`\n- `GET /api/orgunits/{id}/parents`\n- `GET /api/orgunits/{id}/children`\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffintlabs%2Ffint-kontroll-orgunit-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffintlabs%2Ffint-kontroll-orgunit-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffintlabs%2Ffint-kontroll-orgunit-service/lists"}