Skip to content

Commit

Permalink
Endring gebyr api
Browse files Browse the repository at this point in the history
  • Loading branch information
ugur93 committed Dec 4, 2024
1 parent f9949a2 commit 99cebb2
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package no.nav.bidrag.behandling.controller.v2
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.security.SecurityRequirement
import jakarta.validation.Valid
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterGebyrResponsDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto
import no.nav.bidrag.behandling.dto.v2.behandling.GebyrRolleDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterGebyrDto
import no.nav.bidrag.behandling.service.BehandlingService
import no.nav.bidrag.behandling.service.GebyrService
import no.nav.bidrag.behandling.transformers.behandling.tilDto
import no.nav.bidrag.behandling.transformers.gebyr.tilDto
import no.nav.bidrag.behandling.transformers.tilDto
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PutMapping
import org.springframework.web.bind.annotation.RequestBody
Expand All @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestBody
class GebyrController(
private val gebyrService: GebyrService,
private val behandlingService: BehandlingService,
private val vedtakGrunnlagMapper: VedtakGrunnlagMapper,
) {
@Suppress("unused")
@PutMapping("/behandling/{behandlingsid}/gebyr")
Expand All @@ -29,23 +30,21 @@ class GebyrController(
@PathVariable behandlingsid: Long,
@Valid
@RequestBody(required = true)
request: OppdaterManueltGebyrDto,
): OppdaterGebyrResponsDto {
request: OppdaterGebyrDto,
): GebyrRolleDto {
gebyrService.oppdaterManueltOverstyrtGebyr(behandlingService.hentBehandlingById(behandlingsid), request)
return tilRespons(behandlingsid, request.rolleId)
}

private fun tilRespons(
behandlingsId: Long,
rolleId: Long,
): OppdaterGebyrResponsDto {
): GebyrRolleDto {
val behandling = behandlingService.hentBehandlingById(behandlingsId)
return behandling.roller.find { it.id == rolleId }!!.let { rolle ->
OppdaterGebyrResponsDto(
rolle.tilDto(),
overstyrGebyr = rolle.manueltOverstyrtGebyr?.overstyrGebyr == true,
begrunnelse = if (rolle.manueltOverstyrtGebyr?.overstyrGebyr == true) rolle.manueltOverstyrtGebyr?.begrunnelse else null,
)
vedtakGrunnlagMapper
.beregnGebyr(behandling, rolle)
.tilDto(rolle)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import no.nav.bidrag.behandling.dto.v1.behandling.SivilstandDto
import no.nav.bidrag.behandling.dto.v1.behandling.VirkningstidspunktDto
import no.nav.bidrag.behandling.dto.v2.boforhold.BoforholdDtoV2
import no.nav.bidrag.behandling.dto.v2.gebyr.GebyrValideringsfeilDto
import no.nav.bidrag.behandling.dto.v2.gebyr.ManueltOverstyrGebyrDto
import no.nav.bidrag.behandling.dto.v2.inntekt.InntekterDtoV2
import no.nav.bidrag.behandling.dto.v2.inntekt.InntektspostDtoV2
import no.nav.bidrag.behandling.dto.v2.samvær.SamværDto
Expand Down Expand Up @@ -135,12 +134,13 @@ data class GebyrDto(
data class GebyrRolleDto(
val inntekt: GebyrInntektDto,
val beløpGebyrsats: BigDecimal,
val manueltOverstyrtGebyr: ManueltOverstyrGebyrDto? = null,
val beregnetIlagtGebyr: Boolean,
val endeligIlagtGebyr: Boolean,
val begrunnelse: String? = null,
val rolle: RolleDto,
) {
val erManueltOverstyrt get() = beregnetIlagtGebyr != endeligIlagtGebyr

data class GebyrInntektDto(
val skattepliktigInntekt: BigDecimal,
val maksBarnetillegg: BigDecimal? = null,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
package no.nav.bidrag.behandling.dto.v2.gebyr

import io.swagger.v3.oas.annotations.media.Schema
import no.nav.bidrag.behandling.dto.v1.behandling.RolleDto

data class OppdaterManueltGebyrDto(
data class OppdaterGebyrDto(
val rolleId: Long,
val overstyrGebyr: Boolean = false,
val begrunnelse: String? = null,
@Deprecated("Bruk begrunnelse")
val overstyrtGebyr: ManueltOverstyrGebyrDto? = null,
)

data class OppdaterGebyrResponsDto(
val rolle: RolleDto,
@Schema(description = "Om gebyr skal overstyres. Settes til motsatte verdi av beregnet verdi")
val overstyrGebyr: Boolean = false,
val begrunnelse: String? = null,
)
Expand Down
29 changes: 10 additions & 19 deletions src/main/kotlin/no/nav/bidrag/behandling/service/GebyrService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package no.nav.bidrag.behandling.service

import no.nav.bidrag.behandling.database.datamodell.Behandling
import no.nav.bidrag.behandling.database.datamodell.RolleManueltOverstyrtGebyr
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterManueltGebyrDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterGebyrDto
import no.nav.bidrag.behandling.transformers.tilType
import no.nav.bidrag.behandling.transformers.validerSann
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper
Expand All @@ -11,8 +11,6 @@ import no.nav.bidrag.domene.enums.behandling.TypeBehandling
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

val defaultIlagtGebyrVedAvslag = false

@Service
class GebyrService(
private val vedtakGrunnlagMapper: VedtakGrunnlagMapper,
Expand All @@ -23,24 +21,19 @@ class GebyrService(
.roller
.filter { it.harGebyrsøknad }
.forEach { rolle ->
val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle)
rolle.manueltOverstyrtGebyr =
(rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).copy(
overstyrGebyr = false,
ilagtGebyr =
if (behandling.avslag == null) {
val beregning = vedtakGrunnlagMapper.beregnGebyr(behandling, rolle)
!beregning.ilagtGebyr
} else {
defaultIlagtGebyrVedAvslag
},
ilagtGebyr = beregning.ilagtGebyr,
)
}
}

@Transactional
fun oppdaterManueltOverstyrtGebyr(
behandling: Behandling,
request: OppdaterManueltGebyrDto,
request: OppdaterGebyrDto,
) {
val rolle =
behandling.roller.find { it.id == request.rolleId }
Expand All @@ -51,19 +44,13 @@ class GebyrService(
(rolle.manueltOverstyrtGebyr ?: RolleManueltOverstyrtGebyr()).let {
it.copy(
overstyrGebyr = request.overstyrGebyr,
ilagtGebyr =
if (behandling.avslag == null) {
request.overstyrGebyr != beregning.ilagtGebyr
} else {
// Default så er det fritatt ved avslag
request.overstyrGebyr != defaultIlagtGebyrVedAvslag
},
ilagtGebyr = request.overstyrGebyr != beregning.ilagtGebyr,
begrunnelse = request.begrunnelse ?: it.begrunnelse,
)
}
}

private fun Behandling.validerOppdatering(request: OppdaterManueltGebyrDto) {
private fun Behandling.validerOppdatering(request: OppdaterGebyrDto) {
val feilListe = mutableSetOf<String>()

feilListe.validerSann(tilType() == TypeBehandling.BIDRAG, "Kan bare oppdatere gebyr på en bidragsbehandling")
Expand All @@ -76,6 +63,10 @@ class GebyrService(
rolle.harGebyrsøknad,
"Kan ikke endre gebyr på en rolle som ikke har gebyrsøknad",
)
feilListe.validerSann(
request.overstyrGebyr || request.begrunnelse.isNullOrEmpty(),
"Kan ikke sette begrunnelse hvis gebyr ikke er overstyrt",
)

if (feilListe.isNotEmpty()) {
ugyldigForespørsel(feilListe.toSet().joinToString("\n"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,11 +294,13 @@ class NotatOpplysningerService(
beregnetIlagtGebyr = it.beregnetIlagtGebyr,
beløpGebyrsats = it.beløpGebyrsats,
manueltOverstyrtGebyr =
it.manueltOverstyrtGebyr?.let {
if (it.erManueltOverstyrt) {
NotatGebyrRolleDto.NotatManueltOverstyrGebyrDto(
ilagtGebyr = it.ilagtGebyr,
ilagtGebyr = it.endeligIlagtGebyr,
begrunnelse = it.begrunnelse,
)
} else {
null
},
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ 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
Expand Down Expand Up @@ -76,20 +75,27 @@ import java.math.BigDecimal
import java.math.RoundingMode
import java.time.LocalDate

fun BeregnGebyrResultat.tilDto(rolle: Rolle) =
GebyrRolleDto(
fun BeregnGebyrResultat.tilDto(rolle: Rolle): GebyrRolleDto {
val erManueltOverstyrt = rolle.manueltOverstyrtGebyr?.overstyrGebyr == true

return GebyrRolleDto(
inntekt =
GebyrRolleDto.GebyrInntektDto(
skattepliktigInntekt = skattepliktigInntekt,
maksBarnetillegg = maksBarnetillegg,
),
manueltOverstyrtGebyr = rolle.manueltOverstyrtGebyr?.tilDto(),
beregnetIlagtGebyr = if (rolle.behandling.avslag == null) ilagtGebyr else defaultIlagtGebyrVedAvslag,
begrunnelse = rolle.manueltOverstyrtGebyr?.begrunnelse,
endeligIlagtGebyr = rolle.manueltOverstyrtGebyr?.ilagtGebyr == true,
beregnetIlagtGebyr = ilagtGebyr,
begrunnelse = if (erManueltOverstyrt) rolle.manueltOverstyrtGebyr?.begrunnelse else null,
endeligIlagtGebyr =
if (erManueltOverstyrt) {
rolle.manueltOverstyrtGebyr!!.ilagtGebyr == true
} else {
ilagtGebyr
},
beløpGebyrsats = beløpGebyrsats,
rolle = rolle.tilDto(),
)
}

fun Behandling.tilInntektberegningDto(rolle: Rolle): BeregnValgteInntekterGrunnlag =
BeregnValgteInntekterGrunnlag(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ class VedtakGrunnlagMapper(
}
} else {
beregnGebyrApi.beregnGebyr(grunnlagsliste, rolle.tilGrunnlagsreferanse())
}.filterNotNull()
}
val delberegningSumInntekt = gebyrBeregning.gebyrDelberegningSumInntekt
val inntektSiste12Mnd = gebyrBeregning.finnInntektSiste12Mnd(rolle)
return BeregnGebyrResultat(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ 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.OppdaterManueltGebyrDto
import no.nav.bidrag.behandling.dto.v2.gebyr.OppdaterGebyrDto
import no.nav.bidrag.behandling.transformers.beregning.ValiderBeregning
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.BehandlingTilGrunnlagMappingV2
import no.nav.bidrag.behandling.transformers.vedtak.mapping.tilvedtak.VedtakGrunnlagMapper
Expand Down Expand Up @@ -57,7 +57,7 @@ class GebyrServiceTest {
val bm = behandling.bidragsmottaker!!
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = true,
begrunnelse = "Begrunnelse",
Expand All @@ -79,7 +79,7 @@ class GebyrServiceTest {
assertThrows<HttpClientErrorException> {
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = true,
),
Expand All @@ -94,7 +94,7 @@ class GebyrServiceTest {
val bm = behandling.bidragsmottaker!!
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = true,
begrunnelse = "Begrunnelse",
Expand All @@ -114,10 +114,9 @@ class GebyrServiceTest {
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(overstyrGebyr = true, ilagtGebyr = true, begrunnelse = "Begrunnelse")
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = false,
begrunnelse = "Begrunnelse",
),
)

Expand All @@ -127,34 +126,52 @@ class GebyrServiceTest {
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}

@Test
fun `skal ikke kunne sette begrunnelse hvis ikke overstyrt`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
val bm = behandling.bidragsmottaker!!
val exception =
assertThrows<HttpClientErrorException> {
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = false,
begrunnelse = "Test",
),
)
}
exception.message shouldContain "Kan ikke sette begrunnelse hvis gebyr ikke er overstyrt"
}

@Test
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
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, false, null)
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = false,
begrunnelse = "Begrunnelse",
),
)

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe null
}

@Test
fun `skal sette gebyrvalg og begrunnelse ved avslag til innvilget`() {
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(100))
val behandling = opprettBehandlingForGebyrberegning(BigDecimal(1000000000000))
val bm = behandling.bidragsmottaker!!
behandling.avslag = Resultatkode.BIDRAGSPLIKTIG_ER_DØD
gebyrService.oppdaterManueltOverstyrtGebyr(
behandling,
OppdaterManueltGebyrDto(
OppdaterGebyrDto(
rolleId = bm.id!!,
overstyrGebyr = true,
begrunnelse = "Begrunnelse",
Expand Down Expand Up @@ -184,12 +201,12 @@ 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(true, false, "Begrunnelse")
bm.manueltOverstyrtGebyr = RolleManueltOverstyrtGebyr(true, true, "Begrunnelse")
gebyrService.oppdaterGebyrEtterEndringÅrsakAvslag(behandling)

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}

Expand All @@ -202,7 +219,7 @@ class GebyrServiceTest {

bm.manueltOverstyrtGebyr.shouldNotBeNull()
bm.manueltOverstyrtGebyr!!.overstyrGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe false
bm.manueltOverstyrtGebyr!!.ilagtGebyr shouldBe true
bm.manueltOverstyrtGebyr!!.begrunnelse shouldBe "Begrunnelse"
}
}
Expand Down
Loading

0 comments on commit 99cebb2

Please sign in to comment.