diff --git a/bidrag-commons-test/src/main/kotlin/no/nav/bidrag/commons/mock/Stubs.kt b/bidrag-commons-test/src/main/kotlin/no/nav/bidrag/commons/mock/Stubs.kt index 2267934..75146e7 100644 --- a/bidrag-commons-test/src/main/kotlin/no/nav/bidrag/commons/mock/Stubs.kt +++ b/bidrag-commons-test/src/main/kotlin/no/nav/bidrag/commons/mock/Stubs.kt @@ -6,6 +6,7 @@ import io.mockk.mockkObject import io.mockk.mockkStatic import no.nav.bidrag.commons.service.KodeverkProvider import no.nav.bidrag.commons.service.finnVisningsnavn +import no.nav.bidrag.commons.service.finnVisningsnavnForKode import no.nav.bidrag.commons.service.finnVisningsnavnLønnsbeskrivelse import no.nav.bidrag.commons.service.finnVisningsnavnSkattegrunnlag import no.nav.bidrag.commons.service.sjablon.SjablonProvider @@ -19,6 +20,8 @@ fun stubKodeverkProvider() { mockkStatic(::finnVisningsnavnSkattegrunnlag) mockkStatic(::finnVisningsnavnLønnsbeskrivelse) mockkStatic(::finnVisningsnavn) + mockkStatic(::finnVisningsnavnForKode) + every { finnVisningsnavnForKode(any(), any()) } returns "Visningsnavn" every { finnVisningsnavn(any()) } returns "Visningsnavn" every { finnVisningsnavnLønnsbeskrivelse(any()) diff --git a/bidrag-commons/src/main/kotlin/no/nav/bidrag/commons/service/KodeverkProvider.kt b/bidrag-commons/src/main/kotlin/no/nav/bidrag/commons/service/KodeverkProvider.kt index 6723463..f4c6b3b 100644 --- a/bidrag-commons/src/main/kotlin/no/nav/bidrag/commons/service/KodeverkProvider.kt +++ b/bidrag-commons/src/main/kotlin/no/nav/bidrag/commons/service/KodeverkProvider.kt @@ -2,10 +2,15 @@ package no.nav.bidrag.commons.service +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule import com.github.benmanes.caffeine.cache.Cache import com.github.benmanes.caffeine.cache.Caffeine import no.nav.bidrag.commons.CorrelationId import no.nav.bidrag.commons.cache.InvaliderCacheFørStartenAvArbeidsdag +import no.nav.bidrag.domene.util.Visningsnavn import org.slf4j.LoggerFactory import org.springframework.boot.web.client.RestTemplateBuilder import org.springframework.web.client.RestTemplate @@ -13,6 +18,8 @@ import org.springframework.web.client.getForEntity import java.time.LocalDate import java.util.concurrent.atomic.AtomicReference +internal val objectmapper = ObjectMapper(YAMLFactory()).findAndRegisterModules().registerKotlinModule() +private val visningsnavnCache: Map> = emptyMap() private val kodeverkUrl = AtomicReference("") const val POSTNUMMER = "Postnummer" const val LANDKODER = "Landkoder" @@ -30,29 +37,30 @@ private val kodeverkCache: Cache = private val log = LoggerFactory.getLogger(KodeverkProvider::class.java) fun finnVisningsnavnSkattegrunnlag(fulltNavnInntektspost: String): String = - finnVisningsnavn(fulltNavnInntektspost, SUMMERT_SKATTEGRUNNLAG) ?: "" + finnVisningsnavnForKode(fulltNavnInntektspost, SUMMERT_SKATTEGRUNNLAG) ?: "" -fun finnPoststedForPostnummer(postnummer: String): String? = finnVisningsnavn(postnummer, POSTNUMMER) +fun finnPoststedForPostnummer(postnummer: String): String? = finnVisningsnavnForKode(postnummer, POSTNUMMER) -fun finnLandkodeForLandkoder(landkode: String): String? = finnVisningsnavn(landkode, LANDKODER) +fun finnLandkodeForLandkoder(landkode: String): String? = finnVisningsnavnForKode(landkode, LANDKODER) -fun finnLandkodeForLandkoderIso2(landkode: String): String? = finnVisningsnavn(landkode, LANDKODER_ISO2) +fun finnLandkodeForLandkoderIso2(landkode: String): String? = finnVisningsnavnForKode(landkode, LANDKODER_ISO2) fun finnVisningsnavnLønnsbeskrivelse(fulltNavnInntektspost: String): String = - finnVisningsnavn(fulltNavnInntektspost, LOENNSBESKRIVELSE) ?: "" + finnVisningsnavnForKode(fulltNavnInntektspost, LOENNSBESKRIVELSE) ?: "" fun finnVisningsnavnKodeverk( fulltNavnInntektspost: String, kodeverk: String, -): String = finnVisningsnavn(fulltNavnInntektspost, kodeverk) ?: "" +): String = finnVisningsnavnForKode(fulltNavnInntektspost, kodeverk) ?: "" fun finnVisningsnavn(fulltNavnInntektspost: String): String { - return finnVisningsnavn(fulltNavnInntektspost, SUMMERT_SKATTEGRUNNLAG) - ?: finnVisningsnavn(fulltNavnInntektspost, LOENNSBESKRIVELSE) - ?: finnVisningsnavn(fulltNavnInntektspost, YTELSEFRAOFFENTLIGE) - ?: finnVisningsnavn(fulltNavnInntektspost, PENSJONELLERTRYGDEBESKRIVELSE) - ?: finnVisningsnavn(fulltNavnInntektspost, NAERINGSINNTEKTSBESKRIVELSE) - ?: finnVisningsnavn(fulltNavnInntektspost, SPESIFISERT_SUMMERT_SKATTEGRUNNLAG) + return finnVisningsnavnFraFil(fulltNavnInntektspost) + ?: finnVisningsnavnForKode(fulltNavnInntektspost, SUMMERT_SKATTEGRUNNLAG) + ?: finnVisningsnavnForKode(fulltNavnInntektspost, LOENNSBESKRIVELSE) + ?: finnVisningsnavnForKode(fulltNavnInntektspost, YTELSEFRAOFFENTLIGE) + ?: finnVisningsnavnForKode(fulltNavnInntektspost, PENSJONELLERTRYGDEBESKRIVELSE) + ?: finnVisningsnavnForKode(fulltNavnInntektspost, NAERINGSINNTEKTSBESKRIVELSE) + ?: finnVisningsnavnForKode(fulltNavnInntektspost, SPESIFISERT_SUMMERT_SKATTEGRUNNLAG) ?: "" } @@ -82,7 +90,7 @@ class KodeverkProvider { } } -private fun finnVisningsnavn( +fun finnVisningsnavnForKode( kode: String, kodeverk: String, ): String? { @@ -93,6 +101,11 @@ private fun finnVisningsnavn( return if (betydning?.tekst.isNullOrEmpty()) betydning?.term else betydning?.tekst } +private fun finnVisningsnavnFraFil(kode: String): String? { + val visningsnavnMap = lastVisningsnavnFraFil("inntektsposter.yaml") + return visningsnavnMap[kode] +} + private fun hentKodeverk(kodeverk: String): KodeverkKoderBetydningerResponse { val kodeverkContext = "${kodeverkUrl.get()}/api/v1/kodeverk/$kodeverk/koder/betydninger?ekskluderUgyldige=false&spraak=nb" val restTemplate: RestTemplate = @@ -118,3 +131,16 @@ data class KodeverkBeskrivelse( val tekst: String, val term: String, ) + +private fun lastVisningsnavnFraFil(filnavn: String): Map { + val fil = hentFil("/kodeverk/visningsnavn/$filnavn") + return visningsnavnCache.getOrDefault( + filnavn, + objectmapper.readValue(fil), + ) +} + +private fun hentFil(filsti: String) = + Visningsnavn::class.java.getResource( + filsti, + ) ?: throw RuntimeException("Fant ingen fil på sti $filsti") diff --git a/bidrag-commons/src/main/resources/kodeverk/visningsnavn/inntektsposter.yaml b/bidrag-commons/src/main/resources/kodeverk/visningsnavn/inntektsposter.yaml new file mode 100644 index 0000000..26bfae5 --- /dev/null +++ b/bidrag-commons/src/main/resources/kodeverk/visningsnavn/inntektsposter.yaml @@ -0,0 +1,4 @@ +overgangsstoenadTilEnsligMorEllerFarSomBegynteAaLoepe1April2014EllerSenere: "Overgangsstønad" +overgangsstoenadTilEnsligMorEllerFarSomBegynteAaLoepe31Mars2014EllerTidligere: "Overgangsstønad" +overgangsstoenadTilGjenlevendeEktefelle: "Overgangsstønad" +overgangsstoenadTilEnsligForelder: "Overgangsstønad" \ No newline at end of file diff --git a/bidrag-commons/src/test/kotlin/no/nav/bidrag/commons/service/KodeverkProviderKtTest.kt b/bidrag-commons/src/test/kotlin/no/nav/bidrag/commons/service/KodeverkProviderKtTest.kt new file mode 100644 index 0000000..8bd8637 --- /dev/null +++ b/bidrag-commons/src/test/kotlin/no/nav/bidrag/commons/service/KodeverkProviderKtTest.kt @@ -0,0 +1,31 @@ +package no.nav.bidrag.commons.service + +import io.kotest.matchers.shouldBe +import io.mockk.every +import io.mockk.mockkObject +import io.mockk.mockkStatic +import org.junit.jupiter.api.Test + +fun stubKodeverkProvider() { + mockkObject(KodeverkProvider) + mockkStatic(::finnVisningsnavnSkattegrunnlag) + mockkStatic(::finnVisningsnavnLønnsbeskrivelse) + mockkStatic(::finnVisningsnavnForKode) + every { finnVisningsnavnForKode(any(), any()) } returns "Visningsnavn" + every { + finnVisningsnavnLønnsbeskrivelse(any()) + } returns "Visningsnavn lønnsbeskrivelse" + every { finnVisningsnavnSkattegrunnlag(any()) } returns "Visningsnavn skattegrunnlag" +} + +class KodeverkProviderKtTest { + @Test + fun `skal hente visningsnavn`() { + stubKodeverkProvider() + finnVisningsnavn("overgangsstoenadTilEnsligForelder") shouldBe "Overgangsstønad" + finnVisningsnavn("overgangsstoenadTilEnsligMorEllerFarSomBegynteAaLoepe31Mars2014EllerTidligere") shouldBe "Overgangsstønad" + finnVisningsnavn("overgangsstoenadTilEnsligMorEllerFarSomBegynteAaLoepe1April2014EllerSenere") shouldBe "Overgangsstønad" + finnVisningsnavn("overgangsstoenadTilGjenlevendeEktefelle") shouldBe "Overgangsstønad" + finnVisningsnavn("annet") shouldBe "Visningsnavn" + } +} diff --git "a/bidrag-transport/src/main/kotlin/no/nav/bidrag/transport/behandling/felles/grunnlag/S\303\270knad.kt" "b/bidrag-transport/src/main/kotlin/no/nav/bidrag/transport/behandling/felles/grunnlag/S\303\270knad.kt" index 5d75331..af3b0e5 100644 --- "a/bidrag-transport/src/main/kotlin/no/nav/bidrag/transport/behandling/felles/grunnlag/S\303\270knad.kt" +++ "b/bidrag-transport/src/main/kotlin/no/nav/bidrag/transport/behandling/felles/grunnlag/S\303\270knad.kt" @@ -1,5 +1,6 @@ package no.nav.bidrag.transport.behandling.felles.grunnlag +import no.nav.bidrag.domene.enums.beregning.Resultatkode import no.nav.bidrag.domene.enums.rolle.SøktAvType import no.nav.bidrag.domene.enums.vedtak.VirkningstidspunktÅrsakstype import java.time.LocalDate @@ -12,5 +13,6 @@ data class SøknadGrunnlag( data class VirkningstidspunktGrunnlag( val virkningstidspunkt: LocalDate, - val årsak: VirkningstidspunktÅrsakstype, + val årsak: VirkningstidspunktÅrsakstype? = null, + val avslag: Resultatkode? = null, ) : GrunnlagInnhold