Skip to content

Commit af7f46b

Browse files
authored
Kp2025 experimental (#1024)
* Make view models serdeable and update test * Create file description templates, Klass integration and Gradle task to generate * Add markdown generated by Gradle task * Add file descriptions generated by Gradle task * Adapt Sosialhjelp * Adapt Familievern
1 parent e043edc commit af7f46b

File tree

72 files changed

+4271
-2057
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+4271
-2057
lines changed

build.gradle.kts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ plugins {
88
jacoco
99
}
1010

11+
dependencies {
12+
api(project(":kostra-kontroller"))
13+
14+
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${libs.versions.jackson.get()}")
15+
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:${libs.versions.jackson.get()}")
16+
implementation("io.micronaut.serde:micronaut-serde-jackson:${libs.versions.micronautSerde.get()}")
17+
implementation("io.micronaut:micronaut-http-client:${libs.versions.micronaut.get()}")
18+
implementation("io.micronaut.test:micronaut-test-junit5:${libs.versions.micronautTestJunit5.get()}")
19+
20+
testImplementation(libs.kotest.assertions.core.jvm)
21+
testImplementation(libs.kotest.runner.junit5.jvm)
22+
testImplementation(libs.mockk.jvm)
23+
testImplementation("org.assertj:assertj-core:${libs.versions.assertj.get()}")
24+
}
25+
1126
sonarqube {
1227
properties {
1328
property("sonar.organization", "statisticsnorway")
@@ -21,7 +36,8 @@ sonarqube {
2136
**/KostraRecordExtensionsGenerics.kt,
2237
**/KostraKontrollprogramCommand.kt,
2338
**/MappingToConsoleAppExtensions.kt,
24-
**/kostra/barnevern/**/*
39+
**/kostra/barnevern/**/*,
40+
**/gradletask/**/*
2541
""".trimIndent(),
2642
)
2743
}
@@ -46,3 +62,28 @@ subprojects {
4662
}
4763
}
4864
}
65+
66+
tasks.test {
67+
useJUnitPlatform() // IMPORTANT for Kotest 5+
68+
}
69+
70+
tasks.register<JavaExec>("generateMarkdownFromFileDescriptions") {
71+
group = "documentation"
72+
description = "Generates Markdown files from YAML in file_description_templates"
73+
74+
val inputDir = file("kontroller/src/test/resources/file_description_templates")
75+
val outputDir = file("kravspesifikasjon")
76+
77+
inputs.files(fileTree(inputDir) {
78+
include("file_description_*.yaml", "file_description_*.yml")
79+
})
80+
81+
outputs.dir(outputDir)
82+
83+
classpath = sourceSets["main"].runtimeClasspath
84+
mainClass.set("gradletask.ApplicationKt")
85+
}
86+
87+
tasks.named("build") {
88+
dependsOn("generateMarkdownFromFileDescriptions")
89+
}

gradle/libs.versions.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
[versions]
2+
assertj = "3.26.3"
3+
micronaut = "4.7.0"
24
micronautPlatform = "4.7.6"
5+
micronautTestJunit5 = "4.5.0"
36
kotlin = "2.1.10"
47
jackson = "2.19.0"
8+
micronautSerde = "2.13.0"
59
kotest = "5.9.1"
610

711
[libraries]

kontroller/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ dependencies {
77

88
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${libs.versions.jackson.get()}")
99
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:${libs.versions.jackson.get()}")
10+
implementation("io.micronaut.serde:micronaut-serde-jackson:${libs.versions.micronautSerde.get()}")
1011

1112
testImplementation(libs.kotest.assertions.core.jvm)
1213
testImplementation(libs.kotest.runner.junit5.jvm)
Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,49 @@
11
package no.ssb.kostra.area.famvern
22

3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
4+
import io.micronaut.serde.annotation.Serdeable
35
import no.ssb.kostra.program.FileLoader
46

57
object FamilievernConstants {
6-
private const val FILENAME = "mapping_familievern_region_fylke_kontor_2024.yaml"
8+
private const val FILENAME = "mapping_familievern_region_fylke_kontor_2025.yaml"
79

8-
data class MappingDescription(
10+
@JsonIgnoreProperties(ignoreUnknown = true)
11+
@Serdeable
12+
data class FamvernHierarchyMapping(
913
val title: String,
1014
val description: String,
1115
val year: Int,
12-
val regions: List<MappingRegion>
16+
val mappings: List<FamvernHierarchyKontorFylkeRegionMapping>
1317
) {
14-
fun toKontorFylkeRegionMapping(): List<KontorFylkeRegionMapping> =
15-
this.regions.flatMap { region ->
16-
region.counties.flatMap { county ->
17-
county.offices.map { office ->
18-
KontorFylkeRegionMapping(office.code, county.code, region.code)
19-
}
20-
}
18+
fun toKontorFylkeRegionMapping(): List<FamvernHierarchyKontorFylkeRegionMapping> = mappings
19+
20+
fun toMarkdown(): String = buildString {
21+
appendLine("# $title (${year})")
22+
appendLine()
23+
appendLine(description)
24+
appendLine()
25+
appendLine("## Koblinger")
26+
appendLine()
27+
appendLine("| Regionnummer | Regionnavn | Fylkenummer | Fylkenavn | Kontornummer | Kontornavn |")
28+
appendLine("|--------------|------------|-------------|-----------|--------------|------------|")
29+
for (mapping in mappings) {
30+
appendLine("| `${mapping.region}` | ${mapping.regionName} | `${mapping.fylke}` | ${mapping.fylkeName} | `${mapping.kontor}` | ${mapping.kontorName} |")
2131
}
32+
}
2233
}
2334

24-
data class MappingRegion(val code: String, val name: String, val counties: List<MappingCounty>)
35+
@JsonIgnoreProperties(ignoreUnknown = true)
36+
@Serdeable
37+
data class FamvernHierarchyKontorFylkeRegionMapping(
38+
val region: String,
39+
val regionName: String = "",
40+
val fylke: String,
41+
val fylkeName: String = "",
42+
val kontor: String,
43+
val kontorName: String = ""
44+
)
2545

26-
data class MappingCounty(val code: String, val name: String, val offices: List<MappingOffice>)
46+
val famvernHierarchyKontorFylkeRegionMappingList: List<FamvernHierarchyKontorFylkeRegionMapping> =
47+
FileLoader.getResource<FamvernHierarchyMapping>(FILENAME).toKontorFylkeRegionMapping()
2748

28-
data class MappingOffice(val code: String, val name: String)
29-
30-
data class KontorFylkeRegionMapping(val kontor: String, val fylke: String, val region: String)
31-
32-
val kontorFylkeRegionMappingList: List<KontorFylkeRegionMapping> =
33-
FileLoader.getResource<MappingDescription>(FILENAME).toKontorFylkeRegionMapping()
3449
}

kontroller/src/main/kotlin/no/ssb/kostra/area/famvern/famvern52a/Familievern52aMain.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package no.ssb.kostra.area.famvern.famvern52a
22

3-
import no.ssb.kostra.area.famvern.FamilievernConstants.kontorFylkeRegionMappingList
3+
import no.ssb.kostra.area.famvern.FamilievernConstants.famvernHierarchyKontorFylkeRegionMappingList
44
import no.ssb.kostra.program.KotlinArguments
55
import no.ssb.kostra.validation.PositionedFileValidator
66
import no.ssb.kostra.validation.rule.AbstractRule
@@ -17,9 +17,9 @@ class Familievern52aMain(arguments: KotlinArguments) : PositionedFileValidator(a
1717

1818
override val validationRules = listOf(
1919
Rule002FileDescription(fieldDefinitions.fieldDefinitions),
20-
Rule003Regionsnummer(kontorFylkeRegionMappingList),
21-
Rule004Kontornummer(kontorFylkeRegionMappingList),
22-
Rule005RegionsnummerKontornummer(kontorFylkeRegionMappingList),
20+
Rule003Regionsnummer(famvernHierarchyKontorFylkeRegionMappingList),
21+
Rule004Kontornummer(famvernHierarchyKontorFylkeRegionMappingList),
22+
Rule005RegionsnummerKontornummer(famvernHierarchyKontorFylkeRegionMappingList),
2323
Rule006Dubletter(),
2424
Rule007Henvendelsesdato(),
2525
Rule009KontaktTidligere(),

kontroller/src/main/kotlin/no/ssb/kostra/area/famvern/famvern52b/Familievern52bMain.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package no.ssb.kostra.area.famvern.famvern52b
22

3-
import no.ssb.kostra.area.famvern.FamilievernConstants.kontorFylkeRegionMappingList
3+
import no.ssb.kostra.area.famvern.FamilievernConstants.famvernHierarchyKontorFylkeRegionMappingList
44
import no.ssb.kostra.program.KotlinArguments
55
import no.ssb.kostra.validation.PositionedFileValidator
66
import no.ssb.kostra.validation.rule.AbstractRule
@@ -18,9 +18,9 @@ class Familievern52bMain(arguments: KotlinArguments) : PositionedFileValidator(a
1818

1919
override val validationRules = listOf(
2020
Rule002FileDescription(fieldDefinitions.fieldDefinitions),
21-
Rule003Regionsnummer(kontorFylkeRegionMappingList),
22-
Rule004Kontornummer(kontorFylkeRegionMappingList),
23-
Rule005RegionsnummerKontornummer(kontorFylkeRegionMappingList),
21+
Rule003Regionsnummer(famvernHierarchyKontorFylkeRegionMappingList),
22+
Rule004Kontornummer(famvernHierarchyKontorFylkeRegionMappingList),
23+
Rule005RegionsnummerKontornummer(famvernHierarchyKontorFylkeRegionMappingList),
2424
Rule006Dubletter(),
2525
Rule007Gruppenavn(),
2626
Rule008StartDato(),

kontroller/src/main/kotlin/no/ssb/kostra/area/famvern/famvern53/Familievern53Main.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ class Familievern53Main(arguments: KotlinArguments) : PositionedFileValidator(ar
1717

1818
override val validationRules = listOf(
1919
Rule002FileDescription(fieldDefinitions.fieldDefinitions),
20-
Rule003Fylkesnummer(FamilievernConstants.kontorFylkeRegionMappingList),
21-
Rule004Kontornummer(FamilievernConstants.kontorFylkeRegionMappingList),
22-
Rule005FylkesnummerKontornummer(FamilievernConstants.kontorFylkeRegionMappingList),
20+
Rule003Fylkesnummer(FamilievernConstants.famvernHierarchyKontorFylkeRegionMappingList),
21+
Rule004Kontornummer(FamilievernConstants.famvernHierarchyKontorFylkeRegionMappingList),
22+
Rule005FylkesnummerKontornummer(FamilievernConstants.famvernHierarchyKontorFylkeRegionMappingList),
2323
Rule010Tiltak(Familievern53Constants.rule010Mappings),
2424
Rule010Timer(Familievern53Constants.rule010Mappings),
2525
)

kontroller/src/main/kotlin/no/ssb/kostra/area/famvern/famvern55/Familievern55Main.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Familievern55Main(arguments: KotlinArguments) : PositionedFileValidator(ar
1818

1919
override val validationRules = listOf(
2020
Rule002FileDescription(fieldDefinitions.fieldDefinitions),
21-
Rule003Fylkesnummer(FamilievernConstants.kontorFylkeRegionMappingList),
21+
Rule003Fylkesnummer(FamilievernConstants.famvernHierarchyKontorFylkeRegionMappingList),
2222
Rule005AvsluttedeMeklingerEtterTidsbruk(),
2323
Rule006AvsluttedeMeklingerEtterDeltakere(),
2424
Rule007AvsluttedeMeklingerEtterTidsbruk(),

kontroller/src/main/kotlin/no/ssb/kostra/area/regnskap/RegnskapFieldDefinitions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ import no.ssb.kostra.program.FileLoader
77
object RegnskapFieldDefinitions : FieldDefinitions {
88
override val fieldDefinitions: List<FieldDefinition> =
99
FileLoader
10-
.getResourceAsFieldDefinitionList("file_description_Regnskap.yaml")
10+
.getResourceAsFieldDefinitionList("file_description_Regnskap_2025.yaml")
1111
}

kontroller/src/main/kotlin/no/ssb/kostra/area/sosial/sosialhjelp/SosialhjelpMain.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import no.ssb.kostra.validation.report.StatsEntryHeading
1010
import no.ssb.kostra.validation.report.StatsReportEntry
1111
import no.ssb.kostra.validation.rule.Rule000HasAttachment
1212
import no.ssb.kostra.validation.rule.Rule001RecordLength
13+
import no.ssb.kostra.validation.rule.Rule002FileDescription
1314
import no.ssb.kostra.validation.rule.sosial.extensions.varighetAsStatsEntries
1415
import no.ssb.kostra.validation.rule.sosial.rule.*
1516
import no.ssb.kostra.validation.rule.sosial.sosialhjelp.extensions.deltakereByAlderAsStatsEntries

0 commit comments

Comments
 (0)