Skip to content

Commit d60b937

Browse files
committed
Utled InntektType fra InntektBeskrivelse hvis InntektType er null
1 parent 89f91d9 commit d60b937

File tree

7 files changed

+156
-44
lines changed

7 files changed

+156
-44
lines changed

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/api/v1/models/InntekterDto.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Inntekt
1111
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
1212
import no.nav.dagpenger.inntekt.mapping.Inntektsmottaker
1313
import no.nav.dagpenger.inntekt.mapping.Virksomhet
14+
import no.nav.dagpenger.inntekt.mapping.utledInntektType
1415
import java.time.LocalDateTime.now
1516
import java.time.YearMonth
1617

@@ -39,6 +40,7 @@ private fun mapToInntektkomponentResponse(inntekterDto: InntekterDto): Inntektko
3940
inntekterDto.virksomheter.forEach { virksomhet ->
4041
virksomhet.inntekter?.map { inntektMaaned ->
4142
val inntekter = inntektPerÅrOgMåned[inntektMaaned.aarMaaned]?.first ?: mutableListOf()
43+
val inntektType = inntektMaaned.inntektType ?: utledInntektType(inntektMaaned.beskrivelse)
4244
inntekter.add(
4345
Inntekt(
4446
inntektMaaned.belop,
@@ -59,7 +61,7 @@ private fun mapToInntektkomponentResponse(inntekterDto: InntekterDto): Inntektko
5961
inntektMaaned.inngaarIGrunnlagForTrekk,
6062
inntektMaaned.utloeserArbeidsgiveravgift,
6163
inntektMaaned.informasjonsstatus,
62-
inntektMaaned.inntektType,
64+
inntektType,
6365
inntektMaaned.tilleggsinformasjon,
6466
),
6567
)

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/mapping/MapToInntektFrontend.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ data class InntektMaaned(
147147
val inngaarIGrunnlagForTrekk: Boolean? = null,
148148
val utloeserArbeidsgiveravgift: Boolean? = null,
149149
val informasjonsstatus: String? = null,
150-
val inntektType: InntektType,
150+
val inntektType: InntektType? = null,
151151
val tilleggsinformasjon: TilleggInformasjon? = null,
152152
val aarMaaned: YearMonth,
153153
)

dp-inntekt-api/src/main/kotlin/no/nav/dagpenger/inntekt/mapping/Verdikoder.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,19 @@ fun verdiKode(datagrunnlagKlassifisering: DatagrunnlagKlassifisering): String {
1717
private fun shouldTryGenericMappingWithoutForhold(datagrunnlagKlassifisering: DatagrunnlagKlassifisering) =
1818
!dataGrunnlagKlassifiseringToVerdikode.contains(datagrunnlagKlassifisering) && datagrunnlagKlassifisering.forhold != null
1919

20-
fun dataGrunnlag(verdiKode: String): DatagrunnlagKlassifisering {
21-
return dataGrunnlagKlassifiseringToVerdikode.inverse[verdiKode]
20+
fun dataGrunnlag(verdiKode: String): DatagrunnlagKlassifisering =
21+
dataGrunnlagKlassifiseringToVerdikode.inverse[verdiKode]
2222
?: throw VerdiKodeMappingException("No datagrunnlag found for verdikode=$verdiKode")
23-
}
2423

25-
class VerdiKodeMappingException(message: String) : RuntimeException(message)
24+
fun utledInntektType(inntektBeskrivelse: InntektBeskrivelse): InntektType =
25+
dataGrunnlagKlassifiseringToVerdikode.keys
26+
.find { it.beskrivelse == inntektBeskrivelse }
27+
?.type
28+
?: throw IllegalArgumentException("Klarte ikke å utlede inntekttype fra inntektbeskrivelse \"$inntektBeskrivelse\".")
29+
30+
class VerdiKodeMappingException(
31+
message: String,
32+
) : RuntimeException(message)
2633

2734
@Suppress("ktlint:standard:max-line-length")
2835
val dataGrunnlagKlassifiseringToVerdikode =

dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/api/v1/models/InntekterDtoTest.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType.ORGANISASJON
1515
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Avvik
1616
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Inntekt
1717
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektBeskrivelse.BIL
18+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektBeskrivelse.SVANGERSKAPSPENGER_FERIEPENGER
1819
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType.LOENNSINNTEKT
20+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType.YTELSE_FRA_OFFENTLIGE
1921
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Periode
2022
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.SpesielleInntjeningsforhold.LOENN_VED_KONKURS_ELLER_STATSGARANTI_OSV
2123
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.TilleggInformasjon
@@ -127,4 +129,22 @@ class InntekterDtoTest {
127129
it?.arbeidsInntektInformasjon?.inntektListe?.shouldBeEmpty()
128130
}
129131
}
132+
133+
@Test
134+
fun `mapToStoredInntekt mapper til forventet resultat når inntektType er null`() {
135+
val inntektId = ULID().nextULID()
136+
val inntekterDto =
137+
jacksonObjectMapper.readValue<InntekterDto>(
138+
this::class.java
139+
.getResource("/test-data/expected-uklassifisert-post-body-inntektType-er-null.json")
140+
?.readText()!!,
141+
)
142+
143+
val storedInntekt = inntekterDto.mapToStoredInntekt(inntektId = inntektId)
144+
145+
storedInntekt.inntekt.arbeidsInntektMaaned?.first()?.arbeidsInntektInformasjon?.inntektListe?.first().let {
146+
it?.beskrivelse shouldBe SVANGERSKAPSPENGER_FERIEPENGER
147+
it?.inntektType shouldBe YTELSE_FRA_OFFENTLIGE
148+
}
149+
}
130150
}

dp-inntekt-api/src/test/kotlin/no/nav/dagpenger/inntekt/mapping/VerdikoderKtTest.kt

Lines changed: 0 additions & 38 deletions
This file was deleted.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package no.nav.dagpenger.inntekt.mapping
2+
3+
import io.kotest.matchers.shouldBe
4+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektBeskrivelse
5+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType.LOENNSINNTEKT
6+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType.YTELSE_FRA_OFFENTLIGE
7+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.SpesielleInntjeningsforhold
8+
import org.junit.jupiter.api.Test
9+
10+
@Suppress("ktlint:standard:max-line-length")
11+
internal class VerdikoderTest {
12+
@Test
13+
fun `posteringstype-mapping for Feriepenger returnerer forventet verdi`() {
14+
val posteringsTypeInfo =
15+
DatagrunnlagKlassifisering(LOENNSINNTEKT, InntektBeskrivelse.FERIEPENGER, null)
16+
17+
verdiKode(posteringsTypeInfo) shouldBe "Feriepenger"
18+
}
19+
20+
@Test
21+
fun `verdikode for DatagrunnlagKlassifisering med inntjeningsforhold uten mapping skal være lik verdikode for DatagrunnlagKlassifisering som inntjeningsforhold lik null`() {
22+
val posteringsTypeWithNull =
23+
DatagrunnlagKlassifisering(LOENNSINNTEKT, InntektBeskrivelse.FERIEPENGER, null)
24+
val posteringsTypeWithoutMapping =
25+
DatagrunnlagKlassifisering(
26+
LOENNSINNTEKT,
27+
InntektBeskrivelse.FERIEPENGER,
28+
SpesielleInntjeningsforhold.STATSANSATT_UTLANDET,
29+
)
30+
31+
verdiKode(posteringsTypeWithoutMapping) shouldBe verdiKode(posteringsTypeWithNull)
32+
}
33+
34+
@Test
35+
fun `verdikode for DatagrunnlagKlassifisering med ukjent inntjeningsforhold skal være lik verdikode for DatagrunnlagKlassifisering med inntjeningsforhold lik null`() {
36+
val posteringsTypeWithNull =
37+
DatagrunnlagKlassifisering(LOENNSINNTEKT, InntektBeskrivelse.FERIEPENGER, null)
38+
val posteringsTypeWithUnknown =
39+
DatagrunnlagKlassifisering(
40+
LOENNSINNTEKT,
41+
InntektBeskrivelse.FERIEPENGER,
42+
SpesielleInntjeningsforhold.UNKNOWN,
43+
)
44+
45+
verdiKode(posteringsTypeWithUnknown) shouldBe verdiKode(posteringsTypeWithNull)
46+
}
47+
48+
@Test
49+
fun `utledInntektType utleder InntektBeskrivelse til forventet InntektType`() {
50+
utledInntektType(InntektBeskrivelse.FORELDREPENGER) shouldBe YTELSE_FRA_OFFENTLIGE
51+
}
52+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"virksomheter": [
3+
{
4+
"virksomhetsnummer": "123456789",
5+
"virksomhetsnavn": "Test Virksomhet",
6+
"periode": {
7+
"fraOgMed": "2023-01",
8+
"tilOgMed": "2024-12"
9+
},
10+
"inntekter": [
11+
{
12+
"belop": 50000.00,
13+
"fordel": "kontantytelse",
14+
"beskrivelse": "feriepengerSvangerskapspenger",
15+
"inntektskilde": "A-ordningen",
16+
"inntektsstatus": "LoependeInnrapportert",
17+
"inntektsperiodetype": "Maaned",
18+
"leveringstidspunkt": "2023-01",
19+
"opptjeningsland": "NO",
20+
"opptjeningsperiode": {
21+
"startDato": "2023-01-04T00:00:00",
22+
"sluttDato": "2023-01-25T00:00:00"
23+
},
24+
"skattemessigBosattLand": "NO",
25+
"utbetaltIMaaned": "2023-02",
26+
"opplysningspliktig": {
27+
"aktoerType": "NATURLIG_IDENT",
28+
"identifikator": "06221841830"
29+
},
30+
"inntektsinnsender": {
31+
"aktoerType": "ORGANISASJON",
32+
"identifikator": "561235623"
33+
},
34+
"virksomhet": {
35+
"aktoerType": "ORGANISASJON",
36+
"identifikator": "123456789"
37+
},
38+
"inntektsmottaker": {
39+
"aktoerType": "AKTOER_ID",
40+
"identifikator": "287631"
41+
},
42+
"inngaarIGrunnlagForTrekk": true,
43+
"utloeserArbeidsgiveravgift": false,
44+
"informasjonsstatus": "InngaarAlltid",
45+
"inntektType": null,
46+
"tilleggsinformasjon": {
47+
"kategori": "enKategori",
48+
"tilleggsinformasjonDetaljer": {
49+
"detaljerType": "enDetaljerType",
50+
"spesielleInntjeningsforhold": "loennVedKonkursEllerStatsgarantiOsv"
51+
}
52+
},
53+
"aarMaaned": "2023-01"
54+
}
55+
],
56+
"totalBelop": 50000.00,
57+
"avvikListe": []
58+
}
59+
],
60+
"mottaker": {
61+
"pnr": "19876543210",
62+
"navn": "Navn Navnesen"
63+
},
64+
"periode": {
65+
"fraOgMed": "2000-12",
66+
"tilOgMed": "2025-04"
67+
},
68+
"begrunnelse": "Dette er en begrunnelse."
69+
}

0 commit comments

Comments
 (0)