Skip to content

Commit 8c5101b

Browse files
vskjefstJMLindseth
andcommitted
Lagre inntekt (WiP, squash før merge)
Co-authored-by: John Martin Lindseth <[email protected]>
1 parent bd69c67 commit 8c5101b

File tree

3 files changed

+133
-13
lines changed

3 files changed

+133
-13
lines changed

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Aktoer
66
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType.NATURLIG_IDENT
77
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.ArbeidsInntektInformasjon
88
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.ArbeidsInntektMaaned
9+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Avvik
910
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Inntekt
1011
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektkomponentResponse
1112
import no.nav.dagpenger.inntekt.mapping.Inntektsmottaker
@@ -27,10 +28,10 @@ fun InntekterDto.mapToStoredInntekt(inntektId: String): StoredInntekt =
2728
)
2829

2930
private fun mapToInntektkomponentResponse(inntekterDto: InntekterDto): InntektkomponentResponse {
30-
val inntektPerÅrOgMåned = mutableMapOf<YearMonth, MutableList<Inntekt>>()
31+
val inntektPerÅrOgMåned = mutableMapOf<YearMonth, Pair<MutableList<Inntekt>?, MutableList<Avvik>?>>()
3132
inntekterDto.virksomheter.forEach { virksomhet ->
3233
virksomhet.inntekter?.map { inntektMaaned ->
33-
val inntekter = inntektPerÅrOgMåned[inntektMaaned.aarMaaned] ?: mutableListOf()
34+
val inntekter = inntektPerÅrOgMåned[inntektMaaned.aarMaaned]?.first ?: mutableListOf()
3435
inntekter.add(
3536
Inntekt(
3637
inntektMaaned.belop,
@@ -55,16 +56,27 @@ private fun mapToInntektkomponentResponse(inntekterDto: InntekterDto): Inntektko
5556
inntektMaaned.tilleggsinformasjon,
5657
),
5758
)
58-
inntektPerÅrOgMåned.put(inntektMaaned.aarMaaned, inntekter)
59+
inntektPerÅrOgMåned.put(
60+
inntektMaaned.aarMaaned,
61+
Pair(inntekter, inntektPerÅrOgMåned[inntektMaaned.aarMaaned]?.second),
62+
)
63+
}
64+
virksomhet.avvikListe.map {
65+
val avvik = inntektPerÅrOgMåned[it.avvikPeriode]?.second ?: mutableListOf()
66+
avvik.add(it)
67+
inntektPerÅrOgMåned.put(
68+
it.avvikPeriode,
69+
Pair(inntektPerÅrOgMåned[it.avvikPeriode]?.first ?: mutableListOf(), avvik),
70+
)
5971
}
6072
}
6173

6274
return InntektkomponentResponse(
6375
inntektPerÅrOgMåned.map { (yearMonth, inntekter) ->
6476
ArbeidsInntektMaaned(
65-
yearMonth,
66-
listOf(),
67-
ArbeidsInntektInformasjon(inntekter),
77+
aarMaaned = yearMonth,
78+
arbeidsInntektInformasjon = ArbeidsInntektInformasjon(inntekter.first),
79+
avvikListe = inntekter.second,
6880
)
6981
},
7082
Aktoer(NATURLIG_IDENT, inntekterDto.mottaker.pnr ?: throw IllegalArgumentException("Fødselsenummer mangler")),

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

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import com.fasterxml.jackson.module.kotlin.readValue
44
import de.huxhorn.sulky.ulid.ULID
55
import io.kotest.matchers.collections.shouldBeEmpty
66
import io.kotest.matchers.collections.shouldContain
7+
import io.kotest.matchers.collections.shouldContainExactly
78
import io.kotest.matchers.collections.shouldHaveSize
89
import io.kotest.matchers.nulls.shouldNotBeNull
910
import io.kotest.matchers.shouldBe
1011
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Aktoer
1112
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType.AKTOER_ID
1213
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType.NATURLIG_IDENT
1314
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.AktoerType.ORGANISASJON
15+
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Avvik
1416
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.Inntekt
1517
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektBeskrivelse.BIL
1618
import no.nav.dagpenger.inntekt.inntektskomponenten.v1.InntektType.LOENNSINNTEKT
@@ -40,10 +42,18 @@ class InntekterDtoTest {
4042
storedInntekt.inntektId.id shouldBe inntektId
4143
storedInntekt.inntekt.ident.aktoerType shouldBe NATURLIG_IDENT
4244
storedInntekt.inntekt.ident.identifikator shouldBe inntekterDto.mottaker.pnr
43-
storedInntekt.inntekt.arbeidsInntektMaaned?.shouldHaveSize(4)
45+
storedInntekt.inntekt.arbeidsInntektMaaned?.shouldHaveSize(5)
4446
storedInntekt.inntekt.arbeidsInntektMaaned?.first().let {
4547
it?.aarMaaned shouldBe YearMonth.of(2023, 1)
46-
it?.avvikListe.shouldBeEmpty()
48+
it?.avvikListe.shouldContainExactly(
49+
Avvik(
50+
ident = Aktoer(AKTOER_ID, "287631"),
51+
opplysningspliktig = Aktoer(NATURLIG_IDENT, "06221841830"),
52+
virksomhet = Aktoer(ORGANISASJON, "123456789"),
53+
avvikPeriode = YearMonth.of(2023, 1),
54+
tekst = "Dette er et avvik for 2023-01",
55+
),
56+
)
4757
it?.arbeidsInntektInformasjon?.inntektListe?.shouldHaveSize(1)
4858
it?.arbeidsInntektInformasjon?.inntektListe?.shouldContain(
4959
Inntekt(
@@ -80,21 +90,41 @@ class InntekterDtoTest {
8090
}
8191
storedInntekt.inntekt.arbeidsInntektMaaned?.get(1).let {
8292
it?.aarMaaned shouldBe YearMonth.of(2024, 1)
83-
it?.avvikListe.shouldBeEmpty()
93+
it?.avvikListe.shouldContainExactly(
94+
Avvik(
95+
ident = Aktoer(AKTOER_ID, "287631"),
96+
opplysningspliktig = Aktoer(NATURLIG_IDENT, "06221841830"),
97+
virksomhet = Aktoer(ORGANISASJON, "123456789"),
98+
avvikPeriode = YearMonth.of(2024, 1),
99+
tekst = "Dette er et avvik",
100+
),
101+
Avvik(
102+
ident = Aktoer(AKTOER_ID, "287631"),
103+
opplysningspliktig = Aktoer(NATURLIG_IDENT, "06221841830"),
104+
virksomhet = Aktoer(ORGANISASJON, "987654321"),
105+
avvikPeriode = YearMonth.of(2024, 1),
106+
tekst = "Dette er et annet avvik",
107+
),
108+
)
84109
it?.arbeidsInntektInformasjon?.inntektListe?.shouldHaveSize(2)
85110
}
86111
storedInntekt.inntekt.arbeidsInntektMaaned?.get(2).let {
87112
it?.aarMaaned shouldBe YearMonth.of(2025, 2)
88-
it?.avvikListe.shouldBeEmpty()
113+
it?.avvikListe shouldBe null
89114
it?.arbeidsInntektInformasjon?.inntektListe?.shouldHaveSize(1)
90115
it?.arbeidsInntektInformasjon?.inntektListe?.first().let { inntekt ->
91116
inntekt?.tilleggsinformasjon shouldBe null
92117
}
93118
}
94119
storedInntekt.inntekt.arbeidsInntektMaaned?.get(3).let {
95120
it?.aarMaaned shouldBe YearMonth.of(2025, 3)
96-
it?.avvikListe.shouldBeEmpty()
121+
it?.avvikListe shouldBe null
97122
it?.arbeidsInntektInformasjon?.inntektListe?.shouldHaveSize(1)
98123
}
124+
storedInntekt.inntekt.arbeidsInntektMaaned?.get(4).let {
125+
it?.aarMaaned shouldBe YearMonth.of(2000, 12)
126+
it?.avvikListe?.shouldHaveSize(1)
127+
it?.arbeidsInntektInformasjon?.inntektListe?.shouldBeEmpty()
128+
}
99129
}
100130
}

dp-inntekt-api/src/test/resources/test-data/expected-uklassifisert-post-body.json

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,40 @@
9696
}
9797
],
9898
"totalBeløp": 60000.00,
99-
"avvikListe": []
99+
"avvikListe": [
100+
{
101+
"ident": {
102+
"aktoerType": "AKTOER_ID",
103+
"identifikator": "287631"
104+
},
105+
"opplysningspliktig": {
106+
"aktoerType": "NATURLIG_IDENT",
107+
"identifikator": "06221841830"
108+
},
109+
"virksomhet": {
110+
"aktoerType": "ORGANISASJON",
111+
"identifikator": "123456789"
112+
},
113+
"avvikPeriode": "2024-01",
114+
"tekst": "Dette er et avvik"
115+
},
116+
{
117+
"ident": {
118+
"aktoerType": "AKTOER_ID",
119+
"identifikator": "287631"
120+
},
121+
"opplysningspliktig": {
122+
"aktoerType": "NATURLIG_IDENT",
123+
"identifikator": "06221841830"
124+
},
125+
"virksomhet": {
126+
"aktoerType": "ORGANISASJON",
127+
"identifikator": "123456789"
128+
},
129+
"avvikPeriode": "2023-01",
130+
"tekst": "Dette er et avvik for 2023-01"
131+
}
132+
]
100133
},
101134
{
102135
"virksomhetsnummer": "987654321",
@@ -225,7 +258,52 @@
225258
}
226259
],
227260
"totalBeløp": 130000.00,
228-
"avvikListe": []
261+
"avvikListe": [
262+
{
263+
"ident": {
264+
"aktoerType": "AKTOER_ID",
265+
"identifikator": "287631"
266+
},
267+
"opplysningspliktig": {
268+
"aktoerType": "NATURLIG_IDENT",
269+
"identifikator": "06221841830"
270+
},
271+
"virksomhet": {
272+
"aktoerType": "ORGANISASJON",
273+
"identifikator": "987654321"
274+
},
275+
"avvikPeriode": "2024-01",
276+
"tekst": "Dette er et annet avvik"
277+
}
278+
]
279+
},
280+
{
281+
"virksomhetsnummer": "550475189",
282+
"virksomhetsnavn": "Virksomheten Test",
283+
"periode": {
284+
"fra": "2000-12",
285+
"til": "2000-12"
286+
},
287+
"inntekter": [],
288+
"totalBeløp": 0,
289+
"avvikListe": [
290+
{
291+
"ident": {
292+
"aktoerType": "AKTOER_ID",
293+
"identifikator": "287632"
294+
},
295+
"opplysningspliktig": {
296+
"aktoerType": "NATURLIG_IDENT",
297+
"identifikator": "25317924499"
298+
},
299+
"virksomhet": {
300+
"aktoerType": "ORGANISASJON",
301+
"identifikator": "550475189"
302+
},
303+
"avvikPeriode": "2000-12",
304+
"tekst": "Dette er et Y2K-avvik"
305+
}
306+
]
229307
}
230308
],
231309
"mottaker": {

0 commit comments

Comments
 (0)