From 6f769e3d36b7348eadf8110d3b74ec180417e20f Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Sat, 23 Nov 2024 12:42:49 +0100 Subject: [PATCH] Legge til flere tester for beregning --- .../bidrag/behandling/service/NotatService.kt | 2 +- .../behandling/transformers/vedtak/Felles.kt | 1 + .../BehandlingTilGrunnlagMappingV2.kt | 63 +- .../mapping/tilvedtak/GrunnlagByggerBidrag.kt | 29 +- .../mapping/tilvedtak/GrunnlagByggerFelles.kt | 1 + .../service/VedtakTilBehandlingBidragTest.kt | 645 ++++++++++++++++++ .../service/VedtakserviceBidragTest.kt | 6 + .../tilvedtak/GrunnlagByggerBidragTest.kt | 219 ++++++ .../mapping/tilvedtak}/GrunnlagMappingTest.kt | 13 +- 9 files changed, 928 insertions(+), 51 deletions(-) create mode 100644 src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt create mode 100644 src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidragTest.kt rename src/test/kotlin/no/nav/bidrag/behandling/transformers/{ => vedtak/mapping/tilvedtak}/GrunnlagMappingTest.kt (98%) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt index c7cb7f86d..6cce5d503 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/NotatService.kt @@ -30,7 +30,7 @@ class NotatService { behandling.notater.add( Notat( behandling = behandling, - rolle = rolle ?: behandling.rolleGrunnlagSkalHentesFor!!, + rolle = rolle, innhold = notattekst, type = notattype, ), diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/Felles.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/Felles.kt index c3022cb1f..e666f6802 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/Felles.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/Felles.kt @@ -135,6 +135,7 @@ fun OpprettVedtakRequestDto.tilVedtakDto(): VedtakDto = innhold = it.innhold, grunnlagsreferanseListe = it.grunnlagsreferanseListe, gjelderReferanse = it.gjelderReferanse, + gjelderBarnReferanse = it.gjelderBarnReferanse, ) }, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/BehandlingTilGrunnlagMappingV2.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/BehandlingTilGrunnlagMappingV2.kt index ab5b27963..6c116ecc5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/BehandlingTilGrunnlagMappingV2.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/BehandlingTilGrunnlagMappingV2.kt @@ -225,7 +225,7 @@ class BehandlingTilGrunnlagMappingV2( ) } - fun Behandling.tilGrunnlagSamvær(søknadsbarn: GrunnlagDto? = null): List { + fun Behandling.tilGrunnlagSamvær(søknadsbarn: BaseGrunnlag? = null): List { val søknadsbarnIdent = søknadsbarn?.personIdent return samvær .filter { søknadsbarn == null || it.rolle.ident == søknadsbarnIdent } @@ -237,8 +237,9 @@ class BehandlingTilGrunnlagMappingV2( GrunnlagDto( referanse = it.tilGrunnlagsreferanseSamværsperiode(), type = Grunnlagstype.SAMVÆRSPERIODE, - gjelderReferanse = samvær.rolle.tilGrunnlagPerson().referanse, + gjelderReferanse = samvær.behandling.bidragspliktig!!.tilGrunnlagsreferanse(), grunnlagsreferanseListe = grunnlagBeregning.map { it.referanse }, + gjelderBarnReferanse = samvær.rolle.tilGrunnlagPerson().referanse, innhold = POJONode( SamværsperiodeGrunnlag( @@ -252,7 +253,7 @@ class BehandlingTilGrunnlagMappingV2( } } - private fun Behandling.tilGrunnlagFaktiskeTilsynsutgifter(personobjekter: Set = emptySet()): List { + fun Behandling.tilGrunnlagFaktiskeTilsynsutgifter(personobjekter: Set = emptySet()): List { val grunnlagslistePersoner: MutableList = mutableListOf() fun FaktiskTilsynsutgift.tilPersonGrunnlag(): GrunnlagDto { @@ -285,34 +286,36 @@ class BehandlingTilGrunnlagMappingV2( return relatertPersonGrunnlag } - return underholdskostnader - .flatMap { u -> - u.faktiskeTilsynsutgifter.map { - val underholdRolle = u.person.rolle.find { it.behandling.id == id } - val gjelderBarn = - underholdRolle?.tilGrunnlagPerson()?.also { - grunnlagslistePersoner.add(it) - } ?: personobjekter.hentPerson(u.person.ident) ?: it.opprettPersonGrunnlag() - val gjelderBarnReferanse = gjelderBarn.referanse - GrunnlagDto( - referanse = it.tilGrunnlagsreferanseFaktiskTilsynsutgift(gjelderBarnReferanse), - type = Grunnlagstype.FAKTISK_UTGIFT_PERIODE, - gjelderReferanse = bidragsmottaker!!.tilGrunnlagsreferanse(), - gjelderBarnReferanse = gjelderBarnReferanse, - innhold = - POJONode( - FaktiskUtgiftPeriode( - periode = ÅrMånedsperiode(it.fom, it.tom?.plusDays(1)), - fødselsdatoBarn = gjelderBarn.personObjekt.fødselsdato, - kostpengerBeløp = it.kostpenger ?: BigDecimal.ZERO, - faktiskUtgiftBeløp = it.tilsynsutgift, - kommentar = it.kommentar, - manueltRegistrert = true, + return ( + underholdskostnader + .flatMap { u -> + u.faktiskeTilsynsutgifter.map { + val underholdRolle = u.person.rolle.find { it.behandling.id == id } + val gjelderBarn = + underholdRolle?.tilGrunnlagPerson()?.also { + grunnlagslistePersoner.add(it) + } ?: personobjekter.hentPerson(u.person.ident) ?: it.opprettPersonGrunnlag() + val gjelderBarnReferanse = gjelderBarn.referanse + GrunnlagDto( + referanse = it.tilGrunnlagsreferanseFaktiskTilsynsutgift(gjelderBarnReferanse), + type = Grunnlagstype.FAKTISK_UTGIFT_PERIODE, + gjelderReferanse = bidragsmottaker!!.tilGrunnlagsreferanse(), + gjelderBarnReferanse = gjelderBarnReferanse, + innhold = + POJONode( + FaktiskUtgiftPeriode( + periode = ÅrMånedsperiode(it.fom, it.tom?.plusDays(1)), + fødselsdatoBarn = gjelderBarn.personObjekt.fødselsdato, + kostpengerBeløp = it.kostpenger ?: BigDecimal.ZERO, + faktiskUtgiftBeløp = it.tilsynsutgift, + kommentar = it.kommentar, + manueltRegistrert = true, + ), ), - ), - ) - } - } + grunnlagslistePersoner + ) + } + } + grunnlagslistePersoner + ).toSet().toList() } fun Collection.hentPersonNyesteIdent(ident: String?) = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidrag.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidrag.kt index a89fe268f..4c75b21a7 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidrag.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidrag.kt @@ -18,6 +18,7 @@ import no.nav.bidrag.domene.tid.ÅrMånedsperiode import no.nav.bidrag.transport.behandling.felles.grunnlag.BarnetilsynMedStønadPeriode import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto import no.nav.bidrag.transport.behandling.felles.grunnlag.TilleggsstønadPeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.opprettBarnetilsynGrunnlagsreferanse import no.nav.bidrag.transport.behandling.vedtak.request.OpprettPeriodeRequestDto fun Behandling.tilGrunnlagBarnetilsyn(inkluderIkkeAngitt: Boolean = false): List = @@ -26,9 +27,10 @@ fun Behandling.tilGrunnlagBarnetilsyn(inkluderIkkeAngitt: Boolean = false): List u.barnetilsyn .filter { inkluderIkkeAngitt || it.omfang != Tilsynstype.IKKE_ANGITT && it.under_skolealder != null } .flatMap { - val underholdRolle = u.person.rolle.find { it.behandling.id == id } - val underholdRolleGrunnlagobjekt = - underholdRolle?.tilGrunnlagPerson() ?: ugyldigForespørsel("Fant ikke person for underholdskostnad i behandlingen") + val underholdRolle = + u.person.rolle.find { it.behandling.id == id } + ?: ugyldigForespørsel("Fant ikke person for underholdskostnad i behandlingen") + val underholdRolleGrunnlagobjekt = underholdRolle.tilGrunnlagPerson() val gjelderBarnReferanse = underholdRolleGrunnlagobjekt.referanse listOf( underholdRolleGrunnlagobjekt, @@ -37,6 +39,14 @@ fun Behandling.tilGrunnlagBarnetilsyn(inkluderIkkeAngitt: Boolean = false): List type = Grunnlagstype.BARNETILSYN_MED_STØNAD_PERIODE, gjelderReferanse = bidragsmottaker!!.tilGrunnlagsreferanse(), gjelderBarnReferanse = gjelderBarnReferanse, + grunnlagsreferanseListe = + if (it.kilde == Kilde.OFFENTLIG) { + listOf( + opprettBarnetilsynGrunnlagsreferanse(bidragsmottaker!!.tilGrunnlagsreferanse()), + ) + } else { + emptyList() + }, innhold = POJONode( BarnetilsynMedStønadPeriode( @@ -52,15 +62,17 @@ fun Behandling.tilGrunnlagBarnetilsyn(inkluderIkkeAngitt: Boolean = false): List ), ) } - } + }.toSet() + .toList() fun Behandling.tilGrunnlagTilleggsstønad(): List = underholdskostnader .flatMap { u -> u.tilleggsstønad.flatMap { - val underholdRolle = u.person.rolle.find { it.behandling.id == id } - val underholdRolleGrunnlagobjekt = - underholdRolle?.tilGrunnlagPerson() ?: ugyldigForespørsel("Fant ikke person for underholdskostnad i behandlingen") + val underholdRolle = + u.person.rolle.find { it.behandling.id == id } + ?: ugyldigForespørsel("Fant ikke person for underholdskostnad i behandlingen") + val underholdRolleGrunnlagobjekt = underholdRolle.tilGrunnlagPerson() val gjelderBarnReferanse = underholdRolleGrunnlagobjekt.referanse listOf( underholdRolleGrunnlagobjekt, @@ -80,7 +92,8 @@ fun Behandling.tilGrunnlagTilleggsstønad(): List = ), ) } - } + }.toSet() + .toList() fun ResultatBidragsberegningBarn.byggStønadsendringerForVedtak(behandling: Behandling): StønadsendringPeriode { val søknadsbarn = diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerFelles.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerFelles.kt index a022c6a2f..df9298c26 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerFelles.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerFelles.kt @@ -279,6 +279,7 @@ internal fun Inntekt.tilInntektsrapporteringPeriode( this, ), gjelderReferanse = gjelder.referanse, + gjelderBarnReferanse = søknadsbarn?.referanse, innhold = POJONode( InntektsrapporteringPeriode( diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt new file mode 100644 index 000000000..03e6ab750 --- /dev/null +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt @@ -0,0 +1,645 @@ +package no.nav.bidrag.behandling.service + +import com.fasterxml.jackson.databind.node.POJONode +import io.kotest.assertions.assertSoftly +import io.kotest.matchers.collections.shouldContain +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe +import io.mockk.every +import no.nav.bidrag.behandling.database.datamodell.Behandling +import no.nav.bidrag.behandling.database.datamodell.barn +import no.nav.bidrag.behandling.database.datamodell.konvertereData +import no.nav.bidrag.behandling.database.datamodell.voksneIHusstanden +import no.nav.bidrag.behandling.database.grunnlag.SummerteInntekter +import no.nav.bidrag.behandling.dto.v1.behandling.OpprettBehandlingFraVedtakRequest +import no.nav.bidrag.behandling.dto.v2.behandling.Grunnlagsdatatype +import no.nav.bidrag.behandling.transformers.grunnlag.ainntektListe +import no.nav.bidrag.behandling.transformers.grunnlag.skattegrunnlagListe +import no.nav.bidrag.behandling.utils.testdata.SAKSNUMMER +import no.nav.bidrag.behandling.utils.testdata.filtrerEtterTypeOgIdent +import no.nav.bidrag.behandling.utils.testdata.lagVedtaksdata +import no.nav.bidrag.behandling.utils.testdata.oppretteBehandling +import no.nav.bidrag.behandling.utils.testdata.testdataBM +import no.nav.bidrag.behandling.utils.testdata.testdataBP +import no.nav.bidrag.behandling.utils.testdata.testdataBarn1 +import no.nav.bidrag.domene.enums.beregning.Resultatkode +import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype +import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering +import no.nav.bidrag.domene.enums.person.Bostatuskode +import no.nav.bidrag.domene.enums.rolle.Rolletype +import no.nav.bidrag.domene.enums.rolle.SøktAvType +import no.nav.bidrag.domene.enums.særbidrag.Særbidragskategori +import no.nav.bidrag.domene.enums.særbidrag.Utgiftstype +import no.nav.bidrag.domene.enums.vedtak.Engangsbeløptype +import no.nav.bidrag.domene.enums.vedtak.Vedtakstype +import no.nav.bidrag.transport.behandling.felles.grunnlag.SøknadGrunnlag +import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt +import no.nav.bidrag.transport.behandling.inntekt.response.SummertÅrsinntekt +import org.junit.jupiter.api.Test +import java.math.BigDecimal +import java.math.MathContext +import java.time.LocalDate +import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag.NotatType as Notattype + +class VedtakTilBehandlingBidragTest : CommonVedtakTilBehandlingTest() { + @Test + fun `Skal konvertere vedtak til behandling for lesemodus for SÆRBIDRAG`() { + every { vedtakConsumer.hentVedtak(any()) } returns lagVedtaksdata("vedtak_response-særbidrag") + every { behandlingService.hentBehandlingById(1) } returns (oppretteBehandling()) + val behandling = vedtakService.konverterVedtakTilBehandlingForLesemodus(1)!! + + assertSoftly(behandling) { + behandling.saksnummer shouldBe SAKSNUMMER + årsak shouldBe null + avslag shouldBe null + virkningstidspunkt shouldBe LocalDate.parse("2024-07-01") + soknadFra shouldBe SøktAvType.BIDRAGSPLIKTIG + stonadstype shouldBe null + engangsbeloptype shouldBe Engangsbeløptype.SÆRBIDRAG + behandlerEnhet shouldBe "4806" + mottattdato shouldBe LocalDate.parse("2024-01-15") + klageMottattdato shouldBe null + vedtakstype shouldBe Vedtakstype.ENDRING + vedtaksid shouldBe null + refVedtaksid shouldBe 1 + kategori shouldBe "ANNET" + kategoriBeskrivelse shouldBe "Utstyr til høreapparat" + soknadsid shouldBe 101 + opprettetAv shouldBe "Z994977" + opprettetAvNavn shouldBe null + notater.find { Notattype.UTGIFTER == it.type }?.innhold shouldBe "Dette er en begrunnelse på hvorfor utgifter ble beregnet slik" + notater shouldHaveSize 4 + val notatInntekter = notater.filter { it.type == Notattype.INNTEKT } + notatInntekter.find { it.rolle == it.behandling.bidragsmottaker }?.innhold shouldBe "Notat inntekter BM" + notatInntekter.find { it.rolle == it.behandling.bidragspliktig }?.innhold shouldBe "Notat inntekter BP" + notatInntekter.find { it.rolle == it.behandling.søknadsbarn.first() }?.innhold shouldBe "Notat inntekter BA" + validerUtgifter() + validerRoller() + validerHusstandsmedlem() + validerInntekter() + validerGrunnlag() + } + } + + @Test + fun `Skal konvertere vedtak til behandling for lesemodus for SÆRBIDRAG maks godkjent beløp`() { + every { vedtakConsumer.hentVedtak(any()) } returns lagVedtaksdata("vedtak_response-særbidrag_maksbeløp") + every { behandlingService.hentBehandlingById(1) } returns (oppretteBehandling()) + + val behandling = vedtakService.konverterVedtakTilBehandlingForLesemodus(1)!! + + assertSoftly(behandling) { + utgift shouldNotBe null + assertSoftly(utgift!!) { + beløpDirekteBetaltAvBp shouldBe BigDecimal(500) + maksGodkjentBeløp shouldBe BigDecimal(15000) + maksGodkjentBeløpBegrunnelse shouldBe "Dette er kommentar" + maksGodkjentBeløpTaMed shouldBe true + utgiftsposter shouldHaveSize 3 + } + } + } + + @Test + fun `Skal konvertere vedtak til behandling for lesemodus for SÆRBIDRAG med klage mottatt dato`() { + val originalVedtak = lagVedtaksdata("vedtak_response-særbidrag") + val vedtak1 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-02-01").atStartOfDay(), + grunnlagListe = + originalVedtak.grunnlagListe.map { + if (it.type == Grunnlagstype.SØKNAD) { + it.copy( + innhold = + POJONode( + it.innholdTilObjekt().copy( + mottattDato = LocalDate.parse("2024-05-01"), + klageMottattDato = LocalDate.parse("2024-03-01"), + ), + ), + ) + } else { + it + } + }, + ) + every { behandlingService.hentBehandlingById(1) } returns (oppretteBehandling()) + every { vedtakConsumer.hentVedtak(eq(1)) } returns vedtak1 + val behandling = vedtakService.konverterVedtakTilBehandlingForLesemodus(1)!! + + assertSoftly(behandling) { + behandling.saksnummer shouldBe SAKSNUMMER + årsak shouldBe null + avslag shouldBe null + virkningstidspunkt shouldBe LocalDate.parse("2024-07-01") + soknadFra shouldBe SøktAvType.BIDRAGSPLIKTIG + stonadstype shouldBe null + engangsbeloptype shouldBe Engangsbeløptype.SÆRBIDRAG + behandlerEnhet shouldBe "4806" + mottattdato shouldBe LocalDate.parse("2024-05-01") + klageMottattdato shouldBe LocalDate.parse("2024-03-01") + vedtakstype shouldBe Vedtakstype.ENDRING + vedtaksid shouldBe null + refVedtaksid shouldBe 1 + kategori shouldBe "ANNET" + kategoriBeskrivelse shouldBe "Utstyr til høreapparat" + soknadsid shouldBe 101 + opprettetAv shouldBe "Z994977" + opprettetAvNavn shouldBe null + notater.find { Notattype.UTGIFTER == it.type }?.innhold shouldBe + "Dette er en begrunnelse på hvorfor utgifter ble beregnet slik" + notater.find { Notattype.UTGIFTER == it.type }?.innhold shouldBe "Dette er en begrunnelse på hvorfor utgifter ble beregnet slik" + notater shouldHaveSize 4 + val notatInntekter = notater.filter { it.type == Notattype.INNTEKT } + notatInntekter.find { it.rolle == it.behandling.bidragsmottaker }?.innhold shouldBe "Notat inntekter BM" + notatInntekter.find { it.rolle == it.behandling.bidragspliktig }?.innhold shouldBe "Notat inntekter BP" + notatInntekter.find { it.rolle == it.behandling.søknadsbarn.first() }?.innhold shouldBe "Notat inntekter BA" + validerUtgifter() + validerRoller() + validerHusstandsmedlem() + validerInntekter() + validerGrunnlag() + } + } + + @Test + fun `Skal konvertere vedtak til behandling for lesemodus for SÆRBIDRAG med avslag godkjent beløp lavere enn forskuddsats`() { + val originalVedtak = lagVedtaksdata("vedtak_respons_avslag_særbidrag-forskuddsats") + every { behandlingService.hentBehandlingById(1) } returns (oppretteBehandling()) + + val vedtak1 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-02-01").atStartOfDay(), + grunnlagListe = + originalVedtak.grunnlagListe.map { + if (it.type == Grunnlagstype.SØKNAD) { + it.copy( + innhold = + POJONode( + it.innholdTilObjekt().copy( + mottattDato = LocalDate.parse("2024-05-01"), + klageMottattDato = LocalDate.parse("2024-03-01"), + ), + ), + ) + } else { + it + } + }, + ) + every { vedtakConsumer.hentVedtak(eq(1)) } returns vedtak1 + val behandling = vedtakService.konverterVedtakTilBehandlingForLesemodus(1)!! + + assertSoftly(behandling) { + behandling.saksnummer shouldBe "2400067" + årsak shouldBe null + avslag shouldBe null + virkningstidspunkt shouldBe LocalDate.parse("2024-08-01") + opprinneligVirkningstidspunkt shouldBe LocalDate.parse("2024-08-01") + soknadFra shouldBe SøktAvType.BIDRAGSPLIKTIG + stonadstype shouldBe null + engangsbeloptype shouldBe Engangsbeløptype.SÆRBIDRAG + behandlerEnhet shouldBe "4806" + mottattdato shouldBe LocalDate.parse("2024-05-01") + klageMottattdato shouldBe LocalDate.parse("2024-03-01") + vedtakstype shouldBe Vedtakstype.FASTSETTELSE + vedtaksid shouldBe null + refVedtaksid shouldBe 1 + kategori shouldBe Særbidragskategori.TANNREGULERING.name + kategoriBeskrivelse shouldBe null + soknadsid shouldBe 433434L + opprettetAv shouldBe "Z994977" + opprettetAvNavn shouldBe "F_Z994977 E_Z994977" + sivilstand shouldHaveSize 0 + inntekter shouldHaveSize 0 + husstandsmedlem shouldHaveSize 0 + roller shouldHaveSize 3 + utgift shouldNotBe null + assertSoftly(utgift!!) { + beløpDirekteBetaltAvBp shouldBe BigDecimal(0) + maksGodkjentBeløp shouldBe null + maksGodkjentBeløpBegrunnelse shouldBe null + utgiftsposter shouldHaveSize 2 + assertSoftly(utgiftsposter.find { it.dato == LocalDate.parse("2024-05-08") }!!) { + kravbeløp shouldBe BigDecimal(5000) + godkjentBeløp shouldBe BigDecimal(300) + type shouldBe Utgiftstype.TANNREGULERING.name + betaltAvBp shouldBe false + kommentar shouldBe "Fakturanr 1, delvis betalt av barnetrygd" + } + assertSoftly(utgiftsposter.find { it.dato == LocalDate.parse("2024-07-09") }!!) { + kravbeløp shouldBe BigDecimal(8000) + godkjentBeløp shouldBe BigDecimal(800) + type shouldBe Utgiftstype.TANNREGULERING.name + betaltAvBp shouldBe false + kommentar shouldBe "Fakturanr 2, dekket av forsikring" + } + } + } + } + + @Test + fun `Skal konvertere vedtak til behandling for lesemodus for SÆRBIDRAG med avslag alle utgifter foreldet`() { + val originalVedtak = lagVedtaksdata("vedtak_respons_avslag_særbidrag-foreldet") + val vedtak1 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-02-01").atStartOfDay(), + grunnlagListe = + originalVedtak.grunnlagListe.map { + if (it.type == Grunnlagstype.SØKNAD) { + it.copy( + innhold = + POJONode( + it.innholdTilObjekt().copy( + mottattDato = LocalDate.parse("2024-05-01"), + klageMottattDato = LocalDate.parse("2024-03-01"), + ), + ), + ) + } else { + it + } + }, + ) + every { vedtakConsumer.hentVedtak(eq(1)) } returns vedtak1 + every { behandlingService.hentBehandlingById(1) } returns (oppretteBehandling()) + val behandling = vedtakService.konverterVedtakTilBehandlingForLesemodus(1)!! + + assertSoftly(behandling) { + behandling.saksnummer shouldBe "2400067" + årsak shouldBe null + avslag shouldBe null + virkningstidspunkt shouldBe LocalDate.parse("2024-08-01") + opprinneligVirkningstidspunkt shouldBe LocalDate.parse("2024-08-01") + soknadFra shouldBe SøktAvType.BIDRAGSPLIKTIG + stonadstype shouldBe null + engangsbeloptype shouldBe Engangsbeløptype.SÆRBIDRAG + behandlerEnhet shouldBe "4806" + mottattdato shouldBe LocalDate.parse("2024-05-01") + klageMottattdato shouldBe LocalDate.parse("2024-03-01") + vedtakstype shouldBe Vedtakstype.FASTSETTELSE + vedtaksid shouldBe null + refVedtaksid shouldBe 1 + kategori shouldBe Særbidragskategori.TANNREGULERING.name + kategoriBeskrivelse shouldBe null + soknadsid shouldBe 433434L + opprettetAv shouldBe "Z994977" + opprettetAvNavn shouldBe "F_Z994977 E_Z994977" + sivilstand shouldHaveSize 0 + inntekter shouldHaveSize 0 + husstandsmedlem shouldHaveSize 0 + roller shouldHaveSize 3 + utgift shouldNotBe null + assertSoftly(utgift!!) { + beløpDirekteBetaltAvBp shouldBe BigDecimal(0) + utgiftsposter shouldHaveSize 2 + assertSoftly(utgiftsposter.find { it.dato == LocalDate.parse("2022-05-08") }!!) { + kravbeløp shouldBe BigDecimal(5000) + godkjentBeløp shouldBe BigDecimal(0) + type shouldBe Utgiftstype.TANNREGULERING.name + betaltAvBp shouldBe false + kommentar shouldBe "Fakturanr 1" + } + assertSoftly(utgiftsposter.find { it.dato == LocalDate.parse("2022-07-09") }!!) { + kravbeløp shouldBe BigDecimal(8000) + godkjentBeløp shouldBe BigDecimal(0) + type shouldBe Utgiftstype.TANNREGULERING.name + betaltAvBp shouldBe false + kommentar shouldBe "Fakturanr 2" + } + } + } + } + + @Test + fun `Skal opprette behandling og lagre vedtakstidspunkt for forrige vedtak`() { + val originalVedtak = lagVedtaksdata("vedtak_response-særbidrag") + val vedtak1 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-02-01").atStartOfDay(), + engangsbeløpListe = + originalVedtak.engangsbeløpListe.map { + it.copy( + omgjørVedtakId = 123, + ) + }, + ) + val vedtak2 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-03-01").atStartOfDay(), + engangsbeløpListe = + originalVedtak.engangsbeløpListe.map { + it.copy( + omgjørVedtakId = 124, + ) + }, + ) + val vedtak3 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-04-01").atStartOfDay(), + engangsbeløpListe = + originalVedtak.engangsbeløpListe.map { + it.copy( + omgjørVedtakId = null, + ) + }, + ) + every { vedtakConsumer.hentVedtak(eq(12333)) } returns vedtak1 + every { vedtakConsumer.hentVedtak(eq(123)) } returns vedtak2 + every { vedtakConsumer.hentVedtak(eq(124)) } returns vedtak3 + val behandling = + vedtakService.konverterVedtakTilBehandling( + OpprettBehandlingFraVedtakRequest( + vedtakstype = Vedtakstype.KLAGE, + søknadsid = 100, + søknadsreferanseid = 222, + søknadFra = SøktAvType.BIDRAGSPLIKTIG, + saksnummer = "123213213", + mottattdato = LocalDate.parse("2024-01-01"), + søktFomDato = LocalDate.parse("2021-01-01"), + behandlerenhet = "9999", + ), + 12333, + )!! + + assertSoftly(behandling) { + opprinneligVedtakstidspunkt shouldHaveSize 3 + opprinneligVedtakstidspunkt shouldContain LocalDate.parse("2024-04-01").atStartOfDay() + opprinneligVedtakstidspunkt shouldContain LocalDate.parse("2024-03-01").atStartOfDay() + opprinneligVedtakstidspunkt shouldContain LocalDate.parse("2024-02-01").atStartOfDay() + } + } + + @Test + fun `Skal opprette behandling med klage mottatt dato`() { + val originalVedtak = lagVedtaksdata("vedtak_response-særbidrag") + val vedtak1 = + originalVedtak.copy( + vedtakstidspunkt = LocalDate.parse("2024-02-01").atStartOfDay(), + grunnlagListe = + originalVedtak.grunnlagListe.map { + if (it.type == Grunnlagstype.SØKNAD) { + it.copy( + innhold = + POJONode( + it.innholdTilObjekt().copy( + mottattDato = LocalDate.parse("2024-05-01"), + klageMottattDato = LocalDate.parse("2024-03-01"), + ), + ), + ) + } else { + it + } + }, + ) + every { vedtakConsumer.hentVedtak(eq(12333)) } returns vedtak1 + val behandling = + vedtakService.konverterVedtakTilBehandling( + OpprettBehandlingFraVedtakRequest( + vedtakstype = Vedtakstype.KLAGE, + søknadsid = 100, + søknadsreferanseid = 222, + søknadFra = SøktAvType.BIDRAGSPLIKTIG, + saksnummer = "123213213", + mottattdato = LocalDate.parse("2024-07-01"), + søktFomDato = LocalDate.parse("2024-07-01"), + behandlerenhet = "9999", + ), + 12333, + )!! + + assertSoftly(behandling) { + klageMottattdato shouldBe LocalDate.parse("2024-07-01") + mottattdato shouldBe LocalDate.parse("2024-05-01") + } + } + + @Test + fun `Skal konvertere vedtak til behandling for lesemodus hvis direkte avslag`() { + every { vedtakConsumer.hentVedtak(any()) } returns lagVedtaksdata("vedtak_respons_avslag-særbidrag") + every { behandlingService.hentBehandlingById(1) } returns (oppretteBehandling()) + + val behandling = vedtakService.konverterVedtakTilBehandlingForLesemodus(1)!! + + assertSoftly(behandling) { + behandling.saksnummer shouldBe "2400042" + årsak shouldBe null + avslag shouldBe Resultatkode.PRIVAT_AVTALE + kategori shouldBe Særbidragskategori.ANNET.name + kategoriBeskrivelse shouldBe "Utstyr til høreapparat" + notater.find { Notattype.UTGIFTER == it.type }?.innhold shouldBe + "Dette er en begrunnelse på hvorfor utgifter ble beregnet slik" + virkningstidspunkt shouldBe LocalDate.parse("2024-07-01") + opprinneligVirkningstidspunkt shouldBe LocalDate.parse("2024-07-01") + } + } + + @Test + fun `Skal konvertere vedtak for beregning`() { + every { vedtakConsumer.hentVedtak(any()) } returns lagVedtaksdata("vedtak_response-særbidrag") + val resultat = + vedtakService.konverterVedtakTilBeregningResultatSærbidrag(1) + + resultat shouldNotBe null + + assertSoftly(resultat!!) { + bpsAndel!!.endeligAndelFaktor shouldBe BigDecimal(0.6444, MathContext(4)) + bpsAndel.andelBeløp shouldBe BigDecimal(5796) + utgiftsposter.shouldHaveSize(3) + resultatKode shouldBe Resultatkode.SÆRBIDRAG_INNVILGET + it.resultat shouldBe BigDecimal(5796) + antallBarnIHusstanden shouldBe 3.0 + voksenIHusstanden shouldBe true + erDirekteAvslag shouldBe false + bpHarEvne shouldBe true + delberegningUtgift!!.sumGodkjent shouldBe BigDecimal(9000) + delberegningUtgift.sumBetaltAvBp shouldBe BigDecimal(2500) + beløpSomInnkreves shouldBe BigDecimal(3296) + maksGodkjentBeløp shouldBe null + } + } + + private fun Behandling.validerInntekter() { + assertSoftly(inntekter) { + size shouldBe 8 + filter { it.type == Inntektsrapportering.BARNETILLEGG } shouldHaveSize 1 + filter { it.type == Inntektsrapportering.LØNN_MANUELT_BEREGNET } shouldHaveSize 2 + filter { it.type == Inntektsrapportering.KAPITALINNTEKT } shouldHaveSize 2 + filter { it.type == Inntektsrapportering.LIGNINGSINNTEKT } shouldHaveSize 2 + find { it.type == Inntektsrapportering.LØNN_MANUELT_BEREGNET && it.ident == testdataBP.ident } shouldNotBe null + find { it.type == Inntektsrapportering.LIGNINGSINNTEKT && it.ident == testdataBM.ident } shouldNotBe null + find { it.type == Inntektsrapportering.LØNN_MANUELT_BEREGNET && it.ident == testdataBarn1.ident } shouldNotBe null + } + } + + fun Behandling.validerHusstandsmedlem() { + assertSoftly(husstandsmedlem) { + size shouldBe 5 + val barn1 = husstandsmedlem.find { it.ident == testdataBarn1.ident } + assertSoftly(barn1!!) { + it.ident shouldBe testdataBarn1.ident + it.fødselsdato shouldBe testdataBarn1.fødselsdato + it.navn shouldBe null + it.kilde shouldBe Kilde.OFFENTLIG + val periode = it.perioder.first() + assertSoftly(periode) { + it.datoFom shouldBe LocalDate.of(2024, 7, 1) + it.datoTom shouldBe null + it.bostatus shouldBe Bostatuskode.MED_FORELDER + it.kilde shouldBe Kilde.OFFENTLIG + } + } + } + husstandsmedlem.barn shouldHaveSize 4 + husstandsmedlem.voksneIHusstanden shouldNotBe null + assertSoftly(husstandsmedlem.voksneIHusstanden!!) { + it.rolle shouldNotBe null + it.rolle!!.rolletype shouldBe Rolletype.BIDRAGSPLIKTIG + it.kilde shouldBe Kilde.OFFENTLIG + val periode = it.perioder.first() + assertSoftly(periode) { + it.datoFom shouldBe LocalDate.of(2024, 7, 1) + it.datoTom shouldBe null + it.bostatus shouldBe Bostatuskode.BOR_MED_ANDRE_VOKSNE + it.kilde shouldBe Kilde.OFFENTLIG + } + } + } + + fun Behandling.validerRoller() { + assertSoftly(roller.toList()) { + size shouldBe 3 + val bidragsmotaker = roller.find { it.rolletype == Rolletype.BIDRAGSMOTTAKER } + bidragsmotaker shouldNotBe null + assertSoftly(bidragsmotaker!!) { + it.ident shouldBe testdataBM.ident + it.fødselsdato shouldBe testdataBM.fødselsdato + it.navn shouldBe null + it.deleted shouldBe false + } + val bidragspliktig = roller.find { it.rolletype == Rolletype.BIDRAGSPLIKTIG } + bidragspliktig shouldNotBe null + assertSoftly(bidragspliktig!!) { + it.ident shouldBe testdataBP.ident + it.fødselsdato shouldBe testdataBP.fødselsdato + it.navn shouldBe null + it.deleted shouldBe false + } + val søknadsbarn = roller.find { it.rolletype == Rolletype.BARN } + + assertSoftly(søknadsbarn!!) { + it.ident shouldBe testdataBarn1.ident + it.fødselsdato shouldBe testdataBarn1.fødselsdato + it.navn shouldBe null + it.deleted shouldBe false + } + } + } + + private fun Behandling.validerUtgifter() { + utgift shouldNotBe null + assertSoftly(utgift!!) { + beløpDirekteBetaltAvBp shouldBe BigDecimal(2500) + maksGodkjentBeløp shouldBe null + maksGodkjentBeløpBegrunnelse shouldBe null + utgiftsposter shouldHaveSize 3 + assertSoftly(utgiftsposter.find { it.type == "Ny høreapparat" }!!) { + kravbeløp shouldBe BigDecimal(9000) + godkjentBeløp shouldBe BigDecimal(6000) + type shouldBe "Ny høreapparat" + betaltAvBp shouldBe false + kommentar shouldBe "Inkluderer ikke frakt og andre kostnader" + dato shouldBe LocalDate.parse("2024-05-06") + } + } + } + + private fun Behandling.validerGrunnlag() { + assertSoftly(grunnlagListe) { + size shouldBe 17 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, + testdataBM.ident, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.SMÅBARNSTILLEGG, + testdataBM.ident, + ) shouldHaveSize 0 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.KONTANTSTØTTE, + testdataBM.ident, + ) shouldHaveSize 0 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.UTVIDET_BARNETRYGD, + testdataBM.ident, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.BARNETILLEGG, + testdataBM.ident, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.BARNETILSYN, + testdataBM.ident, + ) shouldHaveSize 0 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.ARBEIDSFORHOLD, + testdataBM.ident, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.BOFORHOLD, + testdataBP.ident, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, + testdataBP.ident, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.SUMMERTE_MÅNEDSINNTEKTER, + testdataBM.ident, + true, + ) shouldHaveSize 0 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.BOFORHOLD_ANDRE_VOKSNE_I_HUSSTANDEN, + testdataBP.ident, + true, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.BARNETILLEGG, + testdataBM.ident, + true, + ) shouldHaveSize 1 + + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.SMÅBARNSTILLEGG, + testdataBM.ident, + true, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.KONTANTSTØTTE, + testdataBM.ident, + true, + ) shouldHaveSize 1 + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.UTVIDET_BARNETRYGD, + testdataBM.ident, + true, + ) shouldHaveSize 1 + + val skattepliktig = + filtrerEtterTypeOgIdent( + Grunnlagsdatatype.SKATTEPLIKTIGE_INNTEKTER, + testdataBM.ident, + true, + ) + skattepliktig shouldHaveSize 1 + val skattepliktigInnhold = + skattepliktig[0].konvertereData>() + skattepliktigInnhold!!.inntekter shouldHaveSize 4 + skattepliktigInnhold.inntekter.ainntektListe shouldHaveSize 0 + skattepliktigInnhold.inntekter.skattegrunnlagListe shouldHaveSize 4 + } + } +} diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakserviceBidragTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakserviceBidragTest.kt index 186b09bf2..53ab8513d 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakserviceBidragTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakserviceBidragTest.kt @@ -717,6 +717,12 @@ private fun OpprettVedtakRequestDto.validerUndeholdskostnad() { assertSoftly(it[0]) { gjelderBarnReferanse shouldBe søknadsbarnGrunnlag.referanse gjelderReferanse shouldBe bmGrunnlag.referanse + grunnlagsreferanseListe shouldHaveSize 0 + } + assertSoftly(it[1]) { + gjelderBarnReferanse shouldBe søknadsbarnGrunnlag.referanse + gjelderReferanse shouldBe bmGrunnlag.referanse + grunnlagsreferanseListe shouldHaveSize 1 } } assertSoftly(hentGrunnlagstyper(Grunnlagstype.TILLEGGSSTØNAD_PERIODE)) { diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidragTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidragTest.kt new file mode 100644 index 000000000..1b6e3bfc1 --- /dev/null +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagByggerBidragTest.kt @@ -0,0 +1,219 @@ +package no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak + +import io.kotest.assertions.assertSoftly +import io.kotest.matchers.booleans.shouldBeTrue +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.nulls.shouldNotBeNull +import io.kotest.matchers.shouldBe +import no.nav.bidrag.behandling.service.PersonService +import no.nav.bidrag.behandling.transformers.grunnlag.tilGrunnlagsreferanse +import no.nav.bidrag.behandling.utils.testdata.leggTilBarnetilsyn +import no.nav.bidrag.behandling.utils.testdata.leggTilFaktiskTilsynsutgift +import no.nav.bidrag.behandling.utils.testdata.leggTilSamvær +import no.nav.bidrag.behandling.utils.testdata.leggTilTillegsstønad +import no.nav.bidrag.behandling.utils.testdata.opprettGyldigBehandlingForBeregningOgVedtak +import no.nav.bidrag.behandling.utils.testdata.testdataBarnBm +import no.nav.bidrag.behandling.utils.testdata.testdataHusstandsmedlem1 +import no.nav.bidrag.beregn.barnebidrag.BeregnSamværsklasseApi +import no.nav.bidrag.commons.web.mock.stubSjablonService +import no.nav.bidrag.domene.enums.barnetilsyn.Skolealder +import no.nav.bidrag.domene.enums.barnetilsyn.Tilsynstype +import no.nav.bidrag.domene.enums.behandling.TypeBehandling +import no.nav.bidrag.domene.enums.beregning.Samværsklasse +import no.nav.bidrag.domene.enums.diverse.Kilde +import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype +import no.nav.bidrag.domene.enums.samværskalkulator.SamværskalkulatorFerietype +import no.nav.bidrag.domene.enums.samværskalkulator.SamværskalkulatorNetterFrekvens +import no.nav.bidrag.domene.tid.ÅrMånedsperiode +import no.nav.bidrag.transport.behandling.beregning.samvær.SamværskalkulatorDetaljer +import no.nav.bidrag.transport.behandling.felles.grunnlag.BarnetilsynMedStønadPeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.FaktiskUtgiftPeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.SamværsperiodeGrunnlag +import no.nav.bidrag.transport.behandling.felles.grunnlag.TilleggsstønadPeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerBasertPåEgenReferanse +import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt +import no.nav.bidrag.transport.behandling.felles.grunnlag.personIdent +import no.nav.bidrag.transport.behandling.felles.grunnlag.personObjekt +import no.nav.bidrag.transport.behandling.felles.grunnlag.søknadsbarn +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import stubPersonConsumer +import java.math.BigDecimal +import java.time.YearMonth + +class GrunnlagByggerBidragTest { + companion object { + @JvmStatic + @BeforeAll + fun initPersonMock() { + stubPersonConsumer() + } + } + + val mapper = BehandlingTilGrunnlagMappingV2(PersonService(stubPersonConsumer()), BeregnSamværsklasseApi(stubSjablonService())) + + @Test + fun `skal mappe barnetilsyn til grunnlag`() { + val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG) + behandling.leggTilBarnetilsyn(ÅrMånedsperiode(behandling.virkningstidspunkt!!.plusMonths(1), null), generateId = true) + behandling.leggTilBarnetilsyn( + ÅrMånedsperiode(behandling.virkningstidspunkt!!, behandling.virkningstidspunkt!!.plusMonths(1)), + generateId = true, + tilsynstype = Tilsynstype.HELTID, + under_skolealder = false, + kilde = Kilde.OFFENTLIG, + ) + + val grunnlag = behandling.tilGrunnlagBarnetilsyn(true) + assertSoftly(grunnlag) { + shouldHaveSize(3) + it.filtrerBasertPåEgenReferanse(Grunnlagstype.PERSON_SØKNADSBARN) shouldHaveSize 1 + it.filtrerBasertPåEgenReferanse(Grunnlagstype.BARNETILSYN_MED_STØNAD_PERIODE) shouldHaveSize 2 + val perioder = it.filtrerBasertPåEgenReferanse(Grunnlagstype.BARNETILSYN_MED_STØNAD_PERIODE) + assertSoftly(perioder[0]) { + gjelderBarnReferanse shouldBe behandling.søknadsbarn.first().tilGrunnlagsreferanse() + gjelderReferanse shouldBe behandling.bidragsmottaker!!.tilGrunnlagsreferanse() + val innhold = it.innholdTilObjekt() + innhold.skolealder shouldBe Skolealder.UNDER + innhold.tilsynstype shouldBe Tilsynstype.HELTID + innhold.manueltRegistrert shouldBe true + innhold.periode.fom shouldBe YearMonth.from(behandling.virkningstidspunkt!!.plusMonths(1)) + grunnlagsreferanseListe shouldHaveSize 0 + } + assertSoftly(perioder[1]) { + gjelderBarnReferanse shouldBe behandling.søknadsbarn.first().tilGrunnlagsreferanse() + gjelderReferanse shouldBe behandling.bidragsmottaker!!.tilGrunnlagsreferanse() + val innhold = it.innholdTilObjekt() + innhold.skolealder shouldBe Skolealder.OVER + innhold.tilsynstype shouldBe Tilsynstype.HELTID + innhold.manueltRegistrert shouldBe false + innhold.periode.fom shouldBe YearMonth.from(behandling.virkningstidspunkt) + innhold.periode.til shouldBe YearMonth.from(behandling.virkningstidspunkt!!.plusMonths(1)) + grunnlagsreferanseListe shouldHaveSize 1 + } + } + } + + @Test + fun `skal mappe faktisk tilsynsutgift til grunnlag`() { + val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG) + behandling.leggTilFaktiskTilsynsutgift(ÅrMånedsperiode(behandling.virkningstidspunkt!!.plusMonths(1), null), testdataHusstandsmedlem1, medId = true) + behandling.leggTilFaktiskTilsynsutgift( + ÅrMånedsperiode(behandling.virkningstidspunkt!!.plusMonths(1), null), + testdataBarnBm, + medId = true, + ) + behandling.leggTilFaktiskTilsynsutgift(ÅrMånedsperiode(behandling.virkningstidspunkt!!, null), medId = true) + val grunnlag = mapper.run { behandling.tilGrunnlagFaktiskeTilsynsutgifter(behandling.tilPersonobjekter()) } + assertSoftly(grunnlag) { + shouldHaveSize(6) + it.filtrerBasertPåEgenReferanse(Grunnlagstype.PERSON_SØKNADSBARN) shouldHaveSize 1 + it.filtrerBasertPåEgenReferanse(Grunnlagstype.PERSON_BARN_BIDRAGSMOTTAKER) shouldHaveSize 2 + + val personHusstandsmedlem = it.filtrerBasertPåEgenReferanse(Grunnlagstype.PERSON_BARN_BIDRAGSMOTTAKER).find { it.personIdent == testdataHusstandsmedlem1.ident } + val personBarnBM = it.filtrerBasertPåEgenReferanse(Grunnlagstype.PERSON_BARN_BIDRAGSMOTTAKER).find { it.personIdent == testdataBarnBm.ident } + personHusstandsmedlem.shouldNotBeNull() + personBarnBM.shouldNotBeNull() + + it.filtrerBasertPåEgenReferanse(Grunnlagstype.FAKTISK_UTGIFT_PERIODE) shouldHaveSize 3 + val perioder = it.filtrerBasertPåEgenReferanse(Grunnlagstype.FAKTISK_UTGIFT_PERIODE) + + perioder.any { it.gjelderBarnReferanse == personHusstandsmedlem.referanse }.shouldBeTrue() + perioder.any { it.gjelderBarnReferanse == personBarnBM.referanse }.shouldBeTrue() + + assertSoftly(perioder.find { it.gjelderBarnReferanse == behandling.søknadsbarn.first().tilGrunnlagsreferanse() }!!) { + gjelderBarnReferanse shouldBe behandling.søknadsbarn.first().tilGrunnlagsreferanse() + gjelderReferanse shouldBe behandling.bidragsmottaker!!.tilGrunnlagsreferanse() + val innhold = it.innholdTilObjekt() + innhold.faktiskUtgiftBeløp shouldBe BigDecimal(4000) + innhold.kostpengerBeløp shouldBe BigDecimal(1000) + innhold.kommentar shouldBe "Kommentar på tilsynsutgift" + innhold.fødselsdatoBarn shouldBe søknadsbarn.first().personObjekt.fødselsdato + innhold.manueltRegistrert shouldBe true + innhold.periode.fom shouldBe YearMonth.from(behandling.virkningstidspunkt) + innhold.periode.til shouldBe null + grunnlagsreferanseListe shouldHaveSize 0 + } + } + } + + @Test + fun `skal mappe tilleggstønad til grunnlag`() { + val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG) + behandling.leggTilTillegsstønad(ÅrMånedsperiode(behandling.virkningstidspunkt!!, behandling.virkningstidspunkt!!.plusMonths(5)), medId = true) + behandling.leggTilTillegsstønad(ÅrMånedsperiode(behandling.virkningstidspunkt!!.plusMonths(5), null), medId = true) + + val grunnlag = behandling.tilGrunnlagTilleggsstønad() + assertSoftly(grunnlag) { + shouldHaveSize(3) + it.filtrerBasertPåEgenReferanse(Grunnlagstype.PERSON_SØKNADSBARN) shouldHaveSize 1 + it.filtrerBasertPåEgenReferanse(Grunnlagstype.TILLEGGSSTØNAD_PERIODE) shouldHaveSize 2 + val perioder = it.filtrerBasertPåEgenReferanse(Grunnlagstype.TILLEGGSSTØNAD_PERIODE) + assertSoftly(perioder[0]) { + gjelderBarnReferanse shouldBe behandling.søknadsbarn.first().tilGrunnlagsreferanse() + gjelderReferanse shouldBe behandling.bidragsmottaker!!.tilGrunnlagsreferanse() + val innhold = it.innholdTilObjekt() + innhold.beløpDagsats shouldBe BigDecimal(50) + innhold.manueltRegistrert shouldBe true + innhold.periode.fom shouldBe YearMonth.from(behandling.virkningstidspunkt) + innhold.periode.til shouldBe YearMonth.from(behandling.virkningstidspunkt!!.plusMonths(5)) + grunnlagsreferanseListe shouldHaveSize 0 + } + } + } + + @Test + fun `skal mappe samvær til grunnlag`() { + val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG) + behandling.leggTilSamvær(ÅrMånedsperiode(behandling.virkningstidspunkt!!, behandling.virkningstidspunkt!!.plusMonths(1)), samværsklasse = Samværsklasse.SAMVÆRSKLASSE_1, medId = true) + behandling.leggTilSamvær(ÅrMånedsperiode(behandling.virkningstidspunkt!!.plusMonths(1), null), medId = true) + val grunnlag = mapper.run { behandling.tilGrunnlagSamvær(behandling.tilPersonobjekter().søknadsbarn.first()) } + + assertSoftly(grunnlag) { + shouldHaveSize(10) + it.filtrerBasertPåEgenReferanse(Grunnlagstype.SAMVÆRSPERIODE) shouldHaveSize 2 + val perioder = it.filtrerBasertPåEgenReferanse(Grunnlagstype.SAMVÆRSPERIODE) + assertSoftly(perioder[0]) { + gjelderBarnReferanse shouldBe behandling.søknadsbarn.first().tilGrunnlagsreferanse() + gjelderReferanse shouldBe behandling.bidragspliktig!!.tilGrunnlagsreferanse() + val innhold = it.innholdTilObjekt() + innhold.samværsklasse shouldBe Samværsklasse.SAMVÆRSKLASSE_1 + innhold.manueltRegistrert shouldBe true + innhold.periode.fom shouldBe YearMonth.from(behandling.virkningstidspunkt) + innhold.periode.til shouldBe YearMonth.from(behandling.virkningstidspunkt!!.plusMonths(1)) + grunnlagsreferanseListe shouldHaveSize 0 + } + + assertSoftly(perioder[1]) { + gjelderBarnReferanse shouldBe behandling.søknadsbarn.first().tilGrunnlagsreferanse() + gjelderReferanse shouldBe behandling.bidragspliktig!!.tilGrunnlagsreferanse() + val innhold = it.innholdTilObjekt() + innhold.samværsklasse shouldBe Samværsklasse.SAMVÆRSKLASSE_2 + innhold.manueltRegistrert shouldBe true + innhold.periode.fom shouldBe YearMonth.from(behandling.virkningstidspunkt!!.plusMonths(1)) + innhold.periode.til shouldBe null + grunnlagsreferanseListe shouldHaveSize 8 + + grunnlag.filtrerBasertPåEgenReferanse(Grunnlagstype.SJABLON_SAMVARSFRADRAG) shouldHaveSize 5 + grunnlag.filtrerBasertPåEgenReferanse(Grunnlagstype.SAMVÆRSKALKULATOR) shouldHaveSize 1 + grunnlag.filtrerBasertPåEgenReferanse(Grunnlagstype.DELBEREGNING_SAMVÆRSKLASSE) shouldHaveSize 1 + grunnlag.filtrerBasertPåEgenReferanse(Grunnlagstype.DELBEREGNING_SAMVÆRSKLASSE_NETTER) shouldHaveSize 1 + + val samværskalkulatorDetaljer = grunnlag.filtrerBasertPåEgenReferanse(Grunnlagstype.SAMVÆRSKALKULATOR).first().innholdTilObjekt() + samværskalkulatorDetaljer.regelmessigSamværNetter shouldBe BigDecimal(4) + samværskalkulatorDetaljer.ferier shouldHaveSize 5 + samværskalkulatorDetaljer.ferier.filter { it.type == SamværskalkulatorFerietype.JUL_NYTTÅR } shouldHaveSize 1 + samværskalkulatorDetaljer.ferier.filter { it.type == SamværskalkulatorFerietype.PÅSKE } shouldHaveSize 1 + samværskalkulatorDetaljer.ferier.filter { it.type == SamværskalkulatorFerietype.ANNET } shouldHaveSize 1 + samværskalkulatorDetaljer.ferier.filter { it.type == SamværskalkulatorFerietype.VINTERFERIE } shouldHaveSize 1 + samværskalkulatorDetaljer.ferier.filter { it.type == SamværskalkulatorFerietype.SOMMERFERIE } shouldHaveSize 1 + + samværskalkulatorDetaljer.ferier.find { it.type == SamværskalkulatorFerietype.SOMMERFERIE }!!.let { + it.frekvens shouldBe SamværskalkulatorNetterFrekvens.ANNET_HVERT_ÅR + it.bidragsmottakerNetter shouldBe BigDecimal(14) + it.bidragspliktigNetter shouldBe BigDecimal(1) + } + } + } + } +} diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/GrunnlagMappingTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagMappingTest.kt similarity index 98% rename from src/test/kotlin/no/nav/bidrag/behandling/transformers/GrunnlagMappingTest.kt rename to src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagMappingTest.kt index ebdc6b766..494b8ad5b 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/GrunnlagMappingTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/tilvedtak/GrunnlagMappingTest.kt @@ -1,4 +1,4 @@ -package no.nav.bidrag.behandling.transformers +package no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldBeEmpty @@ -29,17 +29,6 @@ import no.nav.bidrag.behandling.service.BeregningEvnevurderingService import no.nav.bidrag.behandling.service.PersonService import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning import no.nav.bidrag.behandling.transformers.grunnlag.tilGrunnlagPerson -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BehandlingTilGrunnlagMappingV2 -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagGenerelt -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagNotater -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagSærbidragKategori -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagSøknad -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagUtgiftDirekteBetalt -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagUtgiftsposter -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.byggGrunnlagVirkningsttidspunkt -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.tilBehandlingreferanseListe -import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.tilPersonGrunnlag import no.nav.bidrag.behandling.utils.testdata.SAKSNUMMER import no.nav.bidrag.behandling.utils.testdata.SOKNAD_ID import no.nav.bidrag.behandling.utils.testdata.TestDataPerson