diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/GebyrController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/GebyrController.kt index 7978d67db..cc1cae1da 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/GebyrController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/v2/GebyrController.kt @@ -43,7 +43,8 @@ class GebyrController( return behandling.roller.find { it.id == rolleId }!!.let { rolle -> OppdaterGebyrResponsDto( rolle.tilDto(), - rolle.manueltOverstyrtGebyr?.tilDto(), + overstyrGebyr = rolle.manueltOverstyrtGebyr?.overstyrGebyr == true, + begrunnelse = if (rolle.manueltOverstyrtGebyr?.overstyrGebyr == true) rolle.manueltOverstyrtGebyr?.begrunnelse else null, ) } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt index c8ec24ad2..0eb521c1f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/behandling/BehandlingDtoV2.kt @@ -137,6 +137,8 @@ data class GebyrRolleDto( val beløpGebyrsats: BigDecimal, val manueltOverstyrtGebyr: ManueltOverstyrGebyrDto? = null, val beregnetIlagtGebyr: Boolean, + val endeligIlagtGebyr: Boolean, + val begrunnelse: String? = null, val rolle: RolleDto, ) { data class GebyrInntektDto( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilDto.kt index 830300e4f..640018eed 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilDto.kt @@ -11,7 +11,6 @@ fun Behandling.validerGebyr() = .map { GebyrValideringsfeilDto( gjelder = it.tilDto(), - måBestemmeGebyr = avslag != null && it.manueltOverstyrtGebyr?.ilagtGebyr == null, manglerBegrunnelse = if (it.manueltOverstyrtGebyr?.overstyrGebyr == true) { it.manueltOverstyrtGebyr?.begrunnelse.isNullOrEmpty() @@ -23,10 +22,9 @@ fun Behandling.validerGebyr() = data class GebyrValideringsfeilDto( val gjelder: RolleDto, - val måBestemmeGebyr: Boolean, val manglerBegrunnelse: Boolean, ) { @get:JsonIgnore val harFeil - get() = manglerBegrunnelse || måBestemmeGebyr + get() = manglerBegrunnelse } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/OppdaterManueltGebyr.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/OppdaterManueltGebyr.kt index c5efc0f2c..a05ab5801 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/OppdaterManueltGebyr.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/OppdaterManueltGebyr.kt @@ -5,12 +5,16 @@ import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto data class OppdaterManueltGebyrDto( val rolleId: Long, - val overstyrtGebyr: ManueltOverstyrGebyrDto?, + val overstyrGebyr: Boolean = false, + val begrunnelse: String? = null, + @Deprecated("Bruk begrunnelse") + val overstyrtGebyr: ManueltOverstyrGebyrDto? = null, ) data class OppdaterGebyrResponsDto( val rolle: RolleDto, - val overstyrtGebyr: ManueltOverstyrGebyrDto?, + val overstyrGebyr: Boolean = false, + val begrunnelse: String? = null, ) data class ManueltOverstyrGebyrDto( 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 bdf756868..fdbb8e988 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt @@ -8,10 +8,11 @@ import no.nav.bidrag.behandling.transformers.validerSann import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper import no.nav.bidrag.behandling.ugyldigForespørsel import no.nav.bidrag.domene.enums.behandling.TypeBehandling -import no.nav.bidrag.transport.felles.ifTrue import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +val defaultIlagtGebyrVedAvslag = false + @Service class GebyrService( private val vedtakGrunnlagMapper: VedtakGrunnlagMapper, @@ -23,16 +24,16 @@ class GebyrService( .filter { it.harGebyrsøknad } .forEach { rolle -> rolle.manueltOverstyrtGebyr = - (rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).let { - it.copy( - overstyrGebyr = behandling.avslag != null, - ilagtGebyr = - (behandling.avslag == null).ifTrue { - val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle) - !beregning.ilagtGebyr - }, - ) - } + (rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).copy( + overstyrGebyr = false, + ilagtGebyr = + if (behandling.avslag == null) { + val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle) + !beregning.ilagtGebyr + } else { + defaultIlagtGebyrVedAvslag + }, + ) } } @@ -49,9 +50,15 @@ class GebyrService( rolle.manueltOverstyrtGebyr = (rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).let { it.copy( - overstyrGebyr = request.overstyrtGebyr != null, - ilagtGebyr = request.overstyrtGebyr?.ilagtGebyr ?: (behandling.avslag == null).ifTrue { !beregning.ilagtGebyr }, - begrunnelse = request.overstyrtGebyr?.begrunnelse ?: it.begrunnelse, + overstyrGebyr = request.overstyrGebyr, + ilagtGebyr = + if (behandling.avslag == null) { + request.overstyrGebyr != beregning.ilagtGebyr + } else { + // Default så er det fritatt ved avslag + request.overstyrGebyr != defaultIlagtGebyrVedAvslag + }, + begrunnelse = request.begrunnelse ?: it.begrunnelse, ) } } @@ -70,13 +77,6 @@ class GebyrService( "Kan ikke endre gebyr på en rolle som ikke har gebyrsøknad", ) - if (avslag == null) { - feilListe.validerSann( - request.overstyrtGebyr?.ilagtGebyr == null, - "Kan ikke sette gebyr til samme som beregnet gebyr når det ikke er avslag", - ) - } - if (feilListe.isNotEmpty()) { ugyldigForespørsel(feilListe.toSet().joinToString("\n")) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt index e3d9c276d..bcd483b37 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/BeregningDtoMapping.kt @@ -19,6 +19,7 @@ import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftBeregningDto import no.nav.bidrag.behandling.dto.v2.behandling.UtgiftspostDto import no.nav.bidrag.behandling.dto.v2.underhold.DatoperiodeDto import no.nav.bidrag.behandling.dto.v2.underhold.UnderholdskostnadDto +import no.nav.bidrag.behandling.service.defaultIlagtGebyrVedAvslag import no.nav.bidrag.behandling.transformers.behandling.tilDto import no.nav.bidrag.behandling.transformers.gebyr.tilDto import no.nav.bidrag.behandling.transformers.utgift.tilBeregningDto @@ -83,7 +84,9 @@ fun BeregnGebyrResultat.tilDto(rolle: Rolle) = maksBarnetillegg = maksBarnetillegg, ), manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr?.tilDto(), - beregnetIlagtGebyr = ilagtGebyr, + beregnetIlagtGebyr = if (rolle.behandling.avslag == null) ilagtGebyr else defaultIlagtGebyrVedAvslag, + begrunnelse = rolle.manueltOverstyrtGebyr?.begrunnelse, + endeligIlagtGebyr = rolle.manueltOverstyrtGebyr?.ilagtGebyr == true, beløpGebyrsats = beløpGebyrsats, rolle = rolle.tilDto(), ) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilTest.kt index 279cb48ac..7703af27f 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/dto/v2/gebyr/GebyrValideringsfeilTest.kt @@ -19,7 +19,6 @@ class GebyrValideringsfeilTest { val resultat = behandling.validerGebyr() resultat.shouldHaveSize(1) resultat.first().manglerBegrunnelse shouldBe true - resultat.first().måBestemmeGebyr shouldBe false } @Test @@ -33,7 +32,6 @@ class GebyrValideringsfeilTest { val resultat = behandling.validerGebyr() resultat.shouldHaveSize(1) resultat.first().manglerBegrunnelse shouldBe true - resultat.first().måBestemmeGebyr shouldBe true } @Test 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 b0d8d76cb..0181371f6 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/GebyrServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/GebyrServiceTest.kt @@ -8,7 +8,6 @@ import io.mockk.junit5.MockKExtension import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr -import no.nav.bidrag.behandling.dto.v2.gebyr.ManueltOverstyrGebyrDto import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BehandlingTilGrunnlagMappingV2 @@ -60,7 +59,8 @@ class GebyrServiceTest { behandling, OppdaterManueltGebyrDto( rolleId = bm.id!!, - overstyrtGebyr = ManueltOverstyrGebyrDto(begrunnelse = "Begrunnelse"), + overstyrGebyr = true, + begrunnelse = "Begrunnelse", ), ) @@ -70,23 +70,6 @@ class GebyrServiceTest { bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" } - @Test - fun `skal feile hvis det settes gebyr for en rolle som ikke har gebyrsøknad`() { - val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100)) - val bm = behandling.bidragsmottaker!! - val exception = - assertThrows { - gebyrService.oppdaterManueltOverstyrtGebyr( - behandling, - OppdaterManueltGebyrDto( - rolleId = bm.id!!, - overstyrtGebyr = ManueltOverstyrGebyrDto(ilagtGebyr = false, begrunnelse = "Begrunnelse"), - ), - ) - } - exception.message shouldContain "Kan ikke sette gebyr til samme som beregnet gebyr når det ikke er avslag" - } - @Test fun `skal feile hvis gebyrvalg blir satt hvis ikke avslag`() { val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100)) @@ -98,7 +81,7 @@ class GebyrServiceTest { behandling, OppdaterManueltGebyrDto( rolleId = bm.id!!, - overstyrtGebyr = ManueltOverstyrGebyrDto(begrunnelse = "Begrunnelse"), + overstyrGebyr = true, ), ) } @@ -113,7 +96,8 @@ class GebyrServiceTest { behandling, OppdaterManueltGebyrDto( rolleId = bm.id!!, - overstyrtGebyr = ManueltOverstyrGebyrDto(begrunnelse = "Begrunnelse"), + overstyrGebyr = true, + begrunnelse = "Begrunnelse", ), ) @@ -132,18 +116,19 @@ class GebyrServiceTest { behandling, OppdaterManueltGebyrDto( rolleId = bm.id!!, - overstyrtGebyr = null, + overstyrGebyr = false, + begrunnelse = "Begrunnelse", ), ) bm.manueltOverstyrtGebyr.shouldNotBeNull() bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false - bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true + bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" } @Test - fun `skal oppdatere uten gebyrvalg ved avslag`() { + fun `skal oppdatere til defaultverdi fritatt ved avslag når ikke overstyr gebyr`() { val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100)) val bm = behandling.bidragsmottaker!! behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD @@ -151,18 +136,19 @@ class GebyrServiceTest { behandling, OppdaterManueltGebyrDto( rolleId = bm.id!!, - overstyrtGebyr = ManueltOverstyrGebyrDto(ilagtGebyr = null, begrunnelse = "Begrunnelse"), + overstyrGebyr = false, + begrunnelse = "Begrunnelse", ), ) bm.manueltOverstyrtGebyr.shouldNotBeNull() - bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true - bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe null + bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false + bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" } @Test - fun `skal sette gebyrvalg og begrunnelse ved avslag`() { + fun `skal sette gebyrvalg og begrunnelse ved avslag til innvilget`() { val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100)) val bm = behandling.bidragsmottaker!! behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD @@ -170,26 +156,27 @@ class GebyrServiceTest { behandling, OppdaterManueltGebyrDto( rolleId = bm.id!!, - overstyrtGebyr = ManueltOverstyrGebyrDto(ilagtGebyr = false, begrunnelse = "Begrunnelse"), + overstyrGebyr = true, + begrunnelse = "Begrunnelse", ), ) bm.manueltOverstyrtGebyr.shouldNotBeNull() bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true - bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false + bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse" } @Test - fun `skal oppdatere gebyr når det endres til avslag`() { + fun `skal oppdatere gebyr til fritatt når det endres til avslag`() { val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100)) val bm = behandling.bidragsmottaker!! behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD gebyrService.oppdaterGebyrEtterEndringÅrsakAvslag(behandling) bm.manueltOverstyrtGebyr.shouldNotBeNull() - bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe true - bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe null + bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false + bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null } 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 d560aaca6..012043c9b 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/transformers/DtoMapperMockTest.kt @@ -250,6 +250,7 @@ class DtoMapperMockTest { ) behandling.bidragsmottaker!!.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, "Begrunnelse") + behandling.bidragspliktig!!.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, true, null) val behandlingDto = dtomapper.tilDto(behandling) behandlingDto.shouldNotBeNull() @@ -259,25 +260,24 @@ class DtoMapperMockTest { gebyr.valideringsfeil!!.shouldHaveSize(1) assertSoftly(gebyr.valideringsfeil.first()) { it.gjelder.rolletype shouldBe Rolletype.BIDRAGSPLIKTIG - it.måBestemmeGebyr shouldBe true - it.manglerBegrunnelse shouldBe false + it.manglerBegrunnelse shouldBe true it.harFeil shouldBe true } assertSoftly(gebyr.gebyrRoller.find { it.rolle.rolletype == Rolletype.BIDRAGSMOTTAKER }!!) { it.inntekt.skattepliktigInntekt shouldBe BigDecimal(90000) it.inntekt.maksBarnetillegg shouldBe null it.inntekt.totalInntekt shouldBe BigDecimal(90000) + it.endeligIlagtGebyr shouldBe false it.beregnetIlagtGebyr shouldBe false - it.manueltOverstyrtGebyr.shouldNotBeNull() - it.manueltOverstyrtGebyr.ilagtGebyr shouldBe false - it.manueltOverstyrtGebyr.begrunnelse shouldBe "Begrunnelse" + it.begrunnelse shouldBe "Begrunnelse" } assertSoftly(gebyr.gebyrRoller.find { it.rolle.rolletype == Rolletype.BIDRAGSPLIKTIG }!!) { it.inntekt.skattepliktigInntekt shouldBe BigDecimal(0) it.inntekt.maksBarnetillegg shouldBe null it.inntekt.totalInntekt shouldBe BigDecimal(0) it.beregnetIlagtGebyr shouldBe false - it.manueltOverstyrtGebyr.shouldBeNull() + it.endeligIlagtGebyr shouldBe true + it.begrunnelse shouldBe null } } }