From 81ded402a6a8febac5f197ebba76d7df11d1166a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kjetil=20Sk=C3=A5r?= <43172034+s148719@users.noreply.github.com> Date: Mon, 9 Dec 2024 11:56:50 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Legge=20til=20felt=20for=20avrundet=20m?= =?UTF-8?q?=C3=A5nedsbel=C3=B8p=20i=20InntektDtoV2.=20(#637)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Legge til felt for avrundet månedsbeløp for barnetillegg i InntektDtoV2. --- .../behandling/dto/v2/inntekt/InntektDtoV2.kt | 12 ++- .../transformers/inntekt/Inntektsmappinger.kt | 6 +- .../transformers/DtoMapperMockTest.kt | 83 +++++++++++++++++++ 3 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/inntekt/InntektDtoV2.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/inntekt/InntektDtoV2.kt index 05a84f02a..d2784800f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/inntekt/InntektDtoV2.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/inntekt/InntektDtoV2.kt @@ -13,6 +13,7 @@ import no.nav.bidrag.domene.ident.Personident import no.nav.bidrag.domene.tid.Datoperiode import no.nav.bidrag.transport.behandling.beregning.felles.InntektPerBarn import java.math.BigDecimal +import java.math.RoundingMode import java.time.LocalDate data class InntektDtoV2( @@ -46,7 +47,16 @@ data class InntektDtoV2( @Schema(required = true) val inntektstyper: Set = emptySet(), val historisk: Boolean? = false, -) +) { + @get:Schema(description = "Avrundet månedsbeløp for barnetillegg") + val månedsbeløp: BigDecimal? + get() = + if (Inntektsrapportering.BARNETILLEGG == rapporteringstype) { + beløp.divide(BigDecimal(12), 0, RoundingMode.HALF_UP) + } else { + null + } +} data class InntekterDtoV2( val barnetillegg: Set = emptySet(), diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/inntekt/Inntektsmappinger.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/inntekt/Inntektsmappinger.kt index 4ff70cf6e..3ef5495f0 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/inntekt/Inntektsmappinger.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/inntekt/Inntektsmappinger.kt @@ -132,11 +132,7 @@ fun Inntekt.tilInntektDtoV2() = id = this.id, taMed = this.taMed, rapporteringstype = this.type, - beløp = - maxOf( - belop.nærmesteHeltall, - BigDecimal.ZERO, - ), + beløp = maxOf(belop.nærmesteHeltall, BigDecimal.ZERO), // Kapitalinntekt kan ha negativ verdi. Dette skal ikke vises i frontend datoFom = this.datoFom, datoTom = this.datoTom, diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt index 012d8c2b7..3b58abc76 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt @@ -321,4 +321,87 @@ class DtoMapperMockTest { it.harInnvilgetTilleggsstønad shouldBe true } } + + @Test + fun `skal vise månedsinntekt`() { + // gitt + val behandling = opprettGyldigBehandlingForBeregningOgVedtak(true, typeBehandling = TypeBehandling.BIDRAG) + behandling.inntekter.add( + Inntekt( + belop = BigDecimal(2000), + datoFom = behandling.virkningstidspunkt?.plusMonths(1), + datoTom = null, + ident = behandling.bidragsmottaker!!.ident!!, + taMed = false, + gjelderBarn = behandling.søknadsbarn.first().ident, + kilde = Kilde.MANUELL, + behandling = behandling, + type = Inntektsrapportering.BARNETILLEGG, + id = 1, + ), + ) + behandling.inntekter.add( + Inntekt( + belop = BigDecimal(0), + datoFom = behandling.virkningstidspunkt?.plusMonths(2), + datoTom = null, + ident = behandling.bidragspliktig!!.ident!!, + gjelderBarn = behandling.søknadsbarn.first().ident, + taMed = true, + kilde = Kilde.MANUELL, + behandling = behandling, + type = Inntektsrapportering.BARNETILLEGG, + id = 1, + ), + ) + + behandling.inntekter.add( + Inntekt( + belop = BigDecimal(-1), + datoFom = behandling.virkningstidspunkt?.plusMonths(2), + datoTom = null, + ident = behandling.bidragspliktig!!.ident!!, + gjelderBarn = behandling.søknadsbarn.first().ident, + taMed = true, + kilde = Kilde.MANUELL, + behandling = behandling, + type = Inntektsrapportering.BARNETILLEGG, + id = 1, + ), + ) + + behandling.inntekter.add( + Inntekt( + belop = BigDecimal(144), + datoFom = behandling.virkningstidspunkt?.plusMonths(3), + datoTom = null, + ident = behandling.bidragspliktig!!.ident!!, + gjelderBarn = behandling.søknadsbarn.first().ident, + taMed = true, + kilde = Kilde.MANUELL, + behandling = behandling, + type = Inntektsrapportering.BARNETILLEGG, + id = 1, + ), + ) + + // hvis + val behandlingDto = dtomapper.tilDto(behandling) + + // så + behandlingDto.shouldNotBeNull() + + val barnetillegg = behandlingDto.inntekter.barnetillegg shouldHaveSize 3 + + assertSoftly(barnetillegg) { bt -> + bt.forEach { + when (it.beløp) { + BigDecimal(-1) -> it.månedsbeløp shouldBe BigDecimal.ZERO + BigDecimal.ZERO -> it.månedsbeløp shouldBe BigDecimal.ZERO + BigDecimal(144) -> it.månedsbeløp shouldBe BigDecimal(12) + BigDecimal(2000) -> it.månedsbeløp shouldBe BigDecimal(167) + } + } + } + } } From dcd4b5972e067e351e7d6d7dd41a678c7128798b Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Mon, 9 Dec 2024 12:53:31 +0100 Subject: [PATCH 2/3] Fikse visningsmodus gebyr (#636) * Fikse visningsmodus gebyr * Fikse visningsmodus gebyr * Gebyr lesemodus * Gebyr lesemodus --- .../bidrag/behandling/service/GebyrService.kt | 4 +- .../behandling/transformers/Dtomapper.kt | 2 +- .../grunnlag/InnhentetGrunnlagMapping.kt | 4 +- .../fravedtak/VedtakTilBehandlingMapping.kt | 1 + .../VedtakTilBehandlingMappingFelles.kt | 35 +++++- .../BehandlingTilGrunnlagMappingV2.kt | 6 +- .../behandling/service/GebyrServiceTest.kt | 14 +-- .../service/VedtakTilBehandlingBidragTest.kt | 13 ++ .../VedtakInnhentetGrunnlagTest.kt | 66 +++++++---- .../fattetvedtak/bidrag-innvilget.json | 112 +++++++++++++++++- 10 files changed, 218 insertions(+), 39 deletions(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt index 1933a7c74..a38d4793f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt @@ -30,6 +30,7 @@ class GebyrService( overstyrGebyr = false, ilagtGebyr = beregning.ilagtGebyr, beregnetIlagtGebyr = beregning.ilagtGebyr, + begrunnelse = null, ) } beregnetGebyrErEndret @@ -47,6 +48,7 @@ class GebyrService( overstyrGebyr = false, ilagtGebyr = beregning.ilagtGebyr, beregnetIlagtGebyr = beregning.ilagtGebyr, + begrunnelse = null, ) } } @@ -67,7 +69,7 @@ class GebyrService( overstyrGebyr = request.overstyrGebyr, ilagtGebyr = request.overstyrGebyr != beregning.ilagtGebyr, beregnetIlagtGebyr = beregning.ilagtGebyr, - begrunnelse = request.begrunnelse ?: it.begrunnelse, + begrunnelse = if (!request.overstyrGebyr) null else request.begrunnelse ?: it.begrunnelse, ) } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt index 58c0b381e..8239bfbb3 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/Dtomapper.kt @@ -620,7 +620,7 @@ class Dtomapper( } fun Behandling.mapGebyr() = - if (roller.filter { it.harGebyrsøknad }.isNotEmpty()) { + if (roller.any { it.harGebyrsøknad }) { GebyrDto( gebyrRoller = roller.sortedBy { it.rolletype }.filter { it.harGebyrsøknad }.map { rolle -> diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt index 6913b4585..7a7b1ab9f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/grunnlag/InnhentetGrunnlagMapping.kt @@ -203,10 +203,12 @@ fun List.tilBeregnetInntekt(personobjekter: Set): Set.tilInnhentetGrunnlagUnderholdskostnad(personobjekter: Set): Set = + mapBarnetilsyn(personobjekter) + fun List.tilInnhentetGrunnlagInntekt(personobjekter: Set): Set = mapSkattegrunnlag(personobjekter) + mapAinntekt(personobjekter) + mapKontantstøtte(personobjekter) + - mapBarnetilsyn(personobjekter) + mapBarnetillegg(personobjekter) + mapUtvidetbarnetrygd(personobjekter) + mapSmåbarnstillegg(personobjekter) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt index e3e72a071..dd90cf11d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt @@ -140,6 +140,7 @@ class VedtakTilBehandlingMapping( ) behandling.roller = grunnlagListe.mapRoller(behandling, lesemodus) + grunnlagListe.oppdaterRolleGebyr(behandling) behandling.inntekter = grunnlagListe.mapInntekter(behandling, lesemodus) behandling.husstandsmedlem = grunnlagListe.mapHusstandsmedlem(behandling, lesemodus) behandling.sivilstand = grunnlagListe.mapSivilstand(behandling, lesemodus) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt index 0b3ca0882..45c1dc704 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt @@ -7,6 +7,7 @@ import no.nav.bidrag.behandling.database.datamodell.Husstandsmedlem import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Inntektspost import no.nav.bidrag.behandling.database.datamodell.Rolle +import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr import no.nav.bidrag.behandling.database.datamodell.Sivilstand import no.nav.bidrag.behandling.dto.v1.beregning.ResultatBeregningBarnDto import no.nav.bidrag.behandling.dto.v1.beregning.ResultatBidragberegningDto @@ -40,12 +41,15 @@ import no.nav.bidrag.transport.behandling.felles.grunnlag.BostatusPeriode import no.nav.bidrag.transport.behandling.felles.grunnlag.GrunnlagDto import no.nav.bidrag.transport.behandling.felles.grunnlag.Grunnlagsreferanse import no.nav.bidrag.transport.behandling.felles.grunnlag.InntektsrapporteringPeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.ManueltOverstyrtGebyr import no.nav.bidrag.transport.behandling.felles.grunnlag.NotatGrunnlag import no.nav.bidrag.transport.behandling.felles.grunnlag.Person import no.nav.bidrag.transport.behandling.felles.grunnlag.SivilstandPeriode +import no.nav.bidrag.transport.behandling.felles.grunnlag.SluttberegningGebyr import no.nav.bidrag.transport.behandling.felles.grunnlag.SøknadGrunnlag import no.nav.bidrag.transport.behandling.felles.grunnlag.VirkningstidspunktGrunnlag import no.nav.bidrag.transport.behandling.felles.grunnlag.filtrerBasertPåEgenReferanse +import no.nav.bidrag.transport.behandling.felles.grunnlag.finnGrunnlagSomErReferertAv import no.nav.bidrag.transport.behandling.felles.grunnlag.hentPerson import no.nav.bidrag.transport.behandling.felles.grunnlag.hentPersonMedReferanse import no.nav.bidrag.transport.behandling.felles.grunnlag.innholdTilObjekt @@ -147,8 +151,35 @@ internal fun List.mapRoller( lesemodus: Boolean, ): MutableSet = filter { grunnlagstyperRolle.contains(it.type) } - .mapIndexed { i, it -> it.tilRolle(behandling, if (lesemodus) i.toLong() else null) } - .toMutableSet() + .mapIndexed { i, it -> + it.tilRolle(behandling, if (lesemodus) i.toLong() else null) + }.toMutableSet() + +internal fun List.oppdaterRolleGebyr(behandling: Behandling) = + filtrerBasertPåEgenReferanse(Grunnlagstype.SLUTTBEREGNING_GEBYR) + .groupBy { it.gjelderReferanse } + .forEach { (gjelderReferanse, grunnlag) -> + val person = hentPersonMedReferanse(gjelderReferanse)!! + val rolle = behandling.roller.find { it.ident == person.personIdent }!! + rolle.harGebyrsøknad = true + val sluttberegning = grunnlag.first().innholdTilObjekt() + val manueltOverstyrtGebyr = + finnGrunnlagSomErReferertAv( + Grunnlagstype.MANUELT_OVERSTYRT_GEBYR, + grunnlag.first(), + ).firstOrNull()?.innholdTilObjekt() + rolle.manueltOverstyrtGebyr = + RolleManueltOverstyrtGebyr( + manueltOverstyrtGebyr != null, + sluttberegning.ilagtGebyr, + manueltOverstyrtGebyr?.begrunnelse, + if (manueltOverstyrtGebyr != null) { + !sluttberegning.ilagtGebyr + } else { + sluttberegning.ilagtGebyr + }, + ) + } internal fun List.mapHusstandsmedlem( behandling: Behandling, 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 77a023ad7..85320c0b9 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 @@ -12,6 +12,7 @@ import no.nav.bidrag.behandling.transformers.grunnlag.tilBeregnetInntekt import no.nav.bidrag.behandling.transformers.grunnlag.tilGrunnlagsreferanse import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetArbeidsforhold import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetGrunnlagInntekt +import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetGrunnlagUnderholdskostnad import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetHusstandsmedlemmer import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetSivilstand import no.nav.bidrag.behandling.transformers.grunnlag.valider @@ -103,8 +104,11 @@ class BehandlingTilGrunnlagMappingV2( sortertGrunnlagsListeIkkeBearbeidet.tilInnhentetHusstandsmedlemmer(personobjekter) val beregnetInntekt = sortertGrunnlagsListeBearbeidet.tilBeregnetInntekt(personobjekter) val innhentetInntekter = sortertGrunnlagsListeIkkeBearbeidet.tilInnhentetGrunnlagInntekt(personobjekter) + val innhentetUnderholdskostnad = sortertGrunnlagsListeIkkeBearbeidet.tilInnhentetGrunnlagUnderholdskostnad(personobjekter) - return innhentetInntekter + innhentetArbeidsforhold + innhentetHusstandsmedlemmer + innhentetSivilstand + beregnetInntekt + return innhentetInntekter + innhentetArbeidsforhold + innhentetHusstandsmedlemmer + + innhentetSivilstand + beregnetInntekt + + innhentetUnderholdskostnad } fun Rolle.tilGrunnlagsreferanse() = rolletype.tilGrunnlagstype().tilPersonreferanse(fødselsdato.toCompactString(), id!!.toInt()) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/GebyrServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/GebyrServiceTest.kt index fce7bd498..1cd7b710a 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GebyrServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GebyrServiceTest.kt @@ -126,7 +126,7 @@ class GebyrServiceTest { bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe false - bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" + bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null } @Test @@ -207,14 +207,14 @@ class GebyrServiceTest { fun `skal oppdatere gebyr når det endres til ikke avslag`() { val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100)) val bm = behandling.bidragsmottaker!! - bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(false, true, "Begrunnelse", true) + bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, "Begrunnelse", true) gebyrService.oppdaterGebyrEtterEndringÅrsakAvslag(behandling) bm.manueltOverstyrtGebyr.shouldNotBeNull() bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe false - bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" + bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null } @Test @@ -228,21 +228,21 @@ class GebyrServiceTest { bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe false - bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" + bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null } @Test fun `skal oppdatere gebyr når det endres til ikke avslag og sette ilagtGebyr basert på beregning`() { val behandling = opprettBehandlingForGebyrberegning(BigDecimal(1000000000)) val bm = behandling.bidragsmottaker!! - bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, "Begrunnelse") + bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, "Begrunnelse", beregnetIlagtGebyr = true) gebyrService.oppdaterGebyrEtterEndringÅrsakAvslag(behandling) bm.manueltOverstyrtGebyr.shouldNotBeNull() bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true bm.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe true - bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" + bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null } @Test @@ -276,7 +276,7 @@ class GebyrServiceTest { bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe false - bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" + bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt index 6cd4c02f1..28d54a9c2 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/VedtakTilBehandlingBidragTest.kt @@ -4,6 +4,7 @@ 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.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe import io.mockk.every @@ -386,6 +387,12 @@ class VedtakTilBehandlingBidragTest : CommonVedtakTilBehandlingTest() { it.fødselsdato shouldBe testdataBM.fødselsdato it.navn shouldBe null it.deleted shouldBe false + it.harGebyrsøknad shouldBe true + it.manueltOverstyrtGebyr.shouldNotBeNull() + it.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true + it.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false + it.manueltOverstyrtGebyr!!.begrunnelse shouldBe "test" + it.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe true } val bidragspliktig = roller.find { it.rolletype == Rolletype.BIDRAGSPLIKTIG } bidragspliktig shouldNotBe null @@ -394,6 +401,12 @@ class VedtakTilBehandlingBidragTest : CommonVedtakTilBehandlingTest() { it.fødselsdato shouldBe testdataBP.fødselsdato it.navn shouldBe null it.deleted shouldBe false + it.harGebyrsøknad shouldBe true + it.manueltOverstyrtGebyr.shouldNotBeNull() + it.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false + it.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true + it.manueltOverstyrtGebyr!!.begrunnelse shouldBe null + it.manueltOverstyrtGebyr!!.beregnetIlagtGebyr shouldBe true } val søknadsbarn = roller.find { it.rolletype == Rolletype.BARN } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/transformers/VedtakInnhentetGrunnlagTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/transformers/VedtakInnhentetGrunnlagTest.kt index def678875..4dbd4a7c3 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/VedtakInnhentetGrunnlagTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/VedtakInnhentetGrunnlagTest.kt @@ -8,6 +8,7 @@ import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.transformers.grunnlag.tilGrunnlagPerson import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetArbeidsforhold import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetGrunnlagInntekt +import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetGrunnlagUnderholdskostnad import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetHusstandsmedlemmer import no.nav.bidrag.behandling.transformers.grunnlag.tilInnhentetSivilstand import no.nav.bidrag.behandling.utils.opprettAinntektGrunnlagListe @@ -686,7 +687,7 @@ class VedtakInnhentetGrunnlagTest { .tilInnhentetGrunnlagInntekt(personobjekter) .toList(), ) { - this shouldHaveSize 13 + this shouldHaveSize 12 assertSoftly(hentBarnetillegg()) { it shouldHaveSize 2 it.filtrerBasertPåFremmedReferanse(referanse = grunnlagBp.referanse) shouldHaveSize 1 @@ -766,23 +767,6 @@ class VedtakInnhentetGrunnlagTest { } } } - assertSoftly(hentBarnetilsyn()) { - it shouldHaveSize 1 - assertSoftly(it[0]) { - it.gjelderReferanse.shouldBe(grunnlagBm.referanse) - val barnetilsyn = it.innholdTilObjekt() - barnetilsyn.grunnlag shouldHaveSize 2 - barnetilsyn.datakilde shouldBe GrunnlagDatakilde.FAMILIE_EF_SAK - barnetilsyn.hentBarnetilsynForBarn(søknadsbarnGrunnlag1.referanse) shouldHaveSize 2 - barnetilsyn.hentBarnetilsynForBarn(søknadsbarnGrunnlag2.referanse) shouldHaveSize 0 - assertSoftly(barnetilsyn.grunnlag[0]) { - periode.fom shouldBe LocalDate.parse("2022-01-01") - periode.til shouldBe LocalDate.parse("2022-07-31") - tilsynstype shouldBe Tilsynstype.HELTID - skolealder shouldBe Skolealder.OVER - } - } - } } } @@ -797,8 +781,6 @@ class VedtakInnhentetGrunnlagTest { fun List.hentBarnetillegg() = this.filter { it.type == Grunnlagstype.INNHENTET_INNTEKT_BARNETILLEGG } fun List.hentKontantstøtte() = this.filter { it.type == Grunnlagstype.INNHENTET_INNTEKT_KONTANTSTØTTE } - - fun List.hentBarnetilsyn() = this.filter { it.type == Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN } } @Nested @@ -862,4 +844,48 @@ class VedtakInnhentetGrunnlagTest { } } } + + @Nested + inner class InnhentetUnderholdskostnadTest { + fun List.hentBarnetilsyn() = this.filter { it.type == Grunnlagstype.INNHENTET_INNTEKT_BARNETILSYN } + + @Test + fun `skal mappe innhentet barnetilsyn`() { + val behandling = oppretteBehandling() + behandling.roller = + mutableSetOf( + opprettRolle(behandling, testdataBM), + opprettRolle(behandling, testdataBarn1), + opprettRolle(behandling, testdataBarn2), + ) + val grunnlagListe = + listOf( + opprettBarnetilsynListe().tilGrunnlagEntity(behandling), + ).flatten() + assertSoftly( + grunnlagListe + .tilInnhentetGrunnlagUnderholdskostnad(personobjekter) + .toList(), + ) { + this shouldHaveSize 1 + assertSoftly(hentBarnetilsyn()) { + it shouldHaveSize 1 + assertSoftly(it[0]) { + it.gjelderReferanse.shouldBe(grunnlagBm.referanse) + val barnetilsyn = it.innholdTilObjekt() + barnetilsyn.grunnlag shouldHaveSize 2 + barnetilsyn.datakilde shouldBe GrunnlagDatakilde.FAMILIE_EF_SAK + barnetilsyn.hentBarnetilsynForBarn(søknadsbarnGrunnlag1.referanse) shouldHaveSize 2 + barnetilsyn.hentBarnetilsynForBarn(søknadsbarnGrunnlag2.referanse) shouldHaveSize 0 + assertSoftly(barnetilsyn.grunnlag[0]) { + periode.fom shouldBe LocalDate.parse("2022-01-01") + periode.til shouldBe LocalDate.parse("2022-07-31") + tilsynstype shouldBe Tilsynstype.HELTID + skolealder shouldBe Skolealder.OVER + } + } + } + } + } + } } diff --git a/src/test/resources/__files/fattetvedtak/bidrag-innvilget.json b/src/test/resources/__files/fattetvedtak/bidrag-innvilget.json index 953400649..7b08b6fd5 100644 --- a/src/test/resources/__files/fattetvedtak/bidrag-innvilget.json +++ b/src/test/resources/__files/fattetvedtak/bidrag-innvilget.json @@ -4574,6 +4574,102 @@ "grunnlagsreferanseListe": [], "gjelderReferanse": null, "gjelderBarnReferanse": null + }, + { + "referanse": "SLUTTBEREGNING_GEBYR_person_PERSON_BIDRAGSPLIKTIG_19830916_286", + "type": "SLUTTBEREGNING_GEBYR", + "innhold": { + "ilagtGebyr": true + }, + "grunnlagsreferanseListe": [ + "DELBEREGNING_INNTEKTSBASERT_GEBYR_person_PERSON_BIDRAGSPLIKTIG_19830916_286", + "sjablon_FastsettelsesgebyrBeløp_202401" + ], + "gjelderReferanse": "person_PERSON_BIDRAGSPLIKTIG_19830916_286", + "gjelderBarnReferanse": null + }, + { + "referanse": "sjablon_FastsettelsesgebyrBeløp_202401", + "type": "SJABLON_SJABLONTALL", + "innhold": { + "verdi": 1277.0, + "periode": { + "fom": "2024-01", + "til": null + }, + "sjablon": "FASTSETTELSESGEBYR_BELØP" + }, + "grunnlagsreferanseListe": [], + "gjelderReferanse": null, + "gjelderBarnReferanse": null + }, + { + "referanse": "DELBEREGNING_INNTEKTSBASERT_GEBYR_person_PERSON_BIDRAGSPLIKTIG_19830916_286", + "type": "DELBEREGNING_INNTEKTSBASERT_GEBYR", + "innhold": { + "sumInntekt": 678300.0, + "ileggesGebyr": true + }, + "grunnlagsreferanseListe": [ + "delberegning_DELBEREGNING_SUM_INNTEKT_person_PERSON_BIDRAGSPLIKTIG_19830916_286_person_PERSON_SØKNADSBARN_20201003_608_202204", + "sjablon_NedreInntektsgrenseGebyrBeløp_202401" + ], + "gjelderReferanse": "person_PERSON_BIDRAGSPLIKTIG_19830916_286", + "gjelderBarnReferanse": null + }, + { + "referanse": "sjablon_NedreInntektsgrenseGebyrBeløp_202401", + "type": "SJABLON_SJABLONTALL", + "innhold": { + "verdi": 331200.0, + "periode": { + "fom": "2024-01", + "til": null + }, + "sjablon": "NEDRE_INNTEKTSGRENSE_GEBYR_BELØP" + }, + "grunnlagsreferanseListe": [], + "gjelderReferanse": null, + "gjelderBarnReferanse": null + }, + { + "referanse": "SLUTTBEREGNING_GEBYR_person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "type": "SLUTTBEREGNING_GEBYR", + "innhold": { + "ilagtGebyr": false + }, + "grunnlagsreferanseListe": [ + "DELBEREGNING_INNTEKTSBASERT_GEBYR_person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "MANUELT_OVERSTYRT_GEBYR_person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "sjablon_FastsettelsesgebyrBeløp_202401" + ], + "gjelderReferanse": "person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "gjelderBarnReferanse": null + }, + { + "referanse": "MANUELT_OVERSTYRT_GEBYR_person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "type": "MANUELT_OVERSTYRT_GEBYR", + "innhold": { + "ilagtGebyr": false, + "begrunnelse": "test" + }, + "grunnlagsreferanseListe": [], + "gjelderReferanse": "person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "gjelderBarnReferanse": null + }, + { + "referanse": "DELBEREGNING_INNTEKTSBASERT_GEBYR_person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "type": "DELBEREGNING_INNTEKTSBASERT_GEBYR", + "innhold": { + "sumInntekt": 473500.0, + "ileggesGebyr": true + }, + "grunnlagsreferanseListe": [ + "delberegning_DELBEREGNING_SUM_INNTEKT_person_PERSON_BIDRAGSMOTTAKER_19790718_284_person_PERSON_SØKNADSBARN_20201003_608_202204", + "sjablon_NedreInntektsgrenseGebyrBeløp_202401" + ], + "gjelderReferanse": "person_PERSON_BIDRAGSMOTTAKER_19790718_284", + "gjelderBarnReferanse": null } ], "stønadsendringListe": [ @@ -4711,7 +4807,7 @@ "skyldner": "{bpIdent}", "kravhaver": "NAV", "mottaker": "NAV", - "beløp": 0, + "beløp": 1270, "valutakode": "NOK", "resultatkode": "GEBYR_ILAGT", "innkreving": "MED_INNKREVING", @@ -4720,7 +4816,9 @@ "referanse": "c41b3d5e-bad9-4ede-ab2e-35b68df8ca26", "delytelseId": null, "eksternReferanse": null, - "grunnlagReferanseListe": [], + "grunnlagReferanseListe": [ + "sluttberegning_person_PERSON_SØKNADSBARN_20201003_608_202408" + ], "betaltBeløp": null }, { @@ -4729,16 +4827,18 @@ "skyldner": "{bmIdent}", "kravhaver": "NAV", "mottaker": "NAV", - "beløp": 0, - "valutakode": "NOK", - "resultatkode": "GEBYR_ILAGT", + "beløp": null, + "valutakode": null, + "resultatkode": "GEBYR_FRITTATT", "innkreving": "MED_INNKREVING", "beslutning": "ENDRING", "omgjørVedtakId": null, "referanse": "8df09483-4547-488c-921a-821dfd24a4b5", "delytelseId": null, "eksternReferanse": null, - "grunnlagReferanseListe": [], + "grunnlagReferanseListe": [ + "SLUTTBEREGNING_GEBYR_person_PERSON_BIDRAGSMOTTAKER_19790718_284" + ], "betaltBeløp": null }, { From 4f2e7279df5794a848db4589901f56002bfcddc5 Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Mon, 9 Dec 2024 14:11:44 +0100 Subject: [PATCH 3/3] =?UTF-8?q?Beregning=20innbetalt=20bel=C3=B8p=20(#638)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Beregning innbetalt beløp * Beregning innbetalt beløp --- .../v1/beregning/ResultatBeregningFelles.kt | 2 ++ .../behandling/service/BeregningService.kt | 2 +- .../fravedtak/VedtakTilBehandlingMapping.kt | 2 ++ .../VedtakTilBehandlingMappingFelles.kt | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/beregning/ResultatBeregningFelles.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/beregning/ResultatBeregningFelles.kt index 3a128f9cf..4d2390277 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/beregning/ResultatBeregningFelles.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v1/beregning/ResultatBeregningFelles.kt @@ -3,10 +3,12 @@ package no.nav.bidrag.behandling.dto.v1.beregning import no.nav.bidrag.domene.ident.Personident +import java.math.BigDecimal import java.time.LocalDate data class ResultatRolle( val ident: Personident?, val navn: String, val fødselsdato: LocalDate, + val innbetaltBeløp: BigDecimal? = null, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt index 6c642331d..bbea62dde 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BeregningService.kt @@ -49,7 +49,7 @@ private val LOGGER = KotlinLogging.logger {} private fun Rolle.tilPersonident() = ident?.let { Personident(it) } -private fun Rolle.mapTilResultatBarn() = ResultatRolle(tilPersonident(), hentNavn(), fødselsdato) +private fun Rolle.mapTilResultatBarn() = ResultatRolle(tilPersonident(), hentNavn(), fødselsdato, innbetaltBeløp) @Service class BeregningService( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt index dd90cf11d..051f4ca11 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMapping.kt @@ -140,7 +140,9 @@ class VedtakTilBehandlingMapping( ) behandling.roller = grunnlagListe.mapRoller(behandling, lesemodus) + oppdaterDirekteOppgjørBeløp(behandling, lesemodus) grunnlagListe.oppdaterRolleGebyr(behandling) + behandling.inntekter = grunnlagListe.mapInntekter(behandling, lesemodus) behandling.husstandsmedlem = grunnlagListe.mapHusstandsmedlem(behandling, lesemodus) behandling.sivilstand = grunnlagListe.mapSivilstand(behandling, lesemodus) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt index 45c1dc704..53e0004d1 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/vedtak/mapping/fravedtak/VedtakTilBehandlingMappingFelles.kt @@ -34,6 +34,7 @@ import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering import no.nav.bidrag.domene.enums.rolle.Rolletype import no.nav.bidrag.domene.enums.rolle.SøktAvType +import no.nav.bidrag.domene.enums.vedtak.Engangsbeløptype import no.nav.bidrag.domene.enums.vedtak.Vedtakstype import no.nav.bidrag.sivilstand.SivilstandApi import no.nav.bidrag.transport.behandling.felles.grunnlag.BaseGrunnlag @@ -119,6 +120,7 @@ fun VedtakDto.tilBeregningResultatBidrag(): ResultatBidragberegningDto = barn.ident, barn.navn ?: hentPersonVisningsnavn(barn.ident?.verdi)!!, barn.fødselsdato, + hentDirekteOppgjørBeløp(barnIdent.verdi), ), perioder = stønadsendring.periodeListe.map { @@ -155,6 +157,22 @@ internal fun List.mapRoller( it.tilRolle(behandling, if (lesemodus) i.toLong() else null) }.toMutableSet() +internal fun VedtakDto.oppdaterDirekteOppgjørBeløp( + behandling: Behandling, + lesemodus: Boolean, +) = if (lesemodus) { + behandling.søknadsbarn.forEach { + it.innbetaltBeløp = hentDirekteOppgjørBeløp(it.ident!!) + } +} else { + null +} + +internal fun VedtakDto.hentDirekteOppgjørBeløp(kravhaver: String) = + engangsbeløpListe + .find { it.type == Engangsbeløptype.DIREKTE_OPPGJØR && it.kravhaver.verdi == kravhaver } + ?.beløp + internal fun List.oppdaterRolleGebyr(behandling: Behandling) = filtrerBasertPåEgenReferanse(Grunnlagstype.SLUTTBEREGNING_GEBYR) .groupBy { it.gjelderReferanse }